diff --git a/public/css/iframeSearch.css b/public/css/iframeSearch.css
index ae5145cec655e51de98c87b4d293393993933621..19ff2c380eb46f4b4a87444193d038d88dbdcb55 100644
--- a/public/css/iframeSearch.css
+++ b/public/css/iframeSearch.css
@@ -2,4 +2,4 @@
  * Bootstrap v3.3.4 (http://getbootstrap.com)
  * Copyright 2011-2015 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}hr,img{border:0}.ol-viewport .ol-unselectable,html{-webkit-tap-highlight-color:transparent}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}*,:after,:before,input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{box-sizing:border-box}html{font-size:10px}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-right:15px;padding-left:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{min-width:0;margin:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-group-sm .form-control,.input-sm{font-size:12px;border-radius:3px;padding:5px 10px}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=datetime-local],input[type=month],input[type=time]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover,.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group,.input-group-btn>.btn+.btn{margin-left:-1px}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;vertical-align:baseline;text-align:center}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}a.badge:focus,a.badge:hover,a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}#clearInput,#closer,#doSearch,#map,#results .result,.carousel-indicators li,.map-marker,.marker,button.close{cursor:pointer}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.close{line-height:1}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400}.carousel-caption,.carousel-control{text-shadow:0 1px 2px rgba(0,0,0,.6)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;background:0 0;border:0}.modal{position:fixed;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.ol-attribution li:not(:last-child):after,.ol-popup:after,.ol-popup:before{content:" "}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}.ol-control{display:none}}.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.result p.address,.result p.city,.result p.opening-hours,.result p.population,.result p.title{font-size:11px;margin-bottom:0}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}#closer,.marker{width:25px;text-align:center;font-weight:700}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}a:hover{text-decoration:none}#results .result{border:1px solid #d3d3d3;border-top:0;border-radius:2px;padding:10px}.result p.title{font-weight:700}.result p.type{font-size:10px;color:grey;margin-bottom:0}.row div{padding:0}a.navbar-brand{line-height:100%!important;padding:0}.logo{height:100%;font-family:Liberation Sans,sans-serif}.logo>h1{color:#ff8000;height:100%;padding-left:20px;padding-top:8px;font-family:sans-serif;font-style:italic;margin:0;font-weight:700;line-height:1;white-space:nowrap}.logo>h1>small{color:#ff8000;font-size:.5em}nav{margin-bottom:0!important}.marker{background-image:url(/img/marker-icon.png);height:41px;display:block;padding-top:5px;color:#fff}.ol-zoom{top:5em}#map .ol-zoom .ol-zoom-out{margin-top:204px}#map .ol-zoomslider{background-color:transparent;top:7em!important}#map .ol-touch .ol-zoom .ol-zoom-out{margin-top:212px}#map .ol-touch .ol-zoomslider{top:2.75em}#map .ol-zoom-in.ol-has-tooltip:hover [role=tooltip],#map2 .ol-zoom-in.ol-has-tooltip:focus [role=tooltip]{top:3px}#map .ol-zoom-out.ol-has-tooltip:hover [role=tooltip],#map2 .ol-zoom-out.ol-has-tooltip:focus [role=tooltip]{top:232px}#closer,#results{right:0;top:0;background-color:#fff;position:absolute}#clearInput:hover,#doSearch:hover{color:red}#results{overflow-y:scroll!important;padding:0;overflow:visible;-webkit-box-shadow:-5px 0 1px 0 rgba(50,50,50,.16);-moz-box-shadow:-5px 0 1px 0 rgba(50,50,50,.16);box-shadow:-5px 0 1px 0 rgba(50,50,50,.16)}#closer{z-index:1;border:1px solid #d3d3d3;height:40px;padding-top:8px;border-right:0;-webkit-box-shadow:-2px 0 1px 0 rgba(50,50,50,.16);-moz-box-shadow:-2px 0 1px 0 rgba(50,50,50,.16);box-shadow:-2px 0 1px 0 rgba(50,50,50,.16)}.ol-popup{position:absolute;background-color:#fff;-webkit-filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));padding:15px;border-radius:10px;border:1px solid #ccc;bottom:12px;left:-50px;min-width:280px}#map-container,#results .result>.col-xs-2{padding:0}.ol-popup:after,.ol-popup:before{top:100%;border:solid transparent;height:0;width:0;position:absolute;pointer-events:none}#map,#results{height:300px}.ol-popup:after{border-top-color:#fff;border-width:10px;left:48px;margin-left:-10px}.ol-popup:before{border-top-color:#ccc;border-width:11px;left:48px;margin-left:-11px}.ol-popup-closer{text-decoration:none;position:absolute;top:2px;right:8px}.ol-popup-closer:after{content:"✖"}.ol-control button,.ol-control button:hover{background-color:#ff8000}.ol-zoomslider-thumb{background:#ff8000}body{overflow:hidden;max-height:310px;margin-bottom:10px}main{max-height:300px}.ol-zoomslider.ol-unselectable.ol-control{display:none}
\ No newline at end of file
+ *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}hr,img{border:0}.ol-viewport .ol-unselectable,html{-webkit-tap-highlight-color:transparent}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}*,:after,:before,input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{box-sizing:border-box}html{font-size:10px}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-right:15px;padding-left:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{min-width:0;margin:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-group-sm .form-control,.input-sm{font-size:12px;border-radius:3px;padding:5px 10px}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=datetime-local],input[type=month],input[type=time]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover,.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group,.input-group-btn>.btn+.btn{margin-left:-1px}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;vertical-align:baseline;text-align:center}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}a.badge:focus,a.badge:hover,a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}#clearInput,#closer,#doSearch,#map,#results .result,.carousel-indicators li,.map-marker,.marker,.ol-zoomslider-thumb,button.close{cursor:pointer}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.close{line-height:1}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400}.carousel-caption,.carousel-control{text-shadow:0 1px 2px rgba(0,0,0,.6)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;background:0 0;border:0}.modal{position:fixed;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.ol-attribution li:not(:last-child):after,.ol-popup:after,.ol-popup:before{content:" "}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}.ol-control{display:none}}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:#95b9e6;background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ol-control{position:absolute;background-color:#eee;background-color:rgba(255,255,255,.4);border-radius:4px;padding:2px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:#4c6079;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.result p.address,.result p.city,.result p.opening-hours,.result p.population,.result p.title{font-size:11px;margin-bottom:0}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution img{max-height:2em;max-width:inherit}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;width:24px;height:200px}.ol-zoomslider-thumb{position:absolute;border-radius:2px;height:10px;width:22px;margin:3px}.ol-touch .ol-zoomslider{top:5.5em;width:2.052em}.ol-touch .ol-zoomslider-thumb{width:1.8em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}#closer,.marker{width:25px;text-align:center;font-weight:700}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}a:hover{text-decoration:none}#results .result{border:1px solid #d3d3d3;border-top:0;border-radius:2px;padding:10px}.result p.title{font-weight:700}.result p.type{font-size:10px;color:grey;margin-bottom:0}.row div{padding:0}a.navbar-brand{line-height:100%!important;padding:0}.logo{height:100%;font-family:Liberation Sans,sans-serif}.logo>h1{color:#ff8000;height:100%;padding-left:20px;padding-top:8px;font-family:sans-serif;font-style:italic;margin:0;font-weight:700;line-height:1;white-space:nowrap}.logo>h1>small{color:#ff8000;font-size:.5em}nav{margin-bottom:0!important}.marker{background-image:url(/img/marker-icon.png);height:41px;display:block;padding-top:5px;color:#fff}.ol-zoom{top:5em}#map .ol-zoom .ol-zoom-out{margin-top:204px}#map .ol-zoomslider{background-color:transparent;top:7em!important}#map .ol-touch .ol-zoom .ol-zoom-out{margin-top:212px}#map .ol-touch .ol-zoomslider{top:2.75em}#map .ol-zoom-in.ol-has-tooltip:hover [role=tooltip],#map2 .ol-zoom-in.ol-has-tooltip:focus [role=tooltip]{top:3px}#map .ol-zoom-out.ol-has-tooltip:hover [role=tooltip],#map2 .ol-zoom-out.ol-has-tooltip:focus [role=tooltip]{top:232px}#closer,#results{right:0;top:0;background-color:#fff;position:absolute}#clearInput:hover,#doSearch:hover{color:red}#results{overflow-y:scroll!important;padding:0;overflow:visible;-webkit-box-shadow:-5px 0 1px 0 rgba(50,50,50,.16);-moz-box-shadow:-5px 0 1px 0 rgba(50,50,50,.16);box-shadow:-5px 0 1px 0 rgba(50,50,50,.16)}#closer{z-index:1;border:1px solid #d3d3d3;height:40px;padding-top:8px;border-right:0;-webkit-box-shadow:-2px 0 1px 0 rgba(50,50,50,.16);-moz-box-shadow:-2px 0 1px 0 rgba(50,50,50,.16);box-shadow:-2px 0 1px 0 rgba(50,50,50,.16)}.ol-popup{position:absolute;background-color:#fff;-webkit-filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));padding:15px;border-radius:10px;border:1px solid #ccc;bottom:12px;left:-50px;min-width:280px}#map-container,#results .result>.col-xs-2{padding:0}.ol-popup:after,.ol-popup:before{top:100%;border:solid transparent;height:0;width:0;position:absolute;pointer-events:none}#map,#results{height:300px}.ol-popup:after{border-top-color:#fff;border-width:10px;left:48px;margin-left:-10px}.ol-popup:before{border-top-color:#ccc;border-width:11px;left:48px;margin-left:-11px}.ol-popup-closer{text-decoration:none;position:absolute;top:2px;right:8px}.ol-popup-closer:after{content:"✖"}.ol-control button,.ol-control button:hover{background-color:#ff8000}.ol-zoomslider-thumb{background:#ff8000}body{overflow:hidden;max-height:310px;margin-bottom:10px}main{max-height:300px}.ol-zoomslider.ol-unselectable.ol-control{display:none}
\ No newline at end of file
diff --git a/public/css/mapSearch.css b/public/css/mapSearch.css
index 26afacc00f41077db205ca99a065cf83cb53d459..d058195ff6b1951f5ee3859b374e2c6b59c418f2 100644
--- a/public/css/mapSearch.css
+++ b/public/css/mapSearch.css
@@ -2,4 +2,4 @@
  * Bootstrap v3.3.4 (http://getbootstrap.com)
  * Copyright 2011-2015 Twitter, Inc.
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}hr,img{border:0}.ol-viewport .ol-unselectable,html{-webkit-tap-highlight-color:transparent}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}*,:after,:before,input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{box-sizing:border-box}html{font-size:10px}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-right:15px;padding-left:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{min-width:0;margin:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-group-sm .form-control,.input-sm{font-size:12px;border-radius:3px;padding:5px 10px}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=datetime-local],input[type=month],input[type=time]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover,.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group,.input-group-btn>.btn+.btn{margin-left:-1px}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;vertical-align:baseline;text-align:center}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}a.badge:focus,a.badge:hover,a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}#clearInput,#closer,#doSearch,#results .result,.carousel-indicators li,.map-marker,.marker,button.close{cursor:pointer}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.close{line-height:1}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400}.carousel-caption,.carousel-control{text-shadow:0 1px 2px rgba(0,0,0,.6)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;background:0 0;border:0}.modal{position:fixed;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.carousel-inner,body{overflow:hidden}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.ol-attribution li:not(:last-child):after,.ol-popup:after,.ol-popup:before{content:" "}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}.ol-control{display:none}}.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.result p.address,.result p.city,.result p.opening-hours,.result p.population,.result p.title{font-size:11px;margin-bottom:0}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}#closer,.marker{width:25px;text-align:center;font-weight:700}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}a:hover{text-decoration:none}#results .result{border:1px solid #d3d3d3;border-top:0;border-radius:2px;padding:10px}.result p.title{font-weight:700}.result p.type{font-size:10px;color:grey;margin-bottom:0}.row div{padding:0}a.navbar-brand{line-height:100%!important;padding:0}.logo{height:100%;font-family:Liberation Sans,sans-serif}.logo>h1{color:#ff8000;height:100%;padding-left:20px;padding-top:8px;font-family:sans-serif;font-style:italic;margin:0;font-weight:700;line-height:1;white-space:nowrap}.logo>h1>small{color:#ff8000;font-size:.5em}nav{margin-bottom:0!important}.marker{background-image:url(/img/marker-icon.png);height:41px;display:block;padding-top:5px;color:#fff}.ol-zoom{top:5em}#map .ol-zoom .ol-zoom-out{margin-top:204px}#map .ol-zoomslider{background-color:transparent;top:7em!important}#closer,#results,.ol-popup{background-color:#fff;position:absolute}#map .ol-touch .ol-zoom .ol-zoom-out{margin-top:212px}#map .ol-touch .ol-zoomslider{top:2.75em}#map .ol-zoom-in.ol-has-tooltip:hover [role=tooltip],#map2 .ol-zoom-in.ol-has-tooltip:focus [role=tooltip]{top:3px}#map .ol-zoom-out.ol-has-tooltip:hover [role=tooltip],#map2 .ol-zoom-out.ol-has-tooltip:focus [role=tooltip]{top:232px}#clearInput:hover,#doSearch:hover{color:red}#results{overflow-y:scroll!important;top:0;right:0;padding:0;overflow:visible;-webkit-box-shadow:-5px 0 1px 0 rgba(50,50,50,.16);-moz-box-shadow:-5px 0 1px 0 rgba(50,50,50,.16);box-shadow:-5px 0 1px 0 rgba(50,50,50,.16)}#closer{z-index:1;right:0;border:1px solid #d3d3d3;height:40px;padding-top:8px;border-right:0;-webkit-box-shadow:-2px 0 1px 0 rgba(50,50,50,.16);-moz-box-shadow:-2px 0 1px 0 rgba(50,50,50,.16);box-shadow:-2px 0 1px 0 rgba(50,50,50,.16)}.ol-popup{-webkit-filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));padding:15px;border-radius:10px;border:1px solid #ccc;bottom:12px;left:-50px;min-width:280px}.ol-popup:after,.ol-popup:before{top:100%;border:solid transparent;height:0;width:0;position:absolute;pointer-events:none}#map,#results{height:100vh}.ol-popup:after{border-top-color:#fff;border-width:10px;left:48px;margin-left:-10px}.ol-popup:before{border-top-color:#ccc;border-width:11px;left:48px;margin-left:-11px}.ol-popup-closer{text-decoration:none;position:absolute;top:2px;right:8px}.ol-popup-closer:after{content:"✖"}.ol-control button,.ol-control button:hover{background-color:#ff8000}.ol-zoomslider-thumb{background:#ff8000}#results{padding-top:51px}#closer{top:50px}#beta-info{position:absolute;z-index:99999;left:25%;top:55px;width:50%}
\ No newline at end of file
+ *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}hr,img{border:0}.ol-viewport .ol-unselectable,html{-webkit-tap-highlight-color:transparent}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}*,:after,:before,input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{box-sizing:border-box}html{font-size:10px}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-right:15px;padding-left:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{min-width:0;margin:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-group-sm .form-control,.input-sm{font-size:12px;border-radius:3px;padding:5px 10px}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=datetime-local],input[type=month],input[type=time]{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:5px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}select.form-group-lg .form-control{height:46px;line-height:46px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:10px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px}.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover,.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group,.input-group-btn>.btn+.btn{margin-left:-1px}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;vertical-align:baseline;text-align:center}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}a.badge:focus,a.badge:hover,a.label:focus,a.label:hover{color:#fff;cursor:pointer;text-decoration:none}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}#clearInput,#closer,#doSearch,#results .result,.carousel-indicators li,.map-marker,.marker,.ol-zoomslider-thumb,button.close{cursor:pointer}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.close{line-height:1}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400}.carousel-caption,.carousel-control{text-shadow:0 1px 2px rgba(0,0,0,.6)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;background:0 0;border:0}.modal{position:fixed;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.carousel-inner,body{overflow:hidden}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.ol-attribution li:not(:last-child):after,.ol-popup:after,.ol-popup:before{content:" "}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}.ol-control{display:none}}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:#95b9e6;background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ol-control{position:absolute;background-color:#eee;background-color:rgba(255,255,255,.4);border-radius:4px;padding:2px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:#4c6079;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.result p.address,.result p.city,.result p.opening-hours,.result p.population,.result p.title{font-size:11px;margin-bottom:0}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution img{max-height:2em;max-width:inherit}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;width:24px;height:200px}.ol-zoomslider-thumb{position:absolute;border-radius:2px;height:10px;width:22px;margin:3px}.ol-touch .ol-zoomslider{top:5.5em;width:2.052em}.ol-touch .ol-zoomslider-thumb{width:1.8em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}#closer,.marker{width:25px;text-align:center;font-weight:700}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}a:hover{text-decoration:none}#results .result{border:1px solid #d3d3d3;border-top:0;border-radius:2px;padding:10px}.result p.title{font-weight:700}.result p.type{font-size:10px;color:grey;margin-bottom:0}.row div{padding:0}a.navbar-brand{line-height:100%!important;padding:0}.logo{height:100%;font-family:Liberation Sans,sans-serif}.logo>h1{color:#ff8000;height:100%;padding-left:20px;padding-top:8px;font-family:sans-serif;font-style:italic;margin:0;font-weight:700;line-height:1;white-space:nowrap}.logo>h1>small{color:#ff8000;font-size:.5em}nav{margin-bottom:0!important}.marker{background-image:url(/img/marker-icon.png);height:41px;display:block;padding-top:5px;color:#fff}.ol-zoom{top:5em}#map .ol-zoom .ol-zoom-out{margin-top:204px}#map .ol-zoomslider{background-color:transparent;top:7em!important}#closer,#results,.ol-popup{background-color:#fff;position:absolute}#map .ol-touch .ol-zoom .ol-zoom-out{margin-top:212px}#map .ol-touch .ol-zoomslider{top:2.75em}#map .ol-zoom-in.ol-has-tooltip:hover [role=tooltip],#map2 .ol-zoom-in.ol-has-tooltip:focus [role=tooltip]{top:3px}#map .ol-zoom-out.ol-has-tooltip:hover [role=tooltip],#map2 .ol-zoom-out.ol-has-tooltip:focus [role=tooltip]{top:232px}#clearInput:hover,#doSearch:hover{color:red}#results{overflow-y:scroll!important;top:0;right:0;padding:0;overflow:visible;-webkit-box-shadow:-5px 0 1px 0 rgba(50,50,50,.16);-moz-box-shadow:-5px 0 1px 0 rgba(50,50,50,.16);box-shadow:-5px 0 1px 0 rgba(50,50,50,.16)}#closer{z-index:1;right:0;border:1px solid #d3d3d3;height:40px;padding-top:8px;border-right:0;-webkit-box-shadow:-2px 0 1px 0 rgba(50,50,50,.16);-moz-box-shadow:-2px 0 1px 0 rgba(50,50,50,.16);box-shadow:-2px 0 1px 0 rgba(50,50,50,.16)}.ol-popup{-webkit-filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));filter:drop-shadow(0 1px 4px rgba(0, 0, 0, .2));padding:15px;border-radius:10px;border:1px solid #ccc;bottom:12px;left:-50px;min-width:280px}.ol-popup:after,.ol-popup:before{top:100%;border:solid transparent;height:0;width:0;position:absolute;pointer-events:none}#map,#results{height:100vh}.ol-popup:after{border-top-color:#fff;border-width:10px;left:48px;margin-left:-10px}.ol-popup:before{border-top-color:#ccc;border-width:11px;left:48px;margin-left:-11px}.ol-popup-closer{text-decoration:none;position:absolute;top:2px;right:8px}.ol-popup-closer:after{content:"✖"}.ol-control button,.ol-control button:hover{background-color:#ff8000}.ol-zoomslider-thumb{background:#ff8000}#results{padding-top:51px}#closer{top:50px}#beta-info{position:absolute;z-index:99999;left:25%;top:55px;width:50%}
\ No newline at end of file
diff --git a/public/js/iframeSearch.js b/public/js/iframeSearch.js
index 6e695934028398ba404d941e7177ce0041479de5..0de4dab5105c07e80e11f6e1af970d108cd92a33 100644
--- a/public/js/iframeSearch.js
+++ b/public/js/iframeSearch.js
@@ -1,20 +1,20 @@
-function success(t){var e=t.coords;map.getView().setCenter(ol.proj.transform([e.longitude,e.latitude],"EPSG:4326","EPSG:3857")),map.getView().setZoom(12),updateMapExtent()}function error(t){}function receiveLocation(){navigator.geolocation.getCurrentPosition(success,error,options)}function updateMapExtent(){var t=map.getView().calculateExtent([$("#map").width(),$("#map").height()]);extent=ol.proj.transform([t[0],t[1]],"EPSG:3857","EPSG:4326").concat(ol.proj.transform([t[2],t[3]],"EPSG:3857","EPSG:4326"))}function numberWithPoints(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,".")}function toggleResults(){"in"===$("#results").attr("data-status")?($("#closer").html("<"),$("#results").attr("data-status","out"),$("#closer").attr("title","Ergebnisse ausklappen"),updateResultsPosition(),updateCloserPosition()):($("#closer").html(">"),$("#results").attr("data-status","in"),$("#closer").attr("title","Ergebnisse einklappen"),updateResultsPosition(),updateCloserPosition())}function updateResultsPosition(){if("out"===$("#results").attr("data-status")){var t=$("#results").outerWidth()*-1;$("#results").css("right",t+"px")}else $("#results").css("right",0)}function updateCloserPosition(){if("out"===$("#results").attr("data-status"))$("#closer").css("right","0px");else{var t=$(window).width(),e=$("#results").width()-1,o=$("#closer").width();t>e+o?$("#closer").css("right",e+"px"):$("#closer").css("right",e-o+"px")}}function adjustView(t){if(!(t.length<=0)){for(var e=[],o=[],i=0;i<t.length&&(("undefined"==typeof e[0]||e[0]>parseFloat(t[i].lon))&&(e[0]=parseFloat(t[i].lon)),("undefined"==typeof e[0]||"undefined"!=typeof t[i].boundingbox&&e[0]>parseFloat(t[i].boundingbox[2]))&&(e[0]=parseFloat(t[i].boundingbox[2])),("undefined"==typeof e[1]||e[1]>parseFloat(t[i].lat))&&(e[1]=parseFloat(t[i].lat)),("undefined"==typeof e[1]||"undefined"!=typeof t[i].boundingbox&&e[1]>parseFloat(t[i].boundingbox[0]))&&(e[1]=parseFloat(t[i].boundingbox[0])),("undefined"==typeof o[0]||o[0]<parseFloat(t[i].lon))&&(o[0]=parseFloat(t[i].lon)),("undefined"==typeof o[0]||"undefined"!=typeof t[i].boundingbox&&o[0]<parseFloat(t[i].boundingbox[3]))&&(o[0]=parseFloat(t[i].boundingbox[3])),("undefined"==typeof o[1]||o[1]<parseFloat(t[i].lat))&&(o[1]=parseFloat(t[i].lat)),("undefined"==typeof o[1]||"undefined"!=typeof t[i].boundingbox&&o[1]<parseFloat(t[i].boundingbox[1]))&&(o[1]=parseFloat(t[i].boundingbox[1])),"undefined"==typeof t[i].type||"city"!==t[i].type&&"administrative"!==t[i].type&&"river"!==t[i].type);i++);e=ol.proj.transform(e,"EPSG:4326","EPSG:3857"),o=ol.proj.transform(o,"EPSG:4326","EPSG:3857"),map.getView().fitExtent([e[0],e[1],o[0],o[1]],map.getSize())}}function clearPOIS(){$.each(overlays,function(t,e){map.removeOverlay(e)}),map.removeLayer(vectorLayer),vectorSource=new ol.source.Vector,$("#results > .result").remove(),$("#results > h4").remove(),overlays=[]}function addMarker(t,e){var o=new ol.Overlay({position:e,element:t,offset:[-12,-45],stopEvent:!1});map.addOverlay(o),overlays.push(o)}function initMap(){popupOverlay=new ol.Overlay({element:$("#popup"),autoPan:!0,autoPanAnimation:{duration:250}}),map=new ol.Map({layers:[new ol.layer.Tile({preload:1/0,source:new ol.source.OSM({attributions:[new ol.Attribution({html:'All search results &copy; <a href="http://nominatim.openstreetmap.org/">Nominatim</a>'}),ol.source.OSM.ATTRIBUTION],url:"https://maps.metager.de/osm_tiles/{z}/{x}/{y}.png"})})],target:"map",controls:[],interactions:ol.interaction.defaults({doubleClickZoom:!1,dragAndDrop:!1,dragPan:!1,dragBox:!1,dragRotate:!1,dragRotateAndZoom:!1,dragZoom:!1,draw:!1,extent:!1,interaction:!1,pointer:!1,keyboardPan:!1,keyboardZoom:!1,modify:!1,pinchRotate:!1,pinchZoom:!1,snap:!1,translate:!1,mouseWheelZoom:!1,pointer:!1,select:!1}),overlays:[popupOverlay],view:new ol.View({maxZoom:18,minZoom:5,center:ol.proj.transform([10.06897,51.37247],"EPSG:4326","EPSG:3857"),zoom:5}),loadTilesWhileAnimating:!0,loadTilesWhileInteracting:!0}),map.addControl(new ol.control.ZoomSlider),$("#popup-closer").click(function(){return popupOverlay.setPosition(void 0),$(this).blur(),!1})}if(!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function o(t){var e=t.length,o=rt.type(t);return"function"!==o&&!rt.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===o||0===e||"number"==typeof e&&e>0&&e-1 in t))}function i(t,e,o){if(rt.isFunction(e))return rt.grep(t,function(t,i){return!!e.call(t,i,t)!==o});if(e.nodeType)return rt.grep(t,function(t){return t===e!==o});if("string"==typeof e){if(ct.test(e))return rt.filter(e,t,o);e=rt.filter(e,t)}return rt.grep(t,function(t){return rt.inArray(t,e)>=0!==o})}function r(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function n(t){var e=wt[t]={};return rt.each(t.match(bt)||[],function(t,o){e[o]=!0}),e}function s(){yt.addEventListener?(yt.removeEventListener("DOMContentLoaded",p,!1),t.removeEventListener("load",p,!1)):(yt.detachEvent("onreadystatechange",p),t.detachEvent("onload",p))}function p(){(yt.addEventListener||"load"===event.type||"complete"===yt.readyState)&&(s(),rt.ready())}function a(t,e,o){if(void 0===o&&1===t.nodeType){var i="data-"+e.replace(Mt,"-$1").toLowerCase();if(o=t.getAttribute(i),"string"==typeof o){try{o="true"===o||"false"!==o&&("null"===o?null:+o+""===o?+o:Et.test(o)?rt.parseJSON(o):o)}catch(r){}rt.data(t,e,o)}else o=void 0}return o}function h(t){var e;for(e in t)if(("data"!==e||!rt.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function l(t,e,o,i){if(rt.acceptData(t)){var r,n,s=rt.expando,p=t.nodeType,a=p?rt.cache:t,h=p?t[s]:t[s]&&s;if(h&&a[h]&&(i||a[h].data)||void 0!==o||"string"!=typeof e)return h||(h=p?t[s]=V.pop()||rt.guid++:s),a[h]||(a[h]=p?{}:{toJSON:rt.noop}),("object"==typeof e||"function"==typeof e)&&(i?a[h]=rt.extend(a[h],e):a[h].data=rt.extend(a[h].data,e)),n=a[h],i||(n.data||(n.data={}),n=n.data),void 0!==o&&(n[rt.camelCase(e)]=o),"string"==typeof e?(r=n[e],null==r&&(r=n[rt.camelCase(e)])):r=n,r}}function u(t,e,o){if(rt.acceptData(t)){var i,r,n=t.nodeType,s=n?rt.cache:t,p=n?t[rt.expando]:rt.expando;if(s[p]){if(e&&(i=o?s[p]:s[p].data)){rt.isArray(e)?e=e.concat(rt.map(e,rt.camelCase)):e in i?e=[e]:(e=rt.camelCase(e),e=e in i?[e]:e.split(" ")),r=e.length;for(;r--;)delete i[e[r]];if(o?!h(i):!rt.isEmptyObject(i))return}(o||(delete s[p].data,h(s[p])))&&(n?rt.cleanData([t],!0):ot.deleteExpando||s!=s.window?delete s[p]:s[p]=null)}}}function c(){return!0}function f(){return!1}function y(){try{return yt.activeElement}catch(t){}}function d(t){var e=Ot.split("|"),o=t.createDocumentFragment();if(o.createElement)for(;e.length;)o.createElement(e.pop());return o}function g(t,e){var o,i,r=0,n=typeof t.getElementsByTagName!==Tt?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==Tt?t.querySelectorAll(e||"*"):void 0;if(!n)for(n=[],o=t.childNodes||t;null!=(i=o[r]);r++)!e||rt.nodeName(i,e)?n.push(i):rt.merge(n,g(i,e));return void 0===e||e&&rt.nodeName(t,e)?rt.merge([t],n):n}function v(t){Nt.test(t.type)&&(t.defaultChecked=t.checked)}function m(t,e){return rt.nodeName(t,"table")&&rt.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function b(t){return t.type=(null!==rt.find.attr(t,"type"))+"/"+t.type,t}function w(t){var e=qt.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function x(t,e){for(var o,i=0;null!=(o=t[i]);i++)rt._data(o,"globalEval",!e||rt._data(e[i],"globalEval"))}function S(t,e){if(1===e.nodeType&&rt.hasData(t)){var o,i,r,n=rt._data(t),s=rt._data(e,n),p=n.events;if(p){delete s.handle,s.events={};for(o in p)for(i=0,r=p[o].length;r>i;i++)rt.event.add(e,o,p[o][i])}s.data&&(s.data=rt.extend({},s.data))}}function T(t,e){var o,i,r;if(1===e.nodeType){if(o=e.nodeName.toLowerCase(),!ot.noCloneEvent&&e[rt.expando]){r=rt._data(e);for(i in r.events)rt.removeEvent(e,i,r.handle);e.removeAttribute(rt.expando)}"script"===o&&e.text!==t.text?(b(e).text=t.text,w(e)):"object"===o?(e.parentNode&&(e.outerHTML=t.outerHTML),ot.html5Clone&&t.innerHTML&&!rt.trim(e.innerHTML)&&(e.innerHTML=t.innerHTML)):"input"===o&&Nt.test(t.type)?(e.defaultChecked=e.checked=t.checked,e.value!==t.value&&(e.value=t.value)):"option"===o?e.defaultSelected=e.selected=t.defaultSelected:("input"===o||"textarea"===o)&&(e.defaultValue=t.defaultValue)}}function E(e,o){var i,r=rt(o.createElement(e)).appendTo(o.body),n=t.getDefaultComputedStyle&&(i=t.getDefaultComputedStyle(r[0]))?i.display:rt.css(r[0],"display");return r.detach(),n}function M(t){var e=yt,o=Qt[t];return o||(o=E(t,e),"none"!==o&&o||(_t=(_t||rt("<iframe frameborder='0' width='0' height='0'/>")).appendTo(e.documentElement),e=(_t[0].contentWindow||_t[0].contentDocument).document,e.write(),e.close(),o=E(t,e),_t.detach()),Qt[t]=o),o}function C(t,e){return{get:function(){var o=t();if(null!=o)return o?void delete this.get:(this.get=e).apply(this,arguments)}}}function P(t,e){if(e in t)return e;for(var o=e.charAt(0).toUpperCase()+e.slice(1),i=e,r=ce.length;r--;)if(e=ce[r]+o,e in t)return e;return i}function A(t,e){for(var o,i,r,n=[],s=0,p=t.length;p>s;s++)i=t[s],i.style&&(n[s]=rt._data(i,"olddisplay"),o=i.style.display,e?(n[s]||"none"!==o||(i.style.display=""),""===i.style.display&&At(i)&&(n[s]=rt._data(i,"olddisplay",M(i.nodeName)))):(r=At(i),(o&&"none"!==o||!r)&&rt._data(i,"olddisplay",r?o:rt.css(i,"display"))));for(s=0;p>s;s++)i=t[s],i.style&&(e&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=e?n[s]||"":"none"));return t}function j(t,e,o){var i=ae.exec(e);return i?Math.max(0,i[1]-(o||0))+(i[2]||"px"):e}function N(t,e,o,i,r){for(var n=o===(i?"border":"content")?4:"width"===e?1:0,s=0;4>n;n+=2)"margin"===o&&(s+=rt.css(t,o+Pt[n],!0,r)),i?("content"===o&&(s-=rt.css(t,"padding"+Pt[n],!0,r)),"margin"!==o&&(s-=rt.css(t,"border"+Pt[n]+"Width",!0,r))):(s+=rt.css(t,"padding"+Pt[n],!0,r),"padding"!==o&&(s+=rt.css(t,"border"+Pt[n]+"Width",!0,r)));return s}function L(t,e,o){var i=!0,r="width"===e?t.offsetWidth:t.offsetHeight,n=te(t),s=ot.boxSizing&&"border-box"===rt.css(t,"boxSizing",!1,n);if(0>=r||null==r){if(r=ee(t,e,n),(0>r||null==r)&&(r=t.style[e]),ie.test(r))return r;i=s&&(ot.boxSizingReliable()||r===t.style[e]),r=parseFloat(r)||0}return r+N(t,e,o||(s?"border":"content"),i,n)+"px"}function R(t,e,o,i,r){return new R.prototype.init(t,e,o,i,r)}function k(){return setTimeout(function(){fe=void 0}),fe=rt.now()}function I(t,e){var o,i={height:t},r=0;for(e=e?1:0;4>r;r+=2-e)o=Pt[r],i["margin"+o]=i["padding"+o]=t;return e&&(i.opacity=i.width=t),i}function D(t,e,o){for(var i,r=(be[e]||[]).concat(be["*"]),n=0,s=r.length;s>n;n++)if(i=r[n].call(o,e,t))return i}function O(t,e,o){var i,r,n,s,p,a,h,l,u=this,c={},f=t.style,y=t.nodeType&&At(t),d=rt._data(t,"fxshow");o.queue||(p=rt._queueHooks(t,"fx"),null==p.unqueued&&(p.unqueued=0,a=p.empty.fire,p.empty.fire=function(){p.unqueued||a()}),p.unqueued++,u.always(function(){u.always(function(){p.unqueued--,rt.queue(t,"fx").length||p.empty.fire()})})),1===t.nodeType&&("height"in e||"width"in e)&&(o.overflow=[f.overflow,f.overflowX,f.overflowY],h=rt.css(t,"display"),l="none"===h?rt._data(t,"olddisplay")||M(t.nodeName):h,"inline"===l&&"none"===rt.css(t,"float")&&(ot.inlineBlockNeedsLayout&&"inline"!==M(t.nodeName)?f.zoom=1:f.display="inline-block")),o.overflow&&(f.overflow="hidden",ot.shrinkWrapBlocks()||u.always(function(){f.overflow=o.overflow[0],f.overflowX=o.overflow[1],f.overflowY=o.overflow[2]}));for(i in e)if(r=e[i],de.exec(r)){if(delete e[i],n=n||"toggle"===r,r===(y?"hide":"show")){if("show"!==r||!d||void 0===d[i])continue;y=!0}c[i]=d&&d[i]||rt.style(t,i)}else h=void 0;if(rt.isEmptyObject(c))"inline"===("none"===h?M(t.nodeName):h)&&(f.display=h);else{d?"hidden"in d&&(y=d.hidden):d=rt._data(t,"fxshow",{}),n&&(d.hidden=!y),y?rt(t).show():u.done(function(){rt(t).hide()}),u.done(function(){var e;rt._removeData(t,"fxshow");for(e in c)rt.style(t,e,c[e])});for(i in c)s=D(y?d[i]:0,i,u),i in d||(d[i]=s.start,y&&(s.end=s.start,s.start="width"===i||"height"===i?1:0))}}function F(t,e){var o,i,r,n,s;for(o in t)if(i=rt.camelCase(o),r=e[i],n=t[o],rt.isArray(n)&&(r=n[1],n=t[o]=n[0]),o!==i&&(t[i]=n,delete t[o]),s=rt.cssHooks[i],s&&"expand"in s){n=s.expand(n),delete t[i];for(o in n)o in t||(t[o]=n[o],e[o]=r)}else e[i]=r}function B(t,e,o){var i,r,n=0,s=me.length,p=rt.Deferred().always(function(){delete a.elem}),a=function(){if(r)return!1;for(var e=fe||k(),o=Math.max(0,h.startTime+h.duration-e),i=o/h.duration||0,n=1-i,s=0,a=h.tweens.length;a>s;s++)h.tweens[s].run(n);return p.notifyWith(t,[h,n,o]),1>n&&a?o:(p.resolveWith(t,[h]),!1)},h=p.promise({elem:t,props:rt.extend({},e),opts:rt.extend(!0,{specialEasing:{}},o),originalProperties:e,originalOptions:o,startTime:fe||k(),duration:o.duration,tweens:[],createTween:function(e,o){var i=rt.Tween(t,h.opts,e,o,h.opts.specialEasing[e]||h.opts.easing);return h.tweens.push(i),i},stop:function(e){var o=0,i=e?h.tweens.length:0;if(r)return this;for(r=!0;i>o;o++)h.tweens[o].run(1);return e?p.resolveWith(t,[h,e]):p.rejectWith(t,[h,e]),this}}),l=h.props;for(F(l,h.opts.specialEasing);s>n;n++)if(i=me[n].call(h,t,l,h.opts))return i;return rt.map(l,D,h),rt.isFunction(h.opts.start)&&h.opts.start.call(t,h),rt.fx.timer(rt.extend(a,{elem:t,anim:h,queue:h.opts.queue})),h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always)}function U(t){return function(e,o){"string"!=typeof e&&(o=e,e="*");var i,r=0,n=e.toLowerCase().match(bt)||[];if(rt.isFunction(o))for(;i=n[r++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(o)):(t[i]=t[i]||[]).push(o)}}function G(t,e,o,i){function r(p){var a;return n[p]=!0,rt.each(t[p]||[],function(t,p){var h=p(e,o,i);return"string"!=typeof h||s||n[h]?s?!(a=h):void 0:(e.dataTypes.unshift(h),r(h),!1)}),a}var n={},s=t===We;return r(e.dataTypes[0])||!n["*"]&&r("*")}function H(t,e){var o,i,r=rt.ajaxSettings.flatOptions||{};for(i in e)void 0!==e[i]&&((r[i]?t:o||(o={}))[i]=e[i]);return o&&rt.extend(!0,t,o),t}function X(t,e,o){for(var i,r,n,s,p=t.contents,a=t.dataTypes;"*"===a[0];)a.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader("Content-Type"));if(r)for(s in p)if(p[s]&&p[s].test(r)){a.unshift(s);break}if(a[0]in o)n=a[0];else{for(s in o){if(!a[0]||t.converters[s+" "+a[0]]){n=s;break}i||(i=s)}n=n||i}return n?(n!==a[0]&&a.unshift(n),o[n]):void 0}function W(t,e,o,i){var r,n,s,p,a,h={},l=t.dataTypes.slice();if(l[1])for(s in t.converters)h[s.toLowerCase()]=t.converters[s];for(n=l.shift();n;)if(t.responseFields[n]&&(o[t.responseFields[n]]=e),!a&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),a=n,n=l.shift())if("*"===n)n=a;else if("*"!==a&&a!==n){if(s=h[a+" "+n]||h["* "+n],!s)for(r in h)if(p=r.split(" "),p[1]===n&&(s=h[a+" "+p[0]]||h["* "+p[0]])){s===!0?s=h[r]:h[r]!==!0&&(n=p[0],l.unshift(p[1]));break}if(s!==!0)if(s&&t["throws"])e=s(e);else try{e=s(e)}catch(u){return{state:"parsererror",error:s?u:"No conversion from "+a+" to "+n}}}return{state:"success",data:e}}function $(t,e,o,i){var r;if(rt.isArray(e))rt.each(e,function(e,r){o||qe.test(t)?i(t,r):$(t+"["+("object"==typeof r?e:"")+"]",r,o,i)});else if(o||"object"!==rt.type(e))i(t,e);else for(r in e)$(t+"["+r+"]",e[r],o,i)}function K(){try{return new t.XMLHttpRequest}catch(e){}}function z(){try{return new t.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function q(t){return rt.isWindow(t)?t:9===t.nodeType&&(t.defaultView||t.parentWindow)}var V=[],Y=V.slice,Z=V.concat,J=V.push,_=V.indexOf,Q={},tt=Q.toString,et=Q.hasOwnProperty,ot={},it="1.11.2",rt=function(t,e){return new rt.fn.init(t,e)},nt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,st=/^-ms-/,pt=/-([\da-z])/gi,at=function(t,e){return e.toUpperCase()};rt.fn=rt.prototype={jquery:it,constructor:rt,selector:"",length:0,toArray:function(){return Y.call(this)},get:function(t){return null!=t?0>t?this[t+this.length]:this[t]:Y.call(this)},pushStack:function(t){var e=rt.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return rt.each(this,t,e)},map:function(t){return this.pushStack(rt.map(this,function(e,o){return t.call(e,o,e)}))},slice:function(){return this.pushStack(Y.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,o=+t+(0>t?e:0);return this.pushStack(o>=0&&e>o?[this[o]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:J,sort:V.sort,splice:V.splice},rt.extend=rt.fn.extend=function(){var t,e,o,i,r,n,s=arguments[0]||{},p=1,a=arguments.length,h=!1;for("boolean"==typeof s&&(h=s,s=arguments[p]||{},p++),"object"==typeof s||rt.isFunction(s)||(s={}),p===a&&(s=this,p--);a>p;p++)if(null!=(r=arguments[p]))for(i in r)t=s[i],o=r[i],s!==o&&(h&&o&&(rt.isPlainObject(o)||(e=rt.isArray(o)))?(e?(e=!1,n=t&&rt.isArray(t)?t:[]):n=t&&rt.isPlainObject(t)?t:{},s[i]=rt.extend(h,n,o)):void 0!==o&&(s[i]=o));return s},rt.extend({expando:"jQuery"+(it+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return"function"===rt.type(t)},isArray:Array.isArray||function(t){return"array"===rt.type(t)},isWindow:function(t){return null!=t&&t==t.window},isNumeric:function(t){return!rt.isArray(t)&&t-parseFloat(t)+1>=0},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},isPlainObject:function(t){var e;if(!t||"object"!==rt.type(t)||t.nodeType||rt.isWindow(t))return!1;try{if(t.constructor&&!et.call(t,"constructor")&&!et.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(o){return!1}if(ot.ownLast)for(e in t)return et.call(t,e);for(e in t);return void 0===e||et.call(t,e)},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?Q[tt.call(t)]||"object":typeof t},globalEval:function(e){e&&rt.trim(e)&&(t.execScript||function(e){t.eval.call(t,e)})(e)},camelCase:function(t){return t.replace(st,"ms-").replace(pt,at)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var r,n=0,s=t.length,p=o(t);if(i){if(p)for(;s>n&&(r=e.apply(t[n],i),r!==!1);n++);else for(n in t)if(r=e.apply(t[n],i),r===!1)break}else if(p)for(;s>n&&(r=e.call(t[n],n,t[n]),r!==!1);n++);else for(n in t)if(r=e.call(t[n],n,t[n]),r===!1)break;return t},trim:function(t){return null==t?"":(t+"").replace(nt,"")},makeArray:function(t,e){var i=e||[];return null!=t&&(o(Object(t))?rt.merge(i,"string"==typeof t?[t]:t):J.call(i,t)),i},inArray:function(t,e,o){var i;if(e){if(_)return _.call(e,t,o);for(i=e.length,o=o?0>o?Math.max(0,i+o):o:0;i>o;o++)if(o in e&&e[o]===t)return o}return-1},merge:function(t,e){for(var o=+e.length,i=0,r=t.length;o>i;)t[r++]=e[i++];if(o!==o)for(;void 0!==e[i];)t[r++]=e[i++];return t.length=r,t},grep:function(t,e,o){for(var i,r=[],n=0,s=t.length,p=!o;s>n;n++)i=!e(t[n],n),i!==p&&r.push(t[n]);return r},map:function(t,e,i){var r,n=0,s=t.length,p=o(t),a=[];if(p)for(;s>n;n++)r=e(t[n],n,i),null!=r&&a.push(r);else for(n in t)r=e(t[n],n,i),null!=r&&a.push(r);return Z.apply([],a)},guid:1,proxy:function(t,e){var o,i,r;return"string"==typeof e&&(r=t[e],e=t,t=r),rt.isFunction(t)?(o=Y.call(arguments,2),i=function(){return t.apply(e||this,o.concat(Y.call(arguments)))},i.guid=t.guid=t.guid||rt.guid++,i):void 0},now:function(){return+new Date},support:ot}),rt.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){Q["[object "+e+"]"]=e.toLowerCase()});var ht=function(t){function e(t,e,o,i){var r,n,s,p,a,h,u,f,y,d;if((e?e.ownerDocument||e:G)!==R&&L(e),e=e||R,o=o||[],p=e.nodeType,"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return o;if(!i&&I){if(11!==p&&(r=mt.exec(t)))if(s=r[1]){if(9===p){if(n=e.getElementById(s),!n||!n.parentNode)return o;if(n.id===s)return o.push(n),o}else if(e.ownerDocument&&(n=e.ownerDocument.getElementById(s))&&B(e,n)&&n.id===s)return o.push(n),o}else{if(r[2])return _.apply(o,e.getElementsByTagName(t)),o;if((s=r[3])&&x.getElementsByClassName)return _.apply(o,e.getElementsByClassName(s)),o}if(x.qsa&&(!D||!D.test(t))){if(f=u=U,y=e,d=1!==p&&t,1===p&&"object"!==e.nodeName.toLowerCase()){for(h=M(t),(u=e.getAttribute("id"))?f=u.replace(wt,"\\$&"):e.setAttribute("id",f),f="[id='"+f+"'] ",a=h.length;a--;)h[a]=f+c(h[a]);y=bt.test(t)&&l(e.parentNode)||e,d=h.join(",")}if(d)try{return _.apply(o,y.querySelectorAll(d)),o}catch(g){}finally{u||e.removeAttribute("id")}}}return P(t.replace(at,"$1"),e,o,i)}function o(){function t(o,i){return e.push(o+" ")>S.cacheLength&&delete t[e.shift()],t[o+" "]=i}var e=[];return t}function i(t){return t[U]=!0,t}function r(t){var e=R.createElement("div");try{return!!t(e)}catch(o){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function n(t,e){for(var o=t.split("|"),i=t.length;i--;)S.attrHandle[o[i]]=e}function s(t,e){var o=e&&t,i=o&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||q)-(~t.sourceIndex||q);if(i)return i;if(o)for(;o=o.nextSibling;)if(o===e)return-1;return t?1:-1}function p(t){return function(e){var o=e.nodeName.toLowerCase();return"input"===o&&e.type===t}}function a(t){return function(e){var o=e.nodeName.toLowerCase();return("input"===o||"button"===o)&&e.type===t}}function h(t){return i(function(e){return e=+e,i(function(o,i){for(var r,n=t([],o.length,e),s=n.length;s--;)o[r=n[s]]&&(o[r]=!(i[r]=o[r]))})})}function l(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function u(){}function c(t){for(var e=0,o=t.length,i="";o>e;e++)i+=t[e].value;return i}function f(t,e,o){var i=e.dir,r=o&&"parentNode"===i,n=X++;return e.first?function(e,o,n){for(;e=e[i];)if(1===e.nodeType||r)return t(e,o,n)}:function(e,o,s){var p,a,h=[H,n];if(s){for(;e=e[i];)if((1===e.nodeType||r)&&t(e,o,s))return!0}else for(;e=e[i];)if(1===e.nodeType||r){if(a=e[U]||(e[U]={}),(p=a[i])&&p[0]===H&&p[1]===n)return h[2]=p[2];if(a[i]=h,h[2]=t(e,o,s))return!0}}}function y(t){return t.length>1?function(e,o,i){for(var r=t.length;r--;)if(!t[r](e,o,i))return!1;return!0}:t[0]}function d(t,o,i){for(var r=0,n=o.length;n>r;r++)e(t,o[r],i);return i}function g(t,e,o,i,r){for(var n,s=[],p=0,a=t.length,h=null!=e;a>p;p++)(n=t[p])&&(!o||o(n,i,r))&&(s.push(n),h&&e.push(p));return s}function v(t,e,o,r,n,s){return r&&!r[U]&&(r=v(r)),n&&!n[U]&&(n=v(n,s)),i(function(i,s,p,a){var h,l,u,c=[],f=[],y=s.length,v=i||d(e||"*",p.nodeType?[p]:p,[]),m=!t||!i&&e?v:g(v,c,t,p,a),b=o?n||(i?t:y||r)?[]:s:m;if(o&&o(m,b,p,a),r)for(h=g(b,f),r(h,[],p,a),l=h.length;l--;)(u=h[l])&&(b[f[l]]=!(m[f[l]]=u));if(i){if(n||t){if(n){for(h=[],l=b.length;l--;)(u=b[l])&&h.push(m[l]=u);n(null,b=[],h,a)}for(l=b.length;l--;)(u=b[l])&&(h=n?tt(i,u):c[l])>-1&&(i[h]=!(s[h]=u))}}else b=g(b===s?b.splice(y,b.length):b),n?n(null,s,b,a):_.apply(s,b)})}function m(t){for(var e,o,i,r=t.length,n=S.relative[t[0].type],s=n||S.relative[" "],p=n?1:0,a=f(function(t){return t===e},s,!0),h=f(function(t){return tt(e,t)>-1},s,!0),l=[function(t,o,i){var r=!n&&(i||o!==A)||((e=o).nodeType?a(t,o,i):h(t,o,i));return e=null,r}];r>p;p++)if(o=S.relative[t[p].type])l=[f(y(l),o)];else{if(o=S.filter[t[p].type].apply(null,t[p].matches),o[U]){for(i=++p;r>i&&!S.relative[t[i].type];i++);return v(p>1&&y(l),p>1&&c(t.slice(0,p-1).concat({value:" "===t[p-2].type?"*":""})).replace(at,"$1"),o,i>p&&m(t.slice(p,i)),r>i&&m(t=t.slice(i)),r>i&&c(t))}l.push(o)}return y(l)}function b(t,o){var r=o.length>0,n=t.length>0,s=function(i,s,p,a,h){var l,u,c,f=0,y="0",d=i&&[],v=[],m=A,b=i||n&&S.find.TAG("*",h),w=H+=null==m?1:Math.random()||.1,x=b.length;for(h&&(A=s!==R&&s);y!==x&&null!=(l=b[y]);y++){if(n&&l){for(u=0;c=t[u++];)if(c(l,s,p)){a.push(l);break}h&&(H=w)}r&&((l=!c&&l)&&f--,i&&d.push(l))}if(f+=y,r&&y!==f){for(u=0;c=o[u++];)c(d,v,s,p);if(i){if(f>0)for(;y--;)d[y]||v[y]||(v[y]=Z.call(a));v=g(v)}_.apply(a,v),h&&!i&&v.length>0&&f+o.length>1&&e.uniqueSort(a)}return h&&(H=w,A=m),d};return r?i(s):s}var w,x,S,T,E,M,C,P,A,j,N,L,R,k,I,D,O,F,B,U="sizzle"+1*new Date,G=t.document,H=0,X=0,W=o(),$=o(),K=o(),z=function(t,e){return t===e&&(N=!0),0},q=1<<31,V={}.hasOwnProperty,Y=[],Z=Y.pop,J=Y.push,_=Y.push,Q=Y.slice,tt=function(t,e){for(var o=0,i=t.length;i>o;o++)if(t[o]===e)return o;return-1},et="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ot="[\\x20\\t\\r\\n\\f]",it="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",rt=it.replace("w","w#"),nt="\\["+ot+"*("+it+")(?:"+ot+"*([*^$|!~]?=)"+ot+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+rt+"))|)"+ot+"*\\]",st=":("+it+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+nt+")*)|.*)\\)|)",pt=new RegExp(ot+"+","g"),at=new RegExp("^"+ot+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ot+"+$","g"),ht=new RegExp("^"+ot+"*,"+ot+"*"),lt=new RegExp("^"+ot+"*([>+~]|"+ot+")"+ot+"*"),ut=new RegExp("="+ot+"*([^\\]'\"]*?)"+ot+"*\\]","g"),ct=new RegExp(st),ft=new RegExp("^"+rt+"$"),yt={ID:new RegExp("^#("+it+")"),CLASS:new RegExp("^\\.("+it+")"),TAG:new RegExp("^("+it.replace("w","w*")+")"),ATTR:new RegExp("^"+nt),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ot+"*(even|odd|(([+-]|)(\\d*)n|)"+ot+"*(?:([+-]|)"+ot+"*(\\d+)|))"+ot+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+ot+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ot+"*((?:-\\d)?\\d*)"+ot+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,gt=/^h\d$/i,vt=/^[^{]+\{\s*\[native \w/,mt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,bt=/[+~]/,wt=/'|\\/g,xt=new RegExp("\\\\([\\da-f]{1,6}"+ot+"?|("+ot+")|.)","ig"),St=function(t,e,o){var i="0x"+e-65536;return i!==i||o?e:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Tt=function(){L()};try{_.apply(Y=Q.call(G.childNodes),G.childNodes),Y[G.childNodes.length].nodeType}catch(Et){_={apply:Y.length?function(t,e){J.apply(t,Q.call(e))}:function(t,e){for(var o=t.length,i=0;t[o++]=e[i++];);t.length=o-1}}}x=e.support={},E=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},L=e.setDocument=function(t){var e,o,i=t?t.ownerDocument||t:G;return i!==R&&9===i.nodeType&&i.documentElement?(R=i,k=i.documentElement,o=i.defaultView,o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",Tt,!1):o.attachEvent&&o.attachEvent("onunload",Tt)),I=!E(i),x.attributes=r(function(t){return t.className="i",!t.getAttribute("className")}),x.getElementsByTagName=r(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),x.getElementsByClassName=vt.test(i.getElementsByClassName),x.getById=r(function(t){return k.appendChild(t).id=U,!i.getElementsByName||!i.getElementsByName(U).length}),x.getById?(S.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&I){var o=e.getElementById(t);return o&&o.parentNode?[o]:[]}},S.filter.ID=function(t){var e=t.replace(xt,St);return function(t){return t.getAttribute("id")===e}}):(delete S.find.ID,S.filter.ID=function(t){var e=t.replace(xt,St);return function(t){var o="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return o&&o.value===e}}),S.find.TAG=x.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):x.qsa?e.querySelectorAll(t):void 0}:function(t,e){var o,i=[],r=0,n=e.getElementsByTagName(t);if("*"===t){for(;o=n[r++];)1===o.nodeType&&i.push(o);return i}return n},S.find.CLASS=x.getElementsByClassName&&function(t,e){return I?e.getElementsByClassName(t):void 0},O=[],D=[],(x.qsa=vt.test(i.querySelectorAll))&&(r(function(t){k.appendChild(t).innerHTML="<a id='"+U+"'></a><select id='"+U+"-\f]' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&D.push("[*^$]="+ot+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||D.push("\\["+ot+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+U+"-]").length||D.push("~="),t.querySelectorAll(":checked").length||D.push(":checked"),t.querySelectorAll("a#"+U+"+*").length||D.push(".#.+[+~]")}),r(function(t){var e=i.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&D.push("name"+ot+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||D.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),D.push(",.*:")})),(x.matchesSelector=vt.test(F=k.matches||k.webkitMatchesSelector||k.mozMatchesSelector||k.oMatchesSelector||k.msMatchesSelector))&&r(function(t){x.disconnectedMatch=F.call(t,"div"),F.call(t,"[s!='']:x"),O.push("!=",st)}),D=D.length&&new RegExp(D.join("|")),O=O.length&&new RegExp(O.join("|")),e=vt.test(k.compareDocumentPosition),B=e||vt.test(k.contains)?function(t,e){var o=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(o.contains?o.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},z=e?function(t,e){if(t===e)return N=!0,0;var o=!t.compareDocumentPosition-!e.compareDocumentPosition;return o?o:(o=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&o||!x.sortDetached&&e.compareDocumentPosition(t)===o?t===i||t.ownerDocument===G&&B(G,t)?-1:e===i||e.ownerDocument===G&&B(G,e)?1:j?tt(j,t)-tt(j,e):0:4&o?-1:1)}:function(t,e){if(t===e)return N=!0,0;var o,r=0,n=t.parentNode,p=e.parentNode,a=[t],h=[e];if(!n||!p)return t===i?-1:e===i?1:n?-1:p?1:j?tt(j,t)-tt(j,e):0;if(n===p)return s(t,e);for(o=t;o=o.parentNode;)a.unshift(o);for(o=e;o=o.parentNode;)h.unshift(o);for(;a[r]===h[r];)r++;return r?s(a[r],h[r]):a[r]===G?-1:h[r]===G?1:0},i):R},e.matches=function(t,o){return e(t,null,null,o)},e.matchesSelector=function(t,o){if((t.ownerDocument||t)!==R&&L(t),o=o.replace(ut,"='$1']"),!(!x.matchesSelector||!I||O&&O.test(o)||D&&D.test(o)))try{var i=F.call(t,o);if(i||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(r){}return e(o,R,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==R&&L(t),B(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==R&&L(t);var o=S.attrHandle[e.toLowerCase()],i=o&&V.call(S.attrHandle,e.toLowerCase())?o(t,e,!I):void 0;return void 0!==i?i:x.attributes||!I?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,o=[],i=0,r=0;if(N=!x.detectDuplicates,j=!x.sortStable&&t.slice(0),t.sort(z),N){for(;e=t[r++];)e===t[r]&&(i=o.push(r));for(;i--;)t.splice(o[i],1)}return j=null,t},T=e.getText=function(t){var e,o="",i=0,r=t.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)o+=T(t)}else if(3===r||4===r)return t.nodeValue}else for(;e=t[i++];)o+=T(e);return o},S=e.selectors={cacheLength:50,createPseudo:i,match:yt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(xt,St),t[3]=(t[3]||t[4]||t[5]||"").replace(xt,St),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,o=!t[6]&&t[2];return yt.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":o&&ct.test(o)&&(e=M(o,!0))&&(e=o.indexOf(")",o.length-e)-o.length)&&(t[0]=t[0].slice(0,e),t[2]=o.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(xt,St).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=W[t+" "];return e||(e=new RegExp("(^|"+ot+")"+t+"("+ot+"|$)"))&&W(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"");
-})},ATTR:function(t,o,i){return function(r){var n=e.attr(r,t);return null==n?"!="===o:!o||(n+="","="===o?n===i:"!="===o?n!==i:"^="===o?i&&0===n.indexOf(i):"*="===o?i&&n.indexOf(i)>-1:"$="===o?i&&n.slice(-i.length)===i:"~="===o?(" "+n.replace(pt," ")+" ").indexOf(i)>-1:"|="===o&&(n===i||n.slice(0,i.length+1)===i+"-"))}},CHILD:function(t,e,o,i,r){var n="nth"!==t.slice(0,3),s="last"!==t.slice(-4),p="of-type"===e;return 1===i&&0===r?function(t){return!!t.parentNode}:function(e,o,a){var h,l,u,c,f,y,d=n!==s?"nextSibling":"previousSibling",g=e.parentNode,v=p&&e.nodeName.toLowerCase(),m=!a&&!p;if(g){if(n){for(;d;){for(u=e;u=u[d];)if(p?u.nodeName.toLowerCase()===v:1===u.nodeType)return!1;y=d="only"===t&&!y&&"nextSibling"}return!0}if(y=[s?g.firstChild:g.lastChild],s&&m){for(l=g[U]||(g[U]={}),h=l[t]||[],f=h[0]===H&&h[1],c=h[0]===H&&h[2],u=f&&g.childNodes[f];u=++f&&u&&u[d]||(c=f=0)||y.pop();)if(1===u.nodeType&&++c&&u===e){l[t]=[H,f,c];break}}else if(m&&(h=(e[U]||(e[U]={}))[t])&&h[0]===H)c=h[1];else for(;(u=++f&&u&&u[d]||(c=f=0)||y.pop())&&((p?u.nodeName.toLowerCase()!==v:1!==u.nodeType)||!++c||(m&&((u[U]||(u[U]={}))[t]=[H,c]),u!==e)););return c-=r,c===i||c%i===0&&c/i>=0}}},PSEUDO:function(t,o){var r,n=S.pseudos[t]||S.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return n[U]?n(o):n.length>1?(r=[t,t,"",o],S.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,r=n(t,o),s=r.length;s--;)i=tt(t,r[s]),t[i]=!(e[i]=r[s])}):function(t){return n(t,0,r)}):n}},pseudos:{not:i(function(t){var e=[],o=[],r=C(t.replace(at,"$1"));return r[U]?i(function(t,e,o,i){for(var n,s=r(t,null,i,[]),p=t.length;p--;)(n=s[p])&&(t[p]=!(e[p]=n))}):function(t,i,n){return e[0]=t,r(e,null,n,o),e[0]=null,!o.pop()}}),has:i(function(t){return function(o){return e(t,o).length>0}}),contains:i(function(t){return t=t.replace(xt,St),function(e){return(e.textContent||e.innerText||T(e)).indexOf(t)>-1}}),lang:i(function(t){return ft.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(xt,St).toLowerCase(),function(e){var o;do if(o=I?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return o=o.toLowerCase(),o===t||0===o.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var o=t.location&&t.location.hash;return o&&o.slice(1)===e.id},root:function(t){return t===k},focus:function(t){return t===R.activeElement&&(!R.hasFocus||R.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!S.pseudos.empty(t)},header:function(t){return gt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:h(function(){return[0]}),last:h(function(t,e){return[e-1]}),eq:h(function(t,e,o){return[0>o?o+e:o]}),even:h(function(t,e){for(var o=0;e>o;o+=2)t.push(o);return t}),odd:h(function(t,e){for(var o=1;e>o;o+=2)t.push(o);return t}),lt:h(function(t,e,o){for(var i=0>o?o+e:o;--i>=0;)t.push(i);return t}),gt:h(function(t,e,o){for(var i=0>o?o+e:o;++i<e;)t.push(i);return t})}},S.pseudos.nth=S.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})S.pseudos[w]=p(w);for(w in{submit:!0,reset:!0})S.pseudos[w]=a(w);return u.prototype=S.filters=S.pseudos,S.setFilters=new u,M=e.tokenize=function(t,o){var i,r,n,s,p,a,h,l=$[t+" "];if(l)return o?0:l.slice(0);for(p=t,a=[],h=S.preFilter;p;){(!i||(r=ht.exec(p)))&&(r&&(p=p.slice(r[0].length)||p),a.push(n=[])),i=!1,(r=lt.exec(p))&&(i=r.shift(),n.push({value:i,type:r[0].replace(at," ")}),p=p.slice(i.length));for(s in S.filter)!(r=yt[s].exec(p))||h[s]&&!(r=h[s](r))||(i=r.shift(),n.push({value:i,type:s,matches:r}),p=p.slice(i.length));if(!i)break}return o?p.length:p?e.error(t):$(t,a).slice(0)},C=e.compile=function(t,e){var o,i=[],r=[],n=K[t+" "];if(!n){for(e||(e=M(t)),o=e.length;o--;)n=m(e[o]),n[U]?i.push(n):r.push(n);n=K(t,b(r,i)),n.selector=t}return n},P=e.select=function(t,e,o,i){var r,n,s,p,a,h="function"==typeof t&&t,u=!i&&M(t=h.selector||t);if(o=o||[],1===u.length){if(n=u[0]=u[0].slice(0),n.length>2&&"ID"===(s=n[0]).type&&x.getById&&9===e.nodeType&&I&&S.relative[n[1].type]){if(e=(S.find.ID(s.matches[0].replace(xt,St),e)||[])[0],!e)return o;h&&(e=e.parentNode),t=t.slice(n.shift().value.length)}for(r=yt.needsContext.test(t)?0:n.length;r--&&(s=n[r],!S.relative[p=s.type]);)if((a=S.find[p])&&(i=a(s.matches[0].replace(xt,St),bt.test(n[0].type)&&l(e.parentNode)||e))){if(n.splice(r,1),t=i.length&&c(n),!t)return _.apply(o,i),o;break}}return(h||C(t,u))(i,e,!I,o,bt.test(t)&&l(e.parentNode)||e),o},x.sortStable=U.split("").sort(z).join("")===U,x.detectDuplicates=!!N,L(),x.sortDetached=r(function(t){return 1&t.compareDocumentPosition(R.createElement("div"))}),r(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||n("type|href|height|width",function(t,e,o){return o?void 0:t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),x.attributes&&r(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||n("value",function(t,e,o){return o||"input"!==t.nodeName.toLowerCase()?void 0:t.defaultValue}),r(function(t){return null==t.getAttribute("disabled")})||n(et,function(t,e,o){var i;return o?void 0:t[e]===!0?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),e}(t);rt.find=ht,rt.expr=ht.selectors,rt.expr[":"]=rt.expr.pseudos,rt.unique=ht.uniqueSort,rt.text=ht.getText,rt.isXMLDoc=ht.isXML,rt.contains=ht.contains;var lt=rt.expr.match.needsContext,ut=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ct=/^.[^:#\[\.,]*$/;rt.filter=function(t,e,o){var i=e[0];return o&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?rt.find.matchesSelector(i,t)?[i]:[]:rt.find.matches(t,rt.grep(e,function(t){return 1===t.nodeType}))},rt.fn.extend({find:function(t){var e,o=[],i=this,r=i.length;if("string"!=typeof t)return this.pushStack(rt(t).filter(function(){for(e=0;r>e;e++)if(rt.contains(i[e],this))return!0}));for(e=0;r>e;e++)rt.find(t,i[e],o);return o=this.pushStack(r>1?rt.unique(o):o),o.selector=this.selector?this.selector+" "+t:t,o},filter:function(t){return this.pushStack(i(this,t||[],!1))},not:function(t){return this.pushStack(i(this,t||[],!0))},is:function(t){return!!i(this,"string"==typeof t&&lt.test(t)?rt(t):t||[],!1).length}});var ft,yt=t.document,dt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,gt=rt.fn.init=function(t,e){var o,i;if(!t)return this;if("string"==typeof t){if(o="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3?[null,t,null]:dt.exec(t),!o||!o[1]&&e)return!e||e.jquery?(e||ft).find(t):this.constructor(e).find(t);if(o[1]){if(e=e instanceof rt?e[0]:e,rt.merge(this,rt.parseHTML(o[1],e&&e.nodeType?e.ownerDocument||e:yt,!0)),ut.test(o[1])&&rt.isPlainObject(e))for(o in e)rt.isFunction(this[o])?this[o](e[o]):this.attr(o,e[o]);return this}if(i=yt.getElementById(o[2]),i&&i.parentNode){if(i.id!==o[2])return ft.find(t);this.length=1,this[0]=i}return this.context=yt,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):rt.isFunction(t)?"undefined"!=typeof ft.ready?ft.ready(t):t(rt):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),rt.makeArray(t,this))};gt.prototype=rt.fn,ft=rt(yt);var vt=/^(?:parents|prev(?:Until|All))/,mt={children:!0,contents:!0,next:!0,prev:!0};rt.extend({dir:function(t,e,o){for(var i=[],r=t[e];r&&9!==r.nodeType&&(void 0===o||1!==r.nodeType||!rt(r).is(o));)1===r.nodeType&&i.push(r),r=r[e];return i},sibling:function(t,e){for(var o=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&o.push(t);return o}}),rt.fn.extend({has:function(t){var e,o=rt(t,this),i=o.length;return this.filter(function(){for(e=0;i>e;e++)if(rt.contains(this,o[e]))return!0})},closest:function(t,e){for(var o,i=0,r=this.length,n=[],s=lt.test(t)||"string"!=typeof t?rt(t,e||this.context):0;r>i;i++)for(o=this[i];o&&o!==e;o=o.parentNode)if(o.nodeType<11&&(s?s.index(o)>-1:1===o.nodeType&&rt.find.matchesSelector(o,t))){n.push(o);break}return this.pushStack(n.length>1?rt.unique(n):n)},index:function(t){return t?"string"==typeof t?rt.inArray(this[0],rt(t)):rt.inArray(t.jquery?t[0]:t,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(rt.unique(rt.merge(this.get(),rt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),rt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return rt.dir(t,"parentNode")},parentsUntil:function(t,e,o){return rt.dir(t,"parentNode",o)},next:function(t){return r(t,"nextSibling")},prev:function(t){return r(t,"previousSibling")},nextAll:function(t){return rt.dir(t,"nextSibling")},prevAll:function(t){return rt.dir(t,"previousSibling")},nextUntil:function(t,e,o){return rt.dir(t,"nextSibling",o)},prevUntil:function(t,e,o){return rt.dir(t,"previousSibling",o)},siblings:function(t){return rt.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return rt.sibling(t.firstChild)},contents:function(t){return rt.nodeName(t,"iframe")?t.contentDocument||t.contentWindow.document:rt.merge([],t.childNodes)}},function(t,e){rt.fn[t]=function(o,i){var r=rt.map(this,e,o);return"Until"!==t.slice(-5)&&(i=o),i&&"string"==typeof i&&(r=rt.filter(i,r)),this.length>1&&(mt[t]||(r=rt.unique(r)),vt.test(t)&&(r=r.reverse())),this.pushStack(r)}});var bt=/\S+/g,wt={};rt.Callbacks=function(t){t="string"==typeof t?wt[t]||n(t):rt.extend({},t);var e,o,i,r,s,p,a=[],h=!t.once&&[],l=function(n){for(o=t.memory&&n,i=!0,s=p||0,p=0,r=a.length,e=!0;a&&r>s;s++)if(a[s].apply(n[0],n[1])===!1&&t.stopOnFalse){o=!1;break}e=!1,a&&(h?h.length&&l(h.shift()):o?a=[]:u.disable())},u={add:function(){if(a){var i=a.length;!function n(e){rt.each(e,function(e,o){var i=rt.type(o);"function"===i?t.unique&&u.has(o)||a.push(o):o&&o.length&&"string"!==i&&n(o)})}(arguments),e?r=a.length:o&&(p=i,l(o))}return this},remove:function(){return a&&rt.each(arguments,function(t,o){for(var i;(i=rt.inArray(o,a,i))>-1;)a.splice(i,1),e&&(r>=i&&r--,s>=i&&s--)}),this},has:function(t){return t?rt.inArray(t,a)>-1:!(!a||!a.length)},empty:function(){return a=[],r=0,this},disable:function(){return a=h=o=void 0,this},disabled:function(){return!a},lock:function(){return h=void 0,o||u.disable(),this},locked:function(){return!h},fireWith:function(t,o){return!a||i&&!h||(o=o||[],o=[t,o.slice?o.slice():o],e?h.push(o):l(o)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},rt.extend({Deferred:function(t){var e=[["resolve","done",rt.Callbacks("once memory"),"resolved"],["reject","fail",rt.Callbacks("once memory"),"rejected"],["notify","progress",rt.Callbacks("memory")]],o="pending",i={state:function(){return o},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var t=arguments;return rt.Deferred(function(o){rt.each(e,function(e,n){var s=rt.isFunction(t[e])&&t[e];r[n[1]](function(){var t=s&&s.apply(this,arguments);t&&rt.isFunction(t.promise)?t.promise().done(o.resolve).fail(o.reject).progress(o.notify):o[n[0]+"With"](this===i?o.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?rt.extend(t,i):i}},r={};return i.pipe=i.then,rt.each(e,function(t,n){var s=n[2],p=n[3];i[n[1]]=s.add,p&&s.add(function(){o=p},e[1^t][2].disable,e[2][2].lock),r[n[0]]=function(){return r[n[0]+"With"](this===r?i:this,arguments),this},r[n[0]+"With"]=s.fireWith}),i.promise(r),t&&t.call(r,r),r},when:function(t){var e,o,i,r=0,n=Y.call(arguments),s=n.length,p=1!==s||t&&rt.isFunction(t.promise)?s:0,a=1===p?t:rt.Deferred(),h=function(t,o,i){return function(r){o[t]=this,i[t]=arguments.length>1?Y.call(arguments):r,i===e?a.notifyWith(o,i):--p||a.resolveWith(o,i)}};if(s>1)for(e=new Array(s),o=new Array(s),i=new Array(s);s>r;r++)n[r]&&rt.isFunction(n[r].promise)?n[r].promise().done(h(r,i,n)).fail(a.reject).progress(h(r,o,e)):--p;return p||a.resolveWith(i,n),a.promise()}});var xt;rt.fn.ready=function(t){return rt.ready.promise().done(t),this},rt.extend({isReady:!1,readyWait:1,holdReady:function(t){t?rt.readyWait++:rt.ready(!0)},ready:function(t){if(t===!0?!--rt.readyWait:!rt.isReady){if(!yt.body)return setTimeout(rt.ready);rt.isReady=!0,t!==!0&&--rt.readyWait>0||(xt.resolveWith(yt,[rt]),rt.fn.triggerHandler&&(rt(yt).triggerHandler("ready"),rt(yt).off("ready")))}}}),rt.ready.promise=function(e){if(!xt)if(xt=rt.Deferred(),"complete"===yt.readyState)setTimeout(rt.ready);else if(yt.addEventListener)yt.addEventListener("DOMContentLoaded",p,!1),t.addEventListener("load",p,!1);else{yt.attachEvent("onreadystatechange",p),t.attachEvent("onload",p);var o=!1;try{o=null==t.frameElement&&yt.documentElement}catch(i){}o&&o.doScroll&&!function r(){if(!rt.isReady){try{o.doScroll("left")}catch(t){return setTimeout(r,50)}s(),rt.ready()}}()}return xt.promise(e)};var St,Tt="undefined";for(St in rt(ot))break;ot.ownLast="0"!==St,ot.inlineBlockNeedsLayout=!1,rt(function(){var t,e,o,i;o=yt.getElementsByTagName("body")[0],o&&o.style&&(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",ot.inlineBlockNeedsLayout=t=3===e.offsetWidth,t&&(o.style.zoom=1)),o.removeChild(i))}),function(){var t=yt.createElement("div");if(null==ot.deleteExpando){ot.deleteExpando=!0;try{delete t.test}catch(e){ot.deleteExpando=!1}}t=null}(),rt.acceptData=function(t){var e=rt.noData[(t.nodeName+" ").toLowerCase()],o=+t.nodeType||1;return(1===o||9===o)&&(!e||e!==!0&&t.getAttribute("classid")===e)};var Et=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Mt=/([A-Z])/g;rt.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(t){return t=t.nodeType?rt.cache[t[rt.expando]]:t[rt.expando],!!t&&!h(t)},data:function(t,e,o){return l(t,e,o)},removeData:function(t,e){return u(t,e)},_data:function(t,e,o){return l(t,e,o,!0)},_removeData:function(t,e){return u(t,e,!0)}}),rt.fn.extend({data:function(t,e){var o,i,r,n=this[0],s=n&&n.attributes;if(void 0===t){if(this.length&&(r=rt.data(n),1===n.nodeType&&!rt._data(n,"parsedAttrs"))){for(o=s.length;o--;)s[o]&&(i=s[o].name,0===i.indexOf("data-")&&(i=rt.camelCase(i.slice(5)),a(n,i,r[i])));rt._data(n,"parsedAttrs",!0)}return r}return"object"==typeof t?this.each(function(){rt.data(this,t)}):arguments.length>1?this.each(function(){rt.data(this,t,e)}):n?a(n,t,rt.data(n,t)):void 0},removeData:function(t){return this.each(function(){rt.removeData(this,t)})}}),rt.extend({queue:function(t,e,o){var i;return t?(e=(e||"fx")+"queue",i=rt._data(t,e),o&&(!i||rt.isArray(o)?i=rt._data(t,e,rt.makeArray(o)):i.push(o)),i||[]):void 0},dequeue:function(t,e){e=e||"fx";var o=rt.queue(t,e),i=o.length,r=o.shift(),n=rt._queueHooks(t,e),s=function(){rt.dequeue(t,e)};"inprogress"===r&&(r=o.shift(),i--),r&&("fx"===e&&o.unshift("inprogress"),delete n.stop,r.call(t,s,n)),!i&&n&&n.empty.fire()},_queueHooks:function(t,e){var o=e+"queueHooks";return rt._data(t,o)||rt._data(t,o,{empty:rt.Callbacks("once memory").add(function(){rt._removeData(t,e+"queue"),rt._removeData(t,o)})})}}),rt.fn.extend({queue:function(t,e){var o=2;return"string"!=typeof t&&(e=t,t="fx",o--),arguments.length<o?rt.queue(this[0],t):void 0===e?this:this.each(function(){var o=rt.queue(this,t,e);rt._queueHooks(this,t),"fx"===t&&"inprogress"!==o[0]&&rt.dequeue(this,t)})},dequeue:function(t){return this.each(function(){rt.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var o,i=1,r=rt.Deferred(),n=this,s=this.length,p=function(){--i||r.resolveWith(n,[n])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";s--;)o=rt._data(n[s],t+"queueHooks"),o&&o.empty&&(i++,o.empty.add(p));return p(),r.promise(e)}});var Ct=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Pt=["Top","Right","Bottom","Left"],At=function(t,e){return t=e||t,"none"===rt.css(t,"display")||!rt.contains(t.ownerDocument,t)},jt=rt.access=function(t,e,o,i,r,n,s){var p=0,a=t.length,h=null==o;if("object"===rt.type(o)){r=!0;for(p in o)rt.access(t,e,p,o[p],!0,n,s)}else if(void 0!==i&&(r=!0,rt.isFunction(i)||(s=!0),h&&(s?(e.call(t,i),e=null):(h=e,e=function(t,e,o){return h.call(rt(t),o)})),e))for(;a>p;p++)e(t[p],o,s?i:i.call(t[p],p,e(t[p],o)));return r?t:h?e.call(t):a?e(t[0],o):n},Nt=/^(?:checkbox|radio)$/i;!function(){var t=yt.createElement("input"),e=yt.createElement("div"),o=yt.createDocumentFragment();if(e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",ot.leadingWhitespace=3===e.firstChild.nodeType,ot.tbody=!e.getElementsByTagName("tbody").length,ot.htmlSerialize=!!e.getElementsByTagName("link").length,ot.html5Clone="<:nav></:nav>"!==yt.createElement("nav").cloneNode(!0).outerHTML,t.type="checkbox",t.checked=!0,o.appendChild(t),ot.appendChecked=t.checked,e.innerHTML="<textarea>x</textarea>",ot.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,o.appendChild(e),e.innerHTML="<input type='radio' checked='checked' name='t'/>",ot.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,ot.noCloneEvent=!0,e.attachEvent&&(e.attachEvent("onclick",function(){ot.noCloneEvent=!1}),e.cloneNode(!0).click()),null==ot.deleteExpando){ot.deleteExpando=!0;try{delete e.test}catch(i){ot.deleteExpando=!1}}}(),function(){var e,o,i=yt.createElement("div");for(e in{submit:!0,change:!0,focusin:!0})o="on"+e,(ot[e+"Bubbles"]=o in t)||(i.setAttribute(o,"t"),ot[e+"Bubbles"]=i.attributes[o].expando===!1);i=null}();var Lt=/^(?:input|select|textarea)$/i,Rt=/^key/,kt=/^(?:mouse|pointer|contextmenu)|click/,It=/^(?:focusinfocus|focusoutblur)$/,Dt=/^([^.]*)(?:\.(.+)|)$/;rt.event={global:{},add:function(t,e,o,i,r){var n,s,p,a,h,l,u,c,f,y,d,g=rt._data(t);if(g){for(o.handler&&(a=o,o=a.handler,r=a.selector),o.guid||(o.guid=rt.guid++),(s=g.events)||(s=g.events={}),(l=g.handle)||(l=g.handle=function(t){return typeof rt===Tt||t&&rt.event.triggered===t.type?void 0:rt.event.dispatch.apply(l.elem,arguments)},l.elem=t),e=(e||"").match(bt)||[""],p=e.length;p--;)n=Dt.exec(e[p])||[],f=d=n[1],y=(n[2]||"").split(".").sort(),f&&(h=rt.event.special[f]||{},f=(r?h.delegateType:h.bindType)||f,h=rt.event.special[f]||{},u=rt.extend({type:f,origType:d,data:i,handler:o,guid:o.guid,selector:r,needsContext:r&&rt.expr.match.needsContext.test(r),namespace:y.join(".")},a),(c=s[f])||(c=s[f]=[],c.delegateCount=0,h.setup&&h.setup.call(t,i,y,l)!==!1||(t.addEventListener?t.addEventListener(f,l,!1):t.attachEvent&&t.attachEvent("on"+f,l))),h.add&&(h.add.call(t,u),u.handler.guid||(u.handler.guid=o.guid)),r?c.splice(c.delegateCount++,0,u):c.push(u),rt.event.global[f]=!0);t=null}},remove:function(t,e,o,i,r){var n,s,p,a,h,l,u,c,f,y,d,g=rt.hasData(t)&&rt._data(t);if(g&&(l=g.events)){for(e=(e||"").match(bt)||[""],h=e.length;h--;)if(p=Dt.exec(e[h])||[],f=d=p[1],y=(p[2]||"").split(".").sort(),f){for(u=rt.event.special[f]||{},f=(i?u.delegateType:u.bindType)||f,c=l[f]||[],p=p[2]&&new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=n=c.length;n--;)s=c[n],!r&&d!==s.origType||o&&o.guid!==s.guid||p&&!p.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(c.splice(n,1),s.selector&&c.delegateCount--,u.remove&&u.remove.call(t,s));a&&!c.length&&(u.teardown&&u.teardown.call(t,y,g.handle)!==!1||rt.removeEvent(t,f,g.handle),delete l[f])}else for(f in l)rt.event.remove(t,f+e[h],o,i,!0);rt.isEmptyObject(l)&&(delete g.handle,rt._removeData(t,"events"))}},trigger:function(e,o,i,r){var n,s,p,a,h,l,u,c=[i||yt],f=et.call(e,"type")?e.type:e,y=et.call(e,"namespace")?e.namespace.split("."):[];if(p=l=i=i||yt,3!==i.nodeType&&8!==i.nodeType&&!It.test(f+rt.event.triggered)&&(f.indexOf(".")>=0&&(y=f.split("."),f=y.shift(),y.sort()),s=f.indexOf(":")<0&&"on"+f,e=e[rt.expando]?e:new rt.Event(f,"object"==typeof e&&e),e.isTrigger=r?2:3,e.namespace=y.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),o=null==o?[e]:rt.makeArray(o,[e]),h=rt.event.special[f]||{},r||!h.trigger||h.trigger.apply(i,o)!==!1)){if(!r&&!h.noBubble&&!rt.isWindow(i)){for(a=h.delegateType||f,It.test(a+f)||(p=p.parentNode);p;p=p.parentNode)c.push(p),l=p;l===(i.ownerDocument||yt)&&c.push(l.defaultView||l.parentWindow||t)}for(u=0;(p=c[u++])&&!e.isPropagationStopped();)e.type=u>1?a:h.bindType||f,n=(rt._data(p,"events")||{})[e.type]&&rt._data(p,"handle"),n&&n.apply(p,o),n=s&&p[s],n&&n.apply&&rt.acceptData(p)&&(e.result=n.apply(p,o),e.result===!1&&e.preventDefault());if(e.type=f,!r&&!e.isDefaultPrevented()&&(!h._default||h._default.apply(c.pop(),o)===!1)&&rt.acceptData(i)&&s&&i[f]&&!rt.isWindow(i)){l=i[s],l&&(i[s]=null),rt.event.triggered=f;try{i[f]()}catch(d){}rt.event.triggered=void 0,l&&(i[s]=l)}return e.result}},dispatch:function(t){t=rt.event.fix(t);var e,o,i,r,n,s=[],p=Y.call(arguments),a=(rt._data(this,"events")||{})[t.type]||[],h=rt.event.special[t.type]||{};if(p[0]=t,t.delegateTarget=this,!h.preDispatch||h.preDispatch.call(this,t)!==!1){for(s=rt.event.handlers.call(this,t,a),e=0;(r=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=r.elem,n=0;(i=r.handlers[n++])&&!t.isImmediatePropagationStopped();)(!t.namespace_re||t.namespace_re.test(i.namespace))&&(t.handleObj=i,t.data=i.data,o=((rt.event.special[i.origType]||{}).handle||i.handler).apply(r.elem,p),void 0!==o&&(t.result=o)===!1&&(t.preventDefault(),t.stopPropagation()));return h.postDispatch&&h.postDispatch.call(this,t),t.result}},handlers:function(t,e){var o,i,r,n,s=[],p=e.delegateCount,a=t.target;if(p&&a.nodeType&&(!t.button||"click"!==t.type))for(;a!=this;a=a.parentNode||this)if(1===a.nodeType&&(a.disabled!==!0||"click"!==t.type)){for(r=[],n=0;p>n;n++)i=e[n],o=i.selector+" ",void 0===r[o]&&(r[o]=i.needsContext?rt(o,this).index(a)>=0:rt.find(o,this,null,[a]).length),r[o]&&r.push(i);r.length&&s.push({elem:a,handlers:r})}return p<e.length&&s.push({elem:this,handlers:e.slice(p)}),s},fix:function(t){if(t[rt.expando])return t;var e,o,i,r=t.type,n=t,s=this.fixHooks[r];for(s||(this.fixHooks[r]=s=kt.test(r)?this.mouseHooks:Rt.test(r)?this.keyHooks:{}),i=s.props?this.props.concat(s.props):this.props,t=new rt.Event(n),e=i.length;e--;)o=i[e],t[o]=n[o];return t.target||(t.target=n.srcElement||yt),3===t.target.nodeType&&(t.target=t.target.parentNode),t.metaKey=!!t.metaKey,s.filter?s.filter(t,n):t},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(t,e){return null==t.which&&(t.which=null!=e.charCode?e.charCode:e.keyCode),t}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(t,e){var o,i,r,n=e.button,s=e.fromElement;return null==t.pageX&&null!=e.clientX&&(i=t.target.ownerDocument||yt,r=i.documentElement,o=i.body,t.pageX=e.clientX+(r&&r.scrollLeft||o&&o.scrollLeft||0)-(r&&r.clientLeft||o&&o.clientLeft||0),t.pageY=e.clientY+(r&&r.scrollTop||o&&o.scrollTop||0)-(r&&r.clientTop||o&&o.clientTop||0)),!t.relatedTarget&&s&&(t.relatedTarget=s===t.target?e.toElement:s),t.which||void 0===n||(t.which=1&n?1:2&n?3:4&n?2:0),t}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==y()&&this.focus)try{return this.focus(),!1}catch(t){}},delegateType:"focusin"},blur:{trigger:function(){return this===y()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return rt.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(t){return rt.nodeName(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}},simulate:function(t,e,o,i){var r=rt.extend(new rt.Event,o,{type:t,isSimulated:!0,originalEvent:{}});i?rt.event.trigger(r,null,e):rt.event.dispatch.call(e,r),r.isDefaultPrevented()&&o.preventDefault()}},rt.removeEvent=yt.removeEventListener?function(t,e,o){t.removeEventListener&&t.removeEventListener(e,o,!1)}:function(t,e,o){var i="on"+e;t.detachEvent&&(typeof t[i]===Tt&&(t[i]=null),t.detachEvent(i,o))},rt.Event=function(t,e){return this instanceof rt.Event?(t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&t.returnValue===!1?c:f):this.type=t,e&&rt.extend(this,e),this.timeStamp=t&&t.timeStamp||rt.now(),void(this[rt.expando]=!0)):new rt.Event(t,e)},rt.Event.prototype={isDefaultPrevented:f,isPropagationStopped:f,isImmediatePropagationStopped:f,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=c,t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=c,t&&(t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0)},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=c,t&&t.stopImmediatePropagation&&t.stopImmediatePropagation(),this.stopPropagation()}},rt.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){rt.event.special[t]={delegateType:e,bindType:e,handle:function(t){var o,i=this,r=t.relatedTarget,n=t.handleObj;return(!r||r!==i&&!rt.contains(i,r))&&(t.type=n.origType,o=n.handler.apply(this,arguments),t.type=e),o}}}),ot.submitBubbles||(rt.event.special.submit={setup:function(){return!rt.nodeName(this,"form")&&void rt.event.add(this,"click._submit keypress._submit",function(t){var e=t.target,o=rt.nodeName(e,"input")||rt.nodeName(e,"button")?e.form:void 0;o&&!rt._data(o,"submitBubbles")&&(rt.event.add(o,"submit._submit",function(t){t._submit_bubble=!0}),rt._data(o,"submitBubbles",!0))})},postDispatch:function(t){t._submit_bubble&&(delete t._submit_bubble,this.parentNode&&!t.isTrigger&&rt.event.simulate("submit",this.parentNode,t,!0))},teardown:function(){return!rt.nodeName(this,"form")&&void rt.event.remove(this,"._submit")}}),ot.changeBubbles||(rt.event.special.change={setup:function(){return Lt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(rt.event.add(this,"propertychange._change",function(t){"checked"===t.originalEvent.propertyName&&(this._just_changed=!0)}),rt.event.add(this,"click._change",function(t){this._just_changed&&!t.isTrigger&&(this._just_changed=!1),rt.event.simulate("change",this,t,!0)})),!1):void rt.event.add(this,"beforeactivate._change",function(t){var e=t.target;Lt.test(e.nodeName)&&!rt._data(e,"changeBubbles")&&(rt.event.add(e,"change._change",function(t){!this.parentNode||t.isSimulated||t.isTrigger||rt.event.simulate("change",this.parentNode,t,!0)}),rt._data(e,"changeBubbles",!0))})},handle:function(t){var e=t.target;return this!==e||t.isSimulated||t.isTrigger||"radio"!==e.type&&"checkbox"!==e.type?t.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return rt.event.remove(this,"._change"),!Lt.test(this.nodeName)}}),ot.focusinBubbles||rt.each({focus:"focusin",blur:"focusout"},function(t,e){var o=function(t){rt.event.simulate(e,t.target,rt.event.fix(t),!0)};rt.event.special[e]={setup:function(){var i=this.ownerDocument||this,r=rt._data(i,e);r||i.addEventListener(t,o,!0),rt._data(i,e,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=rt._data(i,e)-1;r?rt._data(i,e,r):(i.removeEventListener(t,o,!0),rt._removeData(i,e))}}}),rt.fn.extend({on:function(t,e,o,i,r){var n,s;if("object"==typeof t){"string"!=typeof e&&(o=o||e,e=void 0);for(n in t)this.on(n,e,o,t[n],r);return this}if(null==o&&null==i?(i=e,o=e=void 0):null==i&&("string"==typeof e?(i=o,o=void 0):(i=o,o=e,e=void 0)),i===!1)i=f;else if(!i)return this;return 1===r&&(s=i,i=function(t){return rt().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=rt.guid++)),this.each(function(){rt.event.add(this,t,i,o,e)})},one:function(t,e,o,i){return this.on(t,e,o,i,1)},off:function(t,e,o){var i,r;if(t&&t.preventDefault&&t.handleObj)return i=t.handleObj,rt(t.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof t){for(r in t)this.off(r,e,t[r]);return this}return(e===!1||"function"==typeof e)&&(o=e,e=void 0),o===!1&&(o=f),this.each(function(){rt.event.remove(this,t,o,e)})},trigger:function(t,e){return this.each(function(){rt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var o=this[0];return o?rt.event.trigger(t,e,o,!0):void 0}});var Ot="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Ft=/ jQuery\d+="(?:null|\d+)"/g,Bt=new RegExp("<(?:"+Ot+")[\\s/>]","i"),Ut=/^\s+/,Gt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Ht=/<([\w:]+)/,Xt=/<tbody/i,Wt=/<|&#?\w+;/,$t=/<(?:script|style|link)/i,Kt=/checked\s*(?:[^=]|=\s*.checked.)/i,zt=/^$|\/(?:java|ecma)script/i,qt=/^true\/(.*)/,Vt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Yt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:ot.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Zt=d(yt),Jt=Zt.appendChild(yt.createElement("div"));Yt.optgroup=Yt.option,Yt.tbody=Yt.tfoot=Yt.colgroup=Yt.caption=Yt.thead,Yt.th=Yt.td,rt.extend({clone:function(t,e,o){var i,r,n,s,p,a=rt.contains(t.ownerDocument,t);if(ot.html5Clone||rt.isXMLDoc(t)||!Bt.test("<"+t.nodeName+">")?n=t.cloneNode(!0):(Jt.innerHTML=t.outerHTML,Jt.removeChild(n=Jt.firstChild)),!(ot.noCloneEvent&&ot.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||rt.isXMLDoc(t)))for(i=g(n),p=g(t),s=0;null!=(r=p[s]);++s)i[s]&&T(r,i[s]);if(e)if(o)for(p=p||g(t),i=i||g(n),s=0;null!=(r=p[s]);s++)S(r,i[s]);else S(t,n);return i=g(n,"script"),i.length>0&&x(i,!a&&g(t,"script")),i=p=r=null,n},buildFragment:function(t,e,o,i){for(var r,n,s,p,a,h,l,u=t.length,c=d(e),f=[],y=0;u>y;y++)if(n=t[y],n||0===n)if("object"===rt.type(n))rt.merge(f,n.nodeType?[n]:n);else if(Wt.test(n)){for(p=p||c.appendChild(e.createElement("div")),a=(Ht.exec(n)||["",""])[1].toLowerCase(),l=Yt[a]||Yt._default,p.innerHTML=l[1]+n.replace(Gt,"<$1></$2>")+l[2],r=l[0];r--;)p=p.lastChild;if(!ot.leadingWhitespace&&Ut.test(n)&&f.push(e.createTextNode(Ut.exec(n)[0])),!ot.tbody)for(n="table"!==a||Xt.test(n)?"<table>"!==l[1]||Xt.test(n)?0:p:p.firstChild,r=n&&n.childNodes.length;r--;)rt.nodeName(h=n.childNodes[r],"tbody")&&!h.childNodes.length&&n.removeChild(h);for(rt.merge(f,p.childNodes),p.textContent="";p.firstChild;)p.removeChild(p.firstChild);p=c.lastChild}else f.push(e.createTextNode(n));for(p&&c.removeChild(p),ot.appendChecked||rt.grep(g(f,"input"),v),y=0;n=f[y++];)if((!i||-1===rt.inArray(n,i))&&(s=rt.contains(n.ownerDocument,n),p=g(c.appendChild(n),"script"),s&&x(p),o))for(r=0;n=p[r++];)zt.test(n.type||"")&&o.push(n);return p=null,c},cleanData:function(t,e){for(var o,i,r,n,s=0,p=rt.expando,a=rt.cache,h=ot.deleteExpando,l=rt.event.special;null!=(o=t[s]);s++)if((e||rt.acceptData(o))&&(r=o[p],n=r&&a[r])){if(n.events)for(i in n.events)l[i]?rt.event.remove(o,i):rt.removeEvent(o,i,n.handle);a[r]&&(delete a[r],h?delete o[p]:typeof o.removeAttribute!==Tt?o.removeAttribute(p):o[p]=null,V.push(r))}}}),rt.fn.extend({text:function(t){return jt(this,function(t){
-return void 0===t?rt.text(this):this.empty().append((this[0]&&this[0].ownerDocument||yt).createTextNode(t))},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.appendChild(t)}})},prepend:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var o,i=t?rt.filter(t,this):this,r=0;null!=(o=i[r]);r++)e||1!==o.nodeType||rt.cleanData(g(o)),o.parentNode&&(e&&rt.contains(o.ownerDocument,o)&&x(g(o,"script")),o.parentNode.removeChild(o));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&&rt.cleanData(g(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&&rt.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return rt.clone(this,t,e)})},html:function(t){return jt(this,function(t){var e=this[0]||{},o=0,i=this.length;if(void 0===t)return 1===e.nodeType?e.innerHTML.replace(Ft,""):void 0;if(!("string"!=typeof t||$t.test(t)||!ot.htmlSerialize&&Bt.test(t)||!ot.leadingWhitespace&&Ut.test(t)||Yt[(Ht.exec(t)||["",""])[1].toLowerCase()])){t=t.replace(Gt,"<$1></$2>");try{for(;i>o;o++)e=this[o]||{},1===e.nodeType&&(rt.cleanData(g(e,!1)),e.innerHTML=t);e=0}catch(r){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=arguments[0];return this.domManip(arguments,function(e){t=this.parentNode,rt.cleanData(g(this)),t&&t.replaceChild(e,this)}),t&&(t.length||t.nodeType)?this:this.remove()},detach:function(t){return this.remove(t,!0)},domManip:function(t,e){t=Z.apply([],t);var o,i,r,n,s,p,a=0,h=this.length,l=this,u=h-1,c=t[0],f=rt.isFunction(c);if(f||h>1&&"string"==typeof c&&!ot.checkClone&&Kt.test(c))return this.each(function(o){var i=l.eq(o);f&&(t[0]=c.call(this,o,i.html())),i.domManip(t,e)});if(h&&(p=rt.buildFragment(t,this[0].ownerDocument,!1,this),o=p.firstChild,1===p.childNodes.length&&(p=o),o)){for(n=rt.map(g(p,"script"),b),r=n.length;h>a;a++)i=p,a!==u&&(i=rt.clone(i,!0,!0),r&&rt.merge(n,g(i,"script"))),e.call(this[a],i,a);if(r)for(s=n[n.length-1].ownerDocument,rt.map(n,w),a=0;r>a;a++)i=n[a],zt.test(i.type||"")&&!rt._data(i,"globalEval")&&rt.contains(s,i)&&(i.src?rt._evalUrl&&rt._evalUrl(i.src):rt.globalEval((i.text||i.textContent||i.innerHTML||"").replace(Vt,"")));p=o=null}return this}}),rt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){rt.fn[t]=function(t){for(var o,i=0,r=[],n=rt(t),s=n.length-1;s>=i;i++)o=i===s?this:this.clone(!0),rt(n[i])[e](o),J.apply(r,o.get());return this.pushStack(r)}});var _t,Qt={};!function(){var t;ot.shrinkWrapBlocks=function(){if(null!=t)return t;t=!1;var e,o,i;return o=yt.getElementsByTagName("body")[0],o&&o.style?(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",e.appendChild(yt.createElement("div")).style.width="5px",t=3!==e.offsetWidth),o.removeChild(i),t):void 0}}();var te,ee,oe=/^margin/,ie=new RegExp("^("+Ct+")(?!px)[a-z%]+$","i"),re=/^(top|right|bottom|left)$/;t.getComputedStyle?(te=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):t.getComputedStyle(e,null)},ee=function(t,e,o){var i,r,n,s,p=t.style;return o=o||te(t),s=o?o.getPropertyValue(e)||o[e]:void 0,o&&(""!==s||rt.contains(t.ownerDocument,t)||(s=rt.style(t,e)),ie.test(s)&&oe.test(e)&&(i=p.width,r=p.minWidth,n=p.maxWidth,p.minWidth=p.maxWidth=p.width=s,s=o.width,p.width=i,p.minWidth=r,p.maxWidth=n)),void 0===s?s:s+""}):yt.documentElement.currentStyle&&(te=function(t){return t.currentStyle},ee=function(t,e,o){var i,r,n,s,p=t.style;return o=o||te(t),s=o?o[e]:void 0,null==s&&p&&p[e]&&(s=p[e]),ie.test(s)&&!re.test(e)&&(i=p.left,r=t.runtimeStyle,n=r&&r.left,n&&(r.left=t.currentStyle.left),p.left="fontSize"===e?"1em":s,s=p.pixelLeft+"px",p.left=i,n&&(r.left=n)),void 0===s?s:s+""||"auto"}),!function(){function e(){var e,o,i,r;o=yt.getElementsByTagName("body")[0],o&&o.style&&(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",n=s=!1,a=!0,t.getComputedStyle&&(n="1%"!==(t.getComputedStyle(e,null)||{}).top,s="4px"===(t.getComputedStyle(e,null)||{width:"4px"}).width,r=e.appendChild(yt.createElement("div")),r.style.cssText=e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",r.style.marginRight=r.style.width="0",e.style.width="1px",a=!parseFloat((t.getComputedStyle(r,null)||{}).marginRight),e.removeChild(r)),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",r=e.getElementsByTagName("td"),r[0].style.cssText="margin:0;border:0;padding:0;display:none",p=0===r[0].offsetHeight,p&&(r[0].style.display="",r[1].style.display="none",p=0===r[0].offsetHeight),o.removeChild(i))}var o,i,r,n,s,p,a;o=yt.createElement("div"),o.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",r=o.getElementsByTagName("a")[0],(i=r&&r.style)&&(i.cssText="float:left;opacity:.5",ot.opacity="0.5"===i.opacity,ot.cssFloat=!!i.cssFloat,o.style.backgroundClip="content-box",o.cloneNode(!0).style.backgroundClip="",ot.clearCloneStyle="content-box"===o.style.backgroundClip,ot.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,rt.extend(ot,{reliableHiddenOffsets:function(){return null==p&&e(),p},boxSizingReliable:function(){return null==s&&e(),s},pixelPosition:function(){return null==n&&e(),n},reliableMarginRight:function(){return null==a&&e(),a}}))}(),rt.swap=function(t,e,o,i){var r,n,s={};for(n in e)s[n]=t.style[n],t.style[n]=e[n];r=o.apply(t,i||[]);for(n in e)t.style[n]=s[n];return r};var ne=/alpha\([^)]*\)/i,se=/opacity\s*=\s*([^)]*)/,pe=/^(none|table(?!-c[ea]).+)/,ae=new RegExp("^("+Ct+")(.*)$","i"),he=new RegExp("^([+-])=("+Ct+")","i"),le={position:"absolute",visibility:"hidden",display:"block"},ue={letterSpacing:"0",fontWeight:"400"},ce=["Webkit","O","Moz","ms"];rt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var o=ee(t,"opacity");return""===o?"1":o}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":ot.cssFloat?"cssFloat":"styleFloat"},style:function(t,e,o,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var r,n,s,p=rt.camelCase(e),a=t.style;if(e=rt.cssProps[p]||(rt.cssProps[p]=P(a,p)),s=rt.cssHooks[e]||rt.cssHooks[p],void 0===o)return s&&"get"in s&&void 0!==(r=s.get(t,!1,i))?r:a[e];if(n=typeof o,"string"===n&&(r=he.exec(o))&&(o=(r[1]+1)*r[2]+parseFloat(rt.css(t,e)),n="number"),null!=o&&o===o&&("number"!==n||rt.cssNumber[p]||(o+="px"),ot.clearCloneStyle||""!==o||0!==e.indexOf("background")||(a[e]="inherit"),!(s&&"set"in s&&void 0===(o=s.set(t,o,i)))))try{a[e]=o}catch(h){}}},css:function(t,e,o,i){var r,n,s,p=rt.camelCase(e);return e=rt.cssProps[p]||(rt.cssProps[p]=P(t.style,p)),s=rt.cssHooks[e]||rt.cssHooks[p],s&&"get"in s&&(n=s.get(t,!0,o)),void 0===n&&(n=ee(t,e,i)),"normal"===n&&e in ue&&(n=ue[e]),""===o||o?(r=parseFloat(n),o===!0||rt.isNumeric(r)?r||0:n):n}}),rt.each(["height","width"],function(t,e){rt.cssHooks[e]={get:function(t,o,i){return o?pe.test(rt.css(t,"display"))&&0===t.offsetWidth?rt.swap(t,le,function(){return L(t,e,i)}):L(t,e,i):void 0},set:function(t,o,i){var r=i&&te(t);return j(t,o,i?N(t,e,i,ot.boxSizing&&"border-box"===rt.css(t,"boxSizing",!1,r),r):0)}}}),ot.opacity||(rt.cssHooks.opacity={get:function(t,e){return se.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var o=t.style,i=t.currentStyle,r=rt.isNumeric(e)?"alpha(opacity="+100*e+")":"",n=i&&i.filter||o.filter||"";o.zoom=1,(e>=1||""===e)&&""===rt.trim(n.replace(ne,""))&&o.removeAttribute&&(o.removeAttribute("filter"),""===e||i&&!i.filter)||(o.filter=ne.test(n)?n.replace(ne,r):n+" "+r)}}),rt.cssHooks.marginRight=C(ot.reliableMarginRight,function(t,e){return e?rt.swap(t,{display:"inline-block"},ee,[t,"marginRight"]):void 0}),rt.each({margin:"",padding:"",border:"Width"},function(t,e){rt.cssHooks[t+e]={expand:function(o){for(var i=0,r={},n="string"==typeof o?o.split(" "):[o];4>i;i++)r[t+Pt[i]+e]=n[i]||n[i-2]||n[0];return r}},oe.test(t)||(rt.cssHooks[t+e].set=j)}),rt.fn.extend({css:function(t,e){return jt(this,function(t,e,o){var i,r,n={},s=0;if(rt.isArray(e)){for(i=te(t),r=e.length;r>s;s++)n[e[s]]=rt.css(t,e[s],!1,i);return n}return void 0!==o?rt.style(t,e,o):rt.css(t,e)},t,e,arguments.length>1)},show:function(){return A(this,!0)},hide:function(){return A(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){At(this)?rt(this).show():rt(this).hide()})}}),rt.Tween=R,R.prototype={constructor:R,init:function(t,e,o,i,r,n){this.elem=t,this.prop=o,this.easing=r||"swing",this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=n||(rt.cssNumber[o]?"":"px")},cur:function(){var t=R.propHooks[this.prop];return t&&t.get?t.get(this):R.propHooks._default.get(this)},run:function(t){var e,o=R.propHooks[this.prop];return this.pos=e=this.options.duration?rt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),o&&o.set?o.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(t){var e;return null==t.elem[t.prop]||t.elem.style&&null!=t.elem.style[t.prop]?(e=rt.css(t.elem,t.prop,""),e&&"auto"!==e?e:0):t.elem[t.prop]},set:function(t){rt.fx.step[t.prop]?rt.fx.step[t.prop](t):t.elem.style&&(null!=t.elem.style[rt.cssProps[t.prop]]||rt.cssHooks[t.prop])?rt.style(t.elem,t.prop,t.now+t.unit):t.elem[t.prop]=t.now}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},rt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2}},rt.fx=R.prototype.init,rt.fx.step={};var fe,ye,de=/^(?:toggle|show|hide)$/,ge=new RegExp("^(?:([+-])=|)("+Ct+")([a-z%]*)$","i"),ve=/queueHooks$/,me=[O],be={"*":[function(t,e){var o=this.createTween(t,e),i=o.cur(),r=ge.exec(e),n=r&&r[3]||(rt.cssNumber[t]?"":"px"),s=(rt.cssNumber[t]||"px"!==n&&+i)&&ge.exec(rt.css(o.elem,t)),p=1,a=20;if(s&&s[3]!==n){n=n||s[3],r=r||[],s=+i||1;do p=p||".5",s/=p,rt.style(o.elem,t,s+n);while(p!==(p=o.cur()/i)&&1!==p&&--a)}return r&&(s=o.start=+s||+i||0,o.unit=n,o.end=r[1]?s+(r[1]+1)*r[2]:+r[2]),o}]};rt.Animation=rt.extend(B,{tweener:function(t,e){rt.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var o,i=0,r=t.length;r>i;i++)o=t[i],be[o]=be[o]||[],be[o].unshift(e)},prefilter:function(t,e){e?me.unshift(t):me.push(t)}}),rt.speed=function(t,e,o){var i=t&&"object"==typeof t?rt.extend({},t):{complete:o||!o&&e||rt.isFunction(t)&&t,duration:t,easing:o&&e||e&&!rt.isFunction(e)&&e};return i.duration=rt.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in rt.fx.speeds?rt.fx.speeds[i.duration]:rt.fx.speeds._default,(null==i.queue||i.queue===!0)&&(i.queue="fx"),i.old=i.complete,i.complete=function(){rt.isFunction(i.old)&&i.old.call(this),i.queue&&rt.dequeue(this,i.queue)},i},rt.fn.extend({fadeTo:function(t,e,o,i){return this.filter(At).css("opacity",0).show().end().animate({opacity:e},t,o,i)},animate:function(t,e,o,i){var r=rt.isEmptyObject(t),n=rt.speed(e,o,i),s=function(){var e=B(this,rt.extend({},t),n);(r||rt._data(this,"finish"))&&e.stop(!0)};return s.finish=s,r||n.queue===!1?this.each(s):this.queue(n.queue,s)},stop:function(t,e,o){var i=function(t){var e=t.stop;delete t.stop,e(o)};return"string"!=typeof t&&(o=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,r=null!=t&&t+"queueHooks",n=rt.timers,s=rt._data(this);if(r)s[r]&&s[r].stop&&i(s[r]);else for(r in s)s[r]&&s[r].stop&&ve.test(r)&&i(s[r]);for(r=n.length;r--;)n[r].elem!==this||null!=t&&n[r].queue!==t||(n[r].anim.stop(o),e=!1,n.splice(r,1));(e||!o)&&rt.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,o=rt._data(this),i=o[t+"queue"],r=o[t+"queueHooks"],n=rt.timers,s=i?i.length:0;for(o.finish=!0,rt.queue(this,t,[]),r&&r.stop&&r.stop.call(this,!0),e=n.length;e--;)n[e].elem===this&&n[e].queue===t&&(n[e].anim.stop(!0),n.splice(e,1));for(e=0;s>e;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete o.finish})}}),rt.each(["toggle","show","hide"],function(t,e){var o=rt.fn[e];rt.fn[e]=function(t,i,r){return null==t||"boolean"==typeof t?o.apply(this,arguments):this.animate(I(e,!0),t,i,r)}}),rt.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){rt.fn[t]=function(t,o,i){return this.animate(e,t,o,i)}}),rt.timers=[],rt.fx.tick=function(){var t,e=rt.timers,o=0;for(fe=rt.now();o<e.length;o++)t=e[o],t()||e[o]!==t||e.splice(o--,1);e.length||rt.fx.stop(),fe=void 0},rt.fx.timer=function(t){rt.timers.push(t),t()?rt.fx.start():rt.timers.pop()},rt.fx.interval=13,rt.fx.start=function(){ye||(ye=setInterval(rt.fx.tick,rt.fx.interval))},rt.fx.stop=function(){clearInterval(ye),ye=null},rt.fx.speeds={slow:600,fast:200,_default:400},rt.fn.delay=function(t,e){return t=rt.fx?rt.fx.speeds[t]||t:t,e=e||"fx",this.queue(e,function(e,o){var i=setTimeout(e,t);o.stop=function(){clearTimeout(i)}})},function(){var t,e,o,i,r;e=yt.createElement("div"),e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",i=e.getElementsByTagName("a")[0],o=yt.createElement("select"),r=o.appendChild(yt.createElement("option")),t=e.getElementsByTagName("input")[0],i.style.cssText="top:1px",ot.getSetAttribute="t"!==e.className,ot.style=/top/.test(i.getAttribute("style")),ot.hrefNormalized="/a"===i.getAttribute("href"),ot.checkOn=!!t.value,ot.optSelected=r.selected,ot.enctype=!!yt.createElement("form").enctype,o.disabled=!0,ot.optDisabled=!r.disabled,t=yt.createElement("input"),t.setAttribute("value",""),ot.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),ot.radioValue="t"===t.value}();var we=/\r/g;rt.fn.extend({val:function(t){var e,o,i,r=this[0];return arguments.length?(i=rt.isFunction(t),this.each(function(o){var r;1===this.nodeType&&(r=i?t.call(this,o,rt(this).val()):t,null==r?r="":"number"==typeof r?r+="":rt.isArray(r)&&(r=rt.map(r,function(t){return null==t?"":t+""})),e=rt.valHooks[this.type]||rt.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,r,"value")||(this.value=r))})):r?(e=rt.valHooks[r.type]||rt.valHooks[r.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(o=e.get(r,"value"))?o:(o=r.value,"string"==typeof o?o.replace(we,""):null==o?"":o)):void 0}}),rt.extend({valHooks:{option:{get:function(t){var e=rt.find.attr(t,"value");return null!=e?e:rt.trim(rt.text(t))}},select:{get:function(t){for(var e,o,i=t.options,r=t.selectedIndex,n="select-one"===t.type||0>r,s=n?null:[],p=n?r+1:i.length,a=0>r?p:n?r:0;p>a;a++)if(o=i[a],!(!o.selected&&a!==r||(ot.optDisabled?o.disabled:null!==o.getAttribute("disabled"))||o.parentNode.disabled&&rt.nodeName(o.parentNode,"optgroup"))){if(e=rt(o).val(),n)return e;s.push(e)}return s},set:function(t,e){for(var o,i,r=t.options,n=rt.makeArray(e),s=r.length;s--;)if(i=r[s],rt.inArray(rt.valHooks.option.get(i),n)>=0)try{i.selected=o=!0}catch(p){i.scrollHeight}else i.selected=!1;return o||(t.selectedIndex=-1),r}}}}),rt.each(["radio","checkbox"],function(){rt.valHooks[this]={set:function(t,e){return rt.isArray(e)?t.checked=rt.inArray(rt(t).val(),e)>=0:void 0}},ot.checkOn||(rt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var xe,Se,Te=rt.expr.attrHandle,Ee=/^(?:checked|selected)$/i,Me=ot.getSetAttribute,Ce=ot.input;rt.fn.extend({attr:function(t,e){return jt(this,rt.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){rt.removeAttr(this,t)})}}),rt.extend({attr:function(t,e,o){var i,r,n=t.nodeType;if(t&&3!==n&&8!==n&&2!==n)return typeof t.getAttribute===Tt?rt.prop(t,e,o):(1===n&&rt.isXMLDoc(t)||(e=e.toLowerCase(),i=rt.attrHooks[e]||(rt.expr.match.bool.test(e)?Se:xe)),void 0===o?i&&"get"in i&&null!==(r=i.get(t,e))?r:(r=rt.find.attr(t,e),null==r?void 0:r):null!==o?i&&"set"in i&&void 0!==(r=i.set(t,o,e))?r:(t.setAttribute(e,o+""),o):void rt.removeAttr(t,e))},removeAttr:function(t,e){var o,i,r=0,n=e&&e.match(bt);if(n&&1===t.nodeType)for(;o=n[r++];)i=rt.propFix[o]||o,rt.expr.match.bool.test(o)?Ce&&Me||!Ee.test(o)?t[i]=!1:t[rt.camelCase("default-"+o)]=t[i]=!1:rt.attr(t,o,""),t.removeAttribute(Me?o:i)},attrHooks:{type:{set:function(t,e){if(!ot.radioValue&&"radio"===e&&rt.nodeName(t,"input")){var o=t.value;return t.setAttribute("type",e),o&&(t.value=o),e}}}}}),Se={set:function(t,e,o){return e===!1?rt.removeAttr(t,o):Ce&&Me||!Ee.test(o)?t.setAttribute(!Me&&rt.propFix[o]||o,o):t[rt.camelCase("default-"+o)]=t[o]=!0,o}},rt.each(rt.expr.match.bool.source.match(/\w+/g),function(t,e){var o=Te[e]||rt.find.attr;Te[e]=Ce&&Me||!Ee.test(e)?function(t,e,i){var r,n;return i||(n=Te[e],Te[e]=r,r=null!=o(t,e,i)?e.toLowerCase():null,Te[e]=n),r}:function(t,e,o){return o?void 0:t[rt.camelCase("default-"+e)]?e.toLowerCase():null}}),Ce&&Me||(rt.attrHooks.value={set:function(t,e,o){return rt.nodeName(t,"input")?void(t.defaultValue=e):xe&&xe.set(t,e,o)}}),Me||(xe={set:function(t,e,o){var i=t.getAttributeNode(o);return i||t.setAttributeNode(i=t.ownerDocument.createAttribute(o)),i.value=e+="","value"===o||e===t.getAttribute(o)?e:void 0}},Te.id=Te.name=Te.coords=function(t,e,o){var i;return o?void 0:(i=t.getAttributeNode(e))&&""!==i.value?i.value:null},rt.valHooks.button={get:function(t,e){var o=t.getAttributeNode(e);return o&&o.specified?o.value:void 0},set:xe.set},rt.attrHooks.contenteditable={set:function(t,e,o){xe.set(t,""!==e&&e,o)}},rt.each(["width","height"],function(t,e){rt.attrHooks[e]={set:function(t,o){return""===o?(t.setAttribute(e,"auto"),o):void 0}}})),ot.style||(rt.attrHooks.style={get:function(t){return t.style.cssText||void 0},set:function(t,e){return t.style.cssText=e+""}});var Pe=/^(?:input|select|textarea|button|object)$/i,Ae=/^(?:a|area)$/i;rt.fn.extend({prop:function(t,e){return jt(this,rt.prop,t,e,arguments.length>1)},removeProp:function(t){return t=rt.propFix[t]||t,this.each(function(){try{this[t]=void 0,delete this[t]}catch(e){}})}}),rt.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(t,e,o){var i,r,n,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return n=1!==s||!rt.isXMLDoc(t),n&&(e=rt.propFix[e]||e,r=rt.propHooks[e]),void 0!==o?r&&"set"in r&&void 0!==(i=r.set(t,o,e))?i:t[e]=o:r&&"get"in r&&null!==(i=r.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=rt.find.attr(t,"tabindex");return e?parseInt(e,10):Pe.test(t.nodeName)||Ae.test(t.nodeName)&&t.href?0:-1}}}}),ot.hrefNormalized||rt.each(["href","src"],function(t,e){rt.propHooks[e]={get:function(t){return t.getAttribute(e,4)}}}),ot.optSelected||(rt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex),null}}),rt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){rt.propFix[this.toLowerCase()]=this}),ot.enctype||(rt.propFix.enctype="encoding");var je=/[\t\r\n\f]/g;rt.fn.extend({addClass:function(t){var e,o,i,r,n,s,p=0,a=this.length,h="string"==typeof t&&t;if(rt.isFunction(t))return this.each(function(e){rt(this).addClass(t.call(this,e,this.className))});if(h)for(e=(t||"").match(bt)||[];a>p;p++)if(o=this[p],i=1===o.nodeType&&(o.className?(" "+o.className+" ").replace(je," "):" ")){for(n=0;r=e[n++];)i.indexOf(" "+r+" ")<0&&(i+=r+" ");s=rt.trim(i),o.className!==s&&(o.className=s)}return this},removeClass:function(t){var e,o,i,r,n,s,p=0,a=this.length,h=0===arguments.length||"string"==typeof t&&t;if(rt.isFunction(t))return this.each(function(e){rt(this).removeClass(t.call(this,e,this.className))});if(h)for(e=(t||"").match(bt)||[];a>p;p++)if(o=this[p],i=1===o.nodeType&&(o.className?(" "+o.className+" ").replace(je," "):"")){for(n=0;r=e[n++];)for(;i.indexOf(" "+r+" ")>=0;)i=i.replace(" "+r+" "," ");s=t?rt.trim(i):"",o.className!==s&&(o.className=s)}return this},toggleClass:function(t,e){var o=typeof t;return"boolean"==typeof e&&"string"===o?e?this.addClass(t):this.removeClass(t):this.each(rt.isFunction(t)?function(o){rt(this).toggleClass(t.call(this,o,this.className,e),e)}:function(){if("string"===o)for(var e,i=0,r=rt(this),n=t.match(bt)||[];e=n[i++];)r.hasClass(e)?r.removeClass(e):r.addClass(e);else(o===Tt||"boolean"===o)&&(this.className&&rt._data(this,"__className__",this.className),this.className=this.className||t===!1?"":rt._data(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",o=0,i=this.length;i>o;o++)if(1===this[o].nodeType&&(" "+this[o].className+" ").replace(je," ").indexOf(e)>=0)return!0;return!1}}),rt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){rt.fn[e]=function(t,o){return arguments.length>0?this.on(e,null,t,o):this.trigger(e)}}),rt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)},bind:function(t,e,o){return this.on(t,null,e,o)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,o,i){return this.on(e,t,o,i)},undelegate:function(t,e,o){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",o)}});var Ne=rt.now(),Le=/\?/,Re=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;rt.parseJSON=function(e){if(t.JSON&&t.JSON.parse)return t.JSON.parse(e+"");var o,i=null,r=rt.trim(e+"");return r&&!rt.trim(r.replace(Re,function(t,e,r,n){return o&&e&&(i=0),0===i?t:(o=r||e,i+=!n-!r,"")}))?Function("return "+r)():rt.error("Invalid JSON: "+e)},rt.parseXML=function(e){var o,i;if(!e||"string"!=typeof e)return null;try{t.DOMParser?(i=new DOMParser,o=i.parseFromString(e,"text/xml")):(o=new ActiveXObject("Microsoft.XMLDOM"),o.async="false",o.loadXML(e))}catch(r){o=void 0}return o&&o.documentElement&&!o.getElementsByTagName("parsererror").length||rt.error("Invalid XML: "+e),o};var ke,Ie,De=/#.*$/,Oe=/([?&])_=[^&]*/,Fe=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Be=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ue=/^(?:GET|HEAD)$/,Ge=/^\/\//,He=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Xe={},We={},$e="*/".concat("*");try{Ie=location.href}catch(Ke){Ie=yt.createElement("a"),Ie.href="",Ie=Ie.href}ke=He.exec(Ie.toLowerCase())||[],rt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ie,type:"GET",isLocal:Be.test(ke[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$e,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":rt.parseJSON,"text xml":rt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?H(H(t,rt.ajaxSettings),e):H(rt.ajaxSettings,t)},ajaxPrefilter:U(Xe),ajaxTransport:U(We),ajax:function(t,e){function o(t,e,o,i){var r,l,v,m,w,S=e;2!==b&&(b=2,p&&clearTimeout(p),h=void 0,s=i||"",x.readyState=t>0?4:0,r=t>=200&&300>t||304===t,o&&(m=X(u,x,o)),m=W(u,m,x,r),r?(u.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(rt.lastModified[n]=w),w=x.getResponseHeader("etag"),w&&(rt.etag[n]=w)),204===t||"HEAD"===u.type?S="nocontent":304===t?S="notmodified":(S=m.state,l=m.data,v=m.error,r=!v)):(v=S,(t||!S)&&(S="error",0>t&&(t=0))),x.status=t,x.statusText=(e||S)+"",r?y.resolveWith(c,[l,S,x]):y.rejectWith(c,[x,S,v]),x.statusCode(g),g=void 0,a&&f.trigger(r?"ajaxSuccess":"ajaxError",[x,u,r?l:v]),d.fireWith(c,[x,S]),a&&(f.trigger("ajaxComplete",[x,u]),--rt.active||rt.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var i,r,n,s,p,a,h,l,u=rt.ajaxSetup({},e),c=u.context||u,f=u.context&&(c.nodeType||c.jquery)?rt(c):rt.event,y=rt.Deferred(),d=rt.Callbacks("once memory"),g=u.statusCode||{},v={},m={},b=0,w="canceled",x={readyState:0,getResponseHeader:function(t){var e;if(2===b){if(!l)for(l={};e=Fe.exec(s);)l[e[1].toLowerCase()]=e[2];e=l[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(t,e){var o=t.toLowerCase();return b||(t=m[o]=m[o]||t,v[t]=e),this},overrideMimeType:function(t){return b||(u.mimeType=t),this},statusCode:function(t){var e;if(t)if(2>b)for(e in t)g[e]=[g[e],t[e]];else x.always(t[x.status]);return this},abort:function(t){var e=t||w;return h&&h.abort(e),o(0,e),this}};if(y.promise(x).complete=d.add,x.success=x.done,x.error=x.fail,u.url=((t||u.url||Ie)+"").replace(De,"").replace(Ge,ke[1]+"//"),u.type=e.method||e.type||u.method||u.type,u.dataTypes=rt.trim(u.dataType||"*").toLowerCase().match(bt)||[""],null==u.crossDomain&&(i=He.exec(u.url.toLowerCase()),u.crossDomain=!(!i||i[1]===ke[1]&&i[2]===ke[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(ke[3]||("http:"===ke[1]?"80":"443")))),u.data&&u.processData&&"string"!=typeof u.data&&(u.data=rt.param(u.data,u.traditional)),G(Xe,u,e,x),2===b)return x;a=rt.event&&u.global,a&&0===rt.active++&&rt.event.trigger("ajaxStart"),u.type=u.type.toUpperCase(),u.hasContent=!Ue.test(u.type),n=u.url,u.hasContent||(u.data&&(n=u.url+=(Le.test(n)?"&":"?")+u.data,delete u.data),u.cache===!1&&(u.url=Oe.test(n)?n.replace(Oe,"$1_="+Ne++):n+(Le.test(n)?"&":"?")+"_="+Ne++)),u.ifModified&&(rt.lastModified[n]&&x.setRequestHeader("If-Modified-Since",rt.lastModified[n]),rt.etag[n]&&x.setRequestHeader("If-None-Match",rt.etag[n])),(u.data&&u.hasContent&&u.contentType!==!1||e.contentType)&&x.setRequestHeader("Content-Type",u.contentType),x.setRequestHeader("Accept",u.dataTypes[0]&&u.accepts[u.dataTypes[0]]?u.accepts[u.dataTypes[0]]+("*"!==u.dataTypes[0]?", "+$e+"; q=0.01":""):u.accepts["*"]);for(r in u.headers)x.setRequestHeader(r,u.headers[r]);if(u.beforeSend&&(u.beforeSend.call(c,x,u)===!1||2===b))return x.abort();w="abort";for(r in{success:1,error:1,complete:1})x[r](u[r]);if(h=G(We,u,e,x)){x.readyState=1,a&&f.trigger("ajaxSend",[x,u]),u.async&&u.timeout>0&&(p=setTimeout(function(){x.abort("timeout")},u.timeout));try{b=1,h.send(v,o)}catch(S){if(!(2>b))throw S;o(-1,S)}}else o(-1,"No Transport");return x},getJSON:function(t,e,o){return rt.get(t,e,o,"json")},getScript:function(t,e){return rt.get(t,void 0,e,"script")}}),rt.each(["get","post"],function(t,e){rt[e]=function(t,o,i,r){return rt.isFunction(o)&&(r=r||i,i=o,o=void 0),rt.ajax({url:t,type:e,dataType:r,data:o,success:i})}}),rt._evalUrl=function(t){return rt.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},rt.fn.extend({wrapAll:function(t){if(rt.isFunction(t))return this.each(function(e){rt(this).wrapAll(t.call(this,e))});if(this[0]){var e=rt(t,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstChild&&1===t.firstChild.nodeType;)t=t.firstChild;return t}).append(this)}return this},wrapInner:function(t){return this.each(rt.isFunction(t)?function(e){rt(this).wrapInner(t.call(this,e))}:function(){var e=rt(this),o=e.contents();o.length?o.wrapAll(t):e.append(t)})},wrap:function(t){var e=rt.isFunction(t);return this.each(function(o){rt(this).wrapAll(e?t.call(this,o):t)})},unwrap:function(){return this.parent().each(function(){rt.nodeName(this,"body")||rt(this).replaceWith(this.childNodes)}).end()}}),rt.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0||!ot.reliableHiddenOffsets()&&"none"===(t.style&&t.style.display||rt.css(t,"display"))},rt.expr.filters.visible=function(t){return!rt.expr.filters.hidden(t)};var ze=/%20/g,qe=/\[\]$/,Ve=/\r?\n/g,Ye=/^(?:submit|button|image|reset|file)$/i,Ze=/^(?:input|select|textarea|keygen)/i;rt.param=function(t,e){var o,i=[],r=function(t,e){e=rt.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=rt.ajaxSettings&&rt.ajaxSettings.traditional),rt.isArray(t)||t.jquery&&!rt.isPlainObject(t))rt.each(t,function(){r(this.name,this.value)});else for(o in t)$(o,t[o],e,r);return i.join("&").replace(ze,"+")},rt.fn.extend({serialize:function(){return rt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=rt.prop(this,"elements");return t?rt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!rt(this).is(":disabled")&&Ze.test(this.nodeName)&&!Ye.test(t)&&(this.checked||!Nt.test(t))}).map(function(t,e){var o=rt(this).val();return null==o?null:rt.isArray(o)?rt.map(o,function(t){return{name:e.name,value:t.replace(Ve,"\r\n")}}):{name:e.name,value:o.replace(Ve,"\r\n")}}).get()}}),rt.ajaxSettings.xhr=void 0!==t.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&K()||z()}:K;var Je=0,_e={},Qe=rt.ajaxSettings.xhr();t.attachEvent&&t.attachEvent("onunload",function(){for(var t in _e)_e[t](void 0,!0)}),ot.cors=!!Qe&&"withCredentials"in Qe,Qe=ot.ajax=!!Qe,Qe&&rt.ajaxTransport(function(t){if(!t.crossDomain||ot.cors){var e;return{send:function(o,i){var r,n=t.xhr(),s=++Je;if(n.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(r in t.xhrFields)n[r]=t.xhrFields[r];t.mimeType&&n.overrideMimeType&&n.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(r in o)void 0!==o[r]&&n.setRequestHeader(r,o[r]+"");n.send(t.hasContent&&t.data||null),e=function(o,r){var p,a,h;if(e&&(r||4===n.readyState))if(delete _e[s],e=void 0,n.onreadystatechange=rt.noop,r)4!==n.readyState&&n.abort();else{h={},p=n.status,"string"==typeof n.responseText&&(h.text=n.responseText);try{a=n.statusText}catch(l){a=""}p||!t.isLocal||t.crossDomain?1223===p&&(p=204):p=h.text?200:404}h&&i(p,a,h,n.getAllResponseHeaders())},t.async?4===n.readyState?setTimeout(e):n.onreadystatechange=_e[s]=e:e()},abort:function(){e&&e(void 0,!0)}}}}),rt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return rt.globalEval(t),t}}}),rt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET",t.global=!1)}),rt.ajaxTransport("script",function(t){if(t.crossDomain){var e,o=yt.head||rt("head")[0]||yt.documentElement;return{send:function(i,r){e=yt.createElement("script"),e.async=!0,t.scriptCharset&&(e.charset=t.scriptCharset),e.src=t.url,e.onload=e.onreadystatechange=function(t,o){(o||!e.readyState||/loaded|complete/.test(e.readyState))&&(e.onload=e.onreadystatechange=null,e.parentNode&&e.parentNode.removeChild(e),e=null,o||r(200,"success"))},o.insertBefore(e,o.firstChild)},
-abort:function(){e&&e.onload(void 0,!0)}}}});var to=[],eo=/(=)\?(?=&|$)|\?\?/;rt.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=to.pop()||rt.expando+"_"+Ne++;return this[t]=!0,t}}),rt.ajaxPrefilter("json jsonp",function(e,o,i){var r,n,s,p=e.jsonp!==!1&&(eo.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&eo.test(e.data)&&"data");return p||"jsonp"===e.dataTypes[0]?(r=e.jsonpCallback=rt.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,p?e[p]=e[p].replace(eo,"$1"+r):e.jsonp!==!1&&(e.url+=(Le.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return s||rt.error(r+" was not called"),s[0]},e.dataTypes[0]="json",n=t[r],t[r]=function(){s=arguments},i.always(function(){t[r]=n,e[r]&&(e.jsonpCallback=o.jsonpCallback,to.push(r)),s&&rt.isFunction(n)&&n(s[0]),s=n=void 0}),"script"):void 0}),rt.parseHTML=function(t,e,o){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(o=e,e=!1),e=e||yt;var i=ut.exec(t),r=!o&&[];return i?[e.createElement(i[1])]:(i=rt.buildFragment([t],e,r),r&&r.length&&rt(r).remove(),rt.merge([],i.childNodes))};var oo=rt.fn.load;rt.fn.load=function(t,e,o){if("string"!=typeof t&&oo)return oo.apply(this,arguments);var i,r,n,s=this,p=t.indexOf(" ");return p>=0&&(i=rt.trim(t.slice(p,t.length)),t=t.slice(0,p)),rt.isFunction(e)?(o=e,e=void 0):e&&"object"==typeof e&&(n="POST"),s.length>0&&rt.ajax({url:t,type:n,dataType:"html",data:e}).done(function(t){r=arguments,s.html(i?rt("<div>").append(rt.parseHTML(t)).find(i):t)}).complete(o&&function(t,e){s.each(o,r||[t.responseText,e,t])}),this},rt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){rt.fn[e]=function(t){return this.on(e,t)}}),rt.expr.filters.animated=function(t){return rt.grep(rt.timers,function(e){return t===e.elem}).length};var io=t.document.documentElement;rt.offset={setOffset:function(t,e,o){var i,r,n,s,p,a,h,l=rt.css(t,"position"),u=rt(t),c={};"static"===l&&(t.style.position="relative"),p=u.offset(),n=rt.css(t,"top"),a=rt.css(t,"left"),h=("absolute"===l||"fixed"===l)&&rt.inArray("auto",[n,a])>-1,h?(i=u.position(),s=i.top,r=i.left):(s=parseFloat(n)||0,r=parseFloat(a)||0),rt.isFunction(e)&&(e=e.call(t,o,p)),null!=e.top&&(c.top=e.top-p.top+s),null!=e.left&&(c.left=e.left-p.left+r),"using"in e?e.using.call(t,c):u.css(c)}},rt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){rt.offset.setOffset(this,t,e)});var e,o,i={top:0,left:0},r=this[0],n=r&&r.ownerDocument;return n?(e=n.documentElement,rt.contains(e,r)?(typeof r.getBoundingClientRect!==Tt&&(i=r.getBoundingClientRect()),o=q(n),{top:i.top+(o.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(o.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}):i):void 0},position:function(){if(this[0]){var t,e,o={top:0,left:0},i=this[0];return"fixed"===rt.css(i,"position")?e=i.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),rt.nodeName(t[0],"html")||(o=t.offset()),o.top+=rt.css(t[0],"borderTopWidth",!0),o.left+=rt.css(t[0],"borderLeftWidth",!0)),{top:e.top-o.top-rt.css(i,"marginTop",!0),left:e.left-o.left-rt.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||io;t&&!rt.nodeName(t,"html")&&"static"===rt.css(t,"position");)t=t.offsetParent;return t||io})}}),rt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var o=/Y/.test(e);rt.fn[t]=function(i){return jt(this,function(t,i,r){var n=q(t);return void 0===r?n?e in n?n[e]:n.document.documentElement[i]:t[i]:void(n?n.scrollTo(o?rt(n).scrollLeft():r,o?r:rt(n).scrollTop()):t[i]=r)},t,i,arguments.length,null)}}),rt.each(["top","left"],function(t,e){rt.cssHooks[e]=C(ot.pixelPosition,function(t,o){return o?(o=ee(t,e),ie.test(o)?rt(t).position()[e]+"px":o):void 0})}),rt.each({Height:"height",Width:"width"},function(t,e){rt.each({padding:"inner"+t,content:e,"":"outer"+t},function(o,i){rt.fn[i]=function(i,r){var n=arguments.length&&(o||"boolean"!=typeof i),s=o||(i===!0||r===!0?"margin":"border");return jt(this,function(e,o,i){var r;return rt.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+t],r["scroll"+t],e.body["offset"+t],r["offset"+t],r["client"+t])):void 0===i?rt.css(e,o,s):rt.style(e,o,i,s)},e,n?i:void 0,n,null)}})}),rt.fn.size=function(){return this.length},rt.fn.andSelf=rt.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return rt});var ro=t.jQuery,no=t.$;return rt.noConflict=function(e){return t.$===rt&&(t.$=no),e&&t.jQuery===rt&&(t.jQuery=ro),rt},typeof e===Tt&&(t.jQuery=t.$=rt),rt}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var o in e)if(void 0!==t.style[o])return{end:e[o]};return!1}t.fn.emulateTransitionEnd=function(e){var o=!1,i=this;t(this).one("bsTransitionEnd",function(){o=!0});var r=function(){o||t(i).trigger(t.support.transition.end)};return setTimeout(r,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),r=o.data("bs.alert");r||o.data("bs.alert",r=new i(this)),"string"==typeof e&&r[e].call(o)})}var o='[data-dismiss="alert"]',i=function(e){t(e).on("click",o,this.close)};i.VERSION="3.3.4",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function o(){s.detach().trigger("closed.bs.alert").remove()}var r=t(this),n=r.attr("data-target");n||(n=r.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,""));var s=t(n);e&&e.preventDefault(),s.length||(s=r.closest(".alert")),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o())};var r=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=r,this},t(document).on("click.bs.alert.data-api",o,i.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.button"),n="object"==typeof e&&e;r||i.data("bs.button",r=new o(this,n)),"toggle"==e?r.toggle():e&&r.setState(e)})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.isLoading=!1};o.VERSION="3.3.4",o.DEFAULTS={loadingText:"loading..."},o.prototype.setState=function(e){var o="disabled",i=this.$element,r=i.is("input")?"val":"html",n=i.data();e+="Text",null==n.resetText&&i.data("resetText",i[r]()),setTimeout(t.proxy(function(){i[r](null==n[e]?this.options[e]:n[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(o).attr(o,o)):this.isLoading&&(this.isLoading=!1,i.removeClass(o).removeAttr(o))},this),0)},o.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var o=this.$element.find("input");"radio"==o.prop("type")&&(o.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&o.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));t&&this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=o,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(o){var i=t(o.target);i.hasClass("btn")||(i=i.closest(".btn")),e.call(i,"toggle"),o.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.carousel"),n=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e),s="string"==typeof e?e:n.slide;r||i.data("bs.carousel",r=new o(this,n)),"number"==typeof e?r.to(e):s?r[s]():n.interval&&r.pause().cycle()})}var o=function(e,o){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=o,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};o.VERSION="3.3.4",o.TRANSITION_DURATION=600,o.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},o.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},o.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},o.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},o.prototype.getItemForDirection=function(t,e){var o=this.getItemIndex(e),i="prev"==t&&0===o||"next"==t&&o==this.$items.length-1;if(i&&!this.options.wrap)return e;var r="prev"==t?-1:1,n=(o+r)%this.$items.length;return this.$items.eq(n)},o.prototype.to=function(t){var e=this,o=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):o==t?this.pause().cycle():this.slide(t>o?"next":"prev",this.$items.eq(t))},o.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},o.prototype.next=function(){return this.sliding?void 0:this.slide("next")},o.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},o.prototype.slide=function(e,i){var r=this.$element.find(".item.active"),n=i||this.getItemForDirection(e,r),s=this.interval,p="next"==e?"left":"right",a=this;if(n.hasClass("active"))return this.sliding=!1;var h=n[0],l=t.Event("slide.bs.carousel",{relatedTarget:h,direction:p});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var u=t(this.$indicators.children()[this.getItemIndex(n)]);u&&u.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:p});return t.support.transition&&this.$element.hasClass("slide")?(n.addClass(e),n[0].offsetWidth,r.addClass(p),n.addClass(p),r.one("bsTransitionEnd",function(){n.removeClass([e,p].join(" ")).addClass("active"),r.removeClass(["active",p].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger(c)},0)}).emulateTransitionEnd(o.TRANSITION_DURATION)):(r.removeClass("active"),n.addClass("active"),this.sliding=!1,this.$element.trigger(c)),s&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=o,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var r=function(o){var i,r=t(this),n=t(r.attr("data-target")||(i=r.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(n.hasClass("carousel")){var s=t.extend({},n.data(),r.data()),p=r.attr("data-slide-to");p&&(s.interval=!1),e.call(n,s),p&&n.data("bs.carousel").to(p),o.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",r).on("click.bs.carousel.data-api","[data-slide-to]",r),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var o=t(this);e.call(o,o.data())})})}(jQuery),+function(t){"use strict";function e(e){var o,i=e.attr("data-target")||(o=e.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,"");return t(i)}function o(e){return this.each(function(){var o=t(this),r=o.data("bs.collapse"),n=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e);!r&&n.toggle&&/show|hide/.test(e)&&(n.toggle=!1),r||o.data("bs.collapse",r=new i(this,n)),"string"==typeof e&&r[e]()})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.4",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,r=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(r&&r.length&&(e=r.data("bs.collapse"),e&&e.transitioning))){var n=t.Event("show.bs.collapse");if(this.$element.trigger(n),!n.isDefaultPrevented()){r&&r.length&&(o.call(r,"hide"),e||r.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var p=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return p.call(this);var a=t.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",t.proxy(p,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[s](this.$element[0][a])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var o=this.dimension();this.$element[o](this.$element[o]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[o](0).one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(i.TRANSITION_DURATION):r.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(o,i){var r=t(i);this.addAriaAndCollapsedClass(e(r),r)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var o=t.hasClass("in");t.attr("aria-expanded",o),e.toggleClass("collapsed",!o).attr("aria-expanded",o)};var r=t.fn.collapse;t.fn.collapse=o,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=r,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var r=t(this);r.attr("data-target")||i.preventDefault();var n=e(r),s=n.data("bs.collapse"),p=s?"toggle":r.data();o.call(n,p)})}(jQuery),+function(t){"use strict";function e(e){e&&3===e.which||(t(r).remove(),t(n).each(function(){var i=t(this),r=o(i),n={relatedTarget:this};r.hasClass("open")&&(r.trigger(e=t.Event("hide.bs.dropdown",n)),e.isDefaultPrevented()||(i.attr("aria-expanded","false"),r.removeClass("open").trigger("hidden.bs.dropdown",n)))}))}function o(e){var o=e.attr("data-target");o||(o=e.attr("href"),o=o&&/#[A-Za-z]/.test(o)&&o.replace(/.*(?=#[^\s]*$)/,""));var i=o&&t(o);return i&&i.length?i:e.parent()}function i(e){return this.each(function(){var o=t(this),i=o.data("bs.dropdown");i||o.data("bs.dropdown",i=new s(this)),"string"==typeof e&&i[e].call(o)})}var r=".dropdown-backdrop",n='[data-toggle="dropdown"]',s=function(e){t(e).on("click.bs.dropdown",this.toggle)};s.VERSION="3.3.4",s.prototype.toggle=function(i){var r=t(this);if(!r.is(".disabled, :disabled")){var n=o(r),s=n.hasClass("open");if(e(),!s){"ontouchstart"in document.documentElement&&!n.closest(".navbar-nav").length&&t('<div class="dropdown-backdrop"/>').insertAfter(t(this)).on("click",e);var p={relatedTarget:this};if(n.trigger(i=t.Event("show.bs.dropdown",p)),i.isDefaultPrevented())return;r.trigger("focus").attr("aria-expanded","true"),n.toggleClass("open").trigger("shown.bs.dropdown",p)}return!1}},s.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var i=t(this);if(e.preventDefault(),e.stopPropagation(),!i.is(".disabled, :disabled")){var r=o(i),s=r.hasClass("open");if(!s&&27!=e.which||s&&27==e.which)return 27==e.which&&r.find(n).trigger("focus"),i.trigger("click");var p=" li:not(.disabled):visible a",a=r.find('[role="menu"]'+p+', [role="listbox"]'+p);if(a.length){var h=a.index(e.target);38==e.which&&h>0&&h--,40==e.which&&h<a.length-1&&h++,~h||(h=0),a.eq(h).trigger("focus")}}}};var p=t.fn.dropdown;t.fn.dropdown=i,t.fn.dropdown.Constructor=s,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=p,this},t(document).on("click.bs.dropdown.data-api",e).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",n,s.prototype.toggle).on("keydown.bs.dropdown.data-api",n,s.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',s.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',s.prototype.keydown)}(jQuery),+function(t){"use strict";function e(e,i){return this.each(function(){var r=t(this),n=r.data("bs.modal"),s=t.extend({},o.DEFAULTS,r.data(),"object"==typeof e&&e);n||r.data("bs.modal",n=new o(this,s)),"string"==typeof e?n[e](i):s.show&&n.show(i)})}var o=function(e,o){this.options=o,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};o.VERSION="3.3.4",o.TRANSITION_DURATION=300,o.BACKDROP_TRANSITION_DURATION=150,o.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},o.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},o.prototype.show=function(e){var i=this,r=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(r),this.isShown||r.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var r=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),r&&i.$element[0].offsetWidth,i.$element.addClass("in").attr("aria-hidden",!1),i.enforceFocus();var n=t.Event("shown.bs.modal",{relatedTarget:e});r?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(n)}).emulateTransitionEnd(o.TRANSITION_DURATION):i.$element.trigger("focus").trigger(n)}))},o.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(o.TRANSITION_DURATION):this.hideModal())},o.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},o.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},o.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},o.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},o.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},o.prototype.backdrop=function(e){var i=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var n=t.support.transition&&r;if(this.$backdrop=t('<div class="modal-backdrop '+r+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),n&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;n?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(o.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var s=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",s).emulateTransitionEnd(o.BACKDROP_TRANSITION_DURATION):s()}else e&&e()},o.prototype.handleUpdate=function(){this.adjustDialog()},o.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},o.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},o.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},o.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},o.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},o.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var i=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=o,t.fn.modal.noConflict=function(){return t.fn.modal=i,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(o){var i=t(this),r=i.attr("href"),n=t(i.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=n.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(r)&&r},n.data(),i.data());i.is("a")&&o.preventDefault(),n.one("show.bs.modal",function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),e.call(n,s,this)})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.tooltip"),n="object"==typeof e&&e;(r||!/destroy|hide/.test(e))&&(r||i.data("bs.tooltip",r=new o(this,n)),"string"==typeof e&&r[e]())})}var o=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",t,e)};o.VERSION="3.3.4",o.TRANSITION_DURATION=150,o.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},o.prototype.init=function(e,o,i){if(this.enabled=!0,this.type=e,this.$element=t(o),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var r=this.options.trigger.split(" "),n=r.length;n--;){var s=r[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=s){var p="hover"==s?"mouseenter":"focusin",a="hover"==s?"mouseleave":"focusout";this.$element.on(p+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},o.prototype.getDelegateOptions=function(){var e={},o=this.getDefaults();return this._options&&t.each(this._options,function(t,i){o[t]!=i&&(e[t]=i)}),e},o.prototype.enter=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o&&o.$tip&&o.$tip.is(":visible")?void(o.hoverState="in"):(o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="in",o.options.delay&&o.options.delay.show?void(o.timeout=setTimeout(function(){"in"==o.hoverState&&o.show()},o.options.delay.show)):o.show())},o.prototype.leave=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="out",o.options.delay&&o.options.delay.hide?void(o.timeout=setTimeout(function(){"out"==o.hoverState&&o.hide()},o.options.delay.hide)):o.hide()},o.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var r=this,n=this.tip(),s=this.getUID(this.type);this.setContent(),n.attr("id",s),this.$element.attr("aria-describedby",s),this.options.animation&&n.addClass("fade");var p="function"==typeof this.options.placement?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,h=a.test(p);h&&(p=p.replace(a,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass(p).data("bs."+this.type,this),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var l=this.getPosition(),u=n[0].offsetWidth,c=n[0].offsetHeight;if(h){var f=p,y=this.options.container?t(this.options.container):this.$element.parent(),d=this.getPosition(y);p="bottom"==p&&l.bottom+c>d.bottom?"top":"top"==p&&l.top-c<d.top?"bottom":"right"==p&&l.right+u>d.width?"left":"left"==p&&l.left-u<d.left?"right":p,n.removeClass(f).addClass(p)}var g=this.getCalculatedOffset(p,l,u,c);this.applyPlacement(g,p);var v=function(){var t=r.hoverState;r.$element.trigger("shown.bs."+r.type),r.hoverState=null,"out"==t&&r.leave(r)};t.support.transition&&this.$tip.hasClass("fade")?n.one("bsTransitionEnd",v).emulateTransitionEnd(o.TRANSITION_DURATION):v()}},o.prototype.applyPlacement=function(e,o){var i=this.tip(),r=i[0].offsetWidth,n=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),p=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(p)&&(p=0),e.top=e.top+s,e.left=e.left+p,t.offset.setOffset(i[0],t.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),i.addClass("in");var a=i[0].offsetWidth,h=i[0].offsetHeight;"top"==o&&h!=n&&(e.top=e.top+n-h);var l=this.getViewportAdjustedDelta(o,e,a,h);l.left?e.left+=l.left:e.top+=l.top;var u=/top|bottom/.test(o),c=u?2*l.left-r+a:2*l.top-n+h,f=u?"offsetWidth":"offsetHeight";i.offset(e),this.replaceArrow(c,i[0][f],u)},o.prototype.replaceArrow=function(t,e,o){this.arrow().css(o?"left":"top",50*(1-t/e)+"%").css(o?"top":"left","")},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},o.prototype.hide=function(e){function i(){"in"!=r.hoverState&&n.detach(),r.$element.removeAttr("aria-describedby").trigger("hidden.bs."+r.type),e&&e()}var r=this,n=t(this.$tip),s=t.Event("hide.bs."+this.type);return this.$element.trigger(s),s.isDefaultPrevented()?void 0:(n.removeClass("in"),t.support.transition&&n.hasClass("fade")?n.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i(),this.hoverState=null,this)},o.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},o.prototype.hasContent=function(){return this.getTitle()},o.prototype.getPosition=function(e){e=e||this.$element;var o=e[0],i="BODY"==o.tagName,r=o.getBoundingClientRect();null==r.width&&(r=t.extend({},r,{width:r.right-r.left,height:r.bottom-r.top}));var n=i?{top:0,left:0}:e.offset(),s={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},p=i?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},r,s,p,n)},o.prototype.getCalculatedOffset=function(t,e,o,i){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-o/2}:"top"==t?{top:e.top-i,left:e.left+e.width/2-o/2}:"left"==t?{top:e.top+e.height/2-i/2,left:e.left-o}:{top:e.top+e.height/2-i/2,left:e.left+e.width}},o.prototype.getViewportAdjustedDelta=function(t,e,o,i){var r={top:0,left:0};if(!this.$viewport)return r;var n=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(t)){var p=e.top-n-s.scroll,a=e.top+n-s.scroll+i;p<s.top?r.top=s.top-p:a>s.top+s.height&&(r.top=s.top+s.height-a)}else{var h=e.left-n,l=e.left+n+o;h<s.left?r.left=s.left-h:l>s.width&&(r.left=s.left+s.width-l)}return r},o.prototype.getTitle=function(){var t,e=this.$element,o=this.options;return t=e.attr("data-original-title")||("function"==typeof o.title?o.title.call(e[0]):o.title)},o.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},o.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},o.prototype.enable=function(){this.enabled=!0},o.prototype.disable=function(){this.enabled=!1},o.prototype.toggleEnabled=function(){this.enabled=!this.enabled},o.prototype.toggle=function(e){var o=this;e&&(o=t(e.currentTarget).data("bs."+this.type),o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o))),o.tip().hasClass("in")?o.leave(o):o.enter(o)},o.prototype.destroy=function(){
-var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type)})};var i=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=o,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.popover"),n="object"==typeof e&&e;(r||!/destroy|hide/.test(e))&&(r||i.data("bs.popover",r=new o(this,n)),"string"==typeof e&&r[e]())})}var o=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");o.VERSION="3.3.4",o.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),o.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),o.prototype.constructor=o,o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),o=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof o?"html":"append":"text"](o),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},o.prototype.hasContent=function(){return this.getTitle()||this.getContent()},o.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=o,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),+function(t){"use strict";function e(o,i){this.$body=t(document.body),this.$scrollElement=t(t(o).is(document.body)?window:o),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function o(o){return this.each(function(){var i=t(this),r=i.data("bs.scrollspy"),n="object"==typeof o&&o;r||i.data("bs.scrollspy",r=new e(this,n)),"string"==typeof o&&r[o]()})}e.VERSION="3.3.4",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,o="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(o="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),r=e.data("target")||e.attr("href"),n=/^#./.test(r)&&t(r);return n&&n.length&&n.is(":visible")&&[[n[o]().top+i,r]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,o=this.getScrollHeight(),i=this.options.offset+o-this.$scrollElement.height(),r=this.offsets,n=this.targets,s=this.activeTarget;if(this.scrollHeight!=o&&this.refresh(),e>=i)return s!=(t=n[n.length-1])&&this.activate(t);if(s&&e<r[0])return this.activeTarget=null,this.clear();for(t=r.length;t--;)s!=n[t]&&e>=r[t]&&(void 0===r[t+1]||e<r[t+1])&&this.activate(n[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var o=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',i=t(o).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=t.fn.scrollspy;t.fn.scrollspy=o,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);o.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.tab");r||i.data("bs.tab",r=new o(this)),"string"==typeof e&&r[e]()})}var o=function(e){this.element=t(e)};o.VERSION="3.3.4",o.TRANSITION_DURATION=150,o.prototype.show=function(){var e=this.element,o=e.closest("ul:not(.dropdown-menu)"),i=e.data("target");if(i||(i=e.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var r=o.find(".active:last a"),n=t.Event("hide.bs.tab",{relatedTarget:e[0]}),s=t.Event("show.bs.tab",{relatedTarget:r[0]});if(r.trigger(n),e.trigger(s),!s.isDefaultPrevented()&&!n.isDefaultPrevented()){var p=t(i);this.activate(e.closest("li"),o),this.activate(p,p.parent(),function(){r.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:r[0]})})}}},o.prototype.activate=function(e,i,r){function n(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),p?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),r&&r()}var s=i.find("> .active"),p=r&&t.support.transition&&(s.length&&s.hasClass("fade")||!!i.find("> .fade").length);s.length&&p?s.one("bsTransitionEnd",n).emulateTransitionEnd(o.TRANSITION_DURATION):n(),s.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=o,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var r=function(o){o.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',r).on("click.bs.tab.data-api",'[data-toggle="pill"]',r)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.affix"),n="object"==typeof e&&e;r||i.data("bs.affix",r=new o(this,n)),"string"==typeof e&&r[e]()})}var o=function(e,i){this.options=t.extend({},o.DEFAULTS,i),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};o.VERSION="3.3.4",o.RESET="affix affix-top affix-bottom",o.DEFAULTS={offset:0,target:window},o.prototype.getState=function(t,e,o,i){var r=this.$target.scrollTop(),n=this.$element.offset(),s=this.$target.height();if(null!=o&&"top"==this.affixed)return o>r&&"top";if("bottom"==this.affixed)return null!=o?!(r+this.unpin<=n.top)&&"bottom":!(t-i>=r+s)&&"bottom";var p=null==this.affixed,a=p?r:n.top,h=p?s:e;return null!=o&&o>=r?"top":null!=i&&a+h>=t-i&&"bottom"},o.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(o.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},o.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},o.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,r=i.top,n=i.bottom,s=t(document.body).height();"object"!=typeof i&&(n=r=i),"function"==typeof r&&(r=i.top(this.$element)),"function"==typeof n&&(n=i.bottom(this.$element));var p=this.getState(s,e,r,n);if(this.affixed!=p){null!=this.unpin&&this.$element.css("top","");var a="affix"+(p?"-"+p:""),h=t.Event(a+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=p,this.unpin="bottom"==p?this.getPinnedOffset():null,this.$element.removeClass(o.RESET).addClass(a).trigger(a.replace("affix","affixed")+".bs.affix")}"bottom"==p&&this.$element.offset({top:s-e-n})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=o,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var o=t(this),i=o.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(o,i)})})}(jQuery),function(t,e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define([],e):t.ol=e()}(this,function(){function t(t,e){var o=t.split("."),i=nd||sd;o[0]in i||!i.execScript||i.execScript("var "+o[0]);for(var r;o.length&&(r=o.shift());)o.length||void 0===e?i=i[r]?i[r]:i[r]={}:i[r]=e}function e(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t}function o(){}function i(t){return t.On||(t.On=++pd)}function r(t){this.message="Assertion failed. See https://openlayers.org/en/v3.19.1/doc/errors/#"+t+" for details.",this.code=t,this.name="AssertionError"}function n(t,e){if(!t)throw new r(e)}function s(t,e,o){return Math.min(Math.max(t,e),o)}function p(t){return n(0<t,29),Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function a(t,e,o,i,r,n){var s=r-o,p=n-i;if(0!==s||0!==p){var a=((t-o)*s+(e-i)*p)/(s*s+p*p);1<a?(o=r,i=n):0<a&&(o+=s*a,i+=p*a)}return h(t,e,o,i)}function h(t,e,o,i){return t=o-t,e=i-e,t*t+e*e}function l(t){return t*Math.PI/180}function u(t,e){var o=t%e;return 0>o*e?o+e:o}function c(t,e,o){return t+o*(e-t)}function f(t){return function(e){if(e)return[s(e[0],t[0],t[2]),s(e[1],t[1],t[3])]}}function y(t){return t}function d(t,e,o){this.center=t,this.resolution=e,this.rotation=o}function g(t){for(var e in t)delete t[e]}function v(t){var e,o=[];for(e in t)o.push(t[e]);return o}function m(t){for(var e in t)return!1;return!e}function b(t){function e(e){var o=t.listener,i=t.jg||t.target;return t.lg&&P(t),o.call(i,e)}return t.kg=e}function w(t,e,o,i){for(var r,n=0,s=t.length;n<s;++n)if(r=t[n],r.listener===e&&r.jg===o)return i&&(r.deleteIndex=n),r}function x(t,e){var o=t.$a;return o?o[e]:void 0}function S(t){var e=t.$a;return e||(e=t.$a={}),e}function T(t,e){var o=x(t,e);if(o){for(var i=0,r=o.length;i<r;++i)t.removeEventListener(e,o[i].kg),g(o[i]);o.length=0,(o=t.$a)&&(delete o[e],0===Object.keys(o).length&&delete t.$a)}}function E(t,e,o,i,r){var n=S(t),s=n[e];return s||(s=n[e]=[]),(n=w(s,o,i,!1))?r||(n.lg=!1):(n={jg:i,lg:!!r,listener:o,target:t,type:e},t.addEventListener(e,b(n)),s.push(n)),n}function M(t,e,o,i){return E(t,e,o,i,!0)}function C(t,e,o,i){(t=x(t,e))&&(o=w(t,o,i,!0))&&P(o)}function P(t){if(t&&t.target){t.target.removeEventListener(t.type,t.kg);var e=x(t.target,t.type);if(e){var o="deleteIndex"in t?t.deleteIndex:e.indexOf(t);-1!==o&&e.splice(o,1),0===e.length&&T(t.target,t.type)}g(t)}}function A(t){var e,o=S(t);for(e in o)T(t,e)}function j(){}function N(t){t.Ib||(t.Ib=!0,t.la())}function L(t){this.type=t,this.target=null}function R(t){t.stopPropagation()}function k(){this.Qa={},this.za={},this.na={}}function I(t,e){return e?e in t.na:0<Object.keys(t.na).length}function D(){k.call(this),this.g=0}function O(t){if(Array.isArray(t))for(var e=0,o=t.length;e<o;++e)P(t[e]);else P(t)}function F(t,e,o){L.call(this,t),this.key=e,this.oldValue=o}function B(t){D.call(this),i(this),this.T={},void 0!==t&&this.H(t)}function U(t){return ld.hasOwnProperty(t)?ld[t]:ld[t]="change:"+t}function G(t,e,o){var i;i=U(e),t.b(new F(i,e,o)),t.b(new F("propertychange",e,o))}function H(t,e){return t>e?1:t<e?-1:0}function X(t,e){return 0<=t.indexOf(e)}function W(t,e,o){var i=t.length;if(t[0]<=e)return 0;if(!(e<=t[i-1]))if(0<o){for(o=1;o<i;++o)if(t[o]<e)return o-1}else if(0>o){for(o=1;o<i;++o)if(t[o]<=e)return o}else for(o=1;o<i;++o){if(t[o]==e)return o;if(t[o]<e)return t[o-1]-e<e-t[o]?o-1:o}return i-1}function $(t){return t.reduce(function(t,e){return Array.isArray(e)?t.concat($(e)):t.concat(e)},[])}function K(t,e){var o,i=Array.isArray(e)?e:[e],r=i.length;for(o=0;o<r;o++)t[t.length]=i[o]}function z(t,e){var o=t.indexOf(e),i=-1<o;return i&&t.splice(o,1),i}function q(t,e){for(var o,i=t.length>>>0,r=0;r<i;r++)if(o=t[r],e(o,r,t))return o;return null}function V(t,e){var o=t.length;if(o!==e.length)return!1;for(var i=0;i<o;i++)if(t[i]!==e[i])return!1;return!0}function Y(t){var e,o=Sn,i=t.length,r=Array(t.length);for(e=0;e<i;e++)r[e]={index:e,value:t[e]};for(r.sort(function(t,e){return o(t.value,e.value)||t.index-e.index}),e=0;e<t.length;e++)t[e]=r[e].value}function Z(t,e){var o;return t.every(function(i,r){return o=r,!e(i,r,t)})?-1:o}function J(t,e){var o=e||H;return t.every(function(e,i){if(0===i)return!0;var r=o(t[i-1],e);return!(0<r||0===r)})}function _(t){return function(e,o,i){if(void 0!==e)return e=W(t,e,i),e=s(e+o,0,t.length-1),o=Math.floor(e),e!=o&&o<t.length-1?t[o]/Math.pow(t[o]/t[o+1],e-o):t[o]}}function Q(t,e,o){return function(i,r,n){if(void 0!==i)return i=Math.max(Math.floor(Math.log(e/i)/Math.log(t)+(-n/2+.5))+r,0),void 0!==o&&(i=Math.min(i,o)),e/Math.pow(t,i)}}function tt(t){if(void 0!==t)return 0}function et(t,e){if(void 0!==t)return t+e}function ot(t){var e=2*Math.PI/t;return function(t,o){if(void 0!==t)return t=Math.floor((t+o)/e+.5)*e}}function it(){var t=l(5);return function(e,o){if(void 0!==e)return Math.abs(e+o)<=t?0:e+o}}function rt(t,e){var o=void 0!==e?t.toFixed(e):""+t,i=o.indexOf("."),i=-1===i?o.length:i;return 2<i?o:Array(3-i).join("0")+o}function nt(t){t=(""+t).split(".");for(var e=["1","3"],o=0;o<Math.max(t.length,e.length);o++){var i=parseInt(t[o]||"0",10),r=parseInt(e[o]||"0",10);if(i>r)return 1;if(r>i)return-1}return 0}function st(t,e){return t[0]+=e[0],t[1]+=e[1],t}function pt(t,e){var o=t[0],i=t[1],r=e[0],n=e[1],s=r[0],r=r[1],p=n[0],n=n[1],a=p-s,h=n-r,o=0===a&&0===h?0:(a*(o-s)+h*(i-r))/(a*a+h*h||0);return 0>=o||(1<=o?(s=p,r=n):(s+=o*a,r+=o*h)),[s,r]}function at(t,e,o){t=u(t+180,360)-180;var i=Math.abs(3600*t);return Math.floor(i/3600)+"° "+rt(Math.floor(i/60%60))+"′ "+rt(i%60,o||0)+"″ "+e.charAt(0>t?1:0)}function ht(t,e,o){return t?e.replace("{x}",t[0].toFixed(o)).replace("{y}",t[1].toFixed(o)):""}function lt(t,e){for(var o=!0,i=t.length-1;0<=i;--i)if(t[i]!=e[i]){o=!1;break}return o}function ut(t,e){var o=Math.cos(e),i=Math.sin(e),r=t[1]*o+t[0]*i;return t[0]=t[0]*o-t[1]*i,t[1]=r,t}function ct(t,e){var o=t[0]-e[0],i=t[1]-e[1];return o*o+i*i}function ft(t,e){return ct(t,pt(t,e))}function yt(t,e){return ht(t,"{x}, {y}",e)}function dt(t){for(var e=Tt(),o=0,i=t.length;o<i;++o)jt(e,t[o]);return e}function gt(t,e,o){return o?(o[0]=t[0]-e,o[1]=t[1]-e,o[2]=t[2]+e,o[3]=t[3]+e,o):[t[0]-e,t[1]-e,t[2]+e,t[3]+e]}function vt(t,e){return e?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e):t.slice()}function mt(t,e,o){return e=e<t[0]?t[0]-e:t[2]<e?e-t[2]:0,t=o<t[1]?t[1]-o:t[3]<o?o-t[3]:0,e*e+t*t}function bt(t,e){return xt(t,e[0],e[1])}function wt(t,e){return t[0]<=e[0]&&e[2]<=t[2]&&t[1]<=e[1]&&e[3]<=t[3]}function xt(t,e,o){return t[0]<=e&&e<=t[2]&&t[1]<=o&&o<=t[3]}function St(t,e){var o=t[1],i=t[2],r=t[3],n=e[0],s=e[1],p=0;return n<t[0]?p|=16:n>i&&(p|=4),s<o?p|=8:s>r&&(p|=2),0===p&&(p=1),p}function Tt(){return[1/0,1/0,-(1/0),-(1/0)]}function Et(t,e,o,i,r){return r?(r[0]=t,r[1]=e,r[2]=o,r[3]=i,r):[t,e,o,i]}function Mt(t,e){var o=t[0],i=t[1];return Et(o,i,o,i,e)}function Ct(t,e,o,i,r){return r=Et(1/0,1/0,-(1/0),-(1/0),r),Nt(r,t,e,o,i)}function Pt(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function At(t,e){return e[0]<t[0]&&(t[0]=e[0]),e[2]>t[2]&&(t[2]=e[2]),e[1]<t[1]&&(t[1]=e[1]),e[3]>t[3]&&(t[3]=e[3]),t}function jt(t,e){e[0]<t[0]&&(t[0]=e[0]),e[0]>t[2]&&(t[2]=e[0]),e[1]<t[1]&&(t[1]=e[1]),e[1]>t[3]&&(t[3]=e[1])}function Nt(t,e,o,i,r){for(;o<i;o+=r){var n=t,s=e[o],p=e[o+1];n[0]=Math.min(n[0],s),n[1]=Math.min(n[1],p),n[2]=Math.max(n[2],s),n[3]=Math.max(n[3],p)}return t}function Lt(t,e,o){var i;return(i=e.call(o,kt(t)))||(i=e.call(o,It(t)))||(i=e.call(o,Gt(t)))?i:!!(i=e.call(o,Ut(t)))&&i}function Rt(t){var e=0;return Wt(t)||(e=Ht(t)*Ft(t)),e}function kt(t){return[t[0],t[1]]}function It(t){return[t[2],t[1]]}function Dt(t){return[(t[0]+t[2])/2,(t[1]+t[3])/2]}function Ot(t,e,o,i,r){var n=e*i[0]/2;i=e*i[1]/2,e=Math.cos(o);var s=Math.sin(o);o=n*e,n*=s,e*=i;var p=i*s,a=t[0],h=t[1];t=a-o+p,i=a-o-p,s=a+o-p,o=a+o+p;var p=h-n-e,a=h-n+e,l=h+n+e,n=h+n-e;return Et(Math.min(t,i,s,o),Math.min(p,a,l,n),Math.max(t,i,s,o),Math.max(p,a,l,n),r)}function Ft(t){return t[3]-t[1]}function Bt(t,e,o){return o=o?o:Tt(),Xt(t,e)&&(o[0]=t[0]>e[0]?t[0]:e[0],o[1]=t[1]>e[1]?t[1]:e[1],o[2]=t[2]<e[2]?t[2]:e[2],o[3]=t[3]<e[3]?t[3]:e[3]),o}function Ut(t){return[t[0],t[3]]}function Gt(t){return[t[2],t[3]]}function Ht(t){return t[2]-t[0]}function Xt(t,e){return t[0]<=e[2]&&t[2]>=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function Wt(t){return t[2]<t[0]||t[3]<t[1]}function $t(t,e){var o=(t[2]-t[0])/2*(e-1),i=(t[3]-t[1])/2*(e-1);t[0]-=o,t[2]+=o,t[1]-=i,t[3]+=i}function Kt(t,e,o){t=[t[0],t[1],t[0],t[3],t[2],t[1],t[2],t[3]],e(t,t,2);var i=[t[0],t[2],t[4],t[6]],r=[t[1],t[3],t[5],t[7]];return e=Math.min.apply(null,i),t=Math.min.apply(null,r),i=Math.max.apply(null,i),r=Math.max.apply(null,r),Et(e,t,i,r,o)}function zt(){return!0}function qt(){return!1}function Vt(t){this.radius=t}function Yt(t){this.eb=t.code,this.c=t.units,this.f=void 0!==t.extent?t.extent:null,this.i=void 0!==t.worldExtent?t.worldExtent:null,this.b=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.g=void 0!==t.global&&t.global,this.a=!(!this.g||!this.f),this.l=void 0!==t.getPointResolution?t.getPointResolution:this.fk,this.j=null,this.o=t.metersPerUnit;var e=fd,o=t.code,i=dd||window.proj4;if("function"==typeof i&&void 0===e[o]){var r=i.defs(o);if(void 0!==r){void 0!==r.axis&&void 0===t.axisOrientation&&(this.b=r.axis),void 0===t.metersPerUnit&&(this.o=r.to_meter),void 0===t.units&&(this.c=r.units);for(var n in e)e=i.defs(n),void 0!==e&&(t=re(n),e===r?Zt([t,this]):(e=i(n,o),oe(t,this,e.forward,e.inverse)))}}}function Zt(t){Qt(t),t.forEach(function(e){t.forEach(function(t){e!==t&&ee(e,t,he)})})}function Jt(){var t=vg,e=Jr,o=_r;xg.forEach(function(i){t.forEach(function(t){ee(i,t,e),ee(t,i,o)})})}function _t(t){fd[t.eb]=t,ee(t,t,he)}function Qt(t){var e=[];t.forEach(function(t){e.push(_t(t))})}function te(t){return t?"string"==typeof t?re(t):t:re("EPSG:3857")}function ee(t,e,o){t=t.eb,e=e.eb,t in yd||(yd[t]={}),yd[t][e]=o}function oe(t,e,o,i){t=re(t),e=re(e),ee(t,e,ie(o)),ee(e,t,ie(i))}function ie(t){return function(e,o,i){var r=e.length;i=void 0!==i?i:2,o=void 0!==o?o:Array(r);var n,s;for(s=0;s<r;s+=i)for(n=t([e[s],e[s+1]]),o[s]=n[0],o[s+1]=n[1],n=i-1;2<=n;--n)o[s+n]=e[s+n];return o}}function re(t){var e;if(t instanceof Yt)e=t;else if("string"==typeof t){e=fd[t];var o=dd||window.proj4;void 0===e&&"function"==typeof o&&void 0!==o.defs(t)&&(e=new Yt({code:t}),_t(e))}return e||null}function ne(t,e){if(t===e)return!0;var o=t.yb()===e.yb();return t.eb===e.eb?o:pe(t,e)===he&&o}function se(t,e){var o=re(t),i=re(e);return pe(o,i)}function pe(t,e){var o,i=t.eb,r=e.eb;return i in yd&&r in yd[i]&&(o=yd[i][r]),void 0===o&&(o=ae),o}function ae(t,e){if(void 0!==e&&t!==e){for(var o=0,i=t.length;o<i;++o)e[o]=t[o];t=e}return t}function he(t,e){var o;if(void 0!==e){o=0;for(var i=t.length;o<i;++o)e[o]=t[o];o=e}else o=t.slice();return o}function le(t,e,o){return se(e,o)(t,void 0,t.length)}function ue(t,e,o){return e=se(e,o),Kt(t,e)}function ce(){B.call(this),this.s=Tt(),this.u=-1,this.i={},this.o=this.j=0}function fe(t,e,o,i,r,n){for(var s=n?n:[],p=0;e<o;e+=i){var a=t[e],h=t[e+1];s[p++]=r[0]*a+r[2]*h+r[4],s[p++]=r[1]*a+r[3]*h+r[5]}return n&&s.length!=p&&(s.length=p),s}function ye(){ce.call(this),this.ia="XY",this.a=2,this.A=null}function de(t){var e;return"XY"==t?e=2:"XYZ"==t||"XYM"==t?e=3:"XYZM"==t&&(e=4),e}function ge(t,e,o){t.a=de(e),t.ia=e,t.A=o}function ve(t,e,o,i){if(e)o=de(e);else{for(e=0;e<i;++e){if(0===o.length)return t.ia="XY",void(t.a=2);o=o[0]}o=o.length;var r;2==o?r="XY":3==o?r="XYZ":4==o&&(r="XYZM"),e=r}t.ia=e,t.a=o}function me(t,e,o,i){for(var r=0,n=t[o-i],s=t[o-i+1];e<o;e+=i)var p=t[e],a=t[e+1],r=r+(s*p-n*a),n=p,s=a;return r/2}function be(t,e,o,i){var r,n,s=0;for(r=0,n=o.length;r<n;++r){var p=o[r],s=s+me(t,e,p,i);e=p}return s}function we(t,e,o,i,r,n,s){var p=t[e],a=t[e+1],h=t[o]-p,l=t[o+1]-a;if(0!==h||0!==l)if(n=((r-p)*h+(n-a)*l)/(h*h+l*l),1<n)e=o;else if(0<n){for(r=0;r<i;++r)s[r]=c(t[e+r],t[o+r],n);return void(s.length=i)}for(r=0;r<i;++r)s[r]=t[e+r];s.length=i}function xe(t,e,o,i,r){var n=t[e],s=t[e+1];for(e+=i;e<o;e+=i){var p=t[e],a=t[e+1],n=h(n,s,p,a);n>r&&(r=n),n=p,s=a}return r}function Se(t,e,o,i,r){var n,s;for(n=0,s=o.length;n<s;++n){var p=o[n];r=xe(t,e,p,i,r),e=p}return r}function Te(t,e,o,i,r,n,s,p,a,l,u){if(e==o)return l;var c;if(0===r){if(c=h(s,p,t[e],t[e+1]),c<l){for(u=0;u<i;++u)a[u]=t[e+u];return a.length=i,c}return l}for(var f=u?u:[NaN,NaN],y=e+i;y<o;)if(we(t,y-i,y,i,s,p,f),c=h(s,p,f[0],f[1]),c<l){for(l=c,u=0;u<i;++u)a[u]=f[u];a.length=i,y+=i}else y+=i*Math.max((Math.sqrt(c)-Math.sqrt(l))/r|0,1);if(n&&(we(t,o-i,e,i,s,p,f),c=h(s,p,f[0],f[1]),c<l)){for(l=c,u=0;u<i;++u)a[u]=f[u];a.length=i}return l}function Ee(t,e,o,i,r,n,s,p,a,h,l){l=l?l:[NaN,NaN];var u,c;for(u=0,c=o.length;u<c;++u){var f=o[u];h=Te(t,e,f,i,r,n,s,p,a,h,l),e=f}return h}function Me(t,e){var o,i,r=0;for(o=0,i=e.length;o<i;++o)t[r++]=e[o];return r}function Ce(t,e,o,i){var r,n;for(r=0,n=o.length;r<n;++r){var s,p=o[r];for(s=0;s<i;++s)t[e++]=p[s]}return e}function Pe(t,e,o,i,r){r=r?r:[];var n,s,p=0;for(n=0,s=o.length;n<s;++n)e=Ce(t,e,o[n],i),r[p++]=e;return r.length=p,r}function Ae(t,e,o,i,r){r=void 0!==r?r:[];for(var n=0;e<o;e+=i)r[n++]=t.slice(e,e+i);return r.length=n,r}function je(t,e,o,i,r){r=void 0!==r?r:[];var n,s,p=0;for(n=0,s=o.length;n<s;++n){var a=o[n];r[p++]=Ae(t,e,a,i,r[p]),e=a}return r.length=p,r}function Ne(t,e,o,i,r,n,s){var p=(o-e)/i;if(3>p){for(;e<o;e+=i)n[s++]=t[e],n[s++]=t[e+1];return s}var h=Array(p);h[0]=1,h[p-1]=1,o=[e,o-i];for(var l,u=0;0<o.length;){var c=o.pop(),f=o.pop(),y=0,d=t[f],g=t[f+1],v=t[c],m=t[c+1];for(l=f+i;l<c;l+=i){var b=a(t[l],t[l+1],d,g,v,m);b>y&&(u=l,y=b)}y>r&&(h[(u-e)/i]=1,f+i<u&&o.push(f,u),u+i<c&&o.push(u,c))}for(l=0;l<p;++l)h[l]&&(n[s++]=t[e+l*i],n[s++]=t[e+l*i+1]);return s}function Le(t,e,o,i,r,n,s,p){var a,h;for(a=0,h=o.length;a<h;++a){var l=o[a];t:{var u=t,c=l,f=i,y=r,d=n;if(e!=c){var g=y*Math.round(u[e]/y),v=y*Math.round(u[e+1]/y);e+=f,d[s++]=g,d[s++]=v;var m,b;do if(m=y*Math.round(u[e]/y),b=y*Math.round(u[e+1]/y),e+=f,e==c){d[s++]=m,d[s++]=b;break t}while(m==g&&b==v);for(;e<c;){var w,x;if(w=y*Math.round(u[e]/y),x=y*Math.round(u[e+1]/y),e+=f,w!=m||x!=b){var S=m-g,T=b-v,E=w-g,M=x-v;S*M==T*E&&(0>S&&E<S||S==E||0<S&&E>S)&&(0>T&&M<T||T==M||0<T&&M>T)||(d[s++]=m,d[s++]=b,g=m,v=b),m=w,b=x}}d[s++]=m,d[s++]=b}}p.push(s),e=l}return s}function Re(t,e){ye.call(this),this.c=this.l=-1,this.ma(t,e)}function ke(t,e,o){ge(t,e,o),t.v()}function Ie(t,e){ye.call(this),this.ma(t,e)}function De(t,e,o,i,r){return!Lt(r,function(r){return!Oe(t,e,o,i,r[0],r[1])})}function Oe(t,e,o,i,r,n){for(var s=!1,p=t[o-i],a=t[o-i+1];e<o;e+=i){var h=t[e],l=t[e+1];a>n!=l>n&&r<(h-p)*(n-a)/(l-a)+p&&(s=!s),p=h,a=l}return s}function Fe(t,e,o,i,r,n){if(0===o.length||!Oe(t,e,o[0],i,r,n))return!1;var s;for(e=1,s=o.length;e<s;++e)if(Oe(t,o[e-1],o[e],i,r,n))return!1;return!0}function Be(t,e,o,i,r,n,s){var p,a,h,l,u,c=r[n+1],f=[],y=o[0];for(h=t[y-i],u=t[y-i+1],p=e;p<y;p+=i)l=t[p],a=t[p+1],(c<=u&&a<=c||u<=c&&c<=a)&&(h=(c-u)/(a-u)*(l-h)+h,f.push(h)),h=l,u=a;for(y=NaN,u=-(1/0),f.sort(H),h=f[0],p=1,a=f.length;p<a;++p){l=f[p];var d=Math.abs(l-h);d>u&&(h=(h+l)/2,Fe(t,e,o,i,h,c)&&(y=h,u=d)),h=l}return isNaN(y)&&(y=r[n]),s?(s.push(y,c),s):[y,c]}function Ue(t,e,o,i,r,n){for(var s,p=[t[e],t[e+1]],a=[];e+i<o;e+=i){if(a[0]=t[e+i],a[1]=t[e+i+1],s=r.call(n,p,a))return s;p[0]=a[0],p[1]=a[1]}return!1}function Ge(t,e,o,i,r){var n=Nt(Tt(),t,e,o,i);return!!Xt(r,n)&&(!!(wt(r,n)||n[0]>=r[0]&&n[2]<=r[2]||n[1]>=r[1]&&n[3]<=r[3])||Ue(t,e,o,i,function(t,e){var o=!1,i=St(r,t),n=St(r,e);if(1===i||1===n)o=!0;else{var s=r[0],p=r[1],a=r[2],h=r[3],l=e[0],u=e[1],c=(u-t[1])/(l-t[0]);2&n&&!(2&i)&&(o=l-(u-h)/c,o=o>=s&&o<=a),o||!(4&n)||4&i||(o=u-(l-a)*c,o=o>=p&&o<=h),o||!(8&n)||8&i||(o=l-(u-p)/c,o=o>=s&&o<=a),o||!(16&n)||16&i||(o=u-(l-s)*c,o=o>=p&&o<=h)}return o}))}function He(t,e,o,i,r){var n=o[0];if(!(Ge(t,e,n,i,r)||Oe(t,e,n,i,r[0],r[1])||Oe(t,e,n,i,r[0],r[3])||Oe(t,e,n,i,r[2],r[1])||Oe(t,e,n,i,r[2],r[3])))return!1;if(1===o.length)return!0;for(e=1,n=o.length;e<n;++e)if(De(t,o[e-1],o[e],i,r))return!1;return!0}function Xe(t,e,o,i){for(var r=0,n=t[o-i],s=t[o-i+1];e<o;e+=i)var p=t[e],a=t[e+1],r=r+(p-n)*(a+s),n=p,s=a;return 0<r}function We(t,e,o,i){var r=0;i=void 0!==i&&i;var n,s;for(n=0,s=e.length;n<s;++n){var p=e[n],r=Xe(t,r,p,o);if(0===n){if(i&&r||!i&&!r)return!1}else if(i&&!r||!i&&r)return!1;r=p}return!0}function $e(t,e,o,i,r){r=void 0!==r&&r;var n,s;for(n=0,s=o.length;n<s;++n){var p=o[n],a=Xe(t,e,p,i);if(0===n?r&&a||!r&&!a:r&&!a||!r&&a)for(var a=t,h=p,l=i;e<h-l;){var u;for(u=0;u<l;++u){var c=a[e+u];a[e+u]=a[h-l+u],a[h-l+u]=c}e+=l,h-=l}e=p}return e}function Ke(t,e,o,i){var r,n,s=0;for(r=0,n=e.length;r<n;++r)s=$e(t,s,e[r],o,i);return s}function ze(t,e){ye.call(this),this.c=[],this.C=-1,this.B=null,this.P=this.G=this.S=-1,this.l=null,this.ma(t,e)}function qe(t){if(t.C!=t.g){var e=Dt(t.D());t.B=Be(t.Ob(),0,t.c,t.a,e,0),t.C=t.g}return t.B}function Ve(t,e,o,i){var r=i?i:32;i=[];var n;for(n=0;n<r;++n)K(i,t.offset(e,o,2*Math.PI*n/r));return i.push(i[0],i[1]),t=new ze(null),t.aa("XY",i,[i.length]),t}function Ye(t){var e=t[0],o=t[1],i=t[2];return t=t[3],e=[e,o,e,t,i,t,i,o,e,o],o=new ze(null),o.aa("XY",e,[e.length]),o}function Ze(t,e,o){var i=e?e:32,r=t.sa();e=t.ia;for(var n=new ze(null,e),i=r*(i+1),r=Array(i),s=0;s<i;s++)r[s]=0;return n.aa(e,r,[r.length]),Je(n,t.td(),t.vf(),o),n}function Je(t,e,o,i){var r=t.ka(),n=t.ia,s=t.sa(),p=t.Eb(),a=r.length/s-1;i=i?i:0;for(var h,l,c=0;c<=a;++c)l=c*s,h=i+2*u(c,a)*Math.PI/a,r[l]=e[0]+o*Math.cos(h),r[l+1]=e[1]+o*Math.sin(h);t.aa(n,r,p)}function _e(t){B.call(this),t=t||{},this.c=[0,0];var e={};e[gd]=void 0!==t.center?t.center:null,this.l=te(t.projection);var o,i,r,n=void 0!==t.minZoom?t.minZoom:0;o=void 0!==t.maxZoom?t.maxZoom:28;var s=void 0!==t.zoomFactor?t.zoomFactor:2;if(void 0!==t.resolutions)o=t.resolutions,i=o[0],r=o[o.length-1],o=_(o);else{i=te(t.projection),r=i.D();var p=(r?Math.max(Ht(r),Ft(r)):360*cd.degrees/i.dc())/256/Math.pow(2,0),a=p/Math.pow(2,28);i=t.maxResolution,void 0!==i?n=0:i=p/Math.pow(s,n),r=t.minResolution,void 0===r&&(r=void 0!==t.maxZoom?void 0!==t.maxResolution?i/Math.pow(s,o):p/Math.pow(s,o):a),o=n+Math.floor(Math.log(i/r)/Math.log(s)),r=i/Math.pow(s,o-n),o=Q(s,i,o-n)}this.a=i,this.i=r,this.s=s,this.f=t.resolutions,this.j=n,n=void 0!==t.extent?f(t.extent):y,(void 0!==t.enableRotation?t.enableRotation:1)?(s=t.constrainRotation,s=void 0===s||!0===s?it():!1===s?et:"number"==typeof s?ot(s):et):s=tt,this.o=new d(n,o,s),void 0!==t.resolution?e[vd]=t.resolution:void 0!==t.zoom&&(e[vd]=this.constrainResolution(this.a,t.zoom-this.j)),e[md]=void 0!==t.rotation?t.rotation:0,this.H(e)}function Qe(t,e){return void 0!==e?(e[0]=t.c[0],e[1]=t.c[1],e):t.c.slice()}function to(t,e){return Math.max(Ht(t)/e[0],Ft(t)/e[1])}function eo(t){var e=t.a,o=Math.log(e/t.i)/Math.log(2);return function(t){return e/Math.pow(2,t*o)}}function oo(t){var e=t.a,o=Math.log(e/t.i)/Math.log(2);return function(t){return Math.log(e/t)/Math.log(2)/o}}function io(t){return!!t.bb()&&void 0!==t.Ma()}function ro(t,e){t.c[1]+=e}function no(t){return Math.pow(t,3)}function so(t){return 1-no(1-t)}function po(t){return 3*t*t-2*t*t*t}function ao(t){return t}function ho(t){return.5>t?po(2*t):1-po(2*(t-.5))}function lo(t){var e=t.source,o=t.start?t.start:Date.now(),i=e[0],r=e[1],n=void 0!==t.duration?t.duration:1e3,s=t.easing?t.easing:po;return function(t,e){if(e.time<o)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<o+n){var p=1-s((e.time-o)/n),a=i-e.viewState.center[0],h=r-e.viewState.center[1];return e.animate=!0,e.viewState.center[0]+=p*a,e.viewState.center[1]+=p*h,e.viewHints[0]+=1,!0}return!1}}function uo(t){var e=t.rotation?t.rotation:0,o=t.start?t.start:Date.now(),i=void 0!==t.duration?t.duration:1e3,r=t.easing?t.easing:po,n=t.anchor?t.anchor:null;return function(t,s){if(s.time<o)return s.animate=!0,s.viewHints[0]+=1,!0;if(s.time<o+i){var p=1-r((s.time-o)/i),p=(e-s.viewState.rotation)*p;if(s.animate=!0,s.viewState.rotation+=p,n){var a=s.viewState.center;a[0]-=n[0],a[1]-=n[1],ut(a,p),st(a,n)}return s.viewHints[0]+=1,!0}return!1}}function co(t){var e=t.resolution,o=t.start?t.start:Date.now(),i=void 0!==t.duration?t.duration:1e3,r=t.easing?t.easing:po;return function(t,n){if(n.time<o)return n.animate=!0,n.viewHints[0]+=1,!0;if(n.time<o+i){var s=1-r((n.time-o)/i),p=e-n.viewState.resolution;return n.animate=!0,n.viewState.resolution+=s*p,n.viewHints[0]+=1,!0}return!1}}function fo(t,e,o,i){this.ba=t,this.da=e,this.ea=o,this.ha=i}function yo(t,e,o){return t.ba<=e&&e<=t.da&&t.ea<=o&&o<=t.ha}function go(t,e){return t.ba==e.ba&&t.ea==e.ea&&t.da==e.da&&t.ha==e.ha}function vo(t,e){return t.ba<=e.da&&t.da>=e.ba&&t.ea<=e.ha&&t.ha>=e.ea}function mo(t,e,o){return void 0===o&&(o=[0,0]),o[0]=t[0]+2*e,o[1]=t[1]+2*e,o}function bo(t,e,o){return void 0===o&&(o=[0,0]),o[0]=t[0]*e+.5|0,o[1]=t[1]*e+.5|0,o}function wo(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:e[0]=e[1]=t,e)}function xo(t,e,o,i){return void 0!==i?(i[0]=t,i[1]=e,i[2]=o,i):[t,e,o]}function So(t){var e,o,i=t[0],r=Array(i),n=1<<i-1;for(e=0;e<i;++e)o=48,t[1]&n&&(o+=1),t[2]&n&&(o+=2),r[e]=String.fromCharCode(o),n>>=1;return r.join("")}function To(t){this.minZoom=void 0!==t.minZoom?t.minZoom:0,this.b=t.resolutions,n(J(this.b,function(t,e){return e-t}),17),this.maxZoom=this.b.length-1,this.g=void 0!==t.origin?t.origin:null,this.f=null,void 0!==t.origins&&(this.f=t.origins,n(this.f.length==this.b.length,20));var e=t.extent;void 0===e||this.g||this.f||(this.g=Ut(e)),n(!this.g&&this.f||this.g&&!this.f,18),this.c=null,void 0!==t.tileSizes&&(this.c=t.tileSizes,n(this.c.length==this.b.length,19)),this.i=void 0!==t.tileSize?t.tileSize:this.c?null:256,n(!this.i&&this.c||this.i&&!this.c,22),this.s=void 0!==e?e:null,this.a=null,this.j=[0,0],void 0!==t.sizes?this.a=t.sizes.map(function(t){return new fo(Math.min(0,t[0]),Math.max(t[0]-1,-1),Math.min(0,t[1]),Math.max(t[1]-1,-1))},this):e&&No(this,e)}function Eo(t,e,o,i,r){for(r=t.Ia(e,r),e=e[0]-1;e>=t.minZoom;){if(o.call(null,e,Po(t,r,e,i)))return!0;--e}return!1}function Mo(t,e,o,i){return e[0]<t.maxZoom?(i=t.Ia(e,i),Po(t,i,e[0]+1,o)):null}function Co(t,e,o,i){jo(t,e[0],e[1],o,!1,bd);var r=bd[1],n=bd[2];return jo(t,e[2],e[3],o,!0,bd),t=bd[1],e=bd[2],void 0!==i?(i.ba=r,i.da=t,i.ea=n,i.ha=e):i=new fo(r,t,n,e),i}function Po(t,e,o,i){return o=t.Ga(o),Co(t,e,o,i)}function Ao(t,e){var o=t.Tc(e[0]),i=t.Ga(e[0]),r=wo(t.Va(e[0]),t.j);return[o[0]+(e[1]+.5)*r[0]*i,o[1]+(e[2]+.5)*r[1]*i]}function jo(t,e,o,i,r,n){var s=t.wc(i),p=i/t.Ga(s),a=t.Tc(s);return t=wo(t.Va(s),t.j),e=p*Math.floor((e-a[0])/i+(r?.5:0))/t[0],o=p*Math.floor((o-a[1])/i+(r?0:.5))/t[1],r?(e=Math.ceil(e)-1,o=Math.ceil(o)-1):(e=Math.floor(e),o=Math.floor(o)),xo(s,e,o,n)}function No(t,e){for(var o=t.b.length,i=Array(o),r=t.minZoom;r<o;++r)i[r]=Po(t,e,r);t.a=i}function Lo(t){var e=t.j;if(!e){var e=Io(t),o=ko(e,void 0,void 0),e=new To({extent:e,origin:Ut(e),resolutions:o,tileSize:void 0});t.j=e}return e}function Ro(t){var e={};return hd(e,void 0!==t?t:{}),void 0===e.extent&&(e.extent=re("EPSG:3857").D()),e.resolutions=ko(e.extent,e.maxZoom,e.tileSize),delete e.maxZoom,new To(e)}function ko(t,e,o){e=void 0!==e?e:42;var i=Ft(t);for(t=Ht(t),o=wo(void 0!==o?o:256),o=Math.max(t/o[0],i/o[1]),e+=1,i=Array(e),t=0;t<e;++t)i[t]=o/Math.pow(2,t);return i}function Io(t){t=re(t);var e=t.D();return e||(t=180*cd.degrees/t.dc(),e=Et(-t,-t,t,t)),e}function Do(t){this.a=t.html,this.b=t.tileRanges?t.tileRanges:null}function Oo(t){B.call(this),this.a=t?t:[],Fo(this)}function Fo(t){t.set(wd,t.a.length)}function Bo(t,e){L.call(this,t),this.element=e}function Uo(t){return Array.isArray(t)?t:Pd(t)}function Go(t){
-if("string"!=typeof t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var o=t[1];o!=(0|o)&&(o=o+.5|0);var i=t[2];i!=(0|i)&&(i=i+.5|0),t="rgba("+e+","+o+","+i+","+(void 0===t[3]?1:t[3])+")"}return t}function Ho(t){var e=[];return e[0]=s(t[0]+.5|0,0,255),e[1]=s(t[1]+.5|0,0,255),e[2]=s(t[2]+.5|0,0,255),e[3]=s(t[3],0,1),e}function Xo(t){return"string"==typeof t||t instanceof CanvasPattern||t instanceof CanvasGradient?t:Go(t)}function Wo(t,e){var o=document.createElement("CANVAS");return t&&(o.width=t),e&&(o.height=e),o.getContext("2d")}function $o(t,e){var o=e.parentNode;o&&o.replaceChild(t,e)}function Ko(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function zo(t,e,o){L.call(this,t),this.map=e,this.frameState=void 0!==o?o:null}function qo(t){B.call(this),this.element=t.element?t.element:null,this.a=this.P=null,this.s=[],this.render=t.render?t.render:o,t.target&&this.c(t.target)}function Vo(t){t=t?t:{},this.S=document.createElement("UL"),this.u=document.createElement("LI"),this.S.appendChild(this.u),this.u.style.display="none",this.f=void 0===t.collapsed||t.collapsed,this.l=void 0===t.collapsible||t.collapsible,this.l||(this.f=!1);var e=void 0!==t.className?t.className:"ol-attribution",o=void 0!==t.tipLabel?t.tipLabel:"Attributions",i=void 0!==t.collapseLabel?t.collapseLabel:"»";"string"==typeof i?(this.C=document.createElement("span"),this.C.textContent=i):this.C=i,i=void 0!==t.label?t.label:"i","string"==typeof i?(this.B=document.createElement("span"),this.B.textContent=i):this.B=i;var r=this.l&&!this.f?this.C:this.B,i=document.createElement("button");i.setAttribute("type","button"),i.title=o,i.appendChild(r),E(i,"click",this.Pl,this),o=document.createElement("div"),o.className=e+" ol-unselectable ol-control"+(this.f&&this.l?" ol-collapsed":"")+(this.l?"":" ol-uncollapsible"),o.appendChild(this.S),o.appendChild(i),qo.call(this,{element:o,render:t.render?t.render:Yo,target:t.target}),this.G=!0,this.o={},this.j={},this.W={}}function Yo(t){if(t=t.frameState){var e,o,r,n,s,p,a,h,l,c,f,y=t.layerStatesArray,d=hd({},t.attributions),g={},v=t.viewState.projection;for(o=0,e=y.length;o<e;o++)if((p=y[o].layer.ga())&&(c=i(p).toString(),l=p.j))for(r=0,n=l.length;r<n;r++)if(a=l[r],h=i(a).toString(),!(h in d)){if(s=t.usedTiles[c]){var b=p.pb(v);t:{f=a;var w=v;if(f.b){var x,S,T,E=void 0;for(E in s)if(E in f.b){T=s[E];var M;for(x=0,S=f.b[E].length;x<S;++x){if(M=f.b[E][x],vo(M,T)){f=!0;break t}var C=Po(b,Io(w),parseInt(E,10)),P=C.da-C.ba+1;if((T.ba<C.ba||T.da>C.da)&&(vo(M,new fo(u(T.ba,P),u(T.da,P),T.ea,T.ha))||T.da-T.ba+1>P&&vo(M,C))){f=!0;break t}}}f=!1}else f=!0}}else f=!1;f?(h in g&&delete g[h],d[h]=a):g[h]=a}e=[d,g],o=e[0],e=e[1];for(var A in this.o)A in o?(this.j[A]||(this.o[A].style.display="",this.j[A]=!0),delete o[A]):A in e?(this.j[A]&&(this.o[A].style.display="none",delete this.j[A]),delete e[A]):(Ko(this.o[A]),delete this.o[A],delete this.j[A]);for(A in o)r=document.createElement("LI"),r.innerHTML=o[A].a,this.S.appendChild(r),this.o[A]=r,this.j[A]=!0;for(A in e)r=document.createElement("LI"),r.innerHTML=e[A].a,r.style.display="none",this.S.appendChild(r),this.o[A]=r;A=!m(this.j)||!m(t.logos),this.G!=A&&(this.element.style.display=A?"":"none",this.G=A),A&&m(this.j)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var j;t=t.logos,A=this.W;for(j in A)j in t||(Ko(A[j]),delete A[j]);for(var N in t)e=t[N],e instanceof HTMLElement&&(this.u.appendChild(e),A[N]=e),N in A||(j=new Image,j.src=N,""===e?o=j:(o=document.createElement("a"),o.href=e,o.appendChild(j)),this.u.appendChild(o),A[N]=o);this.u.style.display=m(t)?"none":""}else this.G&&(this.element.style.display="none",this.G=!1)}function Zo(t){t.element.classList.toggle("ol-collapsed"),t.f?$o(t.C,t.B):$o(t.B,t.C),t.f=!t.f}function Jo(t){t=t?t:{},this.f=void 0!==t.className?t.className:"ol-full-screen";var e=void 0!==t.label?t.label:"⤢";this.l="string"==typeof e?document.createTextNode(e):e,e=void 0!==t.labelActive?t.labelActive:"×",this.o="string"==typeof e?document.createTextNode(e):e;var o=t.tipLabel?t.tipLabel:"Toggle full-screen",e=document.createElement("button");e.className=this.f+"-"+Qo(),e.setAttribute("type","button"),e.title=o,e.appendChild(this.l),E(e,"click",this.B,this),o=document.createElement("div"),o.className=this.f+" ol-unselectable ol-control "+(_o()?"":"ol-unsupported"),o.appendChild(e),qo.call(this,{element:o,target:t.target}),this.C=void 0!==t.keys&&t.keys,this.j=t.source}function _o(){var t=document.body;return!!(t.webkitRequestFullscreen||t.mozRequestFullScreen&&document.mozFullScreenEnabled||t.msRequestFullscreen&&document.msFullscreenEnabled||t.requestFullscreen&&document.fullscreenEnabled)}function Qo(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}function ti(t){t.requestFullscreen?t.requestFullscreen():t.msRequestFullscreen?t.msRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen()}function ei(t){t=t?t:{};var e=void 0!==t.className?t.className:"ol-rotate",o=void 0!==t.label?t.label:"⇧";this.f=null,"string"==typeof o?(this.f=document.createElement("span"),this.f.className="ol-compass",this.f.textContent=o):(this.f=o,this.f.classList.add("ol-compass"));var i=t.tipLabel?t.tipLabel:"Reset rotation",o=document.createElement("button");o.className=e+"-reset",o.setAttribute("type","button"),o.title=i,o.appendChild(this.f),E(o,"click",ei.prototype.C,this),i=document.createElement("div"),i.className=e+" ol-unselectable ol-control",i.appendChild(o),e=t.render?t.render:oi,this.l=t.resetNorth?t.resetNorth:void 0,qo.call(this,{element:i,render:e,target:t.target}),this.o=void 0!==t.duration?t.duration:250,this.j=void 0===t.autoHide||t.autoHide,this.u=void 0,this.j&&this.element.classList.add("ol-hidden")}function oi(t){if(t=t.frameState){if(t=t.viewState.rotation,t!=this.u){var e="rotate("+t+"rad)";if(this.j){var o=this.element.classList.contains("ol-hidden");o||0!==t?o&&0!==t&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.f.style.msTransform=e,this.f.style.webkitTransform=e,this.f.style.transform=e}this.u=t}}function ii(t){t=t?t:{};var e=void 0!==t.className?t.className:"ol-zoom",o=void 0!==t.delta?t.delta:1,i=void 0!==t.zoomInLabel?t.zoomInLabel:"+",r=void 0!==t.zoomOutLabel?t.zoomOutLabel:"−",n=void 0!==t.zoomInTipLabel?t.zoomInTipLabel:"Zoom in",s=void 0!==t.zoomOutTipLabel?t.zoomOutTipLabel:"Zoom out",p=document.createElement("button");p.className=e+"-in",p.setAttribute("type","button"),p.title=n,p.appendChild("string"==typeof i?document.createTextNode(i):i),E(p,"click",ii.prototype.j.bind(this,o)),i=document.createElement("button"),i.className=e+"-out",i.setAttribute("type","button"),i.title=s,i.appendChild("string"==typeof r?document.createTextNode(r):r),E(i,"click",ii.prototype.j.bind(this,-o)),o=document.createElement("div"),o.className=e+" ol-unselectable ol-control",o.appendChild(p),o.appendChild(i),qo.call(this,{element:o,target:t.target}),this.f=void 0!==t.duration?t.duration:250}function ri(t){t=t?t:{};var e=new Oo;return(void 0!==t.zoom?t.zoom:1)&&e.push(new ii(t.zoomOptions)),(void 0!==t.rotate?t.rotate:1)&&e.push(new ei(t.rotateOptions)),(void 0!==t.attribution?t.attribution:1)&&e.push(new Vo(t.attributionOptions)),e}function ni(t){t=t?t:{};var e=document.createElement("DIV");e.className=void 0!==t.className?t.className:"ol-mouse-position",qo.call(this,{element:e,render:t.render?t.render:si,target:t.target}),E(this,U(Ld),this.Sl,this),t.coordinateFormat&&this.Uh(t.coordinateFormat),t.projection&&this.$g(re(t.projection)),this.u=void 0!==t.undefinedHTML?t.undefinedHTML:"",this.o=e.innerHTML,this.l=this.j=this.f=null}function si(t){t=t.frameState,t?this.f!=t.viewState.projection&&(this.f=t.viewState.projection,this.j=null):this.f=null,pi(this,this.l)}function pi(t,e){var o=t.u;if(e&&t.f){if(!t.j){var i=t.Zg();t.j=i?pe(t.f,i):ae}(i=t.a.Ja(e))&&(t.j(i,i),o=(o=t.wg())?o(i):i.toString())}t.o&&o==t.o||(t.element.innerHTML=o,t.o=o)}function ai(t,e){var o,i,r=kd.length;for(i=0;i<r;++i)try{if(o=t.getContext(kd[i],e))return o}catch(n){}return null}function hi(t,e){this.b=t,this.c=e}function li(t){hi.call(this,t,{mousedown:this.dl,mousemove:this.el,mouseup:this.hl,mouseover:this.gl,mouseout:this.fl}),this.a=t.g,this.g=[]}function ui(t,e){for(var o,i=t.g,r=e.clientX,n=e.clientY,s=0,p=i.length;s<p&&(o=i[s]);s++){var a=Math.abs(n-o[1]);if(25>=Math.abs(r-o[0])&&25>=a)return!0}return!1}function ci(t){var e=Pi(t,t),o=e.preventDefault;return e.preventDefault=function(){t.preventDefault(),o()},e.pointerId=1,e.isPrimary=!0,e.pointerType="mouse",e}function fi(t){hi.call(this,t,{MSPointerDown:this.ml,MSPointerMove:this.nl,MSPointerUp:this.ql,MSPointerOut:this.ol,MSPointerOver:this.pl,MSPointerCancel:this.ll,MSGotPointerCapture:this.jl,MSLostPointerCapture:this.kl}),this.a=t.g,this.g=["","unavailable","touch","pen","mouse"]}function yi(t,e){var o=e;return"number"==typeof e.pointerType&&(o=Pi(e,e),o.pointerType=t.g[e.pointerType]),o}function di(t){hi.call(this,t,{pointerdown:this.Zn,pointermove:this.$n,pointerup:this.co,pointerout:this.ao,pointerover:this.bo,pointercancel:this.Yn,gotpointercapture:this.uk,lostpointercapture:this.cl})}function gi(t,e,o){L.call(this,t),this.b=e,t=o?o:{},this.buttons=vi(t),this.pressure=mi(t,this.buttons),this.bubbles="bubbles"in t&&t.bubbles,this.cancelable="cancelable"in t&&t.cancelable,this.view="view"in t?t.view:null,this.detail="detail"in t?t.detail:null,this.screenX="screenX"in t?t.screenX:0,this.screenY="screenY"in t?t.screenY:0,this.clientX="clientX"in t?t.clientX:0,this.clientY="clientY"in t?t.clientY:0,this.button="button"in t?t.button:0,this.relatedTarget="relatedTarget"in t?t.relatedTarget:null,this.pointerId="pointerId"in t?t.pointerId:0,this.width="width"in t?t.width:0,this.height="height"in t?t.height:0,this.pointerType="pointerType"in t?t.pointerType:"",this.isPrimary="isPrimary"in t&&t.isPrimary,e.preventDefault&&(this.preventDefault=function(){e.preventDefault()})}function vi(t){if(t.buttons||Jd)t=t.buttons;else switch(t.which){case 1:t=1;break;case 2:t=4;break;case 3:t=2;break;default:t=0}return t}function mi(t,e){var o=0;return o=t.pressure?t.pressure:e?.5:0}function bi(t,e){hi.call(this,t,{touchstart:this.ep,touchmove:this.cp,touchend:this.bp,touchcancel:this.ap}),this.a=t.g,this.j=e,this.g=void 0,this.i=0,this.f=void 0}function wi(t,e,o){return e=Pi(e,o),e.pointerId=o.identifier+2,e.bubbles=!0,e.cancelable=!0,e.detail=t.i,e.button=0,e.buttons=1,e.width=o.webkitRadiusX||o.radiusX||0,e.height=o.webkitRadiusY||o.radiusY||0,e.pressure=o.webkitForce||o.force||.5,e.isPrimary=t.g===o.identifier,e.pointerType="touch",e.clientX=o.clientX,e.clientY=o.clientY,e.screenX=o.screenX,e.screenY=o.screenY,e}function xi(t,e,o){function i(){e.preventDefault()}var r,n,s=Array.prototype.slice.call(e.changedTouches),p=s.length;for(r=0;r<p;++r)n=wi(t,e,s[r]),n.preventDefault=i,o.call(t,e,n)}function Si(t,e){var o=t.j.g,i=e.changedTouches[0];if(t.g===i.identifier){var r=[i.clientX,i.clientY];o.push(r),setTimeout(function(){z(o,r)},2500)}}function Ti(t){k.call(this),this.i=t,this.g={},this.c={},this.a=[],Kd?Ei(this,new di(this)):zd?Ei(this,new fi(this)):(t=new li(this),Ei(this,t),$d&&Ei(this,new bi(this,t))),t=this.a.length;for(var e,o=0;o<t;o++)e=this.a[o],Mi(this,Object.keys(e.c))}function Ei(t,e){var o=Object.keys(e.c);o&&(o.forEach(function(t){var o=e.c[t];o&&(this.c[t]=o.bind(e))},t),t.a.push(e))}function Mi(t,e){e.forEach(function(t){E(this.i,t,this.f,this)},t)}function Ci(t,e){e.forEach(function(t){C(this.i,t,this.f,this)},t)}function Pi(t,e){for(var o,i={},r=0,n=_d.length;r<n;r++)o=_d[r][0],i[o]=t[o]||e[o]||_d[r][1];return i}function Ai(t,e,o){e.bubbles=!1,Li(t,"pointerleave",e,o)}function ji(t,e,o){t.out(e,o);var i=e.target,r=e.relatedTarget;i&&r&&i.contains(r)||Ai(t,e,o)}function Ni(t,e,o){e.bubbles=!0,Li(t,"pointerover",e,o);var i=e.target,r=e.relatedTarget;i&&r&&i.contains(r)||(e.bubbles=!1,Li(t,"pointerenter",e,o))}function Li(t,e,o,i){t.b(new gi(e,i,o))}function Ri(t,e){t.b(new gi(e.type,e,e))}function ki(t,e,o,i,r){zo.call(this,t,e,r),this.originalEvent=o,this.pixel=e.Ud(o),this.coordinate=e.Ja(this.pixel),this.dragging=void 0!==i&&i}function Ii(t,e,o,i,r){ki.call(this,t,e,o.b,i,r),this.b=o}function Di(t){k.call(this),this.f=t,this.j=0,this.l=!1,this.c=[],this.g=null,t=this.f.a,this.u=0,this.T={},this.i=new Ti(t),this.a=null,this.o=E(this.i,"pointerdown",this.Mk,this),this.s=E(this.i,"pointermove",this.Co,this)}function Oi(t,e){var o=new Ii(tg,t.f,e);t.b(o),0!==t.j?(clearTimeout(t.j),t.j=0,o=new Ii(eg,t.f,e),t.b(o)):t.j=setTimeout(function(){this.j=0;var t=new Ii(Qd,this.f,e);this.b(t)}.bind(t),250)}function Fi(t,e){e.type==ng||e.type==sg?delete t.T[e.pointerId]:e.type==rg&&(t.T[e.pointerId]=!0),t.u=Object.keys(t.T).length}function Bi(t,e){k.call(this),this.ya=t,this.state=e,this.a=null,this.key=""}function Ui(t){t.b("change")}function Gi(t){if(!t.a)return t;var e=t.a;do{if(e.U()==ag)return e;e=e.a}while(e);return t}function Hi(t,e){this.o=t,this.f=e,this.b=[],this.g=[],this.a={}}function Xi(t){var e=t.b,o=t.g,i=e[0];return 1==e.length?(e.length=0,o.length=0):(e[0]=e.pop(),o[0]=o.pop(),Wi(t,0)),e=t.f(i),delete t.a[e],i}function Wi(t,e){for(var o=t.b,i=t.g,r=o.length,n=o[e],s=i[e],p=e;e<r>>1;){var a=2*e+1,h=2*e+2,a=h<r&&i[h]<i[a]?h:a;o[e]=o[a],i[e]=i[a],e=a}o[e]=n,i[e]=s,$i(t,p,e)}function $i(t,e,o){var i=t.b;t=t.g;for(var r=i[o],n=t[o];o>e;){var s=o-1>>1;if(!(t[s]>n))break;i[o]=i[s],t[o]=t[s],o=s}i[o]=r,t[o]=n}function Ki(t){var e,o,i,r=t.o,n=t.b,s=t.g,p=0,a=n.length;for(o=0;o<a;++o)e=n[o],i=r(e),1/0==i?delete t.a[t.f(e)]:(s[p]=i,n[p++]=e);for(n.length=p,s.length=p,r=(t.b.length>>1)-1;0<=r;r--)Wi(t,r)}function zi(t,e){Hi.call(this,function(e){return t.apply(null,e)},function(t){return t[0].Xa()}),this.s=e,this.j=0,this.i={}}function qi(t,e,o){for(var i,r,n=0;t.j<e&&n<o&&0<t.b.length;)i=Xi(t)[0],r=i.Xa(),0!==i.U()||r in t.i||(t.i[r]=!0,++t.j,++n,i.load())}function Vi(t,e,o){this.f=t,this.g=e,this.i=o,this.b=[],this.a=this.c=0}function Yi(t,e){var o=t.f,i=t.a,r=t.g-i,n=Math.log(t.g/t.a)/t.f;return lo({source:e,duration:n,easing:function(t){return i*(Math.exp(o*t*n)-1)/r}})}function Zi(t){B.call(this),this.s=null,this.Ba(!0),this.handleEvent=t.handleEvent}function Ji(t,e,o,i,r){if(void 0!==o){var n=e.Pa(),s=e.bb();void 0!==n&&s&&r&&0<r&&(t.ab(uo({rotation:n,duration:r,easing:so})),i&&t.ab(lo({source:s,duration:r,easing:so}))),e.rotate(o,i)}}function _i(t,e,o,i,r){var n=e.Ma();o=e.constrainResolution(n,o,0),Qi(t,e,o,i,r)}function Qi(t,e,o,i,r){if(o){var n=e.Ma(),s=e.bb();if(void 0!==n&&s&&o!==n&&r&&0<r&&(t.ab(co({resolution:n,duration:r,easing:so})),i&&t.ab(lo({source:s,duration:r,easing:so}))),i){var p;t=e.bb(),r=e.Ma(),void 0!==t&&void 0!==r&&(p=[i[0]-o*(i[0]-t[0])/r,i[1]-o*(i[1]-t[1])/r]),e.rb(p)}e.Yb(o)}}function tr(t){t=t?t:{},this.a=t.delta?t.delta:1,Zi.call(this,{handleEvent:er}),this.i=void 0!==t.duration?t.duration:250}function er(t){var e=!1,o=t.originalEvent;if(t.type==eg){var e=t.map,i=t.coordinate,o=o.shiftKey?-this.a:this.a,r=e.$();_i(e,r,o,i,this.i),t.preventDefault(),e=!0}return!e}function or(t){return t=t.originalEvent,t.altKey&&!(t.metaKey||t.ctrlKey)&&t.shiftKey}function ir(t){return t=t.originalEvent,0==t.button&&!(Fd&&Bd&&t.ctrlKey)}function rr(t){return"pointermove"==t.type}function nr(t){return t.type==Qd}function sr(t){return t=t.originalEvent,!t.altKey&&!(t.metaKey||t.ctrlKey)&&!t.shiftKey}function pr(t){return t=t.originalEvent,!t.altKey&&!(t.metaKey||t.ctrlKey)&&t.shiftKey}function ar(t){return t=t.originalEvent.target.tagName,"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}function hr(t){return n(t.b,56),"mouse"==t.b.pointerType}function lr(t){return t=t.b,t.isPrimary&&0===t.button}function ur(t){t=t?t:{},Zi.call(this,{handleEvent:t.handleEvent?t.handleEvent:fr}),this.Me=t.handleDownEvent?t.handleDownEvent:qt,this.Je=t.handleDragEvent?t.handleDragEvent:o,this.hj=t.handleMoveEvent?t.handleMoveEvent:o,this.pj=t.handleUpEvent?t.handleUpEvent:qt,this.C=!1,this.Z={},this.l=[]}function cr(t){for(var e=t.length,o=0,i=0,r=0;r<e;r++)o+=t[r].clientX,i+=t[r].clientY;return[o/e,i/e]}function fr(t){if(!(t instanceof Ii))return!0;var e=!1,o=t.type;return o!==rg&&o!==og&&o!==ng||(o=t.b,t.type==ng?delete this.Z[o.pointerId]:t.type==rg?this.Z[o.pointerId]=o:o.pointerId in this.Z&&(this.Z[o.pointerId]=o),this.l=v(this.Z)),this.C&&(t.type==og?this.Je(t):t.type==ng&&(this.C=this.pj(t))),t.type==rg?(this.C=t=this.Me(t),e=this.Fc(t)):t.type==ig&&this.hj(t),!e}function yr(t){ur.call(this,{handleDownEvent:vr,handleDragEvent:dr,handleUpEvent:gr}),t=t?t:{},this.a=t.kinetic,this.i=this.j=null,this.u=t.condition?t.condition:sr,this.o=!1}function dr(t){var e=cr(this.l);if(this.a&&this.a.b.push(e[0],e[1],Date.now()),this.i){var o=this.i[0]-e[0],i=e[1]-this.i[1];t=t.map.$();var r=t.U(),i=o=[o,i],n=r.resolution;i[0]*=n,i[1]*=n,ut(o,r.rotation),st(o,r.center),o=t.Qd(o),t.rb(o)}this.i=e}function gr(t){var e=t.map;if(t=e.$(),0===this.l.length){var o;if(o=!this.o&&this.a)if(o=this.a,6>o.b.length)o=!1;else{var i=Date.now()-o.i,r=o.b.length-3;if(o.b[r+2]<i)o=!1;else{for(var n=r-3;0<n&&o.b[n+2]>i;)n-=3;var i=o.b[r+2]-o.b[n+2],s=o.b[r]-o.b[n],r=o.b[r+1]-o.b[n+1];o.c=Math.atan2(r,s),o.a=Math.sqrt(s*s+r*r)/i,o=o.a>o.g}}return o?(o=this.a,o=(o.g-o.a)/o.f,r=this.a.c,n=t.bb(),this.j=Yi(this.a,n),e.ab(this.j),n=e.Ca(n),e=e.Ja([n[0]-o*Math.cos(r),n[1]-o*Math.sin(r)]),e=t.Qd(e),t.rb(e)):e.render(),ro(t,-1),!1}return this.i=null,!0}function vr(t){if(0<this.l.length&&this.u(t)){var e=t.map,o=e.$();return this.i=null,this.C||ro(o,1),this.j&&z(e.S,this.j)&&(o.rb(t.frameState.viewState.center),this.j=null),this.a&&(t=this.a,t.b.length=0,t.c=0,t.a=0),this.o=1<this.l.length,!0}return!1}function mr(t){t=t?t:{},ur.call(this,{handleDownEvent:xr,handleDragEvent:br,handleUpEvent:wr}),this.i=t.condition?t.condition:or,this.a=void 0,this.j=void 0!==t.duration?t.duration:250}function br(t){if(hr(t)){var e=t.map,o=e.kb();if(t=t.pixel,o=Math.atan2(o[1]/2-t[1],t[0]-o[0]/2),void 0!==this.a){t=o-this.a;var i=e.$(),r=i.Pa();Ji(e,i,r-t)}this.a=o}}function wr(t){if(!hr(t))return!0;t=t.map;var e=t.$();ro(e,-1);var o=e.Pa(),i=this.j,o=e.constrainRotation(o,0);return Ji(t,e,o,void 0,i),!1}function xr(t){return!!(hr(t)&&ir(t)&&this.i(t))&&(ro(t.map.$(),1),this.a=void 0,!0)}function Sr(t){this.f=null,this.a=document.createElement("div"),this.a.style.position="absolute",this.a.className="ol-box "+t,this.g=this.c=this.b=null}function Tr(t){var e=t.c,o=t.g;t=t.a.style,t.left=Math.min(e[0],o[0])+"px",t.top=Math.min(e[1],o[1])+"px",t.width=Math.abs(o[0]-e[0])+"px",t.height=Math.abs(o[1]-e[1])+"px"}function Er(t){var e=t.c,o=t.g,e=[e,[e[0],o[1]],o,[o[0],e[1]]].map(t.b.Ja,t.b);e[4]=e[0].slice(),t.f?t.f.ma([e]):t.f=new ze([e])}function Mr(t){ur.call(this,{handleDownEvent:jr,handleDragEvent:Pr,handleUpEvent:Ar}),t=t?t:{},this.a=new Sr(t.className||"ol-dragbox"),this.i=null,this.B=t.condition?t.condition:zt,this.u=t.boxEndCondition?t.boxEndCondition:Cr}function Cr(t,e,o){return t=o[0]-e[0],e=o[1]-e[1],64<=t*t+e*e}function Pr(t){if(hr(t)){var e=this.a,o=t.pixel;e.c=this.i,e.g=o,Er(e),Tr(e),this.b(new Nr(ug,t.coordinate,t))}}function Ar(t){return!hr(t)||(this.a.setMap(null),this.u(t,this.i,t.pixel)&&(this.o(t),this.b(new Nr(cg,t.coordinate,t))),!1)}function jr(t){if(hr(t)&&ir(t)&&this.B(t)){this.i=t.pixel,this.a.setMap(t.map);var e=this.a,o=this.i;return e.c=this.i,e.g=o,Er(e),Tr(e),this.b(new Nr(lg,t.coordinate,t)),!0}return!1}function Nr(t,e,o){L.call(this,t),this.coordinate=e,this.mapBrowserEvent=o}function Lr(t){t=t?t:{};var e=t.condition?t.condition:pr;this.j=void 0!==t.duration?t.duration:200,this.G=void 0!==t.out&&t.out,Mr.call(this,{condition:e,className:t.className||"ol-dragzoom"})}function Rr(t){Zi.call(this,{handleEvent:kr}),t=t||{},this.a=function(t){return sr(t)&&ar(t)},this.i=void 0!==t.condition?t.condition:this.a,this.j=void 0!==t.duration?t.duration:100,this.l=void 0!==t.pixelDelta?t.pixelDelta:128}function kr(t){var e=!1;if("keydown"==t.type){var o=t.originalEvent.keyCode;if(this.i(t)&&(40==o||37==o||39==o||38==o)){var i=t.map,e=i.$(),r=e.Ma()*this.l,n=0,s=0;40==o?s=-r:37==o?n=-r:39==o?n=r:s=r,o=[n,s],ut(o,e.Pa()),r=this.j,(n=e.bb())&&(r&&0<r&&i.ab(lo({source:n,duration:r,easing:ao})),i=e.Qd([n[0]+o[0],n[1]+o[1]]),e.rb(i)),t.preventDefault(),e=!0}}return!e}function Ir(t){Zi.call(this,{handleEvent:Dr}),t=t?t:{},this.i=t.condition?t.condition:ar,this.a=t.delta?t.delta:1,this.j=void 0!==t.duration?t.duration:100}function Dr(t){var e=!1;if("keydown"==t.type||"keypress"==t.type){var o=t.originalEvent.charCode;if(this.i(t)&&(43==o||45==o)){var e=t.map,o=43==o?this.a:-this.a,i=e.$();_i(e,i,o,void 0,this.j),t.preventDefault(),e=!0}}return!e}function Or(t){Zi.call(this,{handleEvent:Fr}),t=t||{},this.i=0,this.C=void 0!==t.duration?t.duration:250,this.G=void 0!==t.timeout?t.timeout:80,this.o=void 0===t.useAnchor||t.useAnchor,this.a=null,this.l=this.j=void 0}function Fr(t){var e=!1;if("wheel"==t.type||"mousewheel"==t.type){var e=t.map,o=t.originalEvent;this.o&&(this.a=t.coordinate);var i;"wheel"==t.type?(i=o.deltaY,Dd&&o.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(i/=Ud),o.deltaMode===WheelEvent.DOM_DELTA_LINE&&(i*=40)):"mousewheel"==t.type&&(i=-o.wheelDeltaY,Od&&(i/=3)),this.i+=i,void 0===this.j&&(this.j=Date.now()),i=Math.max(this.G-(Date.now()-this.j),0),clearTimeout(this.l),this.l=setTimeout(this.u.bind(this,e),i),t.preventDefault(),e=!0}return!e}function Br(t){ur.call(this,{handleDownEvent:Hr,handleDragEvent:Ur,handleUpEvent:Gr}),t=t||{},this.i=null,this.j=void 0,this.a=!1,this.o=0,this.B=void 0!==t.threshold?t.threshold:.3,this.u=void 0!==t.duration?t.duration:250}function Ur(t){var e=0,o=this.l[0],i=this.l[1],o=Math.atan2(i.clientY-o.clientY,i.clientX-o.clientX);void 0!==this.j&&(e=o-this.j,this.o+=e,!this.a&&Math.abs(this.o)>this.B&&(this.a=!0)),this.j=o,t=t.map,o=t.a.getBoundingClientRect(),i=cr(this.l),i[0]-=o.left,i[1]-=o.top,this.i=t.Ja(i),this.a&&(o=t.$(),i=o.Pa(),t.render(),Ji(t,o,i+e,this.i))}function Gr(t){if(2>this.l.length){t=t.map;var e=t.$();if(ro(e,-1),this.a){var o=e.Pa(),i=this.i,r=this.u,o=e.constrainRotation(o,0);Ji(t,e,o,i,r)}return!1}return!0}function Hr(t){return 2<=this.l.length&&(t=t.map,this.i=null,this.j=void 0,this.a=!1,this.o=0,this.C||ro(t.$(),1),t.render(),!0)}function Xr(t){ur.call(this,{handleDownEvent:Kr,handleDragEvent:Wr,handleUpEvent:$r}),t=t?t:{},this.i=null,this.o=void 0!==t.duration?t.duration:400,this.a=void 0,this.j=1}function Wr(t){var e=1,o=this.l[0],i=this.l[1],r=o.clientX-i.clientX,o=o.clientY-i.clientY,r=Math.sqrt(r*r+o*o);void 0!==this.a&&(e=this.a/r),this.a=r,1!=e&&(this.j=e),t=t.map;var r=t.$(),o=r.Ma(),i=t.a.getBoundingClientRect(),n=cr(this.l);n[0]-=i.left,n[1]-=i.top,this.i=t.Ja(n),t.render(),Qi(t,r,o*e,this.i)}function $r(t){if(2>this.l.length){t=t.map;var e=t.$();ro(e,-1);var o=e.Ma(),i=this.i,r=this.o,o=e.constrainResolution(o,0,this.j-1);return Qi(t,e,o,i,r),!1}return!0}function Kr(t){return 2<=this.l.length&&(t=t.map,this.i=null,this.a=void 0,this.j=1,this.C||ro(t.$(),1),t.render(),!0)}function zr(t){t=t?t:{};var e=new Oo,o=new Vi((-.005),.05,100);return(void 0!==t.altShiftDragRotate?t.altShiftDragRotate:1)&&e.push(new mr),(void 0!==t.doubleClickZoom?t.doubleClickZoom:1)&&e.push(new tr({delta:t.zoomDelta,duration:t.zoomDuration})),(void 0!==t.dragPan?t.dragPan:1)&&e.push(new yr({kinetic:o})),(void 0!==t.pinchRotate?t.pinchRotate:1)&&e.push(new Br),(void 0!==t.pinchZoom?t.pinchZoom:1)&&e.push(new Xr({duration:t.zoomDuration})),(void 0!==t.keyboard?t.keyboard:1)&&(e.push(new Rr),e.push(new Ir({delta:t.zoomDelta,duration:t.zoomDuration}))),(void 0!==t.mouseWheelZoom?t.mouseWheelZoom:1)&&e.push(new Or({duration:t.zoomDuration})),(void 0!==t.shiftDragZoom?t.shiftDragZoom:1)&&e.push(new Lr({duration:t.zoomDuration})),e}function qr(t){B.call(this);var e=hd({},t);e.opacity=void 0!==t.opacity?t.opacity:1,e.visible=void 0===t.visible||t.visible,e.zIndex=void 0!==t.zIndex?t.zIndex:0,e.maxResolution=void 0!==t.maxResolution?t.maxResolution:1/0,e.minResolution=void 0!==t.minResolution?t.minResolution:0,this.H(e),this.a={layer:this,sd:!0}}function Vr(t){return t.a.opacity=s(t.Rb(),0,1),t.a.mi=t.hf(),t.a.visible=t.zb(),t.a.extent=t.D(),t.a.zIndex=t.Sb(),t.a.maxResolution=t.Pb(),t.a.minResolution=Math.max(t.Qb(),0),t.a}function Yr(t){var e=t||{};t=hd({},e),delete t.layers,e=e.layers,qr.call(this,t),this.c=[],this.f={},E(this,U(fg),this.Fk,this),e?Array.isArray(e)?e=new Oo(e.slice()):n(e instanceof Oo,43):e=new Oo,this.gh(e)}function Zr(t){Yt.call(this,{code:t,units:"m",extent:dg,global:!0,worldExtent:gg})}function Jr(t,e,o){var i=t.length;o=1<o?o:2,void 0===e&&(e=2<o?t.slice():Array(i));for(var r=0;r<i;r+=o){e[r]=yg*t[r]/180;var n=6378137*Math.log(Math.tan(Math.PI*(t[r+1]+90)/360));n>yg?n=yg:n<-yg&&(n=-yg),e[r+1]=n}return e}function _r(t,e,o){var i=t.length;o=1<o?o:2,void 0===e&&(e=2<o?t.slice():Array(i));for(var r=0;r<i;r+=o)e[r]=180*t[r]/yg,e[r+1]=360*Math.atan(Math.exp(t[r+1]/6378137))/Math.PI-90;return e}function Qr(t,e){Yt.call(this,{code:t,units:"degrees",extent:bg,axisOrientation:e,global:!0,metersPerUnit:wg,worldExtent:bg})}function tn(){Zt(vg),Zt(xg),Jt()}function en(t,e,o,i,r){L.call(this,t),this.vectorContext=e,this.frameState=o,this.context=i,this.glContext=r}function on(t){var e=hd({},t);delete e.source,qr.call(this,e),this.C=this.s=this.o=null,t.map&&this.setMap(t.map),E(this,U("source"),this.Sk,this),this.Ec(t.source?t.source:null)}function rn(t,e){return t.visible&&e>=t.minResolution&&e<t.maxResolution}function nn(){this.b={},this.a=0}function sn(){return[1,0,0,1,0,0]}function pn(t){return hn(t,1,0,0,1,0,0)}function an(t,e){var o=t[0],i=t[1],r=t[2],n=t[3],s=t[4],p=t[5],a=e[0],h=e[1],l=e[2],u=e[3],c=e[4],f=e[5];return t[0]=o*a+r*h,t[1]=i*a+n*h,t[2]=o*l+r*u,t[3]=i*l+n*u,t[4]=o*c+r*f+s,t[5]=i*c+n*f+p,t}function hn(t,e,o,i,r,n,s){return t[0]=e,t[1]=o,t[2]=i,t[3]=r,t[4]=n,t[5]=s,t}function ln(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function un(t,e){var o=e[0],i=e[1];return e[0]=t[0]*o+t[2]*i+t[4],e[1]=t[1]*o+t[3]*i+t[5],e}function cn(t,e){var o=Math.cos(e),i=Math.sin(e);an(t,hn(Tg,o,i,-i,o,0,0))}function fn(t,e,o){return an(t,hn(Tg,e,0,0,o,0,0))}function yn(t,e,o){an(t,hn(Tg,1,0,0,1,e,o))}function dn(t,e,o,i,r,n,s,p){var a=Math.sin(n);return n=Math.cos(n),t[0]=i*n,t[1]=r*a,t[2]=-i*a,t[3]=r*n,t[4]=s*i*n-p*i*a+e,t[5]=s*r*a+p*r*n+o,t}function gn(t){var e=t[0]*t[3]-t[1]*t[2];n(0!==e,32);var o=t[0],i=t[1],r=t[2],s=t[3],p=t[4],a=t[5];return t[0]=s/e,t[1]=-i/e,t[2]=-r/e,t[3]=o/e,t[4]=(r*a-s*p)/e,t[5]=-(o*a-i*p)/e,t}function vn(t,e){this.l=e,this.f={},this.s={}}function mn(t){var e=t.viewState,o=t.coordinateToPixelTransform,i=t.pixelToCoordinateTransform;dn(o,t.size[0]/2,t.size[1]/2,1/e.resolution,-1/e.resolution,-e.rotation,-e.center[0],-e.center[1]),gn(ln(i,o))}function bn(){if(32<Sg.a){var t,e,o=0;for(t in Sg.b)e=Sg.b[t],0!==(3&o++)||I(e)||(delete Sg.b[t],--Sg.a)}}function wn(t,e){var o=i(e).toString();if(o in t.f)return t.f[o];var r=t.ng(e);return t.f[o]=r,t.s[o]=E(r,"change",t.Dk,t),r}function xn(t,e){for(var o in t.f)if(!(o in e.layerStates)){e.postRenderFunctions.push(t.Io.bind(t));break}}function Sn(t,e){return t.zIndex-e.zIndex}function Tn(t){on.call(this,t?t:{})}function En(t){t=t?t:{};var e=hd({},t);delete e.preload,delete e.useInterimTilesOnError,on.call(this,e),this.l(void 0!==t.preload?t.preload:0),this.B(void 0===t.useInterimTilesOnError||t.useInterimTilesOnError)}function Mn(t,e,o,i,r){k.call(this),this.j=r,this.extent=t,this.f=o,this.resolution=e,this.state=i}function Cn(t){t.b("change")}function Pn(t,e,o,i,r,n,s){Mn.call(this,t,e,o,Cg,i),this.o=r,this.g=new Image,null!==n&&(this.g.crossOrigin=n),this.i={},this.c=null,this.state=Cg,this.l=s}function An(t,e,o,i){0!==e&&(t.translate(o,i),t.rotate(e),t.translate(-o,-i))}function jn(t){this.l=t.opacity,this.T=t.rotateWithView,this.o=t.rotation,this.c=t.scale,this.u=t.snapToPixel}function Nn(t){t=t||{},this.s=t.atlasManager,this.j=this.f=this.i=null,this.g=void 0!==t.fill?t.fill:null,this.b=void 0!==t.stroke?t.stroke:null,this.a=t.radius,this.S=[0,0],this.C=this.G=this.na=this.B=null,Ln(this,this.s),jn.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0===t.snapToPixel||t.snapToPixel})}function Ln(t,e){var o,i,r=null,n=0;t.b&&(i=Xo(t.b.a),n=t.b.f,void 0===n&&(n=1),r=t.b.g,Gd||(r=null));var s=2*(t.a+n)+1,r={strokeStyle:i,Dd:n,size:s,lineDash:r};if(void 0===e)i=Wo(s,s),t.f=i.canvas,o=s=t.f.width,t.wh(r,i,0,0),t.C=[r.size,r.size],t.g?t.j=t.f:(i=Wo(r.size,r.size),t.j=i.canvas,t.vh(r,i,0,0));else{s=Math.round(s),(i=!t.g)&&(o=t.vh.bind(t,r));var n=t.b?Dn(t.b):"-",p=t.g?kn(t.g):"-";t.i&&n==t.i[1]&&p==t.i[2]&&t.a==t.i[3]||(t.i=["c"+n+p+(void 0!==t.a?t.a.toString():"-"),n,p,t.a]),r=e.add(t.i[0],s,s,t.wh.bind(t,r),o),t.f=r.image,t.S=[r.offsetX,r.offsetY],o=r.image.width,i?(t.j=r.de,t.C=[r.de.width,r.de.height]):(t.j=t.f,t.C=[o,o])}t.B=[s/2,s/2],t.na=[s,s],t.G=[o,o]}function Rn(t){t=t||{},this.b=void 0!==t.color?t.color:null,this.a=void 0}function kn(t){return void 0===t.a&&(t.a=t.b instanceof CanvasPattern||t.b instanceof CanvasGradient?i(t.b).toString():"f"+(t.b?Go(t.b):"-")),t.a}function In(t){t=t||{},this.a=void 0!==t.color?t.color:null,this.c=t.lineCap,this.g=void 0!==t.lineDash?t.lineDash:null,this.i=t.lineJoin,this.j=t.miterLimit,this.f=t.width,this.b=void 0}function Dn(t){return void 0===t.b&&(t.b="s",t.b=t.a?"string"==typeof t.a?t.b+t.a:t.b+i(t.a).toString():t.b+"-",t.b+=","+(void 0!==t.c?t.c.toString():"-")+","+(t.g?t.g.toString():"-")+","+(void 0!==t.i?t.i:"-")+","+(void 0!==t.j?t.j.toString():"-")+","+(void 0!==t.f?t.f.toString():"-")),t.b}function On(t){t=t||{},this.i=null,this.c=Gn,void 0!==t.geometry&&this.zh(t.geometry),this.f=void 0!==t.fill?t.fill:null,this.a=void 0!==t.image?t.image:null,this.g=void 0!==t.stroke?t.stroke:null,this.j=void 0!==t.text?t.text:null,this.b=t.zIndex}function Fn(t){if("function"!=typeof t){var e;Array.isArray(t)?e=t:(n(t instanceof On,41),e=[t]),t=function(){return e}}return t}function Bn(){if(!kg){var t=new Rn({color:"rgba(255,255,255,0.4)"}),e=new In({color:"#3399CC",width:1.25});kg=[new On({image:new Nn({fill:t,stroke:e,radius:5}),fill:t,stroke:e})]}return kg}function Un(){var t={},e=[255,255,255,1],o=[0,153,255,1];return t.Polygon=[new On({fill:new Rn({color:[255,255,255,.5]})})],t.MultiPolygon=t.Polygon,t.LineString=[new On({stroke:new In({color:e,width:5})}),new On({stroke:new In({color:o,width:3})})],t.MultiLineString=t.LineString,t.Circle=t.Polygon.concat(t.LineString),t.Point=[new On({image:new Nn({radius:6,fill:new Rn({color:o}),stroke:new In({color:e,width:1.5})}),zIndex:1/0})],t.MultiPoint=t.Point,t.GeometryCollection=t.Polygon.concat(t.LineString,t.Point),t}function Gn(t){return t.V()}function Hn(t){t=t?t:{};var e=hd({},t);delete e.style,delete e.renderBuffer,delete e.updateWhileAnimating,delete e.updateWhileInteracting,on.call(this,e),this.i=void 0!==t.renderBuffer?t.renderBuffer:100,this.B=null,this.j=void 0,this.l(t.style),this.Z=void 0!==t.updateWhileAnimating&&t.updateWhileAnimating,this.fa=void 0!==t.updateWhileInteracting&&t.updateWhileInteracting}function Xn(t){t=t?t:{};var e=hd({},t);delete e.preload,delete e.useInterimTilesOnError,Hn.call(this,e),this.P(t.preload?t.preload:0),this.W(!t.useInterimTilesOnError||t.useInterimTilesOnError),n(void 0==t.renderMode||t.renderMode==Og||t.renderMode==Fg||t.renderMode==Bg,28),this.u=t.renderMode||Fg}function Wn(){}function $n(t,e,o,i,r){this.f=t,this.C=e,this.c=o,this.B=i,this.ac=r,this.i=this.b=this.a=this.Z=this.Qa=this.W=null,this.fa=this.$a=this.T=this.na=this.S=this.G=0,this.ra=!1,this.j=this.Ib=0,this.oa=!1,this.za=0,this.g="",this.Aa=this.Ka=0,this.La=!1,this.o=this.ub=0,this.P=this.s=this.l=null,this.u=[],this.Jb=sn()}function Kn(t,e,o){if(t.i){e=fe(e,0,o,2,t.B,t.u),o=t.f;var i=t.Jb,r=o.globalAlpha;1!=t.T&&(o.globalAlpha=r*t.T);var n=t.Ib;t.ra&&(n+=t.ac);var s,p;for(s=0,p=e.length;s<p;s+=2){
-var a=e[s]-t.G,h=e[s+1]-t.S;if(t.oa&&(a=Math.round(a),h=Math.round(h)),0!==n||1!=t.j){var l=a+t.G,u=h+t.S;dn(i,l,u,t.j,t.j,n,-l,-u),o.setTransform.apply(o,i)}o.drawImage(t.i,t.$a,t.fa,t.za,t.na,a,h,t.za,t.na)}0===n&&1==t.j||o.setTransform(1,0,0,1,0,0),1!=t.T&&(o.globalAlpha=r)}}function zn(t,e,o,i){var r=0;if(t.P&&""!==t.g){t.l&&Yn(t,t.l),t.s&&Zn(t,t.s);var n=t.P,s=t.f,p=t.Z;for(p?(p.font!=n.font&&(p.font=s.font=n.font),p.textAlign!=n.textAlign&&(p.textAlign=s.textAlign=n.textAlign),p.textBaseline!=n.textBaseline&&(p.textBaseline=s.textBaseline=n.textBaseline)):(s.font=n.font,s.textAlign=n.textAlign,s.textBaseline=n.textBaseline,t.Z={font:n.font,textAlign:n.textAlign,textBaseline:n.textBaseline}),e=fe(e,r,o,i,t.B,t.u),n=t.f,s=t.ub,t.La&&(s+=t.ac);r<o;r+=i){var p=e[r]+t.Ka,a=e[r+1]+t.Aa;if(0!==s||1!=t.o){var h=dn(t.Jb,p,a,t.o,t.o,s,-p,-a);n.setTransform.apply(n,h)}t.s&&n.strokeText(t.g,p,a),t.l&&n.fillText(t.g,p,a)}0===s&&1==t.o||n.setTransform(1,0,0,1,0,0)}}function qn(t,e,o,i,r,n){var s=t.f;for(t=fe(e,o,i,r,t.B,t.u),s.moveTo(t[0],t[1]),e=t.length,n&&(e-=2),o=2;o<e;o+=2)s.lineTo(t[o],t[o+1]);return n&&s.closePath(),i}function Vn(t,e,o,i,r){var n,s;for(n=0,s=i.length;n<s;++n)o=qn(t,e,o,i[n],r,!0);return o}function Yn(t,e){var o=t.f,i=t.W;i?i.fillStyle!=e.fillStyle&&(i.fillStyle=o.fillStyle=e.fillStyle):(o.fillStyle=e.fillStyle,t.W={fillStyle:e.fillStyle})}function Zn(t,e){var o=t.f,i=t.Qa;i?(i.lineCap!=e.lineCap&&(i.lineCap=o.lineCap=e.lineCap),Gd&&!V(i.lineDash,e.lineDash)&&o.setLineDash(i.lineDash=e.lineDash),i.lineJoin!=e.lineJoin&&(i.lineJoin=o.lineJoin=e.lineJoin),i.lineWidth!=e.lineWidth&&(i.lineWidth=o.lineWidth=e.lineWidth),i.miterLimit!=e.miterLimit&&(i.miterLimit=o.miterLimit=e.miterLimit),i.strokeStyle!=e.strokeStyle&&(i.strokeStyle=o.strokeStyle=e.strokeStyle)):(o.lineCap=e.lineCap,Gd&&o.setLineDash(e.lineDash),o.lineJoin=e.lineJoin,o.lineWidth=e.lineWidth,o.miterLimit=e.miterLimit,o.strokeStyle=e.strokeStyle,t.Qa={lineCap:e.lineCap,lineDash:e.lineDash,lineJoin:e.lineJoin,lineWidth:e.lineWidth,miterLimit:e.miterLimit,strokeStyle:e.strokeStyle})}function Jn(t){D.call(this),this.a=t}function _n(t,e){var o=e.U();return o!=Ag&&o!=jg&&E(e,"change",t.Cm,t),o==Cg&&(e.load(),o=e.U()),o==Ag}function Qn(t){var e=t.a;e.zb()&&"ready"==e.hf()&&t.v()}function ts(t,e){e.qh()&&t.postRenderFunctions.push(function(t,e,o){e=i(t).toString(),t.Kc(o.viewState.projection,o.usedTiles[e])}.bind(null,e))}function es(t,e){if(e){var o,r,n;for(r=0,n=e.length;r<n;++r)o=e[r],t[i(o).toString()]=o}}function os(t,e){var o=e.S;void 0!==o&&("string"==typeof o?t.logos[o]="":o&&(n("string"==typeof o.href,44),n("string"==typeof o.src,45),t.logos[o.src]=o.href))}function is(t,e,o,r){e=i(e).toString(),o=o.toString(),e in t?o in t[e]?(t=t[e][o],r.ba<t.ba&&(t.ba=r.ba),r.da>t.da&&(t.da=r.da),r.ea<t.ea&&(t.ea=r.ea),r.ha>t.ha&&(t.ha=r.ha)):t[e][o]=r:(t[e]={},t[e][o]=r)}function rs(t,e,o,r,n,s,p,a,h,l){var u=i(e).toString();u in t.wantedTiles||(t.wantedTiles[u]={});var c=t.wantedTiles[u];t=t.tileQueue;var f,y,d,g,v,m,b=o.minZoom;for(m=p;m>=b;--m)for(y=Po(o,s,m,y),d=o.Ga(m),g=y.ba;g<=y.da;++g)for(v=y.ea;v<=y.ha;++v)p-m<=a?(f=e.vc(m,g,v,r,n),0==f.U()&&(c[f.Xa()]=!0,f.Xa()in t.a||t.c([f,u,Ao(o,f.ya),d])),void 0!==h&&h.call(l,f)):e.Vf(m,g,v,n)}function ns(t){Jn.call(this,t),this.S=sn()}function ss(t,e,o){var i=e.pixelRatio,r=e.size[0]*i,n=e.size[1]*i,s=e.viewState.rotation,p=Ut(o),a=Gt(o),h=It(o);o=kt(o),un(e.coordinateToPixelTransform,p),un(e.coordinateToPixelTransform,a),un(e.coordinateToPixelTransform,h),un(e.coordinateToPixelTransform,o),t.save(),An(t,-s,r/2,n/2),t.beginPath(),t.moveTo(p[0]*i,p[1]*i),t.lineTo(a[0]*i,a[1]*i),t.lineTo(h[0]*i,h[1]*i),t.lineTo(o[0]*i,o[1]*i),t.clip(),An(t,s,r/2,n/2)}function ps(t,e,o,i,r){var n=t.a;if(I(n,e)){var s=i.size[0]*i.pixelRatio,p=i.size[1]*i.pixelRatio,a=i.viewState.rotation;An(o,-a,s/2,p/2),t=void 0!==r?r:hs(t,i,0),n.b(new en(e,new $n(o,i.pixelRatio,i.extent,t,i.viewState.rotation),i,o,null)),An(o,a,s/2,p/2)}}function as(t,e,o,i){ps(t,"postcompose",e,o,i)}function hs(t,e,o){var i=e.viewState,r=e.pixelRatio,n=r/i.resolution;return dn(t.S,r*e.size[0]/2,r*e.size[1]/2,n,-n,-i.rotation,-i.center[0]+o,-i.center[1])}function ls(){}function us(t,e,o,i){this.ra=t,this.W=e,this.overlaps=i,this.f=0,this.resolution=o,this.na=this.S=null,this.a=[],this.coordinates=[],this.Qa=sn(),this.b=[],this.Z=[],this.fa=sn(),this.$a=sn()}function cs(t,e,o,i,r,n,s){var p=t.coordinates.length,a=t.af();s&&(o+=r),s=[e[o],e[o+1]];var h,l,u,c=[NaN,NaN],f=!0;for(h=o+r;h<i;h+=r)c[0]=e[h],c[1]=e[h+1],u=St(a,c),u!==l?(f&&(t.coordinates[p++]=s[0],t.coordinates[p++]=s[1]),t.coordinates[p++]=c[0],t.coordinates[p++]=c[1],f=!1):1===u?(t.coordinates[p++]=c[0],t.coordinates[p++]=c[1],f=!1):f=!0,s[0]=c[0],s[1]=c[1],l=u;return(n&&f||h===o+r)&&(t.coordinates[p++]=s[0],t.coordinates[p++]=s[1]),p}function fs(t,e){t.S=[0,e,0],t.a.push(t.S),t.na=[0,e,0],t.b.push(t.na)}function ys(t,e,o){if(t.P){var i=un(t.Qa,t.P.slice());e.translate(i[0],i[1]),e.rotate(o)}e.fill(),t.P&&e.setTransform.apply(e,t.$a)}function ds(t,e,o,r,n,s,p,a,h){var l;V(r,t.Qa)?l=t.Z:(l=fe(t.coordinates,0,t.coordinates.length,2,r,t.Z),ln(t.Qa,r)),r=!m(s);for(var u,c,f,y,d,g,v=0,b=p.length,w=t.fa,x=t.$a,S=0,T=0,E=t.a!=p||t.overlaps?0:200;v<b;){var M,C,P,A,j=p[v];switch(j[0]){case 0:u=j[1],r&&s[i(u).toString()]||!u.V()?v=j[2]:void 0===h||Xt(h,u.V().D())?++v:v=j[2]+1;break;case 1:S>E&&(ys(t,e,n),S=0),T>E&&(e.stroke(),T=0),S||T||e.beginPath(),++v;break;case 2:u=j[1],c=l[u],j=l[u+1],d=l[u+2]-c,u=l[u+3]-j,u=Math.sqrt(d*d+u*u),e.moveTo(c+u,j),e.arc(c,j,u,0,2*Math.PI,!0),++v;break;case 3:e.closePath(),++v;break;case 4:u=j[1],c=j[2],M=j[3],C=j[4]*o,P=j[5]*o;var N=j[6],L=j[7],R=j[8],k=j[9];A=j[10],d=j[11],g=j[12];var I=j[13],D=j[14];for(A&&(d+=n);u<c;u+=2){if(j=l[u]-C,A=l[u+1]-P,I&&(j=Math.round(j),A=Math.round(A)),1!=g||0!==d){var O=j+C,F=A+P;dn(w,O,F,g,g,d,-O,-F),e.setTransform.apply(e,w)}O=e.globalAlpha,1!=L&&(e.globalAlpha=O*L);var F=D+R>M.width?M.width-R:D,B=N+k>M.height?M.height-k:N;e.drawImage(M,R,k,F,B,j,A,F*o,B*o),1!=L&&(e.globalAlpha=O),1==g&&0===d||e.setTransform.apply(e,x)}++v;break;case 5:for(u=j[1],c=j[2],P=j[3],N=j[4]*o,L=j[5]*o,d=j[6],g=j[7]*o,M=j[8],C=j[9],(A=j[10])&&(d+=n);u<c;u+=2){for(j=l[u]+N,A=l[u+1]+L,1==g&&0===d||(dn(w,j,A,g,g,d,-j,-A),e.setTransform.apply(e,w)),R=P.split("\n"),k=R.length,1<k?(I=Math.round(1.5*e.measureText("M").width),A-=(k-1)/2*I):I=0,D=0;D<k;D++)O=R[D],C&&e.strokeText(O,j,A),M&&e.fillText(O,j,A),A+=I;1==g&&0===d||e.setTransform.apply(e,x)}++v;break;case 6:if(void 0!==a&&(u=j[1],u=a(u)))return u;++v;break;case 7:E?S++:ys(t,e,n),++v;break;case 8:for(u=j[1],c=j[2],j=l[u],A=l[u+1],d=j+.5|0,g=A+.5|0,d===f&&g===y||(e.moveTo(j,A),f=d,y=g),u+=2;u<c;u+=2)j=l[u],A=l[u+1],d=j+.5|0,g=A+.5|0,(u==c-2||d!==f||g!==y)&&(e.lineTo(j,A),f=d,y=g);++v;break;case 9:t.P=j[2],S&&(ys(t,e,n),S=0),e.fillStyle=j[1],++v;break;case 10:f=void 0===j[7]||j[7],y=j[2],T&&(e.stroke(),T=0),e.strokeStyle=j[1],e.lineWidth=f?y*o:y,e.lineCap=j[3],e.lineJoin=j[4],e.miterLimit=j[5],Gd&&e.setLineDash(j[6]),y=f=NaN,++v;break;case 11:e.font=j[1],e.textAlign=j[2],e.textBaseline=j[3],++v;break;case 12:E?T++:e.stroke(),++v;break;default:++v}}S&&ys(t,e,n),T&&e.stroke()}function gs(t){var e=t.b;e.reverse();var o,i,r,n=e.length,s=-1;for(o=0;o<n;++o)if(i=e[o],r=i[0],6==r)s=o;else if(0==r){for(i[2]=o,i=t.b,r=o;s<r;){var p=i[s];i[s]=i[r],i[r]=p,++s,--r}s=-1}}function vs(t,e){t.S[2]=t.a.length,t.S=null,t.na[2]=t.b.length,t.na=null;var o=[6,e];t.a.push(o),t.b.push(o)}function ms(t,e,o,i){us.call(this,t,e,o,i),this.j=this.za=null,this.G=this.B=this.C=this.u=this.T=this.s=this.o=this.l=this.i=this.c=this.g=void 0}function bs(t,e,o,i){us.call(this,t,e,o,i),this.c=null,this.g={hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,nf:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}function ws(t,e,o,i,r){var n=t.coordinates.length;return e=cs(t,e,o,i,r,!1,!1),n=[8,n,e],t.a.push(n),t.b.push(n),i}function xs(t){var e=t.g,o=e.strokeStyle,i=e.lineCap,r=e.lineDash,n=e.lineJoin,s=e.lineWidth,p=e.miterLimit;e.hd==o&&e.cd==i&&V(e.dd,r)&&e.ed==n&&e.fd==s&&e.gd==p||(e.nf!=t.coordinates.length&&(t.a.push([12]),e.nf=t.coordinates.length),t.a.push([10,o,s,i,n,p,r],[1]),e.hd=o,e.cd=i,e.dd=r,e.ed=n,e.fd=s,e.gd=p)}function Ss(t,e,o,i){us.call(this,t,e,o,i),this.c=null,this.g={og:void 0,hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}function Ts(t,e,o,i,r){var n=t.g,s=void 0!==n.fillStyle,n=void 0!=n.strokeStyle,p=i.length,a=[1];for(t.a.push(a),t.b.push(a),a=0;a<p;++a){var h=i[a],l=t.coordinates.length;o=cs(t,e,o,h,r,!0,!n),o=[8,l,o],t.a.push(o),t.b.push(o),n&&(o=[3],t.a.push(o),t.b.push(o)),o=h}return e=[7],t.b.push(e),s&&t.a.push(e),n&&(s=[12],t.a.push(s),t.b.push(s)),o}function Es(t,e){var o=t.g,i=o.fillStyle,r=o.strokeStyle,n=o.lineCap,s=o.lineDash,p=o.lineJoin,a=o.lineWidth,h=o.miterLimit;if(void 0!==i&&("string"!=typeof i||o.og!=i)){var l=[9,i];"string"!=typeof i&&(i=e.D(),l.push([i[0],i[3]])),t.a.push(l),o.og=o.fillStyle}void 0===r||o.hd==r&&o.cd==n&&o.dd==s&&o.ed==p&&o.fd==a&&o.gd==h||(t.a.push([10,r,a,n,p,h,s]),o.hd=r,o.cd=n,o.dd=s,o.ed=p,o.fd=a,o.gd=h)}function Ms(t,e,o,i){us.call(this,t,e,o,i),this.G=this.B=this.C=null,this.j="",this.o=this.l=0,this.s=void 0,this.u=this.T=0,this.i=this.c=this.g=null}function Cs(t,e,o,i,r){if(""!==t.j&&t.i&&(t.g||t.c)){if(t.g){var n=t.g,s=t.C;if(!s||s.fillStyle!=n.fillStyle){var p=[9,n.fillStyle];t.a.push(p),t.b.push(p),s?s.fillStyle=n.fillStyle:t.C={fillStyle:n.fillStyle}}}t.c&&(n=t.c,s=t.B,s&&s.lineCap==n.lineCap&&s.lineDash==n.lineDash&&s.lineJoin==n.lineJoin&&s.lineWidth==n.lineWidth&&s.miterLimit==n.miterLimit&&s.strokeStyle==n.strokeStyle||(p=[10,n.strokeStyle,n.lineWidth,n.lineCap,n.lineJoin,n.miterLimit,n.lineDash,!1],t.a.push(p),t.b.push(p),s?(s.lineCap=n.lineCap,s.lineDash=n.lineDash,s.lineJoin=n.lineJoin,s.lineWidth=n.lineWidth,s.miterLimit=n.miterLimit,s.strokeStyle=n.strokeStyle):t.B={lineCap:n.lineCap,lineDash:n.lineDash,lineJoin:n.lineJoin,lineWidth:n.lineWidth,miterLimit:n.miterLimit,strokeStyle:n.strokeStyle})),n=t.i,s=t.G,s&&s.font==n.font&&s.textAlign==n.textAlign&&s.textBaseline==n.textBaseline||(p=[11,n.font,n.textAlign,n.textBaseline],t.a.push(p),t.b.push(p),s?(s.font=n.font,s.textAlign=n.textAlign,s.textBaseline=n.textBaseline):t.G={font:n.font,textAlign:n.textAlign,textBaseline:n.textBaseline}),fs(t,r),n=t.coordinates.length,e=cs(t,e,0,o,i,!1,!1),e=[5,n,e,t.j,t.l,t.o,t.T,t.u,!!t.g,!!t.c,t.s],t.a.push(e),t.b.push(e),vs(t,r)}}function Ps(t,e,o,i,r){this.s=t,this.f=e,this.l=i,this.o=o,this.c=r,this.a={},this.i=Wo(1,1),this.j=sn()}function As(t){for(var e in t.a){var o,i=t.a[e];for(o in i)i[o].ke()}}function js(t,e,o,i,r,n,s){var p=Object.keys(t.a).map(Number);p.sort(function(t,e){return e-t});var a,h,l,u,c;for(a=0,h=p.length;a<h;++a)for(u=t.a[p[a].toString()],l=Ug.length-1;0<=l;--l)if(c=u[Ug[l]],void 0!==c&&(c=ds(c,e,1,o,i,r,c.b,n,s)))return c}function Ns(t,e){return i(t)-i(e)}function Ls(t,e){var o=.5*t/e;return o*o}function Rs(t,e,o,i,r,n){var s,p,a=!1;return(s=o.a)&&(p=s.vd(),p==Ag||p==jg?s.Uf(r,n):(p==Cg&&s.load(),s.pf(r,n),a=!0)),(r=(0,o.c)(e))&&(i=r.pd(i),(0,Hg[i.X()])(t,i,o,e)),a}function ks(t,e,o,i,r,n){this.c=void 0!==n?n:null,Mn.call(this,t,e,o,void 0!==n?Cg:Ag,i),this.g=r}function Is(t,e,o,i){var r=le(o,e,t);return o=e.getPointResolution(i,o),e=e.dc(),void 0!==e&&(o*=e),e=t.dc(),void 0!==e&&(o/=e),t=t.getPointResolution(o,r)/o,isFinite(t)&&0<t&&(o/=t),o}function Ds(t,e,o,i){t=o-t,e=i-e;var r=Math.sqrt(t*t+e*e);return[Math.round(o+t/r),Math.round(i+e/r)]}function Os(t,e,o,i,r,n,s,p,a,h,l){var u=Wo(Math.round(o*t),Math.round(o*e));if(0===a.length)return u.canvas;u.scale(o,o);var c=Tt();a.forEach(function(t){At(c,t.extent)});var f=Wo(Math.round(o*Ht(c)/i),Math.round(o*Ft(c)/i)),y=o/i;a.forEach(function(t){f.drawImage(t.image,h,h,t.image.width-2*h,t.image.height-2*h,(t.extent[0]-c[0])*y,-(t.extent[3]-c[3])*y,Ht(t.extent)*y,Ft(t.extent)*y)});var d=Ut(s);return p.f.forEach(function(t){var e=t.source,r=t.target,s=e[1][0],p=e[1][1],a=e[2][0],h=e[2][1];t=(r[0][0]-d[0])/n;var l=-(r[0][1]-d[1])/n,y=(r[1][0]-d[0])/n,g=-(r[1][1]-d[1])/n,v=(r[2][0]-d[0])/n,m=-(r[2][1]-d[1])/n,r=e[0][0],e=e[0][1],s=s-r,p=p-e,a=a-r,h=h-e;t:{for(s=[[s,p,0,0,y-t],[a,h,0,0,v-t],[0,0,s,p,g-l],[0,0,a,h,m-l]],p=s.length,a=0;a<p;a++){for(var h=a,b=Math.abs(s[a][a]),w=a+1;w<p;w++){var x=Math.abs(s[w][a]);x>b&&(b=x,h=w)}if(0===b){s=null;break t}for(b=s[h],s[h]=s[a],s[a]=b,h=a+1;h<p;h++)for(b=-s[h][a]/s[a][a],w=a;w<p+1;w++)s[h][w]=a==w?0:s[h][w]+b*s[a][w]}for(a=Array(p),h=p-1;0<=h;h--)for(a[h]=s[h][p]/s[h][h],b=h-1;0<=b;b--)s[b][p]-=s[b][h]*a[h];s=a}s&&(u.save(),u.beginPath(),Xg?(a=(t+y+v)/3,h=(l+g+m)/3,p=Ds(a,h,t,l),y=Ds(a,h,y,g),v=Ds(a,h,v,m),u.moveTo(y[0],y[1]),u.lineTo(p[0],p[1]),u.lineTo(v[0],v[1])):(u.moveTo(y,g),u.lineTo(t,l),u.lineTo(v,m)),u.clip(),u.transform(s[0],s[2],s[1],s[3],t,l),u.translate(c[0]-r,c[3]-e),u.scale(i/o,-i/o),u.drawImage(f.canvas,0,0),u.restore())}),l&&(u.save(),u.strokeStyle="black",u.lineWidth=1,p.f.forEach(function(t){var e=t.target;t=(e[0][0]-d[0])/n;var o=-(e[0][1]-d[1])/n,i=(e[1][0]-d[0])/n,r=-(e[1][1]-d[1])/n,s=(e[2][0]-d[0])/n,e=-(e[2][1]-d[1])/n;u.beginPath(),u.moveTo(i,r),u.lineTo(t,o),u.lineTo(s,e),u.closePath(),u.stroke()}),u.restore()),u.canvas}function Fs(t,e,o,i,r){this.g=t,this.c=e;var n={},s=se(this.c,this.g);this.a=function(t){var e=t[0]+"/"+t[1];return n[e]||(n[e]=s(t)),n[e]},this.i=i,this.s=r*r,this.f=[],this.l=!1,this.o=this.g.a&&!!i&&!!this.g.D()&&Ht(i)==Ht(this.g.D()),this.b=this.g.D()?Ht(this.g.D()):null,this.j=this.c.D()?Ht(this.c.D()):null,t=Ut(o),e=Gt(o),i=It(o),o=kt(o),r=this.a(t);var p=this.a(e),a=this.a(i),h=this.a(o);if(Bs(this,t,e,i,o,r,p,a,h,10),this.l){var l=1/0;this.f.forEach(function(t){l=Math.min(l,t.source[0][0],t.source[1][0],t.source[2][0])}),this.f.forEach(function(t){if(Math.max(t.source[0][0],t.source[1][0],t.source[2][0])-l>this.b/2){var e=[[t.source[0][0],t.source[0][1]],[t.source[1][0],t.source[1][1]],[t.source[2][0],t.source[2][1]]];e[0][0]-l>this.b/2&&(e[0][0]-=this.b),e[1][0]-l>this.b/2&&(e[1][0]-=this.b),e[2][0]-l>this.b/2&&(e[2][0]-=this.b),Math.max(e[0][0],e[1][0],e[2][0])-Math.min(e[0][0],e[1][0],e[2][0])<this.b/2&&(t.source=e)}},this)}n={}}function Bs(t,e,o,i,r,n,s,p,a,h){var l=dt([n,s,p,a]),c=t.b?Ht(l)/t.b:null,f=t.b,y=t.g.a&&.5<c&&1>c,d=!1;if(0<h){if(t.c.g&&t.j)var g=dt([e,o,i,r]),d=d|.25<Ht(g)/t.j;!y&&t.g.g&&c&&(d|=.25<c)}if(d||!t.i||Xt(l,t.i)){if(!(d||isFinite(n[0])&&isFinite(n[1])&&isFinite(s[0])&&isFinite(s[1])&&isFinite(p[0])&&isFinite(p[1])&&isFinite(a[0])&&isFinite(a[1]))){if(!(0<h))return;d=!0}if(0<h&&(d||(l=t.a([(e[0]+i[0])/2,(e[1]+i[1])/2]),f=y?(u(n[0],f)+u(p[0],f))/2-u(l[0],f):(n[0]+p[0])/2-l[0],l=(n[1]+p[1])/2-l[1],d=f*f+l*l>t.s),d))return void(Math.abs(e[0]-i[0])<=Math.abs(e[1]-i[1])?(y=[(o[0]+i[0])/2,(o[1]+i[1])/2],f=t.a(y),l=[(r[0]+e[0])/2,(r[1]+e[1])/2],c=t.a(l),Bs(t,e,o,y,l,n,s,f,c,h-1),Bs(t,l,y,i,r,c,f,p,a,h-1)):(y=[(e[0]+o[0])/2,(e[1]+o[1])/2],f=t.a(y),l=[(i[0]+r[0])/2,(i[1]+r[1])/2],c=t.a(l),Bs(t,e,y,l,r,n,f,c,a,h-1),Bs(t,y,o,i,l,f,s,p,c,h-1)));if(y){if(!t.o)return;t.l=!0}t.f.push({source:[n,p,a],target:[e,i,r]}),t.f.push({source:[n,s,p],target:[e,o,i]})}}function Us(t){var e=Tt();return t.f.forEach(function(t){t=t.source,jt(e,t[0]),jt(e,t[1]),jt(e,t[2])}),e}function Gs(t,e,o,i,r,n){this.T=e,this.s=t.D();var s=e.D(),p=s?Bt(o,s):o,s=Is(t,e,Dt(p),i);this.l=new Fs(t,e,p,this.s,.5*s),this.c=i,this.g=o,t=Us(this.l),this.o=(this.sb=n(t,s,r))?this.sb.f:1,this.Cd=this.i=null,r=Ag,n=[],this.sb&&(r=Cg,n=this.sb.j),Mn.call(this,o,i,this.o,r,n)}function Hs(t){B.call(this),this.f=re(t.projection),this.j=Xs(t.attributions),this.S=t.logo,this.Ka=void 0!==t.state?t.state:"ready",this.G=void 0!==t.wrapX&&t.wrapX}function Xs(t){if("string"==typeof t)return[new Do({html:t})];if(t instanceof Do)return[t];if(Array.isArray(t)){for(var e=t.length,o=Array(e),i=0;i<e;i++){var r=t[i];o[i]="string"==typeof r?new Do({html:r}):r}return o}return null}function Ws(t,e){t.Ka=e,t.v()}function $s(t){Hs.call(this,{attributions:t.attributions,extent:t.extent,logo:t.logo,projection:t.projection,state:t.state}),this.C=void 0!==t.resolutions?t.resolutions:null,this.a=null,this.ra=0}function Ks(t,e){return t.C&&(e=t.C[W(t.C,e,0)]),e}function zs(t,e){t.a().src=e}function qs(t,e){L.call(this,t),this.image=e}function Vs(t){$s.call(this,{attributions:t.attributions,logo:t.logo,projection:t.projection,resolutions:t.resolutions,state:t.state}),this.fa=t.canvasFunction,this.P=null,this.Z=0,this.oa=void 0!==t.ratio?t.ratio:1.5}function Ys(t){this.c=t.source,this.La=sn(),this.i=Wo(),this.l=[0,0],this.Aa=void 0==t.renderBuffer?100:t.renderBuffer,this.u=null,Vs.call(this,{attributions:t.attributions,canvasFunction:this.rj.bind(this),logo:t.logo,projection:t.projection,ratio:t.ratio,resolutions:t.resolutions,state:this.c.U()}),this.B=null,this.s=void 0,this.nh(t.style),E(this.c,"change",this.Tm,this)}function Zs(t,e,o,i,r){return o=i/o,dn(t.La,r[0]/2,r[1]/2,o,-o,0,-e[0],-e[1])}function Js(t){ns.call(this,t),this.f=null,this.s=sn(),this.c=this.l=null}function _s(t){ns.call(this,t),this.c=Wo(),this.l=[],this.o=Tt(),this.P=[0,0,0],this.G=sn(),this.B=0}function Qs(t,e,o,i){var r=t.l;if(0!==r.length){var n,s,p,a=o.pixelRatio,h=o.viewState,l=h.center,u=h.projection,c=h.rotation,f=o.size,y=Math.round(a*f[0]/2),f=Math.round(a*f[1]/2),h=a/h.resolution,d=t.a,g=d.ga(),v=g.gb(a)*g.df(u),m=g.pb(u),d=I(d,"render"),b=e,w=1;if(c||d){b=t.c,n=b.canvas;var w=g.gb(a)/a,x=e.canvas.width*w;s=e.canvas.height*w,p=Math.round(Math.sqrt(x*x+s*s)),n.width!=p?n.width=n.height=p:b.clearRect(0,0,p,p),n=(p-x)/2/w,s=(p-s)/2/w,h*=w,y=Math.round(w*(y+n)),f=Math.round(w*(f+s))}x=b.globalAlpha,b.globalAlpha=i.opacity;var S,T=g.gf(u)&&1==i.opacity;T||(r.reverse(),S=[]);var E=i.extent;if(i=void 0!==E){var M=Ut(E),C=Gt(E),P=It(E),E=kt(E);un(o.coordinateToPixelTransform,M),un(o.coordinateToPixelTransform,C),un(o.coordinateToPixelTransform,P),un(o.coordinateToPixelTransform,E);var A=n||0,j=s||0;b.save();var N=b.canvas.width/2,L=b.canvas.height/2;An(b,-c,N,L),b.beginPath(),b.moveTo(w*(M[0]*a+A),w*(M[1]*a+j)),b.lineTo(w*(C[0]*a+A),w*(C[1]*a+j)),b.lineTo(w*(P[0]*a+A),w*(P[1]*a+j)),b.lineTo(w*(E[0]*a+A),w*(E[1]*a+j)),b.clip(),An(b,c,N,L)}for(M=0,C=r.length;M<C;++M){var P=r[M],E=P.ya,L=m.Ia(E,t.o),N=E[0],R=kt(m.Ia(m.Zd(l,N,t.P))),E=Math.round(Ht(L)*h),A=Math.round(Ft(L)*h),j=Math.round((L[0]-R[0])*h/E)*E+y+Math.round((R[0]-l[0])*h),L=Math.round((R[1]-L[3])*h/A)*A+f+Math.round((l[1]-R[1])*h);if(!T){R=[j,L,j+E,L+A],b.save();for(var k=0,D=S.length;k<D;++k){var O=S[k];Xt(R,O)&&(b.beginPath(),b.moveTo(R[0],R[1]),b.lineTo(R[0],R[3]),b.lineTo(R[2],R[3]),b.lineTo(R[2],R[1]),b.moveTo(O[0],O[1]),b.lineTo(O[2],O[1]),b.lineTo(O[2],O[3]),b.lineTo(O[0],O[3]),b.closePath(),b.clip())}S.push(R)}N=g.kf(N,a,u),b.drawImage(P.qb(),v,v,N[0],N[1],j,L,E,A),T||b.restore()}i&&b.restore(),d&&(r=n-y/w+y,a=s-f/w+f,l=dn(t.G,p/2-r,p/2-a,h,-h,-c,-l[0]+r/h,-l[1]-a/h),ps(t,"render",b,o,l)),(c||d)&&e.drawImage(b.canvas,-Math.round(n),-Math.round(s),p/w,p/w),b.globalAlpha=x}}function tp(t){ns.call(this,t),this.c=!1,this.B=-1,this.C=NaN,this.T=Tt(),this.l=this.u=null,this.o=Wo()}function ep(t){_s.call(this,t),this.u=!1,this.T=sn(),this.B=t.u==Bg?1:0}function op(t,e,o){function i(t){var e,o=t.zc();if(o?e=o.call(t,d):(o=r.j)&&(e=o(t,d)),e){Array.isArray(e)||(e=[e]);var o=m,i=v;if(e){var n=!1;if(Array.isArray(e))for(var s=0,p=e.length;s<p;++s)n=Rs(i,t,e[s],o,this.C,this)||n;else n=Rs(i,t,e,o,this.C,this)||n;t=n}else t=!1;this.u=this.u||t,a.jd=a.jd||t}}var r=t.a,n=o.pixelRatio;o=o.viewState.projection;var s=r.g,p=r.get("renderOrder")||null,a=e.f;if(a.jd||a.Rh!=s||a.Qf!=p){a.Ad=null,a.jd=!1;var h,l=r.ga(),u=l.tileGrid,c=e.ya,f=e.l,y="tile-pixels"==f.yb(),d=u.Ga(c[0]);if(y)var g=y=l.gb(),u=wo(u.Va(c[0])),u=[0,0,u[0]*g,u[1]*g];else y=d,u=u.Ia(c),ne(o,f)||(h=!0,e.uf(o));a.jd=!1;var v=new Ps(0,u,y,l.i,r.i),m=Ls(y,n);for(e=e.c,p&&p!==a.Qf&&e.sort(p),l=0,y=e.length;l<y;++l)n=e[l],h&&n.V().lb(f,o),i.call(t,n);As(v),a.Rh=s,a.Qf=p,a.Ad=v,a.resolution=NaN}}function ip(t,e){vn.call(this,0,e),this.g=Wo(),this.b=this.g.canvas,this.b.style.width="100%",this.b.style.height="100%",this.b.className="ol-unselectable",t.insertBefore(this.b,t.childNodes[0]||null),this.a=!0,this.c=sn()}function rp(t,e,o){var i=t.l,r=t.g;if(I(i,e)){var n=o.extent,s=o.pixelRatio,p=o.viewState.rotation,a=o.viewState,h=o.pixelRatio/a.resolution;t=dn(t.c,t.b.width/2,t.b.height/2,h,-h,-a.rotation,-a.center[0],-a.center[1]),i.b(new en(e,new $n(r,s,n,t,p),o,r,null))}}function np(t){this.b=t}function sp(t){this.b=t}function pp(t){this.b=t}function ap(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}function hp(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}function lp(t,e){this.l=t.getUniformLocation(e,"j"),this.o=t.getUniformLocation(e,"i"),this.i=t.getUniformLocation(e,"k"),this.j=t.getUniformLocation(e,"h"),this.b=t.getAttribLocation(e,"e"),this.a=t.getAttribLocation(e,"f"),this.f=t.getAttribLocation(e,"c"),this.g=t.getAttribLocation(e,"g"),this.c=t.getAttribLocation(e,"d")}function up(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function cp(t,e){return t[0]=e[0],t[1]=e[1],t[4]=e[2],t[5]=e[3],t[12]=e[4],t[13]=e[5],t}function fp(t){this.b=void 0!==t?t:[],this.a=_g}function yp(t,e){this.j=t,this.b=e,this.a={},this.c={},this.f={},this.o=this.s=this.i=this.l=null,(this.g=X(rd,"OES_element_index_uint"))&&e.getExtension("OES_element_index_uint"),E(this.j,"webglcontextlost",this.Qn,this),E(this.j,"webglcontextrestored",this.Rn,this)}function dp(t,e,o){var r=t.b,n=o.b,s=String(i(o));if(s in t.a)r.bindBuffer(e,t.a[s].buffer);else{var p=r.createBuffer();r.bindBuffer(e,p);var a;34962==e?a=new Float32Array(n):34963==e&&(a=t.g?new Uint32Array(n):new Uint16Array(n)),r.bufferData(e,a,o.a),t.a[s]={bc:o,buffer:p}}}function gp(t,e){var o=t.b,r=String(i(e)),n=t.a[r];o.isContextLost()||o.deleteBuffer(n.buffer),delete t.a[r]}function vp(t){if(!t.i){var e=t.b,o=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,o);var i=xp(e,1,1),r=e.createRenderbuffer();e.bindRenderbuffer(e.RENDERBUFFER,r),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,1,1),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,i,0),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,r),e.bindTexture(e.TEXTURE_2D,null),e.bindRenderbuffer(e.RENDERBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,null),t.i=o,t.s=i,t.o=r}return t.i}function mp(t,e){var o=String(i(e));if(o in t.c)return t.c[o];var r=t.b,n=r.createShader(e.X());return r.shaderSource(n,e.b),r.compileShader(n),t.c[o]=n}function bp(t,e,o){var r=i(e)+"/"+i(o);if(r in t.f)return t.f[r];var n=t.b,s=n.createProgram();return n.attachShader(s,mp(t,e)),n.attachShader(s,mp(t,o)),n.linkProgram(s),t.f[r]=s}function wp(t,e,o){var i=t.createTexture();return t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),void 0!==e&&t.texParameteri(3553,10242,e),void 0!==o&&t.texParameteri(3553,10243,o),i}function xp(t,e,o){var i=wp(t,void 0,void 0);return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,o,0,t.RGBA,t.UNSIGNED_BYTE,null),i}function Sp(t,e){var o=wp(t,33071,33071);return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e),o}function Tp(t,e){this.B=this.C=void 0,this.o=Dt(e),this.u=[],this.i=[],this.S=void 0,this.c=[],this.f=[],this.za=this.na=void 0,this.a=[],this.G=this.l=null,this.P=void 0,this.Ka=sn(),this.Aa=sn(),this.Qa=this.W=void 0,this.La=sn(),this.ra=up(),this.fa=this.$a=this.Z=void 0,this.oa=[],this.j=[],this.b=[],this.T=null,this.g=[],this.s=[],this.Ib=void 0}function Ep(t,e){var o=t.T,i=t.l,r=t.oa,n=t.j,s=e.b;return function(){if(!s.isContextLost()){var t,p;for(t=0,p=r.length;t<p;++t)s.deleteTexture(r[t]);for(t=0,p=n.length;t<p;++t)s.deleteTexture(n[t])}gp(e,o),gp(e,i)}}function Mp(t,e,o,i){var r,n,s,p,a,h,l=t.C,u=t.B,c=t.S,f=t.na,y=t.za,d=t.P,g=t.W,v=t.Qa,m=t.Z?1:0,b=t.$a,w=t.fa,x=t.Ib,S=Math.cos(b),b=Math.sin(b),T=t.a.length,E=t.b.length;for(r=0;r<o;r+=i)a=e[r]-t.o[0],h=e[r+1]-t.o[1],n=E/8,s=-w*l,p=-w*(c-u),t.b[E++]=a,t.b[E++]=h,t.b[E++]=s*S-p*b,t.b[E++]=s*b+p*S,t.b[E++]=g/y,t.b[E++]=(v+c)/f,t.b[E++]=d,t.b[E++]=m,s=w*(x-l),p=-w*(c-u),t.b[E++]=a,t.b[E++]=h,t.b[E++]=s*S-p*b,t.b[E++]=s*b+p*S,t.b[E++]=(g+x)/y,t.b[E++]=(v+c)/f,t.b[E++]=d,t.b[E++]=m,s=w*(x-l),p=w*u,t.b[E++]=a,t.b[E++]=h,t.b[E++]=s*S-p*b,t.b[E++]=s*b+p*S,t.b[E++]=(g+x)/y,t.b[E++]=v/f,t.b[E++]=d,t.b[E++]=m,s=-w*l,p=w*u,t.b[E++]=a,t.b[E++]=h,t.b[E++]=s*S-p*b,t.b[E++]=s*b+p*S,t.b[E++]=g/y,t.b[E++]=v/f,t.b[E++]=d,t.b[E++]=m,t.a[T++]=n,t.a[T++]=n+1,t.a[T++]=n+2,t.a[T++]=n,t.a[T++]=n+2,t.a[T++]=n+3}function Cp(t,e){var o=e.b;t.u.push(t.a.length),t.i.push(t.a.length),t.T=new fp(t.b),dp(e,34962,t.T),t.l=new fp(t.a),dp(e,34963,t.l);var i={};Pp(t.oa,t.c,i,o),Pp(t.j,t.f,i,o),t.C=void 0,t.B=void 0,t.S=void 0,t.c=null,t.f=null,t.na=void 0,t.za=void 0,t.a=null,t.P=void 0,t.W=void 0,t.Qa=void 0,t.Z=void 0,t.$a=void 0,t.fa=void 0,t.b=null,t.Ib=void 0}function Pp(t,e,o,r){var n,s,p,a=e.length;for(p=0;p<a;++p)n=e[p],s=i(n).toString(),s in o?n=o[s]:(n=Sp(r,n),o[s]=n),t[p]=n}function Ap(t,e,o,r,n,s){var p=o.g?5125:5123;if(o=o.g?4:2,m(r)){var a;for(t=0,r=n.length,a=0;t<r;++t){e.bindTexture(3553,n[t]);var h=s[t];e.drawElements(4,h-a,p,a*o),a=h}}else{a=0;var l,h=0;for(l=n.length;h<l;++h){e.bindTexture(3553,n[h]);for(var u=0<h?s[h-1]:0,c=s[h],f=u;a<t.g.length&&t.g[a]<=c;){var y=i(t.s[a]).toString();void 0!==r[y]?(f!==u&&e.drawElements(4,u-f,p,f*o),u=f=a===t.g.length-1?c:t.g[a+1]):u=a===t.g.length-1?c:t.g[a+1],a++}f!==u&&e.drawElements(4,u-f,p,f*o)}}}function jp(t,e,o){this.c=e,this.i=t,this.f=o,this.a={}}function Np(t,e){var o,i=[];for(o in t.a)i.push(Ep(t.a[o],e));return function(){for(var t,e=i.length,o=0;o<e;o++)t=i[o].apply(this,arguments);return t}}function Lp(t,e){for(var o in t.a)Cp(t.a[o],e)}function Rp(t,e,o,i,r,n,s,p,a,h,l){var u,c,f=tv;for(u=Ug.length-1;0<=u;--u)if(c=t.a[Ug[u]],void 0!==c&&(c=c.Za(e,o,i,r,f,n,s,p,a,h,l)))return c}function kp(t,e,o,i,r,n,s,p){var a=o.b;return a.bindFramebuffer(a.FRAMEBUFFER,vp(o)),void 0!==Rp(t,o,e,i,r,n,s,p,function(){var t=new Uint8Array(4);return a.readPixels(0,0,1,1,a.RGBA,a.UNSIGNED_BYTE,t),0<t[3]},!1)}function Ip(t,e,o,i,r,n,s){this.b=t,this.f=e,this.g=n,this.c=s,this.l=r,this.j=i,this.i=o,this.a=null}function Dp(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}function Op(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}function Fp(t,e){this.g=t.getUniformLocation(e,"f"),this.f=t.getUniformLocation(e,"e"),this.i=t.getUniformLocation(e,"d"),this.c=t.getUniformLocation(e,"g"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function Bp(t,e){Jn.call(this,e),this.f=t,this.W=new fp([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]),this.i=this.tb=null,this.j=void 0,this.s=sn(),this.u=sn(),this.B=up(),this.T=null}function Up(t,e,o){var i=t.f.g;if(void 0===t.j||t.j!=o){e.postRenderFunctions.push(function(t,e,o){t.isContextLost()||(t.deleteFramebuffer(e),t.deleteTexture(o))}.bind(null,i,t.i,t.tb)),e=xp(i,o,o);var r=i.createFramebuffer();i.bindFramebuffer(36160,r),i.framebufferTexture2D(36160,36064,3553,e,0),t.tb=e,t.i=r,t.j=o}else i.bindFramebuffer(36160,t.i)}function Gp(t,e,o,i){if(t=t.a,I(t,e)){var r=i.viewState;t.b(new en(e,new Ip(o,r.center,r.resolution,r.rotation,i.size,i.extent,i.pixelRatio),i,null,o))}}function Hp(t,e){Bp.call(this,t,e),this.o=this.l=this.c=null}function Xp(t,e){var o=e.a();return Sp(t.f.g,o)}function Wp(t,e,o,i,r,n,s,p){e*=n,o*=n,t=t.u,pn(t),fn(t,2*i/e,2*i/o),cn(t,-s),yn(t,p[0]-r[0],p[1]-r[1]),fn(t,(p[2]-p[0])/2,(p[3]-p[1])/2),yn(t,1,1)}function $p(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}function Kp(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}function zp(t,e){this.g=t.getUniformLocation(e,"e"),this.f=t.getUniformLocation(e,"d"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function qp(t,e){Bp.call(this,t,e),this.S=iv,this.Z=rv,this.c=null,this.G=new fp([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]),this.C=this.l=null,this.o=-1,this.P=[0,0]}function Vp(t,e){Bp.call(this,t,e),this.o=!1,this.P=-1,this.S=NaN,this.C=Tt(),this.l=this.c=this.G=null}function Yp(){this.f=0,this.b={},this.g=this.a=null}function Zp(t,e){vn.call(this,0,e),this.b=document.createElement("CANVAS"),this.b.style.width="100%",this.b.style.height="100%",this.b.className="ol-unselectable",t.insertBefore(this.b,t.childNodes[0]||null),this.u=this.C=0,this.B=Wo(),this.o=!0,this.g=ai(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0}),this.c=new yp(this.b,this.g),E(this.b,"webglcontextlost",this.Dm,this),E(this.b,"webglcontextrestored",this.Em,this),this.a=new Yp,this.T=null,this.j=new Hi(function(t){var e=t[1];t=t[2];var o=e[0]-this.T[0],e=e[1]-this.T[1];return 65536*Math.log(t)+Math.sqrt(o*o+e*e)/t}.bind(this),function(t){return t[0].Xa()}),this.G=function(){if(0!==this.j.b.length){Ki(this.j);var t=Xi(this.j);Jp(this,t[0],t[3],t[4])}return!1}.bind(this),this.i=0,Qp(this)}function Jp(t,e,o,i){var r=t.g,n=e.Xa();if(t.a.b.hasOwnProperty(n))t=t.a.get(n),r.bindTexture(3553,t.tb),9729!=t.Og&&(r.texParameteri(3553,10240,9729),t.Og=9729),9729!=t.Qg&&(r.texParameteri(3553,10241,9729),t.Qg=9729);else{var s=r.createTexture();if(r.bindTexture(3553,s),0<i){var p=t.B.canvas,a=t.B;t.C!==o[0]||t.u!==o[1]?(p.width=o[0],p.height=o[1],t.C=o[0],t.u=o[1]):a.clearRect(0,0,o[0],o[1]),a.drawImage(e.qb(),i,i,o[0],o[1],0,0,o[0],o[1]),r.texImage2D(3553,0,6408,6408,5121,p)}else r.texImage2D(3553,0,6408,6408,5121,e.qb());r.texParameteri(3553,10240,9729),r.texParameteri(3553,10241,9729),r.texParameteri(3553,10242,33071),r.texParameteri(3553,10243,33071),t.a.set(n,{tb:s,Og:9729,Qg:9729})}}function _p(t,e,o){var i=t.l;if(I(i,e)){t=t.c;var r=o.viewState;i.b(new en(e,new Ip(t,r.center,r.resolution,r.rotation,o.size,o.extent,o.pixelRatio),o,null,t))}}function Qp(t){t=t.g,t.activeTexture(33984),t.blendFuncSeparate(770,771,1,771),t.disable(2884),t.disable(2929),t.disable(3089),t.disable(2960)}function ta(t){B.call(this);var e=ea(t);this.Jb=void 0!==t.loadTilesWhileAnimating&&t.loadTilesWhileAnimating,this.ac=void 0!==t.loadTilesWhileInteracting&&t.loadTilesWhileInteracting,this.Me=void 0!==t.pixelRatio?t.pixelRatio:Ud,this.Le=e.logos,this.Z=function(){this.i=void 0,this.Jo.call(this,Date.now())}.bind(this),this.La=sn(),this.Je=sn(),this.ub=0,this.f=null,this.Aa=Tt(),this.G=this.P=null,this.a=document.createElement("DIV"),this.a.className="ol-viewport"+($d?" ol-touch":""),this.a.style.position="relative",this.a.style.overflow="hidden",this.a.style.width="100%",this.a.style.height="100%",this.a.style.msTouchAction="none",this.a.style.touchAction="none",this.C=document.createElement("DIV"),this.C.className="ol-overlaycontainer",this.a.appendChild(this.C),this.u=document.createElement("DIV"),this.u.className="ol-overlaycontainer-stopevent",t=["click","dblclick","mousedown","touchstart","mspointerdown",rg,"mousewheel","wheel"];for(var o=0,i=t.length;o<i;++o)E(this.u,t[o],R);
-this.a.appendChild(this.u),this.ra=new Di(this);for(var r in pg)E(this.ra,pg[r],this.Jg,this);this.fa=e.keyboardEventTarget,this.s=null,E(this.a,"wheel",this.Nc,this),E(this.a,"mousewheel",this.Nc,this),this.l=e.controls,this.j=e.interactions,this.o=e.overlays,this.Af={},this.B=new e.Lo(this.a,this),this.W=null,this.S=[],this.Ka=[],this.oa=new zi(this.pk.bind(this),this.Uk.bind(this)),this.Ce={},E(this,U(sv),this.Ck,this),E(this,U(hv),this.Vk,this),E(this,U(pv),this.Rk,this),E(this,U(av),this.Tk,this),this.H(e.values),this.l.forEach(function(t){t.setMap(this)},this),E(this.l,xd,function(t){t.element.setMap(this)},this),E(this.l,Sd,function(t){t.element.setMap(null)},this),this.j.forEach(function(t){t.setMap(this)},this),E(this.j,xd,function(t){t.element.setMap(this)},this),E(this.j,Sd,function(t){t.element.setMap(null)},this),this.o.forEach(this.ig,this),E(this.o,xd,function(t){this.ig(t.element)},this),E(this.o,Sd,function(t){var e=t.element.j;void 0!==e&&delete this.Af[e.toString()],t.element.setMap(null)},this)}function ea(t){var e=null;void 0!==t.keyboardEventTarget&&(e="string"==typeof t.keyboardEventTarget?document.getElementById(t.keyboardEventTarget):t.keyboardEventTarget);var o={},r={};if(void 0===t.logo||"boolean"==typeof t.logo&&t.logo)r["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]="https://openlayers.org/";else{var s=t.logo;"string"==typeof s?r[s]="":s instanceof HTMLElement?r[i(s).toString()]=s:s&&(n("string"==typeof s.href,44),n("string"==typeof s.src,45),r[s.src]=s.href)}s=t.layers instanceof Yr?t.layers:new Yr({layers:t.layers}),o[sv]=s,o[av]=t.target,o[hv]=void 0!==t.view?t.view:new _e;var p,s=vn;void 0!==t.renderer?(Array.isArray(t.renderer)?p=t.renderer:"string"==typeof t.renderer?p=[t.renderer]:n(!1,46),0<=p.indexOf("dom")&&(p=p.concat(nv))):p=nv;var a,h;for(a=0,h=p.length;a<h;++a){var l=p[a];if("canvas"==l){if(Hd){s=ip;break}}else if("webgl"==l&&jd){s=Zp;break}}return void 0!==t.controls?Array.isArray(t.controls)?p=new Oo(t.controls.slice()):(n(t.controls instanceof Oo,47),p=t.controls):p=ri(),void 0!==t.interactions?Array.isArray(t.interactions)?a=new Oo(t.interactions.slice()):(n(t.interactions instanceof Oo,48),a=t.interactions):a=zr(),void 0!==t.overlays?Array.isArray(t.overlays)?t=new Oo(t.overlays.slice()):(n(t.overlays instanceof Oo,49),t=t.overlays):t=new Oo,{controls:p,interactions:a,keyboardEventTarget:e,logos:r,overlays:t,Lo:s,values:o}}function oa(t){B.call(this),this.j=t.id,this.o=void 0===t.insertFirst||t.insertFirst,this.s=void 0===t.stopEvent||t.stopEvent,this.f=document.createElement("DIV"),this.f.className="ol-overlay-container",this.f.style.position="absolute",this.autoPan=void 0!==t.autoPan&&t.autoPan,this.i=void 0!==t.autoPanAnimation?t.autoPanAnimation:{},this.l=void 0!==t.autoPanMargin?t.autoPanMargin:20,this.a={Od:"",fe:"",Be:"",De:"",visible:!0},this.c=null,E(this,U(bv),this.xk,this),E(this,U(wv),this.Hk,this),E(this,U(xv),this.Lk,this),E(this,U(Sv),this.Nk,this),E(this,U(Tv),this.Ok,this),void 0!==t.element&&this.Vh(t.element),this.ci(void 0!==t.offset?t.offset:[0,0]),this.fi(void 0!==t.positioning?t.positioning:gv),void 0!==t.position&&this.tf(t.position)}function ia(t,e){var o=t.getBoundingClientRect(),i=o.left+window.pageXOffset,o=o.top+window.pageYOffset;return[i,o,i+e[0],o+e[1]]}function ra(t,e){t.a.visible!==e&&(t.f.style.display=e?"":"none",t.a.visible=e)}function na(t){var e=t.he(),o=t.Yg();if(void 0!==e&&e.f&&void 0!==o){var o=e.Ca(o),i=e.kb(),e=t.f.style,r=t.Eg(),n=t.Fg(),s=r[0],r=r[1];n==cv||n==dv||n==mv?(""!==t.a.fe&&(t.a.fe=e.left=""),s=Math.round(i[0]-o[0]-s)+"px",t.a.Be!=s&&(t.a.Be=e.right=s)):(""!==t.a.Be&&(t.a.Be=e.right=""),n!=uv&&n!=yv&&n!=vv||(s-=t.f.offsetWidth/2),s=Math.round(o[0]+s)+"px",t.a.fe!=s&&(t.a.fe=e.left=s)),n==lv||n==uv||n==cv?(""!==t.a.De&&(t.a.De=e.top=""),o=Math.round(i[1]-o[1]-r)+"px",t.a.Od!=o&&(t.a.Od=e.bottom=o)):(""!==t.a.Od&&(t.a.Od=e.bottom=""),n!=fv&&n!=yv&&n!=dv||(r-=t.f.offsetHeight/2),o=Math.round(o[1]+r)+"px",t.a.De!=o&&(t.a.De=e.top=o)),ra(t,!0)}else ra(t,!1)}function sa(t){t=t?t:{},this.j=void 0===t.collapsed||t.collapsed,this.l=void 0===t.collapsible||t.collapsible,this.l||(this.j=!1);var e=void 0!==t.className?t.className:"ol-overviewmap",o=void 0!==t.tipLabel?t.tipLabel:"Overview map",i=void 0!==t.collapseLabel?t.collapseLabel:"«";"string"==typeof i?(this.o=document.createElement("span"),this.o.textContent=i):this.o=i,i=void 0!==t.label?t.label:"»","string"==typeof i?(this.u=document.createElement("span"),this.u.textContent=i):this.u=i;var r=this.l&&!this.j?this.o:this.u,i=document.createElement("button");i.setAttribute("type","button"),i.title=o,i.appendChild(r),E(i,"click",this.Vl,this),o=document.createElement("DIV"),o.className="ol-overviewmap-map";var n=this.f=new ta({controls:new Oo,interactions:new Oo,target:o,view:t.view});t.layers&&t.layers.forEach(function(t){n.gg(t)},this),r=document.createElement("DIV"),r.className="ol-overviewmap-box",r.style.boxSizing="border-box",this.C=new oa({position:[0,0],positioning:lv,element:r}),this.f.hg(this.C),r=document.createElement("div"),r.className=e+" ol-unselectable ol-control"+(this.j&&this.l?" ol-collapsed":"")+(this.l?"":" ol-uncollapsible"),r.appendChild(o),r.appendChild(i),qo.call(this,{element:r,render:t.render?t.render:pa,target:t.target})}function pa(){var t=this.a,e=this.f;if(t.f&&e.f){var o=t.kb(),t=t.$().Jc(o),i=e.kb(),o=e.$().Jc(i),r=e.Ca(Ut(t)),n=e.Ca(It(t)),e=Math.abs(r[0]-n[0]),r=Math.abs(r[1]-n[1]),n=i[0],i=i[1];e<.1*n||r<.1*i||e>.75*n||r>.75*i?aa(this):wt(o,t)||(t=this.f,o=this.a.$(),t.$().rb(o.bb()))}ha(this)}function aa(t){var e=t.a;t=t.f;var o=e.kb(),e=e.$().Jc(o),o=t.kb();t=t.$(),$t(e,1/(.1*Math.pow(2,Math.log(7.5)/Math.LN2/2))),t.$e(e,o)}function ha(t){var e=t.a,o=t.f;if(e.f&&o.f){var i,r=e.kb(),n=e.$(),s=o.$(),o=n.Pa(),e=t.C,p=t.C.Td(),a=n.Jc(r),r=s.Ma(),n=kt(a),s=Gt(a);(t=t.a.$().bb())&&(i=[n[0]-t[0],n[1]-t[1]],ut(i,o),st(i,t)),e.tf(i),p&&(p.style.width=Math.abs((n[0]-s[0])/r)+"px",p.style.height=Math.abs((s[1]-n[1])/r)+"px")}}function la(t){t.element.classList.toggle("ol-collapsed"),t.j?$o(t.o,t.u):$o(t.u,t.o),t.j=!t.j;var e=t.f;t.j||e.f||(e.Yc(),aa(t),M(e,"postrender",function(){ha(this)},t))}function ua(t){t=t?t:{};var e=void 0!==t.className?t.className:"ol-scale-line";this.l=document.createElement("DIV"),this.l.className=e+"-inner",this.f=document.createElement("DIV"),this.f.className=e+" ol-unselectable",this.f.appendChild(this.l),this.u=null,this.o=void 0!==t.minWidth?t.minWidth:64,this.j=!1,this.B=void 0,this.C="",qo.call(this,{element:this.f,render:t.render?t.render:ca,target:t.target}),E(this,U(Mv),this.S,this),this.G(t.units||jv)}function ca(t){(t=t.frameState)?this.u=t.viewState:this.u=null,fa(this)}function fa(t){var e=t.u;if(e){var o=e.projection,i=o.dc(),e=o.getPointResolution(e.resolution,e.center)*i,i=t.o*e,o="",r=t.yb();r==Cv?(o=cd.degrees,e/=o,i<o/60?(o="″",e*=3600):i<o?(o="′",e*=60):o="°"):r==Pv?.9144>i?(o="in",e/=.0254):1609.344>i?(o="ft",e/=.3048):(o="mi",e/=1609.344):r==Av?(e/=1852,o="nm"):r==jv?1>i?(o="mm",e*=1e3):1e3>i?o="m":(o="km",e/=1e3):r==Nv?.9144>i?(o="in",e*=39.37):1609.344>i?(o="ft",e/=.30480061):(o="mi",e/=1609.3472):n(!1,33);for(var s,r=3*Math.floor(Math.log(t.o*e)/Math.log(10));;){if(s=Ev[(r%3+3)%3]*Math.pow(10,Math.floor(r/3)),i=Math.round(s/e),isNaN(i))return t.f.style.display="none",void(t.j=!1);if(i>=t.o)break;++r}e=s+" "+o,t.C!=e&&(t.l.innerHTML=e,t.C=e),t.B!=i&&(t.l.style.width=i+"px",t.B=i),t.j||(t.f.style.display="",t.j=!0)}else t.j&&(t.f.style.display="none",t.j=!1)}function ya(t){t=t?t:{},this.f=void 0,this.j=Lv,this.u=[],this.B=this.o=0,this.W=null,this.fa=!1,this.Z=void 0!==t.duration?t.duration:200;var e=void 0!==t.className?t.className:"ol-zoomslider",o=document.createElement("button");o.setAttribute("type","button"),o.className=e+"-thumb ol-unselectable";var i=document.createElement("div");i.className=e+" ol-unselectable ol-control",i.appendChild(o),this.l=new Ti(i),E(this.l,"pointerdown",this.wk,this),E(this.l,"pointermove",this.Hg,this),E(this.l,"pointerup",this.Ig,this),E(i,"click",this.vk,this),E(o,"click",R),qo.call(this,{element:i,render:t.render?t.render:da})}function da(t){if(t.frameState){if(!this.fa){var e=this.element,o=e.offsetWidth,i=e.offsetHeight,r=e.firstElementChild,n=getComputedStyle(r),e=r.offsetWidth+parseFloat(n.marginRight)+parseFloat(n.marginLeft),r=r.offsetHeight+parseFloat(n.marginTop)+parseFloat(n.marginBottom);this.W=[e,r],o>i?(this.j=1,this.B=o-e):(this.j=Lv,this.o=i-r),this.fa=!0}t=t.frameState.viewState.resolution,t!==this.f&&(this.f=t,ga(this,t))}}function ga(t,e){var o;o=1-oo(t.a.$())(e);var i=t.element.firstElementChild;1==t.j?i.style.left=t.B*o+"px":i.style.top=t.o*o+"px"}function va(t,e){return eo(t.a.$())(1-e)}function ma(t){t=t?t:{},this.f=t.extent?t.extent:null;var e=void 0!==t.className?t.className:"ol-zoom-extent",o=void 0!==t.label?t.label:"E",i=void 0!==t.tipLabel?t.tipLabel:"Fit to extent",r=document.createElement("button");r.setAttribute("type","button"),r.title=i,r.appendChild("string"==typeof o?document.createTextNode(o):o),E(r,"click",this.j,this),o=document.createElement("div"),o.className=e+" ol-unselectable ol-control",o.appendChild(r),qo.call(this,{element:o,target:t.target})}function ba(t){B.call(this),t=t?t:{},this.a=null,E(this,U(Ov),this.ul,this),this.rf(void 0!==t.tracking&&t.tracking)}function wa(t){B.call(this),this.a=void 0,this.f="geometry",this.i=null,this.j=void 0,this.c=null,E(this,U(this.f),this.ae,this),void 0!==t&&(t instanceof ce||!t?this.Oa(t):this.H(t))}function xa(t){if("function"!=typeof t){var e;Array.isArray(t)?e=t:(n(t instanceof On,41),e=[t]),t=function(){return e}}return t}function Sa(t,e){return Fv.createElementNS(t,e)}function Ta(t,e){return Ea(t,e,[]).join("")}function Ea(t,e,o){if(t.nodeType==Node.CDATA_SECTION_NODE||t.nodeType==Node.TEXT_NODE)e?o.push(String(t.nodeValue).replace(/(\r\n|\r|\n)/g,"")):o.push(t.nodeValue);else for(t=t.firstChild;t;t=t.nextSibling)Ea(t,e,o);return o}function Ma(t){return t instanceof Document}function Ca(t){return t instanceof Node}function Pa(t){return(new DOMParser).parseFromString(t,"application/xml")}function Aa(t,e){return function(o,i){var r=t.call(e,o,i);void 0!==r&&K(i[i.length-1],r)}}function ja(t,e){return function(o,i){var r=t.call(void 0!==e?e:this,o,i);void 0!==r&&i[i.length-1].push(r)}}function Na(t,e){return function(o,i){var r=t.call(void 0!==e?e:this,o,i);void 0!==r&&(i[i.length-1]=r)}}function La(t){return function(e,o){var i=t.call(this,e,o);if(void 0!==i){var r,n=o[o.length-1],s=e.localName;r=s in n?n[s]:n[s]=[],r.push(i)}}}function Ra(t,e){return function(o,i){var r=t.call(this,o,i);void 0!==r&&(i[i.length-1][void 0!==e?e:o.localName]=r)}}function ka(t,e){return function(o,i,r){t.call(void 0!==e?e:this,o,i,r),r[r.length-1].node.appendChild(o)}}function Ia(t){var e,o;return function(i,r,n){if(!e){e={};var s={};s[i.localName]=t,e[i.namespaceURI]=s,o=Da(i.localName)}Ga(e,o,r,n)}}function Da(t,e){return function(o,i,r){return o=i[i.length-1].node,i=t,void 0===i&&(i=r),r=e,void 0===e&&(r=o.namespaceURI),Sa(r,i)}}function Oa(t,e){for(var o=e.length,i=Array(o),r=0;r<o;++r)i[r]=t[e[r]];return i}function Fa(t,e,o){o=void 0!==o?o:{};var i,r;for(i=0,r=t.length;i<r;++i)o[t[i]]=e;return o}function Ba(t,e,o,i){for(e=e.firstElementChild;e;e=e.nextElementSibling){var r=t[e.namespaceURI];void 0!==r&&(r=r[e.localName])&&r.call(i,e,o)}}function Ua(t,e,o,i,r){return i.push(t),Ba(e,o,i,r),i.pop()}function Ga(t,e,o,i,r,n){for(var s,p,a=(void 0!==r?r:o).length,h=0;h<a;++h)s=o[h],void 0!==s&&(p=e.call(n,s,i,void 0!==r?r[h]:void 0),void 0!==p&&t[p.namespaceURI][p.localName].call(n,p,s,i))}function Ha(t,e,o,i,r,n,s){r.push(t),Ga(e,o,i,r,n,s),r.pop()}function Xa(t,e,o,i){return function(r,n,s){var p=new XMLHttpRequest;p.open("GET","function"==typeof t?t(r,n,s):t,!0),"arraybuffer"==e.X()&&(p.responseType="arraybuffer"),p.onload=function(){if(!p.status||200<=p.status&&300>p.status){var t,r=e.X();"json"==r||"text"==r?t=p.responseText:"xml"==r?(t=p.responseXML)||(t=Pa(p.responseText)):"arraybuffer"==r&&(t=p.response),t?o.call(this,e.Ha(t,{featureProjection:s}),e.Sa(t)):i.call(this)}else i.call(this)}.bind(this),p.send()}}function Wa(t,e){return Xa(t,e,function(t,e){this.uf(e),this.Wh(t)},function(){this.state=3,Ui(this)})}function $a(t,e){return Xa(t,e,function(t){this.Ic(t)},o)}function Ka(){this.j=this.defaultDataProjection=null}function za(t,e,o){var i;return o&&(i={dataProjection:o.dataProjection?o.dataProjection:t.Sa(e),featureProjection:o.featureProjection}),qa(t,i)}function qa(t,e){return hd({dataProjection:t.defaultDataProjection,featureProjection:t.j},e)}function Va(t,e,o){var i,r=o?re(o.featureProjection):null,n=o?re(o.dataProjection):null;if(i=r&&n&&!ne(r,n)?t instanceof ce?(e?t.clone():t).lb(e?r:n,e?n:r):ue(e?t.slice():t,e?r:n,e?n:r):t,e&&o&&o.decimals){var s=Math.pow(10,o.decimals);t=function(t){for(var e=0,o=t.length;e<o;++e)t[e]=Math.round(t[e]*s)/s;return t},Array.isArray(i)?t(i):i.oc(t)}return i}function Ya(){Ka.call(this)}function Za(t){return"string"==typeof t?(t=JSON.parse(t))?t:null:null!==t?t:null}function Ja(t,e,o,i,r,n){var s=NaN,p=NaN,a=(o-e)/i;if(0!==a)if(1==a)s=t[e],p=t[e+1];else if(2==a)s=(1-r)*t[e]+r*t[e+i],p=(1-r)*t[e+1]+r*t[e+i+1];else{var h,p=t[e],a=t[e+1],l=0,s=[0];for(h=e+i;h<o;h+=i){var u=t[h],f=t[h+1],l=l+Math.sqrt((u-p)*(u-p)+(f-a)*(f-a));s.push(l),p=u,a=f}for(o=r*l,a=0,l=s.length,h=!1;a<l;)r=a+(l-a>>1),p=+H(s[r],o),0>p?a=r+1:(l=r,h=!p);r=h?a:~a,0>r?(o=(o-s[-r-2])/(s[-r-1]-s[-r-2]),e+=(-r-2)*i,s=c(t[e],t[e+i],o),p=c(t[e+1],t[e+i+1],o)):(s=t[e+r*i],p=t[e+r*i+1])}return n?(n[0]=s,n[1]=p,n):[s,p]}function _a(t,e,o,i,r,n){if(o==e)return null;if(r<t[e+i-1])return n?(o=t.slice(e,e+i),o[i-1]=r,o):null;if(t[o-1]<r)return n?(o=t.slice(o-i,o),o[i-1]=r,o):null;if(r==t[e+i-1])return t.slice(e,e+i);for(e/=i,o/=i;e<o;)n=e+o>>1,r<t[(n+1)*i-1]?o=n:e=n+1;if(o=t[e*i-1],r==o)return t.slice((e-1)*i,(e-1)*i+i);n=(r-o)/(t[(e+1)*i-1]-o),o=[];var s;for(s=0;s<i-1;++s)o.push(c(t[(e-1)*i+s],t[e*i+s],n));return o.push(r),o}function Qa(t,e,o,i,r,n){var s=0;if(n)return _a(t,s,e[e.length-1],o,i,r);if(i<t[o-1])return r?(t=t.slice(0,o),t[o-1]=i,t):null;if(t[t.length-1]<i)return r?(t=t.slice(t.length-o),t[o-1]=i,t):null;for(r=0,n=e.length;r<n;++r){var p=e[r];if(s!=p){if(i<t[s+o-1])break;if(i<=t[p-1])return _a(t,s,p,o,i,!1);s=p}}return null}function th(t,e){ye.call(this),this.c=null,this.C=this.B=this.l=-1,this.ma(t,e)}function eh(t){return t.l!=t.g&&(t.c=t.vg(.5,t.c),t.l=t.g),t.c}function oh(t,e){ye.call(this),this.c=[],this.l=this.C=-1,this.ma(t,e)}function ih(t){var e=[],o=t.A,i=0,r=t.c;t=t.a;var n,s;for(n=0,s=r.length;n<s;++n){var p=r[n],i=Ja(o,i,p,t,.5);K(e,i),i=p}return e}function rh(t,e){var o,i,r=t.ia,n=[],s=[];for(o=0,i=e.length;o<i;++o){var p=e[o];0===o&&(r=p.ia),K(n,p.ka()),s.push(n.length)}t.aa(r,n,s)}function nh(t,e){ye.call(this),this.ma(t,e)}function sh(t,e){ye.call(this),this.c=[],this.C=-1,this.B=null,this.P=this.G=this.S=-1,this.l=null,this.ma(t,e)}function ph(t){if(t.C!=t.g){var e,o,i=t.A,r=t.c,n=t.a,s=0,p=[];for(e=0,o=r.length;e<o;++e){var a=r[e],s=Ct(i,s,a[0],n);p.push((s[0]+s[2])/2,(s[1]+s[3])/2),s=a[a.length-1]}for(i=ah(t),r=t.c,n=t.a,e=0,o=[],a=0,s=r.length;a<s;++a){var h=r[a];o=Be(i,e,h,n,p,2*a,o),e=h[h.length-1]}t.B=o,t.C=t.g}return t.B}function ah(t){if(t.P!=t.g){var e,o=t.A;t:{e=t.c;var i,r;for(i=0,r=e.length;i<r;++i)if(!We(o,e[i],t.a,void 0)){e=!1;break t}e=!0}e?t.l=o:(t.l=o.slice(),t.l.length=Ke(t.l,t.c,t.a)),t.P=t.g}return t.l}function hh(t,e,o,i){ge(t,e,o),t.c=i,t.v()}function lh(t,e){var o,i,r,n=t.ia,s=[],p=[];for(o=0,i=e.length;o<i;++o){var a=e[o];0===o&&(n=a.ia);var h=s.length;r=a.Eb();var l,u;for(l=0,u=r.length;l<u;++l)r[l]+=h;K(s,a.ka()),p.push(r)}hh(t,n,s,p)}function uh(t){t=t?t:{},Ka.call(this),this.b=t.geometryName}function ch(t,e){if(!t)return null;var o;if("number"==typeof t.x&&"number"==typeof t.y)o="Point";else if(t.points)o="MultiPoint";else if(t.paths)o=1===t.paths.length?"LineString":"MultiLineString";else if(t.rings){var i=t.rings,r=fh(t),n=[];o=[];var s,p;for(s=0,p=i.length;s<p;++s){var a=$(i[s]);Xe(a,0,a.length,r.length)?n.push([i[s]]):o.push(i[s])}for(;o.length;){for(i=o.shift(),r=!1,s=n.length-1;0<=s;s--)if(wt(new Re(n[s][0]).D(),new Re(i).D())){n[s].push(i),r=!0;break}r||n.push([i.reverse()])}t=hd({},t),1===n.length?(o="Polygon",t.rings=n[0]):(o="MultiPolygon",t.rings=n)}return Va((0,Uv[o])(t),!1,e)}function fh(t){var e="XY";return!0===t.hasZ&&!0===t.hasM?e="XYZM":!0===t.hasZ?e="XYZ":!0===t.hasM&&(e="XYM"),e}function yh(t){return t=t.ia,{hasZ:"XYZ"===t||"XYZM"===t,hasM:"XYM"===t||"XYZM"===t}}function dh(t,e){return(0,Gv[t.X()])(Va(t,!0,e),e)}function gh(t){this.Hb=t}function vh(t){this.Hb=t}function mh(t,e,o){this.Hb=t,this.b=e,this.a=o}function bh(t,e){mh.call(this,"And",t,e)}function wh(t,e,o){this.Hb="BBOX",this.geometryName=t,this.extent=e,this.srsName=o}function xh(t,e){this.Hb=t,this.b=e}function Sh(t,e,o,i){xh.call(this,t,e),this.g=o,this.a=i}function Th(t,e,o){Sh.call(this,"PropertyIsEqualTo",t,e,o)}function Eh(t,e){Sh.call(this,"PropertyIsGreaterThan",t,e)}function Mh(t,e){Sh.call(this,"PropertyIsGreaterThanOrEqualTo",t,e)}function Ch(t,e,o,i){this.Hb=t,this.geometryName=e||"the_geom",this.geometry=o,this.srsName=i}function Ph(t,e,o){Ch.call(this,"Intersects",t,e,o)}function Ah(t,e,o){xh.call(this,"PropertyIsBetween",t),this.a=e,this.g=o}function jh(t,e,o,i,r,n){xh.call(this,"PropertyIsLike",t),this.f=e,this.i=void 0!==o?o:"*",this.c=void 0!==i?i:".",this.g=void 0!==r?r:"!",this.a=n}function Nh(t){xh.call(this,"PropertyIsNull",t)}function Lh(t,e){Sh.call(this,"PropertyIsLessThan",t,e)}function Rh(t,e){Sh.call(this,"PropertyIsLessThanOrEqualTo",t,e)}function kh(t){this.Hb="Not",this.condition=t}function Ih(t,e,o){Sh.call(this,"PropertyIsNotEqualTo",t,e,o)}function Dh(t,e){mh.call(this,"Or",t,e)}function Oh(t,e,o){Ch.call(this,"Within",t,e,o)}function Fh(t,e){return new bh(t,e)}function Bh(t,e,o){return new wh(t,e,o)}function Uh(t){ce.call(this),this.f=t?t:null,Xh(this)}function Gh(t){var e,o,i=[];for(e=0,o=t.length;e<o;++e)i.push(t[e].clone());return i}function Hh(t){var e,o;if(t.f)for(e=0,o=t.f.length;e<o;++e)C(t.f[e],"change",t.v,t)}function Xh(t){var e,o;if(t.f)for(e=0,o=t.f.length;e<o;++e)E(t.f[e],"change",t.v,t)}function Wh(t){t=t?t:{},Ka.call(this),this.defaultDataProjection=re(t.defaultDataProjection?t.defaultDataProjection:"EPSG:4326"),t.featureProjection&&(this.j=re(t.featureProjection)),this.b=t.geometryName}function $h(t,e){return t?Va((0,Hv[t.type])(t),!1,e):null}function Kh(t,e){return(0,Xv[t.X()])(Va(t,!0,e),e)}function zh(){this.f=new XMLSerializer,Ka.call(this)}function qh(t,e,o){return t=Vh(t,e,o),0<t.length?t[0]:null}function Vh(t,e,o){var i=[];for(e=e.firstChild;e;e=e.nextSibling)e.nodeType==Node.ELEMENT_NODE&&K(i,t.kc(e,o));return i}function Yh(t){t=t?t:{},this.featureType=t.featureType,this.featureNS=t.featureNS,this.srsName=t.srsName,this.schemaLocation="",this.b={},this.b["http://www.opengis.net/gml"]={featureMember:Na(Yh.prototype.xd),featureMembers:Na(Yh.prototype.xd)},zh.call(this)}function Zh(t){return t=Ta(t,!1),Jh(t)}function Jh(t){if(t=/^\s*(true|1)|(false|0)\s*$/.exec(t))return void 0!==t[1]||!1}function _h(t){return t=Ta(t,!1),t=Date.parse(t),isNaN(t)?void 0:t/1e3}function Qh(t){return t=Ta(t,!1),tl(t)}function tl(t){if(t=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(t))return parseFloat(t[1])}function el(t){return t=Ta(t,!1),ol(t)}function ol(t){if(t=/^\s*(\d+)\s*$/.exec(t))return parseInt(t[1],10)}function il(t){return Ta(t,!1).trim()}function rl(t,e){pl(t,e?"1":"0")}function nl(t,e){t.appendChild(Fv.createTextNode(e.toPrecision()))}function sl(t,e){t.appendChild(Fv.createTextNode(e.toString()))}function pl(t,e){t.appendChild(Fv.createTextNode(e))}function al(t){t=t?t:{},Yh.call(this,t),this.s=void 0!==t.surface&&t.surface,this.i=void 0!==t.curve&&t.curve,this.l=void 0===t.multiCurve||t.multiCurve,this.o=void 0===t.multiSurface||t.multiSurface,this.schemaLocation=t.schemaLocation?t.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"}function hl(t,e,o){o=o[o.length-1].srsName,e=e.Y();for(var i,r=e.length,n=Array(r),s=0;s<r;++s){i=e[s];var p=s,a="enu";o&&(a=re(o).b),n[p]="en"===a.substr(0,2)?i[0]+" "+i[1]:i[1]+" "+i[0]}pl(t,n.join(" "))}function ll(t){t=t?t:{},Yh.call(this,t),this.b["http://www.opengis.net/gml"].featureMember=ja(Yh.prototype.xd),this.schemaLocation=t.schemaLocation?t.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"}function ul(t){t=t?t:{},zh.call(this),this.defaultDataProjection=re("EPSG:4326"),this.b=t.readExtensions}function cl(t,e,o){return t.push(parseFloat(e.getAttribute("lon")),parseFloat(e.getAttribute("lat"))),"ele"in o?(t.push(o.ele),delete o.ele):t.push(0),"time"in o?(t.push(o.time),delete o.time):t.push(0),t}function fl(t,e){var o=e[e.length-1],i=t.getAttribute("href");null!==i&&(o.link=i),Ba(tm,t,e)}function yl(t,e){e[e.length-1].extensionsNode_=t}function dl(t,e){var o=e[0],i=Ua({flatCoordinates:[]},em,t,e);if(i){var r=i.flatCoordinates;delete i.flatCoordinates;var n=new th(null);return n.aa("XYZM",r),Va(n,!1,o),o=new wa(n),o.H(i),o}}function gl(t,e){var o=e[0],i=Ua({flatCoordinates:[],ends:[]},im,t,e);if(i){var r=i.flatCoordinates;delete i.flatCoordinates;var n=i.ends;delete i.ends;var s=new oh(null);return s.aa("XYZM",r,n),Va(s,!1,o),o=new wa(s),o.H(i),o}}function vl(t,e){var o=e[0],i=Ua({},sm,t,e);if(i){var r=cl([],t,i),r=new Ie(r,"XYZM");return Va(r,!1,o),o=new wa(r),o.H(i),o}}function ml(t,e){e||(e=[]);for(var o=0,i=e.length;o<i;++o){var r=e[o];if(t.b){var n=r.get("extensionsNode_")||null;t.b(r,n)}r.set("extensionsNode_",void 0)}}function bl(t,e,o){t.setAttribute("href",e),e=o[o.length-1].properties,Ha({node:t},am,Bv,[e.linkText,e.linkType],o,pm)}function wl(t,e,o){var i=o[o.length-1],r=i.node.namespaceURI,n=i.properties;switch(t.setAttributeNS(null,"lat",e[1]),t.setAttributeNS(null,"lon",e[0]),i.geometryLayout){case"XYZM":0!==e[3]&&(n.time=e[3]);case"XYZ":0!==e[2]&&(n.ele=e[2]);break;case"XYM":0!==e[2]&&(n.time=e[2])}e="rtept"==t.nodeName?um[r]:gm[r],i=Oa(n,e),Ha({node:t,properties:n},vm,Bv,i,o,e)}function xl(t,e){var o=t.V();if(o&&(o=mm[o.X()]))return Sa(e[e.length-1].node.namespaceURI,o)}function Sl(){Ka.call(this)}function Tl(t){return"string"==typeof t?t:""}function El(t){t=t?t:{},Ka.call(this),this.defaultDataProjection=re("EPSG:4326"),this.b=t.altitudeMode?t.altitudeMode:Cm}function Ml(t,e,o,i,r,n){k.call(this),this.l=null,this.a=t?t:new Image,null!==i&&(this.a.crossOrigin=i),this.c=n?document.createElement("CANVAS"):null,this.j=n,this.i=null,this.f=r,this.g=o,this.o=e,this.s=!1,this.f==Ag&&Cl(this)}function Cl(t){var e=Wo(1,1);try{e.drawImage(t.a,0,0),e.getImageData(0,0,1,1)}catch(o){t.s=!0}}function Pl(t){t=t||{},this.f=void 0!==t.anchor?t.anchor:[.5,.5],this.j=null,this.a=void 0!==t.anchorOrigin?t.anchorOrigin:Nm,this.B=void 0!==t.anchorXUnits?t.anchorXUnits:Pm,this.G=void 0!==t.anchorYUnits?t.anchorYUnits:Pm,this.na=void 0!==t.crossOrigin?t.crossOrigin:null;var e=void 0!==t.img?t.img:null,o=void 0!==t.imgSize?t.imgSize:null,r=t.src;n(!(void 0!==r&&e),4),n(!e||e&&o,5),void 0!==r&&0!==r.length||!e||(r=e.src||i(e).toString()),n(void 0!==r&&0<r.length,6);var s=void 0!==t.src?Cg:Ag;this.i=void 0!==t.color?Uo(t.color):null;var p=this.na,a=this.i,h=Sg.get(r,p,a);h||(h=new Ml(e,r,o,p,s,a),Sg.set(r,p,a,h)),this.b=h,this.S=void 0!==t.offset?t.offset:[0,0],this.g=void 0!==t.offsetOrigin?t.offsetOrigin:Nm,this.s=null,this.C=void 0!==t.size?t.size:null,jn.call(this,{opacity:void 0!==t.opacity?t.opacity:1,rotation:void 0!==t.rotation?t.rotation:0,scale:void 0!==t.scale?t.scale:1,snapToPixel:void 0===t.snapToPixel||t.snapToPixel,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView})}function Al(t){t=t||{},this.g=t.font,this.j=t.rotation,this.s=t.rotateWithView,this.a=t.scale,this.T=t.text,this.l=t.textAlign,this.o=t.textBaseline,this.b=void 0!==t.fill?t.fill:new Rn({color:"#333"}),this.f=void 0!==t.stroke?t.stroke:null,this.c=void 0!==t.offsetX?t.offsetX:0,this.i=void 0!==t.offsetY?t.offsetY:0}function jl(t){t=t?t:{},zh.call(this),this.defaultDataProjection=re("EPSG:4326");var e;t.defaultStyle?e=t.defaultStyle:(e=Rm)||(km=[255,255,255,1],Im=new Rn({color:km}),Dm=[20,2],Fm=Om="pixels",Bm=[64,64],Um="https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png",Gm=.5,Hm=new Pl({anchor:Dm,anchorOrigin:Am,anchorXUnits:Om,anchorYUnits:Fm,crossOrigin:"anonymous",rotation:0,scale:Gm,size:Bm,src:Um}),Xm="NO_IMAGE",Wm=new In({color:km,width:1}),$m=new In({color:[51,51,51,1],width:2}),Km=new Al({font:"bold 16px Helvetica",fill:Im,stroke:$m,scale:.8}),zm=new On({fill:Im,image:Hm,text:Km,stroke:Wm,zIndex:0}),e=Rm=[zm]),this.g=e,this.c=void 0===t.extractStyles||t.extractStyles,this.l=void 0===t.writeStyles||t.writeStyles,this.b={},this.i=void 0===t.showPointNames||t.showPointNames}function Nl(t,e){var o,i=[0,0],r="start";if(t.a){o=t.a.md(),null===o&&(o=Bm);var n=t.a.c;isNaN(n)&&(n=Gm),2==o.length&&(i[0]=n*o[0]/2,i[1]=-n*o[1]/2,r="left")}return null!==t.Fa()?(n=t.Fa(),o=n.clone(),o.Yh(n.g||Km.g),o.Ah(n.a||Km.a),o.Xh(n.b||Km.b),o.gi(n.f||$m)):o=Km.clone(),o.hi(e),o.di(i[0]),o.ei(i[1]),o.ii(r),new On({text:o})}function Ll(t,e,o,i,r){return function(){var n=r,s="";if(n&&this.V()&&(n="Point"===this.V().X()),n&&(s=this.get("name"),n=n&&s),t)return n?(n=Nl(t[0],s),t.concat(n)):t;if(e){var p=Rl(e,o,i);return n?(n=Nl(p[0],s),p.concat(n)):p}return n?(n=Nl(o[0],s),o.concat(n)):o}}function Rl(t,e,o){return Array.isArray(t)?t:"string"==typeof t?(!(t in o)&&"#"+t in o&&(t="#"+t),Rl(o[t],e,o)):e}function kl(t){if(t=Ta(t,!1),t=/^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(t))return t=t[1],[parseInt(t.substr(6,2),16),parseInt(t.substr(4,2),16),parseInt(t.substr(2,2),16),parseInt(t.substr(0,2),16)/255]}function Il(t){t=Ta(t,!1);for(var e,o=[],i=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i;e=i.exec(t);)o.push(parseFloat(e[1]),parseFloat(e[2]),e[3]?parseFloat(e[3]):0),t=t.substr(e[0].length);return""!==t?void 0:o}function Dl(t){var e=Ta(t,!1).trim();return t.baseURI?new URL(e,t.baseURI).href:e}function Ol(t){return Qh(t)}function Fl(t,e){return Ua(null,Qm,t,e)}function Bl(t,e){var o=Ua({A:[],si:[]},eb,t,e);if(o){var i,r,n=o.A,o=o.si;for(i=0,r=Math.min(n.length,o.length);i<r;++i)n[4*i+3]=o[i];return o=new th(null),o.aa("XYZM",n),o}}function Ul(t,e){var o=Ua({},_m,t,e),i=Ua(null,ob,t,e);if(i){var r=new th(null);return r.aa("XYZ",i),r.H(o),r}}function Gl(t,e){var o=Ua({},_m,t,e),i=Ua(null,ob,t,e);if(i){var r=new ze(null);return r.aa("XYZ",i,[i.length]),r.H(o),r}}function Hl(t,e){var o=Ua([],ab,t,e);if(!o)return null;if(0===o.length)return new Uh(o);var i,r,s,p,a=!0,h=o[0].X();for(s=1,p=o.length;s<p;++s)if(r=o[s],r.X()!=h){a=!1;break}if(a)if("Point"==h){for(i=o[0],a=i.ia,h=i.ka(),s=1,p=o.length;s<p;++s)r=o[s],K(h,r.ka());i=new nh(null),i.aa(a,h),Kl(i,o)}else"LineString"==h?(i=new oh(null),rh(i,o),Kl(i,o)):"Polygon"==h?(i=new sh(null),lh(i,o),Kl(i,o)):"GeometryCollection"==h?i=new Uh(o):n(!1,37);else i=new Uh(o);return i}function Xl(t,e){var o=Ua({},_m,t,e),i=Ua(null,ob,t,e);if(i){var r=new Ie(null);return r.aa("XYZ",i),r.H(o),r}}function Wl(t,e){var o=Ua({},_m,t,e),i=Ua([null],tb,t,e);if(i&&i[0]){var r,n,s=new ze(null),p=i[0],a=[p.length];for(r=1,n=i.length;r<n;++r)K(p,i[r]),a.push(p.length);return s.aa("XYZ",p,a),s.H(o),s}}function $l(t,e){var o=Ua({},vb,t,e);if(!o)return null;var i="fillStyle"in o?o.fillStyle:Im,r=o.fill;void 0===r||r||(i=null),r="imageStyle"in o?o.imageStyle:Hm,r==Xm&&(r=void 0);var n="textStyle"in o?o.textStyle:Km,s="strokeStyle"in o?o.strokeStyle:Wm,o=o.outline;return void 0===o||o||(s=null),[new On({fill:i,image:r,stroke:s,text:n,zIndex:void 0})]}function Kl(t,e){var o,i,r,n,s=e.length,p=Array(e.length),a=Array(e.length);for(r=n=!1,i=0;i<s;++i)o=e[i],p[i]=o.get("extrude"),a[i]=o.get("altitudeMode"),r=r||void 0!==p[i],n=n||a[i];r&&t.set("extrude",p),n&&t.set("altitudeMode",a)}function zl(t,e){Ba(Jm,t,e)}function ql(t,e){var o;for(o=e.firstChild;o;o=o.nextSibling)if(o.nodeType==Node.ELEMENT_NODE){var i=Vl(t,o);if(i)return i}}function Vl(t,e){var o;for(o=e.firstElementChild;o;o=o.nextElementSibling)if(X(Vm,o.namespaceURI)&&"name"==o.localName)return il(o);for(o=e.firstElementChild;o;o=o.nextElementSibling){var i=o.localName;if(X(Vm,o.namespaceURI)&&("Document"==i||"Folder"==i||"Placemark"==i||"kml"==i)&&(i=Vl(t,o)))return i}}function Yl(t,e){var o,i=[];for(o=e.firstChild;o;o=o.nextSibling)o.nodeType==Node.ELEMENT_NODE&&K(i,Zl(t,o));return i}function Zl(t,e){var o,i=[];for(o=e.firstElementChild;o;o=o.nextElementSibling)if(X(Vm,o.namespaceURI)&&"NetworkLink"==o.localName){var r=Ua({},lb,o,[]);i.push(r)}for(o=e.firstElementChild;o;o=o.nextElementSibling)r=o.localName,!X(Vm,o.namespaceURI)||"Document"!=r&&"Folder"!=r&&"kml"!=r||K(i,Zl(t,o));return i}function Jl(t,e){var o,i=Uo(e),i=[255*(4==i.length?i[3]:1),i[2],i[1],i[0]];for(o=0;4>o;++o){var r=parseInt(i[o],10).toString(16);i[o]=1==r.length?"0"+r:r}pl(t,i.join(""))}function _l(t,e,o){t={node:t};var i,r,s=e.X();"GeometryCollection"==s?(i=e.cf(),r=su):"MultiPoint"==s?(i=e.je(),r=Wb):"MultiLineString"==s?(i=e.od(),r=$b):"MultiPolygon"==s?(i=e.Wd(),r=zb):n(!1,39),Ha(t,Rb,r,i,o)}function Ql(t,e,o){Ha({node:t},Lb,Kb,[e],o)}function tu(t,e,o){var i={node:t};e.a&&t.setAttribute("id",e.a),t=e.N();var r=e.zc();r&&(r=r.call(e,0))&&(r=Array.isArray(r)?r[0]:r,this.l&&(t.Style=r),(r=r.Fa())&&(t.name=r.Fa())),r=kb[o[o.length-1].node.namespaceURI],t=Oa(t,r),Ha(i,Ib,Bv,t,o,r),t=o[0],(e=e.V())&&(e=Va(e,!0,t)),Ha(i,Ib,su,[e],o)}function eu(t,e,o){var i=e.ka();t={node:t},t.layout=e.ia,t.stride=e.sa(),Ha(t,Db,Hb,[i],o)}function ou(t,e,o){e=e.Vd();var i=e.shift();t={node:t},Ha(t,Ob,Xb,e,o),Ha(t,Ob,qb,[i],o)}function iu(t,e){nl(t,Math.round(e*e*1e6)/1e6)}function ru(t,e,o){return Sa(qm[0],"gx:"+o)}function nu(t,e){return Sa(e[e.length-1].node.namespaceURI,"Placemark")}function su(t,e){if(t)return Sa(e[e.length-1].node.namespaceURI,Sb[t.X()])}function pu(t,e,o,i){this.g=t,this.b=e,this.c=o,this.f=i}function au(t){Ka.call(this),t=t?t:{},this.defaultDataProjection=new Yt({code:"",units:"tile-pixels"}),this.b=t.featureClass?t.featureClass:pu,this.g=t.geometryName?t.geometryName:"geometry",this.a=t.layerName?t.layerName:"layer",this.f=t.layers?t.layers:null}function hu(t,e,o){for(var i=0,r=0,n=t.length;r<n;++r){var s,p,a=t[r];for(s=0,p=a.length;s<p;++s){var h=a[s];e.push(h.x,h.y)}i+=2*s,o.push(i)}}function lu(){
-zh.call(this),this.defaultDataProjection=re("EPSG:4326")}function uu(t,e){e[e.length-1].Ed[t.getAttribute("k")]=t.getAttribute("v")}function cu(t){return t.getAttributeNS("http://www.w3.org/1999/xlink","href")}function fu(){}function yu(){}function du(t,e,o,i){var r;r=void 0!==i?i:[];for(var n=i=0;n<e;){var s=t[n++];for(r[i++]=t[n++],r[i++]=s,s=2;s<o;++s)r[i++]=t[n++]}r.length=i}function gu(t){t=t?t:{},Ka.call(this),this.defaultDataProjection=re("EPSG:4326"),this.b=t.factor?t.factor:1e5,this.a=t.geometryLayout?t.geometryLayout:"XY"}function vu(t,e,o){var i,r=Array(e);for(i=0;i<e;++i)r[i]=0;var n,s;for(n=0,s=t.length;n<s;)for(i=0;i<e;++i,++n){var p=t[n],a=p-r[i];r[i]=p,t[n]=a}return bu(t,o?o:1e5)}function mu(t,e,o){var i,r=Array(e);for(i=0;i<e;++i)r[i]=0;t=wu(t,o?o:1e5);var n;for(o=0,n=t.length;o<n;)for(i=0;i<e;++i,++o)r[i]+=t[o],t[o]=r[i];return t}function bu(t,e){var o,i,r=e?e:1e5;for(o=0,i=t.length;o<i;++o)t[o]=Math.round(t[o]*r);for(r=0,o=t.length;r<o;++r)i=t[r],t[r]=0>i?~(i<<1):i<<1;for(r="",o=0,i=t.length;o<i;++o){for(var n,s=t[o],p="";32<=s;)n=(32|31&s)+63,p+=String.fromCharCode(n),s>>=5;p+=String.fromCharCode(s+63),r+=p}return r}function wu(t,e){var o,i,r=e?e:1e5,n=[],s=0,p=0;for(o=0,i=t.length;o<i;++o){var a=t.charCodeAt(o)-63,s=s|(31&a)<<p;32>a?(n.push(s),p=s=0):p+=5}for(s=0,p=n.length;s<p;++s)o=n[s],n[s]=1&o?~(o>>1):o>>1;for(s=0,p=n.length;s<p;++s)n[s]/=r;return n}function xu(t){t=t?t:{},Ka.call(this),this.defaultDataProjection=re(t.defaultDataProjection?t.defaultDataProjection:"EPSG:4326")}function Su(t,e){var o,i,r,n,s=[];for(r=0,n=t.length;r<n;++r)o=t[r],0<r&&s.pop(),i=0<=o?e[o]:e[~o].slice().reverse(),s.push.apply(s,i);for(o=0,i=s.length;o<i;++o)s[o]=s[o].slice();return s}function Tu(t,e,o,i,r){t=t.geometries;var n,s,p=[];for(n=0,s=t.length;n<s;++n)p[n]=Eu(t[n],e,o,i,r);return p}function Eu(t,e,o,i,r){var n=t.type,s=vw[n];return e="Point"===n||"MultiPoint"===n?s(t,o,i):s(t,e),o=new wa,o.Oa(Va(e,!1,r)),void 0!==t.id&&o.Wb(t.id),t.properties&&o.H(t.properties),o}function Mu(t,e,o){t[0]=t[0]*e[0]+o[0],t[1]=t[1]*e[1]+o[1]}function Cu(t){t=t?t:{},this.i=t.featureType,this.g=t.featureNS,this.b=t.gmlFormat?t.gmlFormat:new al,this.c=t.schemaLocation?t.schemaLocation:"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd",zh.call(this)}function Pu(t,e){for(var o=e.firstChild;o;o=o.nextSibling)if(o.nodeType==Node.ELEMENT_NODE)return Au(t,o)}function Au(t,e){var o={},i=ol(e.getAttribute("numberOfFeatures"));return o.numberOfFeatures=i,Ua(o,mw,e,[],t.b)}function ju(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return Ua({},Sw,t,[])}function Nu(t,e){var o=Sa("http://www.opengis.net/ogc","Filter"),i=Sa("http://www.opengis.net/ogc","FeatureId");o.appendChild(i),i.setAttribute("fid",e),t.appendChild(o)}function Lu(t,e,o){t={node:t};var i=e.b;Ha(t,Mw,Da(i.Hb),[i],o),e=e.a,Ha(t,Mw,Da(e.Hb),[e],o)}function Ru(t,e){void 0!==e.a&&t.setAttribute("matchCase",e.a.toString()),Iu(t,e.b),Du(t,""+e.g)}function ku(t,e,o){t=Sa("http://www.opengis.net/ogc",t),pl(t,o),e.appendChild(t)}function Iu(t,e){ku("PropertyName",t,e)}function Du(t,e){ku("Literal",t,e)}function Ou(t){t=t?t:{},Ka.call(this),this.b=void 0!==t.splitCollection&&t.splitCollection}function Fu(t){return t=t.Y(),0===t.length?"":t[0]+" "+t[1]}function Bu(t){t=t.Y();for(var e=[],o=0,i=t.length;o<i;++o)e.push(t[o][0]+" "+t[o][1]);return e.join(",")}function Uu(t){var e=[];t=t.Vd();for(var o=0,i=t.length;o<i;++o)e.push("("+Bu(t[o])+")");return e.join(",")}function Gu(t){var e=t.X();return t=(0,Cw[e])(t),e=e.toUpperCase(),0===t.length?e+" EMPTY":e+"("+t+")"}function Hu(t){this.a=t,this.b=-1}function Xu(t){var e=t.a.charAt(++t.b),o={position:t.b,value:e};if("("==e)o.type=2;else if(","==e)o.type=5;else if(")"==e)o.type=3;else if("0"<=e&&"9">=e||"."==e||"-"==e){o.type=4;var i,e=t.b,r=!1,n=!1;do"."==i?r=!0:"e"!=i&&"E"!=i||(n=!0),i=t.a.charAt(++t.b);while("0"<=i&&"9">=i||"."==i&&(void 0===r||!r)||!n&&("e"==i||"E"==i)||n&&("-"==i||"+"==i));t=parseFloat(t.a.substring(e,t.b--)),o.value=t}else if("a"<=e&&"z">=e||"A"<=e&&"Z">=e){o.type=1,e=t.b;do i=t.a.charAt(++t.b);while("a"<=i&&"z">=i||"A"<=i&&"Z">=i);t=t.a.substring(e,t.b--).toUpperCase(),o.value=t}else{if(" "==e||"\t"==e||"\r"==e||"\n"==e)return Xu(t);if(""!==e)throw Error("Unexpected character: "+e);o.type=6}return o}function Wu(t){this.a=t}function $u(t,e){var o=t.b.type==e;return o&&(t.b=Xu(t.a)),o}function Ku(t){var e=t.b;if($u(t,1)){var o=e.value;if("GEOMETRYCOLLECTION"==o){t:{if($u(t,2)){e=[];do e.push(Ku(t));while($u(t,5));if($u(t,3)){t=e;break t}}else if(Yu(t)){t=[];break t}throw Error(Zu(t))}return new Uh(t)}var i=Aw[o],e=Pw[o];if(!i||!e)throw Error("Invalid geometry type: "+o);return t=i.call(t),new e(t)}throw Error(Zu(t))}function zu(t){for(var e=[],o=0;2>o;++o){var i=t.b;if(!$u(t,4))break;e.push(i.value)}if(2==e.length)return e;throw Error(Zu(t))}function qu(t){for(var e=[zu(t)];$u(t,5);)e.push(zu(t));return e}function Vu(t){for(var e=[t.Bf()];$u(t,5);)e.push(t.Bf());return e}function Yu(t){var e=1==t.b.type&&"EMPTY"==t.b.value;return e&&(t.b=Xu(t.a)),e}function Zu(t){return"Unexpected `"+t.b.value+"` at position "+t.b.position+" in `"+t.a.a+"`"}function Ju(){this.version=void 0}function _u(t,e){return Ua({},Kw,t,e)}function Qu(t,e){return Ua({},Hw,t,e)}function tc(t,e){var o=_u(t,e);if(o){var i=[ol(t.getAttribute("width")),ol(t.getAttribute("height"))];return o.size=i,o}}function ec(t,e){return Ua([],zw,t,e)}function oc(t){t=t?t:{},this.g="http://mapserver.gis.umn.edu/mapserver",this.b=new ll,this.c=t.layers?t.layers:null,zh.call(this)}function ic(){this.g=new yu}function rc(t){var e=il(t).split(" ");if(e&&2==e.length)return t=+e[0],e=+e[1],isNaN(t)||isNaN(e)?void 0:[t,e]}function nc(t){B.call(this),t=t||{},this.a=null,this.c=ae,this.f=void 0,E(this,U(lx),this.Al,this),E(this,U(cx),this.Bl,this),void 0!==t.projection&&this.Vg(re(t.projection)),void 0!==t.trackingOptions&&this.ji(t.trackingOptions),this.ge(void 0!==t.tracking&&t.tracking)}function sc(t,e,o){ye.call(this),this.Sf(t,e?e:0,o)}function pc(t){var e=t.A[t.a]-t.A[0];return t=t.A[t.a+1]-t.A[1],e*e+t*t}function ac(t,e,o){for(var i,r,n,s,p,h=[],l=t(0),u=t(1),c=e(l),f=e(u),y=[u,l],d=[f,c],g=[1,0],v={},m=1e5;0<--m&&0<g.length;)n=g.pop(),l=y.pop(),c=d.pop(),u=n.toString(),u in v||(h.push(c[0],c[1]),v[u]=!0),s=g.pop(),u=y.pop(),f=d.pop(),p=(n+s)/2,i=t(p),r=e(i),a(r[0],r[1],c[0],c[1],f[0],f[1])<o?(h.push(f[0],f[1]),u=s.toString(),v[u]=!0):(g.push(s,p,p,n),d.push(f,r,r,c),y.push(u,i,i,l));return h}function hc(t,e,o,i,r){var n=re("EPSG:4326");return ac(function(i){return[t,e+(o-e)*i]},se(n,i),r)}function lc(t,e,o,i,r){var n=re("EPSG:4326");return ac(function(i){return[e+(o-e)*i,t]},se(n,i),r)}function uc(t){t=t||{},this.c=this.l=null,this.g=this.i=1/0,this.f=this.j=-(1/0),this.C=this.u=1/0,this.G=this.B=-(1/0),this.za=void 0!==t.targetSize?t.targetSize:100,this.S=void 0!==t.maxLines?t.maxLines:100,this.b=[],this.a=[],this.na=void 0!==t.strokeStyle?t.strokeStyle:yx,this.T=this.o=void 0,this.s=null,this.setMap(void 0!==t.map?t.map:null)}function cc(t,e,o,i,r,n,s){var p=s;return e=hc(e,o,i,t.c,r),p=void 0!==t.b[p]?t.b[p]:new th(null),p.aa("XY",e),Xt(p.D(),n)&&(t.b[s++]=p),s}function fc(t,e,o,i,r){var n=r;return e=lc(e,t.f,t.g,t.c,o),n=void 0!==t.a[n]?t.a[n]:new th(null),n.aa("XY",e),Xt(n.D(),i)&&(t.a[r++]=n),r}function yc(t,e,o,i,r){Bi.call(this,t,e),this.o=o,this.g=new Image,null!==i&&(this.g.crossOrigin=i),this.j=null,this.s=r}function dc(t){t.j.forEach(P),t.j=null}function gc(t){t=t?t:{},Zi.call(this,{handleEvent:zt}),this.i=t.formatConstructors?t.formatConstructors:[],this.l=t.projection?re(t.projection):null,this.a=null,this.target=t.target?t.target:null}function vc(t){t=t.dataTransfer.files;var e,o,i;for(e=0,o=t.length;e<o;++e){i=t.item(e);var r=new FileReader;r.addEventListener("load",this.j.bind(this,i)),r.readAsText(i)}}function mc(t){t.stopPropagation(),t.preventDefault(),t.dataTransfer.dropEffect="copy"}function bc(t,e,o,i){L.call(this,t),this.features=o,this.file=e,this.projection=i}function wc(t){t=t?t:{},ur.call(this,{handleDownEvent:Tc,handleDragEvent:xc,handleUpEvent:Sc}),this.o=t.condition?t.condition:pr,this.a=this.i=void 0,this.j=0,this.u=void 0!==t.duration?t.duration:400}function xc(t){if(hr(t)){var e=t.map,o=e.kb(),i=t.pixel;if(t=i[0]-o[0]/2,i=o[1]/2-i[1],o=Math.atan2(i,t),t=Math.sqrt(t*t+i*i),i=e.$(),void 0!==this.i){var r=o-this.i;Ji(e,i,i.Pa()-r)}this.i=o,void 0!==this.a&&(o=this.a*(i.Ma()/t),Qi(e,i,o)),void 0!==this.a&&(this.j=this.a/t),this.a=t}}function Sc(t){if(!hr(t))return!0;t=t.map;var e=t.$();ro(e,-1);var o=this.j-1,i=e.Pa(),i=e.constrainRotation(i,0);Ji(t,e,i,void 0,void 0);var i=e.Ma(),r=this.u,i=e.constrainResolution(i,0,o);return Qi(t,e,i,void 0,r),this.j=0,!1}function Tc(t){return!(!hr(t)||!this.o(t))&&(ro(t.map.$(),1),this.a=this.i=void 0,!0)}function Ec(){return[[-(1/0),-(1/0),1/0,1/0]]}function Mc(t){this.b=Zb(t),this.a={}}function Cc(t,e,o){var r=t.a[i(o)];Pt([r.ba,r.ea,r.da,r.ha],e)||(t.remove(o),t.Da(e,o))}function Pc(t){return t.b.all().map(function(t){return t.value})}function Ac(t,e){return t.b.search({ba:e[0],ea:e[1],da:e[2],ha:e[3]}).map(function(t){return t.value})}function jc(t,e,o,i){return Nc(Ac(t,e),o,i)}function Nc(t,e,o){for(var i,r=0,n=t.length;r<n&&!(i=e.call(o,t[r]));r++);return i}function Lc(t){t=t||{},Hs.call(this,{attributions:t.attributions,logo:t.logo,projection:void 0,state:"ready",wrapX:void 0===t.wrapX||t.wrapX}),this.W=o,this.P=t.format,this.Aa=void 0==t.overlaps||t.overlaps,this.Z=t.url,void 0!==t.loader?this.W=t.loader:void 0!==this.Z&&(n(this.P,7),this.W=$a(this.Z,this.P)),this.ac=void 0!==t.strategy?t.strategy:Ec;var e=void 0===t.useSpatialIndex||t.useSpatialIndex;this.a=e?new Mc:null,this.ra=new Mc,this.i={},this.l={},this.o={},this.s={},this.c=null;var i,r;t.features instanceof Oo?(i=t.features,r=i.a):Array.isArray(t.features)&&(r=t.features),e||void 0!==i||(i=new Oo(r)),void 0!==r&&Ic(this,r),void 0!==i&&Dc(this,i)}function Rc(t,e,o){t.s[e]=[E(o,"change",t.uh,t),E(o,"propertychange",t.uh,t)]}function kc(t,e,o){var i=!0,r=o.a;return void 0!==r?r.toString()in t.l?i=!1:t.l[r.toString()]=o:(n(!(e in t.o),30),t.o[e]=o),i}function Ic(t,e){var o,r,n,s,p=[],a=[],h=[];for(r=0,n=e.length;r<n;r++)s=e[r],o=i(s).toString(),kc(t,o,s)&&a.push(s);for(r=0,n=a.length;r<n;r++){s=a[r],o=i(s).toString(),Rc(t,o,s);var l=s.V();l?(o=l.D(),p.push(o),h.push(s)):t.i[o]=s}for(t.a&&t.a.load(p,h),r=0,n=a.length;r<n;r++)t.b(new Bc(vx,a[r]))}function Dc(t,e){var o=!1;E(t,vx,function(t){o||(o=!0,e.push(t.feature),o=!1)}),E(t,wx,function(t){o||(o=!0,e.remove(t.feature),o=!1)}),E(e,xd,function(t){o||(o=!0,this.cb(t.element),o=!1)},t),E(e,Sd,function(t){o||(o=!0,this.mb(t.element),o=!1)},t),t.c=e}function Oc(t,e,o){t.Kb([e[0],e[1],e[0],e[1]],function(t){if(t.V().jb(e))return o.call(void 0,t)})}function Fc(t,e){for(var o in t.l)if(t.l[o]===e){delete t.l[o];break}}function Bc(t,e){L.call(this,t),this.feature=e}function Uc(t){ur.call(this,{handleDownEvent:Xc,handleEvent:Hc,handleUpEvent:Wc}),this.fa=null,this.u=!1,this.ub=t.source?t.source:null,this.Aa=t.features?t.features:null,this.tj=t.snapTolerance?t.snapTolerance:12,this.W=t.type,this.i=Zc(this.W),this.Ka=t.minPoints?t.minPoints:this.i===Tx?3:2,this.oa=t.maxPoints?t.maxPoints:1/0,this.ac=t.finishCondition?t.finishCondition:zt;var e=t.geometryFunction;if(!e)if("Circle"===this.W)e=function(t,e){var o=e?e:new sc([NaN,NaN]);return o.Sf(t[0],Math.sqrt(ct(t[0],t[1]))),o};else{var o,i=this.i;i===xx?o=Ie:i===Sx?o=th:i===Tx&&(o=ze),e=function(t,e){var r=e;return r?i===Tx?r.ma([t[0].concat([t[0][0]])]):r.ma(t):r=new o(t),r}}this.G=e,this.P=this.B=this.a=this.S=this.j=this.o=null,this.Jb=t.clickTolerance?t.clickTolerance*t.clickTolerance:36,this.ra=new Hn({source:new Lc({useSpatialIndex:!1,wrapX:!!t.wrapX&&t.wrapX}),style:t.style?t.style:Gc()}),this.La=t.geometryName,this.qj=t.condition?t.condition:sr,this.Le=t.freehand?zt:t.freehandCondition?t.freehandCondition:pr,E(this,U(hg),this.ri,this)}function Gc(){var t=Un();return function(e){return t[e.V().X()]}}function Hc(t){this.u=this.i!==xx&&this.Le(t);var e=!this.u;return this.u&&t.type===og&&null!==this.j?(qc(this,t),e=!1):t.type===ig?e=$c(this,t):t.type===eg&&(e=!1),fr.call(this,t)&&e}function Xc(t){return this.u?(this.fa=t.pixel,this.o||zc(this,t),!0):!!this.qj(t)&&(this.fa=t.pixel,!0)}function Wc(t){var e=this.fa,o=t.pixel,i=e[0]-o[0],e=e[1]-o[1],i=i*i+e*e,e=!0;return(this.u?i>this.Jb:i<=this.Jb)&&($c(this,t),this.o?this.u||this.i===Ex?this.ld():Kc(this,t)?this.ac(t)&&this.ld():qc(this,t):(zc(this,t),this.i===xx&&this.ld()),e=!1),e}function $c(t,e){if(t.o){var o,i=e.coordinate,r=t.j.V();t.i===xx?o=t.a:t.i===Tx?(o=t.a[0],o=o[o.length-1],Kc(t,e)&&(i=t.o.slice())):(o=t.a,o=o[o.length-1]),o[0]=i[0],o[1]=i[1],t.G(t.a,r),t.S&&t.S.V().ma(i),r instanceof ze&&t.i!==Tx?(t.B||(t.B=new wa(new th(null))),r=r.Bg(0),i=t.B.V(),i.aa(r.ia,r.ka())):t.P&&(i=t.B.V(),i.ma(t.P)),Yc(t)}else i=e.coordinate.slice(),t.S?t.S.V().ma(i):(t.S=new wa(new Ie(i)),Yc(t));return!0}function Kc(t,e){var o=!1;if(t.j){var i=!1,r=[t.o];if(t.i===Sx?i=t.a.length>t.Ka:t.i===Tx&&(i=t.a[0].length>t.Ka,r=[t.a[0][0],t.a[0][t.a[0].length-2]]),i)for(var i=e.map,n=0,s=r.length;n<s;n++){var p=r[n],a=i.Ca(p),h=e.pixel,o=h[0]-a[0],a=h[1]-a[1];if(o=Math.sqrt(o*o+a*a)<=(t.u?1:t.tj)){t.o=p;break}}}return o}function zc(t,e){var o=e.coordinate;t.o=o,t.i===xx?t.a=o.slice():t.i===Tx?(t.a=[[o.slice(),o.slice()]],t.P=t.a[0]):(t.a=[o.slice(),o.slice()],t.i===Ex&&(t.P=t.a)),t.P&&(t.B=new wa(new th(t.P))),o=t.G(t.a),t.j=new wa,t.La&&t.j.Dc(t.La),t.j.Oa(o),Yc(t),t.b(new Jc(Mx,t.j))}function qc(t,e){var o,i,r=e.coordinate,n=t.j.V();t.i===Sx?(t.o=r.slice(),i=t.a,i.length>=t.oa&&(t.u?i.pop():o=!0),i.push(r.slice()),t.G(i,n)):t.i===Tx&&(i=t.a[0],i.length>=t.oa&&(t.u?i.pop():o=!0),i.push(r.slice()),o&&(t.o=i[0]),t.G(t.a,n)),Yc(t),o&&t.ld()}function Vc(t){t.o=null;var e=t.j;return e&&(t.j=null,t.S=null,t.B=null,t.ra.ga().clear(!0)),e}function Yc(t){var e=[];t.j&&e.push(t.j),t.B&&e.push(t.B),t.S&&e.push(t.S),t=t.ra.ga(),t.clear(!0),t.Ic(e)}function Zc(t){var e;return"Point"===t||"MultiPoint"===t?e=xx:"LineString"===t||"MultiLineString"===t?e=Sx:"Polygon"===t||"MultiPolygon"===t?e=Tx:"Circle"===t&&(e=Ex),e}function Jc(t,e){L.call(this,t),this.feature=e}function _c(t){this.a=this.j=null,this.B=!1,this.G=this.o=null,t||(t={}),t.extent&&this.i(t.extent),ur.call(this,{handleDownEvent:tf,handleDragEvent:ef,handleEvent:Qc,handleUpEvent:of}),this.u=new Hn({source:new Lc({useSpatialIndex:!1,wrapX:!!t.wrapX}),style:t.boxStyle?t.boxStyle:rf(),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.S=new Hn({source:new Lc({useSpatialIndex:!1,wrapX:!!t.wrapX}),style:t.pointerStyle?t.pointerStyle:nf(),updateWhileAnimating:!0,updateWhileInteracting:!0})}function Qc(t){if(!(t instanceof Ii))return!0;if(t.type==ig&&!this.C){var e=t.pixel,o=t.map,i=af(this,e,o);i||(i=o.Ja(e)),hf(this,i)}return fr.call(this,t),!1}function tf(t){function e(t){var e=null,o=null;return t[0]==r[0]?e=r[2]:t[0]==r[2]&&(e=r[0]),t[1]==r[1]?o=r[3]:t[1]==r[3]&&(o=r[1]),null!==e&&null!==o?[e,o]:null}var o=t.pixel,i=t.map,r=this.D();return(t=af(this,o,i))&&r?(o=t[0]==r[0]||t[0]==r[2]?t[0]:null,i=t[1]==r[1]||t[1]==r[3]?t[1]:null,null!==o&&null!==i?this.a=sf(e(t)):null!==o?this.a=pf(e([o,r[1]]),e([o,r[3]])):null!==i&&(this.a=pf(e([r[0],i]),e([r[2],i])))):(t=i.Ja(o),this.i([t[0],t[1],t[0],t[1]]),this.a=sf(t)),!0}function ef(t){return this.a&&(t=t.coordinate,this.i(this.a(t)),hf(this,t)),!0}function of(){this.a=null;var t=this.D();return t&&0!==Rt(t)||this.i(null),!1}function rf(){var t=Un();return function(){return t.Polygon}}function nf(){var t=Un();return function(){return t.Point}}function sf(t){return function(e){return dt([t,e])}}function pf(t,e){return t[0]==e[0]?function(o){return dt([t,[o[0],e[1]]])}:t[1]==e[1]?function(o){return dt([t,[e[0],o[1]]])}:null}function af(t,e,o){function i(t,e){return ft(r,t)-ft(r,e)}var r=o.Ja(e),n=t.D();if(n){n=[[[n[0],n[1]],[n[0],n[3]]],[[n[0],n[3]],[n[2],n[3]]],[[n[2],n[3]],[n[2],n[1]]],[[n[2],n[1]],[n[0],n[1]]]],n.sort(i);var n=n[0],s=pt(r,n),p=o.Ca(s);if(10>=Math.sqrt(ct(e,p)))return e=o.Ca(n[0]),o=o.Ca(n[1]),e=ct(p,e),o=ct(p,o),t.B=10>=Math.sqrt(Math.min(e,o)),t.B&&(s=e>o?n[1]:n[0]),s}return null}function hf(t,e){var o=t.G;o?o.V().ma(e):(o=new wa(new Ie(e)),t.G=o,t.S.ga().cb(o))}function lf(t){L.call(this,Px),this.b=t}function uf(t){ur.call(this,{handleDownEvent:vf,handleDragEvent:mf,handleEvent:wf,handleUpEvent:bf}),this.ub=t.condition?t.condition:lr,this.Aa=function(t){return sr(t)&&nr(t)},this.La=t.deleteCondition?t.deleteCondition:this.Aa,this.Ka=this.a=null,this.ra=[0,0],this.B=this.P=!1,this.i=new Mc,this.S=void 0!==t.pixelTolerance?t.pixelTolerance:10,this.o=this.oa=!1,this.j=[],this.G=new Hn({source:new Lc({useSpatialIndex:!1,wrapX:!!t.wrapX}),style:t.style?t.style:Tf(),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.fa={Point:this.mm,LineString:this.bh,LinearRing:this.bh,Polygon:this.nm,MultiPoint:this.km,MultiLineString:this.jm,MultiPolygon:this.lm,GeometryCollection:this.im},this.u=t.features,this.u.forEach(this.wf,this),E(this.u,xd,this.gm,this),E(this.u,Sd,this.hm,this),this.W=null}function cf(t,e){t.B||(t.B=!0,t.b(new Ef(Ax,t.u,e)))}function ff(t,e){yf(t,e),t.a&&0===t.u.yc()&&(t.G.ga().mb(t.a),t.a=null),C(e,"change",t.ah,t)}function yf(t,e){var o=t.i,i=[];o.forEach(function(t){e===t.feature&&i.push(t)});for(var r=i.length-1;0<=r;--r)o.remove(i[r])}function df(t,e){var o=t.a;o?o.V().ma(e):(o=new wa(new Ie(e)),t.a=o,t.G.ga().cb(o))}function gf(t,e){return t.index-e.index}function vf(t){if(!this.ub(t))return!1;xf(this,t.pixel,t.map),this.j.length=0,this.B=!1;var e=this.a;if(e){var o=[],e=e.V().Y(),r=dt([e]),r=Ac(this.i,r),n={};r.sort(gf);for(var s=0,p=r.length;s<p;++s){var a=r[s],h=a.pa,l=i(a.feature),u=a.depth;u&&(l+="-"+u.join("-")),n[l]||(n[l]=Array(2)),lt(h[0],e)&&!n[l][0]?(this.j.push([a,0]),n[l][0]=a):lt(h[1],e)&&!n[l][1]?("LineString"!==a.geometry.X()&&"MultiLineString"!==a.geometry.X()||!n[l][0]||0!==n[l][0].index)&&(this.j.push([a,1]),n[l][1]=a):i(h)in this.Ka&&!n[l][0]&&!n[l][1]&&o.push([a,e])}for(o.length&&cf(this,t),t=o.length-1;0<=t;--t)this.$k.apply(this,o[t])}return!!this.a}function mf(t){this.P=!1,cf(this,t),t=t.coordinate;for(var e=0,o=this.j.length;e<o;++e){for(var i=this.j[e],r=i[0],n=r.depth,s=r.geometry,p=s.Y(),a=r.pa,i=i[1];t.length<s.sa();)t.push(0);switch(s.X()){case"Point":p=t,a[0]=a[1]=t;break;case"MultiPoint":p[r.index]=t,a[0]=a[1]=t;break;case"LineString":p[r.index+i]=t,a[i]=t;break;case"MultiLineString":p[n[0]][r.index+i]=t,a[i]=t;break;case"Polygon":p[n[0]][r.index+i]=t,a[i]=t;break;case"MultiPolygon":p[n[1]][n[0]][r.index+i]=t,a[i]=t}r=s,this.o=!0,r.ma(p),this.o=!1}df(this,t)}function bf(t){for(var e,o=this.j.length-1;0<=o;--o)e=this.j[o][0],Cc(this.i,dt(e.pa),e);return this.B&&(this.b(new Ef(jx,this.u,t)),this.B=!1),!1}function wf(t){if(!(t instanceof Ii))return!0;this.W=t;var e;return Qe(t.map.$())[1]||t.type!=ig||this.C||(this.ra=t.pixel,xf(this,t.pixel,t.map)),this.a&&this.La(t)&&(e=!(t.type!=Qd||!this.P)||this.Qh()),t.type==Qd&&(this.P=!1),fr.call(this,t)&&!e}function xf(t,e,o){function r(t,e){return ft(n,t.pa)-ft(n,e.pa)}var n=o.Ja(e),s=o.Ja([e[0]-t.S,e[1]+t.S]),p=o.Ja([e[0]+t.S,e[1]-t.S]),s=dt([s,p]),s=Ac(t.i,s);if(0<s.length){s.sort(r);var p=s[0].pa,a=pt(n,p),h=o.Ca(a);if(Math.sqrt(ct(e,h))<=t.S){for(e=o.Ca(p[0]),o=o.Ca(p[1]),e=ct(h,e),o=ct(h,o),t.oa=Math.sqrt(Math.min(e,o))<=t.S,t.oa&&(a=e>o?p[1]:p[0]),df(t,a),o={},o[i(p)]=!0,e=1,h=s.length;e<h&&(a=s[e].pa,lt(p[0],a[0])&&lt(p[1],a[1])||lt(p[0],a[1])&&lt(p[1],a[0]));++e)o[i(a)]=!0;return void(t.Ka=o)}}t.a&&(t.G.ga().mb(t.a),t.a=null)}function Sf(t,e,o,i,r){jc(t.i,e.D(),function(t){t.geometry===e&&(void 0===i||void 0===t.depth||V(t.depth,i))&&t.index>o&&(t.index+=r)})}function Tf(){var t=Un();return function(){return t.Point}}function Ef(t,e,o){L.call(this,t),this.features=e,this.mapBrowserEvent=o}function Mf(t){if(Zi.call(this,{handleEvent:Cf}),t=t?t:{},this.C=t.condition?t.condition:nr,this.u=t.addCondition?t.addCondition:qt,this.B=t.removeCondition?t.removeCondition:qt,this.G=t.toggleCondition?t.toggleCondition:pr,this.l=!!t.multi&&t.multi,this.j=t.filter?t.filter:zt,this.i=new Hn({source:new Lc({useSpatialIndex:!1,features:t.features,wrapX:t.wrapX}),style:t.style?t.style:Pf(),updateWhileAnimating:!0,updateWhileInteracting:!0}),t.layers)if("function"==typeof t.layers)t=t.layers;else{var e=t.layers;t=function(t){return X(e,t)}}else t=zt;this.o=t,this.a={},t=this.i.ga().c,E(t,xd,this.om,this),E(t,Sd,this.rm,this)}function Cf(t){if(!this.C(t))return!0;var e=this.u(t),o=this.B(t),r=this.G(t),n=!e&&!o&&!r,s=t.map,p=this.i.ga().c,a=[],h=[];if(n){for(g(this.a),s.Sd(t.pixel,function(t,e){if(this.j(t,e)){h.push(t);var o=i(t);return this.a[o]=e,!this.l}},this,this.o),n=p.yc()-1;0<=n;--n){var s=p.item(n),l=h.indexOf(s);-1<l?h.splice(l,1):(p.remove(s),a.push(s))}0!==h.length&&p.qf(h)}else{for(s.Sd(t.pixel,function(t,n){if(this.j(t,n)){if(!e&&!r||X(p.a,t))(o||r)&&X(p.a,t)&&(a.push(t),s=i(t),delete this.a[s]);else{h.push(t);var s=i(t);this.a[s]=n}return!this.l}},this,this.o),n=a.length-1;0<=n;--n)p.remove(a[n]);p.qf(h)}return(0<h.length||0<a.length)&&this.b(new Af(Nx,h,a,t)),rr(t)}function Pf(){var t=Un();return K(t.Polygon,t.LineString),K(t.GeometryCollection,t.LineString),function(e){return e.V()?t[e.V().X()]:null}}function Af(t,e,o,i){L.call(this,t),this.selected=e,this.deselected=o,this.mapBrowserEvent=i}function jf(t){ur.call(this,{handleEvent:Nf,handleDownEvent:zt,handleUpEvent:Lf}),t=t?t:{},this.o=t.source?t.source:null,this.ra=void 0===t.vertex||t.vertex,this.P=void 0===t.edge||t.edge,this.j=t.features?t.features:null,this.oa=[],this.B={},this.G={},this.W={},this.u={},this.S=null,this.i=void 0!==t.pixelTolerance?t.pixelTolerance:10,this.Ka=Rf.bind(this),this.a=new Mc,this.fa={Point:this.xm,LineString:this.fh,LinearRing:this.fh,Polygon:this.ym,MultiPoint:this.vm,MultiLineString:this.um,MultiPolygon:this.wm,GeometryCollection:this.tm}}function Nf(t){var e,o,i=t.pixel,r=t.coordinate;e=t.map;var n=e.Ja([i[0]-this.i,i[1]+this.i]);o=e.Ja([i[0]+this.i,i[1]-this.i]);var s,n=dt([n,o]),p=Ac(this.a,n),n=!1,a=null;return o=null,0<p.length&&(this.S=r,p.sort(this.Ka),p=p[0].pa,this.ra&&!this.P?(r=e.Ca(p[0]),s=e.Ca(p[1]),r=ct(i,r),i=ct(i,s),s=Math.sqrt(Math.min(r,i)),(s=s<=this.i)&&(n=!0,a=r>i?p[1]:p[0],o=e.Ca(a))):this.P&&(a=pt(r,p),o=e.Ca(a),Math.sqrt(ct(i,o))<=this.i&&(n=!0,this.ra&&(r=e.Ca(p[0]),s=e.Ca(p[1]),r=ct(o,r),i=ct(o,s),s=Math.sqrt(Math.min(r,i)),s=s<=this.i)))&&(a=r>i?p[1]:p[0],o=e.Ca(a)),n&&(o=[Math.round(o[0]),Math.round(o[1])])),e=a,n&&(t.coordinate=e.slice(0,2),t.pixel=o),fr.call(this,t)}function Lf(){var t=v(this.u);return t.length&&(t.forEach(this.pi,this),this.u={}),!1}function Rf(t,e){return ft(this.S,t.pa)-ft(this.S,e.pa)}function kf(t){if(ur.call(this,{handleDownEvent:If,handleDragEvent:Of,handleMoveEvent:Ff,handleUpEvent:Df}),this.o=void 0,this.a=null,this.i=void 0!==t.features?t.features:null,t.layers)if("function"==typeof t.layers)t=t.layers;else{var e=t.layers;t=function(t){return X(e,t)}}else t=zt;this.u=t,this.j=null}function If(t){return this.j=Bf(this,t.pixel,t.map),!(this.a||!this.j)&&(this.a=t.coordinate,Ff.call(this,t),this.b(new Uf(Lx,this.i,t.coordinate)),!0)}function Df(t){return!!this.a&&(this.a=null,Ff.call(this,t),this.b(new Uf(kx,this.i,t.coordinate)),!0)}function Of(t){if(this.a){t=t.coordinate;var e=t[0]-this.a[0],o=t[1]-this.a[1];if(this.i)this.i.forEach(function(t){var i=t.V();i.Pc(e,o),t.Oa(i)});else if(this.j){var i=this.j.V();i.Pc(e,o),this.j.Oa(i)}this.a=t,this.b(new Uf(Rx,this.i,t))}}function Ff(t){var e=t.map.uc();Bf(this,t.pixel,t.map)?(this.o=e.style.cursor,e.style.cursor=this.a?"-webkit-grabbing":"-webkit-grab",e.style.cursor=this.a?"grabbing":"grab"):(e.style.cursor=void 0!==this.o?this.o:"",this.o=void 0)}function Bf(t,e,o){var i=null;return e=o.Sd(e,function(t){return t},t,t.u),t.i&&X(t.i.a,e)&&(i=e),i}function Uf(t,e,o){L.call(this,t),this.features=e,this.coordinate=o}function Gf(t){t=t?t:{};var e=hd({},t);delete e.gradient,delete e.radius,delete e.blur,delete e.shadow,delete e.weight,Hn.call(this,e),this.f=null,this.W=void 0!==t.shadow?t.shadow:250,this.P=void 0,this.c=null,E(this,U(Ox),this.zk,this),this.$h(t.gradient?t.gradient:Ix),this.Th(void 0!==t.blur?t.blur:15),this.ih(void 0!==t.radius?t.radius:8),E(this,U(Dx),this.lf,this),E(this,U(Fx),this.lf,this),this.lf();var o,i=t.weight?t.weight:"weight";o="string"==typeof i?function(t){return t.get(i)}:i,this.l(function(t){t=o(t),t=void 0!==t?s(t,0,1):1;var e=255*t|0,i=this.c[e];return i||(i=[new On({image:new Pl({opacity:t,src:this.P})})],this.c[e]=i),i}.bind(this)),this.set("renderOrder",null),E(this,"render",this.Qk,this)}function Hf(t,e,o,r){function n(){delete window[p],s.parentNode.removeChild(s)}var s=document.createElement("script"),p="olc_"+i(e);s.async=!0,s.src=t+(-1==t.indexOf("?")?"?":"&")+(r||"callback")+"="+p;var a=setTimeout(function(){n(),o&&o()},1e4);window[p]=function(t){clearTimeout(a),n(),e(t)},document.getElementsByTagName("head")[0].appendChild(s)}function Xf(t,e,o,i,r,n,p,a,h,l,u){if(Bi.call(this,r,0),this.G=void 0!==u&&u,this.B=p,this.C=a,this.u=null,this.c=e,this.o=i,this.s=n?n:r,this.g=[],this.Xc=null,this.j=0,n=i.Ia(this.s),a=this.o.D(),r=this.c.D(),n=a?Bt(n,a):n,0===Rt(n))this.state=4;else if((a=t.D())&&(r=r?Bt(r,a):a),i=i.Ga(this.s[0]),i=Is(t,o,Dt(n),i),!isFinite(i)||0>=i)this.state=4;else if(this.T=new Fs(t,o,n,r,i*(void 0!==l?l:.5)),0===this.T.f.length)this.state=4;else if(this.j=e.wc(i),o=Us(this.T),r&&(t.a?(o[1]=s(o[1],r[1],r[3]),o[3]=s(o[3],r[1],r[3])):o=Bt(o,r)),Rt(o)){for(t=Po(e,o,this.j),e=t.ba;e<=t.da;e++)for(o=t.ea;o<=t.ha;o++)(l=h(this.j,e,o,p))&&this.g.push(l);0===this.g.length&&(this.state=4)}else this.state=4}function Wf(t,e){var o=/\{z\}/g,i=/\{x\}/g,r=/\{y\}/g,s=/\{-y\}/g;return function(p){if(p)return t.replace(o,p[0].toString()).replace(i,p[1].toString()).replace(r,function(){return(-p[2]-1).toString()}).replace(s,function(){var t=e.a?e.a[p[0]]:null;return n(t,55),(t.ha-t.ea+1+p[2]).toString()})}}function $f(t,e){for(var o=t.length,i=Array(o),r=0;r<o;++r)i[r]=Wf(t[r],e);return Kf(i)}function Kf(t){return 1===t.length?t[0]:function(e,o,i){if(e)return t[u((e[1]<<e[0])+e[2],t.length)](e,o,i)}}function zf(){}function qf(t){var e=[],o=/\{([a-z])-([a-z])\}/.exec(t);if(o){var i,r=o[2].charCodeAt(0);for(i=o[1].charCodeAt(0);i<=r;++i)e.push(t.replace(o[0],String.fromCharCode(i)));return e}if(o=o=/\{(\d+)-(\d+)\}/.exec(t)){for(r=parseInt(o[2],10),i=parseInt(o[1],10);i<=r;i++)e.push(t.replace(o[0],i.toString()));return e}return e.push(t),e}function Vf(t){Yp.call(this),this.c=void 0!==t?t:2048}function Yf(t){return t.f>t.c}function Zf(t){Hs.call(this,{attributions:t.attributions,extent:t.extent,logo:t.logo,projection:t.projection,state:t.state,wrapX:t.wrapX}),this.fa=void 0!==t.opaque&&t.opaque,this.oa=void 0!==t.tilePixelRatio?t.tilePixelRatio:1,this.tileGrid=void 0!==t.tileGrid?t.tileGrid:null,this.a=new Vf(t.cacheSize),this.l=[0,0],this.ec=""}function Jf(t,e,o,i,r){if(e=t.qd(e),!e)return!1;for(var n,s,p=!0,a=i.ba;a<=i.da;++a)for(var h=i.ea;h<=i.ha;++h)n=t.Fb(o,a,h),s=!1,e.b.hasOwnProperty(n)&&(n=e.get(n),(s=n.U()===ag)&&(s=!1!==r(n))),s||(p=!1);return p}function _f(t,e){t.ec!==e&&(t.ec=e,t.v())}function Qf(t,e,o){var i=void 0!==o?o:t.f;if(o=t.pb(i),t.G&&i.g){var r=e;e=r[0],t=Ao(o,r),i=Io(i),bt(i,t)?e=r:(r=Ht(i),t[0]+=r*Math.ceil((i[0]-t[0])/r),e=o.Zd(t,e))}if(r=e[0],i=e[1],t=e[2],o.minZoom>r||r>o.maxZoom)o=!1;else{var n=o.D();o=!(o=n?Po(o,n,r):o.a?o.a[r]:null)||yo(o,i,t)}return o?e:null}function ty(t,e){L.call(this,t),this.tile=e}function ey(t){Zf.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,extent:t.extent,logo:t.logo,opaque:t.opaque,projection:t.projection,state:t.state,tileGrid:t.tileGrid,tilePixelRatio:t.tilePixelRatio,wrapX:t.wrapX}),this.tileLoadFunction=t.tileLoadFunction,this.tileUrlFunction=this.sc?this.sc.bind(this):zf,this.urls=null,t.urls?this.Ua(t.urls):t.url&&this.Ya(t.url),t.tileUrlFunction&&this.Ta(t.tileUrlFunction)}function oy(t){ey.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,extent:t.extent,logo:t.logo,opaque:t.opaque,projection:t.projection,state:t.state,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction?t.tileLoadFunction:ny,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:t.wrapX}),this.crossOrigin=void 0!==t.crossOrigin?t.crossOrigin:null,this.tileClass=void 0!==t.tileClass?t.tileClass:yc,this.i={},this.s={},this.ra=t.reprojectionErrorThreshold,this.B=!1}function iy(t,e,o,i,r,n,s){return e=[e,o,i],r=(o=Qf(t,e,n))?t.tileUrlFunction(o,r,n):void 0,r=new t.tileClass(e,void 0!==r?0:4,void 0!==r?r:"",t.crossOrigin,t.tileLoadFunction),r.key=s,E(r,"change",t.rh,t),r}function ry(t,e,o,i,r,n){var s,p=t.Fb(e,o,i),a=t.ec;if(t.a.b.hasOwnProperty(p)){if(s=t.a.get(p),s.key!=a){var h=s;if(s=iy(t,e,o,i,r,n,a),0==h.U()?s.a=h.a:s.a=h,s.a){e=s.a,o=s;do{if(e.U()==ag){e.a=null;break}1==e.U()?o=e:0==e.U()?o.a=e.a:o=e,e=o.a}while(e)}t.a.replace(p,s)}}else s=iy(t,e,o,i,r,n,a),t.a.set(p,s);return s}function ny(t,e){t.qb().src=e}function sy(t){oy.call(this,{cacheSize:t.cacheSize,crossOrigin:"anonymous",opaque:!0,projection:re("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX}),this.C=void 0!==t.culture?t.culture:"en-us",this.u=void 0!==t.maxZoom?t.maxZoom:-1,this.c=t.key,this.o=t.imagerySet,Hf("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+this.o+"?uriScheme=https&include=ImageryProviders&key="+this.c,this.Z.bind(this),void 0,"jsonp")}function py(t){t=t||{};var e=void 0!==t.projection?t.projection:"EPSG:3857",o=void 0!==t.tileGrid?t.tileGrid:Ro({extent:Io(e),maxZoom:t.maxZoom,minZoom:t.minZoom,tileSize:t.tileSize});oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,opaque:t.opaque,projection:e,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:o,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX})}function ay(t){this.u=t.account,this.C=t.map||"",this.c=t.config||{},this.o={},py.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,maxZoom:void 0!==t.maxZoom?t.maxZoom:18,minZoom:t.minZoom,projection:t.projection,state:"loading",wrapX:t.wrapX}),hy(this)}function hy(t){var e=JSON.stringify(t.c);if(t.o[e])ly(t,t.o[e]);else{var o="https://"+t.u+".cartodb.com/api/v1/map";t.C&&(o+="/named/"+t.C);var i=new XMLHttpRequest;i.addEventListener("load",t.Bk.bind(t,e)),i.addEventListener("error",t.Ak.bind(t)),i.open("POST",o),i.setRequestHeader("Content-type","application/json"),i.send(JSON.stringify(t.c))}}function ly(t,e){t.Ya("https://"+e.cdn_url.https+"/"+t.u+"/api/v1/map/"+e.layergroupid+"/{z}/{x}/{y}.png")}function uy(t){Lc.call(this,{attributions:t.attributions,extent:t.extent,logo:t.logo,projection:t.projection,wrapX:t.wrapX}),this.B=void 0,this.fa=void 0!==t.distance?t.distance:20,this.C=[],this.oa=t.geometryFunction||function(t){return t=t.V(),n(t instanceof Ie,10),t},this.u=t.source,this.u.I("change",uy.prototype.La,this)}function cy(t){if(void 0!==t.B){t.C.length=0;for(var e=Tt(),o=t.fa*t.B,r=t.u.oe(),n={},s=0,p=r.length;s<p;s++){var a=r[s];i(a).toString()in n||!(a=t.oa(a))||(a=a.Y(),Mt(a,e),gt(e,o,e),a=t.u.bf(e),a=a.filter(function(t){return t=i(t).toString(),!(t in n)&&(n[t]=!0)}),t.C.push(fy(t,a)))}}}function fy(t,e){for(var o=[0,0],i=e.length-1;0<=i;--i){var r=t.oa(e[i]);r?st(o,r.Y()):e.splice(i,1)}return i=1/e.length,o[0]*=i,o[1]*=i,o=new wa(new Ie(o)),o.set("features",e),o}function yy(t,e){var o=[];Object.keys(e).forEach(function(t){null!==e[t]&&void 0!==e[t]&&o.push(t+"="+encodeURIComponent(e[t]))});var i=o.join("&");return t=t.replace(/[?&]$/,""),t=-1===t.indexOf("?")?t+"?":t+"&",t+i}function dy(t){
-t=t||{},$s.call(this,{attributions:t.attributions,logo:t.logo,projection:t.projection,resolutions:t.resolutions}),this.Z=void 0!==t.crossOrigin?t.crossOrigin:null,this.i=t.url,this.l=void 0!==t.imageLoadFunction?t.imageLoadFunction:zs,this.u=t.params||{},this.c=null,this.s=[0,0],this.P=0,this.B=void 0!==t.ratio?t.ratio:1.5}function gy(t){$s.call(this,{projection:t.projection,resolutions:t.resolutions}),this.Z=void 0!==t.crossOrigin?t.crossOrigin:null,this.s=void 0!==t.displayDpi?t.displayDpi:96,this.l=t.params||{},this.P=t.url,this.c=void 0!==t.imageLoadFunction?t.imageLoadFunction:zs,this.fa=void 0===t.hidpi||t.hidpi,this.oa=void 0!==t.metersPerUnit?t.metersPerUnit:1,this.u=void 0!==t.ratio?t.ratio:1,this.Aa=void 0!==t.useOverlay&&t.useOverlay,this.i=null,this.B=0}function vy(t){var e=t.imageExtent,o=void 0!==t.crossOrigin?t.crossOrigin:null,i=void 0!==t.imageLoadFunction?t.imageLoadFunction:zs;$s.call(this,{attributions:t.attributions,logo:t.logo,projection:re(t.projection)}),this.c=new Pn(e,(void 0),1,this.j,t.url,o,i),this.i=t.imageSize?t.imageSize:null,E(this.c,"change",this.o,this)}function my(t){t=t||{},$s.call(this,{attributions:t.attributions,logo:t.logo,projection:t.projection,resolutions:t.resolutions}),this.oa=void 0!==t.crossOrigin?t.crossOrigin:null,this.l=t.url,this.B=void 0!==t.imageLoadFunction?t.imageLoadFunction:zs,this.i=t.params||{},this.u=!0,wy(this),this.fa=t.serverType,this.Aa=void 0===t.hidpi||t.hidpi,this.c=null,this.P=[0,0],this.Z=0,this.s=void 0!==t.ratio?t.ratio:1.5}function by(t,e,o,i,r,s){if(n(void 0!==t.l,9),s[t.u?"CRS":"SRS"]=r.eb,"STYLES"in t.i||(s.STYLES=""),1!=i)switch(t.fa){case"geoserver":i=90*i+.5|0,s.FORMAT_OPTIONS="FORMAT_OPTIONS"in s?s.FORMAT_OPTIONS+(";dpi:"+i):"dpi:"+i;break;case"mapserver":s.MAP_RESOLUTION=90*i;break;case"carmentaserver":case"qgis":s.DPI=90*i;break;default:n(!1,8)}s.WIDTH=o[0],s.HEIGHT=o[1],o=r.b;var p;return p=t.u&&"ne"==o.substr(0,2)?[e[1],e[0],e[3],e[2]]:e,s.BBOX=p.join(","),yy(t.l,s)}function wy(t){t.u=0<=nt(t.i.VERSION||"1.3.0")}function xy(t){t=t||{};var e;e=void 0!==t.attributions?t.attributions:[Gx],py.call(this,{attributions:e,cacheSize:t.cacheSize,crossOrigin:void 0!==t.crossOrigin?t.crossOrigin:"anonymous",opaque:void 0===t.opaque||t.opaque,maxZoom:void 0!==t.maxZoom?t.maxZoom:19,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileLoadFunction:t.tileLoadFunction,url:void 0!==t.url?t.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:t.wrapX})}function Sy(t){this.B=null,this.Aa=void 0!==t.operationType?t.operationType:"pixel",this.La=void 0!==t.threads?t.threads:1,this.c=My(t.sources);for(var e=0,o=this.c.length;e<o;++e)E(this.c[e],"change",this.v,this);this.i=Wo(),this.fa=new zi(function(){return 1},this.v.bind(this));for(var e=Ey(this.c),o={},r=0,n=e.length;r<n;++r)o[i(e[r].layer)]=e[r];this.l=this.s=null,this.Z={animate:!1,attributions:{},coordinateToPixelTransform:sn(),extent:null,focus:null,index:0,layerStates:o,layerStatesArray:e,logos:{},pixelRatio:1,pixelToCoordinateTransform:sn(),postRenderFunctions:[],size:[0,0],skippedFeatureUids:{},tileQueue:this.fa,time:Date.now(),usedTiles:{},viewState:{rotation:0},viewHints:[],wantedTiles:{}},$s.call(this,{}),void 0!==t.operation&&this.u(t.operation,t.lib)}function Ty(t,e,o){var i=t.s;return!i||t.g!==i.Mo||o!==i.resolution||!Pt(e,i.extent)}function Ey(t){return t.map(function(t){return Vr(t.a)})}function My(t){for(var e=t.length,o=Array(e),i=0;i<e;++i){var r=i,n=t[i],s=null;n instanceof Zf?(n=new En({source:n}),s=new _s(n)):n instanceof $s&&(n=new Tn({source:n}),s=new Js(n)),o[r]=s}return o}function Cy(t,e,o){L.call(this,t),this.extent=e.extent,this.resolution=e.viewState.resolution/e.pixelRatio,this.data=o}function Py(t){var e=t.layer.indexOf("-"),e=zx[-1==e?t.layer:t.layer.slice(0,e)],o=Kx[t.layer];py.call(this,{attributions:$x,cacheSize:t.cacheSize,crossOrigin:"anonymous",maxZoom:void 0!=t.maxZoom?t.maxZoom:e.maxZoom,minZoom:void 0!=t.minZoom?t.minZoom:e.minZoom,opaque:o.opaque,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileLoadFunction:t.tileLoadFunction,url:void 0!==t.url?t.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+t.layer+"/{z}/{x}/{y}."+o.wb})}function Ay(t){t=t||{},oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX}),this.c=t.params||{},this.o=Tt(),_f(this,jy(this))}function jy(t){var e,o=0,i=[];for(e in t.c)i[o++]=e+"-"+t.c[e];return i.join("/")}function Ny(t){Zf.call(this,{opaque:!1,projection:t.projection,tileGrid:t.tileGrid,wrapX:void 0===t.wrapX||t.wrapX})}function Ly(t,e,o){Bi.call(this,t,ag),this.j=e,this.c=o,this.g=null}function Ry(t){if(this.c=null,oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,projection:re("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX}),t.jsonp)Hf(t.url,this.oh.bind(this),this.me.bind(this));else{var e=new XMLHttpRequest;e.addEventListener("load",this.bn.bind(this)),e.addEventListener("error",this.an.bind(this)),e.open("GET",t.url),e.send()}}function ky(t){if(Zf.call(this,{projection:re("EPSG:3857"),state:"loading"}),this.s=void 0===t.preemptive||t.preemptive,this.o=zf,this.i=void 0,this.c=t.jsonp||!1,t.url)if(this.c)Hf(t.url,this.zf.bind(this),this.ne.bind(this));else{var e=new XMLHttpRequest;e.addEventListener("load",this.fn.bind(this)),e.addEventListener("error",this.en.bind(this)),e.open("GET",t.url),e.send()}else t.tileJSON?this.zf(t.tileJSON):n(!1,51)}function Iy(t,e,o,i,r,n){Bi.call(this,t,e),this.s=o,this.g=i,this.u=r,this.c=this.o=this.j=null,this.T=n}function Dy(t,e,o,i,r){0==t.state&&!0===r?(M(t,"change",function(){o.call(i,this.getData(e))},t),Oy(t)):!0===r?setTimeout(function(){o.call(i,this.getData(e))}.bind(t),0):o.call(i,t.getData(e))}function Oy(t){if(0==t.state)if(t.state=1,t.T)Hf(t.s,t.ph.bind(t),t.$d.bind(t));else{var e=new XMLHttpRequest;e.addEventListener("load",t.dn.bind(t)),e.addEventListener("error",t.cn.bind(t)),e.open("GET",t.s),e.send()}}function Fy(t){t=t||{};var e=t.params||{};oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,opaque:!("TRANSPARENT"in e?e.TRANSPARENT:1),projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX}),this.u=void 0!==t.gutter?t.gutter:0,this.c=e,this.o=!0,this.C=t.serverType,this.W=void 0===t.hidpi||t.hidpi,this.P="",Uy(this),this.Z=Tt(),Hy(this),_f(this,Gy(this))}function By(t,e,o,i,r,s,p){var a=t.urls;if(a){if(p.WIDTH=o[0],p.HEIGHT=o[1],p[t.o?"CRS":"SRS"]=s.eb,"STYLES"in t.c||(p.STYLES=""),1!=r)switch(t.C){case"geoserver":o=90*r+.5|0,p.FORMAT_OPTIONS="FORMAT_OPTIONS"in p?p.FORMAT_OPTIONS+(";dpi:"+o):"dpi:"+o;break;case"mapserver":p.MAP_RESOLUTION=90*r;break;case"carmentaserver":case"qgis":p.DPI=90*r;break;default:n(!1,52)}return s=s.b,t.o&&"ne"==s.substr(0,2)&&(t=i[0],i[0]=i[1],i[1]=t,t=i[2],i[2]=i[3],i[3]=t),p.BBOX=i.join(","),yy(1==a.length?a[0]:a[u((e[1]<<e[0])+e[2],a.length)],p)}}function Uy(t){var e=0,o=[];if(t.urls){var i,r;for(i=0,r=t.urls.length;i<r;++i)o[e++]=t.urls[i]}t.P=o.join("#")}function Gy(t){var e,o=0,i=[];for(e in t.c)i[o++]=e+"-"+t.c[e];return i.join("/")}function Hy(t){t.o=0<=nt(t.c.VERSION||"1.3.0")}function Xy(t,e,o,i,r){Bi.call(this,t,e),this.g=Wo(),this.j=i,this.c=null,this.f={jd:!1,Qf:null,Rh:-1,Rf:-1,Ad:null,li:[]},this.T=r,this.o=o}function Wy(t){ey.call(this,{attributions:t.attributions,cacheSize:void 0!==t.cacheSize?t.cacheSize:128,extent:t.extent,logo:t.logo,opaque:!1,projection:t.projection,state:t.state,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction?t.tileLoadFunction:$y,tileUrlFunction:t.tileUrlFunction,tilePixelRatio:t.tilePixelRatio,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX}),this.c=t.format?t.format:null,this.i=void 0==t.overlaps||t.overlaps,this.tileClass=t.tileClass?t.tileClass:Xy}function $y(t,e){t.bi(Wa(e,t.j))}function Ky(t){this.l=t.matrixIds,To.call(this,{extent:t.extent,origin:t.origin,origins:t.origins,resolutions:t.resolutions,tileSize:t.tileSize,tileSizes:t.tileSizes,sizes:t.sizes})}function zy(t,e){var o,i=[],r=[],n=[],s=[],p=[];o=re(t.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var a=o.dc(),h="ne"==o.b.substr(0,2);return t.TileMatrix.sort(function(t,e){return e.ScaleDenominator-t.ScaleDenominator}),t.TileMatrix.forEach(function(t){r.push(t.Identifier);var e=28e-5*t.ScaleDenominator/a,o=t.TileWidth,l=t.TileHeight;h?n.push([t.TopLeftCorner[1],t.TopLeftCorner[0]]):n.push(t.TopLeftCorner),i.push(e),s.push(o==l?o:[o,l]),p.push([t.MatrixWidth,-t.MatrixHeight])}),new Ky({extent:e,origins:n,resolutions:i,matrixIds:r,tileSizes:s,sizes:p})}function qy(t){function e(t){return t=i==qx?yy(t,n):t.replace(/\{(\w+?)\}/g,function(t,e){return e.toLowerCase()in n?n[e.toLowerCase()]:t}),function(e){if(e){var o={TileMatrix:r.l[e[0]],TileCol:e[1],TileRow:-e[2]-1};return hd(o,s),e=t,e=i==qx?yy(e,o):e.replace(/\{(\w+?)\}/g,function(t,e){return o[e]})}}}this.Z=void 0!==t.version?t.version:"1.0.0",this.u=void 0!==t.format?t.format:"image/jpeg",this.c=void 0!==t.dimensions?t.dimensions:{},this.C=t.layer,this.o=t.matrixSet,this.P=t.style;var o=t.urls;void 0===o&&void 0!==t.url&&(o=qf(t.url));var i=this.W=void 0!==t.requestEncoding?t.requestEncoding:qx,r=t.tileGrid,n={layer:this.C,style:this.P,tilematrixset:this.o};i==qx&&hd(n,{Service:"WMTS",Request:"GetTile",Version:this.Z,Format:this.u});var s=this.c,p=o&&0<o.length?Kf(o.map(e)):zf;oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:t.tileClass,tileGrid:r,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:p,urls:o,wrapX:void 0!==t.wrapX&&t.wrapX}),_f(this,Vy(this))}function Vy(t){var e,o=0,i=[];for(e in t.c)i[o++]=e+"-"+t.c[e];return i.join("/")}function Yy(t){t=t||{};var e=t.size,o=e[0],i=e[1],r=[],s=256;switch(void 0!==t.tierSizeCalculation?t.tierSizeCalculation:Vx){case Vx:for(;o>s||i>s;)r.push([Math.ceil(o/s),Math.ceil(i/s)]),s+=s;break;case Yx:for(;o>s||i>s;)r.push([Math.ceil(o/s),Math.ceil(i/s)]),o>>=1,i>>=1;break;default:n(!1,53)}r.push([1,1]),r.reverse();for(var s=[1],p=[0],i=1,o=r.length;i<o;i++)s.push(1<<i),p.push(r[i-1][0]*r[i-1][1]+p[i-1]);s.reverse();var e=[0,-e[1],e[0],0],e=new To({extent:e,origin:Ut(e),resolutions:s}),a=t.url;oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:Zy,tileGrid:e,tileUrlFunction:function(t){if(t){var e=t[0],o=t[1];return t=-t[2]-1,a+"TileGroup"+((o+t*r[e][0]+p[e])/256|0)+"/"+e+"-"+o+"-"+t+".jpg"}}})}function Zy(t,e,o,i,r){yc.call(this,t,e,o,i,r),this.c=null}function Jy(t,e){this.b=e,this.a=[{x:0,y:0,width:t,height:t}],this.f={},this.g=Wo(t,t),this.c=this.g.canvas}function _y(t,e,o,i){e=[e,1],0<o.width&&0<o.height&&e.push(o),0<i.width&&0<i.height&&e.push(i),t.a.splice.apply(t.a,e)}function Qy(t){t=t||{},this.a=void 0!==t.initialSize?t.initialSize:256,this.g=void 0!==t.maxSize?t.maxSize:void 0!==id?id:2048,this.b=void 0!==t.space?t.space:1,this.c=[new Jy(this.a,this.b)],this.f=this.a,this.i=[new Jy(this.f,this.b)]}function td(t,e,o,i,r,n,s){var p,a,h,l=e?t.i:t.c;for(a=0,h=l.length;a<h;++a){if(p=l[a],p=p.add(o,i,r,n,s))return p;p||a!==h-1||(e?(p=Math.min(2*t.f,t.g),t.f=p):(p=Math.min(2*t.a,t.g),t.a=p),p=new Jy(p,t.b),l.push(p),++h)}return null}function ed(t){this.B=this.C=this.i=null,this.j=void 0!==t.fill?t.fill:null,this.za=[0,0],this.b=t.points,this.g=void 0!==t.radius?t.radius:t.radius1,this.f=void 0!==t.radius2?t.radius2:this.g,this.s=void 0!==t.angle?t.angle:0,this.a=void 0!==t.stroke?t.stroke:null,this.na=this.P=this.G=null;var e,o=this.S=t.atlasManager,i="",r="",n=0,s=null,p=0;this.a&&(e=Xo(this.a.a),p=this.a.f,void 0===p&&(p=1),s=this.a.g,Gd||(s=null),r=this.a.i,void 0===r&&(r="round"),i=this.a.c,void 0===i&&(i="round"),n=this.a.j,void 0===n&&(n=10));var a=2*(this.g+p)+1,i={strokeStyle:e,Dd:p,size:a,lineCap:i,lineDash:s,lineJoin:r,miterLimit:n};if(void 0===o){var h=Wo(a,a);this.C=h.canvas,o=a=this.C.width,this.yh(i,h,0,0),this.j?this.B=this.C:(h=Wo(i.size,i.size),this.B=h.canvas,this.xh(i,h,0,0))}else a=Math.round(a),(r=!this.j)&&(h=this.xh.bind(this,i)),n=this.a?Dn(this.a):"-",s=this.j?kn(this.j):"-",this.i&&n==this.i[1]&&s==this.i[2]&&this.g==this.i[3]&&this.f==this.i[4]&&this.s==this.i[5]&&this.b==this.i[6]||(this.i=["r"+n+s+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.f?this.f.toString():"-")+(void 0!==this.s?this.s.toString():"-")+(void 0!==this.b?this.b.toString():"-"),n,s,this.g,this.f,this.s,this.b]),h=o.add(this.i[0],a,a,this.yh.bind(this,i),h),this.C=h.image,this.za=[h.offsetX,h.offsetY],o=h.image.width,this.B=r?h.de:this.C;this.G=[a/2,a/2],this.P=[a,a],this.na=[o,o],jn.call(this,{opacity:1,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,rotation:void 0!==t.rotation?t.rotation:0,scale:1,snapToPixel:void 0===t.snapToPixel||t.snapToPixel})}var od,id,rd,nd={},sd=this,pd=0;e(r,Error);var ad=function(){var t;return t="cosh"in Math?Math.cosh:function(t){return t=Math.exp(t),(t+1/t)/2}}(),hd="function"==typeof Object.assign?Object.assign:function(t,e){if(!t||!t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1,r=arguments.length;i<r;++i){var n=arguments[i];if(void 0!==n&&null!==n)for(var s in n)n.hasOwnProperty(s)&&(o[s]=n[s])}return o};j.prototype.Ib=!1,j.prototype.la=o,L.prototype.preventDefault=L.prototype.stopPropagation=function(){this.io=!0},e(k,j),k.prototype.addEventListener=function(t,e){var o=this.na[t];o||(o=this.na[t]=[]),-1===o.indexOf(e)&&o.push(e)},k.prototype.b=function(t){var e="string"==typeof t?new L(t):t;t=e.type,e.target=this;var i,r=this.na[t];if(r){t in this.za||(this.za[t]=0,this.Qa[t]=0),++this.za[t];for(var n=0,s=r.length;n<s;++n)if(!1===r[n].call(this,e)||e.io){i=!1;break}if(--this.za[t],0===this.za[t]){for(e=this.Qa[t],delete this.Qa[t];e--;)this.removeEventListener(t,o);delete this.za[t]}return i}},k.prototype.la=function(){A(this)},k.prototype.removeEventListener=function(t,e){var i=this.na[t];if(i){var r=i.indexOf(e);t in this.Qa?(i[r]=o,++this.Qa[t]):(i.splice(r,1),0===i.length&&delete this.na[t])}},e(D,k),od=D.prototype,od.v=function(){++this.g,this.b("change")},od.K=function(){return this.g},od.I=function(t,e,o){if(Array.isArray(t)){for(var i=t.length,r=Array(i),n=0;n<i;++n)r[n]=E(this,t[n],e,o);return r}return E(this,t,e,o)},od.L=function(t,e,o){if(Array.isArray(t)){for(var i=t.length,r=Array(i),n=0;n<i;++n)r[n]=M(this,t[n],e,o);return r}return M(this,t,e,o)},od.J=function(t,e,o){if(Array.isArray(t))for(var i=0,r=t.length;i<r;++i)C(this,t[i],e,o);else C(this,t,e,o)},od.M=O,e(F,L),e(B,D);var ld={};od=B.prototype,od.get=function(t){var e;return this.T.hasOwnProperty(t)&&(e=this.T[t]),e},od.O=function(){return Object.keys(this.T)},od.N=function(){return hd({},this.T)},od.set=function(t,e,o){o?this.T[t]=e:(o=this.T[t],this.T[t]=e,o!==e&&G(this,t,o))},od.H=function(t,e){for(var o in t)this.set(o,t[o],e)},od.R=function(t,e){if(t in this.T){var o=this.T[t];delete this.T[t],e||G(this,t,o)}},Vt.prototype.a=function(t){for(var e=0,o=t.length,i=t[o-1][0],r=t[o-1][1],n=0;n<o;n++)var s=t[n][0],p=t[n][1],e=e+l(s-i)*(2+Math.sin(l(r))+Math.sin(l(p))),i=s,r=p;return e*this.radius*this.radius/2},Vt.prototype.b=function(t,e){var o=l(t[1]),i=l(e[1]),r=(i-o)/2,n=l(e[0]-t[0])/2,o=Math.sin(r)*Math.sin(r)+Math.sin(n)*Math.sin(n)*Math.cos(o)*Math.cos(i);return 2*this.radius*Math.atan2(Math.sqrt(o),Math.sqrt(1-o))},Vt.prototype.offset=function(t,e,o){var i=l(t[1]);e/=this.radius;var r=Math.asin(Math.sin(i)*Math.cos(e)+Math.cos(i)*Math.sin(e)*Math.cos(o));return[180*(l(t[0])+Math.atan2(Math.sin(o)*Math.sin(e)*Math.cos(i),Math.cos(e)-Math.sin(i)*Math.sin(r)))/Math.PI,180*r/Math.PI]};var ud=new Vt(6370997),cd={};cd.degrees=2*Math.PI*ud.radius/360,cd.ft=.3048,cd.m=1,cd["us-ft"]=1200/3937,od=Yt.prototype,od.Gj=function(){return this.eb},od.D=function(){return this.f},od.yb=function(){return this.c},od.dc=function(){return this.o||cd[this.c]},od.sk=function(){return this.i},od.bl=function(){return this.g},od.Ro=function(t){this.g=t,this.a=!(!t||!this.f)},od.Am=function(t){this.f=t,this.a=!(!this.g||!t)},od.Yo=function(t){this.i=t},od.Qo=function(t){this.l=t},od.fk=function(t,e){if("degrees"==this.yb())return t;var o=pe(this,re("EPSG:4326")),i=[e[0]-t/2,e[1],e[0]+t/2,e[1],e[0],e[1]-t/2,e[0],e[1]+t/2],i=o(i,i,2),o=(ud.b(i.slice(0,2),i.slice(2,4))+ud.b(i.slice(4,6),i.slice(6,8)))/2,i=this.dc();return void 0!==i&&(o/=i),o},od.getPointResolution=function(t,e){return this.l(t,e)};var fd={},yd={},dd=null;e(ce,B),od=ce.prototype,od.xb=function(t,e){var o=e?e:[NaN,NaN];return this.vb(t[0],t[1],o,1/0),o},od.jb=function(t){return this.Ac(t[0],t[1])},od.Ac=qt,od.D=function(t){this.u!=this.g&&(this.s=this.Pd(this.s),this.u=this.g);var e=this.s;return t?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3]):t=e,t},od.Db=function(t){return this.pd(t*t)},od.lb=function(t,e){return this.oc(se(t,e)),this},e(ye,ce),od=ye.prototype,od.Ac=qt,od.Pd=function(t){return Ct(this.A,0,this.A.length,this.a,t)},od.Lb=function(){return this.A.slice(0,this.a)},od.ka=function(){return this.A},od.Mb=function(){return this.A.slice(this.A.length-this.a)},od.Nb=function(){return this.ia},od.pd=function(t){if(this.o!=this.g&&(g(this.i),this.j=0,this.o=this.g),0>t||0!==this.j&&t<=this.j)return this;var e=t.toString();if(this.i.hasOwnProperty(e))return this.i[e];var o=this.Mc(t);return o.ka().length<this.A.length?this.i[e]=o:(this.j=t,this)},od.Mc=function(){return this},od.sa=function(){return this.a},od.oc=function(t){this.A&&(t(this.A,this.A,this.a),this.v())},od.rotate=function(t,e){var o=this.ka();if(o){for(var i=o.length,r=this.sa(),n=o?o:[],s=Math.cos(t),p=Math.sin(t),a=e[0],h=e[1],l=0,u=0;u<i;u+=r){var c=o[u]-a,f=o[u+1]-h;for(n[l++]=a+c*s-f*p,n[l++]=h+c*p+f*s,c=u+2;c<u+r;++c)n[l++]=o[c]}o&&n.length!=l&&(n.length=l),this.v()}},od.scale=function(t,e,o){var i=e;void 0===i&&(i=t);var r=o;if(r||(r=Dt(this.D())),o=this.ka()){e=o.length;for(var n=this.sa(),s=o?o:[],p=r[0],r=r[1],a=0,h=0;h<e;h+=n){var l=o[h]-p,u=o[h+1]-r;for(s[a++]=p+t*l,s[a++]=r+i*u,l=h+2;l<h+n;++l)s[a++]=o[l]}o&&s.length!=a&&(s.length=a),this.v()}},od.Pc=function(t,e){var o=this.ka();if(o){var i,r,n=o.length,s=this.sa(),p=o?o:[],a=0;for(i=0;i<n;i+=s)for(p[a++]=o[i]+t,p[a++]=o[i+1]+e,r=i+2;r<i+s;++r)p[a++]=o[r];o&&p.length!=a&&(p.length=a),this.v()}},e(Re,ye),od=Re.prototype,od.clone=function(){var t=new Re(null);return ke(t,this.ia,this.A.slice()),t},od.vb=function(t,e,o,i){return i<mt(this.D(),t,e)?i:(this.c!=this.g&&(this.l=Math.sqrt(xe(this.A,0,this.A.length,this.a,0)),this.c=this.g),Te(this.A,0,this.A.length,this.a,this.l,!0,t,e,o,i))},od.bm=function(){return me(this.A,0,this.A.length,this.a)},od.Y=function(){return Ae(this.A,0,this.A.length,this.a)},od.Mc=function(t){var e=[];return e.length=Ne(this.A,0,this.A.length,this.a,t,e,0),t=new Re(null),ke(t,"XY",e),t},od.X=function(){return"LinearRing"},od.ma=function(t,e){t?(ve(this,e,t,1),this.A||(this.A=[]),this.A.length=Ce(this.A,0,t,this.a),this.v()):ke(this,"XY",null)},e(Ie,ye),od=Ie.prototype,od.clone=function(){var t=new Ie(null);return t.aa(this.ia,this.A.slice()),t},od.vb=function(t,e,o,i){var r=this.A;if(t=h(t,e,r[0],r[1]),t<i){for(i=this.a,e=0;e<i;++e)o[e]=r[e];return o.length=i,t}return i},od.Y=function(){return this.A?this.A.slice():[]},od.Pd=function(t){return Mt(this.A,t)},od.X=function(){return"Point"},od.Na=function(t){return xt(t,this.A[0],this.A[1])},od.ma=function(t,e){t?(ve(this,e,t,0),this.A||(this.A=[]),this.A.length=Me(this.A,t),this.v()):this.aa("XY",null)},od.aa=function(t,e){ge(this,t,e),this.v()},e(ze,ye),od=ze.prototype,od.mj=function(t){this.A?K(this.A,t.ka()):this.A=t.ka().slice(),this.c.push(this.A.length),this.v()},od.clone=function(){var t=new ze(null);return t.aa(this.ia,this.A.slice(),this.c.slice()),t},od.vb=function(t,e,o,i){return i<mt(this.D(),t,e)?i:(this.G!=this.g&&(this.S=Math.sqrt(Se(this.A,0,this.c,this.a,0)),this.G=this.g),Ee(this.A,0,this.c,this.a,this.S,!0,t,e,o,i))},od.Ac=function(t,e){return Fe(this.Ob(),0,this.c,this.a,t,e)},od.em=function(){return be(this.Ob(),0,this.c,this.a)},od.Y=function(t){var e;return void 0!==t?(e=this.Ob().slice(),$e(e,0,this.c,this.a,t)):e=this.A,je(e,0,this.c,this.a)},od.Eb=function(){return this.c},od.Qj=function(){return new Ie(qe(this))},od.Vj=function(){return this.c.length},od.Bg=function(t){if(0>t||this.c.length<=t)return null;var e=new Re(null);return ke(e,this.ia,this.A.slice(0===t?0:this.c[t-1],this.c[t])),e},od.Vd=function(){var t,e,o=this.ia,i=this.A,r=this.c,n=[],s=0;for(t=0,e=r.length;t<e;++t){var p=r[t],a=new Re(null);ke(a,o,i.slice(s,p)),n.push(a),s=p}return n},od.Ob=function(){if(this.P!=this.g){var t=this.A;We(t,this.c,this.a)?this.l=t:(this.l=t.slice(),this.l.length=$e(this.l,0,this.c,this.a)),this.P=this.g}return this.l},od.Mc=function(t){var e=[],o=[];return e.length=Le(this.A,0,this.c,this.a,Math.sqrt(t),e,0,o),t=new ze(null),t.aa("XY",e,o),t},od.X=function(){return"Polygon"},od.Na=function(t){return He(this.Ob(),0,this.c,this.a,t)},od.ma=function(t,e){if(t){ve(this,e,t,2),this.A||(this.A=[]);var o=Pe(this.A,0,t,this.a,this.c);this.A.length=0===o.length?0:o[o.length-1],this.v()}else this.aa("XY",null,this.c)},od.aa=function(t,e,o){ge(this,t,e),this.c=o,this.v()},e(_e,B),od=_e.prototype,od.Qd=function(t){return this.o.center(t)},od.constrainResolution=function(t,e,o){return this.o.resolution(t,e||0,o||0)},od.constrainRotation=function(t,e){return this.o.rotation(t,e||0)},od.bb=function(){return this.get(gd)},od.Jc=function(t){var e=this.bb();n(e,1);var o=this.Ma();n(void 0!==o,2);var i=this.Pa();return n(void 0!==i,3),Ot(e,o,i,t)},od.Jl=function(){return this.a},od.Kl=function(){return this.i},od.Ll=function(){return this.l},od.Ma=function(){return this.get(vd)},od.Ml=function(){return this.f},od.Pa=function(){return this.get(md)},od.U=function(){var t=this.bb(),e=this.l,o=this.Ma(),i=this.Pa();return{center:t.slice(),projection:void 0!==e?e:null,resolution:o,rotation:i}},od.tk=function(){var t,e=this.Ma();if(void 0!==e&&e>=this.i&&e<=this.a){t=this.j||0;var o,i;if(this.f){if(i=W(this.f,e,1),t+=i,i==this.f.length-1)return t;o=this.f[i],i=o/this.f[i+1]}else o=this.a,i=this.s;t+=Math.log(o/e)/Math.log(i)}return t},od.$e=function(t,e,o){t instanceof ye||(n(Array.isArray(t),24),n(!Wt(t),25),t=Ye(t));var i=o||{};o=void 0!==i.padding?i.padding:[0,0,0,0];var r,s=void 0===i.constrainResolution||i.constrainResolution,p=void 0!==i.nearest&&i.nearest;r=void 0!==i.minResolution?i.minResolution:void 0!==i.maxZoom?this.constrainResolution(this.a,i.maxZoom-this.j,0):0;var a=t.ka(),h=this.Pa(),i=Math.cos(-h),h=Math.sin(-h),l=1/0,u=1/0,c=-(1/0),f=-(1/0);t=t.sa();for(var y=0,d=a.length;y<d;y+=t)var g=a[y]*i-a[y+1]*h,v=a[y]*h+a[y+1]*i,l=Math.min(l,g),u=Math.min(u,v),c=Math.max(c,g),f=Math.max(f,v);e=to([l,u,c,f],[e[0]-o[1]-o[3],e[1]-o[0]-o[2]]),e=isNaN(e)?r:Math.max(e,r),s&&(r=this.constrainResolution(e,0,0),!p&&r<e&&(r=this.constrainResolution(r,-1,0)),e=r),this.Yb(e),h=-h,p=(l+c)/2+(o[1]-o[3])/2*e,o=(u+f)/2+(o[0]-o[2])/2*e,this.rb([p*i-o*h,o*i+p*h])},od.sj=function(t,e,o){var i=this.Pa(),r=Math.cos(-i),i=Math.sin(-i),n=t[0]*r-t[1]*i;t=t[1]*r+t[0]*i;var s=this.Ma(),n=n+(e[0]/2-o[0])*s;t+=(o[1]-e[1]/2)*s,i=-i,this.rb([n*r-t*i,t*r+n*i])},od.rotate=function(t,e){if(void 0!==e){var o,i=this.bb();void 0!==i&&(o=[i[0]-e[0],i[1]-e[1]],ut(o,t-this.Pa()),st(o,e)),this.rb(o)}this.ie(t)},od.rb=function(t){this.set(gd,t)},od.Yb=function(t){this.set(vd,t)},od.ie=function(t){this.set(md,t)},od.Zo=function(t){t=this.constrainResolution(this.a,t-this.j,0),this.Yb(t)};var gd="center",vd="resolution",md="rotation",bd=[0,0,0];od=To.prototype,od.sg=function(t,e,o){t=Po(this,t,e);for(var i=t.ba,r=t.da;i<=r;++i)for(var n=t.ea,s=t.ha;n<=s;++n)o([e,i,n])},od.D=function(){return this.s},od.Cg=function(){return this.maxZoom},od.Dg=function(){return this.minZoom},od.Tc=function(t){return this.g?this.g:this.f[t]},od.Ga=function(t){return this.b[t]},od.Bh=function(){return this.b},od.Ia=function(t,e){var o=this.Tc(t[0]),i=this.Ga(t[0]),r=wo(this.Va(t[0]),this.j),n=o[0]+t[1]*r[0]*i,o=o[1]+t[2]*r[1]*i;return Et(n,o,n+r[0]*i,o+r[1]*i,e)},od.Yd=function(t,e,o){return jo(this,t[0],t[1],e,!1,o)},od.Zd=function(t,e,o){return e=this.Ga(e),jo(this,t[0],t[1],e,!1,o)},od.Va=function(t){return this.i?this.i:this.c[t]},od.wc=function(t,e){return s(W(this.b,t,e||0),this.minZoom,this.maxZoom)},Do.prototype.g=function(){return this.a},e(Oo,B),od=Oo.prototype,od.clear=function(){for(;0<this.yc();)this.pop()},od.qf=function(t){var e,o;for(e=0,o=t.length;e<o;++e)this.push(t[e]);return this},od.forEach=function(t,e){this.a.forEach(t,e)},od.sl=function(){return this.a},od.item=function(t){return this.a[t]},od.yc=function(){return this.get(wd)},od.ee=function(t,e){this.a.splice(t,0,e),Fo(this),this.b(new Bo(xd,e))},od.pop=function(){return this.Nf(this.yc()-1)},od.push=function(t){var e=this.a.length;return this.ee(e,t),e},od.remove=function(t){var e,o,i=this.a;for(e=0,o=i.length;e<o;++e)if(i[e]===t)return this.Nf(e)},od.Nf=function(t){var e=this.a[t];return this.a.splice(t,1),Fo(this),this.b(new Bo(Sd,e)),e},od.Oo=function(t,e){var o=this.yc();if(t<o)o=this.a[t],this.a[t]=e,this.b(new Bo(Sd,o)),this.b(new Bo(xd,e));else{for(;o<t;++o)this.ee(o,void 0);this.ee(t,e)}};var wd="length",xd="add",Sd="remove";e(Bo,L);var Td=/^#(?:[0-9a-f]{3}){1,2}$/i,Ed=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,Md=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i,Cd=/^([a-z]*)$/i,Pd=function(){var t={},e=0;return function(o){var i;if(t.hasOwnProperty(o))i=t[o];else{if(1024<=e){i=0;for(var r in t)0===(3&i++)&&(delete t[r],--e)}i=o;var s,p;Cd.exec(i)&&(r=document.createElement("div"),r.style.color=i,document.body.appendChild(r),i=getComputedStyle(r).color,document.body.removeChild(r)),Td.exec(i)?(s=i.length-1,n(3==s||6==s,54),p=3==s?1:2,s=parseInt(i.substr(1+0*p,p),16),r=parseInt(i.substr(1+1*p,p),16),i=parseInt(i.substr(1+2*p,p),16),1==p&&(s=(s<<4)+s,r=(r<<4)+r,i=(i<<4)+i),s=[s,r,i,1]):(p=Md.exec(i))?(s=Number(p[1]),r=Number(p[2]),i=Number(p[3]),p=Number(p[4]),s=Ho([s,r,i,p])):(p=Ed.exec(i))?(s=Number(p[1]),r=Number(p[2]),i=Number(p[3]),s=Ho([s,r,i,1])):n(!1,14),i=s,t[o]=i,++e}return i}}();e(zo,L),e(qo,B),qo.prototype.la=function(){Ko(this.element),B.prototype.la.call(this)},qo.prototype.i=function(){return this.a},qo.prototype.setMap=function(t){this.a&&Ko(this.element);for(var e=0,i=this.s.length;e<i;++e)P(this.s[e]);this.s.length=0,(this.a=t)&&((this.P?this.P:t.u).appendChild(this.element),this.render!==o&&this.s.push(E(t,"postrender",this.render,this)),t.render())},qo.prototype.c=function(t){this.P="string"==typeof t?document.getElementById(t):t},e(Vo,qo),od=Vo.prototype,od.Pl=function(t){t.preventDefault(),Zo(this)},od.Ol=function(){return this.l},od.Rl=function(t){this.l!==t&&(this.l=t,this.element.classList.toggle("ol-uncollapsible"),!t&&this.f&&Zo(this))},od.Ql=function(t){this.l&&this.f!==t&&Zo(this)},od.Nl=function(){return this.f},e(Jo,qo),Jo.prototype.B=function(t){t.preventDefault(),_o()&&(t=this.a)&&(Qo()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(t=this.j?"string"==typeof this.j?document.getElementById(this.j):this.j:t.uc(),this.C?t.mozRequestFullScreenWithKeys?t.mozRequestFullScreenWithKeys():t.webkitRequestFullscreen?t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):ti(t):ti(t)))},Jo.prototype.u=function(){var t=this.element.firstElementChild,e=this.a;Qo()?(t.className=this.f+"-true",$o(this.o,this.l)):(t.className=this.f+"-false",$o(this.l,this.o)),e&&e.Yc()},Jo.prototype.setMap=function(t){qo.prototype.setMap.call(this,t),t&&this.s.push(E(document,Ad(),this.u,this))};var Ad=function(){var t;return function(){if(!t){var e=document.body;e.webkitRequestFullscreen?t="webkitfullscreenchange":e.mozRequestFullScreen?t="mozfullscreenchange":e.msRequestFullscreen?t="MSFullscreenChange":e.requestFullscreen&&(t="fullscreenchange")}return t}}();e(ei,qo),ei.prototype.C=function(t){if(t.preventDefault(),void 0!==this.l)this.l();else{t=this.a;var e=t.$();if(e){var o=e.Pa();void 0!==o&&(0<this.o&&(o%=2*Math.PI,o<-Math.PI&&(o+=2*Math.PI),o>Math.PI&&(o-=2*Math.PI),t.ab(uo({rotation:o,duration:this.o,easing:so}))),e.ie(0))}}},e(ii,qo),ii.prototype.j=function(t,e){e.preventDefault();var o=this.a,i=o.$();if(i){var r=i.Ma();r&&(0<this.f&&o.ab(co({resolution:r,duration:this.f,easing:so})),o=i.constrainResolution(r,t),i.Yb(o))}},e(ni,qo),od=ni.prototype,od.Sl=function(){this.j=null},od.wg=function(){return this.get(Rd)},od.Zg=function(){return this.get(Ld)},od.Jk=function(t){this.l=this.a.Ud(t),pi(this,this.l)},od.Kk=function(){pi(this,null),this.l=null},od.setMap=function(t){qo.prototype.setMap.call(this,t),t&&(t=t.a,this.s.push(E(t,"mousemove",this.Jk,this),E(t,"mouseout",this.Kk,this)))},od.Uh=function(t){this.set(Rd,t)},od.$g=function(t){this.set(Ld,t)};var jd,Nd,Ld="projection",Rd="coordinateFormat",kd=["experimental-webgl","webgl","webkit-3d","moz-webgl"],Id="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",Dd=-1!==Id.indexOf("firefox"),Od=-1!==Id.indexOf("safari")&&-1==Id.indexOf("chrom"),Fd=-1!==Id.indexOf("webkit")&&-1==Id.indexOf("edge"),Bd=-1!==Id.indexOf("macintosh"),Ud=window.devicePixelRatio||1,Gd=!1,Hd=function(){if(!("HTMLCanvasElement"in window))return!1;try{var t=document.createElement("CANVAS").getContext("2d");return!!t&&(void 0!==t.setLineDash&&(Gd=!0),!0)}catch(e){return!1}}(),Xd="DeviceOrientationEvent"in window,Wd="geolocation"in navigator,$d="ontouchstart"in window,Kd="PointerEvent"in window,zd=!!navigator.msPointerEnabled,qd=!1,Vd=[];if("WebGLRenderingContext"in window)try{var Yd=ai(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Yd&&(qd=!0,Nd=Yd.getParameter(Yd.MAX_TEXTURE_SIZE),Vd=Yd.getSupportedExtensions())}catch(Zd){}jd=qd,rd=Vd,id=Nd,e(li,hi),od=li.prototype,od.dl=function(t){if(!ui(this,t)){if(1..toString()in this.a){var e=ci(t);Li(this.b,"pointercancel",e,t),delete this.a[1..toString()]}e=ci(t),this.a[1..toString()]=t,Li(this.b,"pointerdown",e,t)}},od.el=function(t){if(!ui(this,t)){var e=ci(t);Li(this.b,"pointermove",e,t)}},od.hl=function(t){if(!ui(this,t)){var e=this.a[1..toString()];e&&e.button===t.button&&(e=ci(t),Li(this.b,"pointerup",e,t),delete this.a[1..toString()])}},od.gl=function(t){if(!ui(this,t)){var e=ci(t);Ni(this.b,e,t)}},od.fl=function(t){if(!ui(this,t)){var e=ci(t);ji(this.b,e,t)}},e(fi,hi),od=fi.prototype,od.ml=function(t){this.a[t.pointerId.toString()]=t;var e=yi(this,t);Li(this.b,"pointerdown",e,t)},od.nl=function(t){var e=yi(this,t);Li(this.b,"pointermove",e,t)},od.ql=function(t){var e=yi(this,t);Li(this.b,"pointerup",e,t),delete this.a[t.pointerId.toString()]},od.ol=function(t){var e=yi(this,t);ji(this.b,e,t)},od.pl=function(t){var e=yi(this,t);Ni(this.b,e,t)},od.ll=function(t){var e=yi(this,t);Li(this.b,"pointercancel",e,t),delete this.a[t.pointerId.toString()]},od.kl=function(t){this.b.b(new gi("lostpointercapture",t,t))},od.jl=function(t){this.b.b(new gi("gotpointercapture",t,t))},e(di,hi),od=di.prototype,od.Zn=function(t){Ri(this.b,t)},od.$n=function(t){Ri(this.b,t)},od.co=function(t){Ri(this.b,t)},od.ao=function(t){Ri(this.b,t)},od.bo=function(t){Ri(this.b,t)},od.Yn=function(t){Ri(this.b,t)},od.cl=function(t){Ri(this.b,t);
-},od.uk=function(t){Ri(this.b,t)},e(gi,L);var Jd=!1;try{Jd=1===new MouseEvent("click",{buttons:1}).buttons}catch(Zd){}e(bi,hi),od=bi.prototype,od.Sh=function(){this.i=0,this.f=void 0},od.ep=function(t){var e=t.touches,o=Object.keys(this.a),i=o.length;if(i>=e.length){var r,n,s,p=[];for(r=0;r<i;++r){n=o[r],s=this.a[n];var a;if(!(a=1==n))t:{a=e.length;for(var h,l=0;l<a;l++)if(h=e[l],h.identifier===n-2){a=!0;break t}a=!1}a||p.push(s.out)}for(r=0;r<p.length;++r)this.Re(t,p[r])}e=t.changedTouches[0],o=Object.keys(this.a).length,(0===o||1===o&&1..toString()in this.a)&&(this.g=e.identifier,void 0!==this.f&&clearTimeout(this.f)),Si(this,t),this.i++,xi(this,t,this.Un)},od.Un=function(t,e){this.a[e.pointerId]={target:e.target,out:e,Ch:e.target};var o=this.b;e.bubbles=!0,Li(o,"pointerover",e,t),o=this.b,e.bubbles=!1,Li(o,"pointerenter",e,t),Li(this.b,"pointerdown",e,t)},od.cp=function(t){t.preventDefault(),xi(this,t,this.il)},od.il=function(t,e){var o=this.a[e.pointerId];if(o){var i=o.out,r=o.Ch;Li(this.b,"pointermove",e,t),i&&r!==e.target&&(i.relatedTarget=e.target,e.relatedTarget=r,i.target=r,e.target?(ji(this.b,i,t),Ni(this.b,e,t)):(e.target=r,e.relatedTarget=null,this.Re(t,e))),o.out=e,o.Ch=e.target}},od.bp=function(t){Si(this,t),xi(this,t,this.fp)},od.fp=function(t,e){Li(this.b,"pointerup",e,t),this.b.out(e,t),Ai(this.b,e,t),delete this.a[e.pointerId],e.isPrimary&&(this.g=void 0,this.f=setTimeout(this.Sh.bind(this),200))},od.ap=function(t){xi(this,t,this.Re)},od.Re=function(t,e){Li(this.b,"pointercancel",e,t),this.b.out(e,t),Ai(this.b,e,t),delete this.a[e.pointerId],e.isPrimary&&(this.g=void 0,this.f=setTimeout(this.Sh.bind(this),200))},e(Ti,k),Ti.prototype.f=function(t){var e=this.c[t.type];e&&e(t)},Ti.prototype.out=function(t,e){t.bubbles=!0,Li(this,"pointerout",t,e)},Ti.prototype.la=function(){for(var t,e=this.a.length,o=0;o<e;o++)t=this.a[o],Ci(this,Object.keys(t.c));k.prototype.la.call(this)};var _d=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",!1],["type",""],["target",null],["currentTarget",null],["which",0]];e(ki,zo),ki.prototype.preventDefault=function(){zo.prototype.preventDefault.call(this),this.originalEvent.preventDefault()},ki.prototype.stopPropagation=function(){zo.prototype.stopPropagation.call(this),this.originalEvent.stopPropagation()},e(Ii,ki),e(Di,k),od=Di.prototype,od.Kg=function(t){Fi(this,t);var e=new Ii(ng,this.f,t);this.b(e),!this.l&&0===t.button&&Oi(this,this.g),0===this.u&&(this.c.forEach(P),this.c.length=0,this.l=!1,this.g=null,N(this.a),this.a=null)},od.Mk=function(t){Fi(this,t);var e=new Ii(rg,this.f,t);this.b(e),this.g=t,0===this.c.length&&(this.a=new Ti(document),this.c.push(E(this.a,ig,this.Fl,this),E(this.a,ng,this.Kg,this),E(this.i,sg,this.Kg,this)))},od.Fl=function(t){if(t.clientX!=this.g.clientX||t.clientY!=this.g.clientY){this.l=!0;var e=new Ii(og,this.f,t,this.l);this.b(e)}t.preventDefault()},od.Co=function(t){this.b(new Ii(t.type,this.f,t,(!(!this.g||t.clientX==this.g.clientX&&t.clientY==this.g.clientY))))},od.la=function(){this.s&&(P(this.s),this.s=null),this.o&&(P(this.o),this.o=null),this.c.forEach(P),this.c.length=0,this.a&&(N(this.a),this.a=null),this.i&&(N(this.i),this.i=null),k.prototype.la.call(this)};var Qd="singleclick",tg="click",eg="dblclick",og="pointerdrag",ig="pointermove",rg="pointerdown",ng="pointerup",sg="pointercancel",pg={xp:Qd,mp:tg,np:eg,qp:og,tp:ig,pp:rg,wp:ng,vp:"pointerover",up:"pointerout",rp:"pointerenter",sp:"pointerleave",op:sg};e(Bi,k),Bi.prototype.Xa=function(){return this.key+"/"+this.ya},Bi.prototype.i=function(){return this.ya},Bi.prototype.U=function(){return this.state};var ag=2;Hi.prototype.clear=function(){this.b.length=0,this.g.length=0,g(this.a)},Hi.prototype.c=function(t){n(!(this.f(t)in this.a),31);var e=this.o(t);return 1/0!=e&&(this.b.push(t),this.g.push(e),this.a[this.f(t)]=!0,$i(this,0,this.b.length-1),!0)},e(zi,Hi),zi.prototype.c=function(t){var e=Hi.prototype.c.call(this,t);return e&&E(t[0],"change",this.l,this),e},zi.prototype.l=function(t){t=t.target;var e=t.U();e!==ag&&3!==e&&4!==e&&5!==e||(C(t,"change",this.l,this),t=t.Xa(),t in this.i&&(delete this.i[t],--this.j),this.s())},e(Zi,B),Zi.prototype.f=function(){return this.get(hg)},Zi.prototype.c=function(){return this.s},Zi.prototype.Ba=function(t){this.set(hg,t)},Zi.prototype.setMap=function(t){this.s=t};var hg="active";e(tr,Zi),e(ur,Zi),ur.prototype.Fc=function(t){return t},e(yr,ur),yr.prototype.Fc=qt,e(mr,ur),mr.prototype.Fc=qt,e(Sr,j),Sr.prototype.la=function(){this.setMap(null)},Sr.prototype.setMap=function(t){if(this.b){this.b.C.removeChild(this.a);var e=this.a.style;e.left=e.top=e.width=e.height="inherit"}(this.b=t)&&this.b.C.appendChild(this.a)},Sr.prototype.V=function(){return this.f},e(Mr,ur),Mr.prototype.V=function(){return this.a.V()},Mr.prototype.o=o;var lg="boxstart",ug="boxdrag",cg="boxend";e(Nr,L),e(Lr,Mr),Lr.prototype.o=function(){var t=this.s,e=t.$(),o=t.kb(),i=this.V().D();if(this.G){var r,n,s=e.Jc(o),i=[t.Ca(kt(i)),t.Ca(Gt(i))],p=Et(1/0,1/0,-(1/0),-(1/0),void 0);for(r=0,n=i.length;r<n;++r)jt(p,i[r]);$t(s,1/to(p,o)),i=s}o=e.constrainResolution(to(i,o)),s=e.Ma(),p=e.bb(),t.ab(co({resolution:s,duration:this.j,easing:so})),t.ab(lo({source:p,duration:this.j,easing:so})),e.rb(Dt(i)),e.Yb(o)},e(Rr,Zi),e(Ir,Zi),e(Or,Zi),Or.prototype.u=function(t){var e=s(this.i,-1,1),o=t.$();_i(t,o,-e,this.a,this.C),this.i=0,this.a=null,this.l=this.j=void 0},Or.prototype.B=function(t){this.o=t,t||(this.a=null)},e(Br,ur),Br.prototype.Fc=qt,e(Xr,ur),Xr.prototype.Fc=qt,e(qr,B),od=qr.prototype,od.D=function(){return this.get("extent")},od.Pb=function(){return this.get("maxResolution")},od.Qb=function(){return this.get("minResolution")},od.Rb=function(){return this.get("opacity")},od.zb=function(){return this.get("visible")},od.Sb=function(){return this.get("zIndex")},od.fc=function(t){this.set("extent",t)},od.lc=function(t){this.set("maxResolution",t)},od.mc=function(t){this.set("minResolution",t)},od.gc=function(t){this.set("opacity",t)},od.hc=function(t){this.set("visible",t)},od.ic=function(t){this.set("zIndex",t)},e(Yr,qr),od=Yr.prototype,od.be=function(){this.zb()&&this.v()},od.Fk=function(){this.c.forEach(P),this.c.length=0;var t=this.Qc();this.c.push(E(t,xd,this.Ek,this),E(t,Sd,this.Gk,this));for(var e in this.f)this.f[e].forEach(P);g(this.f);var o,r,t=t.a;for(e=0,o=t.length;e<o;e++)r=t[e],this.f[i(r).toString()]=[E(r,"propertychange",this.be,this),E(r,"change",this.be,this)];this.v()},od.Ek=function(t){t=t.element;var e=i(t).toString();this.f[e]=[E(t,"propertychange",this.be,this),E(t,"change",this.be,this)],this.v()},od.Gk=function(t){t=i(t.element).toString(),this.f[t].forEach(P),delete this.f[t],this.v()},od.Qc=function(){return this.get(fg)},od.gh=function(t){this.set(fg,t)},od.ff=function(t){var e=void 0!==t?t:[],o=e.length;this.Qc().forEach(function(t){t.ff(e)}),t=Vr(this);var i,r;for(i=e.length;o<i;o++)r=e[o],r.opacity*=t.opacity,r.visible=r.visible&&t.visible,r.maxResolution=Math.min(r.maxResolution,t.maxResolution),r.minResolution=Math.max(r.minResolution,t.minResolution),void 0!==t.extent&&(r.extent=void 0!==r.extent?Bt(r.extent,t.extent):t.extent);return e},od.hf=function(){return"ready"};var fg="layers";e(Zr,Yt),Zr.prototype.getPointResolution=function(t,e){return t/ad(e[1]/6378137)};var yg=6378137*Math.PI,dg=[-yg,-yg,yg,yg],gg=[-180,-85,180,85],vg="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(t){return new Zr(t)}),mg=new Vt(6378137);e(Qr,Yt),Qr.prototype.getPointResolution=function(t){return t};var bg=[-180,-90,180,90],wg=Math.PI*mg.radius/180,xg=[new Qr("CRS:84"),new Qr("EPSG:4326","neu"),new Qr("urn:ogc:def:crs:EPSG::4326","neu"),new Qr("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new Qr("urn:ogc:def:crs:OGC:1.3:CRS84"),new Qr("urn:ogc:def:crs:OGC:2:84"),new Qr("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new Qr("urn:x-ogc:def:crs:EPSG:4326","neu")];e(en,L),e(on,qr),od=on.prototype,od.ff=function(t){return t=t?t:[],t.push(Vr(this)),t},od.ga=function(){return this.get("source")||null},od.hf=function(){var t=this.ga();return t?t.U():"undefined"},od.zm=function(){this.v()},od.Sk=function(){this.C&&(P(this.C),this.C=null);var t=this.ga();t&&(this.C=E(t,"change",this.zm,this)),this.v()},od.setMap=function(t){this.o&&(P(this.o),this.o=null),t||this.v(),this.s&&(P(this.s),this.s=null),t&&(this.o=E(t,"precompose",function(t){var e=Vr(this);e.sd=!1,e.zIndex=1/0,t.frameState.layerStatesArray.push(e),t.frameState.layerStates[i(this)]=e},this),this.s=E(this,"change",t.render,t),this.v())},od.Ec=function(t){this.set("source",t)},nn.prototype.clear=function(){this.b={},this.a=0},nn.prototype.get=function(t,e,o){return t=e+":"+t+":"+(o?Go(o):"null"),t in this.b?this.b[t]:null},nn.prototype.set=function(t,e,o,i){this.b[e+":"+t+":"+(o?Go(o):"null")]=i,++this.a};var Sg=new nn,Tg=Array(6);e(vn,j),od=vn.prototype,od.la=function(){for(var t in this.f)N(this.f[t])},od.xa=function(t,e,o,r,n,s){function p(t,n){var s=i(t).toString(),p=e.layerStates[i(n)].sd;if(!(s in e.skippedFeatureUids)||p)return o.call(r,t,p?n:null)}var a,h=e.viewState,l=h.resolution,u=h.projection,h=t;if(u.a){var u=u.D(),c=Ht(u),f=t[0];(f<u[0]||f>u[2])&&(h=[f+c*Math.ceil((u[0]-f)/c),t[1]])}for(u=e.layerStatesArray,c=u.length-1;0<=c;--c){var y=u[c],f=y.layer;if(rn(y,l)&&n.call(s,f)&&(y=wn(this,f),f.ga()&&(a=y.xa(f.ga().G?h:t,e,p,r)),a))return a}},od.jh=function(t,e,o,i,r,n){var s,p,a=e.viewState.resolution,h=e.layerStatesArray;for(p=h.length-1;0<=p;--p){s=h[p];var l=s.layer;if(rn(s,a)&&r.call(n,l)&&(s=wn(this,l).Bc(t,e,o,i)))return s}},od.kh=function(t,e,o,i){return void 0!==this.xa(t,e,zt,this,o,i)},od.Dk=function(){this.l.render()},od.Pf=o,od.Io=function(t,e){for(var o in this.f)if(!(e&&o in e.layerStates)){var i=o,r=this.f[i];delete this.f[i],P(this.s[i]),delete this.s[i],N(r)}},e(Tn,on),e(En,on),En.prototype.f=function(){return this.get(Eg)},En.prototype.l=function(t){this.set(Eg,t)},En.prototype.c=function(){return this.get(Mg)},En.prototype.B=function(t){this.set(Mg,t)};var Eg="preload",Mg="useInterimTilesOnError";e(Mn,k),Mn.prototype.D=function(){return this.extent},Mn.prototype.U=function(){return this.state},e(Pn,Mn),Pn.prototype.a=function(t){if(void 0!==t){var e;return t=i(t),t in this.i?this.i[t]:(e=m(this.i)?this.g:this.g.cloneNode(!1),this.i[t]=e)}return this.g},Pn.prototype.s=function(){this.state=jg,this.c.forEach(P),this.c=null,Cn(this)},Pn.prototype.T=function(){void 0===this.resolution&&(this.resolution=Ft(this.extent)/this.g.height),this.state=Ag,this.c.forEach(P),this.c=null,Cn(this)},Pn.prototype.load=function(){this.state!=Cg&&this.state!=jg||(this.state=Pg,Cn(this),this.c=[M(this.g,"error",this.s,this),M(this.g,"load",this.T,this)],this.l(this,this.o))};var Cg=0,Pg=1,Ag=2,jg=3,Ng=[0,0,0,1],Lg=[],Rg=[0,0,0,1];od=jn.prototype,od.qe=function(){return this.l},od.re=function(){return this.T},od.se=function(){return this.o},od.te=function(){return this.c},od.Xd=function(){return this.u},od.Rc=function(t){this.l=t},od.ue=function(t){this.o=t},od.Sc=function(t){this.c=t},e(Nn,jn),od=Nn.prototype,od.clone=function(){var t=new Nn({fill:this.g?this.g.clone():void 0,stroke:this.b?this.b.clone():void 0,radius:this.a,snapToPixel:this.u,atlasManager:this.s});return t.Rc(this.l),t.Sc(this.c),t},od.cc=function(){return this.B},od.nn=function(){return this.g},od.pe=function(){return this.j},od.Tb=function(){return this.f},od.vd=function(){return Ag},od.md=function(){return this.G},od.jc=function(){return this.S},od.pn=function(){return this.a},od.Gb=function(){return this.na},od.qn=function(){return this.b},od.rn=function(t){this.a=t,Ln(this,this.s)},od.pf=o,od.load=o,od.Uf=o,od.wh=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),e.arc(t.size/2,t.size/2,this.a,0,2*Math.PI,!0),this.g&&(e.fillStyle=Xo(this.g.b),e.fill()),this.b&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.Dd,t.lineDash&&e.setLineDash(t.lineDash),e.stroke()),e.closePath()},od.vh=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),e.arc(t.size/2,t.size/2,this.a,0,2*Math.PI,!0),e.fillStyle=Go(Ng),e.fill(),this.b&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.Dd,t.lineDash&&e.setLineDash(t.lineDash),e.stroke()),e.closePath()},Rn.prototype.clone=function(){var t=this.b;return new Rn({color:t&&t.slice?t.slice():t||void 0})},Rn.prototype.g=function(){return this.b},Rn.prototype.f=function(t){this.b=t,this.a=void 0},od=In.prototype,od.clone=function(){var t=this.a;return new In({color:t&&t.slice?t.slice():t||void 0,lineCap:this.c,lineDash:this.g?this.g.slice():void 0,lineJoin:this.i,miterLimit:this.j,width:this.f})},od.zn=function(){return this.a},od.Sj=function(){return this.c},od.An=function(){return this.g},od.Tj=function(){return this.i},od.Yj=function(){return this.j},od.Bn=function(){return this.f},od.Cn=function(t){this.a=t,this.b=void 0},od.So=function(t){this.c=t,this.b=void 0},od.setLineDash=function(t){this.g=t,this.b=void 0},od.To=function(t){this.i=t,this.b=void 0},od.Uo=function(t){this.j=t,this.b=void 0},od.Xo=function(t){this.f=t,this.b=void 0},od=On.prototype,od.clone=function(){var t=this.V();return t&&t.clone&&(t=t.clone()),new On({geometry:t,fill:this.f?this.f.clone():void 0,image:this.a?this.a.clone():void 0,stroke:this.g?this.g.clone():void 0,text:this.Fa()?this.Fa().clone():void 0,zIndex:this.b})},od.V=function(){return this.i},od.Nj=function(){return this.c},od.Dn=function(){return this.f},od.En=function(){return this.a},od.Fn=function(){return this.g},od.Fa=function(){return this.j},od.Gn=function(){return this.b},od.zh=function(t){"function"==typeof t?this.c=t:"string"==typeof t?this.c=function(e){return e.get(t)}:t?t&&(this.c=function(){return t}):this.c=Gn,this.i=t},od.Hn=function(t){this.b=t};var kg=null;e(Hn,on),Hn.prototype.G=function(){return this.B},Hn.prototype.S=function(){return this.j},Hn.prototype.l=function(t){this.B=void 0!==t?t:Bn,this.j=null===t?void 0:Fn(this.B),this.v()},e(Xn,Hn),Xn.prototype.f=function(){return this.get(Ig)},Xn.prototype.c=function(){return this.get(Dg)},Xn.prototype.P=function(t){this.set(Eg,t)},Xn.prototype.W=function(t){this.set(Mg,t)};var Ig="preload",Dg="useInterimTilesOnError",Og="image",Fg="hybrid",Bg="vector";e($n,Wn),od=$n.prototype,od.Rd=function(t){if(Xt(this.c,t.D())){if(this.a||this.b){this.a&&Yn(this,this.a),this.b&&Zn(this,this.b);var e;e=this.B;var o=this.u,i=t.ka();e=i?fe(i,0,i.length,t.sa(),e,o):null,o=e[2]-e[0],i=e[3]-e[1],o=Math.sqrt(o*o+i*i),i=this.f,i.beginPath(),i.arc(e[0],e[1],o,0,2*Math.PI),this.a&&i.fill(),this.b&&i.stroke()}""!==this.g&&zn(this,t.td(),2,2)}},od.ud=function(t){this.Vb(t.f,t.g),this.Xb(t.a),this.Zb(t.Fa())},od.pc=function(t){switch(t.X()){case"Point":this.rc(t);break;case"LineString":this.kd(t);break;case"Polygon":this.Ze(t);break;case"MultiPoint":this.qc(t);break;case"MultiLineString":this.Xe(t);break;case"MultiPolygon":this.Ye(t);break;case"GeometryCollection":this.We(t);break;case"Circle":this.Rd(t)}},od.Ve=function(t,e){var o=(0,e.c)(t);o&&Xt(this.c,o.D())&&(this.ud(e),this.pc(o))},od.We=function(t){t=t.f;var e,o;for(e=0,o=t.length;e<o;++e)this.pc(t[e])},od.rc=function(t){var e=t.ka();t=t.sa(),this.i&&Kn(this,e,e.length),""!==this.g&&zn(this,e,e.length,t)},od.qc=function(t){var e=t.ka();t=t.sa(),this.i&&Kn(this,e,e.length),""!==this.g&&zn(this,e,e.length,t)},od.kd=function(t){if(Xt(this.c,t.D())){if(this.b){Zn(this,this.b);var e=this.f,o=t.ka();e.beginPath(),qn(this,o,0,o.length,t.sa(),!1),e.stroke()}""!==this.g&&(t=eh(t),zn(this,t,2,2))}},od.Xe=function(t){var e=t.D();if(Xt(this.c,e)){if(this.b){Zn(this,this.b);var e=this.f,o=t.ka(),i=0,r=t.Eb(),n=t.sa();e.beginPath();var s,p;for(s=0,p=r.length;s<p;++s)i=qn(this,o,i,r[s],n,!1);e.stroke()}""!==this.g&&(t=ih(t),zn(this,t,t.length,2))}},od.Ze=function(t){if(Xt(this.c,t.D())){if(this.b||this.a){this.a&&Yn(this,this.a),this.b&&Zn(this,this.b);var e=this.f;e.beginPath(),Vn(this,t.Ob(),0,t.Eb(),t.sa()),this.a&&e.fill(),this.b&&e.stroke()}""!==this.g&&(t=qe(t),zn(this,t,2,2))}},od.Ye=function(t){if(Xt(this.c,t.D())){if(this.b||this.a){this.a&&Yn(this,this.a),this.b&&Zn(this,this.b);var e,o,i=this.f,r=ah(t),n=0,s=t.c,p=t.sa();for(i.beginPath(),e=0,o=s.length;e<o;++e)n=Vn(this,r,n,s[e],p);this.a&&i.fill(),this.b&&i.stroke()}""!==this.g&&(t=ph(t),zn(this,t,t.length,2))}},od.Vb=function(t,e){if(t){var o=t.b;this.a={fillStyle:Xo(o?o:Ng)}}else this.a=null;if(e){var o=e.a,i=e.c,r=e.g,n=e.i,s=e.f,p=e.j;this.b={lineCap:void 0!==i?i:"round",lineDash:r?r:Lg,lineJoin:void 0!==n?n:"round",lineWidth:this.C*(void 0!==s?s:1),miterLimit:void 0!==p?p:10,strokeStyle:Xo(o?o:Rg)}}else this.b=null},od.Xb=function(t){if(t){var e=t.cc(),o=t.Tb(1),i=t.jc(),r=t.Gb();this.G=e[0],this.S=e[1],this.na=r[1],this.i=o,this.T=t.l,this.$a=i[0],this.fa=i[1],this.ra=t.T,this.Ib=t.o,this.j=t.c,this.oa=t.u,this.za=r[0]}else this.i=null},od.Zb=function(t){if(t){var e=t.b;e?(e=e.b,this.l={fillStyle:Xo(e?e:Ng)}):this.l=null;var o=t.f;if(o){var e=o.a,i=o.c,r=o.g,n=o.i,s=o.f,o=o.j;this.s={lineCap:void 0!==i?i:"round",lineDash:r?r:Lg,lineJoin:void 0!==n?n:"round",lineWidth:void 0!==s?s:1,miterLimit:void 0!==o?o:10,strokeStyle:Xo(e?e:Rg)}}else this.s=null;var e=t.g,i=t.c,r=t.i,n=t.s,s=t.j,o=t.a,p=t.Fa(),a=t.l;t=t.o,this.P={font:void 0!==e?e:"10px sans-serif",textAlign:void 0!==a?a:"center",textBaseline:void 0!==t?t:"middle"},this.g=void 0!==p?p:"",this.Ka=void 0!==i?this.C*i:0,this.Aa=void 0!==r?this.C*r:0,this.La=void 0!==n&&n,this.ub=void 0!==s?s:0,this.o=this.C*(void 0!==o?o:1)}else this.g=""},e(Jn,D),od=Jn.prototype,od.xa=o,od.Bc=function(t,e,o,i){if(t=un(e.pixelToCoordinateTransform,t.slice()),this.xa(t,e,zt,this))return o.call(i,this.a,null)},od.le=qt,od.Ue=function(t,e,o){return function(i,r){return Jf(t,e,i,r,function(t){o[i]||(o[i]={}),o[i][t.ya.toString()]=t})}},od.Cm=function(t){t.target.U()===Ag&&Qn(this)},e(ns,Jn),ns.prototype.i=function(t,e,o){ps(this,"precompose",o,t,void 0);var i=this.f?this.f.a():null;if(i){var r=e.extent,n=void 0!==r;n&&ss(o,t,r);var r=this.s,s=o.globalAlpha;o.globalAlpha=e.opacity,o.drawImage(i,0,0,+i.width,+i.height,Math.round(r[4]),Math.round(r[5]),Math.round(i.width*r[0]),Math.round(i.height*r[3])),o.globalAlpha=s,n&&o.restore()}as(this,o,t)},e(us,Wn),us.prototype.Za=function(t,e,o,i,r){ds(this,t,e,o,i,r,this.a,void 0,void 0)},us.prototype.ke=o,us.prototype.af=function(){return this.W},e(ms,us),ms.prototype.rc=function(t,e){if(this.j){fs(this,e);var o=t.ka(),i=this.coordinates.length,o=cs(this,o,0,o.length,t.sa(),!1,!1);this.a.push([4,i,o,this.j,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]),this.b.push([4,i,o,this.za,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]),vs(this,e)}},ms.prototype.qc=function(t,e){if(this.j){fs(this,e);var o=t.ka(),i=this.coordinates.length,o=cs(this,o,0,o.length,t.sa(),!1,!1);this.a.push([4,i,o,this.j,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]),this.b.push([4,i,o,this.za,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]),vs(this,e)}},ms.prototype.ke=function(){gs(this),this.c=this.g=void 0,this.j=this.za=null,this.G=this.B=this.u=this.T=this.s=this.o=this.l=this.C=this.i=void 0},ms.prototype.Xb=function(t){var e=t.cc(),o=t.Gb(),i=t.pe(1),r=t.Tb(1),n=t.jc();this.g=e[0],this.c=e[1],this.za=i,this.j=r,this.i=o[1],this.l=t.l,this.o=n[0],this.s=n[1],this.T=t.T,this.u=t.o,this.C=t.c,this.B=t.u,this.G=o[0]},e(bs,us),od=bs.prototype,od.af=function(){return this.c||(this.c=vt(this.W),0<this.f&&gt(this.c,this.resolution*(this.f+1)/2,this.c)),this.c},od.kd=function(t,e){var o=this.g,i=o.lineWidth;void 0!==o.strokeStyle&&void 0!==i&&(xs(this),fs(this,e),this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash],[1]),o=t.ka(),ws(this,o,0,o.length,t.sa()),this.b.push([12]),vs(this,e))},od.Xe=function(t,e){var o=this.g,i=o.lineWidth;if(void 0!==o.strokeStyle&&void 0!==i){xs(this),fs(this,e),this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash],[1]);var r,n,o=t.Eb(),i=t.ka(),s=t.sa(),p=0;for(r=0,n=o.length;r<n;++r)p=ws(this,i,p,o[r],s);this.b.push([12]),vs(this,e)}},od.ke=function(){this.g.nf!=this.coordinates.length&&this.a.push([12]),gs(this),this.g=null},od.Vb=function(t,e){var o=e.a;this.g.strokeStyle=Xo(o?o:Rg),o=e.c,this.g.lineCap=void 0!==o?o:"round",o=e.g,this.g.lineDash=o?o:Lg,o=e.i,this.g.lineJoin=void 0!==o?o:"round",o=e.f,this.g.lineWidth=void 0!==o?o:1,o=e.j,this.g.miterLimit=void 0!==o?o:10,this.g.lineWidth>this.f&&(this.f=this.g.lineWidth,this.c=null)},e(Ss,us),od=Ss.prototype,od.Rd=function(t,e){var o=this.g,i=o.strokeStyle;if(void 0!==o.fillStyle||void 0!==i){Es(this,t),fs(this,e),this.b.push([9,Go(Ng)]),void 0!==o.strokeStyle&&this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash]);var r=t.ka(),i=this.coordinates.length;cs(this,r,0,r.length,t.sa(),!1,!1),r=[1],i=[2,i],this.a.push(r,i),this.b.push(r,i),i=[7],this.b.push(i),void 0!==o.fillStyle&&this.a.push(i),void 0!==o.strokeStyle&&(o=[12],this.a.push(o),this.b.push(o)),vs(this,e)}},od.Ze=function(t,e){var o=this.g;Es(this,t),fs(this,e),this.b.push([9,Go(Ng)]),void 0!==o.strokeStyle&&this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash]);var o=t.Eb(),i=t.Ob();Ts(this,i,0,o,t.sa()),vs(this,e)},od.Ye=function(t,e){var o=this.g,i=o.strokeStyle;if(void 0!==o.fillStyle||void 0!==i){Es(this,t),fs(this,e),this.b.push([9,Go(Ng)]),void 0!==o.strokeStyle&&this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash]);var r,n,o=t.c,i=ah(t),s=t.sa(),p=0;for(r=0,n=o.length;r<n;++r)p=Ts(this,i,p,o[r],s);vs(this,e)}},od.ke=function(){gs(this),this.g=null;var t=this.ra;if(0!==t){var e,o,i=this.coordinates;for(e=0,o=i.length;e<o;++e)i[e]=t*Math.round(i[e]/t)}},od.af=function(){return this.c||(this.c=vt(this.W),0<this.f&&gt(this.c,this.resolution*(this.f+1)/2,this.c)),this.c},od.Vb=function(t,e){var o=this.g;if(t){var i=t.b;o.fillStyle=Xo(i?i:Ng)}else o.fillStyle=void 0;e?(i=e.a,o.strokeStyle=Xo(i?i:Rg),i=e.c,o.lineCap=void 0!==i?i:"round",i=e.g,o.lineDash=i?i.slice():Lg,i=e.i,o.lineJoin=void 0!==i?i:"round",i=e.f,o.lineWidth=void 0!==i?i:1,i=e.j,o.miterLimit=void 0!==i?i:10,o.lineWidth>this.f&&(this.f=o.lineWidth,this.c=null)):(o.strokeStyle=void 0,o.lineCap=void 0,o.lineDash=null,o.lineJoin=void 0,o.lineWidth=void 0,o.miterLimit=void 0)},e(Ms,us),Ms.prototype.Zb=function(t){if(t){var e=t.b;e?(e=e.b,e=Xo(e?e:Ng),this.g?this.g.fillStyle=e:this.g={fillStyle:e}):this.g=null;var o=t.f;if(o){var e=o.a,i=o.c,r=o.g,n=o.i,s=o.f,o=o.j,i=void 0!==i?i:"round",r=r?r.slice():Lg,n=void 0!==n?n:"round",s=void 0!==s?s:1,o=void 0!==o?o:10,e=Xo(e?e:Rg);if(this.c){var p=this.c;p.lineCap=i,p.lineDash=r,p.lineJoin=n,p.lineWidth=s,p.miterLimit=o,p.strokeStyle=e}else this.c={lineCap:i,lineDash:r,lineJoin:n,lineWidth:s,miterLimit:o,strokeStyle:e}}else this.c=null;var a=t.g,e=t.c,i=t.i,r=t.s,s=t.j,o=t.a,n=t.Fa(),p=t.l,h=t.o;t=void 0!==a?a:"10px sans-serif",p=void 0!==p?p:"center",h=void 0!==h?h:"middle",this.i?(a=this.i,a.font=t,a.textAlign=p,a.textBaseline=h):this.i={font:t,textAlign:p,textBaseline:h},this.j=void 0!==n?n:"",this.l=void 0!==e?e:0,this.o=void 0!==i?i:0,this.s=void 0!==r&&r,this.T=void 0!==s?s:0,this.u=void 0!==o?o:1}else this.j=""};var Ug=["Polygon","LineString","Image","Text"];e(Ps,ls),Ps.prototype.xa=function(t,e,o,i,r){var n=dn(this.j,.5,.5,1/e,-1/e,-o,-t[0],-t[1]),s=this.i;s.clearRect(0,0,1,1);var p;return void 0!==this.c&&(p=Tt(),jt(p,t),gt(p,e*this.c,p)),js(this,s,n,o,i,function(t){if(0<s.getImageData(0,0,1,1).data[3]){if(t=r(t))return t;s.clearRect(0,0,1,1)}},p)},Ps.prototype.b=function(t,e){var o=void 0!==t?t.toString():"0",i=this.a[o];return void 0===i&&(i={},this.a[o]=i),o=i[e],void 0===o&&(o=new Gg[e](this.s,this.f,this.o,this.l),i[e]=o),o},Ps.prototype.g=function(){return m(this.a)},Ps.prototype.Za=function(t,e,o,i,r,n){var s=Object.keys(this.a).map(Number);s.sort(H);var p=this.f,a=p[0],h=p[1],l=p[2],p=p[3],a=[a,h,a,p,l,p,l,h];fe(a,0,8,2,o,a),t.save(),t.beginPath(),t.moveTo(a[0],a[1]),t.lineTo(a[2],a[3]),t.lineTo(a[4],a[5]),t.lineTo(a[6],a[7]),t.clip(),n=n?n:Ug;for(var u,c,a=0,h=s.length;a<h;++a)for(u=this.a[s[a].toString()],l=0,p=n.length;l<p;++l)c=u[n[l]],void 0!==c&&c.Za(t,e,o,i,r);t.restore()};var Gg={Image:ms,LineString:bs,Polygon:Ss,Text:Ms},Hg={Point:function(t,e,o,i){var r=o.a;if(r){if(r.vd()!=Ag)return;var n=t.b(o.b,"Image");n.Xb(r),n.rc(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),Cs(t,e.ka(),2,2,i))},LineString:function(t,e,o,i){var r=o.g;if(r){var n=t.b(o.b,"LineString");n.Vb(null,r),n.kd(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),Cs(t,eh(e),2,2,i))},Polygon:function(t,e,o,i){var r=o.f,n=o.g;if(r||n){var s=t.b(o.b,"Polygon");s.Vb(r,n),s.Ze(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),Cs(t,qe(e),2,2,i))},MultiPoint:function(t,e,o,i){var r=o.a;if(r){if(r.vd()!=Ag)return;var n=t.b(o.b,"Image");n.Xb(r),n.qc(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),o=e.ka(),Cs(t,o,o.length,e.sa(),i))},MultiLineString:function(t,e,o,i){var r=o.g;if(r){var n=t.b(o.b,"LineString");n.Vb(null,r),n.Xe(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),e=ih(e),Cs(t,e,e.length,2,i))},MultiPolygon:function(t,e,o,i){var r=o.f,n=o.g;if(n||r){var s=t.b(o.b,"Polygon");s.Vb(r,n),s.Ye(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),e=ph(e),Cs(t,e,e.length,2,i))},GeometryCollection:function(t,e,o,i){e=e.f;var r,n;for(r=0,n=e.length;r<n;++r)(0,Hg[e[r].X()])(t,e[r],o,i)},Circle:function(t,e,o,i){var r=o.f,n=o.g;if(r||n){var s=t.b(o.b,"Polygon");s.Vb(r,n),s.Rd(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),Cs(t,e.td(),2,2,i))}};e(ks,Mn),ks.prototype.i=function(t){this.state=t?jg:Ag,Cn(this)},ks.prototype.load=function(){this.state==Cg&&(this.state=Pg,Cn(this),this.c(this.i.bind(this)))},ks.prototype.a=function(){return this.g};var Xg,Wg=-1<navigator.userAgent.indexOf("OPR"),$g=-1<navigator.userAgent.indexOf("Edge");Xg=!(!navigator.userAgent.match("CriOS")&&"chrome"in window&&"Google Inc."===navigator.vendor&&0==Wg&&0==$g),e(Gs,Mn),Gs.prototype.la=function(){this.state==Pg&&(P(this.Cd),this.Cd=null),Mn.prototype.la.call(this)},Gs.prototype.a=function(){return this.i},Gs.prototype.Bd=function(){var t=this.sb.U();t==Ag&&(this.i=Os(Ht(this.g)/this.c,Ft(this.g)/this.c,this.o,this.sb.resolution,0,this.c,this.g,this.l,[{extent:this.sb.D(),image:this.sb.a()}],0)),this.state=t,Cn(this)},Gs.prototype.load=function(){if(this.state==Cg){this.state=Pg,Cn(this);var t=this.sb.U();t==Ag||t==jg?this.Bd():(this.Cd=E(this.sb,"change",function(){var t=this.sb.U();t!=Ag&&t!=jg||(P(this.Cd),this.Cd=null,this.Bd())},this),this.sb.load())}},e(Hs,B),od=Hs.prototype,od.xa=o,od.va=function(){return this.j},od.ua=function(){return this.S},od.wa=function(){return this.f},od.U=function(){return this.Ka},od.ta=function(){this.v()},od.qa=function(t){this.j=Xs(t),this.v()},e($s,Hs),$s.prototype.W=function(t,e,o,i){var r=this.f;if(r&&i&&!ne(r,i)){if(this.a){if(this.ra==this.g&&ne(this.a.T,i)&&this.a.resolution==e&&this.a.f==o&&Pt(this.a.D(),t))return this.a;N(this.a),this.a=null}return this.a=new Gs(r,i,t,e,o,function(t,e,o){return this.Lc(t,e,o,r)}.bind(this)),this.ra=this.g,this.a}return r&&(i=r),this.Lc(t,e,o,i)},$s.prototype.o=function(t){switch(t=t.target,t.U()){case Pg:this.b(new qs(Kg,t));break;case Ag:this.b(new qs(zg,t));break;case jg:this.b(new qs(qg,t))}},e(qs,L);var Kg="imageloadstart",zg="imageloadend",qg="imageloaderror";e(Vs,$s),Vs.prototype.Lc=function(t,e,o,i){e=Ks(this,e);var r=this.P;return r&&this.Z==this.g&&r.resolution==e&&r.f==o&&wt(r.D(),t)?r:(t=t.slice(),$t(t,this.oa),(i=this.fa(t,e,o,[Ht(t)/e*o,Ft(t)/e*o],i))&&(r=new ks(t,e,o,this.j,i)),this.P=r,this.Z=this.g,r)},e(Ys,Vs),od=Ys.prototype,od.rj=function(t,e,o,i,r){var n=new Ps(.5*e/o,t,e,this.c.Aa,this.Aa);this.c.rd(t,e,r);var s=!1;return this.c.Kb(t,function(t){var i;if(!(i=s)){var r;if((i=t.zc())?r=i.call(t,e):this.s&&(r=this.s(t,e)),r){var p,a=!1;for(Array.isArray(r)||(r=[r]),i=0,p=r.length;i<p;++i)a=Rs(n,t,r[i],Ls(e,o),this.Sm,this)||a;i=a}else i=!1}s=i},this),As(n),s?null:(this.l[0]!=i[0]||this.l[1]!=i[1]?(this.i.canvas.width=i[0],this.i.canvas.height=i[1],this.l[0]=i[0],this.l[1]=i[1]):this.i.clearRect(0,0,i[0],i[1]),t=Zs(this,Dt(t),e,o,i),n.Za(this.i,o,t,0,{}),this.u=n,this.i.canvas)},od.xa=function(t,e,o,r,n){if(this.u){var s={};return this.u.xa(t,e,0,r,function(t){var e=i(t).toString();if(!(e in s))return s[e]=!0,n(t)})}},od.Pm=function(){return this.c},od.Qm=function(){return this.B},od.Rm=function(){return this.s},od.Sm=function(){this.v()},od.Tm=function(){Ws(this,this.c.U())},od.nh=function(t){this.B=void 0!==t?t:Bn,this.s=t?Fn(this.B):void 0,this.v()},e(Js,ns),Js.prototype.xa=function(t,e,o,i){var r=this.a;return r.ga().xa(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,r)})},Js.prototype.Bc=function(t,e,o,i){if(this.f&&this.f.a())if(this.a.ga()instanceof Ys){if(t=un(e.pixelToCoordinateTransform,t.slice()),this.xa(t,e,zt,this))return o.call(i,this.a,null)}else if(this.l||(this.l=gn(this.s.slice())),e=un(this.l,t.slice()),this.c||(this.c=Wo(1,1)),this.c.clearRect(0,0,1,1),this.c.drawImage(this.f?this.f.a():null,e[0],e[1],1,1,0,0,1,1),e=this.c.getImageData(0,0,1,1).data,0<e[3])return o.call(i,this.a,e)},Js.prototype.j=function(t,e){var o=t.pixelRatio,i=t.viewState,r=i.center,n=i.resolution,s=this.a.ga(),p=t.viewHints,a=t.extent;if(void 0!==e.extent&&(a=Bt(a,e.extent)),p[0]||p[1]||Wt(a)||(i=s.W(a,n,o,i.projection))&&_n(this,i)&&(this.f=i),this.f){var i=this.f,p=i.D(),a=i.resolution,h=i.f,n=o*a/(n*h),l=pn(this.s);yn(l,o*t.size[0]/2,o*t.size[1]/2),fn(l,n,n),yn(l,h*(p[0]-r[0])/a,h*(r[1]-p[3])/a),this.l=null,es(t.attributions,i.j),os(t,s)}return!!this.f},e(_s,ns),_s.prototype.i=function(t,e,o){var i=hs(this,t,0);ps(this,"precompose",o,t,i),Qs(this,o,t,e),as(this,o,t,i)},_s.prototype.j=function(t,e){function o(t){return t=t.U(),t==ag||4==t||3==t&&!v}var i=t.pixelRatio,r=t.viewState,n=r.projection,s=this.a,p=s.ga(),a=p.pb(n),r=a.wc(r.resolution,this.B),h=a.Ga(r),l=t.extent;if(void 0!==e.extent&&(l=Bt(l,e.extent)),Wt(l))return!1;var h=Co(a,l,h),u={};u[r]={};var c,f,y,d,g=this.Ue(p,n,u),v=s.c(),m=this.o,b=new fo(0,0,0,0);for(y=h.ba;y<=h.da;++y)for(d=h.ea;d<=h.ha;++d)c=p.vc(r,y,d,i,n),o(c)||(c=Gi(c)),o(c)?u[r][c.ya.toString()]=c:(f=Eo(a,c.ya,g,b,m),f||(c=Mo(a,c.ya,b,m))&&g(r+1,c));g=Object.keys(u).map(Number),g.sort(H),m=this.l,m.length=0;var w,b=0;for(y=g.length;b<y;++b)for(w in c=g[b],d=u[c])c=d[w],c.U()==ag&&m.push(c);return is(t.usedTiles,p,r,h),rs(t,p,a,i,n,l,r,s.f()),ts(t,p),os(t,p),!0},_s.prototype.Bc=function(t,e,o,i){var r=this.c.canvas,n=e.size,s=e.pixelRatio;if(r.width=n[0]*s,r.height=n[1]*s,this.i(e,Vr(this.a),this.c),t=this.c.getImageData(t[0],t[1],1,1).data,0<t[3])return o.call(i,this.a,t)},e(tp,ns),tp.prototype.i=function(t,e,o){var i=t.extent,r=t.pixelRatio,n=e.sd?t.skippedFeatureUids:{},s=t.viewState,p=s.projection,s=s.rotation,a=p.D(),h=this.a.ga(),l=hs(this,t,0);ps(this,"precompose",o,t,l);var u=e.extent,c=void 0!==u;if(c&&ss(o,t,u),(u=this.l)&&!u.g()){var f,y=0,d=0;if(I(this.a,"render")){f=o.canvas.width;var g=o.canvas.height;if(s){var v=Math.round(Math.sqrt(f*f+g*g)),y=(v-f)/2,d=(v-g)/2;f=g=v}this.o.canvas.width=f,this.o.canvas.height=g,f=this.o}else f=o;if(g=f.globalAlpha,f.globalAlpha=e.opacity,f!=o&&f.translate(y,d),e=t.size[0]*r,v=t.size[1]*r,An(f,-s,e/2,v/2),u.Za(f,r,l,s,n),h.G&&p.a&&!wt(a,i)){for(var p=i[0],h=Ht(a),m=0;p<a[0];)--m,l=h*m,l=hs(this,t,l),u.Za(f,r,l,s,n),p+=h;for(m=0,p=i[2];p>a[2];)++m,l=h*m,l=hs(this,t,l),u.Za(f,r,l,s,n),p-=h;l=hs(this,t,0)}An(f,s,e/2,v/2),f!=o&&(ps(this,"render",f,t,l),
-o.drawImage(f.canvas,-y,-d),f.translate(-y,-d)),f.globalAlpha=g}c&&o.restore(),as(this,o,t,l)},tp.prototype.xa=function(t,e,o,r){if(this.l){var n=this.a,s={};return this.l.xa(t,e.viewState.resolution,e.viewState.rotation,{},function(t){var e=i(t).toString();if(!(e in s))return s[e]=!0,o.call(r,t,n)})}},tp.prototype.G=function(){Qn(this)},tp.prototype.j=function(t){function e(t){var e,i=t.zc();if(i?e=i.call(t,h):(i=o.j)&&(e=i(t,h)),e){if(e){if(i=!1,Array.isArray(e))for(var r=0,n=e.length;r<n;++r)i=Rs(c,t,e[r],Ls(h,l),this.G,this)||i;else i=Rs(c,t,e,Ls(h,l),this.G,this)||i;t=i}else t=!1;this.c=this.c||t}}var o=this.a,i=o.ga();es(t.attributions,i.j),os(t,i);var r=t.viewHints[0],n=t.viewHints[1],s=o.Z,p=o.fa;if(!this.c&&!s&&r||!p&&n)return!0;var a=t.extent,p=t.viewState,r=p.projection,h=p.resolution,l=t.pixelRatio,n=o.g,u=o.i,s=o.get("renderOrder");if(void 0===s&&(s=Ns),a=gt(a,u*h),u=p.projection.D(),i.G&&p.projection.a&&!wt(u,t.extent)&&(t=Math.max(Ht(a)/2,Ht(u)),a[0]=u[0]-t,a[2]=u[2]+t),!this.c&&this.C==h&&this.B==n&&this.u==s&&wt(this.T,a))return!0;this.l=null,this.c=!1;var c=new Ps(.5*h/l,a,h,i.Aa,o.i);if(i.rd(a,h,r),s){var f=[];i.Kb(a,function(t){f.push(t)},this),f.sort(s),f.forEach(e,this)}else i.Kb(a,e,this);return As(c),this.C=h,this.B=n,this.u=s,this.T=a,this.l=c,!0},e(ep,_s);var Vg={image:Ug,hybrid:["Polygon","LineString"]},Yg={hybrid:["Image","Text"],vector:Ug};ep.prototype.i=function(t,e,o){var i=hs(this,t,0);ps(this,"precompose",o,t,i);var r=e.extent,n=void 0!==r;if(n&&ss(o,t,r),r=this.a.u,r!==Bg&&Qs(this,o,t,e),r!==Og){var s=this.a,r=Yg[s.u],p=t.pixelRatio,a=e.sd?t.skippedFeatureUids:{},h=t.viewState,l=h.center,u=h.rotation,c=t.size,h=p/h.resolution,f=s.ga(),y=f.gb(),d=hs(this,t,0);I(s,"render")?(this.c.canvas.width=o.canvas.width,this.c.canvas.height=o.canvas.height,s=this.c):s=o;var g=s.globalAlpha;s.globalAlpha=e.opacity,e=this.l;var v,m,b,w,x,S,T,E,f=f.tileGrid;for(m=0,b=e.length;m<b;++m)w=e[m],T=w.f,x=f.Ia(w.ya,this.o),v=w.ya[0],S="tile-pixels"==w.l.yb(),v=f.Ga(v),E=v/y,v=Math.round(p*c[0]/2),w=Math.round(p*c[1]/2),S?(x=Ut(x),pn(this.T),x=dn(this.T,v,w,h*E,h*E,u,(x[0]-l[0])/E,(l[1]-x[1])/E)):x=d,An(s,-u,v,w),T.Ad.Za(s,p,x,u,a,r),An(s,u,v,w);s!=o&&(ps(this,"render",s,t,d),o.drawImage(s.canvas,0,0)),s.globalAlpha=g}n&&o.restore(),as(this,o,t,i)},ep.prototype.xa=function(t,e,o,r){var n=e.viewState.resolution;e=e.viewState.rotation;var s,p,a,h,l,u,c=this.a,f={},y=this.l,d=c.ga(),g=d.tileGrid;for(a=0,h=y.length;a<h;++a)u=y[a],p=u.ya,l=d.tileGrid.Ia(p,this.o),bt(l,t)&&("tile-pixels"===u.l.yb()?(l=Ut(l),n=d.gb(),p=g.Ga(p[0])/n,p=[(t[0]-l[0])/p,(l[1]-t[1])/p]):p=t,u=u.f.Ad,s=s||u.xa(p,n,e,{},function(t){var e=i(t).toString();if(!(e in f))return f[e]=!0,o.call(r,t,c)}));return s},ep.prototype.C=function(){Qn(this)},ep.prototype.j=function(t,e){var o=_s.prototype.j.call(this,t,e);if(o)for(var i=Object.keys(t.Ce||{}),r=0,n=this.l.length;r<n;++r){var s=this.l[r];op(this,s,t);var p=s,s=t,a=this.a,h=Vg[a.u];if(h){var l=s.pixelRatio,u=p.f,c=a.g;if(!V(u.li,i)||u.Rf!==c){u.li=i,u.Rf=c;var c=p.g,f=a.ga(),y=f.tileGrid,d=p.ya[0],g=y.Ga(d),a=wo(y.Va(d)),d=y.Ga(d),v=d/g,m=a[0]*l*v,b=a[1]*l*v;c.canvas.width=m/v+.5,c.canvas.height=b/v+.5,c.scale(1/v,1/v),c.translate(m/2,b/2),v="tile-pixels"==p.l.yb(),g=l/g,f=f.gb(),d/=f,y=y.Ia(p.ya,this.o),p=pn(this.T),v?(fn(p,g*d,g*d),yn(p,-a[0]*f/2,-a[1]*f/2)):(a=Dt(y),fn(p,g,-g),yn(p,-a[0],-a[1])),u.Ad.Za(c,l,p,0,s.skippedFeatureUids||{},h)}}}return o},e(ip,vn),ip.prototype.ng=function(t){return t instanceof Tn?new Js(t):t instanceof En?new _s(t):t instanceof Xn?new ep(t):t instanceof Hn?new tp(t):null},ip.prototype.X=function(){return"canvas"},ip.prototype.Pf=function(t){if(t){var e=this.g,o=t.pixelRatio,i=Math.round(t.size[0]*o),o=Math.round(t.size[1]*o);this.b.width!=i||this.b.height!=o?(this.b.width=i,this.b.height=o):e.clearRect(0,0,i,o);var r=t.viewState.rotation;mn(t),rp(this,"precompose",t);var n=t.layerStatesArray;Y(n),An(e,r,i/2,o/2);var s,p,a,h,l=t.viewState.resolution;for(s=0,p=n.length;s<p;++s)h=n[s],a=h.layer,a=wn(this,a),rn(h,l)&&"ready"==h.mi&&a.j(t,h)&&a.i(t,h,e);An(e,-r,i/2,o/2),rp(this,"postcompose",t),this.a||(this.b.style.display="",this.a=!0),xn(this,t),t.postRenderFunctions.push(bn)}else this.a&&(this.b.style.display="none",this.a=!1)},e(sp,np),sp.prototype.X=function(){return 35632},e(pp,np),pp.prototype.X=function(){return 35633},e(ap,sp);var Zg=new ap;e(hp,pp);var Jg=new hp,_g=35044;e(yp,j),od=yp.prototype,od.la=function(){A(this.j);var t=this.b;if(!t.isContextLost()){for(var e in this.a)t.deleteBuffer(this.a[e].buffer);for(e in this.f)t.deleteProgram(this.f[e]);for(e in this.c)t.deleteShader(this.c[e]);t.deleteFramebuffer(this.i),t.deleteRenderbuffer(this.o),t.deleteTexture(this.s)}},od.Pn=function(){return this.b},od.Qn=function(){g(this.a),g(this.c),g(this.f),this.o=this.s=this.i=this.l=null},od.Rn=function(){},od.ve=function(t){return t!=this.l&&(this.b.useProgram(t),this.l=t,!0)},e(Tp,Wn),Tp.prototype.qc=function(t,e){this.g.push(this.a.length),this.s.push(e);var o=t.ka();Mp(this,o,o.length,t.sa())},Tp.prototype.rc=function(t,e){this.g.push(this.a.length),this.s.push(e);var o=t.ka();Mp(this,o,o.length,t.sa())},Tp.prototype.Za=function(t,e,o,r,n,s,p,a,h,l,u){s=t.b,dp(t,34962,this.T),dp(t,34963,this.l);var c,f=bp(t,Zg,Jg);this.G?c=this.G:this.G=c=new lp(s,f),t.ve(f),s.enableVertexAttribArray(c.f),s.vertexAttribPointer(c.f,2,5126,!1,32,0),s.enableVertexAttribArray(c.b),s.vertexAttribPointer(c.b,2,5126,!1,32,8),s.enableVertexAttribArray(c.c),s.vertexAttribPointer(c.c,2,5126,!1,32,16),s.enableVertexAttribArray(c.a),s.vertexAttribPointer(c.a,1,5126,!1,32,24),s.enableVertexAttribArray(c.g),s.vertexAttribPointer(c.g,1,5126,!1,32,28),f=pn(this.La),fn(f,2/(o*n[0]),2/(o*n[1])),cn(f,-r),yn(f,-(e[0]-this.o[0]),-(e[1]-this.o[1])),e=pn(this.Aa),fn(e,2/n[0],2/n[1]),n=pn(this.Ka),0!==r&&cn(n,-r),s.uniformMatrix4fv(c.j,!1,cp(this.ra,f)),s.uniformMatrix4fv(c.o,!1,cp(this.ra,e)),s.uniformMatrix4fv(c.l,!1,cp(this.ra,n)),s.uniform1f(c.i,p);var y;if(void 0===h)Ap(this,s,t,a,this.oa,this.u);else{if(l)t:{for(r=t.g?5125:5123,t=t.g?4:2,n=this.g.length-1,p=this.j.length-1;0<=p;--p)for(s.bindTexture(3553,this.j[p]),l=0<p?this.i[p-1]:0,e=this.i[p];0<=n&&this.g[n]>=l;){if(y=this.g[n],o=this.s[n],f=i(o).toString(),void 0===a[f]&&o.V()&&(void 0===u||Xt(u,o.V().D()))&&(s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.drawElements(4,e-y,r,y*t),e=h(o))){a=e;break t}e=y,n--}a=void 0}else s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),Ap(this,s,t,a,this.j,this.i),a=(a=h(null))?a:void 0;y=a}return s.disableVertexAttribArray(c.f),s.disableVertexAttribArray(c.b),s.disableVertexAttribArray(c.c),s.disableVertexAttribArray(c.a),s.disableVertexAttribArray(c.g),y},Tp.prototype.Xb=function(t){var e=t.cc(),o=t.Tb(1),r=t.md(),n=t.pe(1),s=t.l,p=t.jc(),a=t.T,h=t.o,l=t.Gb();t=t.c;var u;0===this.c.length?this.c.push(o):(u=this.c[this.c.length-1],i(u)!=i(o)&&(this.u.push(this.a.length),this.c.push(o))),0===this.f.length?this.f.push(n):(u=this.f[this.f.length-1],i(u)!=i(n)&&(this.i.push(this.a.length),this.f.push(n))),this.C=e[0],this.B=e[1],this.S=l[1],this.na=r[1],this.za=r[0],this.P=s,this.W=p[0],this.Qa=p[1],this.$a=h,this.Z=a,this.fa=t,this.Ib=l[0]},e(jp,ls),jp.prototype.b=function(t,e){var o=this.a[e];return void 0===o&&(o=new Qg[e](this.i,this.c),this.a[e]=o),o},jp.prototype.g=function(){return m(this.a)},jp.prototype.Za=function(t,e,o,i,r,n,s,p){var a,h,l;for(a=0,h=Ug.length;a<h;++a)l=this.a[Ug[a]],void 0!==l&&l.Za(t,e,o,i,r,n,s,p,void 0,!1)},jp.prototype.xa=function(t,e,o,i,r,n,s,p,a,h){var l=e.b;l.bindFramebuffer(l.FRAMEBUFFER,vp(e));var u;return void 0!==this.f&&(u=gt(Mt(t),i*this.f)),Rp(this,e,t,i,r,s,p,a,function(t){var e=new Uint8Array(4);if(l.readPixels(0,0,1,1,l.RGBA,l.UNSIGNED_BYTE,e),0<e[3]&&(t=h(t)))return t},!0,u)};var Qg={Image:Tp},tv=[1,1];e(Ip,Wn),od=Ip.prototype,od.ud=function(t){this.Xb(t.a)},od.pc=function(t){switch(t.X()){case"Point":this.rc(t,null);break;case"MultiPoint":this.qc(t,null);break;case"GeometryCollection":this.We(t,null)}},od.Ve=function(t,e){var o=(0,e.c)(t);o&&Xt(this.g,o.D())&&(this.ud(e),this.pc(o))},od.We=function(t){t=t.f;var e,o;for(e=0,o=t.length;e<o;++e)this.pc(t[e])},od.rc=function(t,e){var o=this.b,i=new jp(1,this.g).b(0,"Image");i.Xb(this.a),i.rc(t,e),Cp(i,o),i.Za(this.b,this.f,this.i,this.j,this.l,this.c,1,{},void 0,!1),Ep(i,o)()},od.qc=function(t,e){var o=this.b,i=new jp(1,this.g).b(0,"Image");i.Xb(this.a),i.qc(t,e),Cp(i,o),i.Za(this.b,this.f,this.i,this.j,this.l,this.c,1,{},void 0,!1),Ep(i,o)()},od.Xb=function(t){this.a=t},e(Dp,sp);var ev=new Dp;e(Op,pp);var ov=new Op;e(Bp,Jn),Bp.prototype.lh=function(t,e,o){Gp(this,"precompose",o,t),dp(o,34962,this.W);var i,r=o.b,n=bp(o,ev,ov);this.T?i=this.T:this.T=i=new Fp(r,n),o.ve(n)&&(r.enableVertexAttribArray(i.b),r.vertexAttribPointer(i.b,2,5126,!1,16,0),r.enableVertexAttribArray(i.a),r.vertexAttribPointer(i.a,2,5126,!1,16,8),r.uniform1i(i.c,0)),r.uniformMatrix4fv(i.i,!1,cp(this.B,this.s)),r.uniformMatrix4fv(i.f,!1,cp(this.B,this.u)),r.uniform1f(i.g,e.opacity),r.bindTexture(3553,this.tb),r.drawArrays(5,0,4),Gp(this,"postcompose",o,t)},Bp.prototype.xf=function(){this.i=this.tb=null,this.j=void 0},e(Hp,Bp),Hp.prototype.xa=function(t,e,o,i){var r=this.a;return r.ga().xa(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,r)})},Hp.prototype.yf=function(t,e){var o=this.f.g,i=t.pixelRatio,r=t.viewState,n=r.center,s=r.resolution,p=r.rotation,a=this.c,h=this.tb,l=this.a.ga(),u=t.viewHints,c=t.extent;return void 0!==e.extent&&(c=Bt(c,e.extent)),u[0]||u[1]||Wt(c)||(r=l.W(c,s,i,r.projection))&&_n(this,r)&&(a=r,h=Xp(this,r),this.tb&&t.postRenderFunctions.push(function(t,e){t.isContextLost()||t.deleteTexture(e)}.bind(null,o,this.tb))),a&&(o=this.f.c.j,Wp(this,o.width,o.height,i,n,s,p,a.D()),this.o=null,i=this.s,pn(i),fn(i,1,-1),yn(i,0,-1),this.c=a,this.tb=h,es(t.attributions,a.j),os(t,l)),!0},Hp.prototype.le=function(t,e){return void 0!==this.xa(t,e,zt,this)},Hp.prototype.Bc=function(t,e,o,i){if(this.c&&this.c.a())if(this.a.ga()instanceof Ys){var r=un(e.pixelToCoordinateTransform,t.slice());if(this.xa(r,e,zt,this))return o.call(i,this.a,null)}else{if(r=[this.c.a().width,this.c.a().height],!this.o){var n=e.size;e=sn(),yn(e,-1,-1),fn(e,2/n[0],2/n[1]),yn(e,0,n[1]),fn(e,1,-1);var n=gn(this.u.slice()),s=sn();yn(s,0,r[1]),fn(s,1,-1),fn(s,r[0]/2,r[1]/2),yn(s,1,1),an(s,n),an(s,e),this.o=s}if(t=un(this.o,t.slice()),!(0>t[0]||t[0]>r[0]||0>t[1]||t[1]>r[1])&&(this.l||(this.l=Wo(1,1)),this.l.clearRect(0,0,1,1),this.l.drawImage(this.c.a(),t[0],t[1],1,1,0,0,1,1),r=this.l.getImageData(0,0,1,1).data,0<r[3]))return o.call(i,this.a,r)}},e($p,sp);var iv=new $p;e(Kp,pp);var rv=new Kp;e(qp,Bp),od=qp.prototype,od.la=function(){gp(this.f.c,this.G),Bp.prototype.la.call(this)},od.Ue=function(t,e,o){var i=this.f;return function(r,n){return Jf(t,e,r,n,function(t){var e=i.a.b.hasOwnProperty(t.Xa());return e&&(o[r]||(o[r]={}),o[r][t.ya.toString()]=t),e})}},od.xf=function(){Bp.prototype.xf.call(this),this.c=null},od.yf=function(t,e,o){var i=this.f,r=o.b,n=t.viewState,s=n.projection,a=this.a,h=a.ga(),l=h.pb(s),u=l.wc(n.resolution),c=l.Ga(u),f=h.kf(u,t.pixelRatio,s),y=f[0]/wo(l.Va(u),this.P)[0],d=c/y,g=h.gb(y)*h.df(s),v=n.center,m=t.extent,b=Co(l,m,c);if(this.l&&go(this.l,b)&&this.o==h.g)d=this.C;else{var w=[b.da-b.ba+1,b.ha-b.ea+1],x=p(Math.max(w[0]*f[0],w[1]*f[1])),w=d*x,S=l.Tc(u),T=S[0]+b.ba*f[0]*d,d=S[1]+b.ea*f[1]*d,d=[T,d,T+w,d+w];Up(this,t,x),r.viewport(0,0,x,x),r.clearColor(0,0,0,0),r.clear(16384),r.disable(3042),x=bp(o,this.S,this.Z),o.ve(x),this.c||(this.c=new zp(r,x)),dp(o,34962,this.G),r.enableVertexAttribArray(this.c.b),r.vertexAttribPointer(this.c.b,2,5126,!1,16,0),r.enableVertexAttribArray(this.c.a),r.vertexAttribPointer(this.c.a,2,5126,!1,16,8),r.uniform1i(this.c.g,0),o={},o[u]={};var E,M,C,P=this.Ue(h,s,o),A=a.c(),x=!0,T=Tt(),j=new fo(0,0,0,0);for(M=b.ba;M<=b.da;++M)for(C=b.ea;C<=b.ha;++C)if(S=h.vc(u,M,C,y,s),void 0===e.extent||(E=l.Ia(S.ya,T),Xt(E,e.extent))){if(E=S.U(),(E=E==ag||4==E||3==E&&!A)||(S=Gi(S)),E=S.U(),E==ag){if(i.a.b.hasOwnProperty(S.Xa())){o[u][S.ya.toString()]=S;continue}}else if(4==E||3==E&&!A)continue;x=!1,E=Eo(l,S.ya,P,j,T),E||(S=Mo(l,S.ya,j,T))&&P(u+1,S)}e=Object.keys(o).map(Number),e.sort(H);for(var N,P=new Float32Array(4),A=0,j=e.length;A<j;++A)for(N in M=o[e[A]])S=M[N],E=l.Ia(S.ya,T),P[0]=2*(E[2]-E[0])/w,P[1]=2*(E[3]-E[1])/w,P[2]=2*(E[0]-d[0])/w-1,P[3]=2*(E[1]-d[1])/w-1,r.uniform4fv(this.c.f,P),Jp(i,S,f,g*y),r.drawArrays(5,0,4);x?(this.l=b,this.C=d,this.o=h.g):(this.C=this.l=null,this.o=-1,t.animate=!0)}is(t.usedTiles,h,u,b);var L=i.j;return rs(t,h,l,y,s,m,u,a.f(),function(t){t.U()!=ag||i.a.b.hasOwnProperty(t.Xa())||t.Xa()in L.a||L.c([t,Ao(l,t.ya),l.Ga(t.ya[0]),f,g*y])},this),ts(t,h),os(t,h),r=this.s,pn(r),yn(r,(Math.round(v[0]/c)*c-d[0])/(d[2]-d[0]),(Math.round(v[1]/c)*c-d[1])/(d[3]-d[1])),0!==n.rotation&&cn(r,n.rotation),fn(r,t.size[0]*n.resolution/(d[2]-d[0]),t.size[1]*n.resolution/(d[3]-d[1])),yn(r,-.5,-.5),!0},od.Bc=function(t,e,o,i){if(this.i){t=un(this.s,[t[0]/e.size[0],(e.size[1]-t[1])/e.size[1]].slice()),t=[t[0]*this.j,t[1]*this.j],e=this.f.c.b,e.bindFramebuffer(e.FRAMEBUFFER,this.i);var r=new Uint8Array(4);if(e.readPixels(t[0],t[1],1,1,e.RGBA,e.UNSIGNED_BYTE,r),0<r[3])return o.call(i,this.a,r)}},e(Vp,Bp),od=Vp.prototype,od.lh=function(t,e,o){this.l=e;var i=t.viewState,r=this.c;r&&!r.g()&&r.Za(o,i.center,i.resolution,i.rotation,t.size,t.pixelRatio,e.opacity,e.sd?t.skippedFeatureUids:{})},od.la=function(){var t=this.c;t&&(Np(t,this.f.c)(),this.c=null),Bp.prototype.la.call(this)},od.xa=function(t,e,o,r){if(this.c&&this.l){var n=e.viewState,s=this.a,p={};return this.c.xa(t,this.f.c,n.center,n.resolution,n.rotation,e.size,e.pixelRatio,this.l.opacity,{},function(t){var e=i(t).toString();if(!(e in p))return p[e]=!0,o.call(r,t,s)})}},od.le=function(t,e){if(this.c&&this.l){var o=e.viewState;return kp(this.c,t,this.f.c,o.resolution,o.rotation,e.pixelRatio,this.l.opacity,e.skippedFeatureUids)}return!1},od.Bc=function(t,e,o,i){if(t=un(e.pixelToCoordinateTransform,t.slice()),this.le(t,e))return o.call(i,this.a,null)},od.mh=function(){Qn(this)},od.yf=function(t,e,o){function i(t){var e,o=t.zc();if(o?e=o.call(t,h):(o=r.j)&&(e=o(t,h)),e){if(e){if(o=!1,Array.isArray(e))for(var i=0,n=e.length;i<n;++i)o=Rs(c,t,e[i],Ls(h,l),this.mh,this)||o;else o=Rs(c,t,e,Ls(h,l),this.mh,this)||o;t=o}else t=!1;this.o=this.o||t}}var r=this.a;e=r.ga(),es(t.attributions,e.j),os(t,e);var n=t.viewHints[0],s=t.viewHints[1],p=r.Z,a=r.fa;if(!this.o&&!p&&n||!a&&s)return!0;var s=t.extent,p=t.viewState,n=p.projection,h=p.resolution,l=t.pixelRatio,p=r.g,u=r.i,a=r.get("renderOrder");if(void 0===a&&(a=Ns),s=gt(s,u*h),!this.o&&this.S==h&&this.P==p&&this.G==a&&wt(this.C,s))return!0;this.c&&t.postRenderFunctions.push(Np(this.c,o)),this.o=!1;var c=new jp(.5*h/l,s,r.i);if(e.rd(s,h,n),a){var f=[];e.Kb(s,function(t){f.push(t)},this),f.sort(a),f.forEach(i,this)}else e.Kb(s,i,this);return Lp(c,o),this.S=h,this.P=p,this.G=a,this.C=s,this.c=c,!0},od=Yp.prototype,od.clear=function(){this.f=0,this.b={},this.g=this.a=null},od.forEach=function(t,e){for(var o=this.a;o;)t.call(e,o.Gc,o.ec,this),o=o.Ab},od.get=function(t){return t=this.b[t],n(void 0!==t,15),t===this.g?t.Gc:(t===this.a?(this.a=this.a.Ab,this.a.Uc=null):(t.Ab.Uc=t.Uc,t.Uc.Ab=t.Ab),t.Ab=null,t.Uc=this.g,this.g=this.g.Ab=t,t.Gc)},od.pop=function(){var t=this.a;return delete this.b[t.ec],t.Ab&&(t.Ab.Uc=null),this.a=t.Ab,this.a||(this.g=null),--this.f,t.Gc},od.replace=function(t,e){this.get(t),this.b[t].Gc=e},od.set=function(t,e){n(!(t in this.b),16);var o={ec:t,Ab:null,Uc:this.g,Gc:e};this.g?this.g.Ab=o:this.a=o,this.g=o,this.b[t]=o,++this.f},e(Zp,vn),od=Zp.prototype,od.ng=function(t){return t instanceof Tn?new Hp(this,t):t instanceof En?new qp(this,t):t instanceof Hn?new Vp(this,t):null},od.la=function(){var t=this.g;t.isContextLost()||this.a.forEach(function(e){e&&t.deleteTexture(e.tb)}),N(this.c),vn.prototype.la.call(this)},od.uj=function(t,e){for(var o,i=this.g;1024<this.a.f-this.i;){if(o=this.a.a.Gc)i.deleteTexture(o.tb);else{if(+this.a.a.ec==e.index)break;--this.i}this.a.pop()}},od.X=function(){return"webgl"},od.Dm=function(t){t.preventDefault(),this.a.clear(),this.i=0,t=this.f;for(var e in t)t[e].xf()},od.Em=function(){Qp(this),this.l.render()},od.Pf=function(t){var e=this.c,o=this.g;if(o.isContextLost())return!1;if(!t)return this.o&&(this.b.style.display="none",this.o=!1),!1;this.T=t.focus,this.a.set((-t.index).toString(),null),++this.i,_p(this,"precompose",t);var i=[],r=t.layerStatesArray;Y(r);var n,s,p,a,h=t.viewState.resolution;for(n=0,s=r.length;n<s;++n)a=r[n],rn(a,h)&&"ready"==a.mi&&(p=wn(this,a.layer),p.yf(t,a,e)&&i.push(a));for(r=t.size[0]*t.pixelRatio,h=t.size[1]*t.pixelRatio,this.b.width==r&&this.b.height==h||(this.b.width=r,this.b.height=h),o.bindFramebuffer(36160,null),o.clearColor(0,0,0,0),o.clear(16384),o.enable(3042),o.viewport(0,0,this.b.width,this.b.height),n=0,s=i.length;n<s;++n)a=i[n],p=wn(this,a.layer),p.lh(t,a,e);this.o||(this.b.style.display="",this.o=!0),mn(t),1024<this.a.f-this.i&&t.postRenderFunctions.push(this.uj.bind(this)),0!==this.j.b.length&&(t.postRenderFunctions.push(this.G),t.animate=!0),_p(this,"postcompose",t),xn(this,t),t.postRenderFunctions.push(bn)},od.xa=function(t,e,o,i,r,n){var s;if(this.g.isContextLost())return!1;var p,a=e.viewState,h=e.layerStatesArray;for(p=h.length-1;0<=p;--p){s=h[p];var l=s.layer;if(rn(s,a.resolution)&&r.call(n,l)&&(s=wn(this,l).xa(t,e,o,i)))return s}},od.kh=function(t,e,o,i){var r=!1;if(this.g.isContextLost())return!1;var n,s=e.viewState,p=e.layerStatesArray;for(n=p.length-1;0<=n;--n){var a=p[n],h=a.layer;if(rn(a,s.resolution)&&o.call(i,h)&&(r=wn(this,h).le(t,e)))return!0}return r},od.jh=function(t,e,o,i,r){if(this.g.isContextLost())return!1;var n,s,p=e.viewState,a=e.layerStatesArray;for(s=a.length-1;0<=s;--s){n=a[s];var h=n.layer;if(rn(n,p.resolution)&&r.call(i,h)&&(n=wn(this,h).Bc(t,e,o,i)))return n}};var nv=["canvas","webgl"];e(ta,B),od=ta.prototype,od.ij=function(t){this.l.push(t)},od.jj=function(t){this.j.push(t)},od.gg=function(t){this.tc().Qc().push(t)},od.hg=function(t){this.o.push(t)},od.ig=function(t){var e=t.j;void 0!==e&&(this.Af[e.toString()]=t),t.setMap(this)},od.ab=function(t){this.render(),Array.prototype.push.apply(this.S,arguments)},od.la=function(){N(this.ra),N(this.B),C(this.a,"wheel",this.Nc,this),C(this.a,"mousewheel",this.Nc,this),void 0!==this.c&&(window.removeEventListener("resize",this.c,!1),this.c=void 0),this.i&&(cancelAnimationFrame(this.i),this.i=void 0),this.Xg(null),B.prototype.la.call(this)},od.Sd=function(t,e,o,i,r){if(this.f)return t=this.Ja(t),this.B.xa(t,this.f,e,void 0!==o?o:null,void 0!==i?i:zt,void 0!==r?r:null)},od.Gl=function(t,e,o,i,r){if(this.f)return this.B.jh(t,this.f,e,void 0!==o?o:null,void 0!==i?i:zt,void 0!==r?r:null)},od.Xk=function(t,e,o){return!!this.f&&(t=this.Ja(t),this.B.kh(t,this.f,void 0!==e?e:zt,void 0!==o?o:null))},od.Kj=function(t){return this.Ja(this.Ud(t))},od.Ud=function(t){var e=this.a.getBoundingClientRect();return t=t.changedTouches?t.changedTouches[0]:t,[t.clientX-e.left,t.clientY-e.top]},od.jf=function(){return this.get(av)},od.uc=function(){var t=this.jf();return void 0!==t?"string"==typeof t?document.getElementById(t):t:null},od.Ja=function(t){var e=this.f;return e?un(e.pixelToCoordinateTransform,t.slice()):null},od.Ij=function(){return this.l},od.bk=function(){return this.o},od.ak=function(t){return t=this.Af[t.toString()],void 0!==t?t:null},od.Pj=function(){return this.j},od.tc=function(){return this.get(sv)},od.Wg=function(){return this.tc().Qc()},od.Ca=function(t){var e=this.f;return e?un(e.coordinateToPixelTransform,t.slice(0,2)):null},od.kb=function(){return this.get(pv)},od.$=function(){return this.get(hv)},od.rk=function(){return this.a},od.pk=function(t,e,o,i){var r=this.f;return r&&e in r.wantedTiles&&r.wantedTiles[e][t.Xa()]?(t=o[0]-r.focus[0],o=o[1]-r.focus[1],65536*Math.log(i)+Math.sqrt(t*t+o*o)/i):1/0},od.Nc=function(t,e){var o=new ki(e||t.type,this,t);this.Jg(o)},od.Jg=function(t){if(this.f){this.W=t.coordinate,t.frameState=this.f;var e,o=this.j.a;if(!1!==this.b(t))for(e=o.length-1;0<=e;e--){var i=o[e];if(i.f()&&!i.handleEvent(t))break}}},od.Pk=function(){var t=this.f,e=this.oa;if(0!==e.b.length){var o=16,i=o;if(t){var r=t.viewHints;r[0]&&(o=this.Jb?8:0,i=2),r[1]&&(o=this.ac?8:0,i=2)}e.j<o&&(Ki(e),qi(e,o,i))}for(e=this.Ka,o=0,i=e.length;o<i;++o)e[o](this,t);e.length=0},od.Rk=function(){this.render()},od.Tk=function(){var t;if(this.jf()&&(t=this.uc()),this.s){for(var e=0,o=this.s.length;e<o;++e)P(this.s[e]);this.s=null}t?(t.appendChild(this.a),t=this.fa?this.fa:t,this.s=[E(t,"keydown",this.Nc,this),E(t,"keypress",this.Nc,this)],this.c||(this.c=this.Yc.bind(this),window.addEventListener("resize",this.c,!1))):(Ko(this.a),void 0!==this.c&&(window.removeEventListener("resize",this.c,!1),this.c=void 0)),this.Yc()},od.Uk=function(){this.render()},od.Wk=function(){this.render()},od.Vk=function(){this.P&&(P(this.P),this.P=null);var t=this.$();t&&(this.P=E(t,"propertychange",this.Wk,this)),this.render()},od.Ck=function(){this.G&&(this.G.forEach(P),this.G=null);var t=this.tc();t&&(this.G=[E(t,"propertychange",this.render,this),E(t,"change",this.render,this)]),this.render()},od.Ko=function(){this.i&&cancelAnimationFrame(this.i),this.Z()},od.render=function(){void 0===this.i&&(this.i=requestAnimationFrame(this.Z))},od.Do=function(t){return this.l.remove(t)},od.Eo=function(t){return this.j.remove(t)},od.Go=function(t){return this.tc().Qc().remove(t)},od.Ho=function(t){return this.o.remove(t)},od.Jo=function(t){var e,o,r,n=this.kb(),s=this.$(),p=Tt(),a=null;if(void 0!==n&&0<n[0]&&0<n[1]&&s&&io(s)){var a=Qe(s,this.f?this.f.viewHints:void 0),h=this.tc().ff(),l={};for(e=0,o=h.length;e<o;++e)l[i(h[e].layer)]=h[e];r=s.U(),a={animate:!1,attributions:{},coordinateToPixelTransform:this.La,extent:p,focus:this.W?this.W:r.center,index:this.ub++,layerStates:l,layerStatesArray:h,logos:hd({},this.Le),pixelRatio:this.Me,pixelToCoordinateTransform:this.Je,postRenderFunctions:[],size:n,skippedFeatureUids:this.Ce,tileQueue:this.oa,time:t,usedTiles:{},viewState:r,viewHints:a,wantedTiles:{}}}if(a){for(t=this.S,e=n=0,o=t.length;e<o;++e)s=t[e],s(this,a)&&(t[n++]=s);t.length=n,a.extent=Ot(r.center,r.resolution,r.rotation,a.size,p)}this.f=a,this.B.Pf(a),a&&(a.animate&&this.render(),Array.prototype.push.apply(this.Ka,a.postRenderFunctions),0!==this.S.length||a.viewHints[0]||a.viewHints[1]||Pt(a.extent,this.Aa)||(this.b(new zo("moveend",this,a)),vt(a.extent,this.Aa))),this.b(new zo("postrender",this,a)),setTimeout(this.Pk.bind(this),0)},od.ai=function(t){this.set(sv,t)},od.Tf=function(t){this.set(pv,t)},od.Xg=function(t){this.set(av,t)},od.Wo=function(t){this.set(hv,t)},od.ki=function(t){t=i(t).toString(),this.Ce[t]=!0,this.render()},od.Yc=function(){var t=this.uc();if(t){var e=getComputedStyle(t);this.Tf([t.offsetWidth-parseFloat(e.borderLeftWidth)-parseFloat(e.paddingLeft)-parseFloat(e.paddingRight)-parseFloat(e.borderRightWidth),t.offsetHeight-parseFloat(e.borderTopWidth)-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom)-parseFloat(e.borderBottomWidth)])}else this.Tf(void 0)},od.oi=function(t){t=i(t).toString(),delete this.Ce[t],this.render()};var sv="layergroup",pv="size",av="target",hv="view";tn(),e(oa,B),od=oa.prototype,od.Td=function(){return this.get(bv)},od.Hl=function(){return this.j},od.he=function(){return this.get(wv)},od.Eg=function(){return this.get(xv)},od.Yg=function(){return this.get(Sv)},od.Fg=function(){return this.get(Tv)},od.xk=function(){for(var t=this.f;t.lastChild;)t.removeChild(t.lastChild);(t=this.Td())&&this.f.appendChild(t)},od.Hk=function(){this.c&&(Ko(this.f),P(this.c),this.c=null);var t=this.he();t&&(this.c=E(t,"postrender",this.render,this),na(this),t=this.s?t.u:t.C,this.o?t.insertBefore(this.f,t.childNodes[0]||null):t.appendChild(this.f))},od.render=function(){na(this)},od.Lk=function(){na(this)},od.Nk=function(){if(na(this),void 0!==this.get(Sv)&&this.autoPan){var t=this.he();if(void 0!==t&&t.uc()){var e=ia(t.uc(),t.kb()),o=this.Td(),i=o.offsetWidth,r=o.currentStyle||getComputedStyle(o),i=i+(parseInt(r.marginLeft,10)+parseInt(r.marginRight,10)),r=o.offsetHeight,n=o.currentStyle||getComputedStyle(o),r=r+(parseInt(n.marginTop,10)+parseInt(n.marginBottom,10)),s=ia(o,[i,r]),o=this.l;wt(e,s)||(i=s[0]-e[0],r=e[2]-s[2],n=s[1]-e[1],s=e[3]-s[3],e=[0,0],0>i?e[0]=i-o:0>r&&(e[0]=Math.abs(r)+o),0>n?e[1]=n-o:0>s&&(e[1]=Math.abs(s)+o),0===e[0]&&0===e[1])||(o=t.$().bb(),i=t.Ca(o),e=[i[0]+e[0],i[1]+e[1]],this.i&&(this.i.source=o,t.ab(lo(this.i))),t.$().rb(t.Ja(e)))}}},od.Ok=function(){na(this)},od.Vh=function(t){this.set(bv,t)},od.setMap=function(t){this.set(wv,t)},od.ci=function(t){this.set(xv,t)},od.tf=function(t){this.set(Sv,t)},od.fi=function(t){this.set(Tv,t)};var lv="bottom-left",uv="bottom-center",cv="bottom-right",fv="center-left",yv="center-center",dv="center-right",gv="top-left",vv="top-center",mv="top-right",bv="element",wv="map",xv="offset",Sv="position",Tv="positioning";e(sa,qo),od=sa.prototype,od.setMap=function(t){var e=this.a;t!==e&&(e&&(e=e.$())&&C(e,U(md),this.ce,this),qo.prototype.setMap.call(this,t),t&&(this.s.push(E(t,"propertychange",this.Ik,this)),0===this.f.Wg().yc()&&this.f.ai(t.tc()),t=t.$()))&&(E(t,U(md),this.ce,this),io(t)&&(this.f.Yc(),aa(this)))},od.Ik=function(t){t.key===hv&&((t=t.oldValue)&&C(t,U(md),this.ce,this),t=this.a.$(),E(t,U(md),this.ce,this))},od.ce=function(){this.f.$().ie(this.a.$().Pa())},od.Vl=function(t){t.preventDefault(),la(this)},od.Ul=function(){return this.l},od.Xl=function(t){this.l!==t&&(this.l=t,this.element.classList.toggle("ol-uncollapsible"),!t&&this.j&&la(this))},od.Wl=function(t){this.l&&this.j!==t&&la(this)},od.Tl=function(){return this.j},od.ck=function(){return this.f},e(ua,qo);var Ev=[1,2,5];ua.prototype.yb=function(){return this.get(Mv)},ua.prototype.S=function(){fa(this)},ua.prototype.G=function(t){this.set(Mv,t)};var Mv="units",Cv="degrees",Pv="imperial",Av="nautical",jv="metric",Nv="us";e(ya,qo),ya.prototype.la=function(){N(this.l),qo.prototype.la.call(this)};var Lv=0;od=ya.prototype,od.setMap=function(t){qo.prototype.setMap.call(this,t),t&&t.render()},od.vk=function(t){var e=this.a,o=e.$(),i=o.Ma();e.ab(co({resolution:i,duration:this.Z,easing:so})),t=va(this,s(1===this.j?(t.offsetX-this.W[0]/2)/this.B:(t.offsetY-this.W[1]/2)/this.o,0,1)),o.Yb(o.constrainResolution(t))},od.wk=function(t){if(!this.C&&t.b.target===this.element.firstElementChild&&(ro(this.a.$(),1),this.G=t.clientX,this.S=t.clientY,this.C=!0,0===this.u.length)){t=this.Hg;var e=this.Ig;this.u.push(E(document,"mousemove",t,this),E(document,"touchmove",t,this),E(document,"pointermove",t,this),E(document,"mouseup",e,this),E(document,"touchend",e,this),E(document,"pointerup",e,this))}},od.Hg=function(t){if(this.C){var e=this.element.firstElementChild;this.f=va(this,s(1===this.j?(t.clientX-this.G+parseInt(e.style.left,10))/this.B:(t.clientY-this.S+parseInt(e.style.top,10))/this.o,0,1)),this.a.$().Yb(this.f),ga(this,this.f),this.G=t.clientX,this.S=t.clientY}},od.Ig=function(){if(this.C){var t=this.a,e=t.$();ro(e,-1),t.ab(co({resolution:this.f,duration:this.Z,easing:so})),t=e.constrainResolution(this.f),e.Yb(t),this.C=!1,this.S=this.G=void 0,this.u.forEach(P),this.u.length=0}},e(ma,qo),ma.prototype.j=function(t){t.preventDefault();var e=this.a;t=e.$();var o=this.f?this.f:t.l.D(),e=e.kb();t.$e(o,e)},e(ba,B),od=ba.prototype,od.la=function(){this.rf(!1),B.prototype.la.call(this)},od.Sn=function(t){if(null!==t.alpha){var e=l(t.alpha);this.set(Rv,e),"boolean"==typeof t.absolute&&t.absolute?this.set(Dv,e):"number"==typeof t.webkitCompassHeading&&-1!=t.webkitCompassAccuracy&&this.set(Dv,l(t.webkitCompassHeading))}null!==t.beta&&this.set(kv,l(t.beta)),null!==t.gamma&&this.set(Iv,l(t.gamma)),this.v()},od.Cj=function(){return this.get(Rv)},od.Fj=function(){return this.get(kv)},od.Mj=function(){return this.get(Iv)},od.tl=function(){return this.get(Dv)},od.Sg=function(){return this.get(Ov)},od.ul=function(){if(Xd){var t=this.Sg();t&&!this.a?this.a=E(window,"deviceorientation",this.Sn,this):t||null===this.a||(P(this.a),this.a=null)}},od.rf=function(t){this.set(Ov,t)};var Rv="alpha",kv="beta",Iv="gamma",Dv="heading",Ov="tracking";e(wa,B),od=wa.prototype,od.clone=function(){var t=new wa(this.N());t.Dc(this.f);var e=this.V();return e&&t.Oa(e.clone()),(e=this.i)&&t.sf(e),t},od.V=function(){return this.get(this.f)},od.vl=function(){return this.a},od.Oj=function(){return this.f},od.wl=function(){return this.i},od.zc=function(){return this.j},od.xl=function(){this.v()},od.ae=function(){this.c&&(P(this.c),this.c=null);var t=this.V();t&&(this.c=E(t,"change",this.xl,this)),this.v()},od.Oa=function(t){this.set(this.f,t)},od.sf=function(t){this.j=(this.i=t)?xa(t):void 0,this.v()},od.Wb=function(t){this.a=t,this.v()},od.Dc=function(t){C(this,U(this.f),this.ae,this),this.f=t,E(this,U(this.f),this.ae,this),this.ae()};var Fv=document.implementation.createDocument("","",null),Bv=Da();e(Ya,Ka),od=Ya.prototype,od.X=function(){return"json"},od.Ub=function(t,e){return this.Vc(Za(t),za(this,t,e))},od.Ha=function(t,e){return this.Gf(Za(t),za(this,t,e))},od.Wc=function(t,e){return this.Ih(Za(t),za(this,t,e))},od.Sa=function(t){return this.Oh(Za(t))},od.Fd=function(t,e){return JSON.stringify(this.Zc(t,e))},od.$b=function(t,e){return JSON.stringify(this.Ge(t,e))},od.$c=function(t,e){return JSON.stringify(this.He(t,e))},e(th,ye),od=th.prototype,od.kj=function(t){this.A?K(this.A,t):this.A=t.slice(),this.v()},od.clone=function(){var t=new th(null);return t.aa(this.ia,this.A.slice()),t},od.vb=function(t,e,o,i){return i<mt(this.D(),t,e)?i:(this.C!=this.g&&(this.B=Math.sqrt(xe(this.A,0,this.A.length,this.a,0)),this.C=this.g),Te(this.A,0,this.A.length,this.a,this.B,!1,t,e,o,i))},od.zj=function(t,e){return Ue(this.A,0,this.A.length,this.a,t,e)},od.$l=function(t,e){return"XYM"!=this.ia&&"XYZM"!=this.ia?null:_a(this.A,0,this.A.length,this.a,t,void 0!==e&&e)},od.Y=function(){return Ae(this.A,0,this.A.length,this.a)},od.vg=function(t,e){return Ja(this.A,0,this.A.length,this.a,t,e)},od.am=function(){var t,e=this.A,o=this.a,i=e[0],r=e[1],n=0;for(t=0+o;t<this.A.length;t+=o)var s=e[t],p=e[t+1],n=n+Math.sqrt((s-i)*(s-i)+(p-r)*(p-r)),i=s,r=p;return n},od.Mc=function(t){var e=[];return e.length=Ne(this.A,0,this.A.length,this.a,t,e,0),t=new th(null),t.aa("XY",e),t},od.X=function(){return"LineString"},od.Na=function(t){return Ge(this.A,0,this.A.length,this.a,t)},od.ma=function(t,e){t?(ve(this,e,t,1),this.A||(this.A=[]),this.A.length=Ce(this.A,0,t,this.a),this.v()):this.aa("XY",null)},od.aa=function(t,e){ge(this,t,e),this.v()},e(oh,ye),od=oh.prototype,od.lj=function(t){this.A?K(this.A,t.ka().slice()):this.A=t.ka().slice(),this.c.push(this.A.length),this.v()},od.clone=function(){var t=new oh(null);return t.aa(this.ia,this.A.slice(),this.c.slice()),t},od.vb=function(t,e,o,i){return i<mt(this.D(),t,e)?i:(this.l!=this.g&&(this.C=Math.sqrt(Se(this.A,0,this.c,this.a,0)),this.l=this.g),Ee(this.A,0,this.c,this.a,this.C,!1,t,e,o,i))},od.cm=function(t,e,o){return"XYM"!=this.ia&&"XYZM"!=this.ia||0===this.A.length?null:Qa(this.A,this.c,this.a,t,void 0!==e&&e,void 0!==o&&o)},od.Y=function(){return je(this.A,0,this.c,this.a)},od.Eb=function(){return this.c},od.Uj=function(t){if(0>t||this.c.length<=t)return null;var e=new th(null);return e.aa(this.ia,this.A.slice(0===t?0:this.c[t-1],this.c[t])),e},od.od=function(){var t,e,o=this.A,i=this.c,r=this.ia,n=[],s=0;for(t=0,e=i.length;t<e;++t){var p=i[t],a=new th(null);a.aa(r,o.slice(s,p)),n.push(a),s=p}return n},od.Mc=function(t){var e,o,i=[],r=[],n=this.A,s=this.c,p=this.a,a=0,h=0;for(e=0,o=s.length;e<o;++e){var l=s[e],h=Ne(n,a,l,p,t,i,h);r.push(h),a=l}return i.length=h,t=new oh(null),t.aa("XY",i,r),t},od.X=function(){return"MultiLineString"},od.Na=function(t){t:{var e,o,i=this.A,r=this.c,n=this.a,s=0;for(e=0,o=r.length;e<o;++e){if(Ge(i,s,r[e],n,t)){t=!0;break t}s=r[e]}t=!1}return t},od.ma=function(t,e){if(t){ve(this,e,t,2),
-this.A||(this.A=[]);var o=Pe(this.A,0,t,this.a,this.c);this.A.length=0===o.length?0:o[o.length-1],this.v()}else this.aa("XY",null,this.c)},od.aa=function(t,e,o){ge(this,t,e),this.c=o,this.v()},e(nh,ye),od=nh.prototype,od.nj=function(t){this.A?K(this.A,t.ka()):this.A=t.ka().slice(),this.v()},od.clone=function(){var t=new nh(null);return t.aa(this.ia,this.A.slice()),t},od.vb=function(t,e,o,i){if(i<mt(this.D(),t,e))return i;var r,n,s,p=this.A,a=this.a;for(r=0,n=p.length;r<n;r+=a)if(s=h(t,e,p[r],p[r+1]),s<i){for(i=s,s=0;s<a;++s)o[s]=p[r+s];o.length=a}return i},od.Y=function(){return Ae(this.A,0,this.A.length,this.a)},od.ek=function(t){var e=this.A?this.A.length/this.a:0;return 0>t||e<=t?null:(e=new Ie(null),e.aa(this.ia,this.A.slice(t*this.a,(t+1)*this.a)),e)},od.je=function(){var t,e,o=this.A,i=this.ia,r=this.a,n=[];for(t=0,e=o.length;t<e;t+=r){var s=new Ie(null);s.aa(i,o.slice(t,t+r)),n.push(s)}return n},od.X=function(){return"MultiPoint"},od.Na=function(t){var e,o,i,r,n=this.A,s=this.a;for(e=0,o=n.length;e<o;e+=s)if(i=n[e],r=n[e+1],xt(t,i,r))return!0;return!1},od.ma=function(t,e){t?(ve(this,e,t,1),this.A||(this.A=[]),this.A.length=Ce(this.A,0,t,this.a),this.v()):this.aa("XY",null)},od.aa=function(t,e){ge(this,t,e),this.v()},e(sh,ye),od=sh.prototype,od.oj=function(t){if(this.A){var e=this.A.length;K(this.A,t.ka()),t=t.Eb().slice();var o,i;for(o=0,i=t.length;o<i;++o)t[o]+=e}else this.A=t.ka().slice(),t=t.Eb().slice(),this.c.push();this.c.push(t),this.v()},od.clone=function(){for(var t=new sh(null),e=this.c.length,o=Array(e),i=0;i<e;++i)o[i]=this.c[i].slice();return hh(t,this.ia,this.A.slice(),o),t},od.vb=function(t,e,o,i){if(i<mt(this.D(),t,e))return i;if(this.G!=this.g){var r,n,s=this.c,p=0,a=0;for(r=0,n=s.length;r<n;++r)var h=s[r],a=Se(this.A,p,h,this.a,a),p=h[h.length-1];this.S=Math.sqrt(a),this.G=this.g}s=ah(this),p=this.c,a=this.a,r=this.S,n=0;var l,u,h=[NaN,NaN];for(l=0,u=p.length;l<u;++l){var c=p[l];i=Ee(s,n,c,a,r,!0,t,e,o,i,h),n=c[c.length-1]}return i},od.Ac=function(t,e){var o;t:{o=ah(this);var i=this.c,r=this.a,n=0;if(0!==i.length){var s,p;for(s=0,p=i.length;s<p;++s){var a=i[s];if(Fe(o,n,a,r,t,e)){o=!0;break t}n=a[a.length-1]}}o=!1}return o},od.dm=function(){var t,e,o=ah(this),i=this.c,r=0,n=0;for(t=0,e=i.length;t<e;++t)var s=i[t],n=n+be(o,r,s,this.a),r=s[s.length-1];return n},od.Y=function(t){var e;void 0!==t?(e=ah(this).slice(),Ke(e,this.c,this.a,t)):e=this.A,t=e,e=this.c;var o,i,r=this.a,n=0,s=[],p=0;for(o=0,i=e.length;o<i;++o){var a=e[o];s[p++]=je(t,n,a,r,s[p]),n=a[a.length-1]}return s.length=p,s},od.Rj=function(){var t=new nh(null);return t.aa("XY",ph(this).slice()),t},od.Mc=function(t){var e=[],o=[],i=this.A,r=this.c,n=this.a;t=Math.sqrt(t);var s,p,a=0,h=0;for(s=0,p=r.length;s<p;++s){var l=r[s],u=[],h=Le(i,a,l,n,t,e,h,u);o.push(u),a=l[l.length-1]}return e.length=h,i=new sh(null),hh(i,"XY",e,o),i},od.gk=function(t){if(0>t||this.c.length<=t)return null;var e;0===t?e=0:(e=this.c[t-1],e=e[e.length-1]),t=this.c[t].slice();var o=t[t.length-1];if(0!==e){var i,r;for(i=0,r=t.length;i<r;++i)t[i]-=e}return i=new ze(null),i.aa(this.ia,this.A.slice(e,o),t),i},od.Wd=function(){var t,e,o,i,r=this.ia,n=this.A,s=this.c,p=[],a=0;for(t=0,e=s.length;t<e;++t){var h=s[t].slice(),l=h[h.length-1];if(0!==a)for(o=0,i=h.length;o<i;++o)h[o]-=a;o=new ze(null),o.aa(r,n.slice(a,l),h),p.push(o),a=l}return p},od.X=function(){return"MultiPolygon"},od.Na=function(t){t:{var e,o,i=ah(this),r=this.c,n=this.a,s=0;for(e=0,o=r.length;e<o;++e){var p=r[e];if(He(i,s,p,n,t)){t=!0;break t}s=p[p.length-1]}t=!1}return t},od.ma=function(t,e){if(t){ve(this,e,t,3),this.A||(this.A=[]);var o,i,r=this.A,n=this.a,s=this.c,p=0,s=s?s:[],a=0;for(o=0,i=t.length;o<i;++o)p=Pe(r,p,t[o],n,s[a]),s[a++]=p,p=p[p.length-1];s.length=a,0===s.length?this.A.length=0:(r=s[s.length-1],this.A.length=0===r.length?0:r[r.length-1]),this.v()}else hh(this,"XY",null,this.c)},e(uh,Ya);var Uv={Point:function(t){return void 0!==t.m&&void 0!==t.z?new Ie([t.x,t.y,t.z,t.m],"XYZM"):void 0!==t.z?new Ie([t.x,t.y,t.z],"XYZ"):void 0!==t.m?new Ie([t.x,t.y,t.m],"XYM"):new Ie([t.x,t.y])},LineString:function(t){return new th(t.paths[0],fh(t))},Polygon:function(t){return new ze(t.rings,fh(t))},MultiPoint:function(t){return new nh(t.points,fh(t))},MultiLineString:function(t){return new oh(t.paths,fh(t))},MultiPolygon:function(t){return new sh(t.rings,fh(t))}},Gv={Point:function(t){var e,o=t.Y();return t=t.ia,"XYZ"===t?e={x:o[0],y:o[1],z:o[2]}:"XYM"===t?e={x:o[0],y:o[1],m:o[2]}:"XYZM"===t?e={x:o[0],y:o[1],z:o[2],m:o[3]}:"XY"===t?e={x:o[0],y:o[1]}:n(!1,34),e},LineString:function(t){var e=yh(t);return{hasZ:e.hasZ,hasM:e.hasM,paths:[t.Y()]}},Polygon:function(t){var e=yh(t);return{hasZ:e.hasZ,hasM:e.hasM,rings:t.Y(!1)}},MultiPoint:function(t){var e=yh(t);return{hasZ:e.hasZ,hasM:e.hasM,points:t.Y()}},MultiLineString:function(t){var e=yh(t);return{hasZ:e.hasZ,hasM:e.hasM,paths:t.Y()}},MultiPolygon:function(t){var e=yh(t);t=t.Y(!1);for(var o=[],i=0;i<t.length;i++)for(var r=t[i].length-1;0<=r;r--)o.push(t[i][r]);return{hasZ:e.hasZ,hasM:e.hasM,rings:o}}};od=uh.prototype,od.Vc=function(t,e){var o=ch(t.geometry,e),i=new wa;return this.b&&i.Dc(this.b),i.Oa(o),e&&e.mf&&t.attributes[e.mf]&&i.Wb(t.attributes[e.mf]),t.attributes&&i.H(t.attributes),i},od.Gf=function(t,e){var o=e?e:{};if(t.features){var i,r,n=[],s=t.features;for(o.mf=t.objectIdFieldName,i=0,r=s.length;i<r;++i)n.push(this.Vc(s[i],o));return n}return[this.Vc(t,o)]},od.Ih=function(t,e){return ch(t,e)},od.Oh=function(t){return t.spatialReference&&t.spatialReference.wkid?re("EPSG:"+t.spatialReference.wkid):null},od.He=function(t,e){return dh(t,qa(this,e))},od.Zc=function(t,e){e=qa(this,e);var o={},i=t.V();return i&&(o.geometry=dh(i,e)),i=t.N(),delete i[t.f],o.attributes=m(i)?{}:i,e&&e.featureProjection&&(o.spatialReference={wkid:re(e.featureProjection).eb.split(":").pop()}),o},od.Ge=function(t,e){e=qa(this,e);var o,i,r=[];for(o=0,i=t.length;o<i;++o)r.push(this.Zc(t[o],e));return{features:r}},e(vh,gh),e(mh,vh),e(bh,mh),e(wh,gh),e(xh,gh),e(Sh,xh),e(Th,Sh),e(Eh,Sh),e(Mh,Sh),e(Ch,gh),e(Ph,Ch),e(Ah,xh),e(jh,xh),e(Nh,xh),e(Lh,Sh),e(Rh,Sh),e(kh,vh),e(Ih,Sh),e(Dh,mh),e(Oh,Ch),e(Uh,ce),od=Uh.prototype,od.clone=function(){var t=new Uh(null);return t.Zh(this.f),t},od.vb=function(t,e,o,i){if(i<mt(this.D(),t,e))return i;var r,n,s=this.f;for(r=0,n=s.length;r<n;++r)i=s[r].vb(t,e,o,i);return i},od.Ac=function(t,e){var o,i,r=this.f;for(o=0,i=r.length;o<i;++o)if(r[o].Ac(t,e))return!0;return!1},od.Pd=function(t){Et(1/0,1/0,-(1/0),-(1/0),t);for(var e=this.f,o=0,i=e.length;o<i;++o)At(t,e[o].D());return t},od.cf=function(){return Gh(this.f)},od.pd=function(t){if(this.o!=this.g&&(g(this.i),this.j=0,this.o=this.g),0>t||0!==this.j&&t<this.j)return this;var e=t.toString();if(this.i.hasOwnProperty(e))return this.i[e];var o,i,r=[],n=this.f,s=!1;for(o=0,i=n.length;o<i;++o){var p=n[o],a=p.pd(t);r.push(a),a!==p&&(s=!0)}return s?(t=new Uh(null),Hh(t),t.f=r,Xh(t),t.v(),this.i[e]=t):(this.j=t,this)},od.X=function(){return"GeometryCollection"},od.Na=function(t){var e,o,i=this.f;for(e=0,o=i.length;e<o;++e)if(i[e].Na(t))return!0;return!1},od.rotate=function(t,e){for(var o=this.f,i=0,r=o.length;i<r;++i)o[i].rotate(t,e);this.v()},od.scale=function(t,e,o){o||(o=Dt(this.D()));for(var i=this.f,r=0,n=i.length;r<n;++r)i[r].scale(t,e,o);this.v()},od.Zh=function(t){t=Gh(t),Hh(this),this.f=t,Xh(this),this.v()},od.oc=function(t){var e,o,i=this.f;for(e=0,o=i.length;e<o;++e)i[e].oc(t);this.v()},od.Pc=function(t,e){var o,i,r=this.f;for(o=0,i=r.length;o<i;++o)r[o].Pc(t,e);this.v()},od.la=function(){Hh(this),ce.prototype.la.call(this)},e(Wh,Ya);var Hv={Point:function(t){return new Ie(t.coordinates)},LineString:function(t){return new th(t.coordinates)},Polygon:function(t){return new ze(t.coordinates)},MultiPoint:function(t){return new nh(t.coordinates)},MultiLineString:function(t){return new oh(t.coordinates)},MultiPolygon:function(t){return new sh(t.coordinates)},GeometryCollection:function(t,e){var o=t.geometries.map(function(t){return $h(t,e)});return new Uh(o)}},Xv={Point:function(t){return{type:"Point",coordinates:t.Y()}},LineString:function(t){return{type:"LineString",coordinates:t.Y()}},Polygon:function(t,e){var o;return e&&(o=e.rightHanded),{type:"Polygon",coordinates:t.Y(o)}},MultiPoint:function(t){return{type:"MultiPoint",coordinates:t.Y()}},MultiLineString:function(t){return{type:"MultiLineString",coordinates:t.Y()}},MultiPolygon:function(t,e){var o;return e&&(o=e.rightHanded),{type:"MultiPolygon",coordinates:t.Y(o)}},GeometryCollection:function(t,e){return{type:"GeometryCollection",geometries:t.f.map(function(t){var o=hd({},e);return delete o.featureProjection,Kh(t,o)})}},Circle:function(){return{type:"GeometryCollection",geometries:[]}}};od=Wh.prototype,od.Vc=function(t,e){var o;o="Feature"===t.type?t:{type:"Feature",geometry:t};var i=$h(o.geometry,e),r=new wa;return this.b&&r.Dc(this.b),r.Oa(i),void 0!==o.id&&r.Wb(o.id),o.properties&&r.H(o.properties),r},od.Gf=function(t,e){var o;if("FeatureCollection"===t.type){o=[];var i,r,n=t.features;for(i=0,r=n.length;i<r;++i)o.push(this.Vc(n[i],e))}else o=[this.Vc(t,e)];return o},od.Ih=function(t,e){return $h(t,e)},od.Oh=function(t){t=t.crs;var e;return t?"name"==t.type?e=re(t.properties.name):"EPSG"==t.type?e=re("EPSG:"+t.properties.code):n(!1,36):e=this.defaultDataProjection,e},od.Zc=function(t,e){e=qa(this,e);var o={type:"Feature"},i=t.a;return void 0!==i&&(o.id=i),(i=t.V())?o.geometry=Kh(i,e):o.geometry=null,i=t.N(),delete i[t.f],m(i)?o.properties=null:o.properties=i,o},od.Ge=function(t,e){e=qa(this,e);var o,i,r=[];for(o=0,i=t.length;o<i;++o)r.push(this.Zc(t[o],e));return{type:"FeatureCollection",features:r}},od.He=function(t,e){return Kh(t,qa(this,e))},e(zh,Ka),od=zh.prototype,od.X=function(){return"xml"},od.Ub=function(t,e){if(Ma(t))return qh(this,t,e);if(Ca(t))return this.Gh(t,e);if("string"==typeof t){var o=Pa(t);return qh(this,o,e)}return null},od.Ha=function(t,e){if(Ma(t))return Vh(this,t,e);if(Ca(t))return this.kc(t,e);if("string"==typeof t){var o=Pa(t);return Vh(this,o,e)}return[]},od.Wc=function(t,e){if(Ma(t))return this.u(t,e);if(Ca(t)){var o=this.xe(t,[za(this,t,e?e:{})]);return o?o:null}return"string"==typeof t?(o=Pa(t),this.u(o,e)):null},od.Sa=function(t){return Ma(t)?this.Lf(t):Ca(t)?this.Ae(t):"string"==typeof t?(t=Pa(t),this.Lf(t)):null},od.Lf=function(){return this.defaultDataProjection},od.Ae=function(){return this.defaultDataProjection},od.Fd=function(t,e){var o=this.B(t,e);return this.f.serializeToString(o)},od.$b=function(t,e){var o=this.a(t,e);return this.f.serializeToString(o)},od.$c=function(t,e){var o=this.T(t,e);return this.f.serializeToString(o)},e(Yh,zh);var Wv=/^[\s\xa0]*$/;od=Yh.prototype,od.xd=function(t,e){var o=t.localName,i=null;if("FeatureCollection"==o)i="http://www.opengis.net/wfs"===t.namespaceURI?Ua([],this.b,t,e,this):Ua(null,this.b,t,e,this);else if("featureMembers"==o||"featureMember"==o){var r,n,s=e[0],p=s.featureType,a=s.featureNS;if(!p&&t.childNodes){for(p=[],a={},r=0,n=t.childNodes.length;r<n;++r){var h=t.childNodes[r];if(1===h.nodeType){var l=h.nodeName.split(":").pop();if(-1===p.indexOf(l)){var u,c="",f=0,h=h.namespaceURI;for(u in a){if(a[u]===h){c=u;break}++f}c||(c="p"+f,a[c]=h),p.push(c+":"+l)}}}"featureMember"!=o&&(s.featureType=p,s.featureNS=a)}"string"==typeof a&&(r=a,a={},a.p0=r);var y,s={},p=Array.isArray(p)?p:[p];for(y in a){for(l={},r=0,n=p.length;r<n;++r)(-1===p[r].indexOf(":")?"p0":p[r].split(":")[0])===y&&(l[p[r].split(":").pop()]="featureMembers"==o?ja(this.Ff,this):Na(this.Ff,this));s[a[y]]=l}i="featureMember"==o?Ua(void 0,s,t,e):Ua([],s,t,e)}return null===i&&(i=[]),i},od.xe=function(t,e){var o=e[0];o.srsName=t.firstElementChild.getAttribute("srsName");var i=Ua(null,this.Yf,t,e,this);if(i)return Va(i,!1,o)},od.Ff=function(t,e){var o,i;(i=t.getAttribute("fid"))||(i=t.getAttributeNS("http://www.opengis.net/gml","id")||"");var r,n={};for(o=t.firstElementChild;o;o=o.nextElementSibling){var s=o.localName;if(0===o.childNodes.length||1===o.childNodes.length&&(3===o.firstChild.nodeType||4===o.firstChild.nodeType)){var p=Ta(o,!1);Wv.test(p)&&(p=void 0),n[s]=p}else"boundedBy"!==s&&(r=s),n[s]=this.xe(o,e)}return o=new wa(n),r&&o.Dc(r),i&&o.Wb(i),o},od.Nh=function(t,e){var o=this.we(t,e);if(o){var i=new Ie(null);return i.aa("XYZ",o),i}},od.Lh=function(t,e){var o=Ua([],this.Ji,t,e,this);if(o)return new nh(o)},od.Kh=function(t,e){var o=Ua([],this.Ii,t,e,this);if(o){var i=new oh(null);return rh(i,o),i}},od.Mh=function(t,e){var o=Ua([],this.Ki,t,e,this);if(o){var i=new sh(null);return lh(i,o),i}},od.Dh=function(t,e){Ba(this.Ni,t,e,this)},od.Mg=function(t,e){Ba(this.Gi,t,e,this)},od.Eh=function(t,e){Ba(this.Oi,t,e,this)},od.ye=function(t,e){var o=this.we(t,e);if(o){var i=new th(null);return i.aa("XYZ",o),i}},od.oo=function(t,e){var o=Ua(null,this.Hd,t,e,this);if(o)return o},od.Jh=function(t,e){var o=this.we(t,e);if(o){var i=new Re(null);return ke(i,"XYZ",o),i}},od.ze=function(t,e){var o=Ua([null],this.Ke,t,e,this);if(o&&o[0]){var i,r,n=new ze(null),s=o[0],p=[s.length];for(i=1,r=o.length;i<r;++i)K(s,o[i]),p.push(s.length);return n.aa("XYZ",s,p),n}},od.we=function(t,e){return Ua(null,this.Hd,t,e,this)},od.Ji={"http://www.opengis.net/gml":{pointMember:ja(Yh.prototype.Dh),pointMembers:ja(Yh.prototype.Dh)}},od.Ii={"http://www.opengis.net/gml":{lineStringMember:ja(Yh.prototype.Mg),lineStringMembers:ja(Yh.prototype.Mg)}},od.Ki={"http://www.opengis.net/gml":{polygonMember:ja(Yh.prototype.Eh),polygonMembers:ja(Yh.prototype.Eh)}},od.Ni={"http://www.opengis.net/gml":{Point:ja(Yh.prototype.we)}},od.Gi={"http://www.opengis.net/gml":{LineString:ja(Yh.prototype.ye)}},od.Oi={"http://www.opengis.net/gml":{Polygon:ja(Yh.prototype.ze)}},od.Id={"http://www.opengis.net/gml":{LinearRing:Na(Yh.prototype.oo)}},od.kc=function(t,e){var o={featureType:this.featureType,featureNS:this.featureNS};return e&&hd(o,za(this,t,e)),this.xd(t,[o])||[]},od.Ae=function(t){return re(this.srsName?this.srsName:t.firstElementChild.getAttribute("srsName"))},e(al,Yh),od=al.prototype,od.so=function(t,e){var o=Ua([],this.Hi,t,e,this);if(o){var i=new oh(null);return rh(i,o),i}},od.to=function(t,e){var o=Ua([],this.Li,t,e,this);if(o){var i=new sh(null);return lh(i,o),i}},od.pg=function(t,e){Ba(this.Di,t,e,this)},od.ni=function(t,e){Ba(this.Si,t,e,this)},od.wo=function(t,e){return Ua([null],this.Mi,t,e,this)},od.yo=function(t,e){return Ua([null],this.Ri,t,e,this)},od.xo=function(t,e){return Ua([null],this.Ke,t,e,this)},od.ro=function(t,e){return Ua([null],this.Hd,t,e,this)},od.al=function(t,e){var o=Ua(void 0,this.Id,t,e,this);o&&e[e.length-1].push(o)},od.vj=function(t,e){var o=Ua(void 0,this.Id,t,e,this);o&&(e[e.length-1][0]=o)},od.Ph=function(t,e){var o=Ua([null],this.Ti,t,e,this);if(o&&o[0]){var i,r,n=new ze(null),s=o[0],p=[s.length];for(i=1,r=o.length;i<r;++i)K(s,o[i]),p.push(s.length);return n.aa("XYZ",s,p),n}},od.Fh=function(t,e){var o=Ua([null],this.Ei,t,e,this);if(o){var i=new th(null);return i.aa("XYZ",o),i}},od.no=function(t,e){var o=Ua([null],this.Fi,t,e,this);return Et(o[1][0],o[1][1],o[2][0],o[2][1])},od.po=function(t,e){for(var o,i=Ta(t,!1),r=/^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/,n=[];o=r.exec(i);)n.push(parseFloat(o[1])),i=i.substr(o[0].length);if(""===i){if(i=e[0].srsName,r="enu",i&&(r=re(i).b),"neu"===r)for(i=0,r=n.length;i<r;i+=3)o=n[i],n[i]=n[i+1],n[i+1]=o;return i=n.length,2==i&&n.push(0),0===i?void 0:n}},od.Jf=function(t,e){var o=Ta(t,!1).replace(/^\s*|\s*$/g,""),i=e[0].srsName,r=t.parentNode.getAttribute("srsDimension"),n="enu";i&&(n=re(i).b),o=o.split(/\s+/),i=2,t.getAttribute("srsDimension")?i=ol(t.getAttribute("srsDimension")):t.getAttribute("dimension")?i=ol(t.getAttribute("dimension")):r&&(i=ol(r));for(var s,p,a=[],h=0,l=o.length;h<l;h+=i)r=parseFloat(o[h]),s=parseFloat(o[h+1]),p=3===i?parseFloat(o[h+2]):0,"en"===n.substr(0,2)?a.push(r,s,p):a.push(s,r,p);return a},od.Hd={"http://www.opengis.net/gml":{pos:Na(al.prototype.po),posList:Na(al.prototype.Jf)}},od.Ke={"http://www.opengis.net/gml":{interior:al.prototype.al,exterior:al.prototype.vj}},od.Yf={"http://www.opengis.net/gml":{Point:Na(Yh.prototype.Nh),MultiPoint:Na(Yh.prototype.Lh),LineString:Na(Yh.prototype.ye),MultiLineString:Na(Yh.prototype.Kh),LinearRing:Na(Yh.prototype.Jh),Polygon:Na(Yh.prototype.ze),MultiPolygon:Na(Yh.prototype.Mh),Surface:Na(al.prototype.Ph),MultiSurface:Na(al.prototype.to),Curve:Na(al.prototype.Fh),MultiCurve:Na(al.prototype.so),Envelope:Na(al.prototype.no)}},od.Hi={"http://www.opengis.net/gml":{curveMember:ja(al.prototype.pg),curveMembers:ja(al.prototype.pg)}},od.Li={"http://www.opengis.net/gml":{surfaceMember:ja(al.prototype.ni),surfaceMembers:ja(al.prototype.ni)}},od.Di={"http://www.opengis.net/gml":{LineString:ja(Yh.prototype.ye),Curve:ja(al.prototype.Fh)}},od.Si={"http://www.opengis.net/gml":{Polygon:ja(Yh.prototype.ze),Surface:ja(al.prototype.Ph)}},od.Ti={"http://www.opengis.net/gml":{patches:Na(al.prototype.wo)}},od.Ei={"http://www.opengis.net/gml":{segments:Na(al.prototype.yo)}},od.Fi={"http://www.opengis.net/gml":{lowerCorner:ja(al.prototype.Jf),upperCorner:ja(al.prototype.Jf)}},od.Mi={"http://www.opengis.net/gml":{PolygonPatch:Na(al.prototype.xo)}},od.Ri={"http://www.opengis.net/gml":{LineStringSegment:Na(al.prototype.ro)}},od.zi=function(t,e,o){var i=o[o.length-1].srsName;i&&t.setAttribute("srsName",i),i=Sa(t.namespaceURI,"pos"),t.appendChild(i),o=o[o.length-1].srsName,t="enu",o&&(t=re(o).b),e=e.Y(),pl(i,"en"===t.substr(0,2)?e[0]+" "+e[1]:e[1]+" "+e[0])};var $v={"http://www.opengis.net/gml":{lowerCorner:ka(pl),upperCorner:ka(pl)}};od=al.prototype,od.jp=function(t,e,o){var i=o[o.length-1].srsName;i&&t.setAttribute("srsName",i),Ha({node:t},$v,Bv,[e[0]+" "+e[1],e[2]+" "+e[3]],o,["lowerCorner","upperCorner"],this)},od.wi=function(t,e,o){var i=o[o.length-1].srsName;i&&t.setAttribute("srsName",i),i=Sa(t.namespaceURI,"posList"),t.appendChild(i),hl(i,e,o)},od.Qi=function(t,e){var o=e[e.length-1],i=o.node,r=o.exteriorWritten;return void 0===r&&(o.exteriorWritten=!0),Sa(i.namespaceURI,void 0!==r?"interior":"exterior")},od.Ie=function(t,e,o){var i=o[o.length-1].srsName;"PolygonPatch"!==t.nodeName&&i&&t.setAttribute("srsName",i),"Polygon"===t.nodeName||"PolygonPatch"===t.nodeName?(e=e.Vd(),Ha({node:t,srsName:i},Vv,this.Qi,e,o,void 0,this)):"Surface"===t.nodeName&&(i=Sa(t.namespaceURI,"patches"),t.appendChild(i),t=Sa(i.namespaceURI,"PolygonPatch"),i.appendChild(t),this.Ie(t,e,o))},od.Ee=function(t,e,o){var i=o[o.length-1].srsName;"LineStringSegment"!==t.nodeName&&i&&t.setAttribute("srsName",i),"LineString"===t.nodeName||"LineStringSegment"===t.nodeName?(i=Sa(t.namespaceURI,"posList"),t.appendChild(i),hl(i,e,o)):"Curve"===t.nodeName&&(i=Sa(t.namespaceURI,"segments"),t.appendChild(i),t=Sa(i.namespaceURI,"LineStringSegment"),i.appendChild(t),this.Ee(t,e,o))},od.yi=function(t,e,o){var i=o[o.length-1],r=i.srsName,i=i.surface;r&&t.setAttribute("srsName",r),e=e.Wd(),Ha({node:t,srsName:r,surface:i},Kv,this.c,e,o,void 0,this)},od.kp=function(t,e,o){var i=o[o.length-1].srsName;i&&t.setAttribute("srsName",i),e=e.je(),Ha({node:t,srsName:i},zv,Da("pointMember"),e,o,void 0,this)},od.xi=function(t,e,o){var i=o[o.length-1],r=i.srsName,i=i.curve;r&&t.setAttribute("srsName",r),e=e.od(),Ha({node:t,srsName:r,curve:i},qv,this.c,e,o,void 0,this)},od.Ai=function(t,e,o){var i=Sa(t.namespaceURI,"LinearRing");t.appendChild(i),this.wi(i,e,o)},od.Bi=function(t,e,o){var i=this.g(e,o);i&&(t.appendChild(i),this.Ie(i,e,o))},od.lp=function(t,e,o){var i=Sa(t.namespaceURI,"Point");t.appendChild(i),this.zi(i,e,o)},od.vi=function(t,e,o){var i=this.g(e,o);i&&(t.appendChild(i),this.Ee(i,e,o))},od.ad=function(t,e,o){var i=o[o.length-1],r=hd({},i);r.node=t;var n;n=Array.isArray(e)?i.dataProjection?ue(e,i.featureProjection,i.dataProjection):e:Va(e,!0,i),Ha(r,Yv,this.g,[n],o,void 0,this)},od.ti=function(t,e,o){var i=e.a;i&&t.setAttribute("fid",i);var i=o[o.length-1],r=i.featureNS,n=e.f;i.Cc||(i.Cc={},i.Cc[r]={});var s=e.N();e=[];var p,a=[];for(p in s){var h=s[p];null!==h&&(e.push(p),a.push(h),p==n||h instanceof ce?p in i.Cc[r]||(i.Cc[r][p]=ka(this.ad,this)):p in i.Cc[r]||(i.Cc[r][p]=ka(pl)))}p=hd({},i),p.node=t,Ha(p,i.Cc,Da(void 0,r),a,o,e)};var Kv={"http://www.opengis.net/gml":{surfaceMember:ka(al.prototype.Bi),polygonMember:ka(al.prototype.Bi)}},zv={"http://www.opengis.net/gml":{pointMember:ka(al.prototype.lp)}},qv={"http://www.opengis.net/gml":{lineStringMember:ka(al.prototype.vi),curveMember:ka(al.prototype.vi)}},Vv={"http://www.opengis.net/gml":{exterior:ka(al.prototype.Ai),interior:ka(al.prototype.Ai)}},Yv={"http://www.opengis.net/gml":{Curve:ka(al.prototype.Ee),MultiCurve:ka(al.prototype.xi),Point:ka(al.prototype.zi),MultiPoint:ka(al.prototype.kp),LineString:ka(al.prototype.Ee),MultiLineString:ka(al.prototype.xi),LinearRing:ka(al.prototype.wi),Polygon:ka(al.prototype.Ie),MultiPolygon:ka(al.prototype.yi),Surface:ka(al.prototype.Ie),MultiSurface:ka(al.prototype.yi),Envelope:ka(al.prototype.jp)}},Zv={MultiLineString:"lineStringMember",MultiCurve:"curveMember",MultiPolygon:"polygonMember",MultiSurface:"surfaceMember"};al.prototype.c=function(t,e){return Sa("http://www.opengis.net/gml",Zv[e[e.length-1].node.nodeName])},al.prototype.g=function(t,e){var o,i=e[e.length-1],r=i.multiSurface,n=i.surface,s=i.curve,i=i.multiCurve;return Array.isArray(t)?o="Envelope":(o=t.X(),"MultiPolygon"===o&&!0===r?o="MultiSurface":"Polygon"===o&&!0===n?o="Surface":"LineString"===o&&!0===s?o="Curve":"MultiLineString"===o&&!0===i&&(o="MultiCurve")),Sa("http://www.opengis.net/gml",o)},al.prototype.T=function(t,e){e=qa(this,e);var o=Sa("http://www.opengis.net/gml","geom"),i={node:o,srsName:this.srsName,curve:this.i,surface:this.s,multiSurface:this.o,multiCurve:this.l};return e&&hd(i,e),this.ad(o,t,[i]),o},al.prototype.a=function(t,e){e=qa(this,e);var o=Sa("http://www.opengis.net/gml","featureMembers");o.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.schemaLocation);var i={srsName:this.srsName,curve:this.i,surface:this.s,multiSurface:this.o,multiCurve:this.l,featureNS:this.featureNS,featureType:this.featureType};e&&hd(i,e);var i=[i],r=i[i.length-1],n=r.featureType,s=r.featureNS,p={};return p[s]={},p[s][n]=ka(this.ti,this),r=hd({},r),r.node=o,Ha(r,p,Da(n,s),t,i),o},e(ll,Yh),od=ll.prototype,od.Hh=function(t,e){var o=Ta(t,!1).replace(/^\s*|\s*$/g,""),i=e[0].srsName,r=t.parentNode.getAttribute("srsDimension"),n="enu";i&&(i=re(i))&&(n=i.b),o=o.split(/[\s,]+/),i=2,t.getAttribute("srsDimension")?i=ol(t.getAttribute("srsDimension")):t.getAttribute("dimension")?i=ol(t.getAttribute("dimension")):r&&(i=ol(r));for(var s,p,a=[],h=0,l=o.length;h<l;h+=i)r=parseFloat(o[h]),s=parseFloat(o[h+1]),p=3===i?parseFloat(o[h+2]):0,"en"===n.substr(0,2)?a.push(r,s,p):a.push(s,r,p);return a},od.lo=function(t,e){var o=Ua([null],this.Ci,t,e,this);return Et(o[1][0],o[1][1],o[1][3],o[1][4])},od.Zk=function(t,e){var o=Ua(void 0,this.Id,t,e,this);o&&e[e.length-1].push(o)},od.Tn=function(t,e){var o=Ua(void 0,this.Id,t,e,this);o&&(e[e.length-1][0]=o)},od.Hd={"http://www.opengis.net/gml":{coordinates:Na(ll.prototype.Hh)}},od.Ke={"http://www.opengis.net/gml":{innerBoundaryIs:ll.prototype.Zk,outerBoundaryIs:ll.prototype.Tn}},od.Ci={"http://www.opengis.net/gml":{coordinates:ja(ll.prototype.Hh)}},od.Yf={"http://www.opengis.net/gml":{Point:Na(Yh.prototype.Nh),MultiPoint:Na(Yh.prototype.Lh),LineString:Na(Yh.prototype.ye),MultiLineString:Na(Yh.prototype.Kh),LinearRing:Na(Yh.prototype.Jh),Polygon:Na(Yh.prototype.ze),MultiPolygon:Na(Yh.prototype.Mh),Box:Na(ll.prototype.lo)}},e(ul,zh);var Jv=[null,"http://www.topografix.com/GPX/1/0","http://www.topografix.com/GPX/1/1"],_v={rte:dl,trk:gl,wpt:vl},Qv=Fa(Jv,{rte:ja(dl),trk:ja(gl),wpt:ja(vl)}),tm=Fa(Jv,{text:Ra(il,"linkText"),type:Ra(il,"linkType")}),em=Fa(Jv,{name:Ra(il),cmt:Ra(il),desc:Ra(il),src:Ra(il),link:fl,number:Ra(el),extensions:yl,type:Ra(il),rtept:function(t,e){var o=Ua({},om,t,e);o&&cl(e[e.length-1].flatCoordinates,t,o)}}),om=Fa(Jv,{ele:Ra(Qh),time:Ra(_h)}),im=Fa(Jv,{name:Ra(il),cmt:Ra(il),desc:Ra(il),src:Ra(il),link:fl,number:Ra(el),type:Ra(il),extensions:yl,trkseg:function(t,e){var o=e[e.length-1];Ba(rm,t,e),o.ends.push(o.flatCoordinates.length)}}),rm=Fa(Jv,{trkpt:function(t,e){var o=Ua({},nm,t,e);o&&cl(e[e.length-1].flatCoordinates,t,o)}}),nm=Fa(Jv,{ele:Ra(Qh),time:Ra(_h)}),sm=Fa(Jv,{ele:Ra(Qh),time:Ra(_h),magvar:Ra(Qh),geoidheight:Ra(Qh),name:Ra(il),cmt:Ra(il),desc:Ra(il),src:Ra(il),link:fl,sym:Ra(il),type:Ra(il),fix:Ra(il),sat:Ra(el),hdop:Ra(Qh),vdop:Ra(Qh),pdop:Ra(Qh),ageofdgpsdata:Ra(Qh),dgpsid:Ra(el),extensions:yl});ul.prototype.Gh=function(t,e){if(!X(Jv,t.namespaceURI))return null;var o=_v[t.localName];return o&&(o=o(t,[za(this,t,e)]))?(ml(this,[o]),o):null},ul.prototype.kc=function(t,e){if(!X(Jv,t.namespaceURI))return[];if("gpx"==t.localName){var o=Ua([],Qv,t,[za(this,t,e)]);if(o)return ml(this,o),o}return[]};var pm=["text","type"],am=Fa(Jv,{text:ka(pl),type:ka(pl)}),hm=Fa(Jv,"name cmt desc src link number type rtept".split(" ")),lm=Fa(Jv,{name:ka(pl),cmt:ka(pl),desc:ka(pl),src:ka(pl),link:ka(bl),number:ka(sl),type:ka(pl),rtept:Ia(ka(wl))}),um=Fa(Jv,["ele","time"]),cm=Fa(Jv,"name cmt desc src link number type trkseg".split(" ")),fm=Fa(Jv,{name:ka(pl),cmt:ka(pl),desc:ka(pl),src:ka(pl),link:ka(bl),number:ka(sl),type:ka(pl),trkseg:Ia(ka(function(t,e,o){Ha({node:t,geometryLayout:e.ia,properties:{}},dm,ym,e.Y(),o)}))}),ym=Da("trkpt"),dm=Fa(Jv,{trkpt:ka(wl)}),gm=Fa(Jv,"ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),vm=Fa(Jv,{ele:ka(nl),time:ka(function(t,e){var o=new Date(1e3*e);t.appendChild(Fv.createTextNode(o.getUTCFullYear()+"-"+rt(o.getUTCMonth()+1)+"-"+rt(o.getUTCDate())+"T"+rt(o.getUTCHours())+":"+rt(o.getUTCMinutes())+":"+rt(o.getUTCSeconds())+"Z"))}),magvar:ka(nl),geoidheight:ka(nl),name:ka(pl),cmt:ka(pl),desc:ka(pl),src:ka(pl),link:ka(bl),sym:ka(pl),type:ka(pl),fix:ka(pl),sat:ka(sl),hdop:ka(nl),vdop:ka(nl),pdop:ka(nl),ageofdgpsdata:ka(nl),dgpsid:ka(sl)}),mm={Point:"wpt",LineString:"rte",MultiLineString:"trk"},bm=Fa(Jv,{rte:ka(function(t,e,o){var i=o[0],r=e.N();t={node:t,properties:r},(e=e.V())&&(e=Va(e,!0,i),t.geometryLayout=e.ia,r.rtept=e.Y()),i=hm[o[o.length-1].node.namespaceURI],r=Oa(r,i),Ha(t,lm,Bv,r,o,i)}),trk:ka(function(t,e,o){var i=o[0],r=e.N();t={node:t,properties:r},(e=e.V())&&(e=Va(e,!0,i),r.trkseg=e.od()),i=cm[o[o.length-1].node.namespaceURI],r=Oa(r,i),Ha(t,fm,Bv,r,o,i)}),wpt:ka(function(t,e,o){var i=o[0],r=o[o.length-1];r.properties=e.N(),(e=e.V())&&(e=Va(e,!0,i),r.geometryLayout=e.ia,wl(t,e.Y(),o))})});ul.prototype.a=function(t,e){e=qa(this,e);var o=Sa("http://www.topografix.com/GPX/1/1","gpx");return o.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"),o.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"),o.setAttribute("version","1.1"),o.setAttribute("creator","OpenLayers 3"),Ha({node:o},bm,xl,t,[e]),o},e(Sl,Ka),od=Sl.prototype,od.X=function(){return"text"},od.Ub=function(t,e){return this.wd(Tl(t),qa(this,e))},od.Ha=function(t,e){return this.Hf(Tl(t),qa(this,e))},od.Wc=function(t,e){return this.yd(Tl(t),qa(this,e))},od.Sa=function(){return this.defaultDataProjection},od.Fd=function(t,e){return this.Fe(t,qa(this,e))},od.$b=function(t,e){return this.ui(t,qa(this,e))},od.$c=function(t,e){return this.Gd(t,qa(this,e))},e(El,Sl);var wm=/^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,xm=/^H.([A-Z]{3}).*?:(.*)/,Sm=/^HFDTE(\d{2})(\d{2})(\d{2})/,Tm=/\r\n|\r|\n/;El.prototype.wd=function(t,e){var o,i,r=this.b,n=t.split(Tm),s={},p=[],a=2e3,h=0,l=1,u=-1;for(o=0,i=n.length;o<i;++o){var c,f=n[o];if("B"==f.charAt(0)){if(c=wm.exec(f)){var f=parseInt(c[1],10),y=parseInt(c[2],10),d=parseInt(c[3],10),g=parseInt(c[4],10)+parseInt(c[5],10)/6e4;"S"==c[6]&&(g=-g);var v=parseInt(c[7],10)+parseInt(c[8],10)/6e4;"W"==c[9]&&(v=-v),p.push(v,g),r!=Cm&&p.push(r==Mm?parseInt(c[11],10):r==Em?parseInt(c[12],10):0),c=Date.UTC(a,h,l,f,y,d),c<u&&(c=Date.UTC(a,h,l+1,f,y,d)),p.push(c/1e3),u=c}}else"H"==f.charAt(0)&&((c=Sm.exec(f))?(l=parseInt(c[1],10),h=parseInt(c[2],10)-1,a=2e3+parseInt(c[3],10)):(c=xm.exec(f))&&(s[c[1]]=c[2].trim()))}return 0===p.length?null:(n=new th(null),n.aa(r==Cm?"XYM":"XYZM",p),r=new wa(Va(n,!1,e)),r.H(s),r)},El.prototype.Hf=function(t,e){var o=this.wd(t,e);return o?[o]:[]};var Em="barometric",Mm="gps",Cm="none";e(Ml,k),Ml.prototype.T=function(){this.f=jg,this.i.forEach(P),this.i=null,this.b("change")},Ml.prototype.u=function(){if(this.f=Ag,this.g&&(this.a.width=this.g[0],this.a.height=this.g[1]),this.g=[this.a.width,this.a.height],this.i.forEach(P),this.i=null,Cl(this),!this.s&&null!==this.j){this.c.width=this.a.width,this.c.height=this.a.height;var t=this.c.getContext("2d");t.drawImage(this.a,0,0);for(var e=t.getImageData(0,0,this.a.width,this.a.height),o=e.data,i=this.j[0]/255,r=this.j[1]/255,n=this.j[2]/255,s=0,p=o.length;s<p;s+=4)o[s]*=i,o[s+1]*=r,o[s+2]*=n;t.putImageData(e,0,0)}this.b("change")},Ml.prototype.load=function(){if(this.f==Cg){this.f=Pg,this.i=[M(this.a,"error",this.T,this),M(this.a,"load",this.u,this)];try{this.a.src=this.o}catch(t){this.T()}}},e(Pl,jn),od=Pl.prototype,od.clone=function(){var t,e=this.Tb(1);if(this.b.f===Ag)if("IMG"===e.tagName.toUpperCase())t=e.cloneNode(!0);else{t=document.createElement("canvas");var o=t.getContext("2d");t.width=e.width,t.height=e.height,o.drawImage(e,0,0)}return new Pl({anchor:this.f.slice(),anchorOrigin:this.a,anchorXUnits:this.B,anchorYUnits:this.G,crossOrigin:this.na,color:this.i&&this.i.slice?this.i.slice():this.i||void 0,img:t?t:void 0,imgSize:t?this.b.g.slice():void 0,src:t?void 0:this.b.o,offset:this.S.slice(),offsetOrigin:this.g,size:null!==this.C?this.C.slice():void 0,opacity:this.l,scale:this.c,snapToPixel:this.u,rotation:this.o,rotateWithView:this.T})},od.cc=function(){if(this.j)return this.j;var t=this.f,e=this.Gb();if(this.B==Pm||this.G==Pm){if(!e)return null;t=this.f.slice(),this.B==Pm&&(t[0]*=e[0]),this.G==Pm&&(t[1]*=e[1])}if(this.a!=Nm){if(!e)return null;t===this.f&&(t=this.f.slice()),this.a!=Lm&&this.a!=jm||(t[0]=-t[0]+e[0]),this.a!=Am&&this.a!=jm||(t[1]=-t[1]+e[1])}return this.j=t},od.Tb=function(){var t=this.b;return t.c?t.c:t.a},od.md=function(){return this.b.g},od.vd=function(){return this.b.f},od.pe=function(){var t=this.b;if(!t.l)if(t.s){var e=t.g[0],o=t.g[1],i=Wo(e,o);i.fillRect(0,0,e,o),t.l=i.canvas}else t.l=t.a;return t.l},od.jc=function(){if(this.s)return this.s;var t=this.S;if(this.g!=Nm){var e=this.Gb(),o=this.b.g;if(!e||!o)return null;t=t.slice(),this.g!=Lm&&this.g!=jm||(t[0]=o[0]-e[0]-t[0]),this.g!=Am&&this.g!=jm||(t[1]=o[1]-e[1]-t[1])}return this.s=t},od.sn=function(){return this.b.o},od.Gb=function(){return this.C?this.C:this.b.g},od.pf=function(t,e){return E(this.b,"change",t,e)},od.load=function(){this.b.load()},od.Uf=function(t,e){C(this.b,"change",t,e)};var Pm="fraction",Am="bottom-left",jm="bottom-right",Nm="top-left",Lm="top-right";od=Al.prototype,od.clone=function(){return new Al({font:this.g,rotation:this.j,rotateWithView:this.s,scale:this.a,text:this.Fa(),textAlign:this.l,textBaseline:this.o,fill:this.b?this.b.clone():void 0,stroke:this.f?this.f.clone():void 0,offsetX:this.c,offsetY:this.i})},od.Lj=function(){return this.g},od.Zj=function(){return this.c},od.$j=function(){return this.i},od.In=function(){return this.b},od.Jn=function(){return this.s},od.Kn=function(){return this.j},od.Ln=function(){return this.a},od.Mn=function(){return this.f},od.Fa=function(){return this.T},od.lk=function(){return this.l},od.mk=function(){return this.o},od.Yh=function(t){this.g=t},od.di=function(t){this.c=t},od.ei=function(t){this.i=t},od.Xh=function(t){this.b=t},od.Nn=function(t){this.j=t},od.Ah=function(t){this.a=t},od.gi=function(t){this.f=t},od.hi=function(t){this.T=t},od.ii=function(t){this.l=t},od.Vo=function(t){this.o=t};var Rm,km,Im,Dm,Om,Fm,Bm,Um,Gm,Hm,Xm,Wm,$m,Km,zm;
-e(jl,zh);var qm=["http://www.google.com/kml/ext/2.2"],Vm=[null,"http://earth.google.com/kml/2.0","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.2","http://www.opengis.net/kml/2.2"],Ym={fraction:Pm,pixels:"pixels"},Zm=Fa(Vm,{value:Na(il)}),Jm=Fa(Vm,{Data:function(t,e){var o=t.getAttribute("name");if(null!==o){var i=Ua(void 0,Zm,t,e);i&&(e[e.length-1][o]=i)}},SchemaData:function(t,e){Ba(gb,t,e)}}),_m=Fa(Vm,{extrude:Ra(Zh),altitudeMode:Ra(il)}),Qm=Fa(Vm,{coordinates:Na(Il)}),tb=Fa(Vm,{innerBoundaryIs:function(t,e){var o=Ua(void 0,nb,t,e);o&&e[e.length-1].push(o)},outerBoundaryIs:function(t,e){var o=Ua(void 0,cb,t,e);o&&(e[e.length-1][0]=o)}}),eb=Fa(Vm,{when:function(t,e){var o=e[e.length-1].si,i=Ta(t,!1),i=Date.parse(i);o.push(isNaN(i)?0:i)}},Fa(qm,{coord:function(t,e){var o=e[e.length-1].A,i=Ta(t,!1);(i=/^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(i))?o.push(parseFloat(i[1]),parseFloat(i[2]),parseFloat(i[3]),0):o.push(0,0,0,0)}})),ob=Fa(Vm,{coordinates:Na(Il)}),ib=Fa(Vm,{href:Ra(Dl)},Fa(qm,{x:Ra(Qh),y:Ra(Qh),w:Ra(Qh),h:Ra(Qh)})),rb=Fa(Vm,{Icon:Ra(function(t,e){var o=Ua({},ib,t,e);return o?o:null}),heading:Ra(Qh),hotSpot:Ra(function(t){var e=t.getAttribute("xunits"),o=t.getAttribute("yunits");return{x:parseFloat(t.getAttribute("x")),Wf:Ym[e],y:parseFloat(t.getAttribute("y")),Xf:Ym[o]}}),scale:Ra(Ol)}),nb=Fa(Vm,{LinearRing:Na(Fl)}),sb=Fa(Vm,{color:Ra(kl),scale:Ra(Ol)}),pb=Fa(Vm,{color:Ra(kl),width:Ra(Qh)}),ab=Fa(Vm,{LineString:ja(Ul),LinearRing:ja(Gl),MultiGeometry:ja(Hl),Point:ja(Xl),Polygon:ja(Wl)}),hb=Fa(qm,{Track:ja(Bl)}),lb=Fa(Vm,{ExtendedData:zl,Link:function(t,e){Ba(ub,t,e)},address:Ra(il),description:Ra(il),name:Ra(il),open:Ra(Zh),phoneNumber:Ra(il),visibility:Ra(Zh)}),ub=Fa(Vm,{href:Ra(Dl)}),cb=Fa(Vm,{LinearRing:Na(Fl)}),fb=Fa(Vm,{Style:Ra($l),key:Ra(il),styleUrl:Ra(Dl)}),yb=Fa(Vm,{ExtendedData:zl,MultiGeometry:Ra(Hl,"geometry"),LineString:Ra(Ul,"geometry"),LinearRing:Ra(Gl,"geometry"),Point:Ra(Xl,"geometry"),Polygon:Ra(Wl,"geometry"),Style:Ra($l),StyleMap:function(t,e){var o=Ua(void 0,mb,t,e);if(o){var i=e[e.length-1];Array.isArray(o)?i.Style=o:"string"==typeof o?i.styleUrl=o:n(!1,38)}},address:Ra(il),description:Ra(il),name:Ra(il),open:Ra(Zh),phoneNumber:Ra(il),styleUrl:Ra(Dl),visibility:Ra(Zh)},Fa(qm,{MultiTrack:Ra(function(t,e){var o=Ua([],hb,t,e);if(o){var i=new oh(null);return rh(i,o),i}},"geometry"),Track:Ra(Bl,"geometry")})),db=Fa(Vm,{color:Ra(kl),fill:Ra(Zh),outline:Ra(Zh)}),gb=Fa(Vm,{SimpleData:function(t,e){var o=t.getAttribute("name");if(null!==o){var i=il(t);e[e.length-1][o]=i}}}),vb=Fa(Vm,{IconStyle:function(t,e){var o=Ua({},rb,t,e);if(o){var i,r=e[e.length-1],n="Icon"in o?o.Icon:{},s=!("Icon"in o)||0<Object.keys(n).length,p=n.href;p?i=p:s&&(i=Um);var a,h,u;(p=o.hotSpot)?(a=[p.x,p.y],h=p.Wf,u=p.Xf):i===Um?(a=Dm,h=Om,u=Fm):/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(i)&&(a=[.5,0],u=h=Pm);var c,p=n.x,f=n.y;void 0!==p&&void 0!==f&&(c=[p,f]);var y,p=n.w,n=n.h;void 0!==p&&void 0!==n&&(y=[p,n]);var d,n=o.heading;void 0!==n&&(d=l(n)),o=o.scale,o=isNaN(o)||void 0===o?Gm:o*Gm,s?(i==Um&&(y=Bm,void 0===o&&(o=Gm)),s=new Pl({anchor:a,anchorOrigin:Am,anchorXUnits:h,anchorYUnits:u,crossOrigin:"anonymous",offset:c,offsetOrigin:Am,rotation:d,scale:o,size:y,src:i}),r.imageStyle=s):r.imageStyle=Xm}},LabelStyle:function(t,e){var o=Ua({},sb,t,e);o&&(e[e.length-1].textStyle=new Al({fill:new Rn({color:"color"in o?o.color:km}),scale:o.scale}))},LineStyle:function(t,e){var o=Ua({},pb,t,e);o&&(e[e.length-1].strokeStyle=new In({color:"color"in o?o.color:km,width:"width"in o?o.width:1}))},PolyStyle:function(t,e){var o=Ua({},db,t,e);if(o){var i=e[e.length-1];i.fillStyle=new Rn({color:"color"in o?o.color:km});var r=o.fill;void 0!==r&&(i.fill=r),o=o.outline,void 0!==o&&(i.outline=o)}}}),mb=Fa(Vm,{Pair:function(t,e){var o=Ua({},fb,t,e);if(o){var i=o.key;i&&"normal"==i&&((i=o.styleUrl)&&(e[e.length-1]=i),(o=o.Style)&&(e[e.length-1]=o))}}});od=jl.prototype,od.Ef=function(t,e){var o=Fa(Vm,{Document:Aa(this.Ef,this),Folder:Aa(this.Ef,this),Placemark:ja(this.Kf,this),Style:this.Ao.bind(this),StyleMap:this.zo.bind(this)});if(o=Ua([],o,t,e,this))return o},od.Kf=function(t,e){var o=Ua({geometry:null},yb,t,e);if(o){var i=new wa,r=t.getAttribute("id");null!==r&&i.Wb(r);var r=e[0],n=o.geometry;return n&&Va(n,!1,r),i.Oa(n),delete o.geometry,this.c&&i.sf(Ll(o.Style,o.styleUrl,this.g,this.b,this.i)),delete o.Style,i.H(o),i}},od.Ao=function(t,e){var o=t.getAttribute("id");if(null!==o){var i=$l(t,e);i&&(o=t.baseURI?new URL("#"+o,t.baseURI).href:"#"+o,this.b[o]=i)}},od.zo=function(t,e){var o=t.getAttribute("id");if(null!==o){var i=Ua(void 0,mb,t,e);i&&(o=t.baseURI?new URL("#"+o,t.baseURI).href:"#"+o,this.b[o]=i)}},od.Gh=function(t,e){if(!X(Vm,t.namespaceURI))return null;var o=this.Kf(t,[za(this,t,e)]);return o?o:null},od.kc=function(t,e){if(!X(Vm,t.namespaceURI))return[];var o;if(o=t.localName,"Document"==o||"Folder"==o)return(o=this.Ef(t,[za(this,t,e)]))?o:[];if("Placemark"==o)return(o=this.Kf(t,[za(this,t,e)]))?[o]:[];if("kml"==o){o=[];var i;for(i=t.firstElementChild;i;i=i.nextElementSibling){var r=this.kc(i,e);r&&K(o,r)}return o}return[]},od.uo=function(t){return Ma(t)?ql(this,t):Ca(t)?Vl(this,t):"string"==typeof t?(t=Pa(t),ql(this,t)):void 0},od.vo=function(t){var e=[];return Ma(t)?K(e,Yl(this,t)):Ca(t)?K(e,Zl(this,t)):"string"==typeof t&&(t=Pa(t),K(e,Yl(this,t))),e};var bb=Fa(Vm,["Document","Placemark"]),wb=Fa(Vm,{Document:ka(function(t,e,o){Ha({node:t},xb,nu,e,o,void 0,this)}),Placemark:ka(tu)}),xb=Fa(Vm,{Placemark:ka(tu)}),Sb={Point:"Point",LineString:"LineString",LinearRing:"LinearRing",Polygon:"Polygon",MultiPoint:"MultiGeometry",MultiLineString:"MultiGeometry",MultiPolygon:"MultiGeometry",GeometryCollection:"MultiGeometry"},Tb=Fa(Vm,["href"],Fa(qm,["x","y","w","h"])),Eb=Fa(Vm,{href:ka(pl)},Fa(qm,{x:ka(nl),y:ka(nl),w:ka(nl),h:ka(nl)})),Mb=Fa(Vm,["scale","heading","Icon","hotSpot"]),Cb=Fa(Vm,{Icon:ka(function(t,e,o){t={node:t};var i=Tb[o[o.length-1].node.namespaceURI],r=Oa(e,i);Ha(t,Eb,Bv,r,o,i),i=Tb[qm[0]],r=Oa(e,i),Ha(t,Eb,ru,r,o,i)}),heading:ka(nl),hotSpot:ka(function(t,e){t.setAttribute("x",e.x),t.setAttribute("y",e.y),t.setAttribute("xunits",e.Wf),t.setAttribute("yunits",e.Xf)}),scale:ka(iu)}),Pb=Fa(Vm,["color","scale"]),Ab=Fa(Vm,{color:ka(Jl),scale:ka(iu)}),jb=Fa(Vm,["color","width"]),Nb=Fa(Vm,{color:ka(Jl),width:ka(nl)}),Lb=Fa(Vm,{LinearRing:ka(eu)}),Rb=Fa(Vm,{LineString:ka(eu),Point:ka(eu),Polygon:ka(ou),GeometryCollection:ka(_l)}),kb=Fa(Vm,"name open visibility address phoneNumber description styleUrl Style".split(" ")),Ib=Fa(Vm,{MultiGeometry:ka(_l),LineString:ka(eu),LinearRing:ka(eu),Point:ka(eu),Polygon:ka(ou),Style:ka(function(t,e,o){t={node:t};var i={},r=e.f,n=e.g,s=e.a;e=e.Fa(),s instanceof Pl&&(i.IconStyle=s),e&&(i.LabelStyle=e),n&&(i.LineStyle=n),r&&(i.PolyStyle=r),e=Bb[o[o.length-1].node.namespaceURI],i=Oa(i,e),Ha(t,Ub,Bv,i,o,e)}),address:ka(pl),description:ka(pl),name:ka(pl),open:ka(rl),phoneNumber:ka(pl),styleUrl:ka(pl),visibility:ka(rl)}),Db=Fa(Vm,{coordinates:ka(function(t,e,o){o=o[o.length-1];var i=o.layout;o=o.stride;var r;"XY"==i||"XYM"==i?r=2:"XYZ"==i||"XYZM"==i?r=3:n(!1,34);var s,p=e.length,a="";if(0<p){for(a+=e[0],i=1;i<r;++i)a+=","+e[i];for(s=o;s<p;s+=o)for(a+=" "+e[s],i=1;i<r;++i)a+=","+e[s+i]}pl(t,a)})}),Ob=Fa(Vm,{outerBoundaryIs:ka(Ql),innerBoundaryIs:ka(Ql)}),Fb=Fa(Vm,{color:ka(Jl)}),Bb=Fa(Vm,["IconStyle","LabelStyle","LineStyle","PolyStyle"]),Ub=Fa(Vm,{IconStyle:ka(function(t,e,o){t={node:t};var i={},r=e.Gb(),n=e.md(),s={href:e.b.o};if(r){s.w=r[0],s.h=r[1];var p=e.cc(),a=e.jc();a&&n&&0!==a[0]&&a[1]!==r[1]&&(s.x=a[0],s.y=n[1]-(a[1]+r[1])),p&&0!==p[0]&&p[1]!==r[1]&&(i.hotSpot={x:p[0],Wf:"pixels",y:r[1]-p[1],Xf:"pixels"})}i.Icon=s,r=e.c,1!==r&&(i.scale=r),e=e.o,0!==e&&(i.heading=e),e=Mb[o[o.length-1].node.namespaceURI],i=Oa(i,e),Ha(t,Cb,Bv,i,o,e)}),LabelStyle:ka(function(t,e,o){t={node:t};var i={},r=e.b;r&&(i.color=r.b),(e=e.a)&&1!==e&&(i.scale=e),e=Pb[o[o.length-1].node.namespaceURI],i=Oa(i,e),Ha(t,Ab,Bv,i,o,e)}),LineStyle:ka(function(t,e,o){t={node:t};var i=jb[o[o.length-1].node.namespaceURI];e=Oa({color:e.a,width:e.f},i),Ha(t,Nb,Bv,e,o,i)}),PolyStyle:ka(function(t,e,o){Ha({node:t},Fb,Gb,[e.b],o)})}),Gb=Da("color"),Hb=Da("coordinates"),Xb=Da("innerBoundaryIs"),Wb=Da("Point"),$b=Da("LineString"),Kb=Da("LinearRing"),zb=Da("Polygon"),qb=Da("outerBoundaryIs");jl.prototype.a=function(t,e){e=qa(this,e);var o=Sa(Vm[4],"kml");o.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:gx",qm[0]),o.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"),o.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");var i={node:o},r={};1<t.length?r.Document=t:1==t.length&&(r.Placemark=t[0]);var n=bb[o.namespaceURI],r=Oa(r,n);return Ha(i,wb,Bv,r,[e],n,this),o};var Vb,Yb,Zb,Jb;!function(){var t={},e={ja:t};!function(o){if("object"==typeof t&&"undefined"!=typeof e)e.ja=o();else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,i.Bp=o()}}(function(){return function t(e,o,i){function r(s,p){if(!o[s]){if(!e[s]){var a="function"==typeof require&&require;if(!p&&a)return a(s,!0);if(n)return n(s,!0);throw a=Error("Cannot find module '"+s+"'"),a.code="MODULE_NOT_FOUND",a}a=o[s]={ja:{}},e[s][0].call(a.ja,function(t){var o=e[s][1][t];return r(o?o:t)},a,a.ja,t,e,o,i)}return o[s].ja}for(var n="function"==typeof require&&require,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e,o){o.read=function(t,e,o,i,r){var n;n=8*r-i-1;var s=(1<<n)-1,p=s>>1,a=-7;r=o?r-1:0;var h=o?-1:1,l=t[e+r];for(r+=h,o=l&(1<<-a)-1,l>>=-a,a+=n;0<a;o=256*o+t[e+r],r+=h,a-=8);for(n=o&(1<<-a)-1,o>>=-a,a+=i;0<a;n=256*n+t[e+r],r+=h,a-=8);if(0===o)o=1-p;else{if(o===s)return n?NaN:1/0*(l?-1:1);n+=Math.pow(2,i),o-=p}return(l?-1:1)*n*Math.pow(2,o-i)},o.write=function(t,e,o,i,r,n){var s,p=8*n-r-1,a=(1<<p)-1,h=a>>1,l=23===r?Math.pow(2,-24)-Math.pow(2,-77):0;n=i?0:n-1;var u=i?1:-1,c=0>e||0===e&&0>1/e?1:0;for(e=Math.abs(e),isNaN(e)||1/0===e?(e=isNaN(e)?1:0,i=a):(i=Math.floor(Math.log(e)/Math.LN2),1>e*(s=Math.pow(2,-i))&&(i--,s*=2),e=1<=i+h?e+l/s:e+l*Math.pow(2,1-h),2<=e*s&&(i++,s/=2),i+h>=a?(e=0,i=a):1<=i+h?(e=(e*s-1)*Math.pow(2,r),i+=h):(e=e*Math.pow(2,h-1)*Math.pow(2,r),i=0));8<=r;t[o+n]=255&e,n+=u,e/=256,r-=8);for(i=i<<r|e,p+=r;0<p;t[o+n]=255&i,n+=u,i/=256,p-=8);t[o+n-u]|=128*c}},{}],2:[function(t,e){function o(t){this.bc=ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.type=this.ca=0,this.length=this.bc.length}function i(t,e,o){var i,n,s=o.bc;if(n=s[o.ca++],i=(112&n)>>4,128>n)return r(t,i,e);if(n=s[o.ca++],i|=(127&n)<<3,128>n)return r(t,i,e);if(n=s[o.ca++],i|=(127&n)<<10,128>n)return r(t,i,e);if(n=s[o.ca++],i|=(127&n)<<17,128>n)return r(t,i,e);if(n=s[o.ca++],i|=(127&n)<<24,128>n)return r(t,i,e);if(n=s[o.ca++],128>n)return r(t,i|(1&n)<<31,e);throw Error("Expected varint not more than 10 bytes")}function r(t,e,o){return o?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}e.ja=o;var n=t("ieee754");o.f=0,o.g=1,o.b=2,o.a=5,o.prototype={If:function(t,e,o){for(o=o||this.length;this.ca<o;){var i=this.Ea(),r=i>>3,n=this.ca;this.type=7&i,t(r,e,this),this.ca===n&&this.$o(i)}return e},qo:function(){var t=n.read(this.bc,this.ca,!0,23,4);return this.ca+=4,t},mo:function(){var t=n.read(this.bc,this.ca,!0,52,8);return this.ca+=8,t},Ea:function(t){var e,o,r=this.bc;return o=r[this.ca++],e=127&o,128>o?e:(o=r[this.ca++],e|=(127&o)<<7,128>o?e:(o=r[this.ca++],e|=(127&o)<<14,128>o?e:(o=r[this.ca++],e|=(127&o)<<21,128>o?e:(o=r[this.ca],i(e|(15&o)<<28,t,this)))))},Bo:function(){return this.Ea(!0)},zd:function(){var t=this.Ea();return 1===t%2?(t+1)/-2:t/2},ko:function(){return!!this.Ea()},Mf:function(){for(var t=this.Ea()+this.ca,e=this.bc,o="",i=this.ca;i<t;){var r=e[i],n=null,s=239<r?4:223<r?3:191<r?2:1;if(i+s>t)break;var p,a,h;1===s?128>r&&(n=r):2===s?(p=e[i+1],128===(192&p)&&(n=(31&r)<<6|63&p,127>=n&&(n=null))):3===s?(p=e[i+1],a=e[i+2],128===(192&p)&&128===(192&a)&&(n=(15&r)<<12|(63&p)<<6|63&a,2047>=n||55296<=n&&57343>=n)&&(n=null)):4===s&&(p=e[i+1],a=e[i+2],h=e[i+3],128===(192&p)&&128===(192&a)&&128===(192&h)&&(n=(15&r)<<18|(63&p)<<12|(63&a)<<6|63&h,65535>=n||1114112<=n))&&(n=null),null===n?(n=65533,s=1):65535<n&&(n-=65536,o+=String.fromCharCode(n>>>10&1023|55296),n=56320|1023&n),o+=String.fromCharCode(n),i+=s}return this.ca=t,o},$o:function(t){if(t&=7,t===o.f)for(;127<this.bc[this.ca++];);else if(t===o.b)this.ca=this.Ea()+this.ca;else if(t===o.a)this.ca+=4;else{if(t!==o.g)throw Error("Unimplemented type: "+t);this.ca+=8}}}},{ieee754:1}]},{},[2])(2)}),Vb=e.ja}(),function(){var t={},e={ja:t};!function(o){if("object"==typeof t&&"undefined"!=typeof e)e.ja=o();else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,i.Ep=o()}}(function(){return function t(e,o,i){function r(s,p){if(!o[s]){if(!e[s]){var a="function"==typeof require&&require;if(!p&&a)return a(s,!0);if(n)return n(s,!0);throw a=Error("Cannot find module '"+s+"'"),a.code="MODULE_NOT_FOUND",a}a=o[s]={ja:{}},e[s][0].call(a.ja,function(t){var o=e[s][1][t];return r(o?o:t)},a,a.ja,t,e,o,i)}return o[s].ja}for(var n="function"==typeof require&&require,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e){function o(t,e){this.x=t,this.y=e}e.ja=o,o.prototype={clone:function(){return new o(this.x,this.y)},add:function(t){return this.clone().Vi(t)},rotate:function(t){return this.clone().ej(t)},round:function(){return this.clone().fj()},angle:function(){return Math.atan2(this.y,this.x)},Vi:function(t){return this.x+=t.x,this.y+=t.y,this},ej:function(t){var e=Math.cos(t);t=Math.sin(t);var o=t*this.x+e*this.y;return this.x=e*this.x-t*this.y,this.y=o,this},fj:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},o.b=function(t){return t instanceof o?t:Array.isArray(t)?new o(t[0],t[1]):t}},{}],2:[function(t,e){e.ja.Ui=t("./lib/vectortile.js"),e.ja.yp=t("./lib/vectortilefeature.js"),e.ja.zp=t("./lib/vectortilelayer.js")},{"./lib/vectortile.js":3,"./lib/vectortilefeature.js":4,"./lib/vectortilelayer.js":5}],3:[function(t,e){function o(t,e,o){3===t&&(t=new i(o,o.Ea()+o.ca),t.length&&(e[t.name]=t))}var i=t("./vectortilelayer");e.ja=function(t,e){this.layers=t.If(o,{},e)}},{"./vectortilelayer":5}],4:[function(t,e){function o(t,e,o,r,n){this.properties={},this.extent=o,this.type=0,this.nc=t,this.Ne=-1,this.Kd=r,this.Md=n,t.If(i,this,e)}function i(t,e,o){if(1==t)e.id=o.Ea();else if(2==t)for(t=o.Ea()+o.ca;o.ca<t;){var i=e.Kd[o.Ea()],r=e.Md[o.Ea()];e.properties[i]=r}else 3==t?e.type=o.Ea():4==t&&(e.Ne=o.ca)}var r=t("point-geometry");e.ja=o,o.b=["Unknown","Point","LineString","Polygon"],o.prototype.Ng=function(){var t=this.nc;t.ca=this.Ne;for(var e,o=t.Ea()+t.ca,i=1,n=0,s=0,p=0,a=[];t.ca<o;)if(n||(n=t.Ea(),i=7&n,n>>=3),n--,1===i||2===i)s+=t.zd(),p+=t.zd(),1===i&&(e&&a.push(e),e=[]),e.push(new r(s,p));else{if(7!==i)throw Error("unknown command "+i);e&&e.push(e[0].clone())}return e&&a.push(e),a},o.prototype.bbox=function(){var t=this.nc;t.ca=this.Ne;for(var e=t.Ea()+t.ca,o=1,i=0,r=0,n=0,s=1/0,p=-(1/0),a=1/0,h=-(1/0);t.ca<e;)if(i||(i=t.Ea(),o=7&i,i>>=3),i--,1===o||2===o)r+=t.zd(),n+=t.zd(),r<s&&(s=r),r>p&&(p=r),n<a&&(a=n),n>h&&(h=n);else if(7!==o)throw Error("unknown command "+o);return[s,a,p,h]}},{"point-geometry":1}],5:[function(t,e){function o(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this.nc=t,this.Kd=[],this.Md=[],this.Jd=[],t.If(i,this,e),this.length=this.Jd.length}function i(t,e,o){15===t?e.version=o.Ea():1===t?e.name=o.Mf():5===t?e.extent=o.Ea():2===t?e.Jd.push(o.ca):3===t?e.Kd.push(o.Mf()):4===t&&e.Md.push(r(o))}function r(t){for(var e=null,o=t.Ea()+t.ca;t.ca<o;)e=t.Ea()>>3,e=1===e?t.Mf():2===e?t.qo():3===e?t.mo():4===e?t.Bo():5===e?t.Ea():6===e?t.zd():7===e?t.ko():null;return e}var n=t("./vectortilefeature.js");e.ja=o,o.prototype.feature=function(t){if(0>t||t>=this.Jd.length)throw Error("feature index out of bounds");return this.nc.ca=this.Jd[t],t=this.nc.Ea()+this.nc.ca,new n(this.nc,t,this.extent,this.Kd,this.Md)}},{"./vectortilefeature.js":4}]},{},[2])(2)}),Yb=e.ja}(),od=pu.prototype,od.get=function(t){return this.f[t]},od.Eb=function(){return this.c},od.D=function(){return this.a||(this.a="Point"===this.g?Mt(this.b):Ct(this.b,0,this.b.length,2)),this.a},od.Ob=function(){return this.b},od.ka=pu.prototype.Ob,od.V=function(){return this},od.Bm=function(){return this.f},od.pd=pu.prototype.V,od.sa=function(){return 2},od.zc=o,od.X=function(){return this.g},e(au,Ka),au.prototype.X=function(){return"arraybuffer"},au.prototype.Ha=function(t,e){var o,i,r,n=this.f,s=new Vb(t),s=new Yb.Ui(s),p=[],a=this.b;for(r in s.layers)if(!n||-1!=n.indexOf(r)){o=s.layers[r];for(var h=0,l=o.length;h<l;++h){if(a===pu){var u=o.feature(h);i=r;var c=u.Ng(),f=[],y=[];hu(c,y,f);var d=u.type,g=void 0;1===d?g=1===c.length?"Point":"MultiPoint":2===d?g=1===c.length?"LineString":"MultiLineString":3===d&&(g="Polygon"),u=u.properties,u[this.a]=i,i=new this.b(g,y,f,u)}else{if(c=o.feature(h),u=r,g=e,i=new this.b,f=c.id,y=c.properties,y[this.a]=u,u=c.type,0===u)u=null;else{var c=c.Ng(),d=[],v=[];hu(c,v,d);var m=void 0;1===u?m=1===c.length?new Ie(null):new nh(null):2===u?m=1===c.length?new th(null):new oh(null):3===u&&(m=new ze(null)),m.aa("XY",v,d),u=m}(g=Va(u,!1,qa(this,g)))&&(y[this.g]=g),i.Wb(f),i.H(y),i.Dc(this.g)}p.push(i)}}return p},au.prototype.Sa=function(){return this.defaultDataProjection},au.prototype.c=function(t){this.f=t},e(lu,zh);var _b=[null],Qb=Fa(_b,{nd:function(t,e){e[e.length-1].Oc.push(t.getAttribute("ref"))},tag:uu}),tw=Fa(_b,{node:function(t,e){var o=e[0],i=e[e.length-1],r=t.getAttribute("id"),n=[parseFloat(t.getAttribute("lon")),parseFloat(t.getAttribute("lat"))];i.Rg[r]=n;var s=Ua({Ed:{}},ew,t,e);m(s.Ed)||(n=new Ie(n),Va(n,!1,o),o=new wa(n),o.Wb(r),o.H(s.Ed),i.features.push(o))},way:function(t,e){for(var o=e[0],i=t.getAttribute("id"),r=Ua({Oc:[],Ed:{}},Qb,t,e),n=e[e.length-1],s=[],p=0,a=r.Oc.length;p<a;p++)K(s,n.Rg[r.Oc[p]]);r.Oc[0]==r.Oc[r.Oc.length-1]?(p=new ze(null),p.aa("XY",s,[s.length])):(p=new th(null),p.aa("XY",s)),Va(p,!1,o),o=new wa(p),o.Wb(i),o.H(r.Ed),n.features.push(o)}}),ew=Fa(_b,{tag:uu});lu.prototype.kc=function(t,e){var o=za(this,t,e);return"osm"==t.localName&&(o=Ua({Rg:{},features:[]},tw,t,[o]),o.features)?o.features:[]},fu.prototype.read=function(t){return Ma(t)?this.a(t):Ca(t)?this.b(t):"string"==typeof t?(t=Pa(t),this.a(t)):null},e(yu,fu),yu.prototype.a=function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return this.b(t);return null},yu.prototype.b=function(t){return(t=Ua({},iw,t,[]))?t:null};var ow=[null,"http://www.opengis.net/ows/1.1"],iw=Fa(ow,{ServiceIdentification:Ra(function(t,e){return Ua({},dw,t,e)}),ServiceProvider:Ra(function(t,e){return Ua({},gw,t,e)}),OperationsMetadata:Ra(function(t,e){return Ua({},uw,t,e)})}),rw=Fa(ow,{DeliveryPoint:Ra(il),City:Ra(il),AdministrativeArea:Ra(il),PostalCode:Ra(il),Country:Ra(il),ElectronicMailAddress:Ra(il)}),nw=Fa(ow,{Value:La(function(t){return il(t)})}),sw=Fa(ow,{AllowedValues:Ra(function(t,e){return Ua({},nw,t,e)})}),pw=Fa(ow,{Phone:Ra(function(t,e){return Ua({},cw,t,e)}),Address:Ra(function(t,e){return Ua({},rw,t,e)})}),aw=Fa(ow,{HTTP:Ra(function(t,e){return Ua({},hw,t,e)})}),hw=Fa(ow,{Get:La(function(t,e){var o=cu(t);return o?Ua({href:o},fw,t,e):void 0}),Post:void 0}),lw=Fa(ow,{DCP:Ra(function(t,e){return Ua({},aw,t,e)})}),uw=Fa(ow,{Operation:function(t,e){var o=t.getAttribute("name"),i=Ua({},lw,t,e);i&&(e[e.length-1][o]=i)}}),cw=Fa(ow,{Voice:Ra(il),Facsimile:Ra(il)}),fw=Fa(ow,{Constraint:La(function(t,e){var o=t.getAttribute("name");return o?Ua({name:o},sw,t,e):void 0})}),yw=Fa(ow,{IndividualName:Ra(il),PositionName:Ra(il),ContactInfo:Ra(function(t,e){return Ua({},pw,t,e)})}),dw=Fa(ow,{Title:Ra(il),ServiceTypeVersion:Ra(il),ServiceType:Ra(il)}),gw=Fa(ow,{ProviderName:Ra(il),ProviderSite:Ra(cu),ServiceContact:Ra(function(t,e){return Ua({},yw,t,e)})});e(gu,Sl),od=gu.prototype,od.wd=function(t,e){var o=this.yd(t,e);return new wa(o)},od.Hf=function(t,e){return[this.wd(t,e)]},od.yd=function(t,e){var o=de(this.a),i=mu(t,o,this.b);return du(i,i.length,o,i),o=Ae(i,0,i.length,o),Va(new th(o,this.a),!1,qa(this,e))},od.Fe=function(t,e){var o=t.V();return o?this.Gd(o,e):(n(!1,40),"")},od.ui=function(t,e){return this.Fe(t[0],e)},od.Gd=function(t,e){t=Va(t,!0,qa(this,e));var o=t.ka(),i=t.sa();return du(o,o.length,i,o),vu(o,i,this.b)},e(xu,Ya),xu.prototype.Gf=function(t,e){if("Topology"==t.type){var o,i=null,r=null;t.transform&&(o=t.transform,i=o.scale,r=o.translate);var n=t.arcs;if(o){o=i;var s,p,a=r;for(s=0,p=n.length;s<p;++s){var h,l,u,c=n[s],f=o,y=a,d=0,g=0;for(l=0,u=c.length;l<u;++l)h=c[l],d+=h[0],g+=h[1],h[0]=d,h[1]=g,Mu(h,f,y)}}for(o=[],a=v(t.objects),s=0,p=a.length;s<p;++s)"GeometryCollection"===a[s].type?(c=a[s],o.push.apply(o,Tu(c,n,i,r,e))):(c=a[s],o.push(Eu(c,n,i,r,e)));return o}return[]},xu.prototype.Sa=function(){return this.defaultDataProjection};var vw={Point:function(t,e,o){return t=t.coordinates,e&&o&&Mu(t,e,o),new Ie(t)},LineString:function(t,e){var o=Su(t.arcs,e);return new th(o)},Polygon:function(t,e){var o,i,r=[];for(o=0,i=t.arcs.length;o<i;++o)r[o]=Su(t.arcs[o],e);return new ze(r)},MultiPoint:function(t,e,o){t=t.coordinates;var i,r;if(e&&o)for(i=0,r=t.length;i<r;++i)Mu(t[i],e,o);return new nh(t)},MultiLineString:function(t,e){var o,i,r=[];for(o=0,i=t.arcs.length;o<i;++o)r[o]=Su(t.arcs[o],e);return new oh(r)},MultiPolygon:function(t,e){var o,i,r,n,s,p,a=[];for(s=0,p=t.arcs.length;s<p;++s){for(o=t.arcs[s],i=[],r=0,n=o.length;r<n;++r)i[r]=Su(o[r],e);a[s]=i}return new sh(a)}};e(Cu,zh),Cu.prototype.kc=function(t,e){var o={featureType:this.i,featureNS:this.g};return hd(o,za(this,t,e?e:{})),o=[o],this.b.b["http://www.opengis.net/gml"].featureMember=ja(Yh.prototype.xd),(o=Ua([],this.b.b,t,o,this.b))||(o=[]),o},Cu.prototype.o=function(t){return Ma(t)?ju(t):Ca(t)?Ua({},Sw,t,[]):"string"==typeof t?(t=Pa(t),ju(t)):void 0},Cu.prototype.l=function(t){return Ma(t)?Pu(this,t):Ca(t)?Au(this,t):"string"==typeof t?(t=Pa(t),Pu(this,t)):void 0};var mw={"http://www.opengis.net/gml":{boundedBy:Ra(Yh.prototype.xe,"bounds")}},bw={"http://www.opengis.net/wfs":{totalInserted:Ra(el),totalUpdated:Ra(el),totalDeleted:Ra(el)}},ww={"http://www.opengis.net/ogc":{FeatureId:ja(function(t){return t.getAttribute("fid")})}},xw={"http://www.opengis.net/wfs":{Feature:function(t,e){Ba(ww,t,e)}}},Sw={"http://www.opengis.net/wfs":{TransactionSummary:Ra(function(t,e){return Ua({},bw,t,e)},"transactionSummary"),InsertResults:Ra(function(t,e){return Ua([],xw,t,e)},"insertIds")}},Tw={"http://www.opengis.net/wfs":{PropertyName:ka(pl)}},Ew={"http://www.opengis.net/wfs":{Insert:ka(function(t,e,o){var i=o[o.length-1],i=Sa(i.featureNS,i.featureType);t.appendChild(i),al.prototype.ti(i,e,o)}),Update:ka(function(t,e,o){var i=o[o.length-1];n(void 0!==e.a,27);var r=i.featureType,s=i.featurePrefix,s=s?s:"feature",p=i.featureNS;if(t.setAttribute("typeName",s+":"+r),t.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+s,p),r=e.a,void 0!==r){for(var s=e.O(),p=[],a=0,h=s.length;a<h;a++){var l=e.get(s[a]);void 0!==l&&p.push({name:s[a],value:l})}Ha({node:t,srsName:i.srsName},Ew,Da("Property"),p,o),Nu(t,r)}}),Delete:ka(function(t,e,o){var i=o[o.length-1];n(void 0!==e.a,26),o=i.featureType;var r=i.featurePrefix,r=r?r:"feature",i=i.featureNS;t.setAttribute("typeName",r+":"+o),t.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+r,i),e=e.a,void 0!==e&&Nu(t,e)}),Property:ka(function(t,e,o){var i=Sa("http://www.opengis.net/wfs","Name");t.appendChild(i),pl(i,e.name),void 0!==e.value&&null!==e.value&&(i=Sa("http://www.opengis.net/wfs","Value"),t.appendChild(i),e.value instanceof ce?al.prototype.ad(i,e.value,o):pl(i,e.value))}),Native:ka(function(t,e){e.ip&&t.setAttribute("vendorId",e.ip),void 0!==e.No&&t.setAttribute("safeToIgnore",e.No),void 0!==e.value&&pl(t,e.value)})}},Mw={"http://www.opengis.net/wfs":{Query:ka(function(t,e,o){var i=o[o.length-1],r=i.featurePrefix,n=i.featureNS,s=i.propertyNames,p=i.srsName;t.setAttribute("typeName",(r?r+":":"")+e),p&&t.setAttribute("srsName",p),n&&t.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+r,n),e=hd({},i),e.node=t,Ha(e,Tw,Da("PropertyName"),s,o),(i=i.filter)&&(s=Sa("http://www.opengis.net/ogc","Filter"),t.appendChild(s),Ha({node:s},Mw,Da(i.Hb),[i],o))})},"http://www.opengis.net/ogc":{And:ka(Lu),Or:ka(Lu),Not:ka(function(t,e,o){e=e.condition,Ha({node:t},Mw,Da(e.Hb),[e],o)}),BBOX:ka(function(t,e,o){o[o.length-1].srsName=e.srsName,Iu(t,e.geometryName),al.prototype.ad(t,e.extent,o)}),Intersects:ka(function(t,e,o){o[o.length-1].srsName=e.srsName,Iu(t,e.geometryName),al.prototype.ad(t,e.geometry,o)}),Within:ka(function(t,e,o){o[o.length-1].srsName=e.srsName,Iu(t,e.geometryName),al.prototype.ad(t,e.geometry,o)}),PropertyIsEqualTo:ka(Ru),PropertyIsNotEqualTo:ka(Ru),PropertyIsLessThan:ka(Ru),PropertyIsLessThanOrEqualTo:ka(Ru),PropertyIsGreaterThan:ka(Ru),PropertyIsGreaterThanOrEqualTo:ka(Ru),PropertyIsNull:ka(function(t,e){Iu(t,e.b)}),PropertyIsBetween:ka(function(t,e){Iu(t,e.b);var o=Sa("http://www.opengis.net/ogc","LowerBoundary");t.appendChild(o),Du(o,""+e.a),o=Sa("http://www.opengis.net/ogc","UpperBoundary"),t.appendChild(o),Du(o,""+e.g)}),PropertyIsLike:ka(function(t,e){t.setAttribute("wildCard",e.i),t.setAttribute("singleChar",e.c),t.setAttribute("escapeChar",e.g),void 0!==e.a&&t.setAttribute("matchCase",e.a.toString()),Iu(t,e.b),Du(t,""+e.f)})}};Cu.prototype.s=function(t){var e=Sa("http://www.opengis.net/wfs","GetFeature");e.setAttribute("service","WFS"),e.setAttribute("version","1.1.0");var o;if(t&&(t.handle&&e.setAttribute("handle",t.handle),t.outputFormat&&e.setAttribute("outputFormat",t.outputFormat),void 0!==t.maxFeatures&&e.setAttribute("maxFeatures",t.maxFeatures),t.resultType&&e.setAttribute("resultType",t.resultType),void 0!==t.startIndex&&e.setAttribute("startIndex",t.startIndex),void 0!==t.count&&e.setAttribute("count",t.count),o=t.filter,t.bbox)){n(t.geometryName,12);var i=Bh(t.geometryName,t.bbox,t.srsName);o=o?Fh(o,i):i}return e.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.c),o={node:e,srsName:t.srsName,featureNS:t.featureNS?t.featureNS:this.g,featurePrefix:t.featurePrefix,geometryName:t.geometryName,filter:o,propertyNames:t.propertyNames?t.propertyNames:[]},n(Array.isArray(t.featureTypes),11),t=t.featureTypes,o=[o],i=hd({},o[o.length-1]),i.node=e,Ha(i,Mw,Da("Query"),t,o),e},Cu.prototype.C=function(t,e,o,i){var r=[],n=Sa("http://www.opengis.net/wfs","Transaction");n.setAttribute("service","WFS"),n.setAttribute("version","1.1.0");var s,p;return i&&(s=i.gmlOptions?i.gmlOptions:{},i.handle&&n.setAttribute("handle",i.handle)),n.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.c),t&&(p={node:n,featureNS:i.featureNS,featureType:i.featureType,featurePrefix:i.featurePrefix,srsName:i.srsName},hd(p,s),Ha(p,Ew,Da("Insert"),t,r)),e&&(p={node:n,featureNS:i.featureNS,featureType:i.featureType,featurePrefix:i.featurePrefix,srsName:i.srsName},hd(p,s),Ha(p,Ew,Da("Update"),e,r)),o&&Ha({node:n,featureNS:i.featureNS,featureType:i.featureType,featurePrefix:i.featurePrefix,srsName:i.srsName},Ew,Da("Delete"),o,r),i.nativeElements&&Ha({node:n,featureNS:i.featureNS,featureType:i.featureType,featurePrefix:i.featurePrefix,srsName:i.srsName},Ew,Da("Native"),i.nativeElements,r),n},Cu.prototype.Lf=function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return this.Ae(t);return null},Cu.prototype.Ae=function(t){if(t.firstElementChild&&t.firstElementChild.firstElementChild)for(t=t.firstElementChild.firstElementChild,t=t.firstElementChild;t;t=t.nextElementSibling)if(0!==t.childNodes.length&&(1!==t.childNodes.length||3!==t.firstChild.nodeType)){var e=[{}];return this.b.xe(t,e),re(e.pop().srsName)}return null},e(Ou,Sl);var Cw={Point:Fu,LineString:Bu,Polygon:Uu,MultiPoint:function(t){var e=[];t=t.je();for(var o=0,i=t.length;o<i;++o)e.push("("+Fu(t[o])+")");return e.join(",")},MultiLineString:function(t){var e=[];t=t.od();for(var o=0,i=t.length;o<i;++o)e.push("("+Bu(t[o])+")");return e.join(",")},MultiPolygon:function(t){var e=[];t=t.Wd();for(var o=0,i=t.length;o<i;++o)e.push("("+Uu(t[o])+")");return e.join(",")},GeometryCollection:function(t){var e=[];t=t.cf();for(var o=0,i=t.length;o<i;++o)e.push(Gu(t[o]));return e.join(",")}};od=Ou.prototype,od.wd=function(t,e){var o=this.yd(t,e);if(o){var i=new wa;return i.Oa(o),i}return null},od.Hf=function(t,e){var o=[],i=this.yd(t,e);o=this.b&&"GeometryCollection"==i.X()?i.f:[i];for(var r=[],n=0,s=o.length;n<s;++n)i=new wa,i.Oa(o[n]),r.push(i);return r},od.yd=function(t,e){var o;return o=new Wu(new Hu(t)),o.b=Xu(o.a),(o=Ku(o))?Va(o,!1,e):null},od.Fe=function(t,e){var o=t.V();return o?this.Gd(o,e):""},od.ui=function(t,e){if(1==t.length)return this.Fe(t[0],e);for(var o=[],i=0,r=t.length;i<r;++i)o.push(t[i].V());return o=new Uh(o),this.Gd(o,e)},od.Gd=function(t,e){return Gu(Va(t,!0,e))},od=Wu.prototype,od.Cf=function(){if($u(this,2)){var t=zu(this);if($u(this,3))return t}else if(Yu(this))return null;throw Error(Zu(this))},od.Bf=function(){if($u(this,2)){var t=qu(this);if($u(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))},od.Df=function(){if($u(this,2)){var t=Vu(this);if($u(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))},od.Wn=function(){if($u(this,2)){var t;if(2==this.b.type)for(t=[this.Cf()];$u(this,5);)t.push(this.Cf());else t=qu(this);if($u(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))},od.Vn=function(){if($u(this,2)){var t=Vu(this);if($u(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))},od.Xn=function(){if($u(this,2)){for(var t=[this.Df()];$u(this,5);)t.push(this.Df());if($u(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))};var Pw={POINT:Ie,LINESTRING:th,POLYGON:ze,MULTIPOINT:nh,MULTILINESTRING:oh,MULTIPOLYGON:sh},Aw={POINT:Wu.prototype.Cf,LINESTRING:Wu.prototype.Bf,POLYGON:Wu.prototype.Df,MULTIPOINT:Wu.prototype.Wn,MULTILINESTRING:Wu.prototype.Vn,MULTIPOLYGON:Wu.prototype.Xn};e(Ju,fu),Ju.prototype.a=function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return this.b(t);return null},Ju.prototype.b=function(t){return this.version=t.getAttribute("version").trim(),(t=Ua({version:this.version},Nw,t,[]))?t:null};var jw=[null,"http://www.opengis.net/wms"],Nw=Fa(jw,{Service:Ra(function(t,e){return Ua({},Rw,t,e)}),Capability:Ra(function(t,e){return Ua({},Lw,t,e)})}),Lw=Fa(jw,{Request:Ra(function(t,e){return Ua({},Gw,t,e)}),Exception:Ra(function(t,e){return Ua([],Ow,t,e)}),Layer:Ra(function(t,e){return Ua({},Fw,t,e)})}),Rw=Fa(jw,{Name:Ra(il),Title:Ra(il),Abstract:Ra(il),KeywordList:Ra(ec),OnlineResource:Ra(cu),ContactInformation:Ra(function(t,e){return Ua({},kw,t,e)}),Fees:Ra(il),AccessConstraints:Ra(il),LayerLimit:Ra(el),MaxWidth:Ra(el),MaxHeight:Ra(el)}),kw=Fa(jw,{ContactPersonPrimary:Ra(function(t,e){return Ua({},Iw,t,e)}),ContactPosition:Ra(il),ContactAddress:Ra(function(t,e){return Ua({},Dw,t,e)}),ContactVoiceTelephone:Ra(il),ContactFacsimileTelephone:Ra(il),ContactElectronicMailAddress:Ra(il)}),Iw=Fa(jw,{ContactPerson:Ra(il),ContactOrganization:Ra(il)}),Dw=Fa(jw,{AddressType:Ra(il),Address:Ra(il),City:Ra(il),StateOrProvince:Ra(il),PostCode:Ra(il),Country:Ra(il)}),Ow=Fa(jw,{Format:ja(il)}),Fw=Fa(jw,{Name:Ra(il),Title:Ra(il),Abstract:Ra(il),KeywordList:Ra(ec),CRS:La(il),EX_GeographicBoundingBox:Ra(function(t,e){var o=Ua({},Uw,t,e);if(o){var i=o.westBoundLongitude,r=o.southBoundLatitude,n=o.eastBoundLongitude,o=o.northBoundLatitude;return void 0===i||void 0===r||void 0===n||void 0===o?void 0:[i,r,n,o]}}),BoundingBox:La(function(t){var e=[tl(t.getAttribute("minx")),tl(t.getAttribute("miny")),tl(t.getAttribute("maxx")),tl(t.getAttribute("maxy"))],o=[tl(t.getAttribute("resx")),tl(t.getAttribute("resy"))];
-return{crs:t.getAttribute("CRS"),extent:e,res:o}}),Dimension:La(function(t){return{name:t.getAttribute("name"),units:t.getAttribute("units"),unitSymbol:t.getAttribute("unitSymbol"),"default":t.getAttribute("default"),multipleValues:Jh(t.getAttribute("multipleValues")),nearestValue:Jh(t.getAttribute("nearestValue")),current:Jh(t.getAttribute("current")),values:il(t)}}),Attribution:Ra(function(t,e){return Ua({},Bw,t,e)}),AuthorityURL:La(function(t,e){var o=_u(t,e);if(o)return o.name=t.getAttribute("name"),o}),Identifier:La(il),MetadataURL:La(function(t,e){var o=_u(t,e);if(o)return o.type=t.getAttribute("type"),o}),DataURL:La(_u),FeatureListURL:La(_u),Style:La(function(t,e){return Ua({},$w,t,e)}),MinScaleDenominator:Ra(Qh),MaxScaleDenominator:Ra(Qh),Layer:La(function(t,e){var o=e[e.length-1],i=Ua({},Fw,t,e);if(i){var r=Jh(t.getAttribute("queryable"));return void 0===r&&(r=o.queryable),i.queryable=void 0!==r&&r,r=ol(t.getAttribute("cascaded")),void 0===r&&(r=o.cascaded),i.cascaded=r,r=Jh(t.getAttribute("opaque")),void 0===r&&(r=o.opaque),i.opaque=void 0!==r&&r,r=Jh(t.getAttribute("noSubsets")),void 0===r&&(r=o.noSubsets),i.noSubsets=void 0!==r&&r,(r=tl(t.getAttribute("fixedWidth")))||(r=o.fixedWidth),i.fixedWidth=r,(r=tl(t.getAttribute("fixedHeight")))||(r=o.fixedHeight),i.fixedHeight=r,["Style","CRS","AuthorityURL"].forEach(function(t){t in o&&(i[t]=(i[t]||[]).concat(o[t]))}),"EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" ").forEach(function(t){t in i||(i[t]=o[t])}),i}})}),Bw=Fa(jw,{Title:Ra(il),OnlineResource:Ra(cu),LogoURL:Ra(tc)}),Uw=Fa(jw,{westBoundLongitude:Ra(Qh),eastBoundLongitude:Ra(Qh),southBoundLatitude:Ra(Qh),northBoundLatitude:Ra(Qh)}),Gw=Fa(jw,{GetCapabilities:Ra(Qu),GetMap:Ra(Qu),GetFeatureInfo:Ra(Qu)}),Hw=Fa(jw,{Format:La(il),DCPType:La(function(t,e){return Ua({},Xw,t,e)})}),Xw=Fa(jw,{HTTP:Ra(function(t,e){return Ua({},Ww,t,e)})}),Ww=Fa(jw,{Get:Ra(_u),Post:Ra(_u)}),$w=Fa(jw,{Name:Ra(il),Title:Ra(il),Abstract:Ra(il),LegendURL:La(tc),StyleSheetURL:Ra(_u),StyleURL:Ra(_u)}),Kw=Fa(jw,{Format:Ra(il),OnlineResource:Ra(cu)}),zw=Fa(jw,{Keyword:ja(il)});e(oc,zh),oc.prototype.kc=function(t,e){var o={};e&&hd(o,za(this,t,e));var i=[o];t.setAttribute("namespaceURI",this.g);var r=t.localName,o=[];if(0!==t.childNodes.length){if("msGMLOutput"==r)for(var n=0,s=t.childNodes.length;n<s;n++){var p=t.childNodes[n];if(p.nodeType===Node.ELEMENT_NODE){var a=i[0],h=p.localName.replace("_layer","");if(!this.c||X(this.c,h)){h+="_feature",a.featureType=h,a.featureNS=this.g;var l={};l[h]=ja(this.b.Ff,this.b),a=Fa([a.featureNS,null],l),p.setAttribute("namespaceURI",this.g),(p=Ua([],a,p,i,this.b))&&K(o,p)}}}"FeatureCollection"==r&&(i=Ua([],this.b.b,t,[{}],this.b))&&(o=i)}return o},e(ic,fu),ic.prototype.a=function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return this.b(t);return null},ic.prototype.b=function(t){var e=t.getAttribute("version").trim(),o=this.g.b(t);return o?(o.version=e,(o=Ua(o,Yw,t,[]))?o:null):null};var qw=[null,"http://www.opengis.net/wmts/1.0"],Vw=[null,"http://www.opengis.net/ows/1.1"],Yw=Fa(qw,{Contents:Ra(function(t,e){return Ua({},Zw,t,e)})}),Zw=Fa(qw,{Layer:La(function(t,e){return Ua({},Jw,t,e)}),TileMatrixSet:La(function(t,e){return Ua({},ox,t,e)})}),Jw=Fa(qw,{Style:La(function(t,e){var o=Ua({},_w,t,e);if(o){var i="true"===t.getAttribute("isDefault");return o.isDefault=i,o}}),Format:La(il),TileMatrixSetLink:La(function(t,e){return Ua({},Qw,t,e)}),Dimension:La(function(t,e){return Ua({},tx,t,e)}),ResourceURL:La(function(t){var e=t.getAttribute("format"),o=t.getAttribute("template");t=t.getAttribute("resourceType");var i={};return e&&(i.format=e),o&&(i.template=o),t&&(i.resourceType=t),i})},Fa(Vw,{Title:Ra(il),Abstract:Ra(il),WGS84BoundingBox:Ra(function(t,e){var o=Ua([],ex,t,e);return 2!=o.length?void 0:dt(o)}),Identifier:Ra(il)})),_w=Fa(qw,{LegendURL:La(function(t){var e={};return e.format=t.getAttribute("format"),e.href=cu(t),e})},Fa(Vw,{Title:Ra(il),Identifier:Ra(il)})),Qw=Fa(qw,{TileMatrixSet:Ra(il)}),tx=Fa(qw,{Default:Ra(il),Value:La(il)},Fa(Vw,{Identifier:Ra(il)})),ex=Fa(Vw,{LowerCorner:ja(rc),UpperCorner:ja(rc)}),ox=Fa(qw,{WellKnownScaleSet:Ra(il),TileMatrix:La(function(t,e){return Ua({},ix,t,e)})},Fa(Vw,{SupportedCRS:Ra(il),Identifier:Ra(il)})),ix=Fa(qw,{TopLeftCorner:Ra(rc),ScaleDenominator:Ra(Qh),TileWidth:Ra(el),TileHeight:Ra(el),MatrixWidth:Ra(el),MatrixHeight:Ra(el)},Fa(Vw,{Identifier:Ra(il)}));e(nc,B),od=nc.prototype,od.la=function(){this.ge(!1),B.prototype.la.call(this)},od.Al=function(){var t=this.Tg();t&&(this.c=pe(re("EPSG:4326"),t),this.a&&this.set(hx,this.c(this.a)))},od.Bl=function(){if(Wd){var t=this.Ug();t&&void 0===this.f?this.f=navigator.geolocation.watchPosition(this.eo.bind(this),this.fo.bind(this),this.Gg()):t||void 0===this.f||(navigator.geolocation.clearWatch(this.f),this.f=void 0)}},od.eo=function(t){t=t.coords,this.set(rx,t.accuracy),this.set(sx,null===t.altitude?void 0:t.altitude),this.set(px,null===t.altitudeAccuracy?void 0:t.altitudeAccuracy),this.set(ax,null===t.heading?void 0:l(t.heading)),this.a?(this.a[0]=t.longitude,this.a[1]=t.latitude):this.a=[t.longitude,t.latitude];var e=this.c(this.a);this.set(hx,e),this.set(ux,null===t.speed?void 0:t.speed),t=Ve(mg,this.a,t.accuracy),t.oc(this.c),this.set(nx,t),this.v()},od.fo=function(t){t.type="error",this.ge(!1),this.b(t)},od.Aj=function(){return this.get(rx)},od.Bj=function(){return this.get(nx)||null},od.Dj=function(){return this.get(sx)},od.Ej=function(){return this.get(px)},od.yl=function(){return this.get(ax)},od.zl=function(){return this.get(hx)},od.Tg=function(){return this.get(lx)},od.jk=function(){return this.get(ux)},od.Ug=function(){return this.get(cx)},od.Gg=function(){return this.get(fx)},od.Vg=function(t){this.set(lx,t)},od.ge=function(t){this.set(cx,t)},od.ji=function(t){this.set(fx,t)};var rx="accuracy",nx="accuracyGeometry",sx="altitude",px="altitudeAccuracy",ax="heading",hx="position",lx="projection",ux="speed",cx="tracking",fx="trackingOptions";e(sc,ye),od=sc.prototype,od.clone=function(){var t=new sc(null);return ge(t,this.ia,this.A.slice()),t.v(),t},od.vb=function(t,e,o,i){var r=this.A;t-=r[0];var n=e-r[1];if(e=t*t+n*n,e<i){if(0===e)for(i=0;i<this.a;++i)o[i]=r[i];else for(i=this.vf()/Math.sqrt(e),o[0]=r[0]+i*t,o[1]=r[1]+i*n,i=2;i<this.a;++i)o[i]=r[i];return o.length=this.a,e}return i},od.Ac=function(t,e){var o=this.A,i=t-o[0],o=e-o[1];return i*i+o*o<=pc(this)},od.td=function(){return this.A.slice(0,this.a)},od.Pd=function(t){var e=this.A,o=e[this.a]-e[0];return Et(e[0]-o,e[1]-o,e[0]+o,e[1]+o,t)},od.vf=function(){return Math.sqrt(pc(this))},od.X=function(){return"Circle"},od.Na=function(t){var e=this.D();return!!Xt(t,e)&&(e=this.td(),t[0]<=e[0]&&t[2]>=e[0]||t[1]<=e[1]&&t[3]>=e[1]||Lt(t,this.jb,this))},od.Yl=function(t){var e=this.a,o=t.slice();o[e]=o[0]+(this.A[e]-this.A[0]);var i;for(i=1;i<e;++i)o[e+i]=t[i];ge(this,this.ia,o),this.v()},od.Sf=function(t,e,o){if(t){ve(this,o,t,0),this.A||(this.A=[]),o=this.A,t=Me(o,t),o[t++]=o[0]+e;var i;for(e=1,i=this.a;e<i;++e)o[t++]=o[e];o.length=t}else ge(this,"XY",null);this.v()},od.Zl=function(t){this.A[this.a]=this.A[0]+t,this.v()};var yx=new In({color:"rgba(0,0,0,0.2)"}),dx=[90,45,30,20,10,5,2,1,.5,.2,.1,.05,.01,.005,.002,.001];od=uc.prototype,od.Cl=function(){return this.l},od.Xj=function(){return this.b},od.dk=function(){return this.a},od.Lg=function(t){var e=t.vectorContext,o=t.frameState,i=o.extent;t=o.viewState;var r=t.center,n=t.projection,p=t.resolution;if(t=o.pixelRatio,t=p*p/(4*t*t),!this.c||!ne(this.c,n)){var a=re("EPSG:4326"),h=n.D(),l=n.i,u=ue(l,a,n),c=l[2],f=l[1],y=l[0],d=u[3],g=u[2],v=u[1],u=u[0];this.i=l[3],this.g=c,this.j=f,this.f=y,this.u=d,this.C=g,this.B=v,this.G=u,this.o=se(a,n),this.T=se(n,a),this.s=this.T(Dt(h)),this.c=n}for(n.a&&(n=n.D(),a=Ht(n),o=o.focus[0],o<n[0]||o>n[2])&&(o=a*Math.ceil((n[0]-o)/a),i=[i[0]+o,i[1],i[2]+o,i[3]]),o=this.s[0],n=this.s[1],a=-1,l=Math.pow(this.za*p,2),c=[],f=[],p=0,h=dx.length;p<h&&(y=dx[p]/2,c[0]=o-y,c[1]=n-y,f[0]=o+y,f[1]=n+y,this.o(c,c),this.o(f,f),y=Math.pow(f[0]-c[0],2)+Math.pow(f[1]-c[1],2),!(y<=l));++p)a=dx[p];if(p=a,-1==p)this.b.length=this.a.length=0;else{for(o=this.T(r),r=o[0],o=o[1],n=this.S,a=[Math.max(i[0],this.G),Math.max(i[1],this.B),Math.min(i[2],this.C),Math.min(i[3],this.u)],a=ue(a,this.c,"EPSG:4326"),l=a[3],f=a[1],r=Math.floor(r/p)*p,c=s(r,this.f,this.g),h=cc(this,c,f,l,t,i,0),a=0;c!=this.f&&a++<n;)c=Math.max(c-p,this.f),h=cc(this,c,f,l,t,i,h);for(c=s(r,this.f,this.g),a=0;c!=this.g&&a++<n;)c=Math.min(c+p,this.g),h=cc(this,c,f,l,t,i,h);for(this.b.length=h,o=Math.floor(o/p)*p,r=s(o,this.j,this.i),h=fc(this,r,t,i,0),a=0;r!=this.j&&a++<n;)r=Math.max(r-p,this.j),h=fc(this,r,t,i,h);for(r=s(o,this.j,this.i),a=0;r!=this.i&&a++<n;)r=Math.min(r+p,this.i),h=fc(this,r,t,i,h);this.a.length=h}for(e.Vb(null,this.na),t=0,r=this.b.length;t<r;++t)p=this.b[t],e.kd(p,null);for(t=0,r=this.a.length;t<r;++t)p=this.a[t],e.kd(p,null)},od.setMap=function(t){this.l&&(this.l.J("postcompose",this.Lg,this),this.l.render()),t&&(t.I("postcompose",this.Lg,this),t.render()),this.l=t},e(yc,Bi),od=yc.prototype,od.la=function(){1==this.state&&dc(this),this.a&&N(this.a),this.state=5,Ui(this),Bi.prototype.la.call(this)},od.qb=function(){return this.g},od.Xa=function(){return this.o},od.Dl=function(){this.state=3,dc(this),Ui(this)},od.El=function(){this.state=this.g.naturalWidth&&this.g.naturalHeight?ag:4,dc(this),Ui(this)},od.load=function(){0!=this.state&&3!=this.state||(this.state=1,Ui(this),this.j=[M(this.g,"error",this.Dl,this),M(this.g,"load",this.El,this)],this.s(this,this.o))},e(gc,Zi),gc.prototype.j=function(t,e){var o=e.target.result,i=this.s,r=this.l;r||(r=i.$().l);var n,s,i=this.i,p=[];for(n=0,s=i.length;n<s;++n){var a=new i[n],h={featureProjection:r};try{p=a.Ha(o,h)}catch(l){p=null}if(p&&0<p.length)break}this.b(new bc(gx,t,p,r))},gc.prototype.setMap=function(t){this.a&&(this.a.forEach(P),this.a=null),Zi.prototype.setMap.call(this,t),t&&(t=this.target?this.target:t.a,this.a=[E(t,"drop",vc,this),E(t,"dragenter",mc,this),E(t,"dragover",mc,this),E(t,"drop",mc,this)])};var gx="addfeatures";e(bc,L),e(wc,ur),function(){var t={},e={ja:t};!function(o){if("object"==typeof t&&"undefined"!=typeof e)e.ja=o();else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,i.Dp=o()}}(function(){return function t(e,o,i){function r(s,p){if(!o[s]){if(!e[s]){var a="function"==typeof require&&require;if(!p&&a)return a(s,!0);if(n)return n(s,!0);throw a=Error("Cannot find module '"+s+"'"),a.code="MODULE_NOT_FOUND",a}a=o[s]={ja:{}},e[s][0].call(a.ja,function(t){var o=e[s][1][t];return r(o?o:t)},a,a.ja,t,e,o,i)}return o[s].ja}for(var n="function"==typeof require&&require,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e){function o(t,e,n,s,p){for(n=n||0,s=s||t.length-1,p=p||r;s>n;){if(600<s-n){var a=s-n+1,h=e-n+1,l=Math.log(a),u=.5*Math.exp(2*l/3),l=.5*Math.sqrt(l*u*(a-u)/a)*(0>h-a/2?-1:1);o(t,e,Math.max(n,Math.floor(e-h*u/a+l)),Math.min(s,Math.floor(e+(a-h)*u/a+l)),p)}for(a=t[e],h=n,u=s,i(t,n,e),0<p(t[s],a)&&i(t,n,s);h<u;){for(i(t,h,u),h++,u--;0>p(t[h],a);)h++;for(;0<p(t[u],a);)u--}0===p(t[n],a)?i(t,n,u):(u++,i(t,u,s)),u<=e&&(n=u+1),e<=u&&(s=u-1)}}function i(t,e,o){var i=t[e];t[e]=t[o],t[o]=i}function r(t,e){return t<e?-1:t>e?1:0}e.ja=o},{}],2:[function(t,e){function o(t,e){return this instanceof o?(this.Qe=Math.max(4,t||9),this.dg=Math.max(2,Math.ceil(.4*this.Qe)),e&&this.bj(e),void this.clear()):new o(t,e)}function i(t,e){r(t,0,t.children.length,e,t)}function r(t,e,o,i,r){r||(r=c(null)),r.ba=1/0,r.ea=1/0,r.da=-(1/0),r.ha=-(1/0);for(var s;e<o;e++)s=t.children[e],n(r,t.Wa?i(s):s);return r}function n(t,e){t.ba=Math.min(t.ba,e.ba),t.ea=Math.min(t.ea,e.ea),t.da=Math.max(t.da,e.da),t.ha=Math.max(t.ha,e.ha)}function s(t,e){return t.ba-e.ba}function p(t,e){return t.ea-e.ea}function a(t){return(t.da-t.ba)*(t.ha-t.ea)}function h(t){return t.da-t.ba+(t.ha-t.ea)}function l(t,e){return t.ba<=e.ba&&t.ea<=e.ea&&e.da<=t.da&&e.ha<=t.ha}function u(t,e){return e.ba<=t.da&&e.ea<=t.ha&&e.da>=t.ba&&e.ha>=t.ea}function c(t){return{children:t,height:1,Wa:!0,ba:1/0,ea:1/0,da:-(1/0),ha:-(1/0)}}function f(t,e,o,i,r){for(var n,s=[e,o];s.length;)o=s.pop(),e=s.pop(),o-e<=i||(n=e+Math.ceil((o-e)/i/2)*i,y(t,n,e,o,r),s.push(e,n,n,o))}e.ja=o;var y=t("quickselect");o.prototype={all:function(){return this.Zf(this.data,[])},search:function(t){var e=this.data,o=[],i=this.ob;if(!u(t,e))return o;for(var r,n,s,p,a=[];e;){for(r=0,n=e.children.length;r<n;r++)s=e.children[r],p=e.Wa?i(s):s,u(t,p)&&(e.Wa?o.push(s):l(t,p)?this.Zf(s,o):a.push(s));e=a.pop()}return o},load:function(t){if(!t||!t.length)return this;if(t.length<this.dg){for(var e=0,o=t.length;e<o;e++)this.Da(t[e]);return this}return t=this.ag(t.slice(),0,t.length-1,0),this.data.children.length?this.data.height===t.height?this.fg(this.data,t):(this.data.height<t.height&&(e=this.data,this.data=t,t=e),this.cg(t,this.data.height-t.height-1,!0)):this.data=t,this},Da:function(t){return t&&this.cg(t,this.data.height-1),this},clear:function(){return this.data=c([]),this},remove:function(t,e){if(!t)return this;for(var o,i,r,n,s=this.data,p=this.ob(t),a=[],h=[];s||a.length;){if(s||(s=a.pop(),i=a[a.length-1],o=h.pop(),n=!0),s.Wa){t:{r=t;var u=s.children,c=e;if(c){for(var f=0;f<u.length;f++)if(c(r,u[f])){r=f;break t}r=-1}else r=u.indexOf(r)}if(-1!==r){s.children.splice(r,1),a.push(s),this.$i(a);break}}n||s.Wa||!l(s,p)?i?(o++,s=i.children[o],n=!1):s=null:(a.push(s),h.push(o),o=0,i=s,s=s.children[0])}return this},ob:function(t){return t},Se:s,Te:p,toJSON:function(){return this.data},Zf:function(t,e){for(var o=[];t;)t.Wa?e.push.apply(e,t.children):o.push.apply(o,t.children),t=o.pop();return e},ag:function(t,e,o,r){var n,s=o-e+1,p=this.Qe;if(s<=p)return n=c(t.slice(e,o+1)),i(n,this.ob),n;r||(r=Math.ceil(Math.log(s)/Math.log(p)),p=Math.ceil(s/Math.pow(p,r-1))),n=c([]),n.Wa=!1,n.height=r;var a,h,l,s=Math.ceil(s/p),p=s*Math.ceil(Math.sqrt(p));for(f(t,e,o,p,this.Se);e<=o;e+=p)for(h=Math.min(e+p-1,o),f(t,e,h,s,this.Te),a=e;a<=h;a+=s)l=Math.min(a+s-1,h),n.children.push(this.ag(t,a,l,r-1));return i(n,this.ob),n},Zi:function(t,e,o,i){for(var r,n,s,p,h,l,u,c;i.push(e),!e.Wa&&i.length-1!==o;){for(u=c=1/0,r=0,n=e.children.length;r<n;r++)s=e.children[r],h=a(s),l=(Math.max(s.da,t.da)-Math.min(s.ba,t.ba))*(Math.max(s.ha,t.ha)-Math.min(s.ea,t.ea))-h,l<c?(c=l,u=h<u?h:u,p=s):l===c&&h<u&&(u=h,p=s);e=p||e.children[0]}return e},cg:function(t,e,o){var i=this.ob;o=o?t:i(t);var i=[],r=this.Zi(o,this.data,e,i);for(r.children.push(t),n(r,o);0<=e&&i[e].children.length>this.Qe;)this.gj(i,e),e--;this.Wi(o,i,e)},gj:function(t,e){var o=t[e],r=o.children.length,n=this.dg;this.Xi(o,n,r),r=this.Yi(o,n,r),r=c(o.children.splice(r,o.children.length-r)),r.height=o.height,r.Wa=o.Wa,i(o,this.ob),i(r,this.ob),e?t[e-1].children.push(r):this.fg(o,r)},fg:function(t,e){this.data=c([t,e]),this.data.height=t.height+1,this.data.Wa=!1,i(this.data,this.ob)},Yi:function(t,e,o){var i,n,s,p,h,l,u;for(h=l=1/0,i=e;i<=o-e;i++)n=r(t,0,i,this.ob),s=r(t,i,o,this.ob),p=Math.max(0,Math.min(n.da,s.da)-Math.max(n.ba,s.ba))*Math.max(0,Math.min(n.ha,s.ha)-Math.max(n.ea,s.ea)),n=a(n)+a(s),p<h?(h=p,u=i,l=n<l?n:l):p===h&&n<l&&(l=n,u=i);return u},Xi:function(t,e,o){var i=t.Wa?this.Se:s,r=t.Wa?this.Te:p,n=this.$f(t,e,o,i);e=this.$f(t,e,o,r),n<e&&t.children.sort(i)},$f:function(t,e,o,i){t.children.sort(i),i=this.ob;var s,p,a=r(t,0,e,i),l=r(t,o-e,o,i),u=h(a)+h(l);for(s=e;s<o-e;s++)p=t.children[s],n(a,t.Wa?i(p):p),u+=h(a);for(s=o-e-1;s>=e;s--)p=t.children[s],n(l,t.Wa?i(p):p),u+=h(l);return u},Wi:function(t,e,o){for(;0<=o;o--)n(e[o],t)},$i:function(t){for(var e,o=t.length-1;0<=o;o--)0===t[o].children.length?0<o?(e=t[o-1].children,e.splice(e.indexOf(t[o]),1)):this.clear():i(t[o],this.ob)},bj:function(t){var e=["return a"," - b",";"];this.Se=new Function("a","b",e.join(t[0])),this.Te=new Function("a","b",e.join(t[1])),this.ob=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},{quickselect:1}]},{},[2])(2)}),Zb=e.ja}(),od=Mc.prototype,od.Da=function(t,e){var o={ba:t[0],ea:t[1],da:t[2],ha:t[3],value:e};this.b.Da(o),this.a[i(e)]=o},od.load=function(t,e){for(var o=Array(e.length),r=0,n=e.length;r<n;r++){var s=t[r],p=e[r],s={ba:s[0],ea:s[1],da:s[2],ha:s[3],value:p};o[r]=s,this.a[i(p)]=s}this.b.load(o)},od.remove=function(t){t=i(t);var e=this.a[t];return delete this.a[t],null!==this.b.remove(e)},od.forEach=function(t,e){return Nc(Pc(this),t,e)},od.clear=function(){this.b.clear(),this.a={}},od.D=function(){var t=this.b.data;return[t.ba,t.ea,t.da,t.ha]},e(Lc,Hs),od=Lc.prototype,od.cb=function(t){var e=i(t).toString();if(kc(this,e,t)){Rc(this,e,t);var o=t.V();o?(e=o.D(),this.a&&this.a.Da(e,t)):this.i[e]=t,this.b(new Bc(vx,t))}this.v()},od.Ic=function(t){Ic(this,t),this.v()},od.clear=function(t){if(t){for(var e in this.s)this.s[e].forEach(P);this.c||(this.s={},this.l={},this.o={})}else if(this.a){this.a.forEach(this.Of,this);for(var o in this.i)this.Of(this.i[o])}this.c&&this.c.clear(),this.a&&this.a.clear(),this.ra.clear(),this.i={},this.b(new Bc(bx)),this.v()},od.qg=function(t,e){return this.a?this.a.forEach(t,e):this.c?this.c.forEach(t,e):void 0},od.Kb=function(t,e,o){return this.a?jc(this.a,t,e,o):this.c?this.c.forEach(e,o):void 0},od.rg=function(t,e,o){return this.Kb(t,function(i){if(i.V().Na(t)&&(i=e.call(o,i)))return i})},od.zg=function(){return this.c},od.oe=function(){var t;return this.c?t=this.c.a:this.a&&(t=Pc(this.a),m(this.i)||K(t,v(this.i))),t},od.yg=function(t){var e=[];return Oc(this,t,function(t){e.push(t)}),e},od.bf=function(t){return Ac(this.a,t)},od.ug=function(t,e){var o=t[0],i=t[1],r=null,n=[NaN,NaN],s=1/0,p=[-(1/0),-(1/0),1/0,1/0],a=e?e:zt;return jc(this.a,p,function(t){if(a(t)){var e=t.V(),h=s;s=e.vb(o,i,n,s),s<h&&(r=t,t=Math.sqrt(s),p[0]=o-t,p[1]=i-t,p[2]=o+t,p[3]=i+t)}}),r},od.D=function(){return this.a.D()},od.xg=function(t){return t=this.l[t.toString()],void 0!==t?t:null},od.sh=function(){return this.P},od.th=function(){return this.Z},od.uh=function(t){t=t.target;var e=i(t).toString(),o=t.V();o?(o=o.D(),e in this.i?(delete this.i[e],this.a&&this.a.Da(o,t)):this.a&&Cc(this.a,o,t)):e in this.i||(this.a&&this.a.remove(t),this.i[e]=t),o=t.a,void 0!==o?(o=o.toString(),e in this.o?(delete this.o[e],this.l[o]=t):this.l[o]!==t&&(Fc(this,t),this.l[o]=t)):e in this.o||(Fc(this,t),this.o[e]=t),this.v(),this.b(new Bc(mx,t))},od.rd=function(t,e,o){var i=this.ra;t=this.ac(t,e);var r,n;for(r=0,n=t.length;r<n;++r){var s=t[r];jc(i,s,function(t){return wt(t.extent,s)})||(this.W.call(this,s,e,o),i.Da(s,{extent:s.slice()}))}},od.mb=function(t){var e=i(t).toString();e in this.i?delete this.i[e]:this.a&&this.a.remove(t),this.Of(t),this.v()},od.Of=function(t){var e=i(t).toString();this.s[e].forEach(P),delete this.s[e];var o=t.a;void 0!==o?delete this.l[o.toString()]:delete this.o[e],this.b(new Bc(wx,t))},e(Bc,L);var vx="addfeature",mx="changefeature",bx="clear",wx="removefeature";e(Uc,ur),od=Uc.prototype,od.setMap=function(t){ur.prototype.setMap.call(this,t),this.ri()},od.Fo=function(){var t,e,o=this.j.V();this.i===Sx?(t=this.a,t.splice(-2,1),this.G(t,o)):this.i===Tx&&(t=this.a[0],t.splice(-2,1),e=this.B.V(),e.ma(t),this.G(this.a,o)),0===t.length&&(this.o=null),Yc(this)},od.ld=function(){var t=Vc(this),e=this.a,o=t.V();this.i===Sx?(e.pop(),this.G(e,o)):this.i===Tx&&(e[0].pop(),this.G(e,o),e=o.Y()),"MultiPoint"===this.W?t.Oa(new nh([e])):"MultiLineString"===this.W?t.Oa(new oh([e])):"MultiPolygon"===this.W&&t.Oa(new sh([e])),this.b(new Jc(Cx,t)),this.Aa&&this.Aa.push(t),this.ub&&this.ub.cb(t)},od.fm=function(t){var e=t.V();this.j=t,this.a=e.Y(),t=this.a[this.a.length-1],this.o=t.slice(),this.a.push(t.slice()),Yc(this),this.b(new Jc(Mx,this.j))},od.Fc=qt,od.ri=function(){var t=this.s,e=this.f();t&&e||Vc(this),this.ra.setMap(e?t:null)};var xx="Point",Sx="LineString",Tx="Polygon",Ex="Circle";e(Jc,L);var Mx="drawstart",Cx="drawend";e(_c,ur),_c.prototype.setMap=function(t){this.u.setMap(t),this.S.setMap(t),ur.prototype.setMap.call(this,t)},_c.prototype.D=function(){return this.j},_c.prototype.i=function(t){this.j=t?t:null;var e=this.o;e?t?e.Oa(Ye(t)):e.Oa(void 0):(this.o=e=new wa(t?Ye(t):{}),this.u.ga().cb(e)),this.b(new lf(this.j))},e(lf,L);var Px="extentchanged";e(uf,ur),od=uf.prototype,od.wf=function(t){var e=t.V();e&&e.X()in this.fa&&this.fa[e.X()].call(this,t,e),(e=this.s)&&xf(this,this.ra,e),E(t,"change",this.ah,this)},od.Ba=function(t){this.a&&!t&&(this.G.ga().mb(this.a),this.a=null),ur.prototype.Ba.call(this,t)},od.setMap=function(t){this.G.setMap(t),ur.prototype.setMap.call(this,t)},od.gm=function(t){this.wf(t.element)},od.ah=function(t){this.o||(t=t.target,ff(this,t),this.wf(t))},od.hm=function(t){ff(this,t.element)},od.mm=function(t,e){var o=e.Y(),o={feature:t,geometry:e,pa:[o,o]};this.i.Da(e.D(),o)},od.km=function(t,e){var o,i,r,n=e.Y();for(i=0,r=n.length;i<r;++i)o=n[i],o={feature:t,geometry:e,depth:[i],index:i,pa:[o,o]},this.i.Da(e.D(),o)},od.bh=function(t,e){var o,i,r,n,s=e.Y();for(o=0,i=s.length-1;o<i;++o)r=s.slice(o,o+2),n={feature:t,geometry:e,index:o,pa:r},this.i.Da(dt(r),n)},od.jm=function(t,e){var o,i,r,n,s,p,a,h=e.Y();for(n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)p=o.slice(i,i+2),a={feature:t,geometry:e,depth:[n],index:i,pa:p},this.i.Da(dt(p),a)},od.nm=function(t,e){var o,i,r,n,s,p,a,h=e.Y();for(n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)p=o.slice(i,i+2),a={feature:t,geometry:e,depth:[n],index:i,pa:p},this.i.Da(dt(p),a)},od.lm=function(t,e){var o,i,r,n,s,p,a,h,l,u,c=e.Y();for(p=0,a=c.length;p<a;++p)for(h=c[p],n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)l=o.slice(i,i+2),u={feature:t,geometry:e,depth:[n,p],index:i,pa:l},this.i.Da(dt(l),u)},od.im=function(t,e){var o,i=e.f;for(o=0;o<i.length;++o)this.fa[i[o].X()].call(this,t,i[o])},od.$k=function(t,e){for(var o,i=t.pa,r=t.feature,n=t.geometry,s=t.depth,p=t.index;e.length<n.sa();)e.push(0);switch(n.X()){case"MultiLineString":o=n.Y(),o[s[0]].splice(p+1,0,e);break;case"Polygon":o=n.Y(),o[s[0]].splice(p+1,0,e);break;case"MultiPolygon":o=n.Y(),o[s[1]][s[0]].splice(p+1,0,e);break;case"LineString":o=n.Y(),o.splice(p+1,0,e);break;default:return}this.o=!0,n.ma(o),this.o=!1,o=this.i,o.remove(t),Sf(this,n,p,s,1);var a={pa:[i[0],e],feature:r,geometry:n,depth:s,index:p};o.Da(dt(a.pa),a),this.j.push([a,1]),i={pa:[e,i[1]],feature:r,geometry:n,depth:s,index:p+1},o.Da(dt(i.pa),i),this.j.push([i,0]),this.P=!0},od.Qh=function(){var t=!1;if(this.W&&this.W.type!=og){var e=this.W;cf(this,e);var o,r,n,s,p,a,h,l,u=this.j,t={},c=!1;for(s=u.length-1;0<=s;--s)n=u[s],h=n[0],l=i(h.feature),h.depth&&(l+="-"+h.depth.join("-")),l in t||(t[l]={}),0===n[1]?(t[l].right=h,t[l].index=h.index):1==n[1]&&(t[l].left=h,t[l].index=h.index+1);for(l in t){switch(a=t[l].right,s=t[l].left,n=t[l].index,p=n-1,h=void 0!==s?s:a,0>p&&(p=0),u=h.geometry,o=r=u.Y(),c=!1,u.X()){case"MultiLineString":2<r[h.depth[0]].length&&(r[h.depth[0]].splice(n,1),c=!0);break;case"LineString":2<r.length&&(r.splice(n,1),c=!0);break;case"MultiPolygon":o=o[h.depth[1]];case"Polygon":o=o[h.depth[0]],4<o.length&&(n==o.length-1&&(n=0),o.splice(n,1),c=!0,0===n&&(o.pop(),o.push(o[0]),p=o.length-1))}c&&(o=u,this.o=!0,o.ma(r),this.o=!1,r=[],void 0!==s&&(this.i.remove(s),r.push(s.pa[0])),void 0!==a&&(this.i.remove(a),r.push(a.pa[1])),void 0!==s&&void 0!==a&&(s={depth:h.depth,feature:h.feature,geometry:h.geometry,index:p,pa:r},this.i.Da(dt(s.pa),s)),Sf(this,u,n,h.depth,-1),this.a&&(this.G.ga().mb(this.a),this.a=null))}t=c,this.b(new Ef(jx,this.u,e)),this.B=!1}return t},e(Ef,L);var Ax="modifystart",jx="modifyend";e(Mf,Zi),od=Mf.prototype,od.pm=function(){return this.i.ga().c},od.qm=function(t){return t=i(t),this.a[t]},od.setMap=function(t){var e=this.s,o=this.i.ga().c;e&&o.forEach(e.oi,e),Zi.prototype.setMap.call(this,t),this.i.setMap(t),t&&o.forEach(t.ki,t)},od.om=function(t){var e=this.s;e&&e.ki(t.element)},od.rm=function(t){var e=this.s;e&&e.oi(t.element)},e(Af,L);var Nx="select";e(jf,ur),od=jf.prototype,od.cb=function(t,e){var o=void 0===e||e,r=i(t),n=t.V();if(n){var s=this.fa[n.X()];s&&(this.W[r]=n.D(Tt()),s.call(this,t,n),o&&(this.G[r]=E(n,"change",this.yk.bind(this,t),this)))}o&&(this.B[r]=E(t,U(t.f),this.sm,this))},od.xj=function(t){this.cb(t)},od.yj=function(t){this.mb(t)},od.dh=function(t){var e;t instanceof Bc?e=t.feature:t instanceof Bo&&(e=t.element),this.cb(e)},od.eh=function(t){var e;t instanceof Bc?e=t.feature:t instanceof Bo&&(e=t.element),this.mb(e)},od.sm=function(t){t=t.target,this.mb(t,!0),this.cb(t,!0)},od.yk=function(t){if(this.C){var e=i(t);e in this.u||(this.u[e]=t)}else this.pi(t)},od.mb=function(t,e){var o=void 0===e||e,r=i(t),n=this.W[r];if(n){var s=this.a,p=[];for(jc(s,n,function(e){t===e.feature&&p.push(e)}),n=p.length-1;0<=n;--n)s.remove(p[n]);o&&(O(this.G[r]),delete this.G[r])}o&&(O(this.B[r]),delete this.B[r])},od.setMap=function(t){var e,o=this.s,i=this.oa;this.j?e=this.j:this.o&&(e=this.o.oe()),o&&(i.forEach(O),i.length=0,e.forEach(this.yj,this)),ur.prototype.setMap.call(this,t),t&&(this.j?i.push(E(this.j,xd,this.dh,this),E(this.j,Sd,this.eh,this)):this.o&&i.push(E(this.o,vx,this.dh,this),E(this.o,wx,this.eh,this)),e.forEach(this.xj,this))},od.Fc=qt,od.pi=function(t){this.mb(t,!1),this.cb(t,!1)},od.tm=function(t,e){var o,i=e.f;for(o=0;o<i.length;++o)this.fa[i[o].X()].call(this,t,i[o])},od.fh=function(t,e){var o,i,r,n,s=e.Y();for(o=0,i=s.length-1;o<i;++o)r=s.slice(o,o+2),n={feature:t,pa:r},this.a.Da(dt(r),n)},od.um=function(t,e){var o,i,r,n,s,p,a,h=e.Y();for(n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)p=o.slice(i,i+2),a={feature:t,pa:p},this.a.Da(dt(p),a)},od.vm=function(t,e){var o,i,r,n=e.Y();for(i=0,r=n.length;i<r;++i)o=n[i],o={feature:t,pa:[o,o]},this.a.Da(e.D(),o)},od.wm=function(t,e){var o,i,r,n,s,p,a,h,l,u,c=e.Y();for(p=0,a=c.length;p<a;++p)for(h=c[p],n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)l=o.slice(i,i+2),u={feature:t,pa:l},this.a.Da(dt(l),u)},od.xm=function(t,e){var o=e.Y(),o={feature:t,pa:[o,o]};this.a.Da(e.D(),o)},od.ym=function(t,e){var o,i,r,n,s,p,a,h=e.Y();for(n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)p=o.slice(i,i+2),a={feature:t,pa:p},this.a.Da(dt(p),a)},e(kf,ur),e(Uf,L);var Lx="translatestart",Rx="translating",kx="translateend";e(Gf,Hn);var Ix=["#00f","#0ff","#0f0","#ff0","#f00"];od=Gf.prototype,od.tg=function(){return this.get(Dx)},od.Ag=function(){return this.get(Ox)},od.hh=function(){return this.get(Fx)},od.zk=function(){for(var t=this.Ag(),e=Wo(1,256),o=e.createLinearGradient(0,0,1,256),i=1/(t.length-1),r=0,n=t.length;r<n;++r)o.addColorStop(r*i,t[r]);e.fillStyle=o,e.fillRect(0,0,1,256),this.f=e.getImageData(0,0,1,256).data},od.lf=function(){var t=this.hh(),e=this.tg(),o=t+e+1,i=2*o,i=Wo(i,i);i.shadowOffsetX=i.shadowOffsetY=this.W,i.shadowBlur=e,i.shadowColor="#000",i.beginPath(),e=o-this.W,i.arc(e,e,t,0,2*Math.PI,!0),i.fill(),this.P=i.canvas.toDataURL(),this.c=Array(256),this.v()},od.Qk=function(t){t=t.context;var e,o,i,r=t.canvas,r=t.getImageData(0,0,r.width,r.height),n=r.data;for(e=0,o=n.length;e<o;e+=4)(i=4*n[e+3])&&(n[e]=this.f[i],n[e+1]=this.f[i+1],n[e+2]=this.f[i+2]);t.putImageData(r,0,0)},od.Th=function(t){this.set(Dx,t)},od.$h=function(t){this.set(Ox,t)},od.ih=function(t){this.set(Fx,t)};var Dx="blur",Ox="gradient",Fx="radius";e(Xf,Bi),Xf.prototype.la=function(){1==this.state&&(this.Xc.forEach(P),this.Xc=null),Bi.prototype.la.call(this)},Xf.prototype.qb=function(){return this.u},Xf.prototype.Bd=function(){var t=[];if(this.g.forEach(function(e){e&&e.U()==ag&&t.push({extent:this.c.Ia(e.ya),image:e.qb()})},this),this.g.length=0,0===t.length)this.state=3;else{var e=this.s[0],o=this.o.Va(e),i="number"==typeof o?o:o[0],o="number"==typeof o?o:o[1],e=this.o.Ga(e),r=this.c.Ga(this.j),n=this.o.Ia(this.s);this.u=Os(i,o,this.B,r,this.c.D(),e,n,this.T,t,this.C,this.G),this.state=ag}Ui(this)},Xf.prototype.load=function(){if(0==this.state){this.state=1,Ui(this);var t=0;this.Xc=[],this.g.forEach(function(e){var o=e.U();if(0==o||1==o){t++;var i;i=E(e,"change",function(){var o=e.U();o!=ag&&3!=o&&4!=o||(P(i),t--,0===t&&(this.Xc.forEach(P),this.Xc=null,this.Bd()))},this),this.Xc.push(i)}},this),this.g.forEach(function(t){0==t.U()&&t.load()}),0===t&&setTimeout(this.Bd.bind(this),0)}},e(Vf,Yp),Vf.prototype.Kc=function(t){for(var e,o;Yf(this);){e=this.a.Gc,o=e.ya[0].toString();var i;if((i=o in t)&&(e=e.ya,i=yo(t[o],e[1],e[2])),i)break;N(this.pop())}},e(Zf,Hs),od=Zf.prototype,od.qh=function(){return Yf(this.a)},od.Kc=function(t,e){var o=this.qd(t);o&&o.Kc(e)},od.df=function(){return 0},od.Fb=function(t,e,o){return t+"/"+e+"/"+o},od.gf=function(){return this.fa},od.Ra=function(){return this.tileGrid},od.pb=function(t){return this.tileGrid?this.tileGrid:Lo(t)},od.qd=function(t){var e=this.f;return e&&!ne(e,t)?null:this.a},od.gb=function(){return this.oa},od.kf=function(t,e,o){return o=this.pb(o),e=this.gb(e),t=wo(o.Va(t),this.l),1==e?t:bo(t,e,this.l)},od.ta=function(){this.a.clear(),this.v()},od.Vf=o,e(ty,L),e(ey,Zf),od=ey.prototype,od.fb=function(){return this.tileLoadFunction},od.hb=function(){return this.tileUrlFunction},od.ib=function(){return this.urls},od.rh=function(t){switch(t=t.target,t.U()){case 1:this.b(new ty("tileloadstart",t));break;case ag:this.b(new ty("tileloadend",t));break;case 3:this.b(new ty("tileloaderror",t))}},od.nb=function(t){this.a.clear(),this.tileLoadFunction=t,this.v()},od.Ta=function(t,e){this.tileUrlFunction=t,"undefined"!=typeof e?_f(this,e):this.v()},od.Ya=function(t){var e=this.urls=qf(t);this.Ta(this.sc?this.sc.bind(this):$f(e,this.tileGrid),t)},od.Ua=function(t){this.urls=t;var e=t.join("\n");this.Ta(this.sc?this.sc.bind(this):$f(t,this.tileGrid),e)},od.Vf=function(t,e,o){t=this.Fb(t,e,o),this.a.b.hasOwnProperty(t)&&this.a.get(t)},e(oy,ey),od=oy.prototype,od.qh=function(){if(Yf(this.a))return!0;for(var t in this.i)if(Yf(this.i[t]))return!0;return!1},od.Kc=function(t,e){var o=this.qd(t);this.a.Kc(this.a==o?e:{});for(var i in this.i){var r=this.i[i];r.Kc(r==o?e:{})}},od.df=function(t){return this.f&&t&&!ne(this.f,t)?0:this.ef()},od.ef=function(){return 0},od.gf=function(t){return!(this.f&&t&&!ne(this.f,t))&&ey.prototype.gf.call(this,t)},od.pb=function(t){var e=this.f;return!this.tileGrid||e&&!ne(e,t)?(e=i(t).toString(),e in this.s||(this.s[e]=Lo(t)),this.s[e]):this.tileGrid},od.qd=function(t){var e=this.f;return!e||ne(e,t)?this.a:(t=i(t).toString(),t in this.i||(this.i[t]=new Vf),this.i[t])},od.vc=function(t,e,o,i,r){if(this.f&&r&&!ne(this.f,r)){var n=this.qd(r);o=[t,e,o];var s;if(t=this.Fb.apply(this,o),n.b.hasOwnProperty(t)&&(s=n.get(t)),e=this.ec,s&&s.key==e)return s;var p=this.f,a=this.pb(p),h=this.pb(r),l=Qf(this,o,r);return i=new Xf(p,a,r,h,o,l,this.gb(i),this.ef(),function(t,e,o,i){return ry(this,t,e,o,i,p)}.bind(this),this.ra,this.B),i.key=e,s?(i.a=s,n.replace(t,i)):n.set(t,i),i}return ry(this,t,e,o,i,r)},od.Bb=function(t){if(this.B!=t){this.B=t;for(var e in this.i)this.i[e].clear();this.v()}},od.Cb=function(t,e){var o=re(t);o&&(o=i(o).toString(),o in this.s||(this.s[o]=e))},e(sy,oy);var Bx=new Do({html:'<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'});sy.prototype.P=function(){return this.c},sy.prototype.W=function(){return this.o},sy.prototype.Z=function(t){if(200!=t.statusCode||"OK"!=t.statusDescription||"ValidCredentials"!=t.authenticationResultCode||1!=t.resourceSets.length||1!=t.resourceSets[0].resources.length)Ws(this,"error");else{var e=t.brandLogoUri;-1==e.indexOf("https")&&(e=e.replace("http","https"));var o=t.resourceSets[0].resources[0],i=-1==this.u?o.zoomMax:this.u;t=Io(this.f);var r=Ro({extent:t,minZoom:o.zoomMin,maxZoom:i,tileSize:o.imageWidth==o.imageHeight?o.imageWidth:[o.imageWidth,o.imageHeight]});this.tileGrid=r;var n=this.C;if(this.tileUrlFunction=Kf(o.imageUrlSubdomains.map(function(t){var e=[0,0,0],i=o.imageUrl.replace("{subdomain}",t).replace("{culture}",n);return function(t){
-if(t)return xo(t[0],t[1],-t[2]-1,e),i.replace("{quadkey}",So(e))}})),o.imageryProviders){var s=pe(re("EPSG:4326"),this.f);t=o.imageryProviders.map(function(t){var e=t.attribution,o={};return t.coverageAreas.forEach(function(t){var e=t.zoomMin,n=Math.min(t.zoomMax,i);t=t.bbox,t=Kt([t[1],t[0],t[3],t[2]],s);var p,a;for(p=e;p<=n;++p)a=p.toString(),e=Po(r,t,p),a in o?o[a].push(e):o[a]=[e]}),new Do({html:e,tileRanges:o})}),t.push(Bx),this.qa(t)}this.S=e,Ws(this,"ready")}},e(py,oy),e(ay,py),od=ay.prototype,od.Hj=function(){return this.c},od.gp=function(t){hd(this.c,t),hy(this)},od.Po=function(t){this.c=t||{},hy(this)},od.Bk=function(t,e){var o=e.target;if(!o.status||200<=o.status&&300>o.status){var i;try{i=JSON.parse(o.responseText)}catch(r){return void Ws(this,"error")}ly(this,i),this.o[t]=i,Ws(this,"ready")}else Ws(this,"error")},od.Ak=function(){Ws(this,"error")},e(uy,Lc),uy.prototype.ub=function(){return this.u},uy.prototype.rd=function(t,e,o){this.u.rd(t,e,o),e!==this.B&&(this.clear(),this.B=e,cy(this),this.Ic(this.C))},uy.prototype.Jb=function(t){this.fa=t,this.La()},uy.prototype.La=function(){this.clear(),cy(this),this.Ic(this.C),this.v()},e(dy,$s),od=dy.prototype,od.Gm=function(){return this.u},od.Lc=function(t,e,o,i){if(void 0===this.i)return null;e=Ks(this,e);var r=this.c;if(r&&this.P==this.g&&r.resolution==e&&r.f==o&&wt(r.D(),t))return r;r={F:"image",FORMAT:"PNG32",TRANSPARENT:!0},hd(r,this.u),t=t.slice();var s=(t[0]+t[2])/2,p=(t[1]+t[3])/2;if(1!=this.B){var a=this.B*Ht(t)/2,h=this.B*Ft(t)/2;t[0]=s-a,t[1]=p-h,t[2]=s+a,t[3]=p+h}var a=e/o,h=Math.ceil(Ht(t)/a),l=Math.ceil(Ft(t)/a);return t[0]=s-a*h/2,t[2]=s+a*h/2,t[1]=p-a*l/2,t[3]=p+a*l/2,this.s[0]=h,this.s[1]=l,s=t,p=this.s,i=i.eb.split(":").pop(),r.SIZE=p[0]+","+p[1],r.BBOX=s.join(","),r.BBOXSR=i,r.IMAGESR=i,r.DPI=90*o,i=this.i,s=i.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),s==i&&n(!1,50),r=yy(s,r),this.c=new Pn(t,e,o,this.j,r,this.Z,this.l),this.P=this.g,E(this.c,"change",this.o,this),this.c},od.Fm=function(){return this.l},od.Hm=function(){return this.i},od.Im=function(t){this.c=null,this.l=t,this.v()},od.Jm=function(t){t!=this.i&&(this.i=t,this.c=null,this.v())},od.Km=function(t){hd(this.u,t),this.c=null,this.v()},e(gy,$s),od=gy.prototype,od.Mm=function(){return this.l},od.Lc=function(t,e,o){e=Ks(this,e),o=this.fa?o:1;var i=this.i;if(i&&this.B==this.g&&i.resolution==e&&i.f==o&&wt(i.D(),t))return i;1!=this.u&&(t=t.slice(),$t(t,this.u));var r=[Ht(t)/e*o,Ft(t)/e*o];if(void 0!==this.P){var i=this.P,n=Dt(t),s=this.oa,p=Ht(t),a=Ft(t),h=r[0],l=r[1],u=.0254/this.s,r={OPERATION:this.Aa?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.s,SETDISPLAYWIDTH:Math.round(r[0]),SETDISPLAYHEIGHT:Math.round(r[1]),SETVIEWSCALE:l*p>h*a?p*s/(h*u):a*s/(l*u),SETVIEWCENTERX:n[0],SETVIEWCENTERY:n[1]};hd(r,this.l),i=yy(i,r),i=new Pn(t,e,o,this.j,i,this.Z,this.c),E(i,"change",this.o,this)}else i=null;return this.i=i,this.B=this.g,i},od.Lm=function(){return this.c},od.Om=function(t){hd(this.l,t),this.v()},od.Nm=function(t){this.i=null,this.c=t,this.v()},e(vy,$s),vy.prototype.Lc=function(t){return Xt(t,this.c.D())?this.c:null},vy.prototype.o=function(t){if(this.c.U()==Ag){var e,o,i=this.c.D(),r=this.c.a();if(this.i?(e=this.i[0],o=this.i[1]):(e=r.width,o=r.height),i=Math.ceil(Ht(i)/(Ft(i)/o)),i!=e){var i=Wo(i,o),n=i.canvas;i.drawImage(r,0,0,e,o,0,0,n.width,n.height),this.c.g=n}}$s.prototype.o.call(this,t)},e(my,$s);var Ux=[101,101];od=my.prototype,od.Um=function(t,e,o,i){if(void 0!==this.l){var r=Ot(t,e,0,Ux),n={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.i.LAYERS};return hd(n,this.i,i),i=Math.floor((r[3]-t[1])/e),n[this.u?"I":"X"]=Math.floor((t[0]-r[0])/e),n[this.u?"J":"Y"]=i,by(this,r,Ux,1,re(o),n)}},od.Wm=function(){return this.i},od.Lc=function(t,e,o,i){if(void 0===this.l)return null;e=Ks(this,e),1==o||this.Aa&&void 0!==this.fa||(o=1),t=t.slice();var r=(t[0]+t[2])/2,n=(t[1]+t[3])/2,s=e/o,p=Ht(t)/s,s=Ft(t)/s,a=this.c;if(a&&this.Z==this.g&&a.resolution==e&&a.f==o&&wt(a.D(),t))return a;if(1!=this.s){var a=this.s*Ht(t)/2,h=this.s*Ft(t)/2;t[0]=r-a,t[1]=n-h,t[2]=r+a,t[3]=n+h}return r={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0},hd(r,this.i),this.P[0]=Math.ceil(p*this.s),this.P[1]=Math.ceil(s*this.s),i=by(this,t,this.P,o,i,r),this.c=new Pn(t,e,o,this.j,i,this.oa,this.B),this.Z=this.g,E(this.c,"change",this.o,this),this.c},od.Vm=function(){return this.B},od.Xm=function(){return this.l},od.Ym=function(t){this.c=null,this.B=t,this.v()},od.Zm=function(t){t!=this.l&&(this.l=t,this.c=null,this.v())},od.$m=function(t){hd(this.i,t),wy(this),this.c=null,this.v()},e(xy,py);var Gx=new Do({html:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});!function(){var t={},e={ja:t};!function(o){if("object"==typeof t&&"undefined"!=typeof e)e.ja=o();else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,i.Cp=o()}}(function(){return function t(e,o,i){function r(s,p){if(!o[s]){if(!e[s]){var a="function"==typeof require&&require;if(!p&&a)return a(s,!0);if(n)return n(s,!0);throw a=Error("Cannot find module '"+s+"'"),a.code="MODULE_NOT_FOUND",a}a=o[s]={ja:{}},e[s][0].call(a.ja,function(t){var o=e[s][1][t];return r(o?o:t)},a,a.ja,t,e,o,i)}return o[s].ja}for(var n="function"==typeof require&&require,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e,o){t=t("./processor"),o.Pi=t},{"./processor":2}],2:[function(t,e){function o(t){var e=!0;try{new ImageData(10,10)}catch(o){e=!1}return function(o){var i=o.buffers,r=o.meta,n=o.width,s=o.height,p=i.length,a=i[0].byteLength;if(o.imageOps){for(a=Array(p),o=0;o<p;++o){var h,l=a,u=o;h=new Uint8ClampedArray(i[o]);var c=n,f=s;h=e?new ImageData(h,c,f):{data:h,width:c,height:f},l[u]=h}n=t(a,r).data}else{for(n=new Uint8ClampedArray(a),s=Array(p),l=Array(p),o=0;o<p;++o)s[o]=new Uint8ClampedArray(i[o]),l[o]=[0,0,0,0];for(i=0;i<a;i+=4){for(o=0;o<p;++o)u=s[o],l[o][0]=u[i],l[o][1]=u[i+1],l[o][2]=u[i+2],l[o][3]=u[i+3];o=t(l,r),n[i]=o[0],n[i+1]=o[1],n[i+2]=o[2],n[i+3]=o[3]}}return n.buffer}}function i(t,e){var i=Object.keys(t.lib||{}).map(function(e){return"var "+e+" = "+t.lib[e].toString()+";"}).concat(["var __minion__ = ("+o.toString()+")(",t.operation.toString(),");",'self.addEventListener("message", function(event) {',"  var buffer = __minion__(event.data);","  self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);","});"]),i=URL.createObjectURL(new Blob(i,{type:"text/javascript"})),i=new Worker(i);return i.addEventListener("message",e),i}function r(t,e){var i=o(t.operation);return{postMessage:function(t){setTimeout(function(){e({data:{buffer:i(t),meta:t.meta}})},0)}}}function n(t){this.Oe=!!t.Yk;var e;e=0===t.threads?0:this.Oe?1:t.threads||1;var o=[];if(e)for(var n=0;n<e;++n)o[n]=i(t,this.eg.bind(this,n));else o[0]=r(t,this.eg.bind(this,0));this.Nd=o,this.bd=[],this.cj=t.jo||1/0,this.Ld=0,this.Hc={},this.Pe=null}var s=t("./util").rl;n.prototype.ho=function(t,e,o){this.aj({xc:t,Pg:e,mg:o}),this.bg()},n.prototype.aj=function(t){for(this.bd.push(t);this.bd.length>this.cj;)this.bd.shift().mg(null,null)},n.prototype.bg=function(){if(0===this.Ld&&0<this.bd.length){var t=this.Pe=this.bd.shift(),e=t.xc[0].width,o=t.xc[0].height,i=t.xc.map(function(t){return t.data.buffer}),r=this.Nd.length;if(this.Ld=r,1===r)this.Nd[0].postMessage({buffers:i,meta:t.Pg,imageOps:this.Oe,width:e,height:o},i);else for(var n=4*Math.ceil(t.xc[0].data.length/4/r),s=0;s<r;++s){for(var p=s*n,a=[],h=0,l=i.length;h<l;++h)a.push(i[s].slice(p,p+n));this.Nd[s].postMessage({buffers:a,meta:t.Pg,imageOps:this.Oe,width:e,height:o},a)}}},n.prototype.eg=function(t,e){this.Ap||(this.Hc[t]=e.data,--this.Ld,0===this.Ld&&this.dj())},n.prototype.dj=function(){var t,e,o=this.Pe,i=this.Nd.length;if(1===i)t=new Uint8ClampedArray(this.Hc[0].buffer),e=this.Hc[0].meta;else{var r=o.xc[0].data.length;t=new Uint8ClampedArray(r),e=Array(r);for(var r=4*Math.ceil(r/4/i),n=0;n<i;++n){var p=n*r;t.set(new Uint8ClampedArray(this.Hc[n].buffer),p),e[n]=this.Hc[n].meta}}this.Pe=null,this.Hc={},o.mg(null,s(t,o.xc[0].width,o.xc[0].height),e),this.bg()},e.ja=n},{"./util":3}],3:[function(t,e,o){var i=!0;try{new ImageData(10,10)}catch(r){i=!1}var n=document.createElement("canvas").getContext("2d");o.rl=function(t,e,o){return i?new ImageData(t,e,o):(e=n.createImageData(e,o),e.data.set(t),e)}},{}]},{},[1])(1)}),Jb=e.ja}(),e(Sy,$s),Sy.prototype.u=function(t,e){this.B=new Jb.Pi({operation:t,Yk:"image"===this.Aa,jo:1,lib:e,threads:this.La}),this.v()},Sy.prototype.W=function(t,e,o,i){o=!0;for(var r,n=0,s=this.c.length;n<s;++n)if(r=this.c[n].a.ga(),"ready"!==r.U()){o=!1;break}if(!o)return null;if(t=t.slice(),!Ty(this,t,e))return this.l;o=this.i.canvas,r=Math.round(Ht(t)/e),n=Math.round(Ft(t)/e),r===o.width&&n===o.height||(o.width=r,o.height=n),r=hd({},this.Z),r.viewState=hd({},r.viewState);var n=Dt(t),s=Math.round(Ht(t)/e),p=Math.round(Ft(t)/e);return r.extent=t,r.focus=Dt(t),r.size[0]=s,r.size[1]=p,s=r.viewState,s.center=n,s.projection=i,s.resolution=e,this.l=i=new ks(t,e,1,this.j,o,this.P.bind(this,r)),this.s={extent:t,resolution:e,Mo:this.g},i},Sy.prototype.P=function(t,e){for(var o=this.c.length,i=Array(o),r=0;r<o;++r){var n;n=this.c[r];var s=t,p=t.layerStatesArray[r];if(n.j(s,p)){var a=s.size[0],h=s.size[1];if(Hx){var l=Hx.canvas;l.width!==a||l.height!==h?Hx=Wo(a,h):Hx.clearRect(0,0,a,h)}else Hx=Wo(a,h);n.i(s,p,Hx),n=Hx.getImageData(0,0,a,h)}else n=null;if(!n)return;i[r]=n}o={},this.b(new Cy(Xx,t,o)),this.B.ho(i,o,this.oa.bind(this,t,e)),qi(t.tileQueue,16,16)},Sy.prototype.oa=function(t,e,o,i,r){o?e(o):i&&(this.b(new Cy(Wx,t,r)),Ty(this,t.extent,t.viewState.resolution/t.pixelRatio)||this.i.putImageData(i,0,0),e(null))};var Hx=null;e(Cy,L);var Xx="beforeoperations",Wx="afteroperations";e(Py,py);var $x=[new Do({html:'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'}),Gx],Kx={terrain:{wb:"jpg",opaque:!0},"terrain-background":{wb:"jpg",opaque:!0},"terrain-labels":{wb:"png",opaque:!1},"terrain-lines":{wb:"png",opaque:!1},"toner-background":{wb:"png",opaque:!0},toner:{wb:"png",opaque:!0},"toner-hybrid":{wb:"png",opaque:!1},"toner-labels":{wb:"png",opaque:!1},"toner-lines":{wb:"png",opaque:!1},"toner-lite":{wb:"png",opaque:!0},watercolor:{wb:"jpg",opaque:!0}},zx={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:1,maxZoom:16}};e(Ay,oy),Ay.prototype.u=function(){return this.c},Ay.prototype.gb=function(t){return t},Ay.prototype.sc=function(t,e,o){var i=this.tileGrid;if(i||(i=this.pb(o)),!(i.b.length<=t[0])){var r=i.Ia(t,this.o),s=wo(i.Va(t[0]),this.l);1!=e&&(s=bo(s,e,this.l)),i={F:"image",FORMAT:"PNG32",TRANSPARENT:!0},hd(i,this.c);var p=this.urls;return p?(o=o.eb.split(":").pop(),i.SIZE=s[0]+","+s[1],i.BBOX=r.join(","),i.BBOXSR=o,i.IMAGESR=o,i.DPI=Math.round(i.DPI?i.DPI*e:90*e),t=1==p.length?p[0]:p[u((t[1]<<t[0])+t[2],p.length)],e=t.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),e==t&&n(!1,50),i=yy(e,i)):i=void 0,i}},Ay.prototype.C=function(t){hd(this.c,t),_f(this,jy(this))},e(Ny,Zf),Ny.prototype.vc=function(t,e,o){var i=this.Fb(t,e,o);if(this.a.b.hasOwnProperty(i))return this.a.get(i);var r=wo(this.tileGrid.Va(t));return t=[t,e,o],e=(e=Qf(this,t))?Qf(this,e).toString():"",r=new Ly(t,r,e),this.a.set(i,r),r},e(Ly,Bi),Ly.prototype.qb=function(){if(this.g)return this.g;var t=this.j,e=Wo(t[0],t[1]);return e.strokeStyle="black",e.strokeRect(.5,.5,t[0]+.5,t[1]+.5),e.fillStyle="black",e.textAlign="center",e.textBaseline="middle",e.font="24px sans-serif",e.fillText(this.c,t[0]/2,t[1]/2),this.g=e.canvas},e(Ry,oy),od=Ry.prototype,od.bn=function(t){if(t=t.target,!t.status||200<=t.status&&300>t.status){var e;try{e=JSON.parse(t.responseText)}catch(o){return void this.me()}this.oh(e)}else this.me()},od.an=function(){this.me()},od.nk=function(){return this.c},od.oh=function(t){var e,o=re("EPSG:4326"),i=this.f;if(void 0!==t.bounds){var r=pe(o,i);e=Kt(t.bounds,r)}var n=t.minzoom||0,r=t.maxzoom||22;if(this.tileGrid=i=Ro({extent:Io(i),maxZoom:r,minZoom:n}),this.tileUrlFunction=$f(t.tiles,i),void 0!==t.attribution&&!this.j){o=void 0!==e?e:o.D(),e={};for(var s;n<=r;++n)s=n.toString(),e[s]=[Po(i,o,n)];this.qa([new Do({html:t.attribution,tileRanges:e})])}this.c=t,Ws(this,"ready")},od.me=function(){Ws(this,"error")},e(ky,Zf),od=ky.prototype,od.fn=function(t){if(t=t.target,!t.status||200<=t.status&&300>t.status){var e;try{e=JSON.parse(t.responseText)}catch(o){return void this.ne()}this.zf(e)}else this.ne()},od.en=function(){this.ne()},od.kk=function(){return this.i},od.wj=function(t,e,o,i,r){this.tileGrid?(e=this.tileGrid.Yd(t,e),Dy(this.vc(e[0],e[1],e[2],1,this.f),t,o,i,r)):!0===r?setTimeout(function(){o.call(i,null)},0):o.call(i,null)},od.ne=function(){Ws(this,"error")},od.zf=function(t){var e,o=re("EPSG:4326"),i=this.f;if(void 0!==t.bounds){var r=pe(o,i);e=Kt(t.bounds,r)}var n=t.minzoom||0,r=t.maxzoom||22;this.tileGrid=i=Ro({extent:Io(i),maxZoom:r,minZoom:n}),this.i=t.template;var s=t.grids;if(s){if(this.o=$f(s,i),void 0!==t.attribution){for(o=void 0!==e?e:o.D(),e={};n<=r;++n)s=n.toString(),e[s]=[Po(i,o,n)];this.qa([new Do({html:t.attribution,tileRanges:e})])}Ws(this,"ready")}else Ws(this,"error")},od.vc=function(t,e,o,i,r){var n=this.Fb(t,e,o);return this.a.b.hasOwnProperty(n)?this.a.get(n):(t=[t,e,o],e=Qf(this,t,r),i=this.o(e,i,r),i=new Iy(t,void 0!==i?0:4,void 0!==i?i:"",this.tileGrid.Ia(t),this.s,this.c),this.a.set(n,i),i)},od.Vf=function(t,e,o){t=this.Fb(t,e,o),this.a.b.hasOwnProperty(t)&&this.a.get(t)},e(Iy,Bi),od=Iy.prototype,od.qb=function(){return null},od.getData=function(t){if(!this.j||!this.o)return null;var e=this.j[Math.floor((1-(t[1]-this.g[1])/(this.g[3]-this.g[1]))*this.j.length)];return"string"!=typeof e?null:(e=e.charCodeAt(Math.floor((t[0]-this.g[0])/(this.g[2]-this.g[0])*e.length)),93<=e&&e--,35<=e&&e--,e-=32,t=null,e in this.o&&(e=this.o[e],t=this.c&&e in this.c?this.c[e]:e),t)},od.Xa=function(){return this.s},od.$d=function(){this.state=3,Ui(this)},od.ph=function(t){this.j=t.grid,this.o=t.keys,this.c=t.data,this.state=4,Ui(this)},od.dn=function(t){if(t=t.target,!t.status||200<=t.status&&300>t.status){var e;try{e=JSON.parse(t.responseText)}catch(o){return void this.$d()}this.ph(e)}else this.$d()},od.cn=function(){this.$d()},od.load=function(){this.u&&Oy(this)},e(Fy,oy),od=Fy.prototype,od.gn=function(t,e,o,i){o=re(o);var r=this.tileGrid;if(r||(r=this.pb(o)),e=r.Yd(t,e),!(r.b.length<=e[0])){var n=r.Ga(e[0]),s=r.Ia(e,this.Z),r=wo(r.Va(e[0]),this.l),p=this.u;return 0!==p&&(r=mo(r,p,this.l),s=gt(s,n*p,s)),p={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.c.LAYERS},hd(p,this.c,i),i=Math.floor((s[3]-t[1])/n),p[this.o?"I":"X"]=Math.floor((t[0]-s[0])/n),p[this.o?"J":"Y"]=i,By(this,e,r,s,1,o,p)}},od.ef=function(){return this.u},od.Fb=function(t,e,o){return this.P+oy.prototype.Fb.call(this,t,e,o)},od.hn=function(){return this.c},od.gb=function(t){return this.W&&void 0!==this.C?t:1},od.sc=function(t,e,o){var i=this.tileGrid;if(i||(i=this.pb(o)),!(i.b.length<=t[0])){1==e||this.W&&void 0!==this.C||(e=1);var r=i.Ga(t[0]),n=i.Ia(t,this.Z),i=wo(i.Va(t[0]),this.l),s=this.u;return 0!==s&&(i=mo(i,s,this.l),n=gt(n,r*s,n)),1!=e&&(i=bo(i,e,this.l)),r={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0},hd(r,this.c),By(this,t,i,n,e,o,r)}},od.Ua=function(t){oy.prototype.Ua.call(this,t),Uy(this)},od.jn=function(t){hd(this.c,t),Uy(this),Hy(this),_f(this,Gy(this))},e(Xy,Bi),od=Xy.prototype,od.qb=function(){return-1==this.f.Rf?null:this.g.canvas},od.Il=function(){return this.j},od.Xa=function(){return this.o},od.load=function(){0==this.state&&(this.state=1,Ui(this),this.T(this,this.o),this.s(null,NaN,null))},od.Wh=function(t){this.c=t,this.state=ag,Ui(this)},od.uf=function(t){this.l=t},od.bi=function(t){this.s=t},e(Wy,ey),Wy.prototype.vc=function(t,e,o,i,r){var n=this.Fb(t,e,o);return this.a.b.hasOwnProperty(n)?this.a.get(n):(t=[t,e,o],i=(e=Qf(this,t,r))?this.tileUrlFunction(e,i,r):void 0,i=new this.tileClass(t,void 0!==i?0:4,void 0!==i?i:"",this.c,this.tileLoadFunction),E(i,"change",this.rh,this),this.a.set(n,i),i)},Wy.prototype.gb=function(t){return void 0==t?ey.prototype.gb.call(this,t):t},Wy.prototype.kf=function(t,e){var o=wo(this.tileGrid.Va(t));return[Math.round(o[0]*e),Math.round(o[1]*e)]},e(Ky,To),Ky.prototype.o=function(){return this.l},e(qy,oy),od=qy.prototype,od.Jj=function(){return this.c},od.kn=function(){return this.u},od.ln=function(){return this.C},od.Wj=function(){return this.o},od.ik=function(){return this.W},od.mn=function(){return this.P},od.qk=function(){return this.Z},od.hp=function(t){hd(this.c,t),_f(this,Vy(this))};var qx="KVP";e(Yy,oy),e(Zy,yc),Zy.prototype.qb=function(){if(this.c)return this.c;var t=yc.prototype.qb.call(this);if(this.state==ag){if(256==t.width&&256==t.height)return this.c=t;var e=Wo(256,256);return e.drawImage(t,0,0),this.c=e.canvas}return t};var Vx="default",Yx="truncated";return Jy.prototype.get=function(t){return this.f[t]||null},Jy.prototype.add=function(t,e,o,i,r){var n,s,p;for(s=0,p=this.a.length;s<p;++s)if(n=this.a[s],n.width>=e+this.b&&n.height>=o+this.b)return p={offsetX:n.x+this.b,offsetY:n.y+this.b,image:this.c},this.f[t]=p,i.call(r,this.g,n.x+this.b,n.y+this.b),t=s,e+=this.b,i=o+this.b,n.width-e>n.height-i?(o={x:n.x+e,y:n.y,width:n.width-e,height:n.height},e={x:n.x,y:n.y+i,width:e,height:n.height-i},_y(this,t,o,e)):(o={x:n.x+e,y:n.y,width:n.width-e,height:i},e={x:n.x,y:n.y+i,width:n.width,height:n.height-i},_y(this,t,o,e)),p;return null},Qy.prototype.add=function(t,e,i,r,n,s){return e+this.b>this.g||i+this.b>this.g?null:(r=td(this,!1,t,e,i,r,s))?(t=td(this,!0,t,e,i,void 0!==n?n:o,s),{offsetX:r.offsetX,offsetY:r.offsetY,image:r.image,de:t.image}):null},e(ed,jn),od=ed.prototype,od.clone=function(){var t=new ed({fill:this.j?this.j.clone():void 0,points:this.f!==this.g?this.b/2:this.b,radius:this.g,radius2:this.f,angle:this.s,snapToPixel:this.u,stroke:this.a?this.a.clone():void 0,rotation:this.o,rotateWithView:this.T,atlasManager:this.S});return t.Rc(this.l),t.Sc(this.c),t},od.cc=function(){return this.G},od.tn=function(){return this.s},od.vn=function(){return this.j},od.pe=function(){return this.B},od.Tb=function(){return this.C},od.md=function(){return this.na},od.vd=function(){return Ag},od.jc=function(){return this.za},od.wn=function(){return this.b},od.xn=function(){return this.g},od.hk=function(){return this.f},od.Gb=function(){return this.P},od.yn=function(){return this.a},od.pf=o,od.load=o,od.Uf=o,od.yh=function(t,e,o,i){var r;for(e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),this.f!==this.g&&(this.b*=2),o=0;o<=this.b;o++)i=2*o*Math.PI/this.b-Math.PI/2+this.s,r=0===o%2?this.g:this.f,e.lineTo(t.size/2+r*Math.cos(i),t.size/2+r*Math.sin(i));this.j&&(e.fillStyle=Xo(this.j.b),e.fill()),this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.Dd,t.lineDash&&e.setLineDash(t.lineDash),e.lineCap=t.lineCap,e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke()),e.closePath()},od.xh=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),this.f!==this.g&&(this.b*=2);var r;for(o=0;o<=this.b;o++)r=2*o*Math.PI/this.b-Math.PI/2+this.s,i=0===o%2?this.g:this.f,e.lineTo(t.size/2+i*Math.cos(r),t.size/2+i*Math.sin(r));e.fillStyle=Ng,e.fill(),this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.Dd,t.lineDash&&e.setLineDash(t.lineDash),e.stroke()),e.closePath()},t("ol.animation.bounce",function(t){var e=t.resolution,o=t.start?t.start:Date.now(),i=void 0!==t.duration?t.duration:1e3,r=t.easing?t.easing:ho;return function(t,n){if(n.time<o)return n.animate=!0,n.viewHints[0]+=1,!0;if(n.time<o+i){var s=r((n.time-o)/i),p=e-n.viewState.resolution;return n.animate=!0,n.viewState.resolution+=s*p,n.viewHints[0]+=1,!0}return!1}}),t("ol.animation.pan",lo),t("ol.animation.rotate",uo),t("ol.animation.zoom",co),r.prototype.code=r.prototype.code,t("ol.Attribution",Do),Do.prototype.getHTML=Do.prototype.g,t("ol.Collection",Oo),Oo.prototype.clear=Oo.prototype.clear,Oo.prototype.extend=Oo.prototype.qf,Oo.prototype.forEach=Oo.prototype.forEach,Oo.prototype.getArray=Oo.prototype.sl,Oo.prototype.item=Oo.prototype.item,Oo.prototype.getLength=Oo.prototype.yc,Oo.prototype.insertAt=Oo.prototype.ee,Oo.prototype.pop=Oo.prototype.pop,Oo.prototype.push=Oo.prototype.push,Oo.prototype.remove=Oo.prototype.remove,Oo.prototype.removeAt=Oo.prototype.Nf,Oo.prototype.setAt=Oo.prototype.Oo,Bo.prototype.element=Bo.prototype.element,t("ol.color.asArray",Uo),t("ol.color.asString",Go),t("ol.colorlike.asColorLike",Xo),t("ol.coordinate.add",st),t("ol.coordinate.createStringXY",function(t){return function(e){return yt(e,t)}}),t("ol.coordinate.format",ht),t("ol.coordinate.rotate",ut),t("ol.coordinate.toStringHDMS",function(t,e){return t?at(t[1],"NS",e)+" "+at(t[0],"EW",e):""}),t("ol.coordinate.toStringXY",yt),t("ol.DeviceOrientation",ba),ba.prototype.getAlpha=ba.prototype.Cj,ba.prototype.getBeta=ba.prototype.Fj,ba.prototype.getGamma=ba.prototype.Mj,ba.prototype.getHeading=ba.prototype.tl,ba.prototype.getTracking=ba.prototype.Sg,ba.prototype.setTracking=ba.prototype.rf,t("ol.easing.easeIn",no),t("ol.easing.easeOut",so),t("ol.easing.inAndOut",po),t("ol.easing.linear",ao),t("ol.easing.upAndDown",ho),t("ol.extent.boundingExtent",dt),t("ol.extent.buffer",gt),t("ol.extent.containsCoordinate",bt),t("ol.extent.containsExtent",wt),t("ol.extent.containsXY",xt),t("ol.extent.createEmpty",Tt),t("ol.extent.equals",Pt),t("ol.extent.extend",At),t("ol.extent.getBottomLeft",kt),t("ol.extent.getBottomRight",It),t("ol.extent.getCenter",Dt),t("ol.extent.getHeight",Ft),t("ol.extent.getIntersection",Bt),t("ol.extent.getSize",function(t){return[t[2]-t[0],t[3]-t[1]]}),t("ol.extent.getTopLeft",Ut),t("ol.extent.getTopRight",Gt),t("ol.extent.getWidth",Ht),t("ol.extent.intersects",Xt),t("ol.extent.isEmpty",Wt),t("ol.extent.applyTransform",Kt),t("ol.Feature",wa),wa.prototype.clone=wa.prototype.clone,wa.prototype.getGeometry=wa.prototype.V,wa.prototype.getId=wa.prototype.vl,wa.prototype.getGeometryName=wa.prototype.Oj,wa.prototype.getStyle=wa.prototype.wl,wa.prototype.getStyleFunction=wa.prototype.zc,wa.prototype.setGeometry=wa.prototype.Oa,wa.prototype.setStyle=wa.prototype.sf,wa.prototype.setId=wa.prototype.Wb,wa.prototype.setGeometryName=wa.prototype.Dc,t("ol.featureloader.tile",Wa),t("ol.featureloader.xhr",$a),t("ol.Geolocation",nc),nc.prototype.getAccuracy=nc.prototype.Aj,nc.prototype.getAccuracyGeometry=nc.prototype.Bj,nc.prototype.getAltitude=nc.prototype.Dj,nc.prototype.getAltitudeAccuracy=nc.prototype.Ej,nc.prototype.getHeading=nc.prototype.yl,nc.prototype.getPosition=nc.prototype.zl,nc.prototype.getProjection=nc.prototype.Tg,nc.prototype.getSpeed=nc.prototype.jk,nc.prototype.getTracking=nc.prototype.Ug,nc.prototype.getTrackingOptions=nc.prototype.Gg,nc.prototype.setProjection=nc.prototype.Vg,nc.prototype.setTracking=nc.prototype.ge,nc.prototype.setTrackingOptions=nc.prototype.ji,t("ol.Graticule",uc),uc.prototype.getMap=uc.prototype.Cl,uc.prototype.getMeridians=uc.prototype.Xj,uc.prototype.getParallels=uc.prototype.dk,uc.prototype.setMap=uc.prototype.setMap,t("ol.has.DEVICE_PIXEL_RATIO",Ud),t("ol.has.CANVAS",Hd),t("ol.has.DEVICE_ORIENTATION",Xd),t("ol.has.GEOLOCATION",Wd),t("ol.has.TOUCH",$d),t("ol.has.WEBGL",jd),Pn.prototype.getImage=Pn.prototype.a,Pn.prototype.load=Pn.prototype.load,yc.prototype.getImage=yc.prototype.qb,yc.prototype.load=yc.prototype.load,t("ol.inherits",e),t("ol.Kinetic",Vi),t("ol.loadingstrategy.all",Ec),t("ol.loadingstrategy.bbox",function(t){return[t]}),t("ol.loadingstrategy.tile",function(t){return function(e,o){var i=t.wc(o),r=Po(t,e,i),n=[],i=[i,0,0];for(i[1]=r.ba;i[1]<=r.da;++i[1])for(i[2]=r.ea;i[2]<=r.ha;++i[2])n.push(t.Ia(i));return n}}),t("ol.Map",ta),ta.prototype.addControl=ta.prototype.ij,ta.prototype.addInteraction=ta.prototype.jj,ta.prototype.addLayer=ta.prototype.gg,ta.prototype.addOverlay=ta.prototype.hg,ta.prototype.beforeRender=ta.prototype.ab,ta.prototype.forEachFeatureAtPixel=ta.prototype.Sd,ta.prototype.forEachLayerAtPixel=ta.prototype.Gl,ta.prototype.hasFeatureAtPixel=ta.prototype.Xk,ta.prototype.getEventCoordinate=ta.prototype.Kj,ta.prototype.getEventPixel=ta.prototype.Ud,ta.prototype.getTarget=ta.prototype.jf,ta.prototype.getTargetElement=ta.prototype.uc,ta.prototype.getCoordinateFromPixel=ta.prototype.Ja,ta.prototype.getControls=ta.prototype.Ij,ta.prototype.getOverlays=ta.prototype.bk,ta.prototype.getOverlayById=ta.prototype.ak,ta.prototype.getInteractions=ta.prototype.Pj,ta.prototype.getLayerGroup=ta.prototype.tc,ta.prototype.getLayers=ta.prototype.Wg,ta.prototype.getPixelFromCoordinate=ta.prototype.Ca,ta.prototype.getSize=ta.prototype.kb,ta.prototype.getView=ta.prototype.$,ta.prototype.getViewport=ta.prototype.rk,ta.prototype.renderSync=ta.prototype.Ko,ta.prototype.render=ta.prototype.render,ta.prototype.removeControl=ta.prototype.Do,ta.prototype.removeInteraction=ta.prototype.Eo,ta.prototype.removeLayer=ta.prototype.Go,ta.prototype.removeOverlay=ta.prototype.Ho,ta.prototype.setLayerGroup=ta.prototype.ai,ta.prototype.setSize=ta.prototype.Tf,ta.prototype.setTarget=ta.prototype.Xg,ta.prototype.setView=ta.prototype.Wo,ta.prototype.updateSize=ta.prototype.Yc,ki.prototype.originalEvent=ki.prototype.originalEvent,ki.prototype.pixel=ki.prototype.pixel,ki.prototype.coordinate=ki.prototype.coordinate,ki.prototype.dragging=ki.prototype.dragging,zo.prototype.map=zo.prototype.map,zo.prototype.frameState=zo.prototype.frameState,F.prototype.key=F.prototype.key,F.prototype.oldValue=F.prototype.oldValue,t("ol.Object",B),B.prototype.get=B.prototype.get,B.prototype.getKeys=B.prototype.O,B.prototype.getProperties=B.prototype.N,B.prototype.set=B.prototype.set,B.prototype.setProperties=B.prototype.H,B.prototype.unset=B.prototype.R,t("ol.Observable",D),t("ol.Observable.unByKey",O),D.prototype.changed=D.prototype.v,D.prototype.dispatchEvent=D.prototype.b,D.prototype.getRevision=D.prototype.K,D.prototype.on=D.prototype.I,D.prototype.once=D.prototype.L,D.prototype.un=D.prototype.J,D.prototype.unByKey=D.prototype.M,t("ol.Overlay",oa),oa.prototype.getElement=oa.prototype.Td,oa.prototype.getId=oa.prototype.Hl,oa.prototype.getMap=oa.prototype.he,oa.prototype.getOffset=oa.prototype.Eg,oa.prototype.getPosition=oa.prototype.Yg,oa.prototype.getPositioning=oa.prototype.Fg,oa.prototype.setElement=oa.prototype.Vh,oa.prototype.setMap=oa.prototype.setMap,oa.prototype.setOffset=oa.prototype.ci,oa.prototype.setPosition=oa.prototype.tf,oa.prototype.setPositioning=oa.prototype.fi,t("ol.render.toContext",function(t,e){var o=t.canvas,i=e?e:{},r=i.pixelRatio||Ud;return(i=i.size)&&(o.width=i[0]*r,o.height=i[1]*r,o.style.width=i[0]+"px",o.style.height=i[1]+"px"),o=[0,0,o.width,o.height],i=fn(sn(),r,r),new $n(t,r,o,i,0)}),t("ol.size.toSize",wo),Bi.prototype.getTileCoord=Bi.prototype.i,Bi.prototype.load=Bi.prototype.load,Xy.prototype.getFormat=Xy.prototype.Il,Xy.prototype.setFeatures=Xy.prototype.Wh,Xy.prototype.setProjection=Xy.prototype.uf,Xy.prototype.setLoader=Xy.prototype.bi,t("ol.View",_e),_e.prototype.constrainCenter=_e.prototype.Qd,_e.prototype.constrainResolution=_e.prototype.constrainResolution,_e.prototype.constrainRotation=_e.prototype.constrainRotation,_e.prototype.getCenter=_e.prototype.bb,_e.prototype.calculateExtent=_e.prototype.Jc,_e.prototype.getMaxResolution=_e.prototype.Jl,_e.prototype.getMinResolution=_e.prototype.Kl,_e.prototype.getProjection=_e.prototype.Ll,_e.prototype.getResolution=_e.prototype.Ma,_e.prototype.getResolutions=_e.prototype.Ml,_e.prototype.getRotation=_e.prototype.Pa,_e.prototype.getZoom=_e.prototype.tk,_e.prototype.fit=_e.prototype.$e,_e.prototype.centerOn=_e.prototype.sj,_e.prototype.rotate=_e.prototype.rotate,_e.prototype.setCenter=_e.prototype.rb,_e.prototype.setResolution=_e.prototype.Yb,_e.prototype.setRotation=_e.prototype.ie,_e.prototype.setZoom=_e.prototype.Zo,t("ol.xml.getAllTextContent",Ta),t("ol.xml.parse",Pa),yp.prototype.getGL=yp.prototype.Pn,yp.prototype.useProgram=yp.prototype.ve,t("ol.tilegrid.createXYZ",Ro),t("ol.tilegrid.TileGrid",To),To.prototype.forEachTileCoord=To.prototype.sg,To.prototype.getMaxZoom=To.prototype.Cg,To.prototype.getMinZoom=To.prototype.Dg,To.prototype.getOrigin=To.prototype.Tc,To.prototype.getResolution=To.prototype.Ga,To.prototype.getResolutions=To.prototype.Bh,To.prototype.getTileCoordExtent=To.prototype.Ia,To.prototype.getTileCoordForCoordAndResolution=To.prototype.Yd,To.prototype.getTileCoordForCoordAndZ=To.prototype.Zd,To.prototype.getTileSize=To.prototype.Va,To.prototype.getZForResolution=To.prototype.wc,t("ol.tilegrid.WMTS",Ky),Ky.prototype.getMatrixIds=Ky.prototype.o,t("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet",zy),t("ol.style.AtlasManager",Qy),t("ol.style.Circle",Nn),Nn.prototype.clone=Nn.prototype.clone,Nn.prototype.getFill=Nn.prototype.nn,Nn.prototype.getImage=Nn.prototype.Tb,Nn.prototype.getRadius=Nn.prototype.pn,Nn.prototype.getStroke=Nn.prototype.qn,Nn.prototype.setRadius=Nn.prototype.rn,t("ol.style.Fill",Rn),Rn.prototype.clone=Rn.prototype.clone,Rn.prototype.getColor=Rn.prototype.g,Rn.prototype.setColor=Rn.prototype.f,t("ol.style.Icon",Pl),Pl.prototype.clone=Pl.prototype.clone,Pl.prototype.getAnchor=Pl.prototype.cc,Pl.prototype.getImage=Pl.prototype.Tb,Pl.prototype.getOrigin=Pl.prototype.jc,Pl.prototype.getSrc=Pl.prototype.sn,Pl.prototype.getSize=Pl.prototype.Gb,Pl.prototype.load=Pl.prototype.load,t("ol.style.Image",jn),jn.prototype.getOpacity=jn.prototype.qe,jn.prototype.getRotateWithView=jn.prototype.re,jn.prototype.getRotation=jn.prototype.se,jn.prototype.getScale=jn.prototype.te,jn.prototype.getSnapToPixel=jn.prototype.Xd,jn.prototype.setOpacity=jn.prototype.Rc,jn.prototype.setRotation=jn.prototype.ue,jn.prototype.setScale=jn.prototype.Sc,t("ol.style.RegularShape",ed),ed.prototype.clone=ed.prototype.clone,ed.prototype.getAnchor=ed.prototype.cc,ed.prototype.getAngle=ed.prototype.tn,ed.prototype.getFill=ed.prototype.vn,ed.prototype.getImage=ed.prototype.Tb,ed.prototype.getOrigin=ed.prototype.jc,ed.prototype.getPoints=ed.prototype.wn,ed.prototype.getRadius=ed.prototype.xn,ed.prototype.getRadius2=ed.prototype.hk,ed.prototype.getSize=ed.prototype.Gb,ed.prototype.getStroke=ed.prototype.yn,t("ol.style.Stroke",In),In.prototype.clone=In.prototype.clone,In.prototype.getColor=In.prototype.zn,In.prototype.getLineCap=In.prototype.Sj,In.prototype.getLineDash=In.prototype.An,In.prototype.getLineJoin=In.prototype.Tj,In.prototype.getMiterLimit=In.prototype.Yj,In.prototype.getWidth=In.prototype.Bn,In.prototype.setColor=In.prototype.Cn,In.prototype.setLineCap=In.prototype.So,In.prototype.setLineDash=In.prototype.setLineDash,In.prototype.setLineJoin=In.prototype.To,In.prototype.setMiterLimit=In.prototype.Uo,In.prototype.setWidth=In.prototype.Xo,t("ol.style.Style",On),On.prototype.clone=On.prototype.clone,On.prototype.getGeometry=On.prototype.V,On.prototype.getGeometryFunction=On.prototype.Nj,On.prototype.getFill=On.prototype.Dn,On.prototype.getImage=On.prototype.En,On.prototype.getStroke=On.prototype.Fn,On.prototype.getText=On.prototype.Fa,On.prototype.getZIndex=On.prototype.Gn,On.prototype.setGeometry=On.prototype.zh,On.prototype.setZIndex=On.prototype.Hn,t("ol.style.Text",Al),Al.prototype.clone=Al.prototype.clone,Al.prototype.getFont=Al.prototype.Lj,Al.prototype.getOffsetX=Al.prototype.Zj,Al.prototype.getOffsetY=Al.prototype.$j,Al.prototype.getFill=Al.prototype.In,Al.prototype.getRotateWithView=Al.prototype.Jn,Al.prototype.getRotation=Al.prototype.Kn,Al.prototype.getScale=Al.prototype.Ln,Al.prototype.getStroke=Al.prototype.Mn,Al.prototype.getText=Al.prototype.Fa,Al.prototype.getTextAlign=Al.prototype.lk,Al.prototype.getTextBaseline=Al.prototype.mk,Al.prototype.setFont=Al.prototype.Yh,
-Al.prototype.setOffsetX=Al.prototype.di,Al.prototype.setOffsetY=Al.prototype.ei,Al.prototype.setFill=Al.prototype.Xh,Al.prototype.setRotation=Al.prototype.Nn,Al.prototype.setScale=Al.prototype.Ah,Al.prototype.setStroke=Al.prototype.gi,Al.prototype.setText=Al.prototype.hi,Al.prototype.setTextAlign=Al.prototype.ii,Al.prototype.setTextBaseline=Al.prototype.Vo,t("ol.Sphere",Vt),Vt.prototype.geodesicArea=Vt.prototype.a,Vt.prototype.haversineDistance=Vt.prototype.b,t("ol.source.BingMaps",sy),t("ol.source.BingMaps.TOS_ATTRIBUTION",Bx),sy.prototype.getApiKey=sy.prototype.P,sy.prototype.getImagerySet=sy.prototype.W,t("ol.source.CartoDB",ay),ay.prototype.getConfig=ay.prototype.Hj,ay.prototype.updateConfig=ay.prototype.gp,ay.prototype.setConfig=ay.prototype.Po,t("ol.source.Cluster",uy),uy.prototype.getSource=uy.prototype.ub,uy.prototype.setDistance=uy.prototype.Jb,t("ol.source.Image",$s),qs.prototype.image=qs.prototype.image,t("ol.source.ImageArcGISRest",dy),dy.prototype.getParams=dy.prototype.Gm,dy.prototype.getImageLoadFunction=dy.prototype.Fm,dy.prototype.getUrl=dy.prototype.Hm,dy.prototype.setImageLoadFunction=dy.prototype.Im,dy.prototype.setUrl=dy.prototype.Jm,dy.prototype.updateParams=dy.prototype.Km,t("ol.source.ImageCanvas",Vs),t("ol.source.ImageMapGuide",gy),gy.prototype.getParams=gy.prototype.Mm,gy.prototype.getImageLoadFunction=gy.prototype.Lm,gy.prototype.updateParams=gy.prototype.Om,gy.prototype.setImageLoadFunction=gy.prototype.Nm,t("ol.source.ImageStatic",vy),t("ol.source.ImageVector",Ys),Ys.prototype.getSource=Ys.prototype.Pm,Ys.prototype.getStyle=Ys.prototype.Qm,Ys.prototype.getStyleFunction=Ys.prototype.Rm,Ys.prototype.setStyle=Ys.prototype.nh,t("ol.source.ImageWMS",my),my.prototype.getGetFeatureInfoUrl=my.prototype.Um,my.prototype.getParams=my.prototype.Wm,my.prototype.getImageLoadFunction=my.prototype.Vm,my.prototype.getUrl=my.prototype.Xm,my.prototype.setImageLoadFunction=my.prototype.Ym,my.prototype.setUrl=my.prototype.Zm,my.prototype.updateParams=my.prototype.$m,t("ol.source.OSM",xy),t("ol.source.OSM.ATTRIBUTION",Gx),t("ol.source.Raster",Sy),Sy.prototype.setOperation=Sy.prototype.u,Cy.prototype.extent=Cy.prototype.extent,Cy.prototype.resolution=Cy.prototype.resolution,Cy.prototype.data=Cy.prototype.data,t("ol.source.Source",Hs),Hs.prototype.getAttributions=Hs.prototype.va,Hs.prototype.getLogo=Hs.prototype.ua,Hs.prototype.getProjection=Hs.prototype.wa,Hs.prototype.getState=Hs.prototype.U,Hs.prototype.refresh=Hs.prototype.ta,Hs.prototype.setAttributions=Hs.prototype.qa,t("ol.source.Stamen",Py),t("ol.source.Tile",Zf),Zf.prototype.getTileGrid=Zf.prototype.Ra,ty.prototype.tile=ty.prototype.tile,t("ol.source.TileArcGISRest",Ay),Ay.prototype.getParams=Ay.prototype.u,Ay.prototype.updateParams=Ay.prototype.C,t("ol.source.TileDebug",Ny),t("ol.source.TileImage",oy),oy.prototype.setRenderReprojectionEdges=oy.prototype.Bb,oy.prototype.setTileGridForProjection=oy.prototype.Cb,t("ol.source.TileJSON",Ry),Ry.prototype.getTileJSON=Ry.prototype.nk,t("ol.source.TileUTFGrid",ky),ky.prototype.getTemplate=ky.prototype.kk,ky.prototype.forDataAtCoordinateAndResolution=ky.prototype.wj,t("ol.source.TileWMS",Fy),Fy.prototype.getGetFeatureInfoUrl=Fy.prototype.gn,Fy.prototype.getParams=Fy.prototype.hn,Fy.prototype.updateParams=Fy.prototype.jn,ey.prototype.getTileLoadFunction=ey.prototype.fb,ey.prototype.getTileUrlFunction=ey.prototype.hb,ey.prototype.getUrls=ey.prototype.ib,ey.prototype.setTileLoadFunction=ey.prototype.nb,ey.prototype.setTileUrlFunction=ey.prototype.Ta,ey.prototype.setUrl=ey.prototype.Ya,ey.prototype.setUrls=ey.prototype.Ua,t("ol.source.Vector",Lc),Lc.prototype.addFeature=Lc.prototype.cb,Lc.prototype.addFeatures=Lc.prototype.Ic,Lc.prototype.clear=Lc.prototype.clear,Lc.prototype.forEachFeature=Lc.prototype.qg,Lc.prototype.forEachFeatureInExtent=Lc.prototype.Kb,Lc.prototype.forEachFeatureIntersectingExtent=Lc.prototype.rg,Lc.prototype.getFeaturesCollection=Lc.prototype.zg,Lc.prototype.getFeatures=Lc.prototype.oe,Lc.prototype.getFeaturesAtCoordinate=Lc.prototype.yg,Lc.prototype.getFeaturesInExtent=Lc.prototype.bf,Lc.prototype.getClosestFeatureToCoordinate=Lc.prototype.ug,Lc.prototype.getExtent=Lc.prototype.D,Lc.prototype.getFeatureById=Lc.prototype.xg,Lc.prototype.getFormat=Lc.prototype.sh,Lc.prototype.getUrl=Lc.prototype.th,Lc.prototype.removeFeature=Lc.prototype.mb,Bc.prototype.feature=Bc.prototype.feature,t("ol.source.VectorTile",Wy),t("ol.source.WMTS",qy),qy.prototype.getDimensions=qy.prototype.Jj,qy.prototype.getFormat=qy.prototype.kn,qy.prototype.getLayer=qy.prototype.ln,qy.prototype.getMatrixSet=qy.prototype.Wj,qy.prototype.getRequestEncoding=qy.prototype.ik,qy.prototype.getStyle=qy.prototype.mn,qy.prototype.getVersion=qy.prototype.qk,qy.prototype.updateDimensions=qy.prototype.hp,t("ol.source.WMTS.optionsFromCapabilities",function(t,e){var o,i,r=q(t.Contents.Layer,function(t){return t.Identifier==e.layer}),n=t.Contents.TileMatrixSet;o=1<r.TileMatrixSetLink.length?"projection"in e?Z(r.TileMatrixSetLink,function(t){return q(n,function(e){return e.Identifier==t.TileMatrixSet}).SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")==e.projection}):Z(r.TileMatrixSetLink,function(t){return t.TileMatrixSet==e.matrixSet}):0,0>o&&(o=0),i=r.TileMatrixSetLink[o].TileMatrixSet;var s=r.Format[0];"format"in e&&(s=e.format),o=Z(r.Style,function(t){return"style"in e?t.Title==e.style:t.isDefault}),0>o&&(o=0),o=r.Style[o].Identifier;var p={};"Dimension"in r&&r.Dimension.forEach(function(t){var e=t.Identifier,o=t.Default;void 0===o&&(o=t.Value[0]),p[e]=o});var a,h=q(t.Contents.TileMatrixSet,function(t){return t.Identifier==i});a=re("projection"in e?e.projection:h.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var l,u,c=r.WGS84BoundingBox;void 0!==c&&(u=re("EPSG:4326").D(),u=c[0]==u[0]&&c[2]==u[2],l=ue(c,"EPSG:4326",a),(c=a.D())&&(wt(c,l)||(l=void 0)));var h=zy(h,l),f=[];if(l=e.requestEncoding,l=void 0!==l?l:"","OperationsMetadata"in t&&"GetTile"in t.OperationsMetadata)for(var c=t.OperationsMetadata.GetTile.DCP.HTTP.Get,y=0,d=c.length;y<d;++y){var g=q(c[y].Constraint,function(t){return"GetEncoding"==t.name}).AllowedValues.Value;if(""===l&&(l=g[0]),l!==qx)break;X(g,qx)&&f.push(c[y].href)}return 0===f.length&&(l="REST",r.ResourceURL.forEach(function(t){"tile"===t.resourceType&&(s=t.format,f.push(t.template))})),{urls:f,layer:e.layer,matrixSet:i,format:s,projection:a,requestEncoding:l,tileGrid:h,style:o,dimensions:p,wrapX:u}}),t("ol.source.XYZ",py),t("ol.source.Zoomify",Yy),en.prototype.vectorContext=en.prototype.vectorContext,en.prototype.frameState=en.prototype.frameState,en.prototype.context=en.prototype.context,en.prototype.glContext=en.prototype.glContext,pu.prototype.get=pu.prototype.get,pu.prototype.getExtent=pu.prototype.D,pu.prototype.getGeometry=pu.prototype.V,pu.prototype.getProperties=pu.prototype.Bm,pu.prototype.getType=pu.prototype.X,t("ol.render.VectorContext",Wn),Ip.prototype.setStyle=Ip.prototype.ud,Ip.prototype.drawGeometry=Ip.prototype.pc,Ip.prototype.drawFeature=Ip.prototype.Ve,$n.prototype.drawCircle=$n.prototype.Rd,$n.prototype.setStyle=$n.prototype.ud,$n.prototype.drawGeometry=$n.prototype.pc,$n.prototype.drawFeature=$n.prototype.Ve,t("ol.proj.common.add",tn),t("ol.proj.METERS_PER_UNIT",cd),t("ol.proj.Projection",Yt),Yt.prototype.getCode=Yt.prototype.Gj,Yt.prototype.getExtent=Yt.prototype.D,Yt.prototype.getUnits=Yt.prototype.yb,Yt.prototype.getMetersPerUnit=Yt.prototype.dc,Yt.prototype.getWorldExtent=Yt.prototype.sk,Yt.prototype.isGlobal=Yt.prototype.bl,Yt.prototype.setGlobal=Yt.prototype.Ro,Yt.prototype.setExtent=Yt.prototype.Am,Yt.prototype.setWorldExtent=Yt.prototype.Yo,Yt.prototype.setGetPointResolution=Yt.prototype.Qo,Yt.prototype.getPointResolution=Yt.prototype.getPointResolution,t("ol.proj.setProj4",function(t){dd=t}),t("ol.proj.addEquivalentProjections",Zt),t("ol.proj.addProjection",_t),t("ol.proj.addCoordinateTransforms",oe),t("ol.proj.fromLonLat",function(t,e){return le(t,"EPSG:4326",void 0!==e?e:"EPSG:3857")}),t("ol.proj.toLonLat",function(t,e){return le(t,void 0!==e?e:"EPSG:3857","EPSG:4326")}),t("ol.proj.get",re),t("ol.proj.equivalent",ne),t("ol.proj.getTransform",se),t("ol.proj.transform",le),t("ol.proj.transformExtent",ue),t("ol.layer.Base",qr),qr.prototype.getExtent=qr.prototype.D,qr.prototype.getMaxResolution=qr.prototype.Pb,qr.prototype.getMinResolution=qr.prototype.Qb,qr.prototype.getOpacity=qr.prototype.Rb,qr.prototype.getVisible=qr.prototype.zb,qr.prototype.getZIndex=qr.prototype.Sb,qr.prototype.setExtent=qr.prototype.fc,qr.prototype.setMaxResolution=qr.prototype.lc,qr.prototype.setMinResolution=qr.prototype.mc,qr.prototype.setOpacity=qr.prototype.gc,qr.prototype.setVisible=qr.prototype.hc,qr.prototype.setZIndex=qr.prototype.ic,t("ol.layer.Group",Yr),Yr.prototype.getLayers=Yr.prototype.Qc,Yr.prototype.setLayers=Yr.prototype.gh,t("ol.layer.Heatmap",Gf),Gf.prototype.getBlur=Gf.prototype.tg,Gf.prototype.getGradient=Gf.prototype.Ag,Gf.prototype.getRadius=Gf.prototype.hh,Gf.prototype.setBlur=Gf.prototype.Th,Gf.prototype.setGradient=Gf.prototype.$h,Gf.prototype.setRadius=Gf.prototype.ih,t("ol.layer.Image",Tn),Tn.prototype.getSource=Tn.prototype.ga,t("ol.layer.Layer",on),on.prototype.getSource=on.prototype.ga,on.prototype.setMap=on.prototype.setMap,on.prototype.setSource=on.prototype.Ec,t("ol.layer.Tile",En),En.prototype.getPreload=En.prototype.f,En.prototype.getSource=En.prototype.ga,En.prototype.setPreload=En.prototype.l,En.prototype.getUseInterimTilesOnError=En.prototype.c,En.prototype.setUseInterimTilesOnError=En.prototype.B,t("ol.layer.Vector",Hn),Hn.prototype.getSource=Hn.prototype.ga,Hn.prototype.getStyle=Hn.prototype.G,Hn.prototype.getStyleFunction=Hn.prototype.S,Hn.prototype.setStyle=Hn.prototype.l,t("ol.layer.VectorTile",Xn),Xn.prototype.getPreload=Xn.prototype.f,Xn.prototype.getUseInterimTilesOnError=Xn.prototype.c,Xn.prototype.setPreload=Xn.prototype.P,Xn.prototype.setUseInterimTilesOnError=Xn.prototype.W,t("ol.interaction.DoubleClickZoom",tr),t("ol.interaction.DoubleClickZoom.handleEvent",er),t("ol.interaction.DragAndDrop",gc),t("ol.interaction.DragAndDrop.handleEvent",zt),bc.prototype.features=bc.prototype.features,bc.prototype.file=bc.prototype.file,bc.prototype.projection=bc.prototype.projection,t("ol.interaction.DragBox",Mr),Mr.prototype.getGeometry=Mr.prototype.V,Nr.prototype.coordinate=Nr.prototype.coordinate,Nr.prototype.mapBrowserEvent=Nr.prototype.mapBrowserEvent,t("ol.interaction.DragPan",yr),t("ol.interaction.DragRotate",mr),t("ol.interaction.DragRotateAndZoom",wc),t("ol.interaction.DragZoom",Lr),t("ol.interaction.Draw",Uc),t("ol.interaction.Draw.handleEvent",Hc),Uc.prototype.removeLastPoint=Uc.prototype.Fo,Uc.prototype.finishDrawing=Uc.prototype.ld,Uc.prototype.extend=Uc.prototype.fm,t("ol.interaction.Draw.createRegularPolygon",function(t,e){return function(o,i){var r=o[0],n=o[1],s=Math.sqrt(ct(r,n)),p=i?i:Ze(new sc(r),t);return Je(p,r,s,e?e:Math.atan((n[1]-r[1])/(n[0]-r[0]))),p}}),t("ol.interaction.Draw.createBox",function(){return function(t,e){var o=dt(t),i=e||new ze(null);return i.ma([[kt(o),It(o),Gt(o),Ut(o),kt(o)]]),i}}),Jc.prototype.feature=Jc.prototype.feature,t("ol.interaction.Extent",_c),_c.prototype.getExtent=_c.prototype.D,_c.prototype.setExtent=_c.prototype.i,lf.prototype.extent_=lf.prototype.b,t("ol.interaction.defaults",zr),t("ol.interaction.Interaction",Zi),Zi.prototype.getActive=Zi.prototype.f,Zi.prototype.getMap=Zi.prototype.c,Zi.prototype.setActive=Zi.prototype.Ba,t("ol.interaction.KeyboardPan",Rr),t("ol.interaction.KeyboardPan.handleEvent",kr),t("ol.interaction.KeyboardZoom",Ir),t("ol.interaction.KeyboardZoom.handleEvent",Dr),t("ol.interaction.Modify",uf),t("ol.interaction.Modify.handleEvent",wf),uf.prototype.removePoint=uf.prototype.Qh,Ef.prototype.features=Ef.prototype.features,Ef.prototype.mapBrowserEvent=Ef.prototype.mapBrowserEvent,t("ol.interaction.MouseWheelZoom",Or),t("ol.interaction.MouseWheelZoom.handleEvent",Fr),Or.prototype.setMouseAnchor=Or.prototype.B,t("ol.interaction.PinchRotate",Br),t("ol.interaction.PinchZoom",Xr),t("ol.interaction.Pointer",ur),t("ol.interaction.Pointer.handleEvent",fr),t("ol.interaction.Select",Mf),Mf.prototype.getFeatures=Mf.prototype.pm,Mf.prototype.getLayer=Mf.prototype.qm,t("ol.interaction.Select.handleEvent",Cf),Mf.prototype.setMap=Mf.prototype.setMap,Af.prototype.selected=Af.prototype.selected,Af.prototype.deselected=Af.prototype.deselected,Af.prototype.mapBrowserEvent=Af.prototype.mapBrowserEvent,t("ol.interaction.Snap",jf),jf.prototype.addFeature=jf.prototype.cb,jf.prototype.removeFeature=jf.prototype.mb,t("ol.interaction.Translate",kf),Uf.prototype.features=Uf.prototype.features,Uf.prototype.coordinate=Uf.prototype.coordinate,t("ol.geom.Circle",sc),sc.prototype.clone=sc.prototype.clone,sc.prototype.getCenter=sc.prototype.td,sc.prototype.getRadius=sc.prototype.vf,sc.prototype.getType=sc.prototype.X,sc.prototype.intersectsExtent=sc.prototype.Na,sc.prototype.setCenter=sc.prototype.Yl,sc.prototype.setCenterAndRadius=sc.prototype.Sf,sc.prototype.setRadius=sc.prototype.Zl,sc.prototype.transform=sc.prototype.lb,t("ol.geom.Geometry",ce),ce.prototype.getClosestPoint=ce.prototype.xb,ce.prototype.intersectsCoordinate=ce.prototype.jb,ce.prototype.getExtent=ce.prototype.D,ce.prototype.rotate=ce.prototype.rotate,ce.prototype.scale=ce.prototype.scale,ce.prototype.simplify=ce.prototype.Db,ce.prototype.transform=ce.prototype.lb,t("ol.geom.GeometryCollection",Uh),Uh.prototype.clone=Uh.prototype.clone,Uh.prototype.getGeometries=Uh.prototype.cf,Uh.prototype.getType=Uh.prototype.X,Uh.prototype.intersectsExtent=Uh.prototype.Na,Uh.prototype.setGeometries=Uh.prototype.Zh,Uh.prototype.applyTransform=Uh.prototype.oc,Uh.prototype.translate=Uh.prototype.Pc,t("ol.geom.LinearRing",Re),Re.prototype.clone=Re.prototype.clone,Re.prototype.getArea=Re.prototype.bm,Re.prototype.getCoordinates=Re.prototype.Y,Re.prototype.getType=Re.prototype.X,Re.prototype.setCoordinates=Re.prototype.ma,t("ol.geom.LineString",th),th.prototype.appendCoordinate=th.prototype.kj,th.prototype.clone=th.prototype.clone,th.prototype.forEachSegment=th.prototype.zj,th.prototype.getCoordinateAtM=th.prototype.$l,th.prototype.getCoordinates=th.prototype.Y,th.prototype.getCoordinateAt=th.prototype.vg,th.prototype.getLength=th.prototype.am,th.prototype.getType=th.prototype.X,th.prototype.intersectsExtent=th.prototype.Na,th.prototype.setCoordinates=th.prototype.ma,t("ol.geom.MultiLineString",oh),oh.prototype.appendLineString=oh.prototype.lj,oh.prototype.clone=oh.prototype.clone,oh.prototype.getCoordinateAtM=oh.prototype.cm,oh.prototype.getCoordinates=oh.prototype.Y,oh.prototype.getLineString=oh.prototype.Uj,oh.prototype.getLineStrings=oh.prototype.od,oh.prototype.getType=oh.prototype.X,oh.prototype.intersectsExtent=oh.prototype.Na,oh.prototype.setCoordinates=oh.prototype.ma,t("ol.geom.MultiPoint",nh),nh.prototype.appendPoint=nh.prototype.nj,nh.prototype.clone=nh.prototype.clone,nh.prototype.getCoordinates=nh.prototype.Y,nh.prototype.getPoint=nh.prototype.ek,nh.prototype.getPoints=nh.prototype.je,nh.prototype.getType=nh.prototype.X,nh.prototype.intersectsExtent=nh.prototype.Na,nh.prototype.setCoordinates=nh.prototype.ma,t("ol.geom.MultiPolygon",sh),sh.prototype.appendPolygon=sh.prototype.oj,sh.prototype.clone=sh.prototype.clone,sh.prototype.getArea=sh.prototype.dm,sh.prototype.getCoordinates=sh.prototype.Y,sh.prototype.getInteriorPoints=sh.prototype.Rj,sh.prototype.getPolygon=sh.prototype.gk,sh.prototype.getPolygons=sh.prototype.Wd,sh.prototype.getType=sh.prototype.X,sh.prototype.intersectsExtent=sh.prototype.Na,sh.prototype.setCoordinates=sh.prototype.ma,t("ol.geom.Point",Ie),Ie.prototype.clone=Ie.prototype.clone,Ie.prototype.getCoordinates=Ie.prototype.Y,Ie.prototype.getType=Ie.prototype.X,Ie.prototype.intersectsExtent=Ie.prototype.Na,Ie.prototype.setCoordinates=Ie.prototype.ma,t("ol.geom.Polygon",ze),ze.prototype.appendLinearRing=ze.prototype.mj,ze.prototype.clone=ze.prototype.clone,ze.prototype.getArea=ze.prototype.em,ze.prototype.getCoordinates=ze.prototype.Y,ze.prototype.getInteriorPoint=ze.prototype.Qj,ze.prototype.getLinearRingCount=ze.prototype.Vj,ze.prototype.getLinearRing=ze.prototype.Bg,ze.prototype.getLinearRings=ze.prototype.Vd,ze.prototype.getType=ze.prototype.X,ze.prototype.intersectsExtent=ze.prototype.Na,ze.prototype.setCoordinates=ze.prototype.ma,t("ol.geom.Polygon.circular",Ve),t("ol.geom.Polygon.fromExtent",Ye),t("ol.geom.Polygon.fromCircle",Ze),t("ol.geom.SimpleGeometry",ye),ye.prototype.getFirstCoordinate=ye.prototype.Lb,ye.prototype.getLastCoordinate=ye.prototype.Mb,ye.prototype.getLayout=ye.prototype.Nb,ye.prototype.applyTransform=ye.prototype.oc,ye.prototype.translate=ye.prototype.Pc,t("ol.format.EsriJSON",uh),uh.prototype.readFeature=uh.prototype.Ub,uh.prototype.readFeatures=uh.prototype.Ha,uh.prototype.readGeometry=uh.prototype.Wc,uh.prototype.readProjection=uh.prototype.Sa,uh.prototype.writeGeometry=uh.prototype.$c,uh.prototype.writeGeometryObject=uh.prototype.He,uh.prototype.writeFeature=uh.prototype.Fd,uh.prototype.writeFeatureObject=uh.prototype.Zc,uh.prototype.writeFeatures=uh.prototype.$b,uh.prototype.writeFeaturesObject=uh.prototype.Ge,t("ol.format.Feature",Ka),t("ol.format.GeoJSON",Wh),Wh.prototype.readFeature=Wh.prototype.Ub,Wh.prototype.readFeatures=Wh.prototype.Ha,Wh.prototype.readGeometry=Wh.prototype.Wc,Wh.prototype.readProjection=Wh.prototype.Sa,Wh.prototype.writeFeature=Wh.prototype.Fd,Wh.prototype.writeFeatureObject=Wh.prototype.Zc,Wh.prototype.writeFeatures=Wh.prototype.$b,Wh.prototype.writeFeaturesObject=Wh.prototype.Ge,Wh.prototype.writeGeometry=Wh.prototype.$c,Wh.prototype.writeGeometryObject=Wh.prototype.He,t("ol.format.GML",al),al.prototype.writeFeatures=al.prototype.$b,al.prototype.writeFeaturesNode=al.prototype.a,t("ol.format.GML2",ll),t("ol.format.GML3",al),al.prototype.writeGeometryNode=al.prototype.T,al.prototype.writeFeatures=al.prototype.$b,al.prototype.writeFeaturesNode=al.prototype.a,Yh.prototype.readFeatures=Yh.prototype.Ha,t("ol.format.GPX",ul),ul.prototype.readFeature=ul.prototype.Ub,ul.prototype.readFeatures=ul.prototype.Ha,ul.prototype.readProjection=ul.prototype.Sa,ul.prototype.writeFeatures=ul.prototype.$b,ul.prototype.writeFeaturesNode=ul.prototype.a,t("ol.format.IGC",El),El.prototype.readFeature=El.prototype.Ub,El.prototype.readFeatures=El.prototype.Ha,El.prototype.readProjection=El.prototype.Sa,t("ol.format.KML",jl),jl.prototype.readFeature=jl.prototype.Ub,jl.prototype.readFeatures=jl.prototype.Ha,jl.prototype.readName=jl.prototype.uo,jl.prototype.readNetworkLinks=jl.prototype.vo,jl.prototype.readProjection=jl.prototype.Sa,jl.prototype.writeFeatures=jl.prototype.$b,jl.prototype.writeFeaturesNode=jl.prototype.a,t("ol.format.MVT",au),au.prototype.readFeatures=au.prototype.Ha,au.prototype.readProjection=au.prototype.Sa,au.prototype.setLayers=au.prototype.c,t("ol.format.OSMXML",lu),lu.prototype.readFeatures=lu.prototype.Ha,lu.prototype.readProjection=lu.prototype.Sa,t("ol.format.Polyline",gu),t("ol.format.Polyline.encodeDeltas",vu),t("ol.format.Polyline.decodeDeltas",mu),t("ol.format.Polyline.encodeFloats",bu),t("ol.format.Polyline.decodeFloats",wu),gu.prototype.readFeature=gu.prototype.Ub,gu.prototype.readFeatures=gu.prototype.Ha,gu.prototype.readGeometry=gu.prototype.Wc,gu.prototype.readProjection=gu.prototype.Sa,gu.prototype.writeGeometry=gu.prototype.$c,t("ol.format.TopoJSON",xu),xu.prototype.readFeatures=xu.prototype.Ha,xu.prototype.readProjection=xu.prototype.Sa,t("ol.format.WFS",Cu),Cu.prototype.readFeatures=Cu.prototype.Ha,Cu.prototype.readTransactionResponse=Cu.prototype.o,Cu.prototype.readFeatureCollectionMetadata=Cu.prototype.l,Cu.prototype.writeGetFeature=Cu.prototype.s,Cu.prototype.writeTransaction=Cu.prototype.C,Cu.prototype.readProjection=Cu.prototype.Sa,t("ol.format.WKT",Ou),Ou.prototype.readFeature=Ou.prototype.Ub,Ou.prototype.readFeatures=Ou.prototype.Ha,Ou.prototype.readGeometry=Ou.prototype.Wc,Ou.prototype.writeFeature=Ou.prototype.Fd,Ou.prototype.writeFeatures=Ou.prototype.$b,Ou.prototype.writeGeometry=Ou.prototype.$c,t("ol.format.WMSCapabilities",Ju),Ju.prototype.read=Ju.prototype.read,t("ol.format.WMSGetFeatureInfo",oc),oc.prototype.readFeatures=oc.prototype.Ha,t("ol.format.WMTSCapabilities",ic),ic.prototype.read=ic.prototype.read,t("ol.format.filter.And",bh),t("ol.format.filter.Bbox",wh),t("ol.format.filter.Comparison",xh),t("ol.format.filter.ComparisonBinary",Sh),t("ol.format.filter.EqualTo",Th),t("ol.format.filter.Filter",gh),t("ol.format.filter.GreaterThan",Eh),t("ol.format.filter.GreaterThanOrEqualTo",Mh),t("ol.format.filter.and",Fh),t("ol.format.filter.or",function(t,e){return new Dh(t,e)}),t("ol.format.filter.not",function(t){return new kh(t)}),t("ol.format.filter.bbox",Bh),t("ol.format.filter.intersects",function(t,e,o){return new Ph(t,e,o)}),t("ol.format.filter.within",function(t,e,o){return new Oh(t,e,o)}),t("ol.format.filter.equalTo",function(t,e,o){return new Th(t,e,o)}),t("ol.format.filter.notEqualTo",function(t,e,o){return new Ih(t,e,o)}),t("ol.format.filter.lessThan",function(t,e){return new Lh(t,e)}),t("ol.format.filter.lessThanOrEqualTo",function(t,e){return new Rh(t,e)}),t("ol.format.filter.greaterThan",function(t,e){return new Eh(t,e)}),t("ol.format.filter.greaterThanOrEqualTo",function(t,e){return new Mh(t,e)}),t("ol.format.filter.isNull",function(t){return new Nh(t)}),t("ol.format.filter.between",function(t,e,o){return new Ah(t,e,o)}),t("ol.format.filter.like",function(t,e,o,i,r,n){return new jh(t,e,o,i,r,n)}),t("ol.format.filter.Intersects",Ph),t("ol.format.filter.IsBetween",Ah),t("ol.format.filter.IsLike",jh),t("ol.format.filter.IsNull",Nh),t("ol.format.filter.LessThan",Lh),t("ol.format.filter.LessThanOrEqualTo",Rh),t("ol.format.filter.Not",kh),t("ol.format.filter.NotEqualTo",Ih),t("ol.format.filter.Or",Dh),t("ol.format.filter.Spatial",Ch),t("ol.format.filter.Within",Oh),t("ol.events.condition.altKeyOnly",function(t){return t=t.originalEvent,t.altKey&&!(t.metaKey||t.ctrlKey)&&!t.shiftKey}),t("ol.events.condition.altShiftKeysOnly",or),t("ol.events.condition.always",zt),t("ol.events.condition.click",function(t){return t.type==tg}),t("ol.events.condition.never",qt),t("ol.events.condition.pointerMove",rr),t("ol.events.condition.singleClick",nr),t("ol.events.condition.doubleClick",function(t){return t.type==eg}),t("ol.events.condition.noModifierKeys",sr),t("ol.events.condition.platformModifierKeyOnly",function(t){return t=t.originalEvent,!t.altKey&&(Bd?t.metaKey:t.ctrlKey)&&!t.shiftKey}),t("ol.events.condition.shiftKeyOnly",pr),t("ol.events.condition.targetNotEditable",ar),t("ol.events.condition.mouseOnly",hr),t("ol.events.condition.primaryAction",lr),L.prototype.type=L.prototype.type,L.prototype.target=L.prototype.target,L.prototype.preventDefault=L.prototype.preventDefault,L.prototype.stopPropagation=L.prototype.stopPropagation,t("ol.control.Attribution",Vo),t("ol.control.Attribution.render",Yo),Vo.prototype.getCollapsible=Vo.prototype.Ol,Vo.prototype.setCollapsible=Vo.prototype.Rl,Vo.prototype.setCollapsed=Vo.prototype.Ql,Vo.prototype.getCollapsed=Vo.prototype.Nl,t("ol.control.Control",qo),qo.prototype.getMap=qo.prototype.i,qo.prototype.setMap=qo.prototype.setMap,qo.prototype.setTarget=qo.prototype.c,t("ol.control.FullScreen",Jo),t("ol.control.defaults",ri),t("ol.control.MousePosition",ni),t("ol.control.MousePosition.render",si),ni.prototype.getCoordinateFormat=ni.prototype.wg,ni.prototype.getProjection=ni.prototype.Zg,ni.prototype.setCoordinateFormat=ni.prototype.Uh,ni.prototype.setProjection=ni.prototype.$g,t("ol.control.OverviewMap",sa),t("ol.control.OverviewMap.render",pa),sa.prototype.getCollapsible=sa.prototype.Ul,sa.prototype.setCollapsible=sa.prototype.Xl,sa.prototype.setCollapsed=sa.prototype.Wl,sa.prototype.getCollapsed=sa.prototype.Tl,sa.prototype.getOverviewMap=sa.prototype.ck,t("ol.control.Rotate",ei),t("ol.control.Rotate.render",oi),t("ol.control.ScaleLine",ua),ua.prototype.getUnits=ua.prototype.yb,t("ol.control.ScaleLine.render",ca),ua.prototype.setUnits=ua.prototype.G,t("ol.control.Zoom",ii),t("ol.control.ZoomSlider",ya),t("ol.control.ZoomSlider.render",da),t("ol.control.ZoomToExtent",ma),B.prototype.changed=B.prototype.v,B.prototype.dispatchEvent=B.prototype.b,B.prototype.getRevision=B.prototype.K,B.prototype.on=B.prototype.I,B.prototype.once=B.prototype.L,B.prototype.un=B.prototype.J,B.prototype.unByKey=B.prototype.M,Oo.prototype.get=Oo.prototype.get,Oo.prototype.getKeys=Oo.prototype.O,Oo.prototype.getProperties=Oo.prototype.N,Oo.prototype.set=Oo.prototype.set,Oo.prototype.setProperties=Oo.prototype.H,Oo.prototype.unset=Oo.prototype.R,Oo.prototype.changed=Oo.prototype.v,Oo.prototype.dispatchEvent=Oo.prototype.b,Oo.prototype.getRevision=Oo.prototype.K,Oo.prototype.on=Oo.prototype.I,Oo.prototype.once=Oo.prototype.L,Oo.prototype.un=Oo.prototype.J,Oo.prototype.unByKey=Oo.prototype.M,Bo.prototype.type=Bo.prototype.type,Bo.prototype.target=Bo.prototype.target,Bo.prototype.preventDefault=Bo.prototype.preventDefault,Bo.prototype.stopPropagation=Bo.prototype.stopPropagation,ba.prototype.get=ba.prototype.get,ba.prototype.getKeys=ba.prototype.O,ba.prototype.getProperties=ba.prototype.N,ba.prototype.set=ba.prototype.set,ba.prototype.setProperties=ba.prototype.H,ba.prototype.unset=ba.prototype.R,ba.prototype.changed=ba.prototype.v,ba.prototype.dispatchEvent=ba.prototype.b,ba.prototype.getRevision=ba.prototype.K,ba.prototype.on=ba.prototype.I,ba.prototype.once=ba.prototype.L,ba.prototype.un=ba.prototype.J,ba.prototype.unByKey=ba.prototype.M,wa.prototype.get=wa.prototype.get,wa.prototype.getKeys=wa.prototype.O,wa.prototype.getProperties=wa.prototype.N,wa.prototype.set=wa.prototype.set,wa.prototype.setProperties=wa.prototype.H,wa.prototype.unset=wa.prototype.R,wa.prototype.changed=wa.prototype.v,wa.prototype.dispatchEvent=wa.prototype.b,wa.prototype.getRevision=wa.prototype.K,wa.prototype.on=wa.prototype.I,wa.prototype.once=wa.prototype.L,wa.prototype.un=wa.prototype.J,wa.prototype.unByKey=wa.prototype.M,nc.prototype.get=nc.prototype.get,nc.prototype.getKeys=nc.prototype.O,nc.prototype.getProperties=nc.prototype.N,nc.prototype.set=nc.prototype.set,nc.prototype.setProperties=nc.prototype.H,nc.prototype.unset=nc.prototype.R,nc.prototype.changed=nc.prototype.v,nc.prototype.dispatchEvent=nc.prototype.b,nc.prototype.getRevision=nc.prototype.K,nc.prototype.on=nc.prototype.I,nc.prototype.once=nc.prototype.L,nc.prototype.un=nc.prototype.J,nc.prototype.unByKey=nc.prototype.M,yc.prototype.getTileCoord=yc.prototype.i,ta.prototype.get=ta.prototype.get,ta.prototype.getKeys=ta.prototype.O,ta.prototype.getProperties=ta.prototype.N,ta.prototype.set=ta.prototype.set,ta.prototype.setProperties=ta.prototype.H,ta.prototype.unset=ta.prototype.R,ta.prototype.changed=ta.prototype.v,ta.prototype.dispatchEvent=ta.prototype.b,ta.prototype.getRevision=ta.prototype.K,ta.prototype.on=ta.prototype.I,ta.prototype.once=ta.prototype.L,ta.prototype.un=ta.prototype.J,ta.prototype.unByKey=ta.prototype.M,zo.prototype.type=zo.prototype.type,zo.prototype.target=zo.prototype.target,zo.prototype.preventDefault=zo.prototype.preventDefault,zo.prototype.stopPropagation=zo.prototype.stopPropagation,ki.prototype.map=ki.prototype.map,ki.prototype.frameState=ki.prototype.frameState,ki.prototype.type=ki.prototype.type,ki.prototype.target=ki.prototype.target,ki.prototype.preventDefault=ki.prototype.preventDefault,ki.prototype.stopPropagation=ki.prototype.stopPropagation,Ii.prototype.originalEvent=Ii.prototype.originalEvent,Ii.prototype.pixel=Ii.prototype.pixel,Ii.prototype.coordinate=Ii.prototype.coordinate,Ii.prototype.dragging=Ii.prototype.dragging,Ii.prototype.preventDefault=Ii.prototype.preventDefault,Ii.prototype.stopPropagation=Ii.prototype.stopPropagation,Ii.prototype.map=Ii.prototype.map,Ii.prototype.frameState=Ii.prototype.frameState,Ii.prototype.type=Ii.prototype.type,Ii.prototype.target=Ii.prototype.target,F.prototype.type=F.prototype.type,F.prototype.target=F.prototype.target,F.prototype.preventDefault=F.prototype.preventDefault,F.prototype.stopPropagation=F.prototype.stopPropagation,oa.prototype.get=oa.prototype.get,oa.prototype.getKeys=oa.prototype.O,oa.prototype.getProperties=oa.prototype.N,oa.prototype.set=oa.prototype.set,oa.prototype.setProperties=oa.prototype.H,oa.prototype.unset=oa.prototype.R,oa.prototype.changed=oa.prototype.v,oa.prototype.dispatchEvent=oa.prototype.b,oa.prototype.getRevision=oa.prototype.K,oa.prototype.on=oa.prototype.I,oa.prototype.once=oa.prototype.L,oa.prototype.un=oa.prototype.J,oa.prototype.unByKey=oa.prototype.M,Xy.prototype.getTileCoord=Xy.prototype.i,_e.prototype.get=_e.prototype.get,_e.prototype.getKeys=_e.prototype.O,_e.prototype.getProperties=_e.prototype.N,_e.prototype.set=_e.prototype.set,_e.prototype.setProperties=_e.prototype.H,_e.prototype.unset=_e.prototype.R,_e.prototype.changed=_e.prototype.v,_e.prototype.dispatchEvent=_e.prototype.b,_e.prototype.getRevision=_e.prototype.K,_e.prototype.on=_e.prototype.I,_e.prototype.once=_e.prototype.L,_e.prototype.un=_e.prototype.J,_e.prototype.unByKey=_e.prototype.M,Ky.prototype.forEachTileCoord=Ky.prototype.sg,Ky.prototype.getMaxZoom=Ky.prototype.Cg,Ky.prototype.getMinZoom=Ky.prototype.Dg,Ky.prototype.getOrigin=Ky.prototype.Tc,Ky.prototype.getResolution=Ky.prototype.Ga,Ky.prototype.getResolutions=Ky.prototype.Bh,Ky.prototype.getTileCoordExtent=Ky.prototype.Ia,Ky.prototype.getTileCoordForCoordAndResolution=Ky.prototype.Yd,Ky.prototype.getTileCoordForCoordAndZ=Ky.prototype.Zd,Ky.prototype.getTileSize=Ky.prototype.Va,Ky.prototype.getZForResolution=Ky.prototype.wc,Nn.prototype.getOpacity=Nn.prototype.qe,Nn.prototype.getRotateWithView=Nn.prototype.re,Nn.prototype.getRotation=Nn.prototype.se,Nn.prototype.getScale=Nn.prototype.te,Nn.prototype.getSnapToPixel=Nn.prototype.Xd,Nn.prototype.setOpacity=Nn.prototype.Rc,Nn.prototype.setRotation=Nn.prototype.ue,Nn.prototype.setScale=Nn.prototype.Sc,Pl.prototype.getOpacity=Pl.prototype.qe,Pl.prototype.getRotateWithView=Pl.prototype.re,Pl.prototype.getRotation=Pl.prototype.se,Pl.prototype.getScale=Pl.prototype.te,Pl.prototype.getSnapToPixel=Pl.prototype.Xd,Pl.prototype.setOpacity=Pl.prototype.Rc,Pl.prototype.setRotation=Pl.prototype.ue,Pl.prototype.setScale=Pl.prototype.Sc,ed.prototype.getOpacity=ed.prototype.qe,ed.prototype.getRotateWithView=ed.prototype.re,ed.prototype.getRotation=ed.prototype.se,ed.prototype.getScale=ed.prototype.te,ed.prototype.getSnapToPixel=ed.prototype.Xd,ed.prototype.setOpacity=ed.prototype.Rc,ed.prototype.setRotation=ed.prototype.ue,ed.prototype.setScale=ed.prototype.Sc,Hs.prototype.get=Hs.prototype.get,Hs.prototype.getKeys=Hs.prototype.O,Hs.prototype.getProperties=Hs.prototype.N,Hs.prototype.set=Hs.prototype.set,Hs.prototype.setProperties=Hs.prototype.H,Hs.prototype.unset=Hs.prototype.R,Hs.prototype.changed=Hs.prototype.v,Hs.prototype.dispatchEvent=Hs.prototype.b,Hs.prototype.getRevision=Hs.prototype.K,Hs.prototype.on=Hs.prototype.I,Hs.prototype.once=Hs.prototype.L,Hs.prototype.un=Hs.prototype.J,Hs.prototype.unByKey=Hs.prototype.M,Zf.prototype.getAttributions=Zf.prototype.va,Zf.prototype.getLogo=Zf.prototype.ua,Zf.prototype.getProjection=Zf.prototype.wa,Zf.prototype.getState=Zf.prototype.U,Zf.prototype.refresh=Zf.prototype.ta,Zf.prototype.setAttributions=Zf.prototype.qa,Zf.prototype.get=Zf.prototype.get,Zf.prototype.getKeys=Zf.prototype.O,Zf.prototype.getProperties=Zf.prototype.N,Zf.prototype.set=Zf.prototype.set,Zf.prototype.setProperties=Zf.prototype.H,Zf.prototype.unset=Zf.prototype.R,Zf.prototype.changed=Zf.prototype.v,Zf.prototype.dispatchEvent=Zf.prototype.b,Zf.prototype.getRevision=Zf.prototype.K,Zf.prototype.on=Zf.prototype.I,Zf.prototype.once=Zf.prototype.L,Zf.prototype.un=Zf.prototype.J,Zf.prototype.unByKey=Zf.prototype.M,ey.prototype.getTileGrid=ey.prototype.Ra,ey.prototype.refresh=ey.prototype.ta,ey.prototype.getAttributions=ey.prototype.va,ey.prototype.getLogo=ey.prototype.ua,ey.prototype.getProjection=ey.prototype.wa,ey.prototype.getState=ey.prototype.U,ey.prototype.setAttributions=ey.prototype.qa,
-ey.prototype.get=ey.prototype.get,ey.prototype.getKeys=ey.prototype.O,ey.prototype.getProperties=ey.prototype.N,ey.prototype.set=ey.prototype.set,ey.prototype.setProperties=ey.prototype.H,ey.prototype.unset=ey.prototype.R,ey.prototype.changed=ey.prototype.v,ey.prototype.dispatchEvent=ey.prototype.b,ey.prototype.getRevision=ey.prototype.K,ey.prototype.on=ey.prototype.I,ey.prototype.once=ey.prototype.L,ey.prototype.un=ey.prototype.J,ey.prototype.unByKey=ey.prototype.M,oy.prototype.getTileLoadFunction=oy.prototype.fb,oy.prototype.getTileUrlFunction=oy.prototype.hb,oy.prototype.getUrls=oy.prototype.ib,oy.prototype.setTileLoadFunction=oy.prototype.nb,oy.prototype.setTileUrlFunction=oy.prototype.Ta,oy.prototype.setUrl=oy.prototype.Ya,oy.prototype.setUrls=oy.prototype.Ua,oy.prototype.getTileGrid=oy.prototype.Ra,oy.prototype.refresh=oy.prototype.ta,oy.prototype.getAttributions=oy.prototype.va,oy.prototype.getLogo=oy.prototype.ua,oy.prototype.getProjection=oy.prototype.wa,oy.prototype.getState=oy.prototype.U,oy.prototype.setAttributions=oy.prototype.qa,oy.prototype.get=oy.prototype.get,oy.prototype.getKeys=oy.prototype.O,oy.prototype.getProperties=oy.prototype.N,oy.prototype.set=oy.prototype.set,oy.prototype.setProperties=oy.prototype.H,oy.prototype.unset=oy.prototype.R,oy.prototype.changed=oy.prototype.v,oy.prototype.dispatchEvent=oy.prototype.b,oy.prototype.getRevision=oy.prototype.K,oy.prototype.on=oy.prototype.I,oy.prototype.once=oy.prototype.L,oy.prototype.un=oy.prototype.J,oy.prototype.unByKey=oy.prototype.M,sy.prototype.setRenderReprojectionEdges=sy.prototype.Bb,sy.prototype.setTileGridForProjection=sy.prototype.Cb,sy.prototype.getTileLoadFunction=sy.prototype.fb,sy.prototype.getTileUrlFunction=sy.prototype.hb,sy.prototype.getUrls=sy.prototype.ib,sy.prototype.setTileLoadFunction=sy.prototype.nb,sy.prototype.setTileUrlFunction=sy.prototype.Ta,sy.prototype.setUrl=sy.prototype.Ya,sy.prototype.setUrls=sy.prototype.Ua,sy.prototype.getTileGrid=sy.prototype.Ra,sy.prototype.refresh=sy.prototype.ta,sy.prototype.getAttributions=sy.prototype.va,sy.prototype.getLogo=sy.prototype.ua,sy.prototype.getProjection=sy.prototype.wa,sy.prototype.getState=sy.prototype.U,sy.prototype.setAttributions=sy.prototype.qa,sy.prototype.get=sy.prototype.get,sy.prototype.getKeys=sy.prototype.O,sy.prototype.getProperties=sy.prototype.N,sy.prototype.set=sy.prototype.set,sy.prototype.setProperties=sy.prototype.H,sy.prototype.unset=sy.prototype.R,sy.prototype.changed=sy.prototype.v,sy.prototype.dispatchEvent=sy.prototype.b,sy.prototype.getRevision=sy.prototype.K,sy.prototype.on=sy.prototype.I,sy.prototype.once=sy.prototype.L,sy.prototype.un=sy.prototype.J,sy.prototype.unByKey=sy.prototype.M,py.prototype.setRenderReprojectionEdges=py.prototype.Bb,py.prototype.setTileGridForProjection=py.prototype.Cb,py.prototype.getTileLoadFunction=py.prototype.fb,py.prototype.getTileUrlFunction=py.prototype.hb,py.prototype.getUrls=py.prototype.ib,py.prototype.setTileLoadFunction=py.prototype.nb,py.prototype.setTileUrlFunction=py.prototype.Ta,py.prototype.setUrl=py.prototype.Ya,py.prototype.setUrls=py.prototype.Ua,py.prototype.getTileGrid=py.prototype.Ra,py.prototype.refresh=py.prototype.ta,py.prototype.getAttributions=py.prototype.va,py.prototype.getLogo=py.prototype.ua,py.prototype.getProjection=py.prototype.wa,py.prototype.getState=py.prototype.U,py.prototype.setAttributions=py.prototype.qa,py.prototype.get=py.prototype.get,py.prototype.getKeys=py.prototype.O,py.prototype.getProperties=py.prototype.N,py.prototype.set=py.prototype.set,py.prototype.setProperties=py.prototype.H,py.prototype.unset=py.prototype.R,py.prototype.changed=py.prototype.v,py.prototype.dispatchEvent=py.prototype.b,py.prototype.getRevision=py.prototype.K,py.prototype.on=py.prototype.I,py.prototype.once=py.prototype.L,py.prototype.un=py.prototype.J,py.prototype.unByKey=py.prototype.M,ay.prototype.setRenderReprojectionEdges=ay.prototype.Bb,ay.prototype.setTileGridForProjection=ay.prototype.Cb,ay.prototype.getTileLoadFunction=ay.prototype.fb,ay.prototype.getTileUrlFunction=ay.prototype.hb,ay.prototype.getUrls=ay.prototype.ib,ay.prototype.setTileLoadFunction=ay.prototype.nb,ay.prototype.setTileUrlFunction=ay.prototype.Ta,ay.prototype.setUrl=ay.prototype.Ya,ay.prototype.setUrls=ay.prototype.Ua,ay.prototype.getTileGrid=ay.prototype.Ra,ay.prototype.refresh=ay.prototype.ta,ay.prototype.getAttributions=ay.prototype.va,ay.prototype.getLogo=ay.prototype.ua,ay.prototype.getProjection=ay.prototype.wa,ay.prototype.getState=ay.prototype.U,ay.prototype.setAttributions=ay.prototype.qa,ay.prototype.get=ay.prototype.get,ay.prototype.getKeys=ay.prototype.O,ay.prototype.getProperties=ay.prototype.N,ay.prototype.set=ay.prototype.set,ay.prototype.setProperties=ay.prototype.H,ay.prototype.unset=ay.prototype.R,ay.prototype.changed=ay.prototype.v,ay.prototype.dispatchEvent=ay.prototype.b,ay.prototype.getRevision=ay.prototype.K,ay.prototype.on=ay.prototype.I,ay.prototype.once=ay.prototype.L,ay.prototype.un=ay.prototype.J,ay.prototype.unByKey=ay.prototype.M,Lc.prototype.getAttributions=Lc.prototype.va,Lc.prototype.getLogo=Lc.prototype.ua,Lc.prototype.getProjection=Lc.prototype.wa,Lc.prototype.getState=Lc.prototype.U,Lc.prototype.refresh=Lc.prototype.ta,Lc.prototype.setAttributions=Lc.prototype.qa,Lc.prototype.get=Lc.prototype.get,Lc.prototype.getKeys=Lc.prototype.O,Lc.prototype.getProperties=Lc.prototype.N,Lc.prototype.set=Lc.prototype.set,Lc.prototype.setProperties=Lc.prototype.H,Lc.prototype.unset=Lc.prototype.R,Lc.prototype.changed=Lc.prototype.v,Lc.prototype.dispatchEvent=Lc.prototype.b,Lc.prototype.getRevision=Lc.prototype.K,Lc.prototype.on=Lc.prototype.I,Lc.prototype.once=Lc.prototype.L,Lc.prototype.un=Lc.prototype.J,Lc.prototype.unByKey=Lc.prototype.M,uy.prototype.addFeature=uy.prototype.cb,uy.prototype.addFeatures=uy.prototype.Ic,uy.prototype.clear=uy.prototype.clear,uy.prototype.forEachFeature=uy.prototype.qg,uy.prototype.forEachFeatureInExtent=uy.prototype.Kb,uy.prototype.forEachFeatureIntersectingExtent=uy.prototype.rg,uy.prototype.getFeaturesCollection=uy.prototype.zg,uy.prototype.getFeatures=uy.prototype.oe,uy.prototype.getFeaturesAtCoordinate=uy.prototype.yg,uy.prototype.getFeaturesInExtent=uy.prototype.bf,uy.prototype.getClosestFeatureToCoordinate=uy.prototype.ug,uy.prototype.getExtent=uy.prototype.D,uy.prototype.getFeatureById=uy.prototype.xg,uy.prototype.getFormat=uy.prototype.sh,uy.prototype.getUrl=uy.prototype.th,uy.prototype.removeFeature=uy.prototype.mb,uy.prototype.getAttributions=uy.prototype.va,uy.prototype.getLogo=uy.prototype.ua,uy.prototype.getProjection=uy.prototype.wa,uy.prototype.getState=uy.prototype.U,uy.prototype.refresh=uy.prototype.ta,uy.prototype.setAttributions=uy.prototype.qa,uy.prototype.get=uy.prototype.get,uy.prototype.getKeys=uy.prototype.O,uy.prototype.getProperties=uy.prototype.N,uy.prototype.set=uy.prototype.set,uy.prototype.setProperties=uy.prototype.H,uy.prototype.unset=uy.prototype.R,uy.prototype.changed=uy.prototype.v,uy.prototype.dispatchEvent=uy.prototype.b,uy.prototype.getRevision=uy.prototype.K,uy.prototype.on=uy.prototype.I,uy.prototype.once=uy.prototype.L,uy.prototype.un=uy.prototype.J,uy.prototype.unByKey=uy.prototype.M,$s.prototype.getAttributions=$s.prototype.va,$s.prototype.getLogo=$s.prototype.ua,$s.prototype.getProjection=$s.prototype.wa,$s.prototype.getState=$s.prototype.U,$s.prototype.refresh=$s.prototype.ta,$s.prototype.setAttributions=$s.prototype.qa,$s.prototype.get=$s.prototype.get,$s.prototype.getKeys=$s.prototype.O,$s.prototype.getProperties=$s.prototype.N,$s.prototype.set=$s.prototype.set,$s.prototype.setProperties=$s.prototype.H,$s.prototype.unset=$s.prototype.R,$s.prototype.changed=$s.prototype.v,$s.prototype.dispatchEvent=$s.prototype.b,$s.prototype.getRevision=$s.prototype.K,$s.prototype.on=$s.prototype.I,$s.prototype.once=$s.prototype.L,$s.prototype.un=$s.prototype.J,$s.prototype.unByKey=$s.prototype.M,qs.prototype.type=qs.prototype.type,qs.prototype.target=qs.prototype.target,qs.prototype.preventDefault=qs.prototype.preventDefault,qs.prototype.stopPropagation=qs.prototype.stopPropagation,dy.prototype.getAttributions=dy.prototype.va,dy.prototype.getLogo=dy.prototype.ua,dy.prototype.getProjection=dy.prototype.wa,dy.prototype.getState=dy.prototype.U,dy.prototype.refresh=dy.prototype.ta,dy.prototype.setAttributions=dy.prototype.qa,dy.prototype.get=dy.prototype.get,dy.prototype.getKeys=dy.prototype.O,dy.prototype.getProperties=dy.prototype.N,dy.prototype.set=dy.prototype.set,dy.prototype.setProperties=dy.prototype.H,dy.prototype.unset=dy.prototype.R,dy.prototype.changed=dy.prototype.v,dy.prototype.dispatchEvent=dy.prototype.b,dy.prototype.getRevision=dy.prototype.K,dy.prototype.on=dy.prototype.I,dy.prototype.once=dy.prototype.L,dy.prototype.un=dy.prototype.J,dy.prototype.unByKey=dy.prototype.M,Vs.prototype.getAttributions=Vs.prototype.va,Vs.prototype.getLogo=Vs.prototype.ua,Vs.prototype.getProjection=Vs.prototype.wa,Vs.prototype.getState=Vs.prototype.U,Vs.prototype.refresh=Vs.prototype.ta,Vs.prototype.setAttributions=Vs.prototype.qa,Vs.prototype.get=Vs.prototype.get,Vs.prototype.getKeys=Vs.prototype.O,Vs.prototype.getProperties=Vs.prototype.N,Vs.prototype.set=Vs.prototype.set,Vs.prototype.setProperties=Vs.prototype.H,Vs.prototype.unset=Vs.prototype.R,Vs.prototype.changed=Vs.prototype.v,Vs.prototype.dispatchEvent=Vs.prototype.b,Vs.prototype.getRevision=Vs.prototype.K,Vs.prototype.on=Vs.prototype.I,Vs.prototype.once=Vs.prototype.L,Vs.prototype.un=Vs.prototype.J,Vs.prototype.unByKey=Vs.prototype.M,gy.prototype.getAttributions=gy.prototype.va,gy.prototype.getLogo=gy.prototype.ua,gy.prototype.getProjection=gy.prototype.wa,gy.prototype.getState=gy.prototype.U,gy.prototype.refresh=gy.prototype.ta,gy.prototype.setAttributions=gy.prototype.qa,gy.prototype.get=gy.prototype.get,gy.prototype.getKeys=gy.prototype.O,gy.prototype.getProperties=gy.prototype.N,gy.prototype.set=gy.prototype.set,gy.prototype.setProperties=gy.prototype.H,gy.prototype.unset=gy.prototype.R,gy.prototype.changed=gy.prototype.v,gy.prototype.dispatchEvent=gy.prototype.b,gy.prototype.getRevision=gy.prototype.K,gy.prototype.on=gy.prototype.I,gy.prototype.once=gy.prototype.L,gy.prototype.un=gy.prototype.J,gy.prototype.unByKey=gy.prototype.M,vy.prototype.getAttributions=vy.prototype.va,vy.prototype.getLogo=vy.prototype.ua,vy.prototype.getProjection=vy.prototype.wa,vy.prototype.getState=vy.prototype.U,vy.prototype.refresh=vy.prototype.ta,vy.prototype.setAttributions=vy.prototype.qa,vy.prototype.get=vy.prototype.get,vy.prototype.getKeys=vy.prototype.O,vy.prototype.getProperties=vy.prototype.N,vy.prototype.set=vy.prototype.set,vy.prototype.setProperties=vy.prototype.H,vy.prototype.unset=vy.prototype.R,vy.prototype.changed=vy.prototype.v,vy.prototype.dispatchEvent=vy.prototype.b,vy.prototype.getRevision=vy.prototype.K,vy.prototype.on=vy.prototype.I,vy.prototype.once=vy.prototype.L,vy.prototype.un=vy.prototype.J,vy.prototype.unByKey=vy.prototype.M,Ys.prototype.getAttributions=Ys.prototype.va,Ys.prototype.getLogo=Ys.prototype.ua,Ys.prototype.getProjection=Ys.prototype.wa,Ys.prototype.getState=Ys.prototype.U,Ys.prototype.refresh=Ys.prototype.ta,Ys.prototype.setAttributions=Ys.prototype.qa,Ys.prototype.get=Ys.prototype.get,Ys.prototype.getKeys=Ys.prototype.O,Ys.prototype.getProperties=Ys.prototype.N,Ys.prototype.set=Ys.prototype.set,Ys.prototype.setProperties=Ys.prototype.H,Ys.prototype.unset=Ys.prototype.R,Ys.prototype.changed=Ys.prototype.v,Ys.prototype.dispatchEvent=Ys.prototype.b,Ys.prototype.getRevision=Ys.prototype.K,Ys.prototype.on=Ys.prototype.I,Ys.prototype.once=Ys.prototype.L,Ys.prototype.un=Ys.prototype.J,Ys.prototype.unByKey=Ys.prototype.M,my.prototype.getAttributions=my.prototype.va,my.prototype.getLogo=my.prototype.ua,my.prototype.getProjection=my.prototype.wa,my.prototype.getState=my.prototype.U,my.prototype.refresh=my.prototype.ta,my.prototype.setAttributions=my.prototype.qa,my.prototype.get=my.prototype.get,my.prototype.getKeys=my.prototype.O,my.prototype.getProperties=my.prototype.N,my.prototype.set=my.prototype.set,my.prototype.setProperties=my.prototype.H,my.prototype.unset=my.prototype.R,my.prototype.changed=my.prototype.v,my.prototype.dispatchEvent=my.prototype.b,my.prototype.getRevision=my.prototype.K,my.prototype.on=my.prototype.I,my.prototype.once=my.prototype.L,my.prototype.un=my.prototype.J,my.prototype.unByKey=my.prototype.M,xy.prototype.setRenderReprojectionEdges=xy.prototype.Bb,xy.prototype.setTileGridForProjection=xy.prototype.Cb,xy.prototype.getTileLoadFunction=xy.prototype.fb,xy.prototype.getTileUrlFunction=xy.prototype.hb,xy.prototype.getUrls=xy.prototype.ib,xy.prototype.setTileLoadFunction=xy.prototype.nb,xy.prototype.setTileUrlFunction=xy.prototype.Ta,xy.prototype.setUrl=xy.prototype.Ya,xy.prototype.setUrls=xy.prototype.Ua,xy.prototype.getTileGrid=xy.prototype.Ra,xy.prototype.refresh=xy.prototype.ta,xy.prototype.getAttributions=xy.prototype.va,xy.prototype.getLogo=xy.prototype.ua,xy.prototype.getProjection=xy.prototype.wa,xy.prototype.getState=xy.prototype.U,xy.prototype.setAttributions=xy.prototype.qa,xy.prototype.get=xy.prototype.get,xy.prototype.getKeys=xy.prototype.O,xy.prototype.getProperties=xy.prototype.N,xy.prototype.set=xy.prototype.set,xy.prototype.setProperties=xy.prototype.H,xy.prototype.unset=xy.prototype.R,xy.prototype.changed=xy.prototype.v,xy.prototype.dispatchEvent=xy.prototype.b,xy.prototype.getRevision=xy.prototype.K,xy.prototype.on=xy.prototype.I,xy.prototype.once=xy.prototype.L,xy.prototype.un=xy.prototype.J,xy.prototype.unByKey=xy.prototype.M,Sy.prototype.getAttributions=Sy.prototype.va,Sy.prototype.getLogo=Sy.prototype.ua,Sy.prototype.getProjection=Sy.prototype.wa,Sy.prototype.getState=Sy.prototype.U,Sy.prototype.refresh=Sy.prototype.ta,Sy.prototype.setAttributions=Sy.prototype.qa,Sy.prototype.get=Sy.prototype.get,Sy.prototype.getKeys=Sy.prototype.O,Sy.prototype.getProperties=Sy.prototype.N,Sy.prototype.set=Sy.prototype.set,Sy.prototype.setProperties=Sy.prototype.H,Sy.prototype.unset=Sy.prototype.R,Sy.prototype.changed=Sy.prototype.v,Sy.prototype.dispatchEvent=Sy.prototype.b,Sy.prototype.getRevision=Sy.prototype.K,Sy.prototype.on=Sy.prototype.I,Sy.prototype.once=Sy.prototype.L,Sy.prototype.un=Sy.prototype.J,Sy.prototype.unByKey=Sy.prototype.M,Cy.prototype.type=Cy.prototype.type,Cy.prototype.target=Cy.prototype.target,Cy.prototype.preventDefault=Cy.prototype.preventDefault,Cy.prototype.stopPropagation=Cy.prototype.stopPropagation,Py.prototype.setRenderReprojectionEdges=Py.prototype.Bb,Py.prototype.setTileGridForProjection=Py.prototype.Cb,Py.prototype.getTileLoadFunction=Py.prototype.fb,Py.prototype.getTileUrlFunction=Py.prototype.hb,Py.prototype.getUrls=Py.prototype.ib,Py.prototype.setTileLoadFunction=Py.prototype.nb,Py.prototype.setTileUrlFunction=Py.prototype.Ta,Py.prototype.setUrl=Py.prototype.Ya,Py.prototype.setUrls=Py.prototype.Ua,Py.prototype.getTileGrid=Py.prototype.Ra,Py.prototype.refresh=Py.prototype.ta,Py.prototype.getAttributions=Py.prototype.va,Py.prototype.getLogo=Py.prototype.ua,Py.prototype.getProjection=Py.prototype.wa,Py.prototype.getState=Py.prototype.U,Py.prototype.setAttributions=Py.prototype.qa,Py.prototype.get=Py.prototype.get,Py.prototype.getKeys=Py.prototype.O,Py.prototype.getProperties=Py.prototype.N,Py.prototype.set=Py.prototype.set,Py.prototype.setProperties=Py.prototype.H,Py.prototype.unset=Py.prototype.R,Py.prototype.changed=Py.prototype.v,Py.prototype.dispatchEvent=Py.prototype.b,Py.prototype.getRevision=Py.prototype.K,Py.prototype.on=Py.prototype.I,Py.prototype.once=Py.prototype.L,Py.prototype.un=Py.prototype.J,Py.prototype.unByKey=Py.prototype.M,ty.prototype.type=ty.prototype.type,ty.prototype.target=ty.prototype.target,ty.prototype.preventDefault=ty.prototype.preventDefault,ty.prototype.stopPropagation=ty.prototype.stopPropagation,Ay.prototype.setRenderReprojectionEdges=Ay.prototype.Bb,Ay.prototype.setTileGridForProjection=Ay.prototype.Cb,Ay.prototype.getTileLoadFunction=Ay.prototype.fb,Ay.prototype.getTileUrlFunction=Ay.prototype.hb,Ay.prototype.getUrls=Ay.prototype.ib,Ay.prototype.setTileLoadFunction=Ay.prototype.nb,Ay.prototype.setTileUrlFunction=Ay.prototype.Ta,Ay.prototype.setUrl=Ay.prototype.Ya,Ay.prototype.setUrls=Ay.prototype.Ua,Ay.prototype.getTileGrid=Ay.prototype.Ra,Ay.prototype.refresh=Ay.prototype.ta,Ay.prototype.getAttributions=Ay.prototype.va,Ay.prototype.getLogo=Ay.prototype.ua,Ay.prototype.getProjection=Ay.prototype.wa,Ay.prototype.getState=Ay.prototype.U,Ay.prototype.setAttributions=Ay.prototype.qa,Ay.prototype.get=Ay.prototype.get,Ay.prototype.getKeys=Ay.prototype.O,Ay.prototype.getProperties=Ay.prototype.N,Ay.prototype.set=Ay.prototype.set,Ay.prototype.setProperties=Ay.prototype.H,Ay.prototype.unset=Ay.prototype.R,Ay.prototype.changed=Ay.prototype.v,Ay.prototype.dispatchEvent=Ay.prototype.b,Ay.prototype.getRevision=Ay.prototype.K,Ay.prototype.on=Ay.prototype.I,Ay.prototype.once=Ay.prototype.L,Ay.prototype.un=Ay.prototype.J,Ay.prototype.unByKey=Ay.prototype.M,Ny.prototype.getTileGrid=Ny.prototype.Ra,Ny.prototype.refresh=Ny.prototype.ta,Ny.prototype.getAttributions=Ny.prototype.va,Ny.prototype.getLogo=Ny.prototype.ua,Ny.prototype.getProjection=Ny.prototype.wa,Ny.prototype.getState=Ny.prototype.U,Ny.prototype.setAttributions=Ny.prototype.qa,Ny.prototype.get=Ny.prototype.get,Ny.prototype.getKeys=Ny.prototype.O,Ny.prototype.getProperties=Ny.prototype.N,Ny.prototype.set=Ny.prototype.set,Ny.prototype.setProperties=Ny.prototype.H,Ny.prototype.unset=Ny.prototype.R,Ny.prototype.changed=Ny.prototype.v,Ny.prototype.dispatchEvent=Ny.prototype.b,Ny.prototype.getRevision=Ny.prototype.K,Ny.prototype.on=Ny.prototype.I,Ny.prototype.once=Ny.prototype.L,Ny.prototype.un=Ny.prototype.J,Ny.prototype.unByKey=Ny.prototype.M,Ry.prototype.setRenderReprojectionEdges=Ry.prototype.Bb,Ry.prototype.setTileGridForProjection=Ry.prototype.Cb,Ry.prototype.getTileLoadFunction=Ry.prototype.fb,Ry.prototype.getTileUrlFunction=Ry.prototype.hb,Ry.prototype.getUrls=Ry.prototype.ib,Ry.prototype.setTileLoadFunction=Ry.prototype.nb,Ry.prototype.setTileUrlFunction=Ry.prototype.Ta,Ry.prototype.setUrl=Ry.prototype.Ya,Ry.prototype.setUrls=Ry.prototype.Ua,Ry.prototype.getTileGrid=Ry.prototype.Ra,Ry.prototype.refresh=Ry.prototype.ta,Ry.prototype.getAttributions=Ry.prototype.va,Ry.prototype.getLogo=Ry.prototype.ua,Ry.prototype.getProjection=Ry.prototype.wa,Ry.prototype.getState=Ry.prototype.U,Ry.prototype.setAttributions=Ry.prototype.qa,Ry.prototype.get=Ry.prototype.get,Ry.prototype.getKeys=Ry.prototype.O,Ry.prototype.getProperties=Ry.prototype.N,Ry.prototype.set=Ry.prototype.set,Ry.prototype.setProperties=Ry.prototype.H,Ry.prototype.unset=Ry.prototype.R,Ry.prototype.changed=Ry.prototype.v,Ry.prototype.dispatchEvent=Ry.prototype.b,Ry.prototype.getRevision=Ry.prototype.K,Ry.prototype.on=Ry.prototype.I,Ry.prototype.once=Ry.prototype.L,Ry.prototype.un=Ry.prototype.J,Ry.prototype.unByKey=Ry.prototype.M,ky.prototype.getTileGrid=ky.prototype.Ra,ky.prototype.refresh=ky.prototype.ta,ky.prototype.getAttributions=ky.prototype.va,ky.prototype.getLogo=ky.prototype.ua,ky.prototype.getProjection=ky.prototype.wa,ky.prototype.getState=ky.prototype.U,ky.prototype.setAttributions=ky.prototype.qa,ky.prototype.get=ky.prototype.get,ky.prototype.getKeys=ky.prototype.O,ky.prototype.getProperties=ky.prototype.N,ky.prototype.set=ky.prototype.set,ky.prototype.setProperties=ky.prototype.H,ky.prototype.unset=ky.prototype.R,ky.prototype.changed=ky.prototype.v,ky.prototype.dispatchEvent=ky.prototype.b,ky.prototype.getRevision=ky.prototype.K,ky.prototype.on=ky.prototype.I,ky.prototype.once=ky.prototype.L,ky.prototype.un=ky.prototype.J,ky.prototype.unByKey=ky.prototype.M,Fy.prototype.setRenderReprojectionEdges=Fy.prototype.Bb,Fy.prototype.setTileGridForProjection=Fy.prototype.Cb,Fy.prototype.getTileLoadFunction=Fy.prototype.fb,Fy.prototype.getTileUrlFunction=Fy.prototype.hb,Fy.prototype.getUrls=Fy.prototype.ib,Fy.prototype.setTileLoadFunction=Fy.prototype.nb,Fy.prototype.setTileUrlFunction=Fy.prototype.Ta,Fy.prototype.setUrl=Fy.prototype.Ya,Fy.prototype.setUrls=Fy.prototype.Ua,Fy.prototype.getTileGrid=Fy.prototype.Ra,Fy.prototype.refresh=Fy.prototype.ta,Fy.prototype.getAttributions=Fy.prototype.va,Fy.prototype.getLogo=Fy.prototype.ua,Fy.prototype.getProjection=Fy.prototype.wa,Fy.prototype.getState=Fy.prototype.U,Fy.prototype.setAttributions=Fy.prototype.qa,Fy.prototype.get=Fy.prototype.get,Fy.prototype.getKeys=Fy.prototype.O,Fy.prototype.getProperties=Fy.prototype.N,Fy.prototype.set=Fy.prototype.set,Fy.prototype.setProperties=Fy.prototype.H,Fy.prototype.unset=Fy.prototype.R,Fy.prototype.changed=Fy.prototype.v,Fy.prototype.dispatchEvent=Fy.prototype.b,Fy.prototype.getRevision=Fy.prototype.K,Fy.prototype.on=Fy.prototype.I,Fy.prototype.once=Fy.prototype.L,Fy.prototype.un=Fy.prototype.J,Fy.prototype.unByKey=Fy.prototype.M,Bc.prototype.type=Bc.prototype.type,Bc.prototype.target=Bc.prototype.target,Bc.prototype.preventDefault=Bc.prototype.preventDefault,Bc.prototype.stopPropagation=Bc.prototype.stopPropagation,Wy.prototype.getTileLoadFunction=Wy.prototype.fb,Wy.prototype.getTileUrlFunction=Wy.prototype.hb,Wy.prototype.getUrls=Wy.prototype.ib,Wy.prototype.setTileLoadFunction=Wy.prototype.nb,Wy.prototype.setTileUrlFunction=Wy.prototype.Ta,Wy.prototype.setUrl=Wy.prototype.Ya,Wy.prototype.setUrls=Wy.prototype.Ua,Wy.prototype.getTileGrid=Wy.prototype.Ra,Wy.prototype.refresh=Wy.prototype.ta,Wy.prototype.getAttributions=Wy.prototype.va,Wy.prototype.getLogo=Wy.prototype.ua,Wy.prototype.getProjection=Wy.prototype.wa,Wy.prototype.getState=Wy.prototype.U,Wy.prototype.setAttributions=Wy.prototype.qa,Wy.prototype.get=Wy.prototype.get,Wy.prototype.getKeys=Wy.prototype.O,Wy.prototype.getProperties=Wy.prototype.N,Wy.prototype.set=Wy.prototype.set,Wy.prototype.setProperties=Wy.prototype.H,Wy.prototype.unset=Wy.prototype.R,Wy.prototype.changed=Wy.prototype.v,Wy.prototype.dispatchEvent=Wy.prototype.b,Wy.prototype.getRevision=Wy.prototype.K,Wy.prototype.on=Wy.prototype.I,Wy.prototype.once=Wy.prototype.L,Wy.prototype.un=Wy.prototype.J,Wy.prototype.unByKey=Wy.prototype.M,qy.prototype.setRenderReprojectionEdges=qy.prototype.Bb,qy.prototype.setTileGridForProjection=qy.prototype.Cb,qy.prototype.getTileLoadFunction=qy.prototype.fb,qy.prototype.getTileUrlFunction=qy.prototype.hb,qy.prototype.getUrls=qy.prototype.ib,qy.prototype.setTileLoadFunction=qy.prototype.nb,qy.prototype.setTileUrlFunction=qy.prototype.Ta,qy.prototype.setUrl=qy.prototype.Ya,qy.prototype.setUrls=qy.prototype.Ua,qy.prototype.getTileGrid=qy.prototype.Ra,qy.prototype.refresh=qy.prototype.ta,qy.prototype.getAttributions=qy.prototype.va,qy.prototype.getLogo=qy.prototype.ua,qy.prototype.getProjection=qy.prototype.wa,qy.prototype.getState=qy.prototype.U,qy.prototype.setAttributions=qy.prototype.qa,qy.prototype.get=qy.prototype.get,qy.prototype.getKeys=qy.prototype.O,qy.prototype.getProperties=qy.prototype.N,qy.prototype.set=qy.prototype.set,qy.prototype.setProperties=qy.prototype.H,qy.prototype.unset=qy.prototype.R,qy.prototype.changed=qy.prototype.v,qy.prototype.dispatchEvent=qy.prototype.b,qy.prototype.getRevision=qy.prototype.K,qy.prototype.on=qy.prototype.I,qy.prototype.once=qy.prototype.L,qy.prototype.un=qy.prototype.J,qy.prototype.unByKey=qy.prototype.M,Yy.prototype.setRenderReprojectionEdges=Yy.prototype.Bb,Yy.prototype.setTileGridForProjection=Yy.prototype.Cb,Yy.prototype.getTileLoadFunction=Yy.prototype.fb,Yy.prototype.getTileUrlFunction=Yy.prototype.hb,Yy.prototype.getUrls=Yy.prototype.ib,Yy.prototype.setTileLoadFunction=Yy.prototype.nb,Yy.prototype.setTileUrlFunction=Yy.prototype.Ta,Yy.prototype.setUrl=Yy.prototype.Ya,Yy.prototype.setUrls=Yy.prototype.Ua,Yy.prototype.getTileGrid=Yy.prototype.Ra,Yy.prototype.refresh=Yy.prototype.ta,Yy.prototype.getAttributions=Yy.prototype.va,Yy.prototype.getLogo=Yy.prototype.ua,Yy.prototype.getProjection=Yy.prototype.wa,Yy.prototype.getState=Yy.prototype.U,Yy.prototype.setAttributions=Yy.prototype.qa,Yy.prototype.get=Yy.prototype.get,Yy.prototype.getKeys=Yy.prototype.O,Yy.prototype.getProperties=Yy.prototype.N,Yy.prototype.set=Yy.prototype.set,Yy.prototype.setProperties=Yy.prototype.H,Yy.prototype.unset=Yy.prototype.R,Yy.prototype.changed=Yy.prototype.v,Yy.prototype.dispatchEvent=Yy.prototype.b,Yy.prototype.getRevision=Yy.prototype.K,Yy.prototype.on=Yy.prototype.I,Yy.prototype.once=Yy.prototype.L,Yy.prototype.un=Yy.prototype.J,Yy.prototype.unByKey=Yy.prototype.M,Xf.prototype.getTileCoord=Xf.prototype.i,Xf.prototype.load=Xf.prototype.load,Jn.prototype.changed=Jn.prototype.v,Jn.prototype.dispatchEvent=Jn.prototype.b,Jn.prototype.getRevision=Jn.prototype.K,Jn.prototype.on=Jn.prototype.I,Jn.prototype.once=Jn.prototype.L,Jn.prototype.un=Jn.prototype.J,Jn.prototype.unByKey=Jn.prototype.M,Bp.prototype.changed=Bp.prototype.v,Bp.prototype.dispatchEvent=Bp.prototype.b,Bp.prototype.getRevision=Bp.prototype.K,Bp.prototype.on=Bp.prototype.I,Bp.prototype.once=Bp.prototype.L,Bp.prototype.un=Bp.prototype.J,Bp.prototype.unByKey=Bp.prototype.M,Hp.prototype.changed=Hp.prototype.v,Hp.prototype.dispatchEvent=Hp.prototype.b,Hp.prototype.getRevision=Hp.prototype.K,Hp.prototype.on=Hp.prototype.I,Hp.prototype.once=Hp.prototype.L,Hp.prototype.un=Hp.prototype.J,Hp.prototype.unByKey=Hp.prototype.M,qp.prototype.changed=qp.prototype.v,qp.prototype.dispatchEvent=qp.prototype.b,qp.prototype.getRevision=qp.prototype.K,qp.prototype.on=qp.prototype.I,qp.prototype.once=qp.prototype.L,qp.prototype.un=qp.prototype.J,qp.prototype.unByKey=qp.prototype.M,Vp.prototype.changed=Vp.prototype.v,Vp.prototype.dispatchEvent=Vp.prototype.b,Vp.prototype.getRevision=Vp.prototype.K,Vp.prototype.on=Vp.prototype.I,Vp.prototype.once=Vp.prototype.L,Vp.prototype.un=Vp.prototype.J,Vp.prototype.unByKey=Vp.prototype.M,ns.prototype.changed=ns.prototype.v,ns.prototype.dispatchEvent=ns.prototype.b,ns.prototype.getRevision=ns.prototype.K,ns.prototype.on=ns.prototype.I,ns.prototype.once=ns.prototype.L,ns.prototype.un=ns.prototype.J,ns.prototype.unByKey=ns.prototype.M,Js.prototype.changed=Js.prototype.v,Js.prototype.dispatchEvent=Js.prototype.b,Js.prototype.getRevision=Js.prototype.K,Js.prototype.on=Js.prototype.I,Js.prototype.once=Js.prototype.L,Js.prototype.un=Js.prototype.J,Js.prototype.unByKey=Js.prototype.M,_s.prototype.changed=_s.prototype.v,_s.prototype.dispatchEvent=_s.prototype.b,_s.prototype.getRevision=_s.prototype.K,_s.prototype.on=_s.prototype.I,_s.prototype.once=_s.prototype.L,_s.prototype.un=_s.prototype.J,_s.prototype.unByKey=_s.prototype.M,tp.prototype.changed=tp.prototype.v,tp.prototype.dispatchEvent=tp.prototype.b,tp.prototype.getRevision=tp.prototype.K,tp.prototype.on=tp.prototype.I,tp.prototype.once=tp.prototype.L,tp.prototype.un=tp.prototype.J,tp.prototype.unByKey=tp.prototype.M,ep.prototype.changed=ep.prototype.v,ep.prototype.dispatchEvent=ep.prototype.b,ep.prototype.getRevision=ep.prototype.K,ep.prototype.on=ep.prototype.I,ep.prototype.once=ep.prototype.L,ep.prototype.un=ep.prototype.J,ep.prototype.unByKey=ep.prototype.M,en.prototype.type=en.prototype.type,en.prototype.target=en.prototype.target,en.prototype.preventDefault=en.prototype.preventDefault,en.prototype.stopPropagation=en.prototype.stopPropagation,gi.prototype.type=gi.prototype.type,gi.prototype.target=gi.prototype.target,gi.prototype.preventDefault=gi.prototype.preventDefault,gi.prototype.stopPropagation=gi.prototype.stopPropagation,qr.prototype.get=qr.prototype.get,qr.prototype.getKeys=qr.prototype.O,qr.prototype.getProperties=qr.prototype.N,qr.prototype.set=qr.prototype.set,qr.prototype.setProperties=qr.prototype.H,qr.prototype.unset=qr.prototype.R,qr.prototype.changed=qr.prototype.v,qr.prototype.dispatchEvent=qr.prototype.b,qr.prototype.getRevision=qr.prototype.K,qr.prototype.on=qr.prototype.I,qr.prototype.once=qr.prototype.L,qr.prototype.un=qr.prototype.J,qr.prototype.unByKey=qr.prototype.M,Yr.prototype.getExtent=Yr.prototype.D,Yr.prototype.getMaxResolution=Yr.prototype.Pb,Yr.prototype.getMinResolution=Yr.prototype.Qb,Yr.prototype.getOpacity=Yr.prototype.Rb,Yr.prototype.getVisible=Yr.prototype.zb,Yr.prototype.getZIndex=Yr.prototype.Sb,Yr.prototype.setExtent=Yr.prototype.fc,Yr.prototype.setMaxResolution=Yr.prototype.lc,Yr.prototype.setMinResolution=Yr.prototype.mc,Yr.prototype.setOpacity=Yr.prototype.gc,Yr.prototype.setVisible=Yr.prototype.hc,Yr.prototype.setZIndex=Yr.prototype.ic,Yr.prototype.get=Yr.prototype.get,Yr.prototype.getKeys=Yr.prototype.O,Yr.prototype.getProperties=Yr.prototype.N,Yr.prototype.set=Yr.prototype.set,Yr.prototype.setProperties=Yr.prototype.H,Yr.prototype.unset=Yr.prototype.R,Yr.prototype.changed=Yr.prototype.v,Yr.prototype.dispatchEvent=Yr.prototype.b,Yr.prototype.getRevision=Yr.prototype.K,Yr.prototype.on=Yr.prototype.I,Yr.prototype.once=Yr.prototype.L,Yr.prototype.un=Yr.prototype.J,Yr.prototype.unByKey=Yr.prototype.M,on.prototype.getExtent=on.prototype.D,on.prototype.getMaxResolution=on.prototype.Pb,on.prototype.getMinResolution=on.prototype.Qb,on.prototype.getOpacity=on.prototype.Rb,on.prototype.getVisible=on.prototype.zb,on.prototype.getZIndex=on.prototype.Sb,on.prototype.setExtent=on.prototype.fc,on.prototype.setMaxResolution=on.prototype.lc,on.prototype.setMinResolution=on.prototype.mc,on.prototype.setOpacity=on.prototype.gc,on.prototype.setVisible=on.prototype.hc,on.prototype.setZIndex=on.prototype.ic,on.prototype.get=on.prototype.get,on.prototype.getKeys=on.prototype.O,on.prototype.getProperties=on.prototype.N,on.prototype.set=on.prototype.set,on.prototype.setProperties=on.prototype.H,on.prototype.unset=on.prototype.R,on.prototype.changed=on.prototype.v,on.prototype.dispatchEvent=on.prototype.b,on.prototype.getRevision=on.prototype.K,on.prototype.on=on.prototype.I,on.prototype.once=on.prototype.L,on.prototype.un=on.prototype.J,on.prototype.unByKey=on.prototype.M,Hn.prototype.setMap=Hn.prototype.setMap,Hn.prototype.setSource=Hn.prototype.Ec,Hn.prototype.getExtent=Hn.prototype.D,Hn.prototype.getMaxResolution=Hn.prototype.Pb,Hn.prototype.getMinResolution=Hn.prototype.Qb,Hn.prototype.getOpacity=Hn.prototype.Rb,Hn.prototype.getVisible=Hn.prototype.zb,Hn.prototype.getZIndex=Hn.prototype.Sb,Hn.prototype.setExtent=Hn.prototype.fc,Hn.prototype.setMaxResolution=Hn.prototype.lc,Hn.prototype.setMinResolution=Hn.prototype.mc,Hn.prototype.setOpacity=Hn.prototype.gc,Hn.prototype.setVisible=Hn.prototype.hc,Hn.prototype.setZIndex=Hn.prototype.ic,Hn.prototype.get=Hn.prototype.get,Hn.prototype.getKeys=Hn.prototype.O,Hn.prototype.getProperties=Hn.prototype.N,Hn.prototype.set=Hn.prototype.set,Hn.prototype.setProperties=Hn.prototype.H,Hn.prototype.unset=Hn.prototype.R,Hn.prototype.changed=Hn.prototype.v,Hn.prototype.dispatchEvent=Hn.prototype.b,Hn.prototype.getRevision=Hn.prototype.K,Hn.prototype.on=Hn.prototype.I,Hn.prototype.once=Hn.prototype.L,Hn.prototype.un=Hn.prototype.J,Hn.prototype.unByKey=Hn.prototype.M,Gf.prototype.getSource=Gf.prototype.ga,Gf.prototype.getStyle=Gf.prototype.G,Gf.prototype.getStyleFunction=Gf.prototype.S,Gf.prototype.setStyle=Gf.prototype.l,Gf.prototype.setMap=Gf.prototype.setMap,Gf.prototype.setSource=Gf.prototype.Ec,Gf.prototype.getExtent=Gf.prototype.D,Gf.prototype.getMaxResolution=Gf.prototype.Pb,Gf.prototype.getMinResolution=Gf.prototype.Qb,Gf.prototype.getOpacity=Gf.prototype.Rb,Gf.prototype.getVisible=Gf.prototype.zb,Gf.prototype.getZIndex=Gf.prototype.Sb,Gf.prototype.setExtent=Gf.prototype.fc,Gf.prototype.setMaxResolution=Gf.prototype.lc,Gf.prototype.setMinResolution=Gf.prototype.mc,Gf.prototype.setOpacity=Gf.prototype.gc,Gf.prototype.setVisible=Gf.prototype.hc,Gf.prototype.setZIndex=Gf.prototype.ic,Gf.prototype.get=Gf.prototype.get,Gf.prototype.getKeys=Gf.prototype.O,Gf.prototype.getProperties=Gf.prototype.N,Gf.prototype.set=Gf.prototype.set,Gf.prototype.setProperties=Gf.prototype.H,Gf.prototype.unset=Gf.prototype.R,Gf.prototype.changed=Gf.prototype.v,Gf.prototype.dispatchEvent=Gf.prototype.b,Gf.prototype.getRevision=Gf.prototype.K,Gf.prototype.on=Gf.prototype.I,Gf.prototype.once=Gf.prototype.L,Gf.prototype.un=Gf.prototype.J,
-Gf.prototype.unByKey=Gf.prototype.M,Tn.prototype.setMap=Tn.prototype.setMap,Tn.prototype.setSource=Tn.prototype.Ec,Tn.prototype.getExtent=Tn.prototype.D,Tn.prototype.getMaxResolution=Tn.prototype.Pb,Tn.prototype.getMinResolution=Tn.prototype.Qb,Tn.prototype.getOpacity=Tn.prototype.Rb,Tn.prototype.getVisible=Tn.prototype.zb,Tn.prototype.getZIndex=Tn.prototype.Sb,Tn.prototype.setExtent=Tn.prototype.fc,Tn.prototype.setMaxResolution=Tn.prototype.lc,Tn.prototype.setMinResolution=Tn.prototype.mc,Tn.prototype.setOpacity=Tn.prototype.gc,Tn.prototype.setVisible=Tn.prototype.hc,Tn.prototype.setZIndex=Tn.prototype.ic,Tn.prototype.get=Tn.prototype.get,Tn.prototype.getKeys=Tn.prototype.O,Tn.prototype.getProperties=Tn.prototype.N,Tn.prototype.set=Tn.prototype.set,Tn.prototype.setProperties=Tn.prototype.H,Tn.prototype.unset=Tn.prototype.R,Tn.prototype.changed=Tn.prototype.v,Tn.prototype.dispatchEvent=Tn.prototype.b,Tn.prototype.getRevision=Tn.prototype.K,Tn.prototype.on=Tn.prototype.I,Tn.prototype.once=Tn.prototype.L,Tn.prototype.un=Tn.prototype.J,Tn.prototype.unByKey=Tn.prototype.M,En.prototype.setMap=En.prototype.setMap,En.prototype.setSource=En.prototype.Ec,En.prototype.getExtent=En.prototype.D,En.prototype.getMaxResolution=En.prototype.Pb,En.prototype.getMinResolution=En.prototype.Qb,En.prototype.getOpacity=En.prototype.Rb,En.prototype.getVisible=En.prototype.zb,En.prototype.getZIndex=En.prototype.Sb,En.prototype.setExtent=En.prototype.fc,En.prototype.setMaxResolution=En.prototype.lc,En.prototype.setMinResolution=En.prototype.mc,En.prototype.setOpacity=En.prototype.gc,En.prototype.setVisible=En.prototype.hc,En.prototype.setZIndex=En.prototype.ic,En.prototype.get=En.prototype.get,En.prototype.getKeys=En.prototype.O,En.prototype.getProperties=En.prototype.N,En.prototype.set=En.prototype.set,En.prototype.setProperties=En.prototype.H,En.prototype.unset=En.prototype.R,En.prototype.changed=En.prototype.v,En.prototype.dispatchEvent=En.prototype.b,En.prototype.getRevision=En.prototype.K,En.prototype.on=En.prototype.I,En.prototype.once=En.prototype.L,En.prototype.un=En.prototype.J,En.prototype.unByKey=En.prototype.M,Xn.prototype.getSource=Xn.prototype.ga,Xn.prototype.getStyle=Xn.prototype.G,Xn.prototype.getStyleFunction=Xn.prototype.S,Xn.prototype.setStyle=Xn.prototype.l,Xn.prototype.setMap=Xn.prototype.setMap,Xn.prototype.setSource=Xn.prototype.Ec,Xn.prototype.getExtent=Xn.prototype.D,Xn.prototype.getMaxResolution=Xn.prototype.Pb,Xn.prototype.getMinResolution=Xn.prototype.Qb,Xn.prototype.getOpacity=Xn.prototype.Rb,Xn.prototype.getVisible=Xn.prototype.zb,Xn.prototype.getZIndex=Xn.prototype.Sb,Xn.prototype.setExtent=Xn.prototype.fc,Xn.prototype.setMaxResolution=Xn.prototype.lc,Xn.prototype.setMinResolution=Xn.prototype.mc,Xn.prototype.setOpacity=Xn.prototype.gc,Xn.prototype.setVisible=Xn.prototype.hc,Xn.prototype.setZIndex=Xn.prototype.ic,Xn.prototype.get=Xn.prototype.get,Xn.prototype.getKeys=Xn.prototype.O,Xn.prototype.getProperties=Xn.prototype.N,Xn.prototype.set=Xn.prototype.set,Xn.prototype.setProperties=Xn.prototype.H,Xn.prototype.unset=Xn.prototype.R,Xn.prototype.changed=Xn.prototype.v,Xn.prototype.dispatchEvent=Xn.prototype.b,Xn.prototype.getRevision=Xn.prototype.K,Xn.prototype.on=Xn.prototype.I,Xn.prototype.once=Xn.prototype.L,Xn.prototype.un=Xn.prototype.J,Xn.prototype.unByKey=Xn.prototype.M,Zi.prototype.get=Zi.prototype.get,Zi.prototype.getKeys=Zi.prototype.O,Zi.prototype.getProperties=Zi.prototype.N,Zi.prototype.set=Zi.prototype.set,Zi.prototype.setProperties=Zi.prototype.H,Zi.prototype.unset=Zi.prototype.R,Zi.prototype.changed=Zi.prototype.v,Zi.prototype.dispatchEvent=Zi.prototype.b,Zi.prototype.getRevision=Zi.prototype.K,Zi.prototype.on=Zi.prototype.I,Zi.prototype.once=Zi.prototype.L,Zi.prototype.un=Zi.prototype.J,Zi.prototype.unByKey=Zi.prototype.M,tr.prototype.getActive=tr.prototype.f,tr.prototype.getMap=tr.prototype.c,tr.prototype.setActive=tr.prototype.Ba,tr.prototype.get=tr.prototype.get,tr.prototype.getKeys=tr.prototype.O,tr.prototype.getProperties=tr.prototype.N,tr.prototype.set=tr.prototype.set,tr.prototype.setProperties=tr.prototype.H,tr.prototype.unset=tr.prototype.R,tr.prototype.changed=tr.prototype.v,tr.prototype.dispatchEvent=tr.prototype.b,tr.prototype.getRevision=tr.prototype.K,tr.prototype.on=tr.prototype.I,tr.prototype.once=tr.prototype.L,tr.prototype.un=tr.prototype.J,tr.prototype.unByKey=tr.prototype.M,gc.prototype.getActive=gc.prototype.f,gc.prototype.getMap=gc.prototype.c,gc.prototype.setActive=gc.prototype.Ba,gc.prototype.get=gc.prototype.get,gc.prototype.getKeys=gc.prototype.O,gc.prototype.getProperties=gc.prototype.N,gc.prototype.set=gc.prototype.set,gc.prototype.setProperties=gc.prototype.H,gc.prototype.unset=gc.prototype.R,gc.prototype.changed=gc.prototype.v,gc.prototype.dispatchEvent=gc.prototype.b,gc.prototype.getRevision=gc.prototype.K,gc.prototype.on=gc.prototype.I,gc.prototype.once=gc.prototype.L,gc.prototype.un=gc.prototype.J,gc.prototype.unByKey=gc.prototype.M,bc.prototype.type=bc.prototype.type,bc.prototype.target=bc.prototype.target,bc.prototype.preventDefault=bc.prototype.preventDefault,bc.prototype.stopPropagation=bc.prototype.stopPropagation,ur.prototype.getActive=ur.prototype.f,ur.prototype.getMap=ur.prototype.c,ur.prototype.setActive=ur.prototype.Ba,ur.prototype.get=ur.prototype.get,ur.prototype.getKeys=ur.prototype.O,ur.prototype.getProperties=ur.prototype.N,ur.prototype.set=ur.prototype.set,ur.prototype.setProperties=ur.prototype.H,ur.prototype.unset=ur.prototype.R,ur.prototype.changed=ur.prototype.v,ur.prototype.dispatchEvent=ur.prototype.b,ur.prototype.getRevision=ur.prototype.K,ur.prototype.on=ur.prototype.I,ur.prototype.once=ur.prototype.L,ur.prototype.un=ur.prototype.J,ur.prototype.unByKey=ur.prototype.M,Mr.prototype.getActive=Mr.prototype.f,Mr.prototype.getMap=Mr.prototype.c,Mr.prototype.setActive=Mr.prototype.Ba,Mr.prototype.get=Mr.prototype.get,Mr.prototype.getKeys=Mr.prototype.O,Mr.prototype.getProperties=Mr.prototype.N,Mr.prototype.set=Mr.prototype.set,Mr.prototype.setProperties=Mr.prototype.H,Mr.prototype.unset=Mr.prototype.R,Mr.prototype.changed=Mr.prototype.v,Mr.prototype.dispatchEvent=Mr.prototype.b,Mr.prototype.getRevision=Mr.prototype.K,Mr.prototype.on=Mr.prototype.I,Mr.prototype.once=Mr.prototype.L,Mr.prototype.un=Mr.prototype.J,Mr.prototype.unByKey=Mr.prototype.M,Nr.prototype.type=Nr.prototype.type,Nr.prototype.target=Nr.prototype.target,Nr.prototype.preventDefault=Nr.prototype.preventDefault,Nr.prototype.stopPropagation=Nr.prototype.stopPropagation,yr.prototype.getActive=yr.prototype.f,yr.prototype.getMap=yr.prototype.c,yr.prototype.setActive=yr.prototype.Ba,yr.prototype.get=yr.prototype.get,yr.prototype.getKeys=yr.prototype.O,yr.prototype.getProperties=yr.prototype.N,yr.prototype.set=yr.prototype.set,yr.prototype.setProperties=yr.prototype.H,yr.prototype.unset=yr.prototype.R,yr.prototype.changed=yr.prototype.v,yr.prototype.dispatchEvent=yr.prototype.b,yr.prototype.getRevision=yr.prototype.K,yr.prototype.on=yr.prototype.I,yr.prototype.once=yr.prototype.L,yr.prototype.un=yr.prototype.J,yr.prototype.unByKey=yr.prototype.M,mr.prototype.getActive=mr.prototype.f,mr.prototype.getMap=mr.prototype.c,mr.prototype.setActive=mr.prototype.Ba,mr.prototype.get=mr.prototype.get,mr.prototype.getKeys=mr.prototype.O,mr.prototype.getProperties=mr.prototype.N,mr.prototype.set=mr.prototype.set,mr.prototype.setProperties=mr.prototype.H,mr.prototype.unset=mr.prototype.R,mr.prototype.changed=mr.prototype.v,mr.prototype.dispatchEvent=mr.prototype.b,mr.prototype.getRevision=mr.prototype.K,mr.prototype.on=mr.prototype.I,mr.prototype.once=mr.prototype.L,mr.prototype.un=mr.prototype.J,mr.prototype.unByKey=mr.prototype.M,wc.prototype.getActive=wc.prototype.f,wc.prototype.getMap=wc.prototype.c,wc.prototype.setActive=wc.prototype.Ba,wc.prototype.get=wc.prototype.get,wc.prototype.getKeys=wc.prototype.O,wc.prototype.getProperties=wc.prototype.N,wc.prototype.set=wc.prototype.set,wc.prototype.setProperties=wc.prototype.H,wc.prototype.unset=wc.prototype.R,wc.prototype.changed=wc.prototype.v,wc.prototype.dispatchEvent=wc.prototype.b,wc.prototype.getRevision=wc.prototype.K,wc.prototype.on=wc.prototype.I,wc.prototype.once=wc.prototype.L,wc.prototype.un=wc.prototype.J,wc.prototype.unByKey=wc.prototype.M,Lr.prototype.getGeometry=Lr.prototype.V,Lr.prototype.getActive=Lr.prototype.f,Lr.prototype.getMap=Lr.prototype.c,Lr.prototype.setActive=Lr.prototype.Ba,Lr.prototype.get=Lr.prototype.get,Lr.prototype.getKeys=Lr.prototype.O,Lr.prototype.getProperties=Lr.prototype.N,Lr.prototype.set=Lr.prototype.set,Lr.prototype.setProperties=Lr.prototype.H,Lr.prototype.unset=Lr.prototype.R,Lr.prototype.changed=Lr.prototype.v,Lr.prototype.dispatchEvent=Lr.prototype.b,Lr.prototype.getRevision=Lr.prototype.K,Lr.prototype.on=Lr.prototype.I,Lr.prototype.once=Lr.prototype.L,Lr.prototype.un=Lr.prototype.J,Lr.prototype.unByKey=Lr.prototype.M,Uc.prototype.getActive=Uc.prototype.f,Uc.prototype.getMap=Uc.prototype.c,Uc.prototype.setActive=Uc.prototype.Ba,Uc.prototype.get=Uc.prototype.get,Uc.prototype.getKeys=Uc.prototype.O,Uc.prototype.getProperties=Uc.prototype.N,Uc.prototype.set=Uc.prototype.set,Uc.prototype.setProperties=Uc.prototype.H,Uc.prototype.unset=Uc.prototype.R,Uc.prototype.changed=Uc.prototype.v,Uc.prototype.dispatchEvent=Uc.prototype.b,Uc.prototype.getRevision=Uc.prototype.K,Uc.prototype.on=Uc.prototype.I,Uc.prototype.once=Uc.prototype.L,Uc.prototype.un=Uc.prototype.J,Uc.prototype.unByKey=Uc.prototype.M,Jc.prototype.type=Jc.prototype.type,Jc.prototype.target=Jc.prototype.target,Jc.prototype.preventDefault=Jc.prototype.preventDefault,Jc.prototype.stopPropagation=Jc.prototype.stopPropagation,_c.prototype.getActive=_c.prototype.f,_c.prototype.getMap=_c.prototype.c,_c.prototype.setActive=_c.prototype.Ba,_c.prototype.get=_c.prototype.get,_c.prototype.getKeys=_c.prototype.O,_c.prototype.getProperties=_c.prototype.N,_c.prototype.set=_c.prototype.set,_c.prototype.setProperties=_c.prototype.H,_c.prototype.unset=_c.prototype.R,_c.prototype.changed=_c.prototype.v,_c.prototype.dispatchEvent=_c.prototype.b,_c.prototype.getRevision=_c.prototype.K,_c.prototype.on=_c.prototype.I,_c.prototype.once=_c.prototype.L,_c.prototype.un=_c.prototype.J,_c.prototype.unByKey=_c.prototype.M,lf.prototype.type=lf.prototype.type,lf.prototype.target=lf.prototype.target,lf.prototype.preventDefault=lf.prototype.preventDefault,lf.prototype.stopPropagation=lf.prototype.stopPropagation,Rr.prototype.getActive=Rr.prototype.f,Rr.prototype.getMap=Rr.prototype.c,Rr.prototype.setActive=Rr.prototype.Ba,Rr.prototype.get=Rr.prototype.get,Rr.prototype.getKeys=Rr.prototype.O,Rr.prototype.getProperties=Rr.prototype.N,Rr.prototype.set=Rr.prototype.set,Rr.prototype.setProperties=Rr.prototype.H,Rr.prototype.unset=Rr.prototype.R,Rr.prototype.changed=Rr.prototype.v,Rr.prototype.dispatchEvent=Rr.prototype.b,Rr.prototype.getRevision=Rr.prototype.K,Rr.prototype.on=Rr.prototype.I,Rr.prototype.once=Rr.prototype.L,Rr.prototype.un=Rr.prototype.J,Rr.prototype.unByKey=Rr.prototype.M,Ir.prototype.getActive=Ir.prototype.f,Ir.prototype.getMap=Ir.prototype.c,Ir.prototype.setActive=Ir.prototype.Ba,Ir.prototype.get=Ir.prototype.get,Ir.prototype.getKeys=Ir.prototype.O,Ir.prototype.getProperties=Ir.prototype.N,Ir.prototype.set=Ir.prototype.set,Ir.prototype.setProperties=Ir.prototype.H,Ir.prototype.unset=Ir.prototype.R,Ir.prototype.changed=Ir.prototype.v,Ir.prototype.dispatchEvent=Ir.prototype.b,Ir.prototype.getRevision=Ir.prototype.K,Ir.prototype.on=Ir.prototype.I,Ir.prototype.once=Ir.prototype.L,Ir.prototype.un=Ir.prototype.J,Ir.prototype.unByKey=Ir.prototype.M,uf.prototype.getActive=uf.prototype.f,uf.prototype.getMap=uf.prototype.c,uf.prototype.setActive=uf.prototype.Ba,uf.prototype.get=uf.prototype.get,uf.prototype.getKeys=uf.prototype.O,uf.prototype.getProperties=uf.prototype.N,uf.prototype.set=uf.prototype.set,uf.prototype.setProperties=uf.prototype.H,uf.prototype.unset=uf.prototype.R,uf.prototype.changed=uf.prototype.v,uf.prototype.dispatchEvent=uf.prototype.b,uf.prototype.getRevision=uf.prototype.K,uf.prototype.on=uf.prototype.I,uf.prototype.once=uf.prototype.L,uf.prototype.un=uf.prototype.J,uf.prototype.unByKey=uf.prototype.M,Ef.prototype.type=Ef.prototype.type,Ef.prototype.target=Ef.prototype.target,Ef.prototype.preventDefault=Ef.prototype.preventDefault,Ef.prototype.stopPropagation=Ef.prototype.stopPropagation,Or.prototype.getActive=Or.prototype.f,Or.prototype.getMap=Or.prototype.c,Or.prototype.setActive=Or.prototype.Ba,Or.prototype.get=Or.prototype.get,Or.prototype.getKeys=Or.prototype.O,Or.prototype.getProperties=Or.prototype.N,Or.prototype.set=Or.prototype.set,Or.prototype.setProperties=Or.prototype.H,Or.prototype.unset=Or.prototype.R,Or.prototype.changed=Or.prototype.v,Or.prototype.dispatchEvent=Or.prototype.b,Or.prototype.getRevision=Or.prototype.K,Or.prototype.on=Or.prototype.I,Or.prototype.once=Or.prototype.L,Or.prototype.un=Or.prototype.J,Or.prototype.unByKey=Or.prototype.M,Br.prototype.getActive=Br.prototype.f,Br.prototype.getMap=Br.prototype.c,Br.prototype.setActive=Br.prototype.Ba,Br.prototype.get=Br.prototype.get,Br.prototype.getKeys=Br.prototype.O,Br.prototype.getProperties=Br.prototype.N,Br.prototype.set=Br.prototype.set,Br.prototype.setProperties=Br.prototype.H,Br.prototype.unset=Br.prototype.R,Br.prototype.changed=Br.prototype.v,Br.prototype.dispatchEvent=Br.prototype.b,Br.prototype.getRevision=Br.prototype.K,Br.prototype.on=Br.prototype.I,Br.prototype.once=Br.prototype.L,Br.prototype.un=Br.prototype.J,Br.prototype.unByKey=Br.prototype.M,Xr.prototype.getActive=Xr.prototype.f,Xr.prototype.getMap=Xr.prototype.c,Xr.prototype.setActive=Xr.prototype.Ba,Xr.prototype.get=Xr.prototype.get,Xr.prototype.getKeys=Xr.prototype.O,Xr.prototype.getProperties=Xr.prototype.N,Xr.prototype.set=Xr.prototype.set,Xr.prototype.setProperties=Xr.prototype.H,Xr.prototype.unset=Xr.prototype.R,Xr.prototype.changed=Xr.prototype.v,Xr.prototype.dispatchEvent=Xr.prototype.b,Xr.prototype.getRevision=Xr.prototype.K,Xr.prototype.on=Xr.prototype.I,Xr.prototype.once=Xr.prototype.L,Xr.prototype.un=Xr.prototype.J,Xr.prototype.unByKey=Xr.prototype.M,Mf.prototype.getActive=Mf.prototype.f,Mf.prototype.getMap=Mf.prototype.c,Mf.prototype.setActive=Mf.prototype.Ba,Mf.prototype.get=Mf.prototype.get,Mf.prototype.getKeys=Mf.prototype.O,Mf.prototype.getProperties=Mf.prototype.N,Mf.prototype.set=Mf.prototype.set,Mf.prototype.setProperties=Mf.prototype.H,Mf.prototype.unset=Mf.prototype.R,Mf.prototype.changed=Mf.prototype.v,Mf.prototype.dispatchEvent=Mf.prototype.b,Mf.prototype.getRevision=Mf.prototype.K,Mf.prototype.on=Mf.prototype.I,Mf.prototype.once=Mf.prototype.L,Mf.prototype.un=Mf.prototype.J,Mf.prototype.unByKey=Mf.prototype.M,Af.prototype.type=Af.prototype.type,Af.prototype.target=Af.prototype.target,Af.prototype.preventDefault=Af.prototype.preventDefault,Af.prototype.stopPropagation=Af.prototype.stopPropagation,jf.prototype.getActive=jf.prototype.f,jf.prototype.getMap=jf.prototype.c,jf.prototype.setActive=jf.prototype.Ba,jf.prototype.get=jf.prototype.get,jf.prototype.getKeys=jf.prototype.O,jf.prototype.getProperties=jf.prototype.N,jf.prototype.set=jf.prototype.set,jf.prototype.setProperties=jf.prototype.H,jf.prototype.unset=jf.prototype.R,jf.prototype.changed=jf.prototype.v,jf.prototype.dispatchEvent=jf.prototype.b,jf.prototype.getRevision=jf.prototype.K,jf.prototype.on=jf.prototype.I,jf.prototype.once=jf.prototype.L,jf.prototype.un=jf.prototype.J,jf.prototype.unByKey=jf.prototype.M,kf.prototype.getActive=kf.prototype.f,kf.prototype.getMap=kf.prototype.c,kf.prototype.setActive=kf.prototype.Ba,kf.prototype.get=kf.prototype.get,kf.prototype.getKeys=kf.prototype.O,kf.prototype.getProperties=kf.prototype.N,kf.prototype.set=kf.prototype.set,kf.prototype.setProperties=kf.prototype.H,kf.prototype.unset=kf.prototype.R,kf.prototype.changed=kf.prototype.v,kf.prototype.dispatchEvent=kf.prototype.b,kf.prototype.getRevision=kf.prototype.K,kf.prototype.on=kf.prototype.I,kf.prototype.once=kf.prototype.L,kf.prototype.un=kf.prototype.J,kf.prototype.unByKey=kf.prototype.M,Uf.prototype.type=Uf.prototype.type,Uf.prototype.target=Uf.prototype.target,Uf.prototype.preventDefault=Uf.prototype.preventDefault,Uf.prototype.stopPropagation=Uf.prototype.stopPropagation,ce.prototype.get=ce.prototype.get,ce.prototype.getKeys=ce.prototype.O,ce.prototype.getProperties=ce.prototype.N,ce.prototype.set=ce.prototype.set,ce.prototype.setProperties=ce.prototype.H,ce.prototype.unset=ce.prototype.R,ce.prototype.changed=ce.prototype.v,ce.prototype.dispatchEvent=ce.prototype.b,ce.prototype.getRevision=ce.prototype.K,ce.prototype.on=ce.prototype.I,ce.prototype.once=ce.prototype.L,ce.prototype.un=ce.prototype.J,ce.prototype.unByKey=ce.prototype.M,ye.prototype.getClosestPoint=ye.prototype.xb,ye.prototype.intersectsCoordinate=ye.prototype.jb,ye.prototype.getExtent=ye.prototype.D,ye.prototype.rotate=ye.prototype.rotate,ye.prototype.scale=ye.prototype.scale,ye.prototype.simplify=ye.prototype.Db,ye.prototype.transform=ye.prototype.lb,ye.prototype.get=ye.prototype.get,ye.prototype.getKeys=ye.prototype.O,ye.prototype.getProperties=ye.prototype.N,ye.prototype.set=ye.prototype.set,ye.prototype.setProperties=ye.prototype.H,ye.prototype.unset=ye.prototype.R,ye.prototype.changed=ye.prototype.v,ye.prototype.dispatchEvent=ye.prototype.b,ye.prototype.getRevision=ye.prototype.K,ye.prototype.on=ye.prototype.I,ye.prototype.once=ye.prototype.L,ye.prototype.un=ye.prototype.J,ye.prototype.unByKey=ye.prototype.M,sc.prototype.getFirstCoordinate=sc.prototype.Lb,sc.prototype.getLastCoordinate=sc.prototype.Mb,sc.prototype.getLayout=sc.prototype.Nb,sc.prototype.rotate=sc.prototype.rotate,sc.prototype.scale=sc.prototype.scale,sc.prototype.getClosestPoint=sc.prototype.xb,sc.prototype.intersectsCoordinate=sc.prototype.jb,sc.prototype.getExtent=sc.prototype.D,sc.prototype.simplify=sc.prototype.Db,sc.prototype.get=sc.prototype.get,sc.prototype.getKeys=sc.prototype.O,sc.prototype.getProperties=sc.prototype.N,sc.prototype.set=sc.prototype.set,sc.prototype.setProperties=sc.prototype.H,sc.prototype.unset=sc.prototype.R,sc.prototype.changed=sc.prototype.v,sc.prototype.dispatchEvent=sc.prototype.b,sc.prototype.getRevision=sc.prototype.K,sc.prototype.on=sc.prototype.I,sc.prototype.once=sc.prototype.L,sc.prototype.un=sc.prototype.J,sc.prototype.unByKey=sc.prototype.M,Uh.prototype.getClosestPoint=Uh.prototype.xb,Uh.prototype.intersectsCoordinate=Uh.prototype.jb,Uh.prototype.getExtent=Uh.prototype.D,Uh.prototype.rotate=Uh.prototype.rotate,Uh.prototype.scale=Uh.prototype.scale,Uh.prototype.simplify=Uh.prototype.Db,Uh.prototype.transform=Uh.prototype.lb,Uh.prototype.get=Uh.prototype.get,Uh.prototype.getKeys=Uh.prototype.O,Uh.prototype.getProperties=Uh.prototype.N,Uh.prototype.set=Uh.prototype.set,Uh.prototype.setProperties=Uh.prototype.H,Uh.prototype.unset=Uh.prototype.R,Uh.prototype.changed=Uh.prototype.v,Uh.prototype.dispatchEvent=Uh.prototype.b,Uh.prototype.getRevision=Uh.prototype.K,Uh.prototype.on=Uh.prototype.I,Uh.prototype.once=Uh.prototype.L,Uh.prototype.un=Uh.prototype.J,Uh.prototype.unByKey=Uh.prototype.M,Re.prototype.getFirstCoordinate=Re.prototype.Lb,Re.prototype.getLastCoordinate=Re.prototype.Mb,Re.prototype.getLayout=Re.prototype.Nb,Re.prototype.rotate=Re.prototype.rotate,Re.prototype.scale=Re.prototype.scale,Re.prototype.getClosestPoint=Re.prototype.xb,Re.prototype.intersectsCoordinate=Re.prototype.jb,Re.prototype.getExtent=Re.prototype.D,Re.prototype.simplify=Re.prototype.Db,Re.prototype.transform=Re.prototype.lb,Re.prototype.get=Re.prototype.get,Re.prototype.getKeys=Re.prototype.O,Re.prototype.getProperties=Re.prototype.N,Re.prototype.set=Re.prototype.set,Re.prototype.setProperties=Re.prototype.H,Re.prototype.unset=Re.prototype.R,Re.prototype.changed=Re.prototype.v,Re.prototype.dispatchEvent=Re.prototype.b,Re.prototype.getRevision=Re.prototype.K,Re.prototype.on=Re.prototype.I,Re.prototype.once=Re.prototype.L,Re.prototype.un=Re.prototype.J,Re.prototype.unByKey=Re.prototype.M,th.prototype.getFirstCoordinate=th.prototype.Lb,th.prototype.getLastCoordinate=th.prototype.Mb,th.prototype.getLayout=th.prototype.Nb,th.prototype.rotate=th.prototype.rotate,th.prototype.scale=th.prototype.scale,th.prototype.getClosestPoint=th.prototype.xb,th.prototype.intersectsCoordinate=th.prototype.jb,th.prototype.getExtent=th.prototype.D,th.prototype.simplify=th.prototype.Db,th.prototype.transform=th.prototype.lb,th.prototype.get=th.prototype.get,th.prototype.getKeys=th.prototype.O,th.prototype.getProperties=th.prototype.N,th.prototype.set=th.prototype.set,th.prototype.setProperties=th.prototype.H,th.prototype.unset=th.prototype.R,th.prototype.changed=th.prototype.v,th.prototype.dispatchEvent=th.prototype.b,th.prototype.getRevision=th.prototype.K,th.prototype.on=th.prototype.I,th.prototype.once=th.prototype.L,th.prototype.un=th.prototype.J,th.prototype.unByKey=th.prototype.M,oh.prototype.getFirstCoordinate=oh.prototype.Lb,oh.prototype.getLastCoordinate=oh.prototype.Mb,oh.prototype.getLayout=oh.prototype.Nb,oh.prototype.rotate=oh.prototype.rotate,oh.prototype.scale=oh.prototype.scale,oh.prototype.getClosestPoint=oh.prototype.xb,oh.prototype.intersectsCoordinate=oh.prototype.jb,oh.prototype.getExtent=oh.prototype.D,oh.prototype.simplify=oh.prototype.Db,oh.prototype.transform=oh.prototype.lb,oh.prototype.get=oh.prototype.get,oh.prototype.getKeys=oh.prototype.O,oh.prototype.getProperties=oh.prototype.N,oh.prototype.set=oh.prototype.set,oh.prototype.setProperties=oh.prototype.H,oh.prototype.unset=oh.prototype.R,oh.prototype.changed=oh.prototype.v,oh.prototype.dispatchEvent=oh.prototype.b,oh.prototype.getRevision=oh.prototype.K,oh.prototype.on=oh.prototype.I,oh.prototype.once=oh.prototype.L,oh.prototype.un=oh.prototype.J,oh.prototype.unByKey=oh.prototype.M,nh.prototype.getFirstCoordinate=nh.prototype.Lb,nh.prototype.getLastCoordinate=nh.prototype.Mb,nh.prototype.getLayout=nh.prototype.Nb,nh.prototype.rotate=nh.prototype.rotate,nh.prototype.scale=nh.prototype.scale,nh.prototype.getClosestPoint=nh.prototype.xb,nh.prototype.intersectsCoordinate=nh.prototype.jb,nh.prototype.getExtent=nh.prototype.D,nh.prototype.simplify=nh.prototype.Db,nh.prototype.transform=nh.prototype.lb,nh.prototype.get=nh.prototype.get,nh.prototype.getKeys=nh.prototype.O,nh.prototype.getProperties=nh.prototype.N,nh.prototype.set=nh.prototype.set,nh.prototype.setProperties=nh.prototype.H,nh.prototype.unset=nh.prototype.R,nh.prototype.changed=nh.prototype.v,nh.prototype.dispatchEvent=nh.prototype.b,nh.prototype.getRevision=nh.prototype.K,nh.prototype.on=nh.prototype.I,nh.prototype.once=nh.prototype.L,nh.prototype.un=nh.prototype.J,nh.prototype.unByKey=nh.prototype.M,sh.prototype.getFirstCoordinate=sh.prototype.Lb,sh.prototype.getLastCoordinate=sh.prototype.Mb,sh.prototype.getLayout=sh.prototype.Nb,sh.prototype.rotate=sh.prototype.rotate,sh.prototype.scale=sh.prototype.scale,sh.prototype.getClosestPoint=sh.prototype.xb,sh.prototype.intersectsCoordinate=sh.prototype.jb,sh.prototype.getExtent=sh.prototype.D,sh.prototype.simplify=sh.prototype.Db,sh.prototype.transform=sh.prototype.lb,sh.prototype.get=sh.prototype.get,sh.prototype.getKeys=sh.prototype.O,sh.prototype.getProperties=sh.prototype.N,sh.prototype.set=sh.prototype.set,sh.prototype.setProperties=sh.prototype.H,sh.prototype.unset=sh.prototype.R,sh.prototype.changed=sh.prototype.v,sh.prototype.dispatchEvent=sh.prototype.b,sh.prototype.getRevision=sh.prototype.K,sh.prototype.on=sh.prototype.I,sh.prototype.once=sh.prototype.L,sh.prototype.un=sh.prototype.J,sh.prototype.unByKey=sh.prototype.M,Ie.prototype.getFirstCoordinate=Ie.prototype.Lb,Ie.prototype.getLastCoordinate=Ie.prototype.Mb,Ie.prototype.getLayout=Ie.prototype.Nb,Ie.prototype.rotate=Ie.prototype.rotate,Ie.prototype.scale=Ie.prototype.scale,Ie.prototype.getClosestPoint=Ie.prototype.xb,Ie.prototype.intersectsCoordinate=Ie.prototype.jb,Ie.prototype.getExtent=Ie.prototype.D,Ie.prototype.simplify=Ie.prototype.Db,Ie.prototype.transform=Ie.prototype.lb,Ie.prototype.get=Ie.prototype.get,Ie.prototype.getKeys=Ie.prototype.O,Ie.prototype.getProperties=Ie.prototype.N,Ie.prototype.set=Ie.prototype.set,Ie.prototype.setProperties=Ie.prototype.H,Ie.prototype.unset=Ie.prototype.R,Ie.prototype.changed=Ie.prototype.v,Ie.prototype.dispatchEvent=Ie.prototype.b,Ie.prototype.getRevision=Ie.prototype.K,Ie.prototype.on=Ie.prototype.I,Ie.prototype.once=Ie.prototype.L,Ie.prototype.un=Ie.prototype.J,Ie.prototype.unByKey=Ie.prototype.M,ze.prototype.getFirstCoordinate=ze.prototype.Lb,ze.prototype.getLastCoordinate=ze.prototype.Mb,ze.prototype.getLayout=ze.prototype.Nb,ze.prototype.rotate=ze.prototype.rotate,ze.prototype.scale=ze.prototype.scale,ze.prototype.getClosestPoint=ze.prototype.xb,ze.prototype.intersectsCoordinate=ze.prototype.jb,ze.prototype.getExtent=ze.prototype.D,ze.prototype.simplify=ze.prototype.Db,ze.prototype.transform=ze.prototype.lb,ze.prototype.get=ze.prototype.get,ze.prototype.getKeys=ze.prototype.O,ze.prototype.getProperties=ze.prototype.N,ze.prototype.set=ze.prototype.set,ze.prototype.setProperties=ze.prototype.H,ze.prototype.unset=ze.prototype.R,ze.prototype.changed=ze.prototype.v,ze.prototype.dispatchEvent=ze.prototype.b,ze.prototype.getRevision=ze.prototype.K,ze.prototype.on=ze.prototype.I,ze.prototype.once=ze.prototype.L,ze.prototype.un=ze.prototype.J,ze.prototype.unByKey=ze.prototype.M,al.prototype.readFeatures=al.prototype.Ha,ll.prototype.readFeatures=ll.prototype.Ha,al.prototype.readFeatures=al.prototype.Ha,qo.prototype.get=qo.prototype.get,qo.prototype.getKeys=qo.prototype.O,qo.prototype.getProperties=qo.prototype.N,qo.prototype.set=qo.prototype.set,qo.prototype.setProperties=qo.prototype.H,qo.prototype.unset=qo.prototype.R,qo.prototype.changed=qo.prototype.v,qo.prototype.dispatchEvent=qo.prototype.b,qo.prototype.getRevision=qo.prototype.K,qo.prototype.on=qo.prototype.I,qo.prototype.once=qo.prototype.L,qo.prototype.un=qo.prototype.J,qo.prototype.unByKey=qo.prototype.M,Vo.prototype.getMap=Vo.prototype.i,Vo.prototype.setMap=Vo.prototype.setMap,Vo.prototype.setTarget=Vo.prototype.c,Vo.prototype.get=Vo.prototype.get,Vo.prototype.getKeys=Vo.prototype.O,Vo.prototype.getProperties=Vo.prototype.N,Vo.prototype.set=Vo.prototype.set,Vo.prototype.setProperties=Vo.prototype.H,Vo.prototype.unset=Vo.prototype.R,Vo.prototype.changed=Vo.prototype.v,Vo.prototype.dispatchEvent=Vo.prototype.b,Vo.prototype.getRevision=Vo.prototype.K,Vo.prototype.on=Vo.prototype.I,Vo.prototype.once=Vo.prototype.L,Vo.prototype.un=Vo.prototype.J,Vo.prototype.unByKey=Vo.prototype.M,Jo.prototype.getMap=Jo.prototype.i,Jo.prototype.setMap=Jo.prototype.setMap,Jo.prototype.setTarget=Jo.prototype.c,Jo.prototype.get=Jo.prototype.get,Jo.prototype.getKeys=Jo.prototype.O,Jo.prototype.getProperties=Jo.prototype.N,Jo.prototype.set=Jo.prototype.set,Jo.prototype.setProperties=Jo.prototype.H,Jo.prototype.unset=Jo.prototype.R,Jo.prototype.changed=Jo.prototype.v,Jo.prototype.dispatchEvent=Jo.prototype.b,Jo.prototype.getRevision=Jo.prototype.K,Jo.prototype.on=Jo.prototype.I,Jo.prototype.once=Jo.prototype.L,Jo.prototype.un=Jo.prototype.J,Jo.prototype.unByKey=Jo.prototype.M,ni.prototype.getMap=ni.prototype.i,ni.prototype.setMap=ni.prototype.setMap,ni.prototype.setTarget=ni.prototype.c,ni.prototype.get=ni.prototype.get,ni.prototype.getKeys=ni.prototype.O,ni.prototype.getProperties=ni.prototype.N,ni.prototype.set=ni.prototype.set,ni.prototype.setProperties=ni.prototype.H,ni.prototype.unset=ni.prototype.R,ni.prototype.changed=ni.prototype.v,ni.prototype.dispatchEvent=ni.prototype.b,ni.prototype.getRevision=ni.prototype.K,ni.prototype.on=ni.prototype.I,ni.prototype.once=ni.prototype.L,ni.prototype.un=ni.prototype.J,ni.prototype.unByKey=ni.prototype.M,sa.prototype.getMap=sa.prototype.i,sa.prototype.setMap=sa.prototype.setMap,sa.prototype.setTarget=sa.prototype.c,sa.prototype.get=sa.prototype.get,sa.prototype.getKeys=sa.prototype.O,sa.prototype.getProperties=sa.prototype.N,sa.prototype.set=sa.prototype.set,sa.prototype.setProperties=sa.prototype.H,sa.prototype.unset=sa.prototype.R,sa.prototype.changed=sa.prototype.v,sa.prototype.dispatchEvent=sa.prototype.b,sa.prototype.getRevision=sa.prototype.K,sa.prototype.on=sa.prototype.I,sa.prototype.once=sa.prototype.L,sa.prototype.un=sa.prototype.J,sa.prototype.unByKey=sa.prototype.M,ei.prototype.getMap=ei.prototype.i,ei.prototype.setMap=ei.prototype.setMap,ei.prototype.setTarget=ei.prototype.c,ei.prototype.get=ei.prototype.get,ei.prototype.getKeys=ei.prototype.O,ei.prototype.getProperties=ei.prototype.N,ei.prototype.set=ei.prototype.set,ei.prototype.setProperties=ei.prototype.H,ei.prototype.unset=ei.prototype.R,ei.prototype.changed=ei.prototype.v,ei.prototype.dispatchEvent=ei.prototype.b,ei.prototype.getRevision=ei.prototype.K,ei.prototype.on=ei.prototype.I,ei.prototype.once=ei.prototype.L,ei.prototype.un=ei.prototype.J,ei.prototype.unByKey=ei.prototype.M,ua.prototype.getMap=ua.prototype.i,ua.prototype.setMap=ua.prototype.setMap,ua.prototype.setTarget=ua.prototype.c,ua.prototype.get=ua.prototype.get,ua.prototype.getKeys=ua.prototype.O,ua.prototype.getProperties=ua.prototype.N,ua.prototype.set=ua.prototype.set,ua.prototype.setProperties=ua.prototype.H,ua.prototype.unset=ua.prototype.R,ua.prototype.changed=ua.prototype.v,ua.prototype.dispatchEvent=ua.prototype.b,ua.prototype.getRevision=ua.prototype.K,ua.prototype.on=ua.prototype.I,ua.prototype.once=ua.prototype.L,ua.prototype.un=ua.prototype.J,ua.prototype.unByKey=ua.prototype.M,ii.prototype.getMap=ii.prototype.i,ii.prototype.setMap=ii.prototype.setMap,ii.prototype.setTarget=ii.prototype.c,ii.prototype.get=ii.prototype.get,ii.prototype.getKeys=ii.prototype.O,ii.prototype.getProperties=ii.prototype.N,ii.prototype.set=ii.prototype.set,ii.prototype.setProperties=ii.prototype.H,ii.prototype.unset=ii.prototype.R,ii.prototype.changed=ii.prototype.v,ii.prototype.dispatchEvent=ii.prototype.b,ii.prototype.getRevision=ii.prototype.K,ii.prototype.on=ii.prototype.I,ii.prototype.once=ii.prototype.L,ii.prototype.un=ii.prototype.J,ii.prototype.unByKey=ii.prototype.M,ya.prototype.getMap=ya.prototype.i,ya.prototype.setMap=ya.prototype.setMap,ya.prototype.setTarget=ya.prototype.c,ya.prototype.get=ya.prototype.get,ya.prototype.getKeys=ya.prototype.O,ya.prototype.getProperties=ya.prototype.N,ya.prototype.set=ya.prototype.set,ya.prototype.setProperties=ya.prototype.H,ya.prototype.unset=ya.prototype.R,ya.prototype.changed=ya.prototype.v,ya.prototype.dispatchEvent=ya.prototype.b,ya.prototype.getRevision=ya.prototype.K,ya.prototype.on=ya.prototype.I,ya.prototype.once=ya.prototype.L,ya.prototype.un=ya.prototype.J,ya.prototype.unByKey=ya.prototype.M,ma.prototype.getMap=ma.prototype.i,ma.prototype.setMap=ma.prototype.setMap,ma.prototype.setTarget=ma.prototype.c,ma.prototype.get=ma.prototype.get,ma.prototype.getKeys=ma.prototype.O,ma.prototype.getProperties=ma.prototype.N,ma.prototype.set=ma.prototype.set,ma.prototype.setProperties=ma.prototype.H,ma.prototype.unset=ma.prototype.R,ma.prototype.changed=ma.prototype.v,ma.prototype.dispatchEvent=ma.prototype.b,ma.prototype.getRevision=ma.prototype.K,ma.prototype.on=ma.prototype.I,ma.prototype.once=ma.prototype.L,ma.prototype.un=ma.prototype.J,ma.prototype.unByKey=ma.prototype.M,nd.ol});var map,extent,overlays=[],vectorSource=new ol.source.Vector,lastClick,popupOverlay,vectorLayer;$(document).ready(function(){initMap(),$("#closer").click(function(){toggleResults()}),map.on("singleclick",function(t){var e=t.coordinate;lastClick=e}),$(window).resize(function(){updateResultsPosition(),updateCloserPosition()})});var options={enableHighAccuracy:!0,timeout:5e3,maximumAge:0};!function(t,e){"use strict";function o(e,o,i){"addEventListener"in t?e.addEventListener(o,i,!1):"attachEvent"in t&&e.attachEvent("on"+o,i)}function i(e,o,i){"removeEventListener"in t?e.removeEventListener(o,i,!1):"detachEvent"in t&&e.detachEvent("on"+o,i)}function r(t){return t.charAt(0).toUpperCase()+t.slice(1)}function n(t){var e,o,i,r=null,n=0,s=function(){n=Rt(),r=null,i=t.apply(e,o),r||(e=o=null);
-};return function(){var p=Rt();n||(n=p);var a=Tt-(p-n);return e=this,o=arguments,0>=a||a>Tt?(r&&(clearTimeout(r),r=null),n=p,i=t.apply(e,o),r||(e=o=null)):r||(r=setTimeout(s,a)),i}}function s(e){ut&&"object"==typeof t.console&&void 0}function p(e){"object"==typeof t.console&&void 0}function a(){h(),s("Initialising iFrame ("+location.href+")"),l(),f(),c("background",V),c("padding",_),C(),m(),b(),y(),A(),w(),at=P(),U("init","Init message from host page"),jt()}function h(){function t(t){return"true"===t}var o=pt.substr(ft).split(":");yt=o[0],Y=e!==o[1]?Number(o[1]):Y,Q=e!==o[2]?t(o[2]):Q,ut=e!==o[3]?t(o[3]):ut,ht=e!==o[4]?Number(o[4]):ht,z=e!==o[6]?t(o[6]):z,Z=o[7],nt=e!==o[8]?o[8]:nt,V=o[9],_=o[10],wt=e!==o[11]?Number(o[11]):wt,at.enable=e!==o[12]&&t(o[12]),gt=e!==o[13]?o[13]:gt,Ct=e!==o[14]?o[14]:Ct}function l(){function e(){var e=t.iFrameResizer;s("Reading data from page: "+JSON.stringify(e)),At="messageCallback"in e?e.messageCallback:At,jt="readyCallback"in e?e.readyCallback:jt,bt="targetOrigin"in e?e.targetOrigin:bt,nt="heightCalculationMethod"in e?e.heightCalculationMethod:nt,Ct="widthCalculationMethod"in e?e.widthCalculationMethod:Ct}function o(t,e){return"function"==typeof t&&(s("Setup custom "+e+"CalcMethod"),Lt[e]=t,t="custom"),t}"iFrameResizer"in t&&Object===t.iFrameResizer.constructor&&(e(),nt=o(nt,"height"),Ct=o(Ct,"width")),s("TargetOrigin for parent set to: "+bt)}function u(t,e){return-1!==e.indexOf("-")&&(p("Negative CSS value ignored for "+t),e=""),e}function c(t,o){e!==o&&""!==o&&"null"!==o&&(document.body.style[t]=o,s("Body "+t+' set to "'+o+'"'))}function f(){e===Z&&(Z=Y+"px"),c("margin",u("margin",Z))}function y(){document.documentElement.style.height="",document.body.style.height="",s('HTML & body height set to "auto"')}function d(e){function n(){U(e.eventName,e.eventType)}var p={add:function(e){o(t,e,n)},remove:function(e){i(t,e,n)}};e.eventNames&&Array.prototype.map?(e.eventName=e.eventNames[0],e.eventNames.map(p[e.method])):p[e.method](e.eventName),s(r(e.method)+" event listener: "+e.eventType)}function g(t){d({method:t,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),d({method:t,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),d({method:t,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),d({method:t,eventType:"Input",eventName:"input"}),d({method:t,eventType:"Mouse Up",eventName:"mouseup"}),d({method:t,eventType:"Mouse Down",eventName:"mousedown"}),d({method:t,eventType:"Orientation Change",eventName:"orientationchange"}),d({method:t,eventType:"Print",eventName:["afterprint","beforeprint"]}),d({method:t,eventType:"Ready State Change",eventName:"readystatechange"}),d({method:t,eventType:"Touch Start",eventName:"touchstart"}),d({method:t,eventType:"Touch End",eventName:"touchend"}),d({method:t,eventType:"Touch Cancel",eventName:"touchcancel"}),d({method:t,eventType:"Transition Start",eventNames:["transitionstart","webkitTransitionStart","MSTransitionStart","oTransitionStart","otransitionstart"]}),d({method:t,eventType:"Transition Iteration",eventNames:["transitioniteration","webkitTransitionIteration","MSTransitionIteration","oTransitionIteration","otransitioniteration"]}),d({method:t,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),"child"===gt&&d({method:t,eventType:"IFrame Resized",eventName:"resize"})}function v(t,e,o,i){return e!==t&&(t in o||(p(t+" is not a valid option for "+i+"CalculationMethod."),t=e),s(i+' calculation method set to "'+t+'"')),t}function m(){nt=v(nt,rt,kt,"height")}function b(){Ct=v(Ct,Mt,It,"width")}function w(){!0===z?(g("add"),L()):s("Auto Resize disabled")}function x(){s("Disable outgoing messages"),vt=!1}function S(){s("Remove event listener: Message"),i(t,"message",$)}function T(){null!==J&&J.disconnect()}function E(){g("remove"),T(),clearInterval(lt)}function M(){x(),S(),!0===z&&E()}function C(){var t=document.createElement("div");t.style.clear="both",t.style.display="block",document.body.appendChild(t)}function P(){function i(){return{x:t.pageXOffset!==e?t.pageXOffset:document.documentElement.scrollLeft,y:t.pageYOffset!==e?t.pageYOffset:document.documentElement.scrollTop}}function r(t){var e=t.getBoundingClientRect(),o=i();return{x:parseInt(e.left,10)+parseInt(o.x,10),y:parseInt(e.top,10)+parseInt(o.y,10)}}function n(t){function o(t){var e=r(t);s("Moving to in page link (#"+i+") at x: "+e.x+" y: "+e.y),W(e.y,e.x,"scrollToOffset")}var i=t.split("#")[1]||t,n=decodeURIComponent(i),p=document.getElementById(n)||document.getElementsByName(n)[0];e!==p?o(p):(s("In page link (#"+i+") not found in iFrame, so sending to parent"),W(0,0,"inPageLink","#"+i))}function a(){""!==location.hash&&"#"!==location.hash&&n(location.href)}function h(){function t(t){function e(t){t.preventDefault(),n(this.getAttribute("href"))}"#"!==t.getAttribute("href")&&o(t,"click",e)}Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),t)}function l(){o(t,"hashchange",a)}function u(){setTimeout(a,et)}function c(){Array.prototype.forEach&&document.querySelectorAll?(s("Setting up location.hash handlers"),h(),l(),u()):p("In page linking not fully supported in this browser! (See README.md for IE8 workaround)")}return at.enable?c():s("In page linking not enabled"),{findTarget:n}}function A(){s("Enable public methods"),Pt.parentIFrame={autoResize:function(t){return!0===t&&!1===z?(z=!0,w()):!1===t&&!0===z&&(z=!1,E()),z},close:function(){W(0,0,"close"),M()},getId:function(){return yt},getPageInfo:function(t){"function"==typeof t?(Nt=t,W(0,0,"pageInfo")):(Nt=function(){},W(0,0,"pageInfoStop"))},moveToAnchor:function(t){at.findTarget(t)},reset:function(){X("parentIFrame.reset")},scrollTo:function(t,e){W(e,t,"scrollTo")},scrollToOffset:function(t,e){W(e,t,"scrollToOffset")},sendMessage:function(t,e){W(0,0,"message",JSON.stringify(t),e)},setHeightCalculationMethod:function(t){nt=t,m()},setWidthCalculationMethod:function(t){Ct=t,b()},setTargetOrigin:function(t){s("Set targetOrigin: "+t),bt=t},size:function(t,e){var o=""+(t?t:"")+(e?","+e:"");U("size","parentIFrame.size("+o+")",t,e)}}}function j(){0!==ht&&(s("setInterval: "+ht+"ms"),lt=setInterval(function(){U("interval","setInterval: "+ht)},Math.abs(ht)))}function N(){function o(t){function e(t){!1===t.complete&&(s("Attach listeners to "+t.src),t.addEventListener("load",p,!1),t.addEventListener("error",a,!1),u.push(t))}"attributes"===t.type&&"src"===t.attributeName?e(t.target):"childList"===t.type&&Array.prototype.forEach.call(t.target.querySelectorAll("img"),e)}function i(t){u.splice(u.indexOf(t),1)}function r(t){s("Remove listeners from "+t.src),t.removeEventListener("load",p,!1),t.removeEventListener("error",a,!1),i(t)}function n(t,o,i){r(t.target),U(o,i+": "+t.target.src,e,e)}function p(t){n(t,"imageLoad","Image loaded")}function a(t){n(t,"imageLoadFailed","Image load failed")}function h(t){U("mutationObserver","mutationObserver: "+t[0].target+" "+t[0].type),t.forEach(o)}function l(){var t=document.querySelector("body"),e={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0};return f=new c(h),s("Create body MutationObserver"),f.observe(t,e),f}var u=[],c=t.MutationObserver||t.WebKitMutationObserver,f=l();return{disconnect:function(){"disconnect"in f&&(s("Disconnect body MutationObserver"),f.disconnect(),u.forEach(r))}}}function L(){var e=0>ht;t.MutationObserver||t.WebKitMutationObserver?e?j():J=N():(s("MutationObserver not supported in this browser!"),j())}function R(t,e){function o(t){var o=/^\d+(px)?$/i;if(o.test(t))return parseInt(t,q);var i=e.style.left,r=e.runtimeStyle.left;return e.runtimeStyle.left=e.currentStyle.left,e.style.left=t||0,t=e.style.pixelLeft,e.style.left=i,e.runtimeStyle.left=r,t}var i=0;return e=e||document.body,"defaultView"in document&&"getComputedStyle"in document.defaultView?(i=document.defaultView.getComputedStyle(e,null),i=null!==i?i[t]:0):i=o(e.currentStyle[t]),parseInt(i,q)}function k(t){t>Tt/2&&(Tt=2*t,s("Event throttle increased to "+Tt+"ms"))}function I(t,e){for(var o=e.length,i=0,n=0,p=r(t),a=Rt(),h=0;o>h;h++)i=e[h].getBoundingClientRect()[t]+R("margin"+p,e[h]),i>n&&(n=i);return a=Rt()-a,s("Parsed "+o+" HTML elements"),s("Element position calculated in "+a+"ms"),k(a),n}function D(t){return[t.bodyOffset(),t.bodyScroll(),t.documentElementOffset(),t.documentElementScroll()]}function O(t,e){function o(){return p("No tagged elements ("+e+") found on page"),it}var i=document.querySelectorAll("["+e+"]");return 0===i.length?o():I(t,i)}function F(){return document.querySelectorAll("body *")}function B(t,o,i,r){function n(){it=c,Et=f,W(it,Et,t)}function p(){function t(t,e){var o=Math.abs(t-e)<=wt;return!o}return c=e!==i?i:kt[nt](),f=e!==r?r:It[Ct](),t(it,c)||Q&&t(Et,f)}function a(){return!(t in{init:1,interval:1,size:1})}function h(){return nt in dt||Q&&Ct in dt}function l(){s("No change in size detected")}function u(){a()&&h()?X(o):t in{interval:1}||l()}var c,f;p()||"init"===t?(G(),n()):u()}function U(t,e,o,i){function r(){t in{reset:1,resetPage:1,init:1}||s("Trigger event: "+e)}function n(){return xt&&t in tt}n()?s("Trigger event cancelled: "+t):(r(),Dt(t,e,o,i))}function G(){xt||(xt=!0,s("Trigger event lock on")),clearTimeout(St),St=setTimeout(function(){xt=!1,s("Trigger event lock off"),s("--")},et)}function H(t){it=kt[nt](),Et=It[Ct](),W(it,Et,t)}function X(t){var e=nt;nt=rt,s("Reset trigger event: "+t),G(),H("reset"),nt=e}function W(t,o,i,r,n){function p(){e===n?n=bt:s("Message targetOrigin: "+n)}function a(){var p=t+":"+o,a=yt+":"+p+":"+i+(e!==r?":"+r:"");s("Sending message to host page ("+a+")"),mt.postMessage(ct+a,n)}!0===vt&&(p(),a())}function $(e){function i(){return ct===(""+e.data).substr(0,ft)}function r(){function i(){pt=e.data,mt=e.source,a(),ot=!1,setTimeout(function(){st=!1},et)}document.body?i():(s("Waiting for page ready"),o(t,"readystatechange",r))}function n(){st?s("Page reset ignored by init"):(s("Page size reset by host page"),H("resetPage"))}function h(){U("resizeParent","Parent window requested size check")}function l(){var t=c();at.findTarget(t)}function u(){return e.data.split("]")[1].split(":")[0]}function c(){return e.data.substr(e.data.indexOf(":")+1)}function f(){return"iFrameResize"in t}function y(){var t=c();s("MessageCallback called from parent: "+t),At(JSON.parse(t)),s(" --")}function d(){var t=c();s("PageInfoFromParent called from parent: "+t),Nt(JSON.parse(t)),s(" --")}function g(){return e.data.split(":")[2]in{"true":1,"false":1}}function v(){switch(u()){case"reset":n();break;case"resize":h();break;case"inPageLink":case"moveToAnchor":l();break;case"message":y();break;case"pageInfo":d();break;default:f()||g()||p("Unexpected message ("+e.data+")")}}function m(){!1===ot?v():g()?r():s('Ignored message of type "'+u()+'". Received before initialization.')}i()&&m()}function K(){"loading"!==document.readyState&&t.parent.postMessage("[iFrameResizerChild]Ready","*")}var z=!0,q=10,V="",Y=0,Z="",J=null,_="",Q=!1,tt={resize:1,click:1},et=128,ot=!0,it=1,rt="bodyOffset",nt=rt,st=!0,pt="",at={},ht=32,lt=null,ut=!1,ct="[iFrameSizer]",ft=ct.length,yt="",dt={max:1,min:1,bodyScroll:1,documentElementScroll:1},gt="child",vt=!0,mt=t.parent,bt="*",wt=0,xt=!1,St=null,Tt=16,Et=1,Mt="scroll",Ct=Mt,Pt=t,At=function(){p("MessageCallback function not defined")},jt=function(){},Nt=function(){},Lt={height:function(){return p("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return p("Custom width calculation function not defined"),document.body.scrollWidth}},Rt=Date.now||function(){return(new Date).getTime()},kt={bodyOffset:function(){return document.body.offsetHeight+R("marginTop")+R("marginBottom")},offset:function(){return kt.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return Lt.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,D(kt))},min:function(){return Math.min.apply(null,D(kt))},grow:function(){return kt.max()},lowestElement:function(){return Math.max(kt.bodyOffset(),I("bottom",F()))},taggedElement:function(){return O("bottom","data-iframe-height")}},It={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return Lt.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(It.bodyScroll(),It.documentElementScroll())},max:function(){return Math.max.apply(null,D(It))},min:function(){return Math.min.apply(null,D(It))},rightMostElement:function(){return I("right",F())},taggedElement:function(){return O("right","data-iframe-width")}},Dt=n(B);o(t,"message",$),K()}(window||{});
\ No newline at end of file
+function success(t){var e=t.coords;map.getView().setCenter(ol.proj.transform([e.longitude,e.latitude],"EPSG:4326","EPSG:3857")),map.getView().setZoom(12),updateMapExtent()}function error(t){}function receiveLocation(){navigator.geolocation.getCurrentPosition(success,error,options)}function updateMapExtent(){var t=map.getView().calculateExtent([$("#map").width(),$("#map").height()]);extent=ol.proj.transform([t[0],t[1]],"EPSG:3857","EPSG:4326").concat(ol.proj.transform([t[2],t[3]],"EPSG:3857","EPSG:4326"))}function numberWithPoints(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,".")}function toggleResults(){"in"===$("#results").attr("data-status")?($("#closer").html("<"),$("#results").attr("data-status","out"),$("#closer").attr("title","Ergebnisse ausklappen"),updateResultsPosition(),updateCloserPosition()):($("#closer").html(">"),$("#results").attr("data-status","in"),$("#closer").attr("title","Ergebnisse einklappen"),updateResultsPosition(),updateCloserPosition())}function updateResultsPosition(){if("out"===$("#results").attr("data-status")){var t=$("#results").outerWidth()*-1;$("#results").css("right",t+"px")}else $("#results").css("right",0)}function updateCloserPosition(){if("out"===$("#results").attr("data-status"))$("#closer").css("right","0px");else{var t=$(window).width(),e=$("#results").width()-1,o=$("#closer").width();t>e+o?$("#closer").css("right",e+"px"):$("#closer").css("right",e-o+"px")}}function adjustView(t){if(!(t.length<=0)){for(var e=[],o=[],i=0;i<t.length&&(("undefined"==typeof e[0]||e[0]>parseFloat(t[i].lon))&&(e[0]=parseFloat(t[i].lon)),("undefined"==typeof e[0]||"undefined"!=typeof t[i].boundingbox&&e[0]>parseFloat(t[i].boundingbox[2]))&&(e[0]=parseFloat(t[i].boundingbox[2])),("undefined"==typeof e[1]||e[1]>parseFloat(t[i].lat))&&(e[1]=parseFloat(t[i].lat)),("undefined"==typeof e[1]||"undefined"!=typeof t[i].boundingbox&&e[1]>parseFloat(t[i].boundingbox[0]))&&(e[1]=parseFloat(t[i].boundingbox[0])),("undefined"==typeof o[0]||o[0]<parseFloat(t[i].lon))&&(o[0]=parseFloat(t[i].lon)),("undefined"==typeof o[0]||"undefined"!=typeof t[i].boundingbox&&o[0]<parseFloat(t[i].boundingbox[3]))&&(o[0]=parseFloat(t[i].boundingbox[3])),("undefined"==typeof o[1]||o[1]<parseFloat(t[i].lat))&&(o[1]=parseFloat(t[i].lat)),("undefined"==typeof o[1]||"undefined"!=typeof t[i].boundingbox&&o[1]<parseFloat(t[i].boundingbox[1]))&&(o[1]=parseFloat(t[i].boundingbox[1])),"undefined"==typeof t[i].type||"city"!==t[i].type&&"administrative"!==t[i].type&&"river"!==t[i].type);i++);e=ol.proj.transform(e,"EPSG:4326","EPSG:3857"),o=ol.proj.transform(o,"EPSG:4326","EPSG:3857"),map.getView().fitExtent([e[0],e[1],o[0],o[1]],map.getSize())}}function clearPOIS(){$.each(overlays,function(t,e){map.removeOverlay(e)}),map.removeLayer(vectorLayer),vectorSource=new ol.source.Vector,$("#results > .result").remove(),$("#results > h4").remove(),overlays=[]}function addMarker(t,e){var o=new ol.Overlay({position:e,element:t,offset:[-12,-45],stopEvent:!1});map.addOverlay(o),overlays.push(o)}function initMap(){popupOverlay=new ol.Overlay({element:$("#popup"),autoPan:!0,autoPanAnimation:{duration:250}}),map=new ol.Map({layers:[new ol.layer.Tile({preload:1/0,source:new ol.source.OSM({attributions:[new ol.Attribution({html:'All search results &copy; <a href="http://nominatim.openstreetmap.org/">Nominatim</a>'}),ol.source.OSM.ATTRIBUTION],url:"https://maps.metager.de/osm_tiles/{z}/{x}/{y}.png"})})],target:"map",controls:[],interactions:ol.interaction.defaults({doubleClickZoom:!1,dragAndDrop:!1,dragPan:!1,dragBox:!1,dragRotate:!1,dragRotateAndZoom:!1,dragZoom:!1,draw:!1,extent:!1,interaction:!1,pointer:!1,keyboardPan:!1,keyboardZoom:!1,modify:!1,pinchRotate:!1,pinchZoom:!1,snap:!1,translate:!1,mouseWheelZoom:!1,pointer:!1,select:!1}),overlays:[popupOverlay],view:new ol.View({maxZoom:18,minZoom:5,center:ol.proj.transform([10.06897,51.37247],"EPSG:4326","EPSG:3857"),zoom:5}),loadTilesWhileAnimating:!0,loadTilesWhileInteracting:!0}),map.addControl(new ol.control.ZoomSlider),$("#popup-closer").click(function(){return popupOverlay.setPosition(void 0),$(this).blur(),!1})}if(!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function o(t){var e=t.length,o=nt.type(t);return"function"!==o&&!nt.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===o||0===e||"number"==typeof e&&e>0&&e-1 in t))}function i(t,e,o){if(nt.isFunction(e))return nt.grep(t,function(t,i){return!!e.call(t,i,t)!==o});if(e.nodeType)return nt.grep(t,function(t){return t===e!==o});if("string"==typeof e){if(ct.test(e))return nt.filter(e,t,o);e=nt.filter(e,t)}return nt.grep(t,function(t){return nt.inArray(t,e)>=0!==o})}function n(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function r(t){var e=wt[t]={};return nt.each(t.match(bt)||[],function(t,o){e[o]=!0}),e}function s(){yt.addEventListener?(yt.removeEventListener("DOMContentLoaded",a,!1),t.removeEventListener("load",a,!1)):(yt.detachEvent("onreadystatechange",a),t.detachEvent("onload",a))}function a(){(yt.addEventListener||"load"===event.type||"complete"===yt.readyState)&&(s(),nt.ready())}function p(t,e,o){if(void 0===o&&1===t.nodeType){var i="data-"+e.replace(Ct,"-$1").toLowerCase();if(o=t.getAttribute(i),"string"==typeof o){try{o="true"===o||"false"!==o&&("null"===o?null:+o+""===o?+o:Mt.test(o)?nt.parseJSON(o):o)}catch(n){}nt.data(t,e,o)}else o=void 0}return o}function l(t){var e;for(e in t)if(("data"!==e||!nt.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function h(t,e,o,i){if(nt.acceptData(t)){var n,r,s=nt.expando,a=t.nodeType,p=a?nt.cache:t,l=a?t[s]:t[s]&&s;if(l&&p[l]&&(i||p[l].data)||void 0!==o||"string"!=typeof e)return l||(l=a?t[s]=V.pop()||nt.guid++:s),p[l]||(p[l]=a?{}:{toJSON:nt.noop}),("object"==typeof e||"function"==typeof e)&&(i?p[l]=nt.extend(p[l],e):p[l].data=nt.extend(p[l].data,e)),r=p[l],i||(r.data||(r.data={}),r=r.data),void 0!==o&&(r[nt.camelCase(e)]=o),"string"==typeof e?(n=r[e],null==n&&(n=r[nt.camelCase(e)])):n=r,n}}function u(t,e,o){if(nt.acceptData(t)){var i,n,r=t.nodeType,s=r?nt.cache:t,a=r?t[nt.expando]:nt.expando;if(s[a]){if(e&&(i=o?s[a]:s[a].data)){nt.isArray(e)?e=e.concat(nt.map(e,nt.camelCase)):e in i?e=[e]:(e=nt.camelCase(e),e=e in i?[e]:e.split(" ")),n=e.length;for(;n--;)delete i[e[n]];if(o?!l(i):!nt.isEmptyObject(i))return}(o||(delete s[a].data,l(s[a])))&&(r?nt.cleanData([t],!0):ot.deleteExpando||s!=s.window?delete s[a]:s[a]=null)}}}function c(){return!0}function f(){return!1}function y(){try{return yt.activeElement}catch(t){}}function d(t){var e=Ft.split("|"),o=t.createDocumentFragment();if(o.createElement)for(;e.length;)o.createElement(e.pop());return o}function g(t,e){var o,i,n=0,r=typeof t.getElementsByTagName!==Tt?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==Tt?t.querySelectorAll(e||"*"):void 0;if(!r)for(r=[],o=t.childNodes||t;null!=(i=o[n]);n++)!e||nt.nodeName(i,e)?r.push(i):nt.merge(r,g(i,e));return void 0===e||e&&nt.nodeName(t,e)?nt.merge([t],r):r}function v(t){Rt.test(t.type)&&(t.defaultChecked=t.checked)}function m(t,e){return nt.nodeName(t,"table")&&nt.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function b(t){return t.type=(null!==nt.find.attr(t,"type"))+"/"+t.type,t}function w(t){var e=Kt.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function x(t,e){for(var o,i=0;null!=(o=t[i]);i++)nt._data(o,"globalEval",!e||nt._data(e[i],"globalEval"))}function S(t,e){if(1===e.nodeType&&nt.hasData(t)){var o,i,n,r=nt._data(t),s=nt._data(e,r),a=r.events;if(a){delete s.handle,s.events={};for(o in a)for(i=0,n=a[o].length;n>i;i++)nt.event.add(e,o,a[o][i])}s.data&&(s.data=nt.extend({},s.data))}}function T(t,e){var o,i,n;if(1===e.nodeType){if(o=e.nodeName.toLowerCase(),!ot.noCloneEvent&&e[nt.expando]){n=nt._data(e);for(i in n.events)nt.removeEvent(e,i,n.handle);e.removeAttribute(nt.expando)}"script"===o&&e.text!==t.text?(b(e).text=t.text,w(e)):"object"===o?(e.parentNode&&(e.outerHTML=t.outerHTML),ot.html5Clone&&t.innerHTML&&!nt.trim(e.innerHTML)&&(e.innerHTML=t.innerHTML)):"input"===o&&Rt.test(t.type)?(e.defaultChecked=e.checked=t.checked,e.value!==t.value&&(e.value=t.value)):"option"===o?e.defaultSelected=e.selected=t.defaultSelected:("input"===o||"textarea"===o)&&(e.defaultValue=t.defaultValue)}}function M(e,o){var i,n=nt(o.createElement(e)).appendTo(o.body),r=t.getDefaultComputedStyle&&(i=t.getDefaultComputedStyle(n[0]))?i.display:nt.css(n[0],"display");return n.detach(),r}function C(t){var e=yt,o=Qt[t];return o||(o=M(t,e),"none"!==o&&o||(Jt=(Jt||nt("<iframe frameborder='0' width='0' height='0'/>")).appendTo(e.documentElement),e=(Jt[0].contentWindow||Jt[0].contentDocument).document,e.write(),e.close(),o=M(t,e),Jt.detach()),Qt[t]=o),o}function E(t,e){return{get:function(){var o=t();if(null!=o)return o?void delete this.get:(this.get=e).apply(this,arguments)}}}function P(t,e){if(e in t)return e;for(var o=e.charAt(0).toUpperCase()+e.slice(1),i=e,n=ce.length;n--;)if(e=ce[n]+o,e in t)return e;return i}function k(t,e){for(var o,i,n,r=[],s=0,a=t.length;a>s;s++)i=t[s],i.style&&(r[s]=nt._data(i,"olddisplay"),o=i.style.display,e?(r[s]||"none"!==o||(i.style.display=""),""===i.style.display&&kt(i)&&(r[s]=nt._data(i,"olddisplay",C(i.nodeName)))):(n=kt(i),(o&&"none"!==o||!n)&&nt._data(i,"olddisplay",n?o:nt.css(i,"display"))));for(s=0;a>s;s++)i=t[s],i.style&&(e&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=e?r[s]||"":"none"));return t}function A(t,e,o){var i=pe.exec(e);return i?Math.max(0,i[1]-(o||0))+(i[2]||"px"):e}function R(t,e,o,i,n){for(var r=o===(i?"border":"content")?4:"width"===e?1:0,s=0;4>r;r+=2)"margin"===o&&(s+=nt.css(t,o+Pt[r],!0,n)),i?("content"===o&&(s-=nt.css(t,"padding"+Pt[r],!0,n)),"margin"!==o&&(s-=nt.css(t,"border"+Pt[r]+"Width",!0,n))):(s+=nt.css(t,"padding"+Pt[r],!0,n),"padding"!==o&&(s+=nt.css(t,"border"+Pt[r]+"Width",!0,n)));return s}function L(t,e,o){var i=!0,n="width"===e?t.offsetWidth:t.offsetHeight,r=te(t),s=ot.boxSizing&&"border-box"===nt.css(t,"boxSizing",!1,r);if(0>=n||null==n){if(n=ee(t,e,r),(0>n||null==n)&&(n=t.style[e]),ie.test(n))return n;i=s&&(ot.boxSizingReliable()||n===t.style[e]),n=parseFloat(n)||0}return n+R(t,e,o||(s?"border":"content"),i,r)+"px"}function N(t,e,o,i,n){return new N.prototype.init(t,e,o,i,n)}function j(){return setTimeout(function(){fe=void 0}),fe=nt.now()}function I(t,e){var o,i={height:t},n=0;for(e=e?1:0;4>n;n+=2-e)o=Pt[n],i["margin"+o]=i["padding"+o]=t;return e&&(i.opacity=i.width=t),i}function D(t,e,o){for(var i,n=(be[e]||[]).concat(be["*"]),r=0,s=n.length;s>r;r++)if(i=n[r].call(o,e,t))return i}function F(t,e,o){var i,n,r,s,a,p,l,h,u=this,c={},f=t.style,y=t.nodeType&&kt(t),d=nt._data(t,"fxshow");o.queue||(a=nt._queueHooks(t,"fx"),null==a.unqueued&&(a.unqueued=0,p=a.empty.fire,a.empty.fire=function(){a.unqueued||p()}),a.unqueued++,u.always(function(){u.always(function(){a.unqueued--,nt.queue(t,"fx").length||a.empty.fire()})})),1===t.nodeType&&("height"in e||"width"in e)&&(o.overflow=[f.overflow,f.overflowX,f.overflowY],l=nt.css(t,"display"),h="none"===l?nt._data(t,"olddisplay")||C(t.nodeName):l,"inline"===h&&"none"===nt.css(t,"float")&&(ot.inlineBlockNeedsLayout&&"inline"!==C(t.nodeName)?f.zoom=1:f.display="inline-block")),o.overflow&&(f.overflow="hidden",ot.shrinkWrapBlocks()||u.always(function(){f.overflow=o.overflow[0],f.overflowX=o.overflow[1],f.overflowY=o.overflow[2]}));for(i in e)if(n=e[i],de.exec(n)){if(delete e[i],r=r||"toggle"===n,n===(y?"hide":"show")){if("show"!==n||!d||void 0===d[i])continue;y=!0}c[i]=d&&d[i]||nt.style(t,i)}else l=void 0;if(nt.isEmptyObject(c))"inline"===("none"===l?C(t.nodeName):l)&&(f.display=l);else{d?"hidden"in d&&(y=d.hidden):d=nt._data(t,"fxshow",{}),r&&(d.hidden=!y),y?nt(t).show():u.done(function(){nt(t).hide()}),u.done(function(){var e;nt._removeData(t,"fxshow");for(e in c)nt.style(t,e,c[e])});for(i in c)s=D(y?d[i]:0,i,u),i in d||(d[i]=s.start,y&&(s.end=s.start,s.start="width"===i||"height"===i?1:0))}}function O(t,e){var o,i,n,r,s;for(o in t)if(i=nt.camelCase(o),n=e[i],r=t[o],nt.isArray(r)&&(n=r[1],r=t[o]=r[0]),o!==i&&(t[i]=r,delete t[o]),s=nt.cssHooks[i],s&&"expand"in s){r=s.expand(r),delete t[i];for(o in r)o in t||(t[o]=r[o],e[o]=n)}else e[i]=n}function B(t,e,o){var i,n,r=0,s=me.length,a=nt.Deferred().always(function(){delete p.elem}),p=function(){if(n)return!1;for(var e=fe||j(),o=Math.max(0,l.startTime+l.duration-e),i=o/l.duration||0,r=1-i,s=0,p=l.tweens.length;p>s;s++)l.tweens[s].run(r);return a.notifyWith(t,[l,r,o]),1>r&&p?o:(a.resolveWith(t,[l]),!1)},l=a.promise({elem:t,props:nt.extend({},e),opts:nt.extend(!0,{specialEasing:{}},o),originalProperties:e,originalOptions:o,startTime:fe||j(),duration:o.duration,tweens:[],createTween:function(e,o){var i=nt.Tween(t,l.opts,e,o,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(i),i},stop:function(e){var o=0,i=e?l.tweens.length:0;if(n)return this;for(n=!0;i>o;o++)l.tweens[o].run(1);return e?a.resolveWith(t,[l,e]):a.rejectWith(t,[l,e]),this}}),h=l.props;for(O(h,l.opts.specialEasing);s>r;r++)if(i=me[r].call(l,t,h,l.opts))return i;return nt.map(h,D,l),nt.isFunction(l.opts.start)&&l.opts.start.call(t,l),nt.fx.timer(nt.extend(p,{elem:t,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function U(t){return function(e,o){"string"!=typeof e&&(o=e,e="*");var i,n=0,r=e.toLowerCase().match(bt)||[];if(nt.isFunction(o))for(;i=r[n++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(o)):(t[i]=t[i]||[]).push(o)}}function G(t,e,o,i){function n(a){var p;return r[a]=!0,nt.each(t[a]||[],function(t,a){var l=a(e,o,i);return"string"!=typeof l||s||r[l]?s?!(p=l):void 0:(e.dataTypes.unshift(l),n(l),!1)}),p}var r={},s=t===$e;return n(e.dataTypes[0])||!r["*"]&&n("*")}function H(t,e){var o,i,n=nt.ajaxSettings.flatOptions||{};for(i in e)void 0!==e[i]&&((n[i]?t:o||(o={}))[i]=e[i]);return o&&nt.extend(!0,t,o),t}function q(t,e,o){for(var i,n,r,s,a=t.contents,p=t.dataTypes;"*"===p[0];)p.shift(),void 0===n&&(n=t.mimeType||e.getResponseHeader("Content-Type"));if(n)for(s in a)if(a[s]&&a[s].test(n)){p.unshift(s);break}if(p[0]in o)r=p[0];else{for(s in o){if(!p[0]||t.converters[s+" "+p[0]]){r=s;break}i||(i=s)}r=r||i}return r?(r!==p[0]&&p.unshift(r),o[r]):void 0}function $(t,e,o,i){var n,r,s,a,p,l={},h=t.dataTypes.slice();if(h[1])for(s in t.converters)l[s.toLowerCase()]=t.converters[s];for(r=h.shift();r;)if(t.responseFields[r]&&(o[t.responseFields[r]]=e),!p&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),p=r,r=h.shift())if("*"===r)r=p;else if("*"!==p&&p!==r){if(s=l[p+" "+r]||l["* "+r],!s)for(n in l)if(a=n.split(" "),a[1]===r&&(s=l[p+" "+a[0]]||l["* "+a[0]])){s===!0?s=l[n]:l[n]!==!0&&(r=a[0],h.unshift(a[1]));break}if(s!==!0)if(s&&t["throws"])e=s(e);else try{e=s(e)}catch(u){return{state:"parsererror",error:s?u:"No conversion from "+p+" to "+r}}}return{state:"success",data:e}}function X(t,e,o,i){var n;if(nt.isArray(e))nt.each(e,function(e,n){o||Ke.test(t)?i(t,n):X(t+"["+("object"==typeof n?e:"")+"]",n,o,i)});else if(o||"object"!==nt.type(e))i(t,e);else for(n in e)X(t+"["+n+"]",e[n],o,i)}function W(){try{return new t.XMLHttpRequest}catch(e){}}function z(){try{return new t.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function K(t){return nt.isWindow(t)?t:9===t.nodeType&&(t.defaultView||t.parentWindow)}var V=[],Y=V.slice,Z=V.concat,_=V.push,J=V.indexOf,Q={},tt=Q.toString,et=Q.hasOwnProperty,ot={},it="1.11.2",nt=function(t,e){return new nt.fn.init(t,e)},rt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,st=/^-ms-/,at=/-([\da-z])/gi,pt=function(t,e){return e.toUpperCase()};nt.fn=nt.prototype={jquery:it,constructor:nt,selector:"",length:0,toArray:function(){return Y.call(this)},get:function(t){return null!=t?0>t?this[t+this.length]:this[t]:Y.call(this)},pushStack:function(t){var e=nt.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return nt.each(this,t,e)},map:function(t){return this.pushStack(nt.map(this,function(e,o){return t.call(e,o,e)}))},slice:function(){return this.pushStack(Y.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,o=+t+(0>t?e:0);return this.pushStack(o>=0&&e>o?[this[o]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:_,sort:V.sort,splice:V.splice},nt.extend=nt.fn.extend=function(){var t,e,o,i,n,r,s=arguments[0]||{},a=1,p=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[a]||{},a++),"object"==typeof s||nt.isFunction(s)||(s={}),a===p&&(s=this,a--);p>a;a++)if(null!=(n=arguments[a]))for(i in n)t=s[i],o=n[i],s!==o&&(l&&o&&(nt.isPlainObject(o)||(e=nt.isArray(o)))?(e?(e=!1,r=t&&nt.isArray(t)?t:[]):r=t&&nt.isPlainObject(t)?t:{},s[i]=nt.extend(l,r,o)):void 0!==o&&(s[i]=o));return s},nt.extend({expando:"jQuery"+(it+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return"function"===nt.type(t)},isArray:Array.isArray||function(t){return"array"===nt.type(t)},isWindow:function(t){return null!=t&&t==t.window},isNumeric:function(t){return!nt.isArray(t)&&t-parseFloat(t)+1>=0},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},isPlainObject:function(t){var e;if(!t||"object"!==nt.type(t)||t.nodeType||nt.isWindow(t))return!1;try{if(t.constructor&&!et.call(t,"constructor")&&!et.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(o){return!1}if(ot.ownLast)for(e in t)return et.call(t,e);for(e in t);return void 0===e||et.call(t,e)},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?Q[tt.call(t)]||"object":typeof t},globalEval:function(e){e&&nt.trim(e)&&(t.execScript||function(e){t.eval.call(t,e)})(e)},camelCase:function(t){return t.replace(st,"ms-").replace(at,pt)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var n,r=0,s=t.length,a=o(t);if(i){if(a)for(;s>r&&(n=e.apply(t[r],i),n!==!1);r++);else for(r in t)if(n=e.apply(t[r],i),n===!1)break}else if(a)for(;s>r&&(n=e.call(t[r],r,t[r]),n!==!1);r++);else for(r in t)if(n=e.call(t[r],r,t[r]),n===!1)break;return t},trim:function(t){return null==t?"":(t+"").replace(rt,"")},makeArray:function(t,e){var i=e||[];return null!=t&&(o(Object(t))?nt.merge(i,"string"==typeof t?[t]:t):_.call(i,t)),i},inArray:function(t,e,o){var i;if(e){if(J)return J.call(e,t,o);for(i=e.length,o=o?0>o?Math.max(0,i+o):o:0;i>o;o++)if(o in e&&e[o]===t)return o}return-1},merge:function(t,e){for(var o=+e.length,i=0,n=t.length;o>i;)t[n++]=e[i++];if(o!==o)for(;void 0!==e[i];)t[n++]=e[i++];return t.length=n,t},grep:function(t,e,o){for(var i,n=[],r=0,s=t.length,a=!o;s>r;r++)i=!e(t[r],r),i!==a&&n.push(t[r]);return n},map:function(t,e,i){var n,r=0,s=t.length,a=o(t),p=[];if(a)for(;s>r;r++)n=e(t[r],r,i),null!=n&&p.push(n);else for(r in t)n=e(t[r],r,i),null!=n&&p.push(n);return Z.apply([],p)},guid:1,proxy:function(t,e){var o,i,n;return"string"==typeof e&&(n=t[e],e=t,t=n),nt.isFunction(t)?(o=Y.call(arguments,2),i=function(){return t.apply(e||this,o.concat(Y.call(arguments)))},i.guid=t.guid=t.guid||nt.guid++,i):void 0},now:function(){return+new Date},support:ot}),nt.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){Q["[object "+e+"]"]=e.toLowerCase()});var lt=function(t){function e(t,e,o,i){var n,r,s,a,p,l,u,f,y,d;if((e?e.ownerDocument||e:G)!==N&&L(e),e=e||N,o=o||[],a=e.nodeType,"string"!=typeof t||!t||1!==a&&9!==a&&11!==a)return o;if(!i&&I){if(11!==a&&(n=mt.exec(t)))if(s=n[1]){if(9===a){if(r=e.getElementById(s),!r||!r.parentNode)return o;if(r.id===s)return o.push(r),o}else if(e.ownerDocument&&(r=e.ownerDocument.getElementById(s))&&B(e,r)&&r.id===s)return o.push(r),o}else{if(n[2])return J.apply(o,e.getElementsByTagName(t)),o;if((s=n[3])&&x.getElementsByClassName)return J.apply(o,e.getElementsByClassName(s)),o}if(x.qsa&&(!D||!D.test(t))){if(f=u=U,y=e,d=1!==a&&t,1===a&&"object"!==e.nodeName.toLowerCase()){for(l=C(t),(u=e.getAttribute("id"))?f=u.replace(wt,"\\$&"):e.setAttribute("id",f),f="[id='"+f+"'] ",p=l.length;p--;)l[p]=f+c(l[p]);y=bt.test(t)&&h(e.parentNode)||e,d=l.join(",")}if(d)try{return J.apply(o,y.querySelectorAll(d)),o}catch(g){}finally{u||e.removeAttribute("id")}}}return P(t.replace(pt,"$1"),e,o,i)}function o(){function t(o,i){return e.push(o+" ")>S.cacheLength&&delete t[e.shift()],t[o+" "]=i}var e=[];return t}function i(t){return t[U]=!0,t}function n(t){var e=N.createElement("div");try{return!!t(e)}catch(o){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function r(t,e){for(var o=t.split("|"),i=t.length;i--;)S.attrHandle[o[i]]=e}function s(t,e){var o=e&&t,i=o&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||K)-(~t.sourceIndex||K);if(i)return i;if(o)for(;o=o.nextSibling;)if(o===e)return-1;return t?1:-1}function a(t){return function(e){var o=e.nodeName.toLowerCase();return"input"===o&&e.type===t}}function p(t){return function(e){var o=e.nodeName.toLowerCase();return("input"===o||"button"===o)&&e.type===t}}function l(t){return i(function(e){return e=+e,i(function(o,i){for(var n,r=t([],o.length,e),s=r.length;s--;)o[n=r[s]]&&(o[n]=!(i[n]=o[n]))})})}function h(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function u(){}function c(t){for(var e=0,o=t.length,i="";o>e;e++)i+=t[e].value;return i}function f(t,e,o){var i=e.dir,n=o&&"parentNode"===i,r=q++;return e.first?function(e,o,r){for(;e=e[i];)if(1===e.nodeType||n)return t(e,o,r)}:function(e,o,s){var a,p,l=[H,r];if(s){for(;e=e[i];)if((1===e.nodeType||n)&&t(e,o,s))return!0}else for(;e=e[i];)if(1===e.nodeType||n){if(p=e[U]||(e[U]={}),(a=p[i])&&a[0]===H&&a[1]===r)return l[2]=a[2];if(p[i]=l,l[2]=t(e,o,s))return!0}}}function y(t){return t.length>1?function(e,o,i){for(var n=t.length;n--;)if(!t[n](e,o,i))return!1;return!0}:t[0]}function d(t,o,i){for(var n=0,r=o.length;r>n;n++)e(t,o[n],i);return i}function g(t,e,o,i,n){for(var r,s=[],a=0,p=t.length,l=null!=e;p>a;a++)(r=t[a])&&(!o||o(r,i,n))&&(s.push(r),l&&e.push(a));return s}function v(t,e,o,n,r,s){return n&&!n[U]&&(n=v(n)),r&&!r[U]&&(r=v(r,s)),i(function(i,s,a,p){var l,h,u,c=[],f=[],y=s.length,v=i||d(e||"*",a.nodeType?[a]:a,[]),m=!t||!i&&e?v:g(v,c,t,a,p),b=o?r||(i?t:y||n)?[]:s:m;if(o&&o(m,b,a,p),n)for(l=g(b,f),n(l,[],a,p),h=l.length;h--;)(u=l[h])&&(b[f[h]]=!(m[f[h]]=u));if(i){if(r||t){if(r){for(l=[],h=b.length;h--;)(u=b[h])&&l.push(m[h]=u);r(null,b=[],l,p)}for(h=b.length;h--;)(u=b[h])&&(l=r?tt(i,u):c[h])>-1&&(i[l]=!(s[l]=u))}}else b=g(b===s?b.splice(y,b.length):b),r?r(null,s,b,p):J.apply(s,b)})}function m(t){for(var e,o,i,n=t.length,r=S.relative[t[0].type],s=r||S.relative[" "],a=r?1:0,p=f(function(t){return t===e},s,!0),l=f(function(t){return tt(e,t)>-1},s,!0),h=[function(t,o,i){var n=!r&&(i||o!==k)||((e=o).nodeType?p(t,o,i):l(t,o,i));return e=null,n}];n>a;a++)if(o=S.relative[t[a].type])h=[f(y(h),o)];else{if(o=S.filter[t[a].type].apply(null,t[a].matches),o[U]){for(i=++a;n>i&&!S.relative[t[i].type];i++);return v(a>1&&y(h),a>1&&c(t.slice(0,a-1).concat({value:" "===t[a-2].type?"*":""})).replace(pt,"$1"),o,i>a&&m(t.slice(a,i)),n>i&&m(t=t.slice(i)),n>i&&c(t))}h.push(o)}return y(h)}function b(t,o){var n=o.length>0,r=t.length>0,s=function(i,s,a,p,l){var h,u,c,f=0,y="0",d=i&&[],v=[],m=k,b=i||r&&S.find.TAG("*",l),w=H+=null==m?1:Math.random()||.1,x=b.length;for(l&&(k=s!==N&&s);y!==x&&null!=(h=b[y]);y++){if(r&&h){for(u=0;c=t[u++];)if(c(h,s,a)){p.push(h);break}l&&(H=w)}n&&((h=!c&&h)&&f--,i&&d.push(h))}if(f+=y,n&&y!==f){for(u=0;c=o[u++];)c(d,v,s,a);if(i){if(f>0)for(;y--;)d[y]||v[y]||(v[y]=Z.call(p));v=g(v)}J.apply(p,v),l&&!i&&v.length>0&&f+o.length>1&&e.uniqueSort(p)}return l&&(H=w,k=m),d};return n?i(s):s}var w,x,S,T,M,C,E,P,k,A,R,L,N,j,I,D,F,O,B,U="sizzle"+1*new Date,G=t.document,H=0,q=0,$=o(),X=o(),W=o(),z=function(t,e){return t===e&&(R=!0),0},K=1<<31,V={}.hasOwnProperty,Y=[],Z=Y.pop,_=Y.push,J=Y.push,Q=Y.slice,tt=function(t,e){for(var o=0,i=t.length;i>o;o++)if(t[o]===e)return o;return-1},et="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ot="[\\x20\\t\\r\\n\\f]",it="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",nt=it.replace("w","w#"),rt="\\["+ot+"*("+it+")(?:"+ot+"*([*^$|!~]?=)"+ot+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+nt+"))|)"+ot+"*\\]",st=":("+it+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+rt+")*)|.*)\\)|)",at=new RegExp(ot+"+","g"),pt=new RegExp("^"+ot+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ot+"+$","g"),lt=new RegExp("^"+ot+"*,"+ot+"*"),ht=new RegExp("^"+ot+"*([>+~]|"+ot+")"+ot+"*"),ut=new RegExp("="+ot+"*([^\\]'\"]*?)"+ot+"*\\]","g"),ct=new RegExp(st),ft=new RegExp("^"+nt+"$"),yt={ID:new RegExp("^#("+it+")"),CLASS:new RegExp("^\\.("+it+")"),TAG:new RegExp("^("+it.replace("w","w*")+")"),ATTR:new RegExp("^"+rt),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ot+"*(even|odd|(([+-]|)(\\d*)n|)"+ot+"*(?:([+-]|)"+ot+"*(\\d+)|))"+ot+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+ot+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ot+"*((?:-\\d)?\\d*)"+ot+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,gt=/^h\d$/i,vt=/^[^{]+\{\s*\[native \w/,mt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,bt=/[+~]/,wt=/'|\\/g,xt=new RegExp("\\\\([\\da-f]{1,6}"+ot+"?|("+ot+")|.)","ig"),St=function(t,e,o){var i="0x"+e-65536;return i!==i||o?e:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Tt=function(){L()};try{J.apply(Y=Q.call(G.childNodes),G.childNodes),Y[G.childNodes.length].nodeType}catch(Mt){J={apply:Y.length?function(t,e){_.apply(t,Q.call(e))}:function(t,e){for(var o=t.length,i=0;t[o++]=e[i++];);t.length=o-1}}}x=e.support={},M=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},L=e.setDocument=function(t){var e,o,i=t?t.ownerDocument||t:G;return i!==N&&9===i.nodeType&&i.documentElement?(N=i,j=i.documentElement,o=i.defaultView,o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",Tt,!1):o.attachEvent&&o.attachEvent("onunload",Tt)),I=!M(i),x.attributes=n(function(t){return t.className="i",!t.getAttribute("className")}),x.getElementsByTagName=n(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),x.getElementsByClassName=vt.test(i.getElementsByClassName),x.getById=n(function(t){return j.appendChild(t).id=U,!i.getElementsByName||!i.getElementsByName(U).length}),x.getById?(S.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&I){var o=e.getElementById(t);return o&&o.parentNode?[o]:[]}},S.filter.ID=function(t){var e=t.replace(xt,St);return function(t){return t.getAttribute("id")===e}}):(delete S.find.ID,S.filter.ID=function(t){var e=t.replace(xt,St);return function(t){var o="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return o&&o.value===e}}),S.find.TAG=x.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):x.qsa?e.querySelectorAll(t):void 0}:function(t,e){var o,i=[],n=0,r=e.getElementsByTagName(t);if("*"===t){for(;o=r[n++];)1===o.nodeType&&i.push(o);return i}return r},S.find.CLASS=x.getElementsByClassName&&function(t,e){return I?e.getElementsByClassName(t):void 0},F=[],D=[],(x.qsa=vt.test(i.querySelectorAll))&&(n(function(t){j.appendChild(t).innerHTML="<a id='"+U+"'></a><select id='"+U+"-\f]' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&D.push("[*^$]="+ot+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||D.push("\\["+ot+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+U+"-]").length||D.push("~="),t.querySelectorAll(":checked").length||D.push(":checked"),t.querySelectorAll("a#"+U+"+*").length||D.push(".#.+[+~]")}),n(function(t){var e=i.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&D.push("name"+ot+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||D.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),D.push(",.*:")})),(x.matchesSelector=vt.test(O=j.matches||j.webkitMatchesSelector||j.mozMatchesSelector||j.oMatchesSelector||j.msMatchesSelector))&&n(function(t){x.disconnectedMatch=O.call(t,"div"),O.call(t,"[s!='']:x"),F.push("!=",st)}),D=D.length&&new RegExp(D.join("|")),F=F.length&&new RegExp(F.join("|")),e=vt.test(j.compareDocumentPosition),B=e||vt.test(j.contains)?function(t,e){var o=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(o.contains?o.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},z=e?function(t,e){if(t===e)return R=!0,0;var o=!t.compareDocumentPosition-!e.compareDocumentPosition;return o?o:(o=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&o||!x.sortDetached&&e.compareDocumentPosition(t)===o?t===i||t.ownerDocument===G&&B(G,t)?-1:e===i||e.ownerDocument===G&&B(G,e)?1:A?tt(A,t)-tt(A,e):0:4&o?-1:1)}:function(t,e){if(t===e)return R=!0,0;var o,n=0,r=t.parentNode,a=e.parentNode,p=[t],l=[e];if(!r||!a)return t===i?-1:e===i?1:r?-1:a?1:A?tt(A,t)-tt(A,e):0;if(r===a)return s(t,e);for(o=t;o=o.parentNode;)p.unshift(o);for(o=e;o=o.parentNode;)l.unshift(o);for(;p[n]===l[n];)n++;return n?s(p[n],l[n]):p[n]===G?-1:l[n]===G?1:0},i):N},e.matches=function(t,o){return e(t,null,null,o)},e.matchesSelector=function(t,o){if((t.ownerDocument||t)!==N&&L(t),o=o.replace(ut,"='$1']"),!(!x.matchesSelector||!I||F&&F.test(o)||D&&D.test(o)))try{var i=O.call(t,o);if(i||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(n){}return e(o,N,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==N&&L(t),B(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==N&&L(t);var o=S.attrHandle[e.toLowerCase()],i=o&&V.call(S.attrHandle,e.toLowerCase())?o(t,e,!I):void 0;return void 0!==i?i:x.attributes||!I?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,o=[],i=0,n=0;if(R=!x.detectDuplicates,A=!x.sortStable&&t.slice(0),t.sort(z),R){for(;e=t[n++];)e===t[n]&&(i=o.push(n));for(;i--;)t.splice(o[i],1)}return A=null,t},T=e.getText=function(t){var e,o="",i=0,n=t.nodeType;if(n){if(1===n||9===n||11===n){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)o+=T(t)}else if(3===n||4===n)return t.nodeValue}else for(;e=t[i++];)o+=T(e);return o},S=e.selectors={cacheLength:50,createPseudo:i,match:yt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(xt,St),t[3]=(t[3]||t[4]||t[5]||"").replace(xt,St),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,o=!t[6]&&t[2];return yt.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":o&&ct.test(o)&&(e=C(o,!0))&&(e=o.indexOf(")",o.length-e)-o.length)&&(t[0]=t[0].slice(0,e),t[2]=o.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(xt,St).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=$[t+" "];return e||(e=new RegExp("(^|"+ot+")"+t+"("+ot+"|$)"))&&$(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"");
+})},ATTR:function(t,o,i){return function(n){var r=e.attr(n,t);return null==r?"!="===o:!o||(r+="","="===o?r===i:"!="===o?r!==i:"^="===o?i&&0===r.indexOf(i):"*="===o?i&&r.indexOf(i)>-1:"$="===o?i&&r.slice(-i.length)===i:"~="===o?(" "+r.replace(at," ")+" ").indexOf(i)>-1:"|="===o&&(r===i||r.slice(0,i.length+1)===i+"-"))}},CHILD:function(t,e,o,i,n){var r="nth"!==t.slice(0,3),s="last"!==t.slice(-4),a="of-type"===e;return 1===i&&0===n?function(t){return!!t.parentNode}:function(e,o,p){var l,h,u,c,f,y,d=r!==s?"nextSibling":"previousSibling",g=e.parentNode,v=a&&e.nodeName.toLowerCase(),m=!p&&!a;if(g){if(r){for(;d;){for(u=e;u=u[d];)if(a?u.nodeName.toLowerCase()===v:1===u.nodeType)return!1;y=d="only"===t&&!y&&"nextSibling"}return!0}if(y=[s?g.firstChild:g.lastChild],s&&m){for(h=g[U]||(g[U]={}),l=h[t]||[],f=l[0]===H&&l[1],c=l[0]===H&&l[2],u=f&&g.childNodes[f];u=++f&&u&&u[d]||(c=f=0)||y.pop();)if(1===u.nodeType&&++c&&u===e){h[t]=[H,f,c];break}}else if(m&&(l=(e[U]||(e[U]={}))[t])&&l[0]===H)c=l[1];else for(;(u=++f&&u&&u[d]||(c=f=0)||y.pop())&&((a?u.nodeName.toLowerCase()!==v:1!==u.nodeType)||!++c||(m&&((u[U]||(u[U]={}))[t]=[H,c]),u!==e)););return c-=n,c===i||c%i===0&&c/i>=0}}},PSEUDO:function(t,o){var n,r=S.pseudos[t]||S.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return r[U]?r(o):r.length>1?(n=[t,t,"",o],S.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,n=r(t,o),s=n.length;s--;)i=tt(t,n[s]),t[i]=!(e[i]=n[s])}):function(t){return r(t,0,n)}):r}},pseudos:{not:i(function(t){var e=[],o=[],n=E(t.replace(pt,"$1"));return n[U]?i(function(t,e,o,i){for(var r,s=n(t,null,i,[]),a=t.length;a--;)(r=s[a])&&(t[a]=!(e[a]=r))}):function(t,i,r){return e[0]=t,n(e,null,r,o),e[0]=null,!o.pop()}}),has:i(function(t){return function(o){return e(t,o).length>0}}),contains:i(function(t){return t=t.replace(xt,St),function(e){return(e.textContent||e.innerText||T(e)).indexOf(t)>-1}}),lang:i(function(t){return ft.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(xt,St).toLowerCase(),function(e){var o;do if(o=I?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return o=o.toLowerCase(),o===t||0===o.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var o=t.location&&t.location.hash;return o&&o.slice(1)===e.id},root:function(t){return t===j},focus:function(t){return t===N.activeElement&&(!N.hasFocus||N.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!S.pseudos.empty(t)},header:function(t){return gt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,o){return[0>o?o+e:o]}),even:l(function(t,e){for(var o=0;e>o;o+=2)t.push(o);return t}),odd:l(function(t,e){for(var o=1;e>o;o+=2)t.push(o);return t}),lt:l(function(t,e,o){for(var i=0>o?o+e:o;--i>=0;)t.push(i);return t}),gt:l(function(t,e,o){for(var i=0>o?o+e:o;++i<e;)t.push(i);return t})}},S.pseudos.nth=S.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})S.pseudos[w]=a(w);for(w in{submit:!0,reset:!0})S.pseudos[w]=p(w);return u.prototype=S.filters=S.pseudos,S.setFilters=new u,C=e.tokenize=function(t,o){var i,n,r,s,a,p,l,h=X[t+" "];if(h)return o?0:h.slice(0);for(a=t,p=[],l=S.preFilter;a;){(!i||(n=lt.exec(a)))&&(n&&(a=a.slice(n[0].length)||a),p.push(r=[])),i=!1,(n=ht.exec(a))&&(i=n.shift(),r.push({value:i,type:n[0].replace(pt," ")}),a=a.slice(i.length));for(s in S.filter)!(n=yt[s].exec(a))||l[s]&&!(n=l[s](n))||(i=n.shift(),r.push({value:i,type:s,matches:n}),a=a.slice(i.length));if(!i)break}return o?a.length:a?e.error(t):X(t,p).slice(0)},E=e.compile=function(t,e){var o,i=[],n=[],r=W[t+" "];if(!r){for(e||(e=C(t)),o=e.length;o--;)r=m(e[o]),r[U]?i.push(r):n.push(r);r=W(t,b(n,i)),r.selector=t}return r},P=e.select=function(t,e,o,i){var n,r,s,a,p,l="function"==typeof t&&t,u=!i&&C(t=l.selector||t);if(o=o||[],1===u.length){if(r=u[0]=u[0].slice(0),r.length>2&&"ID"===(s=r[0]).type&&x.getById&&9===e.nodeType&&I&&S.relative[r[1].type]){if(e=(S.find.ID(s.matches[0].replace(xt,St),e)||[])[0],!e)return o;l&&(e=e.parentNode),t=t.slice(r.shift().value.length)}for(n=yt.needsContext.test(t)?0:r.length;n--&&(s=r[n],!S.relative[a=s.type]);)if((p=S.find[a])&&(i=p(s.matches[0].replace(xt,St),bt.test(r[0].type)&&h(e.parentNode)||e))){if(r.splice(n,1),t=i.length&&c(r),!t)return J.apply(o,i),o;break}}return(l||E(t,u))(i,e,!I,o,bt.test(t)&&h(e.parentNode)||e),o},x.sortStable=U.split("").sort(z).join("")===U,x.detectDuplicates=!!R,L(),x.sortDetached=n(function(t){return 1&t.compareDocumentPosition(N.createElement("div"))}),n(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||r("type|href|height|width",function(t,e,o){return o?void 0:t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),x.attributes&&n(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||r("value",function(t,e,o){return o||"input"!==t.nodeName.toLowerCase()?void 0:t.defaultValue}),n(function(t){return null==t.getAttribute("disabled")})||r(et,function(t,e,o){var i;return o?void 0:t[e]===!0?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),e}(t);nt.find=lt,nt.expr=lt.selectors,nt.expr[":"]=nt.expr.pseudos,nt.unique=lt.uniqueSort,nt.text=lt.getText,nt.isXMLDoc=lt.isXML,nt.contains=lt.contains;var ht=nt.expr.match.needsContext,ut=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ct=/^.[^:#\[\.,]*$/;nt.filter=function(t,e,o){var i=e[0];return o&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?nt.find.matchesSelector(i,t)?[i]:[]:nt.find.matches(t,nt.grep(e,function(t){return 1===t.nodeType}))},nt.fn.extend({find:function(t){var e,o=[],i=this,n=i.length;if("string"!=typeof t)return this.pushStack(nt(t).filter(function(){for(e=0;n>e;e++)if(nt.contains(i[e],this))return!0}));for(e=0;n>e;e++)nt.find(t,i[e],o);return o=this.pushStack(n>1?nt.unique(o):o),o.selector=this.selector?this.selector+" "+t:t,o},filter:function(t){return this.pushStack(i(this,t||[],!1))},not:function(t){return this.pushStack(i(this,t||[],!0))},is:function(t){return!!i(this,"string"==typeof t&&ht.test(t)?nt(t):t||[],!1).length}});var ft,yt=t.document,dt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,gt=nt.fn.init=function(t,e){var o,i;if(!t)return this;if("string"==typeof t){if(o="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3?[null,t,null]:dt.exec(t),!o||!o[1]&&e)return!e||e.jquery?(e||ft).find(t):this.constructor(e).find(t);if(o[1]){if(e=e instanceof nt?e[0]:e,nt.merge(this,nt.parseHTML(o[1],e&&e.nodeType?e.ownerDocument||e:yt,!0)),ut.test(o[1])&&nt.isPlainObject(e))for(o in e)nt.isFunction(this[o])?this[o](e[o]):this.attr(o,e[o]);return this}if(i=yt.getElementById(o[2]),i&&i.parentNode){if(i.id!==o[2])return ft.find(t);this.length=1,this[0]=i}return this.context=yt,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):nt.isFunction(t)?"undefined"!=typeof ft.ready?ft.ready(t):t(nt):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),nt.makeArray(t,this))};gt.prototype=nt.fn,ft=nt(yt);var vt=/^(?:parents|prev(?:Until|All))/,mt={children:!0,contents:!0,next:!0,prev:!0};nt.extend({dir:function(t,e,o){for(var i=[],n=t[e];n&&9!==n.nodeType&&(void 0===o||1!==n.nodeType||!nt(n).is(o));)1===n.nodeType&&i.push(n),n=n[e];return i},sibling:function(t,e){for(var o=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&o.push(t);return o}}),nt.fn.extend({has:function(t){var e,o=nt(t,this),i=o.length;return this.filter(function(){for(e=0;i>e;e++)if(nt.contains(this,o[e]))return!0})},closest:function(t,e){for(var o,i=0,n=this.length,r=[],s=ht.test(t)||"string"!=typeof t?nt(t,e||this.context):0;n>i;i++)for(o=this[i];o&&o!==e;o=o.parentNode)if(o.nodeType<11&&(s?s.index(o)>-1:1===o.nodeType&&nt.find.matchesSelector(o,t))){r.push(o);break}return this.pushStack(r.length>1?nt.unique(r):r)},index:function(t){return t?"string"==typeof t?nt.inArray(this[0],nt(t)):nt.inArray(t.jquery?t[0]:t,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(nt.unique(nt.merge(this.get(),nt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),nt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return nt.dir(t,"parentNode")},parentsUntil:function(t,e,o){return nt.dir(t,"parentNode",o)},next:function(t){return n(t,"nextSibling")},prev:function(t){return n(t,"previousSibling")},nextAll:function(t){return nt.dir(t,"nextSibling")},prevAll:function(t){return nt.dir(t,"previousSibling")},nextUntil:function(t,e,o){return nt.dir(t,"nextSibling",o)},prevUntil:function(t,e,o){return nt.dir(t,"previousSibling",o)},siblings:function(t){return nt.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return nt.sibling(t.firstChild)},contents:function(t){return nt.nodeName(t,"iframe")?t.contentDocument||t.contentWindow.document:nt.merge([],t.childNodes)}},function(t,e){nt.fn[t]=function(o,i){var n=nt.map(this,e,o);return"Until"!==t.slice(-5)&&(i=o),i&&"string"==typeof i&&(n=nt.filter(i,n)),this.length>1&&(mt[t]||(n=nt.unique(n)),vt.test(t)&&(n=n.reverse())),this.pushStack(n)}});var bt=/\S+/g,wt={};nt.Callbacks=function(t){t="string"==typeof t?wt[t]||r(t):nt.extend({},t);var e,o,i,n,s,a,p=[],l=!t.once&&[],h=function(r){for(o=t.memory&&r,i=!0,s=a||0,a=0,n=p.length,e=!0;p&&n>s;s++)if(p[s].apply(r[0],r[1])===!1&&t.stopOnFalse){o=!1;break}e=!1,p&&(l?l.length&&h(l.shift()):o?p=[]:u.disable())},u={add:function(){if(p){var i=p.length;!function r(e){nt.each(e,function(e,o){var i=nt.type(o);"function"===i?t.unique&&u.has(o)||p.push(o):o&&o.length&&"string"!==i&&r(o)})}(arguments),e?n=p.length:o&&(a=i,h(o))}return this},remove:function(){return p&&nt.each(arguments,function(t,o){for(var i;(i=nt.inArray(o,p,i))>-1;)p.splice(i,1),e&&(n>=i&&n--,s>=i&&s--)}),this},has:function(t){return t?nt.inArray(t,p)>-1:!(!p||!p.length)},empty:function(){return p=[],n=0,this},disable:function(){return p=l=o=void 0,this},disabled:function(){return!p},lock:function(){return l=void 0,o||u.disable(),this},locked:function(){return!l},fireWith:function(t,o){return!p||i&&!l||(o=o||[],o=[t,o.slice?o.slice():o],e?l.push(o):h(o)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},nt.extend({Deferred:function(t){var e=[["resolve","done",nt.Callbacks("once memory"),"resolved"],["reject","fail",nt.Callbacks("once memory"),"rejected"],["notify","progress",nt.Callbacks("memory")]],o="pending",i={state:function(){return o},always:function(){return n.done(arguments).fail(arguments),this},then:function(){var t=arguments;return nt.Deferred(function(o){nt.each(e,function(e,r){var s=nt.isFunction(t[e])&&t[e];n[r[1]](function(){var t=s&&s.apply(this,arguments);t&&nt.isFunction(t.promise)?t.promise().done(o.resolve).fail(o.reject).progress(o.notify):o[r[0]+"With"](this===i?o.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?nt.extend(t,i):i}},n={};return i.pipe=i.then,nt.each(e,function(t,r){var s=r[2],a=r[3];i[r[1]]=s.add,a&&s.add(function(){o=a},e[1^t][2].disable,e[2][2].lock),n[r[0]]=function(){return n[r[0]+"With"](this===n?i:this,arguments),this},n[r[0]+"With"]=s.fireWith}),i.promise(n),t&&t.call(n,n),n},when:function(t){var e,o,i,n=0,r=Y.call(arguments),s=r.length,a=1!==s||t&&nt.isFunction(t.promise)?s:0,p=1===a?t:nt.Deferred(),l=function(t,o,i){return function(n){o[t]=this,i[t]=arguments.length>1?Y.call(arguments):n,i===e?p.notifyWith(o,i):--a||p.resolveWith(o,i)}};if(s>1)for(e=new Array(s),o=new Array(s),i=new Array(s);s>n;n++)r[n]&&nt.isFunction(r[n].promise)?r[n].promise().done(l(n,i,r)).fail(p.reject).progress(l(n,o,e)):--a;return a||p.resolveWith(i,r),p.promise()}});var xt;nt.fn.ready=function(t){return nt.ready.promise().done(t),this},nt.extend({isReady:!1,readyWait:1,holdReady:function(t){t?nt.readyWait++:nt.ready(!0)},ready:function(t){if(t===!0?!--nt.readyWait:!nt.isReady){if(!yt.body)return setTimeout(nt.ready);nt.isReady=!0,t!==!0&&--nt.readyWait>0||(xt.resolveWith(yt,[nt]),nt.fn.triggerHandler&&(nt(yt).triggerHandler("ready"),nt(yt).off("ready")))}}}),nt.ready.promise=function(e){if(!xt)if(xt=nt.Deferred(),"complete"===yt.readyState)setTimeout(nt.ready);else if(yt.addEventListener)yt.addEventListener("DOMContentLoaded",a,!1),t.addEventListener("load",a,!1);else{yt.attachEvent("onreadystatechange",a),t.attachEvent("onload",a);var o=!1;try{o=null==t.frameElement&&yt.documentElement}catch(i){}o&&o.doScroll&&!function n(){if(!nt.isReady){try{o.doScroll("left")}catch(t){return setTimeout(n,50)}s(),nt.ready()}}()}return xt.promise(e)};var St,Tt="undefined";for(St in nt(ot))break;ot.ownLast="0"!==St,ot.inlineBlockNeedsLayout=!1,nt(function(){var t,e,o,i;o=yt.getElementsByTagName("body")[0],o&&o.style&&(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",ot.inlineBlockNeedsLayout=t=3===e.offsetWidth,t&&(o.style.zoom=1)),o.removeChild(i))}),function(){var t=yt.createElement("div");if(null==ot.deleteExpando){ot.deleteExpando=!0;try{delete t.test}catch(e){ot.deleteExpando=!1}}t=null}(),nt.acceptData=function(t){var e=nt.noData[(t.nodeName+" ").toLowerCase()],o=+t.nodeType||1;return(1===o||9===o)&&(!e||e!==!0&&t.getAttribute("classid")===e)};var Mt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Ct=/([A-Z])/g;nt.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(t){return t=t.nodeType?nt.cache[t[nt.expando]]:t[nt.expando],!!t&&!l(t)},data:function(t,e,o){return h(t,e,o)},removeData:function(t,e){return u(t,e)},_data:function(t,e,o){return h(t,e,o,!0)},_removeData:function(t,e){return u(t,e,!0)}}),nt.fn.extend({data:function(t,e){var o,i,n,r=this[0],s=r&&r.attributes;if(void 0===t){if(this.length&&(n=nt.data(r),1===r.nodeType&&!nt._data(r,"parsedAttrs"))){for(o=s.length;o--;)s[o]&&(i=s[o].name,0===i.indexOf("data-")&&(i=nt.camelCase(i.slice(5)),p(r,i,n[i])));nt._data(r,"parsedAttrs",!0)}return n}return"object"==typeof t?this.each(function(){nt.data(this,t)}):arguments.length>1?this.each(function(){nt.data(this,t,e)}):r?p(r,t,nt.data(r,t)):void 0},removeData:function(t){return this.each(function(){nt.removeData(this,t)})}}),nt.extend({queue:function(t,e,o){var i;return t?(e=(e||"fx")+"queue",i=nt._data(t,e),o&&(!i||nt.isArray(o)?i=nt._data(t,e,nt.makeArray(o)):i.push(o)),i||[]):void 0},dequeue:function(t,e){e=e||"fx";var o=nt.queue(t,e),i=o.length,n=o.shift(),r=nt._queueHooks(t,e),s=function(){nt.dequeue(t,e)};"inprogress"===n&&(n=o.shift(),i--),n&&("fx"===e&&o.unshift("inprogress"),delete r.stop,n.call(t,s,r)),!i&&r&&r.empty.fire()},_queueHooks:function(t,e){var o=e+"queueHooks";return nt._data(t,o)||nt._data(t,o,{empty:nt.Callbacks("once memory").add(function(){nt._removeData(t,e+"queue"),nt._removeData(t,o)})})}}),nt.fn.extend({queue:function(t,e){var o=2;return"string"!=typeof t&&(e=t,t="fx",o--),arguments.length<o?nt.queue(this[0],t):void 0===e?this:this.each(function(){var o=nt.queue(this,t,e);nt._queueHooks(this,t),"fx"===t&&"inprogress"!==o[0]&&nt.dequeue(this,t)})},dequeue:function(t){return this.each(function(){nt.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var o,i=1,n=nt.Deferred(),r=this,s=this.length,a=function(){--i||n.resolveWith(r,[r])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";s--;)o=nt._data(r[s],t+"queueHooks"),o&&o.empty&&(i++,o.empty.add(a));return a(),n.promise(e)}});var Et=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Pt=["Top","Right","Bottom","Left"],kt=function(t,e){return t=e||t,"none"===nt.css(t,"display")||!nt.contains(t.ownerDocument,t)},At=nt.access=function(t,e,o,i,n,r,s){var a=0,p=t.length,l=null==o;if("object"===nt.type(o)){n=!0;for(a in o)nt.access(t,e,a,o[a],!0,r,s)}else if(void 0!==i&&(n=!0,nt.isFunction(i)||(s=!0),l&&(s?(e.call(t,i),e=null):(l=e,e=function(t,e,o){return l.call(nt(t),o)})),e))for(;p>a;a++)e(t[a],o,s?i:i.call(t[a],a,e(t[a],o)));return n?t:l?e.call(t):p?e(t[0],o):r},Rt=/^(?:checkbox|radio)$/i;!function(){var t=yt.createElement("input"),e=yt.createElement("div"),o=yt.createDocumentFragment();if(e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",ot.leadingWhitespace=3===e.firstChild.nodeType,ot.tbody=!e.getElementsByTagName("tbody").length,ot.htmlSerialize=!!e.getElementsByTagName("link").length,ot.html5Clone="<:nav></:nav>"!==yt.createElement("nav").cloneNode(!0).outerHTML,t.type="checkbox",t.checked=!0,o.appendChild(t),ot.appendChecked=t.checked,e.innerHTML="<textarea>x</textarea>",ot.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,o.appendChild(e),e.innerHTML="<input type='radio' checked='checked' name='t'/>",ot.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,ot.noCloneEvent=!0,e.attachEvent&&(e.attachEvent("onclick",function(){ot.noCloneEvent=!1}),e.cloneNode(!0).click()),null==ot.deleteExpando){ot.deleteExpando=!0;try{delete e.test}catch(i){ot.deleteExpando=!1}}}(),function(){var e,o,i=yt.createElement("div");for(e in{submit:!0,change:!0,focusin:!0})o="on"+e,(ot[e+"Bubbles"]=o in t)||(i.setAttribute(o,"t"),ot[e+"Bubbles"]=i.attributes[o].expando===!1);i=null}();var Lt=/^(?:input|select|textarea)$/i,Nt=/^key/,jt=/^(?:mouse|pointer|contextmenu)|click/,It=/^(?:focusinfocus|focusoutblur)$/,Dt=/^([^.]*)(?:\.(.+)|)$/;nt.event={global:{},add:function(t,e,o,i,n){var r,s,a,p,l,h,u,c,f,y,d,g=nt._data(t);if(g){for(o.handler&&(p=o,o=p.handler,n=p.selector),o.guid||(o.guid=nt.guid++),(s=g.events)||(s=g.events={}),(h=g.handle)||(h=g.handle=function(t){return typeof nt===Tt||t&&nt.event.triggered===t.type?void 0:nt.event.dispatch.apply(h.elem,arguments)},h.elem=t),e=(e||"").match(bt)||[""],a=e.length;a--;)r=Dt.exec(e[a])||[],f=d=r[1],y=(r[2]||"").split(".").sort(),f&&(l=nt.event.special[f]||{},f=(n?l.delegateType:l.bindType)||f,l=nt.event.special[f]||{},u=nt.extend({type:f,origType:d,data:i,handler:o,guid:o.guid,selector:n,needsContext:n&&nt.expr.match.needsContext.test(n),namespace:y.join(".")},p),(c=s[f])||(c=s[f]=[],c.delegateCount=0,l.setup&&l.setup.call(t,i,y,h)!==!1||(t.addEventListener?t.addEventListener(f,h,!1):t.attachEvent&&t.attachEvent("on"+f,h))),l.add&&(l.add.call(t,u),u.handler.guid||(u.handler.guid=o.guid)),n?c.splice(c.delegateCount++,0,u):c.push(u),nt.event.global[f]=!0);t=null}},remove:function(t,e,o,i,n){var r,s,a,p,l,h,u,c,f,y,d,g=nt.hasData(t)&&nt._data(t);if(g&&(h=g.events)){for(e=(e||"").match(bt)||[""],l=e.length;l--;)if(a=Dt.exec(e[l])||[],f=d=a[1],y=(a[2]||"").split(".").sort(),f){for(u=nt.event.special[f]||{},f=(i?u.delegateType:u.bindType)||f,c=h[f]||[],a=a[2]&&new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"),p=r=c.length;r--;)s=c[r],!n&&d!==s.origType||o&&o.guid!==s.guid||a&&!a.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(c.splice(r,1),s.selector&&c.delegateCount--,u.remove&&u.remove.call(t,s));p&&!c.length&&(u.teardown&&u.teardown.call(t,y,g.handle)!==!1||nt.removeEvent(t,f,g.handle),delete h[f])}else for(f in h)nt.event.remove(t,f+e[l],o,i,!0);nt.isEmptyObject(h)&&(delete g.handle,nt._removeData(t,"events"))}},trigger:function(e,o,i,n){var r,s,a,p,l,h,u,c=[i||yt],f=et.call(e,"type")?e.type:e,y=et.call(e,"namespace")?e.namespace.split("."):[];if(a=h=i=i||yt,3!==i.nodeType&&8!==i.nodeType&&!It.test(f+nt.event.triggered)&&(f.indexOf(".")>=0&&(y=f.split("."),f=y.shift(),y.sort()),s=f.indexOf(":")<0&&"on"+f,e=e[nt.expando]?e:new nt.Event(f,"object"==typeof e&&e),e.isTrigger=n?2:3,e.namespace=y.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),o=null==o?[e]:nt.makeArray(o,[e]),l=nt.event.special[f]||{},n||!l.trigger||l.trigger.apply(i,o)!==!1)){if(!n&&!l.noBubble&&!nt.isWindow(i)){for(p=l.delegateType||f,It.test(p+f)||(a=a.parentNode);a;a=a.parentNode)c.push(a),h=a;h===(i.ownerDocument||yt)&&c.push(h.defaultView||h.parentWindow||t)}for(u=0;(a=c[u++])&&!e.isPropagationStopped();)e.type=u>1?p:l.bindType||f,r=(nt._data(a,"events")||{})[e.type]&&nt._data(a,"handle"),r&&r.apply(a,o),r=s&&a[s],r&&r.apply&&nt.acceptData(a)&&(e.result=r.apply(a,o),e.result===!1&&e.preventDefault());if(e.type=f,!n&&!e.isDefaultPrevented()&&(!l._default||l._default.apply(c.pop(),o)===!1)&&nt.acceptData(i)&&s&&i[f]&&!nt.isWindow(i)){h=i[s],h&&(i[s]=null),nt.event.triggered=f;try{i[f]()}catch(d){}nt.event.triggered=void 0,h&&(i[s]=h)}return e.result}},dispatch:function(t){t=nt.event.fix(t);var e,o,i,n,r,s=[],a=Y.call(arguments),p=(nt._data(this,"events")||{})[t.type]||[],l=nt.event.special[t.type]||{};if(a[0]=t,t.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,t)!==!1){for(s=nt.event.handlers.call(this,t,p),e=0;(n=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=n.elem,r=0;(i=n.handlers[r++])&&!t.isImmediatePropagationStopped();)(!t.namespace_re||t.namespace_re.test(i.namespace))&&(t.handleObj=i,t.data=i.data,o=((nt.event.special[i.origType]||{}).handle||i.handler).apply(n.elem,a),void 0!==o&&(t.result=o)===!1&&(t.preventDefault(),t.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,t),t.result}},handlers:function(t,e){var o,i,n,r,s=[],a=e.delegateCount,p=t.target;if(a&&p.nodeType&&(!t.button||"click"!==t.type))for(;p!=this;p=p.parentNode||this)if(1===p.nodeType&&(p.disabled!==!0||"click"!==t.type)){for(n=[],r=0;a>r;r++)i=e[r],o=i.selector+" ",void 0===n[o]&&(n[o]=i.needsContext?nt(o,this).index(p)>=0:nt.find(o,this,null,[p]).length),n[o]&&n.push(i);n.length&&s.push({elem:p,handlers:n})}return a<e.length&&s.push({elem:this,handlers:e.slice(a)}),s},fix:function(t){if(t[nt.expando])return t;var e,o,i,n=t.type,r=t,s=this.fixHooks[n];for(s||(this.fixHooks[n]=s=jt.test(n)?this.mouseHooks:Nt.test(n)?this.keyHooks:{}),i=s.props?this.props.concat(s.props):this.props,t=new nt.Event(r),e=i.length;e--;)o=i[e],t[o]=r[o];return t.target||(t.target=r.srcElement||yt),3===t.target.nodeType&&(t.target=t.target.parentNode),t.metaKey=!!t.metaKey,s.filter?s.filter(t,r):t},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(t,e){return null==t.which&&(t.which=null!=e.charCode?e.charCode:e.keyCode),t}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(t,e){var o,i,n,r=e.button,s=e.fromElement;return null==t.pageX&&null!=e.clientX&&(i=t.target.ownerDocument||yt,n=i.documentElement,o=i.body,t.pageX=e.clientX+(n&&n.scrollLeft||o&&o.scrollLeft||0)-(n&&n.clientLeft||o&&o.clientLeft||0),t.pageY=e.clientY+(n&&n.scrollTop||o&&o.scrollTop||0)-(n&&n.clientTop||o&&o.clientTop||0)),!t.relatedTarget&&s&&(t.relatedTarget=s===t.target?e.toElement:s),t.which||void 0===r||(t.which=1&r?1:2&r?3:4&r?2:0),t}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==y()&&this.focus)try{return this.focus(),!1}catch(t){}},delegateType:"focusin"},blur:{trigger:function(){return this===y()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return nt.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(t){return nt.nodeName(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}},simulate:function(t,e,o,i){var n=nt.extend(new nt.Event,o,{type:t,isSimulated:!0,originalEvent:{}});i?nt.event.trigger(n,null,e):nt.event.dispatch.call(e,n),n.isDefaultPrevented()&&o.preventDefault()}},nt.removeEvent=yt.removeEventListener?function(t,e,o){t.removeEventListener&&t.removeEventListener(e,o,!1)}:function(t,e,o){var i="on"+e;t.detachEvent&&(typeof t[i]===Tt&&(t[i]=null),t.detachEvent(i,o))},nt.Event=function(t,e){return this instanceof nt.Event?(t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&t.returnValue===!1?c:f):this.type=t,e&&nt.extend(this,e),this.timeStamp=t&&t.timeStamp||nt.now(),void(this[nt.expando]=!0)):new nt.Event(t,e)},nt.Event.prototype={isDefaultPrevented:f,isPropagationStopped:f,isImmediatePropagationStopped:f,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=c,t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=c,t&&(t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0)},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=c,t&&t.stopImmediatePropagation&&t.stopImmediatePropagation(),this.stopPropagation()}},nt.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){nt.event.special[t]={delegateType:e,bindType:e,handle:function(t){var o,i=this,n=t.relatedTarget,r=t.handleObj;return(!n||n!==i&&!nt.contains(i,n))&&(t.type=r.origType,o=r.handler.apply(this,arguments),t.type=e),o}}}),ot.submitBubbles||(nt.event.special.submit={setup:function(){return!nt.nodeName(this,"form")&&void nt.event.add(this,"click._submit keypress._submit",function(t){var e=t.target,o=nt.nodeName(e,"input")||nt.nodeName(e,"button")?e.form:void 0;o&&!nt._data(o,"submitBubbles")&&(nt.event.add(o,"submit._submit",function(t){t._submit_bubble=!0}),nt._data(o,"submitBubbles",!0))})},postDispatch:function(t){t._submit_bubble&&(delete t._submit_bubble,this.parentNode&&!t.isTrigger&&nt.event.simulate("submit",this.parentNode,t,!0))},teardown:function(){return!nt.nodeName(this,"form")&&void nt.event.remove(this,"._submit")}}),ot.changeBubbles||(nt.event.special.change={setup:function(){return Lt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(nt.event.add(this,"propertychange._change",function(t){"checked"===t.originalEvent.propertyName&&(this._just_changed=!0)}),nt.event.add(this,"click._change",function(t){this._just_changed&&!t.isTrigger&&(this._just_changed=!1),nt.event.simulate("change",this,t,!0)})),!1):void nt.event.add(this,"beforeactivate._change",function(t){var e=t.target;Lt.test(e.nodeName)&&!nt._data(e,"changeBubbles")&&(nt.event.add(e,"change._change",function(t){!this.parentNode||t.isSimulated||t.isTrigger||nt.event.simulate("change",this.parentNode,t,!0)}),nt._data(e,"changeBubbles",!0))})},handle:function(t){var e=t.target;return this!==e||t.isSimulated||t.isTrigger||"radio"!==e.type&&"checkbox"!==e.type?t.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return nt.event.remove(this,"._change"),!Lt.test(this.nodeName)}}),ot.focusinBubbles||nt.each({focus:"focusin",blur:"focusout"},function(t,e){var o=function(t){nt.event.simulate(e,t.target,nt.event.fix(t),!0)};nt.event.special[e]={setup:function(){var i=this.ownerDocument||this,n=nt._data(i,e);n||i.addEventListener(t,o,!0),nt._data(i,e,(n||0)+1)},teardown:function(){var i=this.ownerDocument||this,n=nt._data(i,e)-1;n?nt._data(i,e,n):(i.removeEventListener(t,o,!0),nt._removeData(i,e))}}}),nt.fn.extend({on:function(t,e,o,i,n){var r,s;if("object"==typeof t){"string"!=typeof e&&(o=o||e,e=void 0);for(r in t)this.on(r,e,o,t[r],n);return this}if(null==o&&null==i?(i=e,o=e=void 0):null==i&&("string"==typeof e?(i=o,o=void 0):(i=o,o=e,e=void 0)),i===!1)i=f;else if(!i)return this;return 1===n&&(s=i,i=function(t){return nt().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=nt.guid++)),this.each(function(){nt.event.add(this,t,i,o,e)})},one:function(t,e,o,i){return this.on(t,e,o,i,1)},off:function(t,e,o){var i,n;if(t&&t.preventDefault&&t.handleObj)return i=t.handleObj,nt(t.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof t){for(n in t)this.off(n,e,t[n]);return this}return(e===!1||"function"==typeof e)&&(o=e,e=void 0),o===!1&&(o=f),this.each(function(){nt.event.remove(this,t,o,e)})},trigger:function(t,e){return this.each(function(){nt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var o=this[0];return o?nt.event.trigger(t,e,o,!0):void 0}});var Ft="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Ot=/ jQuery\d+="(?:null|\d+)"/g,Bt=new RegExp("<(?:"+Ft+")[\\s/>]","i"),Ut=/^\s+/,Gt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Ht=/<([\w:]+)/,qt=/<tbody/i,$t=/<|&#?\w+;/,Xt=/<(?:script|style|link)/i,Wt=/checked\s*(?:[^=]|=\s*.checked.)/i,zt=/^$|\/(?:java|ecma)script/i,Kt=/^true\/(.*)/,Vt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Yt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:ot.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Zt=d(yt),_t=Zt.appendChild(yt.createElement("div"));Yt.optgroup=Yt.option,Yt.tbody=Yt.tfoot=Yt.colgroup=Yt.caption=Yt.thead,Yt.th=Yt.td,nt.extend({clone:function(t,e,o){var i,n,r,s,a,p=nt.contains(t.ownerDocument,t);if(ot.html5Clone||nt.isXMLDoc(t)||!Bt.test("<"+t.nodeName+">")?r=t.cloneNode(!0):(_t.innerHTML=t.outerHTML,_t.removeChild(r=_t.firstChild)),!(ot.noCloneEvent&&ot.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||nt.isXMLDoc(t)))for(i=g(r),a=g(t),s=0;null!=(n=a[s]);++s)i[s]&&T(n,i[s]);if(e)if(o)for(a=a||g(t),i=i||g(r),s=0;null!=(n=a[s]);s++)S(n,i[s]);else S(t,r);return i=g(r,"script"),i.length>0&&x(i,!p&&g(t,"script")),i=a=n=null,r},buildFragment:function(t,e,o,i){for(var n,r,s,a,p,l,h,u=t.length,c=d(e),f=[],y=0;u>y;y++)if(r=t[y],r||0===r)if("object"===nt.type(r))nt.merge(f,r.nodeType?[r]:r);else if($t.test(r)){for(a=a||c.appendChild(e.createElement("div")),p=(Ht.exec(r)||["",""])[1].toLowerCase(),h=Yt[p]||Yt._default,a.innerHTML=h[1]+r.replace(Gt,"<$1></$2>")+h[2],n=h[0];n--;)a=a.lastChild;if(!ot.leadingWhitespace&&Ut.test(r)&&f.push(e.createTextNode(Ut.exec(r)[0])),!ot.tbody)for(r="table"!==p||qt.test(r)?"<table>"!==h[1]||qt.test(r)?0:a:a.firstChild,n=r&&r.childNodes.length;n--;)nt.nodeName(l=r.childNodes[n],"tbody")&&!l.childNodes.length&&r.removeChild(l);for(nt.merge(f,a.childNodes),a.textContent="";a.firstChild;)a.removeChild(a.firstChild);a=c.lastChild}else f.push(e.createTextNode(r));for(a&&c.removeChild(a),ot.appendChecked||nt.grep(g(f,"input"),v),y=0;r=f[y++];)if((!i||-1===nt.inArray(r,i))&&(s=nt.contains(r.ownerDocument,r),a=g(c.appendChild(r),"script"),s&&x(a),o))for(n=0;r=a[n++];)zt.test(r.type||"")&&o.push(r);return a=null,c},cleanData:function(t,e){for(var o,i,n,r,s=0,a=nt.expando,p=nt.cache,l=ot.deleteExpando,h=nt.event.special;null!=(o=t[s]);s++)if((e||nt.acceptData(o))&&(n=o[a],r=n&&p[n])){if(r.events)for(i in r.events)h[i]?nt.event.remove(o,i):nt.removeEvent(o,i,r.handle);p[n]&&(delete p[n],l?delete o[a]:typeof o.removeAttribute!==Tt?o.removeAttribute(a):o[a]=null,V.push(n))}}}),nt.fn.extend({text:function(t){return At(this,function(t){
+return void 0===t?nt.text(this):this.empty().append((this[0]&&this[0].ownerDocument||yt).createTextNode(t))},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.appendChild(t)}})},prepend:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var o,i=t?nt.filter(t,this):this,n=0;null!=(o=i[n]);n++)e||1!==o.nodeType||nt.cleanData(g(o)),o.parentNode&&(e&&nt.contains(o.ownerDocument,o)&&x(g(o,"script")),o.parentNode.removeChild(o));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&&nt.cleanData(g(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&&nt.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return nt.clone(this,t,e)})},html:function(t){return At(this,function(t){var e=this[0]||{},o=0,i=this.length;if(void 0===t)return 1===e.nodeType?e.innerHTML.replace(Ot,""):void 0;if(!("string"!=typeof t||Xt.test(t)||!ot.htmlSerialize&&Bt.test(t)||!ot.leadingWhitespace&&Ut.test(t)||Yt[(Ht.exec(t)||["",""])[1].toLowerCase()])){t=t.replace(Gt,"<$1></$2>");try{for(;i>o;o++)e=this[o]||{},1===e.nodeType&&(nt.cleanData(g(e,!1)),e.innerHTML=t);e=0}catch(n){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=arguments[0];return this.domManip(arguments,function(e){t=this.parentNode,nt.cleanData(g(this)),t&&t.replaceChild(e,this)}),t&&(t.length||t.nodeType)?this:this.remove()},detach:function(t){return this.remove(t,!0)},domManip:function(t,e){t=Z.apply([],t);var o,i,n,r,s,a,p=0,l=this.length,h=this,u=l-1,c=t[0],f=nt.isFunction(c);if(f||l>1&&"string"==typeof c&&!ot.checkClone&&Wt.test(c))return this.each(function(o){var i=h.eq(o);f&&(t[0]=c.call(this,o,i.html())),i.domManip(t,e)});if(l&&(a=nt.buildFragment(t,this[0].ownerDocument,!1,this),o=a.firstChild,1===a.childNodes.length&&(a=o),o)){for(r=nt.map(g(a,"script"),b),n=r.length;l>p;p++)i=a,p!==u&&(i=nt.clone(i,!0,!0),n&&nt.merge(r,g(i,"script"))),e.call(this[p],i,p);if(n)for(s=r[r.length-1].ownerDocument,nt.map(r,w),p=0;n>p;p++)i=r[p],zt.test(i.type||"")&&!nt._data(i,"globalEval")&&nt.contains(s,i)&&(i.src?nt._evalUrl&&nt._evalUrl(i.src):nt.globalEval((i.text||i.textContent||i.innerHTML||"").replace(Vt,"")));a=o=null}return this}}),nt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){nt.fn[t]=function(t){for(var o,i=0,n=[],r=nt(t),s=r.length-1;s>=i;i++)o=i===s?this:this.clone(!0),nt(r[i])[e](o),_.apply(n,o.get());return this.pushStack(n)}});var Jt,Qt={};!function(){var t;ot.shrinkWrapBlocks=function(){if(null!=t)return t;t=!1;var e,o,i;return o=yt.getElementsByTagName("body")[0],o&&o.style?(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",e.appendChild(yt.createElement("div")).style.width="5px",t=3!==e.offsetWidth),o.removeChild(i),t):void 0}}();var te,ee,oe=/^margin/,ie=new RegExp("^("+Et+")(?!px)[a-z%]+$","i"),ne=/^(top|right|bottom|left)$/;t.getComputedStyle?(te=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):t.getComputedStyle(e,null)},ee=function(t,e,o){var i,n,r,s,a=t.style;return o=o||te(t),s=o?o.getPropertyValue(e)||o[e]:void 0,o&&(""!==s||nt.contains(t.ownerDocument,t)||(s=nt.style(t,e)),ie.test(s)&&oe.test(e)&&(i=a.width,n=a.minWidth,r=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=o.width,a.width=i,a.minWidth=n,a.maxWidth=r)),void 0===s?s:s+""}):yt.documentElement.currentStyle&&(te=function(t){return t.currentStyle},ee=function(t,e,o){var i,n,r,s,a=t.style;return o=o||te(t),s=o?o[e]:void 0,null==s&&a&&a[e]&&(s=a[e]),ie.test(s)&&!ne.test(e)&&(i=a.left,n=t.runtimeStyle,r=n&&n.left,r&&(n.left=t.currentStyle.left),a.left="fontSize"===e?"1em":s,s=a.pixelLeft+"px",a.left=i,r&&(n.left=r)),void 0===s?s:s+""||"auto"}),!function(){function e(){var e,o,i,n;o=yt.getElementsByTagName("body")[0],o&&o.style&&(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",r=s=!1,p=!0,t.getComputedStyle&&(r="1%"!==(t.getComputedStyle(e,null)||{}).top,s="4px"===(t.getComputedStyle(e,null)||{width:"4px"}).width,n=e.appendChild(yt.createElement("div")),n.style.cssText=e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",n.style.marginRight=n.style.width="0",e.style.width="1px",p=!parseFloat((t.getComputedStyle(n,null)||{}).marginRight),e.removeChild(n)),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",n=e.getElementsByTagName("td"),n[0].style.cssText="margin:0;border:0;padding:0;display:none",a=0===n[0].offsetHeight,a&&(n[0].style.display="",n[1].style.display="none",a=0===n[0].offsetHeight),o.removeChild(i))}var o,i,n,r,s,a,p;o=yt.createElement("div"),o.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=o.getElementsByTagName("a")[0],(i=n&&n.style)&&(i.cssText="float:left;opacity:.5",ot.opacity="0.5"===i.opacity,ot.cssFloat=!!i.cssFloat,o.style.backgroundClip="content-box",o.cloneNode(!0).style.backgroundClip="",ot.clearCloneStyle="content-box"===o.style.backgroundClip,ot.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,nt.extend(ot,{reliableHiddenOffsets:function(){return null==a&&e(),a},boxSizingReliable:function(){return null==s&&e(),s},pixelPosition:function(){return null==r&&e(),r},reliableMarginRight:function(){return null==p&&e(),p}}))}(),nt.swap=function(t,e,o,i){var n,r,s={};for(r in e)s[r]=t.style[r],t.style[r]=e[r];n=o.apply(t,i||[]);for(r in e)t.style[r]=s[r];return n};var re=/alpha\([^)]*\)/i,se=/opacity\s*=\s*([^)]*)/,ae=/^(none|table(?!-c[ea]).+)/,pe=new RegExp("^("+Et+")(.*)$","i"),le=new RegExp("^([+-])=("+Et+")","i"),he={position:"absolute",visibility:"hidden",display:"block"},ue={letterSpacing:"0",fontWeight:"400"},ce=["Webkit","O","Moz","ms"];nt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var o=ee(t,"opacity");return""===o?"1":o}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":ot.cssFloat?"cssFloat":"styleFloat"},style:function(t,e,o,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var n,r,s,a=nt.camelCase(e),p=t.style;if(e=nt.cssProps[a]||(nt.cssProps[a]=P(p,a)),s=nt.cssHooks[e]||nt.cssHooks[a],void 0===o)return s&&"get"in s&&void 0!==(n=s.get(t,!1,i))?n:p[e];if(r=typeof o,"string"===r&&(n=le.exec(o))&&(o=(n[1]+1)*n[2]+parseFloat(nt.css(t,e)),r="number"),null!=o&&o===o&&("number"!==r||nt.cssNumber[a]||(o+="px"),ot.clearCloneStyle||""!==o||0!==e.indexOf("background")||(p[e]="inherit"),!(s&&"set"in s&&void 0===(o=s.set(t,o,i)))))try{p[e]=o}catch(l){}}},css:function(t,e,o,i){var n,r,s,a=nt.camelCase(e);return e=nt.cssProps[a]||(nt.cssProps[a]=P(t.style,a)),s=nt.cssHooks[e]||nt.cssHooks[a],s&&"get"in s&&(r=s.get(t,!0,o)),void 0===r&&(r=ee(t,e,i)),"normal"===r&&e in ue&&(r=ue[e]),""===o||o?(n=parseFloat(r),o===!0||nt.isNumeric(n)?n||0:r):r}}),nt.each(["height","width"],function(t,e){nt.cssHooks[e]={get:function(t,o,i){return o?ae.test(nt.css(t,"display"))&&0===t.offsetWidth?nt.swap(t,he,function(){return L(t,e,i)}):L(t,e,i):void 0},set:function(t,o,i){var n=i&&te(t);return A(t,o,i?R(t,e,i,ot.boxSizing&&"border-box"===nt.css(t,"boxSizing",!1,n),n):0)}}}),ot.opacity||(nt.cssHooks.opacity={get:function(t,e){return se.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var o=t.style,i=t.currentStyle,n=nt.isNumeric(e)?"alpha(opacity="+100*e+")":"",r=i&&i.filter||o.filter||"";o.zoom=1,(e>=1||""===e)&&""===nt.trim(r.replace(re,""))&&o.removeAttribute&&(o.removeAttribute("filter"),""===e||i&&!i.filter)||(o.filter=re.test(r)?r.replace(re,n):r+" "+n)}}),nt.cssHooks.marginRight=E(ot.reliableMarginRight,function(t,e){return e?nt.swap(t,{display:"inline-block"},ee,[t,"marginRight"]):void 0}),nt.each({margin:"",padding:"",border:"Width"},function(t,e){nt.cssHooks[t+e]={expand:function(o){for(var i=0,n={},r="string"==typeof o?o.split(" "):[o];4>i;i++)n[t+Pt[i]+e]=r[i]||r[i-2]||r[0];return n}},oe.test(t)||(nt.cssHooks[t+e].set=A)}),nt.fn.extend({css:function(t,e){return At(this,function(t,e,o){var i,n,r={},s=0;if(nt.isArray(e)){for(i=te(t),n=e.length;n>s;s++)r[e[s]]=nt.css(t,e[s],!1,i);return r}return void 0!==o?nt.style(t,e,o):nt.css(t,e)},t,e,arguments.length>1)},show:function(){return k(this,!0)},hide:function(){return k(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){kt(this)?nt(this).show():nt(this).hide()})}}),nt.Tween=N,N.prototype={constructor:N,init:function(t,e,o,i,n,r){this.elem=t,this.prop=o,this.easing=n||"swing",this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=r||(nt.cssNumber[o]?"":"px")},cur:function(){var t=N.propHooks[this.prop];return t&&t.get?t.get(this):N.propHooks._default.get(this)},run:function(t){var e,o=N.propHooks[this.prop];return this.pos=e=this.options.duration?nt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),o&&o.set?o.set(this):N.propHooks._default.set(this),this}},N.prototype.init.prototype=N.prototype,N.propHooks={_default:{get:function(t){var e;return null==t.elem[t.prop]||t.elem.style&&null!=t.elem.style[t.prop]?(e=nt.css(t.elem,t.prop,""),e&&"auto"!==e?e:0):t.elem[t.prop]},set:function(t){nt.fx.step[t.prop]?nt.fx.step[t.prop](t):t.elem.style&&(null!=t.elem.style[nt.cssProps[t.prop]]||nt.cssHooks[t.prop])?nt.style(t.elem,t.prop,t.now+t.unit):t.elem[t.prop]=t.now}}},N.propHooks.scrollTop=N.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},nt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2}},nt.fx=N.prototype.init,nt.fx.step={};var fe,ye,de=/^(?:toggle|show|hide)$/,ge=new RegExp("^(?:([+-])=|)("+Et+")([a-z%]*)$","i"),ve=/queueHooks$/,me=[F],be={"*":[function(t,e){var o=this.createTween(t,e),i=o.cur(),n=ge.exec(e),r=n&&n[3]||(nt.cssNumber[t]?"":"px"),s=(nt.cssNumber[t]||"px"!==r&&+i)&&ge.exec(nt.css(o.elem,t)),a=1,p=20;if(s&&s[3]!==r){r=r||s[3],n=n||[],s=+i||1;do a=a||".5",s/=a,nt.style(o.elem,t,s+r);while(a!==(a=o.cur()/i)&&1!==a&&--p)}return n&&(s=o.start=+s||+i||0,o.unit=r,o.end=n[1]?s+(n[1]+1)*n[2]:+n[2]),o}]};nt.Animation=nt.extend(B,{tweener:function(t,e){nt.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var o,i=0,n=t.length;n>i;i++)o=t[i],be[o]=be[o]||[],be[o].unshift(e)},prefilter:function(t,e){e?me.unshift(t):me.push(t)}}),nt.speed=function(t,e,o){var i=t&&"object"==typeof t?nt.extend({},t):{complete:o||!o&&e||nt.isFunction(t)&&t,duration:t,easing:o&&e||e&&!nt.isFunction(e)&&e};return i.duration=nt.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in nt.fx.speeds?nt.fx.speeds[i.duration]:nt.fx.speeds._default,(null==i.queue||i.queue===!0)&&(i.queue="fx"),i.old=i.complete,i.complete=function(){nt.isFunction(i.old)&&i.old.call(this),i.queue&&nt.dequeue(this,i.queue)},i},nt.fn.extend({fadeTo:function(t,e,o,i){return this.filter(kt).css("opacity",0).show().end().animate({opacity:e},t,o,i)},animate:function(t,e,o,i){var n=nt.isEmptyObject(t),r=nt.speed(e,o,i),s=function(){var e=B(this,nt.extend({},t),r);(n||nt._data(this,"finish"))&&e.stop(!0)};return s.finish=s,n||r.queue===!1?this.each(s):this.queue(r.queue,s)},stop:function(t,e,o){var i=function(t){var e=t.stop;delete t.stop,e(o)};return"string"!=typeof t&&(o=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,n=null!=t&&t+"queueHooks",r=nt.timers,s=nt._data(this);if(n)s[n]&&s[n].stop&&i(s[n]);else for(n in s)s[n]&&s[n].stop&&ve.test(n)&&i(s[n]);for(n=r.length;n--;)r[n].elem!==this||null!=t&&r[n].queue!==t||(r[n].anim.stop(o),e=!1,r.splice(n,1));(e||!o)&&nt.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,o=nt._data(this),i=o[t+"queue"],n=o[t+"queueHooks"],r=nt.timers,s=i?i.length:0;for(o.finish=!0,nt.queue(this,t,[]),n&&n.stop&&n.stop.call(this,!0),e=r.length;e--;)r[e].elem===this&&r[e].queue===t&&(r[e].anim.stop(!0),r.splice(e,1));for(e=0;s>e;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete o.finish})}}),nt.each(["toggle","show","hide"],function(t,e){var o=nt.fn[e];nt.fn[e]=function(t,i,n){return null==t||"boolean"==typeof t?o.apply(this,arguments):this.animate(I(e,!0),t,i,n)}}),nt.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){nt.fn[t]=function(t,o,i){return this.animate(e,t,o,i)}}),nt.timers=[],nt.fx.tick=function(){var t,e=nt.timers,o=0;for(fe=nt.now();o<e.length;o++)t=e[o],t()||e[o]!==t||e.splice(o--,1);e.length||nt.fx.stop(),fe=void 0},nt.fx.timer=function(t){nt.timers.push(t),t()?nt.fx.start():nt.timers.pop()},nt.fx.interval=13,nt.fx.start=function(){ye||(ye=setInterval(nt.fx.tick,nt.fx.interval))},nt.fx.stop=function(){clearInterval(ye),ye=null},nt.fx.speeds={slow:600,fast:200,_default:400},nt.fn.delay=function(t,e){return t=nt.fx?nt.fx.speeds[t]||t:t,e=e||"fx",this.queue(e,function(e,o){var i=setTimeout(e,t);o.stop=function(){clearTimeout(i)}})},function(){var t,e,o,i,n;e=yt.createElement("div"),e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",i=e.getElementsByTagName("a")[0],o=yt.createElement("select"),n=o.appendChild(yt.createElement("option")),t=e.getElementsByTagName("input")[0],i.style.cssText="top:1px",ot.getSetAttribute="t"!==e.className,ot.style=/top/.test(i.getAttribute("style")),ot.hrefNormalized="/a"===i.getAttribute("href"),ot.checkOn=!!t.value,ot.optSelected=n.selected,ot.enctype=!!yt.createElement("form").enctype,o.disabled=!0,ot.optDisabled=!n.disabled,t=yt.createElement("input"),t.setAttribute("value",""),ot.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),ot.radioValue="t"===t.value}();var we=/\r/g;nt.fn.extend({val:function(t){var e,o,i,n=this[0];return arguments.length?(i=nt.isFunction(t),this.each(function(o){var n;1===this.nodeType&&(n=i?t.call(this,o,nt(this).val()):t,null==n?n="":"number"==typeof n?n+="":nt.isArray(n)&&(n=nt.map(n,function(t){return null==t?"":t+""})),e=nt.valHooks[this.type]||nt.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,n,"value")||(this.value=n))})):n?(e=nt.valHooks[n.type]||nt.valHooks[n.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(o=e.get(n,"value"))?o:(o=n.value,"string"==typeof o?o.replace(we,""):null==o?"":o)):void 0}}),nt.extend({valHooks:{option:{get:function(t){var e=nt.find.attr(t,"value");return null!=e?e:nt.trim(nt.text(t))}},select:{get:function(t){for(var e,o,i=t.options,n=t.selectedIndex,r="select-one"===t.type||0>n,s=r?null:[],a=r?n+1:i.length,p=0>n?a:r?n:0;a>p;p++)if(o=i[p],!(!o.selected&&p!==n||(ot.optDisabled?o.disabled:null!==o.getAttribute("disabled"))||o.parentNode.disabled&&nt.nodeName(o.parentNode,"optgroup"))){if(e=nt(o).val(),r)return e;s.push(e)}return s},set:function(t,e){for(var o,i,n=t.options,r=nt.makeArray(e),s=n.length;s--;)if(i=n[s],nt.inArray(nt.valHooks.option.get(i),r)>=0)try{i.selected=o=!0}catch(a){i.scrollHeight}else i.selected=!1;return o||(t.selectedIndex=-1),n}}}}),nt.each(["radio","checkbox"],function(){nt.valHooks[this]={set:function(t,e){return nt.isArray(e)?t.checked=nt.inArray(nt(t).val(),e)>=0:void 0}},ot.checkOn||(nt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var xe,Se,Te=nt.expr.attrHandle,Me=/^(?:checked|selected)$/i,Ce=ot.getSetAttribute,Ee=ot.input;nt.fn.extend({attr:function(t,e){return At(this,nt.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){nt.removeAttr(this,t)})}}),nt.extend({attr:function(t,e,o){var i,n,r=t.nodeType;if(t&&3!==r&&8!==r&&2!==r)return typeof t.getAttribute===Tt?nt.prop(t,e,o):(1===r&&nt.isXMLDoc(t)||(e=e.toLowerCase(),i=nt.attrHooks[e]||(nt.expr.match.bool.test(e)?Se:xe)),void 0===o?i&&"get"in i&&null!==(n=i.get(t,e))?n:(n=nt.find.attr(t,e),null==n?void 0:n):null!==o?i&&"set"in i&&void 0!==(n=i.set(t,o,e))?n:(t.setAttribute(e,o+""),o):void nt.removeAttr(t,e))},removeAttr:function(t,e){var o,i,n=0,r=e&&e.match(bt);if(r&&1===t.nodeType)for(;o=r[n++];)i=nt.propFix[o]||o,nt.expr.match.bool.test(o)?Ee&&Ce||!Me.test(o)?t[i]=!1:t[nt.camelCase("default-"+o)]=t[i]=!1:nt.attr(t,o,""),t.removeAttribute(Ce?o:i)},attrHooks:{type:{set:function(t,e){if(!ot.radioValue&&"radio"===e&&nt.nodeName(t,"input")){var o=t.value;return t.setAttribute("type",e),o&&(t.value=o),e}}}}}),Se={set:function(t,e,o){return e===!1?nt.removeAttr(t,o):Ee&&Ce||!Me.test(o)?t.setAttribute(!Ce&&nt.propFix[o]||o,o):t[nt.camelCase("default-"+o)]=t[o]=!0,o}},nt.each(nt.expr.match.bool.source.match(/\w+/g),function(t,e){var o=Te[e]||nt.find.attr;Te[e]=Ee&&Ce||!Me.test(e)?function(t,e,i){var n,r;return i||(r=Te[e],Te[e]=n,n=null!=o(t,e,i)?e.toLowerCase():null,Te[e]=r),n}:function(t,e,o){return o?void 0:t[nt.camelCase("default-"+e)]?e.toLowerCase():null}}),Ee&&Ce||(nt.attrHooks.value={set:function(t,e,o){return nt.nodeName(t,"input")?void(t.defaultValue=e):xe&&xe.set(t,e,o)}}),Ce||(xe={set:function(t,e,o){var i=t.getAttributeNode(o);return i||t.setAttributeNode(i=t.ownerDocument.createAttribute(o)),i.value=e+="","value"===o||e===t.getAttribute(o)?e:void 0}},Te.id=Te.name=Te.coords=function(t,e,o){var i;return o?void 0:(i=t.getAttributeNode(e))&&""!==i.value?i.value:null},nt.valHooks.button={get:function(t,e){var o=t.getAttributeNode(e);return o&&o.specified?o.value:void 0},set:xe.set},nt.attrHooks.contenteditable={set:function(t,e,o){xe.set(t,""!==e&&e,o)}},nt.each(["width","height"],function(t,e){nt.attrHooks[e]={set:function(t,o){return""===o?(t.setAttribute(e,"auto"),o):void 0}}})),ot.style||(nt.attrHooks.style={get:function(t){return t.style.cssText||void 0},set:function(t,e){return t.style.cssText=e+""}});var Pe=/^(?:input|select|textarea|button|object)$/i,ke=/^(?:a|area)$/i;nt.fn.extend({prop:function(t,e){return At(this,nt.prop,t,e,arguments.length>1)},removeProp:function(t){return t=nt.propFix[t]||t,this.each(function(){try{this[t]=void 0,delete this[t]}catch(e){}})}}),nt.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(t,e,o){var i,n,r,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return r=1!==s||!nt.isXMLDoc(t),r&&(e=nt.propFix[e]||e,n=nt.propHooks[e]),void 0!==o?n&&"set"in n&&void 0!==(i=n.set(t,o,e))?i:t[e]=o:n&&"get"in n&&null!==(i=n.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=nt.find.attr(t,"tabindex");return e?parseInt(e,10):Pe.test(t.nodeName)||ke.test(t.nodeName)&&t.href?0:-1}}}}),ot.hrefNormalized||nt.each(["href","src"],function(t,e){nt.propHooks[e]={get:function(t){return t.getAttribute(e,4)}}}),ot.optSelected||(nt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex),null}}),nt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){nt.propFix[this.toLowerCase()]=this}),ot.enctype||(nt.propFix.enctype="encoding");var Ae=/[\t\r\n\f]/g;nt.fn.extend({addClass:function(t){var e,o,i,n,r,s,a=0,p=this.length,l="string"==typeof t&&t;if(nt.isFunction(t))return this.each(function(e){nt(this).addClass(t.call(this,e,this.className))});if(l)for(e=(t||"").match(bt)||[];p>a;a++)if(o=this[a],i=1===o.nodeType&&(o.className?(" "+o.className+" ").replace(Ae," "):" ")){for(r=0;n=e[r++];)i.indexOf(" "+n+" ")<0&&(i+=n+" ");s=nt.trim(i),o.className!==s&&(o.className=s)}return this},removeClass:function(t){var e,o,i,n,r,s,a=0,p=this.length,l=0===arguments.length||"string"==typeof t&&t;if(nt.isFunction(t))return this.each(function(e){nt(this).removeClass(t.call(this,e,this.className))});if(l)for(e=(t||"").match(bt)||[];p>a;a++)if(o=this[a],i=1===o.nodeType&&(o.className?(" "+o.className+" ").replace(Ae," "):"")){for(r=0;n=e[r++];)for(;i.indexOf(" "+n+" ")>=0;)i=i.replace(" "+n+" "," ");s=t?nt.trim(i):"",o.className!==s&&(o.className=s)}return this},toggleClass:function(t,e){var o=typeof t;return"boolean"==typeof e&&"string"===o?e?this.addClass(t):this.removeClass(t):this.each(nt.isFunction(t)?function(o){nt(this).toggleClass(t.call(this,o,this.className,e),e)}:function(){if("string"===o)for(var e,i=0,n=nt(this),r=t.match(bt)||[];e=r[i++];)n.hasClass(e)?n.removeClass(e):n.addClass(e);else(o===Tt||"boolean"===o)&&(this.className&&nt._data(this,"__className__",this.className),this.className=this.className||t===!1?"":nt._data(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",o=0,i=this.length;i>o;o++)if(1===this[o].nodeType&&(" "+this[o].className+" ").replace(Ae," ").indexOf(e)>=0)return!0;return!1}}),nt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){nt.fn[e]=function(t,o){return arguments.length>0?this.on(e,null,t,o):this.trigger(e)}}),nt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)},bind:function(t,e,o){return this.on(t,null,e,o)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,o,i){return this.on(e,t,o,i)},undelegate:function(t,e,o){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",o)}});var Re=nt.now(),Le=/\?/,Ne=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;nt.parseJSON=function(e){if(t.JSON&&t.JSON.parse)return t.JSON.parse(e+"");var o,i=null,n=nt.trim(e+"");return n&&!nt.trim(n.replace(Ne,function(t,e,n,r){return o&&e&&(i=0),0===i?t:(o=n||e,i+=!r-!n,"")}))?Function("return "+n)():nt.error("Invalid JSON: "+e)},nt.parseXML=function(e){var o,i;if(!e||"string"!=typeof e)return null;try{t.DOMParser?(i=new DOMParser,o=i.parseFromString(e,"text/xml")):(o=new ActiveXObject("Microsoft.XMLDOM"),o.async="false",o.loadXML(e))}catch(n){o=void 0}return o&&o.documentElement&&!o.getElementsByTagName("parsererror").length||nt.error("Invalid XML: "+e),o};var je,Ie,De=/#.*$/,Fe=/([?&])_=[^&]*/,Oe=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Be=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ue=/^(?:GET|HEAD)$/,Ge=/^\/\//,He=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,qe={},$e={},Xe="*/".concat("*");try{Ie=location.href}catch(We){Ie=yt.createElement("a"),Ie.href="",Ie=Ie.href}je=He.exec(Ie.toLowerCase())||[],nt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ie,type:"GET",isLocal:Be.test(je[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Xe,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":nt.parseJSON,"text xml":nt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?H(H(t,nt.ajaxSettings),e):H(nt.ajaxSettings,t)},ajaxPrefilter:U(qe),ajaxTransport:U($e),ajax:function(t,e){function o(t,e,o,i){var n,h,v,m,w,S=e;2!==b&&(b=2,a&&clearTimeout(a),l=void 0,s=i||"",x.readyState=t>0?4:0,n=t>=200&&300>t||304===t,o&&(m=q(u,x,o)),m=$(u,m,x,n),n?(u.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(nt.lastModified[r]=w),w=x.getResponseHeader("etag"),w&&(nt.etag[r]=w)),204===t||"HEAD"===u.type?S="nocontent":304===t?S="notmodified":(S=m.state,h=m.data,v=m.error,n=!v)):(v=S,(t||!S)&&(S="error",0>t&&(t=0))),x.status=t,x.statusText=(e||S)+"",n?y.resolveWith(c,[h,S,x]):y.rejectWith(c,[x,S,v]),x.statusCode(g),g=void 0,p&&f.trigger(n?"ajaxSuccess":"ajaxError",[x,u,n?h:v]),d.fireWith(c,[x,S]),p&&(f.trigger("ajaxComplete",[x,u]),--nt.active||nt.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var i,n,r,s,a,p,l,h,u=nt.ajaxSetup({},e),c=u.context||u,f=u.context&&(c.nodeType||c.jquery)?nt(c):nt.event,y=nt.Deferred(),d=nt.Callbacks("once memory"),g=u.statusCode||{},v={},m={},b=0,w="canceled",x={readyState:0,getResponseHeader:function(t){var e;if(2===b){if(!h)for(h={};e=Oe.exec(s);)h[e[1].toLowerCase()]=e[2];e=h[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(t,e){var o=t.toLowerCase();return b||(t=m[o]=m[o]||t,v[t]=e),this},overrideMimeType:function(t){return b||(u.mimeType=t),this},statusCode:function(t){var e;if(t)if(2>b)for(e in t)g[e]=[g[e],t[e]];else x.always(t[x.status]);return this},abort:function(t){var e=t||w;return l&&l.abort(e),o(0,e),this}};if(y.promise(x).complete=d.add,x.success=x.done,x.error=x.fail,u.url=((t||u.url||Ie)+"").replace(De,"").replace(Ge,je[1]+"//"),u.type=e.method||e.type||u.method||u.type,u.dataTypes=nt.trim(u.dataType||"*").toLowerCase().match(bt)||[""],null==u.crossDomain&&(i=He.exec(u.url.toLowerCase()),u.crossDomain=!(!i||i[1]===je[1]&&i[2]===je[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(je[3]||("http:"===je[1]?"80":"443")))),u.data&&u.processData&&"string"!=typeof u.data&&(u.data=nt.param(u.data,u.traditional)),G(qe,u,e,x),2===b)return x;p=nt.event&&u.global,p&&0===nt.active++&&nt.event.trigger("ajaxStart"),u.type=u.type.toUpperCase(),u.hasContent=!Ue.test(u.type),r=u.url,u.hasContent||(u.data&&(r=u.url+=(Le.test(r)?"&":"?")+u.data,delete u.data),u.cache===!1&&(u.url=Fe.test(r)?r.replace(Fe,"$1_="+Re++):r+(Le.test(r)?"&":"?")+"_="+Re++)),u.ifModified&&(nt.lastModified[r]&&x.setRequestHeader("If-Modified-Since",nt.lastModified[r]),nt.etag[r]&&x.setRequestHeader("If-None-Match",nt.etag[r])),(u.data&&u.hasContent&&u.contentType!==!1||e.contentType)&&x.setRequestHeader("Content-Type",u.contentType),x.setRequestHeader("Accept",u.dataTypes[0]&&u.accepts[u.dataTypes[0]]?u.accepts[u.dataTypes[0]]+("*"!==u.dataTypes[0]?", "+Xe+"; q=0.01":""):u.accepts["*"]);for(n in u.headers)x.setRequestHeader(n,u.headers[n]);if(u.beforeSend&&(u.beforeSend.call(c,x,u)===!1||2===b))return x.abort();w="abort";for(n in{success:1,error:1,complete:1})x[n](u[n]);if(l=G($e,u,e,x)){x.readyState=1,p&&f.trigger("ajaxSend",[x,u]),u.async&&u.timeout>0&&(a=setTimeout(function(){x.abort("timeout")},u.timeout));try{b=1,l.send(v,o)}catch(S){if(!(2>b))throw S;o(-1,S)}}else o(-1,"No Transport");return x},getJSON:function(t,e,o){return nt.get(t,e,o,"json")},getScript:function(t,e){return nt.get(t,void 0,e,"script")}}),nt.each(["get","post"],function(t,e){nt[e]=function(t,o,i,n){return nt.isFunction(o)&&(n=n||i,i=o,o=void 0),nt.ajax({url:t,type:e,dataType:n,data:o,success:i})}}),nt._evalUrl=function(t){return nt.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},nt.fn.extend({wrapAll:function(t){if(nt.isFunction(t))return this.each(function(e){nt(this).wrapAll(t.call(this,e))});if(this[0]){var e=nt(t,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstChild&&1===t.firstChild.nodeType;)t=t.firstChild;return t}).append(this)}return this},wrapInner:function(t){return this.each(nt.isFunction(t)?function(e){nt(this).wrapInner(t.call(this,e))}:function(){var e=nt(this),o=e.contents();o.length?o.wrapAll(t):e.append(t)})},wrap:function(t){var e=nt.isFunction(t);return this.each(function(o){nt(this).wrapAll(e?t.call(this,o):t)})},unwrap:function(){return this.parent().each(function(){nt.nodeName(this,"body")||nt(this).replaceWith(this.childNodes)}).end()}}),nt.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0||!ot.reliableHiddenOffsets()&&"none"===(t.style&&t.style.display||nt.css(t,"display"))},nt.expr.filters.visible=function(t){return!nt.expr.filters.hidden(t)};var ze=/%20/g,Ke=/\[\]$/,Ve=/\r?\n/g,Ye=/^(?:submit|button|image|reset|file)$/i,Ze=/^(?:input|select|textarea|keygen)/i;nt.param=function(t,e){var o,i=[],n=function(t,e){e=nt.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=nt.ajaxSettings&&nt.ajaxSettings.traditional),nt.isArray(t)||t.jquery&&!nt.isPlainObject(t))nt.each(t,function(){n(this.name,this.value)});else for(o in t)X(o,t[o],e,n);return i.join("&").replace(ze,"+")},nt.fn.extend({serialize:function(){return nt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=nt.prop(this,"elements");return t?nt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!nt(this).is(":disabled")&&Ze.test(this.nodeName)&&!Ye.test(t)&&(this.checked||!Rt.test(t))}).map(function(t,e){var o=nt(this).val();return null==o?null:nt.isArray(o)?nt.map(o,function(t){return{name:e.name,value:t.replace(Ve,"\r\n")}}):{name:e.name,value:o.replace(Ve,"\r\n")}}).get()}}),nt.ajaxSettings.xhr=void 0!==t.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&W()||z()}:W;var _e=0,Je={},Qe=nt.ajaxSettings.xhr();t.attachEvent&&t.attachEvent("onunload",function(){for(var t in Je)Je[t](void 0,!0)}),ot.cors=!!Qe&&"withCredentials"in Qe,Qe=ot.ajax=!!Qe,Qe&&nt.ajaxTransport(function(t){if(!t.crossDomain||ot.cors){var e;return{send:function(o,i){var n,r=t.xhr(),s=++_e;if(r.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(n in t.xhrFields)r[n]=t.xhrFields[n];t.mimeType&&r.overrideMimeType&&r.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(n in o)void 0!==o[n]&&r.setRequestHeader(n,o[n]+"");r.send(t.hasContent&&t.data||null),e=function(o,n){var a,p,l;if(e&&(n||4===r.readyState))if(delete Je[s],e=void 0,r.onreadystatechange=nt.noop,n)4!==r.readyState&&r.abort();else{l={},a=r.status,"string"==typeof r.responseText&&(l.text=r.responseText);try{p=r.statusText}catch(h){p=""}a||!t.isLocal||t.crossDomain?1223===a&&(a=204):a=l.text?200:404}l&&i(a,p,l,r.getAllResponseHeaders())},t.async?4===r.readyState?setTimeout(e):r.onreadystatechange=Je[s]=e:e()},abort:function(){e&&e(void 0,!0)}}}}),nt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return nt.globalEval(t),t}}}),nt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET",t.global=!1)}),nt.ajaxTransport("script",function(t){if(t.crossDomain){var e,o=yt.head||nt("head")[0]||yt.documentElement;return{send:function(i,n){e=yt.createElement("script"),e.async=!0,t.scriptCharset&&(e.charset=t.scriptCharset),e.src=t.url,e.onload=e.onreadystatechange=function(t,o){(o||!e.readyState||/loaded|complete/.test(e.readyState))&&(e.onload=e.onreadystatechange=null,e.parentNode&&e.parentNode.removeChild(e),e=null,o||n(200,"success"))},o.insertBefore(e,o.firstChild)},
+abort:function(){e&&e.onload(void 0,!0)}}}});var to=[],eo=/(=)\?(?=&|$)|\?\?/;nt.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=to.pop()||nt.expando+"_"+Re++;return this[t]=!0,t}}),nt.ajaxPrefilter("json jsonp",function(e,o,i){var n,r,s,a=e.jsonp!==!1&&(eo.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&eo.test(e.data)&&"data");return a||"jsonp"===e.dataTypes[0]?(n=e.jsonpCallback=nt.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(eo,"$1"+n):e.jsonp!==!1&&(e.url+=(Le.test(e.url)?"&":"?")+e.jsonp+"="+n),e.converters["script json"]=function(){return s||nt.error(n+" was not called"),s[0]},e.dataTypes[0]="json",r=t[n],t[n]=function(){s=arguments},i.always(function(){t[n]=r,e[n]&&(e.jsonpCallback=o.jsonpCallback,to.push(n)),s&&nt.isFunction(r)&&r(s[0]),s=r=void 0}),"script"):void 0}),nt.parseHTML=function(t,e,o){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(o=e,e=!1),e=e||yt;var i=ut.exec(t),n=!o&&[];return i?[e.createElement(i[1])]:(i=nt.buildFragment([t],e,n),n&&n.length&&nt(n).remove(),nt.merge([],i.childNodes))};var oo=nt.fn.load;nt.fn.load=function(t,e,o){if("string"!=typeof t&&oo)return oo.apply(this,arguments);var i,n,r,s=this,a=t.indexOf(" ");return a>=0&&(i=nt.trim(t.slice(a,t.length)),t=t.slice(0,a)),nt.isFunction(e)?(o=e,e=void 0):e&&"object"==typeof e&&(r="POST"),s.length>0&&nt.ajax({url:t,type:r,dataType:"html",data:e}).done(function(t){n=arguments,s.html(i?nt("<div>").append(nt.parseHTML(t)).find(i):t)}).complete(o&&function(t,e){s.each(o,n||[t.responseText,e,t])}),this},nt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){nt.fn[e]=function(t){return this.on(e,t)}}),nt.expr.filters.animated=function(t){return nt.grep(nt.timers,function(e){return t===e.elem}).length};var io=t.document.documentElement;nt.offset={setOffset:function(t,e,o){var i,n,r,s,a,p,l,h=nt.css(t,"position"),u=nt(t),c={};"static"===h&&(t.style.position="relative"),a=u.offset(),r=nt.css(t,"top"),p=nt.css(t,"left"),l=("absolute"===h||"fixed"===h)&&nt.inArray("auto",[r,p])>-1,l?(i=u.position(),s=i.top,n=i.left):(s=parseFloat(r)||0,n=parseFloat(p)||0),nt.isFunction(e)&&(e=e.call(t,o,a)),null!=e.top&&(c.top=e.top-a.top+s),null!=e.left&&(c.left=e.left-a.left+n),"using"in e?e.using.call(t,c):u.css(c)}},nt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){nt.offset.setOffset(this,t,e)});var e,o,i={top:0,left:0},n=this[0],r=n&&n.ownerDocument;return r?(e=r.documentElement,nt.contains(e,n)?(typeof n.getBoundingClientRect!==Tt&&(i=n.getBoundingClientRect()),o=K(r),{top:i.top+(o.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(o.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}):i):void 0},position:function(){if(this[0]){var t,e,o={top:0,left:0},i=this[0];return"fixed"===nt.css(i,"position")?e=i.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),nt.nodeName(t[0],"html")||(o=t.offset()),o.top+=nt.css(t[0],"borderTopWidth",!0),o.left+=nt.css(t[0],"borderLeftWidth",!0)),{top:e.top-o.top-nt.css(i,"marginTop",!0),left:e.left-o.left-nt.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||io;t&&!nt.nodeName(t,"html")&&"static"===nt.css(t,"position");)t=t.offsetParent;return t||io})}}),nt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var o=/Y/.test(e);nt.fn[t]=function(i){return At(this,function(t,i,n){var r=K(t);return void 0===n?r?e in r?r[e]:r.document.documentElement[i]:t[i]:void(r?r.scrollTo(o?nt(r).scrollLeft():n,o?n:nt(r).scrollTop()):t[i]=n)},t,i,arguments.length,null)}}),nt.each(["top","left"],function(t,e){nt.cssHooks[e]=E(ot.pixelPosition,function(t,o){return o?(o=ee(t,e),ie.test(o)?nt(t).position()[e]+"px":o):void 0})}),nt.each({Height:"height",Width:"width"},function(t,e){nt.each({padding:"inner"+t,content:e,"":"outer"+t},function(o,i){nt.fn[i]=function(i,n){var r=arguments.length&&(o||"boolean"!=typeof i),s=o||(i===!0||n===!0?"margin":"border");return At(this,function(e,o,i){var n;return nt.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(n=e.documentElement,Math.max(e.body["scroll"+t],n["scroll"+t],e.body["offset"+t],n["offset"+t],n["client"+t])):void 0===i?nt.css(e,o,s):nt.style(e,o,i,s)},e,r?i:void 0,r,null)}})}),nt.fn.size=function(){return this.length},nt.fn.andSelf=nt.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return nt});var no=t.jQuery,ro=t.$;return nt.noConflict=function(e){return t.$===nt&&(t.$=ro),e&&t.jQuery===nt&&(t.jQuery=no),nt},typeof e===Tt&&(t.jQuery=t.$=nt),nt}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var o in e)if(void 0!==t.style[o])return{end:e[o]};return!1}t.fn.emulateTransitionEnd=function(e){var o=!1,i=this;t(this).one("bsTransitionEnd",function(){o=!0});var n=function(){o||t(i).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.alert");n||o.data("bs.alert",n=new i(this)),"string"==typeof e&&n[e].call(o)})}var o='[data-dismiss="alert"]',i=function(e){t(e).on("click",o,this.close)};i.VERSION="3.3.4",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function o(){s.detach().trigger("closed.bs.alert").remove()}var n=t(this),r=n.attr("data-target");r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var s=t(r);e&&e.preventDefault(),s.length||(s=n.closest(".alert")),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",o,i.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.button"),r="object"==typeof e&&e;n||i.data("bs.button",n=new o(this,r)),"toggle"==e?n.toggle():e&&n.setState(e)})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.isLoading=!1};o.VERSION="3.3.4",o.DEFAULTS={loadingText:"loading..."},o.prototype.setState=function(e){var o="disabled",i=this.$element,n=i.is("input")?"val":"html",r=i.data();e+="Text",null==r.resetText&&i.data("resetText",i[n]()),setTimeout(t.proxy(function(){i[n](null==r[e]?this.options[e]:r[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(o).attr(o,o)):this.isLoading&&(this.isLoading=!1,i.removeClass(o).removeAttr(o))},this),0)},o.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var o=this.$element.find("input");"radio"==o.prop("type")&&(o.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&o.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));t&&this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=o,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(o){var i=t(o.target);i.hasClass("btn")||(i=i.closest(".btn")),e.call(i,"toggle"),o.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.carousel"),r=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e),s="string"==typeof e?e:r.slide;n||i.data("bs.carousel",n=new o(this,r)),"number"==typeof e?n.to(e):s?n[s]():r.interval&&n.pause().cycle()})}var o=function(e,o){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=o,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};o.VERSION="3.3.4",o.TRANSITION_DURATION=600,o.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},o.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},o.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},o.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},o.prototype.getItemForDirection=function(t,e){var o=this.getItemIndex(e),i="prev"==t&&0===o||"next"==t&&o==this.$items.length-1;if(i&&!this.options.wrap)return e;var n="prev"==t?-1:1,r=(o+n)%this.$items.length;return this.$items.eq(r)},o.prototype.to=function(t){var e=this,o=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):o==t?this.pause().cycle():this.slide(t>o?"next":"prev",this.$items.eq(t))},o.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},o.prototype.next=function(){return this.sliding?void 0:this.slide("next")},o.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},o.prototype.slide=function(e,i){var n=this.$element.find(".item.active"),r=i||this.getItemForDirection(e,n),s=this.interval,a="next"==e?"left":"right",p=this;if(r.hasClass("active"))return this.sliding=!1;var l=r[0],h=t.Event("slide.bs.carousel",{relatedTarget:l,direction:a});if(this.$element.trigger(h),!h.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var u=t(this.$indicators.children()[this.getItemIndex(r)]);u&&u.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:l,direction:a});return t.support.transition&&this.$element.hasClass("slide")?(r.addClass(e),r[0].offsetWidth,n.addClass(a),r.addClass(a),n.one("bsTransitionEnd",function(){r.removeClass([e,a].join(" ")).addClass("active"),n.removeClass(["active",a].join(" ")),p.sliding=!1,setTimeout(function(){p.$element.trigger(c)},0)}).emulateTransitionEnd(o.TRANSITION_DURATION)):(n.removeClass("active"),r.addClass("active"),this.sliding=!1,this.$element.trigger(c)),s&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=o,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var n=function(o){var i,n=t(this),r=t(n.attr("data-target")||(i=n.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(r.hasClass("carousel")){var s=t.extend({},r.data(),n.data()),a=n.attr("data-slide-to");a&&(s.interval=!1),e.call(r,s),a&&r.data("bs.carousel").to(a),o.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var o=t(this);e.call(o,o.data())})})}(jQuery),+function(t){"use strict";function e(e){var o,i=e.attr("data-target")||(o=e.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,"");return t(i)}function o(e){return this.each(function(){var o=t(this),n=o.data("bs.collapse"),r=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e);!n&&r.toggle&&/show|hide/.test(e)&&(r.toggle=!1),n||o.data("bs.collapse",n=new i(this,r)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.4",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var r=t.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){n&&n.length&&(o.call(n,"hide"),e||n.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return a.call(this);var p=t.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",t.proxy(a,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[s](this.$element[0][p])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var o=this.dimension();this.$element[o](this.$element[o]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[o](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(i.TRANSITION_DURATION):n.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(o,i){var n=t(i);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var o=t.hasClass("in");t.attr("aria-expanded",o),e.toggleClass("collapsed",!o).attr("aria-expanded",o)};var n=t.fn.collapse;t.fn.collapse=o,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var n=t(this);n.attr("data-target")||i.preventDefault();var r=e(n),s=r.data("bs.collapse"),a=s?"toggle":n.data();o.call(r,a)})}(jQuery),+function(t){"use strict";function e(e){e&&3===e.which||(t(n).remove(),t(r).each(function(){var i=t(this),n=o(i),r={relatedTarget:this};n.hasClass("open")&&(n.trigger(e=t.Event("hide.bs.dropdown",r)),e.isDefaultPrevented()||(i.attr("aria-expanded","false"),n.removeClass("open").trigger("hidden.bs.dropdown",r)))}))}function o(e){var o=e.attr("data-target");o||(o=e.attr("href"),o=o&&/#[A-Za-z]/.test(o)&&o.replace(/.*(?=#[^\s]*$)/,""));var i=o&&t(o);return i&&i.length?i:e.parent()}function i(e){return this.each(function(){var o=t(this),i=o.data("bs.dropdown");i||o.data("bs.dropdown",i=new s(this)),"string"==typeof e&&i[e].call(o)})}var n=".dropdown-backdrop",r='[data-toggle="dropdown"]',s=function(e){t(e).on("click.bs.dropdown",this.toggle)};s.VERSION="3.3.4",s.prototype.toggle=function(i){var n=t(this);if(!n.is(".disabled, :disabled")){var r=o(n),s=r.hasClass("open");if(e(),!s){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&t('<div class="dropdown-backdrop"/>').insertAfter(t(this)).on("click",e);var a={relatedTarget:this};if(r.trigger(i=t.Event("show.bs.dropdown",a)),i.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger("shown.bs.dropdown",a)}return!1}},s.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var i=t(this);if(e.preventDefault(),e.stopPropagation(),!i.is(".disabled, :disabled")){var n=o(i),s=n.hasClass("open");if(!s&&27!=e.which||s&&27==e.which)return 27==e.which&&n.find(r).trigger("focus"),i.trigger("click");var a=" li:not(.disabled):visible a",p=n.find('[role="menu"]'+a+', [role="listbox"]'+a);if(p.length){var l=p.index(e.target);38==e.which&&l>0&&l--,40==e.which&&l<p.length-1&&l++,~l||(l=0),p.eq(l).trigger("focus")}}}};var a=t.fn.dropdown;t.fn.dropdown=i,t.fn.dropdown.Constructor=s,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=a,this},t(document).on("click.bs.dropdown.data-api",e).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",r,s.prototype.toggle).on("keydown.bs.dropdown.data-api",r,s.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',s.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',s.prototype.keydown)}(jQuery),+function(t){"use strict";function e(e,i){return this.each(function(){var n=t(this),r=n.data("bs.modal"),s=t.extend({},o.DEFAULTS,n.data(),"object"==typeof e&&e);r||n.data("bs.modal",r=new o(this,s)),"string"==typeof e?r[e](i):s.show&&r.show(i)})}var o=function(e,o){this.options=o,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};o.VERSION="3.3.4",o.TRANSITION_DURATION=300,o.BACKDROP_TRANSITION_DURATION=150,o.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},o.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},o.prototype.show=function(e){var i=this,n=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(n),this.isShown||n.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var n=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),n&&i.$element[0].offsetWidth,i.$element.addClass("in").attr("aria-hidden",!1),i.enforceFocus();var r=t.Event("shown.bs.modal",{relatedTarget:e});n?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(o.TRANSITION_DURATION):i.$element.trigger("focus").trigger(r)}))},o.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(o.TRANSITION_DURATION):this.hideModal())},o.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},o.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},o.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},o.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},o.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},o.prototype.backdrop=function(e){var i=this,n=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var r=t.support.transition&&n;if(this.$backdrop=t('<div class="modal-backdrop '+n+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),r&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;r?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(o.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var s=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",s).emulateTransitionEnd(o.BACKDROP_TRANSITION_DURATION):s()}else e&&e()},o.prototype.handleUpdate=function(){this.adjustDialog()},o.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},o.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},o.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},o.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},o.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},o.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var i=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=o,t.fn.modal.noConflict=function(){return t.fn.modal=i,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(o){var i=t(this),n=i.attr("href"),r=t(i.attr("data-target")||n&&n.replace(/.*(?=#[^\s]+$)/,"")),s=r.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(n)&&n},r.data(),i.data());i.is("a")&&o.preventDefault(),r.one("show.bs.modal",function(t){t.isDefaultPrevented()||r.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),e.call(r,s,this)})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.tooltip"),r="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||i.data("bs.tooltip",n=new o(this,r)),"string"==typeof e&&n[e]())})}var o=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",t,e)};o.VERSION="3.3.4",o.TRANSITION_DURATION=150,o.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},o.prototype.init=function(e,o,i){if(this.enabled=!0,this.type=e,this.$element=t(o),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),r=n.length;r--;){var s=n[r];if("click"==s)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",p="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(p+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},o.prototype.getDelegateOptions=function(){var e={},o=this.getDefaults();return this._options&&t.each(this._options,function(t,i){o[t]!=i&&(e[t]=i)}),e},o.prototype.enter=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o&&o.$tip&&o.$tip.is(":visible")?void(o.hoverState="in"):(o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="in",o.options.delay&&o.options.delay.show?void(o.timeout=setTimeout(function(){"in"==o.hoverState&&o.show()},o.options.delay.show)):o.show())},o.prototype.leave=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="out",o.options.delay&&o.options.delay.hide?void(o.timeout=setTimeout(function(){"out"==o.hoverState&&o.hide()},o.options.delay.hide)):o.hide()},o.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var n=this,r=this.tip(),s=this.getUID(this.type);this.setContent(),r.attr("id",s),this.$element.attr("aria-describedby",s),this.options.animation&&r.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,p=/\s?auto?\s?/i,l=p.test(a);l&&(a=a.replace(p,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?r.appendTo(this.options.container):r.insertAfter(this.$element);var h=this.getPosition(),u=r[0].offsetWidth,c=r[0].offsetHeight;if(l){var f=a,y=this.options.container?t(this.options.container):this.$element.parent(),d=this.getPosition(y);a="bottom"==a&&h.bottom+c>d.bottom?"top":"top"==a&&h.top-c<d.top?"bottom":"right"==a&&h.right+u>d.width?"left":"left"==a&&h.left-u<d.left?"right":a,r.removeClass(f).addClass(a)}var g=this.getCalculatedOffset(a,h,u,c);this.applyPlacement(g,a);var v=function(){var t=n.hoverState;n.$element.trigger("shown.bs."+n.type),n.hoverState=null,"out"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",v).emulateTransitionEnd(o.TRANSITION_DURATION):v()}},o.prototype.applyPlacement=function(e,o){var i=this.tip(),n=i[0].offsetWidth,r=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),e.top=e.top+s,e.left=e.left+a,t.offset.setOffset(i[0],t.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),i.addClass("in");var p=i[0].offsetWidth,l=i[0].offsetHeight;"top"==o&&l!=r&&(e.top=e.top+r-l);var h=this.getViewportAdjustedDelta(o,e,p,l);h.left?e.left+=h.left:e.top+=h.top;var u=/top|bottom/.test(o),c=u?2*h.left-n+p:2*h.top-r+l,f=u?"offsetWidth":"offsetHeight";i.offset(e),this.replaceArrow(c,i[0][f],u)},o.prototype.replaceArrow=function(t,e,o){this.arrow().css(o?"left":"top",50*(1-t/e)+"%").css(o?"top":"left","")},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},o.prototype.hide=function(e){function i(){"in"!=n.hoverState&&r.detach(),n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),e&&e()}var n=this,r=t(this.$tip),s=t.Event("hide.bs."+this.type);return this.$element.trigger(s),s.isDefaultPrevented()?void 0:(r.removeClass("in"),t.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i(),this.hoverState=null,this)},o.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},o.prototype.hasContent=function(){return this.getTitle()},o.prototype.getPosition=function(e){e=e||this.$element;var o=e[0],i="BODY"==o.tagName,n=o.getBoundingClientRect();null==n.width&&(n=t.extend({},n,{width:n.right-n.left,height:n.bottom-n.top}));var r=i?{top:0,left:0}:e.offset(),s={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},a=i?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},n,s,a,r)},o.prototype.getCalculatedOffset=function(t,e,o,i){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-o/2}:"top"==t?{top:e.top-i,left:e.left+e.width/2-o/2}:"left"==t?{top:e.top+e.height/2-i/2,left:e.left-o}:{top:e.top+e.height/2-i/2,left:e.left+e.width}},o.prototype.getViewportAdjustedDelta=function(t,e,o,i){var n={top:0,left:0};if(!this.$viewport)return n;var r=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-r-s.scroll,p=e.top+r-s.scroll+i;a<s.top?n.top=s.top-a:p>s.top+s.height&&(n.top=s.top+s.height-p)}else{var l=e.left-r,h=e.left+r+o;l<s.left?n.left=s.left-l:h>s.width&&(n.left=s.left+s.width-h)}return n},o.prototype.getTitle=function(){var t,e=this.$element,o=this.options;return t=e.attr("data-original-title")||("function"==typeof o.title?o.title.call(e[0]):o.title)},o.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},o.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},o.prototype.enable=function(){this.enabled=!0},o.prototype.disable=function(){this.enabled=!1},o.prototype.toggleEnabled=function(){this.enabled=!this.enabled},o.prototype.toggle=function(e){var o=this;e&&(o=t(e.currentTarget).data("bs."+this.type),o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o))),o.tip().hasClass("in")?o.leave(o):o.enter(o)},o.prototype.destroy=function(){
+var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type)})};var i=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=o,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.popover"),r="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||i.data("bs.popover",n=new o(this,r)),"string"==typeof e&&n[e]())})}var o=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");o.VERSION="3.3.4",o.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),o.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),o.prototype.constructor=o,o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),o=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof o?"html":"append":"text"](o),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},o.prototype.hasContent=function(){return this.getTitle()||this.getContent()},o.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=o,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),+function(t){"use strict";function e(o,i){this.$body=t(document.body),this.$scrollElement=t(t(o).is(document.body)?window:o),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function o(o){return this.each(function(){var i=t(this),n=i.data("bs.scrollspy"),r="object"==typeof o&&o;n||i.data("bs.scrollspy",n=new e(this,r)),"string"==typeof o&&n[o]()})}e.VERSION="3.3.4",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,o="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(o="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),r=/^#./.test(n)&&t(n);return r&&r.length&&r.is(":visible")&&[[r[o]().top+i,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,o=this.getScrollHeight(),i=this.options.offset+o-this.$scrollElement.height(),n=this.offsets,r=this.targets,s=this.activeTarget;if(this.scrollHeight!=o&&this.refresh(),e>=i)return s!=(t=r[r.length-1])&&this.activate(t);if(s&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)s!=r[t]&&e>=n[t]&&(void 0===n[t+1]||e<n[t+1])&&this.activate(r[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var o=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',i=t(o).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=t.fn.scrollspy;t.fn.scrollspy=o,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);o.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.tab");n||i.data("bs.tab",n=new o(this)),"string"==typeof e&&n[e]()})}var o=function(e){this.element=t(e)};o.VERSION="3.3.4",o.TRANSITION_DURATION=150,o.prototype.show=function(){var e=this.element,o=e.closest("ul:not(.dropdown-menu)"),i=e.data("target");if(i||(i=e.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=o.find(".active:last a"),r=t.Event("hide.bs.tab",{relatedTarget:e[0]}),s=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(r),e.trigger(s),!s.isDefaultPrevented()&&!r.isDefaultPrevented()){var a=t(i);this.activate(e.closest("li"),o),this.activate(a,a.parent(),function(){n.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},o.prototype.activate=function(e,i,n){function r(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),a?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var s=i.find("> .active"),a=n&&t.support.transition&&(s.length&&s.hasClass("fade")||!!i.find("> .fade").length);s.length&&a?s.one("bsTransitionEnd",r).emulateTransitionEnd(o.TRANSITION_DURATION):r(),s.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=o,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var n=function(o){o.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.affix"),r="object"==typeof e&&e;n||i.data("bs.affix",n=new o(this,r)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.options=t.extend({},o.DEFAULTS,i),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};o.VERSION="3.3.4",o.RESET="affix affix-top affix-bottom",o.DEFAULTS={offset:0,target:window},o.prototype.getState=function(t,e,o,i){var n=this.$target.scrollTop(),r=this.$element.offset(),s=this.$target.height();if(null!=o&&"top"==this.affixed)return o>n&&"top";if("bottom"==this.affixed)return null!=o?!(n+this.unpin<=r.top)&&"bottom":!(t-i>=n+s)&&"bottom";var a=null==this.affixed,p=a?n:r.top,l=a?s:e;return null!=o&&o>=n?"top":null!=i&&p+l>=t-i&&"bottom"},o.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(o.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},o.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},o.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,n=i.top,r=i.bottom,s=t(document.body).height();"object"!=typeof i&&(r=n=i),"function"==typeof n&&(n=i.top(this.$element)),"function"==typeof r&&(r=i.bottom(this.$element));var a=this.getState(s,e,n,r);if(this.affixed!=a){null!=this.unpin&&this.$element.css("top","");var p="affix"+(a?"-"+a:""),l=t.Event(p+".bs.affix");if(this.$element.trigger(l),l.isDefaultPrevented())return;this.affixed=a,this.unpin="bottom"==a?this.getPinnedOffset():null,this.$element.removeClass(o.RESET).addClass(p).trigger(p.replace("affix","affixed")+".bs.affix")}"bottom"==a&&this.$element.offset({top:s-e-r})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=o,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var o=t(this),i=o.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(o,i)})})}(jQuery),function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.ol=e()}(this,function(){function t(t){return void 0!==t}function e(e,o,i){e=e.split("."),i=i||sm,e[0]in i||!i.execScript||i.execScript("var "+e[0]);for(var n;e.length&&(n=e.shift());)!e.length&&t(o)?i[n]=o:i=i[n]?i[n]:i[n]={}}function o(){}function i(t){t.Ia=function(){return t.jg?t.jg:t.jg=new t}}function n(t){var e=typeof t;if("object"==e){if(!t)return"null";if(t instanceof Array)return"array";if(t instanceof Object)return e;var o=Object.prototype.toString.call(t);if("[object Window]"==o)return"object";if("[object Array]"==o||"number"==typeof t.length&&"undefined"!=typeof t.splice&&"undefined"!=typeof t.propertyIsEnumerable&&!t.propertyIsEnumerable("splice"))return"array";if("[object Function]"==o||"undefined"!=typeof t.call&&"undefined"!=typeof t.propertyIsEnumerable&&!t.propertyIsEnumerable("call"))return"function"}else if("function"==e&&"undefined"==typeof t.call)return"object";return e}function r(t){return null===t}function s(t){return"array"==n(t)}function a(t){var e=n(t);return"array"==e||"object"==e&&"number"==typeof t.length}function p(t){return"string"==typeof t}function l(t){return"number"==typeof t}function h(t){return"function"==n(t)}function u(t){var e=typeof t;return"object"==e&&null!=t||"function"==e}function c(t){return t[am]||(t[am]=++pm)}function f(t,e,o){return t.call.apply(t.bind,arguments)}function y(t,e,o){if(!t)throw Error();if(2<arguments.length){var i=Array.prototype.slice.call(arguments,2);return function(){var o=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(o,i),t.apply(e,o)}}return function(){return t.apply(e,arguments)}}function d(t,e,o){return d=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?f:y,d.apply(null,arguments)}function g(t,e){var o=Array.prototype.slice.call(arguments,1);return function(){var e=o.slice();return e.push.apply(e,arguments),t.apply(this,e)}}function v(t,e){function o(){}o.prototype=e.prototype,t.S=e.prototype,t.prototype=new o,t.prototype.constructor=t,t.Mo=function(t,o,i){for(var n=Array(arguments.length-2),r=2;r<arguments.length;r++)n[r-2]=arguments[r];return e.prototype[o].apply(t,n)}}function m(t){if(Error.captureStackTrace)Error.captureStackTrace(this,m);else{var e=Error().stack;e&&(this.stack=e)}t&&(this.message=String(t))}function b(t,e){var o=t.length-e.length;return 0<=o&&t.indexOf(e,o)==o}function w(t,e){for(var o=t.split("%s"),i="",n=Array.prototype.slice.call(arguments,1);n.length&&1<o.length;)i+=o.shift()+n.shift();return i+o.join("%s")}function x(t){return bm.test(t)?(-1!=t.indexOf("&")&&(t=t.replace(fm,"&amp;")),-1!=t.indexOf("<")&&(t=t.replace(ym,"&lt;")),-1!=t.indexOf(">")&&(t=t.replace(dm,"&gt;")),-1!=t.indexOf('"')&&(t=t.replace(gm,"&quot;")),-1!=t.indexOf("'")&&(t=t.replace(vm,"&#39;")),-1!=t.indexOf("\0")&&(t=t.replace(mm,"&#0;")),t):t}function S(e){e=t(void 0)?e.toFixed(void 0):String(e);var o=e.indexOf(".");return-1==o&&(o=e.length),o=Math.max(0,2-o),Array(o+1).join("0")+e}function T(t,e){for(var o=0,i=cm(String(t)).split("."),n=cm(String(e)).split("."),r=Math.max(i.length,n.length),s=0;0==o&&s<r;s++){var a=i[s]||"",p=n[s]||"",l=RegExp("(\\d*)(\\D*)","g"),h=RegExp("(\\d*)(\\D*)","g");do{var u=l.exec(a)||["","",""],c=h.exec(p)||["","",""];if(0==u[0].length&&0==c[0].length)break;o=M(0==u[1].length?0:parseInt(u[1],10),0==c[1].length?0:parseInt(c[1],10))||M(0==u[2].length,0==c[2].length)||M(u[2],c[2])}while(0==o)}return o}function M(t,e){return t<e?-1:t>e?1:0}function C(t,e){return wm.indexOf.call(t,e,void 0)}function E(t,e,o){wm.forEach.call(t,e,o)}function P(t,e){return wm.filter.call(t,e,void 0)}function k(t,e,o){return wm.map.call(t,e,o)}function A(t,e){return wm.some.call(t,e,void 0)}function R(t,e){var o=L(t,e,void 0);return 0>o?null:p(t)?t.charAt(o):t[o]}function L(t,e,o){for(var i=t.length,n=p(t)?t.split(""):t,r=0;r<i;r++)if(r in n&&e.call(o,n[r],r,t))return r;return-1}function N(t,e){return 0<=C(t,e)}function j(t,e){var o,i=C(t,e);return(o=0<=i)&&wm.splice.call(t,i,1),o}function I(t){return wm.concat.apply(wm,arguments)}function D(t){var e=t.length;if(0<e){for(var o=Array(e),i=0;i<e;i++)o[i]=t[i];return o}return[]}function F(t,e){for(var o=1;o<arguments.length;o++){var i=arguments[o];if(a(i)){var n=t.length||0,r=i.length||0;t.length=n+r;for(var s=0;s<r;s++)t[n+s]=i[s]}else t.push(i)}}function O(t,e,o,i){wm.splice.apply(t,B(arguments,1))}function B(t,e,o){return 2>=arguments.length?wm.slice.call(t,e):wm.slice.call(t,e,o)}function U(t,e){t.sort(e||H)}function G(t,e){if(!a(t)||!a(e)||t.length!=e.length)return!1;for(var o=t.length,i=q,n=0;n<o;n++)if(!i(t[n],e[n]))return!1;return!0}function H(t,e){return t>e?1:t<e?-1:0}function q(t,e){return t===e}function $(t){for(var e=[],o=0;o<arguments.length;o++){var i=arguments[o];if(s(i))for(var n=0;n<i.length;n+=8192)for(var r=$.apply(null,B(i,n,n+8192)),a=0;a<r.length;a++)e.push(r[a]);else e.push(i)}return e}function X(t){return-1!=um.indexOf(t)}function W(t,e,o){for(var i in t)e.call(o,t[i],i,t)}function z(t,e){for(var o in t)if(e.call(void 0,t[o],o,t))return!0;return!1}function K(t){var e,o=0;for(e in t)o++;return o}function V(t){var e,o=[],i=0;for(e in t)o[i++]=t[e];return o}function Y(t){var e,o=[],i=0;for(e in t)o[i++]=e;return o}function Z(t,e){return e in t}function _(t,e){for(var o in t)if(t[o]==e)return!0;return!1}function J(t,e){for(var o in t)if(e.call(void 0,t[o],o,t))return o}function Q(t){for(var e in t)return!1;return!0}function tt(t){for(var e in t)delete t[e]}function et(t,e){e in t&&delete t[e]}function ot(t,e,o){return e in t?t[e]:o}function it(t,e){var o=[];return e in t?t[e]:t[e]=o}function nt(t){var e,o={};for(e in t)o[e]=t[e];return o}function rt(t,e){for(var o,i,n=1;n<arguments.length;n++){i=arguments[n];for(o in i)t[o]=i[o];for(var r=0;r<Tm.length;r++)o=Tm[r],Object.prototype.hasOwnProperty.call(i,o)&&(t[o]=i[o])}}function st(t){var e=arguments.length;if(1==e&&s(arguments[0]))return st.apply(null,arguments[0]);for(var o={},i=0;i<e;i++)o[arguments[i]]=!0;return o}function at(){var t=sm.document;return t?t.documentMode:void 0}function pt(t){return Nm[t]||(Nm[t]=0<=T(Lm,t))}function lt(t,e,o){return Math.min(Math.max(t,e),o)}function ht(t,e){var o=t%e;return 0>o*e?o+e:o}function ut(t,e,o){return t+o*(e-t)}function ct(t){return t*Math.PI/180}function ft(e){return function(o){if(t(o))return[lt(o[0],e[0],e[2]),lt(o[1],e[1],e[3])]}}function yt(t){return t}function dt(t,e,o){var i=t.length;if(t[0]<=e)return 0;if(!(e<=t[i-1]))if(0<o){for(o=1;o<i;++o)if(t[o]<e)return o-1}else if(0>o){for(o=1;o<i;++o)if(t[o]<=e)return o}else for(o=1;o<i;++o){if(t[o]==e)return o;if(t[o]<e)return t[o-1]-e<e-t[o]?o-1:o}return i-1}function gt(e){return function(o,i,n){if(t(o))return o=dt(e,o,n),o=lt(o+i,0,e.length-1),e[o]}}function vt(e,o,i){return function(n,r,s){if(t(n))return s=0<s?0:0>s?1:.5,n=Math.floor(Math.log(o/n)/Math.log(e)+s),r=Math.max(n+r,0),t(i)&&(r=Math.min(r,i)),o/Math.pow(e,r)}}function mt(e){if(t(e))return 0}function bt(e,o){if(t(e))return e+o}function wt(e){var o=2*Math.PI/e;return function(e,i){if(t(e))return e=Math.floor((e+i)/o+.5)*o}}function xt(){var e=ct(5);return function(o,i){if(t(o))return Math.abs(o+i)<=e?0:o+i}}function St(t,e,o){this.center=t,this.resolution=e,this.rotation=o}function Tt(){0!=Um&&(Gm[c(this)]=this),this.U=this.U,this.V=this.V}function Mt(e,o){var i=g(Ct,o);e.U?i.call(void 0):(e.V||(e.V=[]),e.V.push(t(void 0)?d(i,void 0):i))}function Ct(t){t&&"function"==typeof t.Yc&&t.Yc()}function Et(t,e){this.type=t,this.c=this.target=e,this.f=!1,this.rh=!0}function Pt(t){t.fb()}function kt(t){t.preventDefault()}function At(t){return At[" "](t),t}function Rt(t,e){Et.call(this,t?t.type:""),this.relatedTarget=this.c=this.target=null,this.q=this.e=this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0,this.l=this.d=this.a=this.i=!1,this.state=null,this.g=!1,this.b=null,t&&Lt(this,t,e)}function Lt(t,e,o){t.b=e;var i=t.type=e.type;if(t.target=e.target||e.srcElement,t.c=o,o=e.relatedTarget){if(Em){var n;t:{try{At(o.nodeName),n=!0;break t}catch(r){}n=!1}n||(o=null)}}else"mouseover"==i?o=e.fromElement:"mouseout"==i&&(o=e.toElement);t.relatedTarget=o,Object.defineProperties?Object.defineProperties(t,{offsetX:{configurable:!0,enumerable:!0,get:t.Zf,set:t.bo},offsetY:{configurable:!0,enumerable:!0,get:t.$f,set:t.co}}):(t.offsetX=t.Zf(),t.offsetY=t.$f()),t.clientX=void 0!==e.clientX?e.clientX:e.pageX,t.clientY=void 0!==e.clientY?e.clientY:e.pageY,t.screenX=e.screenX||0,t.screenY=e.screenY||0,t.button=e.button,t.e=e.keyCode||0,t.q=e.charCode||("keypress"==i?e.keyCode:0),t.i=e.ctrlKey,t.a=e.altKey,t.d=e.shiftKey,t.l=e.metaKey,t.g=km?e.metaKey:e.ctrlKey,t.state=e.state,e.defaultPrevented&&t.preventDefault()}function Nt(t){return!((Fm?0!=t.b.button:"click"!=t.type&&!(t.b.button&qm[0]))||Pm&&km&&t.i)}function jt(t){return!(!t||!t[$m])}function It(t,e,o,i,n){this.$b=t,this.b=null,this.src=e,this.type=o,this.Qc=!!i,this.Sd=n,this.key=++Xm,this.Hc=this.vd=!1}function Dt(t){t.Hc=!0,t.$b=null,t.b=null,t.src=null,t.Sd=null}function Ft(t){this.src=t,this.b={},this.a=0}function Ot(t,e){var o=e.type;if(!(o in t.b))return!1;var i=j(t.b[o],e);return i&&(Dt(e),0==t.b[o].length&&(delete t.b[o],t.a--)),i}function Bt(t,e,o,i,n){return t=t.b[e.toString()],e=-1,t&&(e=Gt(t,o,i,n)),-1<e?t[e]:null}function Ut(e,o,i){var n=t(o),r=n?o.toString():"",s=t(i);return z(e.b,function(t){for(var e=0;e<t.length;++e)if(!(n&&t[e].type!=r||s&&t[e].Qc!=i))return!0;return!1})}function Gt(t,e,o,i){for(var n=0;n<t.length;++n){var r=t[n];if(!r.Hc&&r.$b==e&&r.Qc==!!o&&r.Sd==i)return n}return-1}function Ht(t,e,o,i,n){if(s(e)){for(var r=0;r<e.length;r++)Ht(t,e[r],o,i,n);return null}return o=Jt(o),jt(t)?t.Ka(e,o,i,n):qt(t,e,o,!1,i,n)}function qt(t,e,o,i,n,r){if(!e)throw Error("Invalid event type");var s=!!n,a=_t(t);return a||(t[Wm]=a=new Ft(t)),o=a.add(e,o,i,n,r),o.b?o:(i=$t(),o.b=i,i.src=t,i.$b=o,t.addEventListener?t.addEventListener(e.toString(),i,s):t.attachEvent(Kt(e.toString()),i),Km++,o)}function $t(){var t=Zt,e=Om?function(o){return t.call(e.src,e.$b,o)}:function(o){if(o=t.call(e.src,e.$b,o),!o)return o};return e}function Xt(t,e,o,i,n){if(s(e)){for(var r=0;r<e.length;r++)Xt(t,e[r],o,i,n);return null}return o=Jt(o),jt(t)?t.ab.add(String(e),o,!0,i,n):qt(t,e,o,!0,i,n)}function Wt(t,e,o,i,n){if(s(e))for(var r=0;r<e.length;r++)Wt(t,e[r],o,i,n);else o=Jt(o),jt(t)?t.wf(e,o,i,n):t&&(t=_t(t))&&(e=Bt(t,e,o,!!i,n))&&zt(e)}function zt(t){if(l(t)||!t||t.Hc)return!1;var e=t.src;if(jt(e))return Ot(e.ab,t);var o=t.type,i=t.b;return e.removeEventListener?e.removeEventListener(o,i,t.Qc):e.detachEvent&&e.detachEvent(Kt(o),i),Km--,(o=_t(e))?(Ot(o,t),0==o.a&&(o.src=null,e[Wm]=null)):Dt(t),!0}function Kt(t){return t in zm?zm[t]:zm[t]="on"+t}function Vt(t,e,o,i){var n=!0;if((t=_t(t))&&(e=t.b[e.toString()]))for(e=e.concat(),t=0;t<e.length;t++){var r=e[t];r&&r.Qc==o&&!r.Hc&&(r=Yt(r,i),n=n&&!1!==r)}return n}function Yt(t,e){var o=t.$b,i=t.Sd||t.src;return t.vd&&zt(t),o.call(i,e)}function Zt(t,e){if(t.Hc)return!0;if(!Om){var o;if(!(o=e))t:{o=["window","event"];for(var i,n=sm;i=o.shift();){if(null==n[i]){o=null;break t}n=n[i]}o=n}if(i=o,o=new Rt(i,this),n=!0,!(0>i.keyCode||void 0!=i.returnValue)){t:{var r=!1;if(0==i.keyCode)try{i.keyCode=-1;break t}catch(s){r=!0}(r||void 0==i.returnValue)&&(i.returnValue=!0)}for(i=[],r=o.c;r;r=r.parentNode)i.push(r);for(var r=t.type,a=i.length-1;!o.f&&0<=a;a--){o.c=i[a];var p=Vt(i[a],r,!0,o),n=n&&p}for(a=0;!o.f&&a<i.length;a++)o.c=i[a],p=Vt(i[a],r,!1,o),n=n&&p}return n}return Yt(t,new Rt(e,this))}function _t(t){return t=t[Wm],t instanceof Ft?t:null}function Jt(t){return h(t)?t:(t[Vm]||(t[Vm]=function(e){return t.handleEvent(e)}),t[Vm])}function Qt(){Tt.call(this),this.ab=new Ft(this),this.rc=this,this.sa=null}function te(t,e,o,i){if(e=t.ab.b[String(e)],!e)return!0;e=e.concat();for(var n=!0,r=0;r<e.length;++r){var s=e[r];if(s&&!s.Hc&&s.Qc==o){var a=s.$b,p=s.Sd||s.src;s.vd&&Ot(t.ab,s),n=!1!==a.call(p,i)&&n}}return n&&0!=i.rh}function ee(e,o,i){return Ut(e.ab,t(o)?String(o):void 0,i)}function oe(){Qt.call(this),this.b=0}function ie(t){zt(t)}function ne(t,e,o){Et.call(this,t),this.key=e,this.oldValue=o}function re(e){oe.call(this),c(this),this.q={},t(e)&&this.t(e)}function se(t){return Ym.hasOwnProperty(t)?Ym[t]:Ym[t]="change:"+t}function ae(t,e,o){var i;i=se(e),t.dispatchEvent(new ne(i,e,o)),t.dispatchEvent(new ne("propertychange",e,o))}function pe(e,o,i){return t(i)||(i=[0,0]),i[0]=e[0]+2*o,i[1]=e[1]+2*o,i}function le(e,o,i){return t(i)||(i=[0,0]),i[0]=e[0]*o+.5|0,i[1]=e[1]*o+.5|0,i}function he(e,o){return s(e)?e:(t(o)?(o[0]=e,o[1]=e):o=[e,e],o)}function ue(t,e){return t[0]+=e[0],t[1]+=e[1],t}function ce(t,e){var o=t[0],i=t[1],n=e[0],r=e[1],s=n[0],n=n[1],a=r[0],r=r[1],p=a-s,l=r-n,o=0===p&&0===l?0:(p*(o-s)+l*(i-n))/(p*p+l*l||0);return 0>=o||(1<=o?(s=a,n=r):(s+=o*p,n+=o*l)),[s,n]}function fe(t,e){var o=ht(t+180,360)-180,i=Math.abs(Math.round(3600*o));return Math.floor(i/3600)+"° "+Math.floor(i/60%60)+"′ "+Math.floor(i%60)+"″ "+e.charAt(0>o?1:0)}function ye(e,o,i){return t(e)?o.replace("{x}",e[0].toFixed(i)).replace("{y}",e[1].toFixed(i)):""}function de(t,e){for(var o=!0,i=t.length-1;0<=i;--i)if(t[i]!=e[i]){o=!1;break}return o}function ge(t,e){var o=Math.cos(e),i=Math.sin(e),n=t[1]*o+t[0]*i;return t[0]=t[0]*o-t[1]*i,t[1]=n,t}function ve(t,e){var o=t[0]-e[0],i=t[1]-e[1];return o*o+i*i}function me(t,e){return ve(t,ce(t,e))}function be(t,e){return ye(t,"{x}, {y}",e)}function we(t){this.length=t.length||t;for(var e=0;e<this.length;e++)this[e]=t[e]||0}function xe(t){this.length=t.length||t;for(var e=0;e<this.length;e++)this[e]=t[e]||0}function Se(t,e,o,i,n){t[0]=e,t[1]=o,t[2]=i,t[3]=n}function Te(){var t=Array(16);return Ce(t,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),t}function Me(){var t=Array(16);return Ce(t,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),t}function Ce(t,e,o,i,n,r,s,a,p,l,h,u,c,f,y,d,g){t[0]=e,t[1]=o,t[2]=i,t[3]=n,t[4]=r,t[5]=s,t[6]=a,t[7]=p,t[8]=l,t[9]=h,t[10]=u,t[11]=c,t[12]=f,t[13]=y,t[14]=d,t[15]=g}function Ee(t,e){t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]}function Pe(t){t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1}function ke(t,e,o){var i=t[0],n=t[1],r=t[2],s=t[3],a=t[4],p=t[5],l=t[6],h=t[7],u=t[8],c=t[9],f=t[10],y=t[11],d=t[12],g=t[13],v=t[14];t=t[15];var m=e[0],b=e[1],w=e[2],x=e[3],S=e[4],T=e[5],M=e[6],C=e[7],E=e[8],P=e[9],k=e[10],A=e[11],R=e[12],L=e[13],N=e[14];e=e[15],o[0]=i*m+a*b+u*w+d*x,o[1]=n*m+p*b+c*w+g*x,o[2]=r*m+l*b+f*w+v*x,o[3]=s*m+h*b+y*w+t*x,o[4]=i*S+a*T+u*M+d*C,o[5]=n*S+p*T+c*M+g*C,o[6]=r*S+l*T+f*M+v*C,o[7]=s*S+h*T+y*M+t*C,o[8]=i*E+a*P+u*k+d*A,o[9]=n*E+p*P+c*k+g*A,o[10]=r*E+l*P+f*k+v*A,o[11]=s*E+h*P+y*k+t*A,o[12]=i*R+a*L+u*N+d*e,o[13]=n*R+p*L+c*N+g*e,o[14]=r*R+l*L+f*N+v*e,o[15]=s*R+h*L+y*N+t*e}function Ae(t,e){var o=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],p=t[6],l=t[7],h=t[8],u=t[9],c=t[10],f=t[11],y=t[12],d=t[13],g=t[14],v=t[15],m=o*a-i*s,b=o*p-n*s,w=o*l-r*s,x=i*p-n*a,S=i*l-r*a,T=n*l-r*p,M=h*d-u*y,C=h*g-c*y,E=h*v-f*y,P=u*g-c*d,k=u*v-f*d,A=c*v-f*g,R=m*A-b*k+w*P+x*E-S*C+T*M;0!=R&&(R=1/R,e[0]=(a*A-p*k+l*P)*R,e[1]=(-i*A+n*k-r*P)*R,e[2]=(d*T-g*S+v*x)*R,e[3]=(-u*T+c*S-f*x)*R,e[4]=(-s*A+p*E-l*C)*R,e[5]=(o*A-n*E+r*C)*R,e[6]=(-y*T+g*w-v*b)*R,e[7]=(h*T-c*w+f*b)*R,e[8]=(s*k-a*E+l*M)*R,e[9]=(-o*k+i*E-r*M)*R,e[10]=(y*S-d*w+v*m)*R,e[11]=(-h*S+u*w-f*m)*R,e[12]=(-s*P+a*C-p*M)*R,e[13]=(o*P-i*C+n*M)*R,e[14]=(-y*x+d*b-g*m)*R,e[15]=(h*x-u*b+c*m)*R)}function Re(t,e,o){var i=t[1]*e+t[5]*o+0*t[9]+t[13],n=t[2]*e+t[6]*o+0*t[10]+t[14],r=t[3]*e+t[7]*o+0*t[11]+t[15];t[12]=t[0]*e+t[4]*o+0*t[8]+t[12],t[13]=i,t[14]=n,t[15]=r}function Le(t,e,o){Ce(t,t[0]*e,t[1]*e,t[2]*e,t[3]*e,t[4]*o,t[5]*o,t[6]*o,t[7]*o,1*t[8],1*t[9],1*t[10],1*t[11],t[12],t[13],t[14],t[15])}function Ne(t,e){var o=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],p=t[6],l=t[7],h=Math.cos(e),u=Math.sin(e);t[0]=o*h+s*u,t[1]=i*h+a*u,t[2]=n*h+p*u,t[3]=r*h+l*u,t[4]=o*-u+s*h,t[5]=i*-u+a*h,t[6]=n*-u+p*h,t[7]=r*-u+l*h}function je(t){for(var e=He(),o=0,i=t.length;o<i;++o)ze(e,t[o]);return e}function Ie(t,e,o){var i=Math.min.apply(null,t),n=Math.min.apply(null,e);return t=Math.max.apply(null,t),e=Math.max.apply(null,e),qe(i,n,t,e,o)}function De(e,o,i){return t(i)?(i[0]=e[0]-o,i[1]=e[1]-o,i[2]=e[2]+o,i[3]=e[3]+o,i):[e[0]-o,e[1]-o,e[2]+o,e[3]+o]}function Fe(e,o){return t(o)?(o[0]=e[0],o[1]=e[1],o[2]=e[2],o[3]=e[3],o):e.slice()}function Oe(t,e,o){return e=e<t[0]?t[0]-e:t[2]<e?e-t[2]:0,t=o<t[1]?t[1]-o:t[3]<o?o-t[3]:0,e*e+t*t}function Be(t,e){return t[0]<=e[0]&&e[2]<=t[2]&&t[1]<=e[1]&&e[3]<=t[3]}function Ue(t,e,o){return t[0]<=e&&e<=t[2]&&t[1]<=o&&o<=t[3]}function Ge(t,e){var o=t[1],i=t[2],n=t[3],r=e[0],s=e[1],a=0;return r<t[0]?a=16|a:r>i&&(a=4|a),s<o?a|=8:s>n&&(a|=2),0===a&&(a=1),a}function He(){return[1/0,1/0,-(1/0),-(1/0)]}function qe(e,o,i,n,r){return t(r)?(r[0]=e,r[1]=o,r[2]=i,r[3]=n,r):[e,o,i,n]}function $e(t,e){var o=t[0],i=t[1];return qe(o,i,o,i,e)}function Xe(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function We(t,e){return e[0]<t[0]&&(t[0]=e[0]),e[2]>t[2]&&(t[2]=e[2]),e[1]<t[1]&&(t[1]=e[1]),e[3]>t[3]&&(t[3]=e[3]),t}function ze(t,e){e[0]<t[0]&&(t[0]=e[0]),e[0]>t[2]&&(t[2]=e[0]),e[1]<t[1]&&(t[1]=e[1]),e[1]>t[3]&&(t[3]=e[1])}function Ke(t,e,o,i,n){for(;o<i;o+=n){var r=t,s=e[o],a=e[o+1];r[0]=Math.min(r[0],s),r[1]=Math.min(r[1],a),r[2]=Math.max(r[2],s),r[3]=Math.max(r[3],a)}return t}function Ve(t,e){var o;return(o=e.call(void 0,Ye(t)))||(o=e.call(void 0,Ze(t)))||(o=e.call(void 0,io(t)))?o:!!(o=e.call(void 0,oo(t)))&&o}function Ye(t){return[t[0],t[1]]}function Ze(t){return[t[2],t[1]]}function _e(t){return[(t[0]+t[2])/2,(t[1]+t[3])/2]}function Je(t,e){var o;return"bottom-left"===e?o=Ye(t):"bottom-right"===e?o=Ze(t):"top-left"===e?o=oo(t):"top-right"===e&&(o=io(t)),o}function Qe(t,e,o,i){var n=e*i[0]/2;i=e*i[1]/2,e=Math.cos(o),o=Math.sin(o),n=[-n,-n,n,n],i=[-i,i,-i,i];var r,s,a;for(r=0;4>r;++r)s=n[r],a=i[r],n[r]=t[0]+s*e-a*o,i[r]=t[1]+s*o+a*e;return Ie(n,i,void 0)}function to(t){return t[3]-t[1]}function eo(e,o,i){return i=t(i)?i:He(),ro(e,o)&&(i[0]=e[0]>o[0]?e[0]:o[0],i[1]=e[1]>o[1]?e[1]:o[1],i[2]=e[2]<o[2]?e[2]:o[2],i[3]=e[3]<o[3]?e[3]:o[3]),i}function oo(t){return[t[0],t[3]]}function io(t){return[t[2],t[3]]}function no(t){return t[2]-t[0]}function ro(t,e){return t[0]<=e[2]&&t[2]>=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function so(t){return t[2]<t[0]||t[3]<t[1]}function ao(t,e){var o=(t[2]-t[0])/2*(e-1),i=(t[3]-t[1])/2*(e-1);t[0]-=o,t[2]+=o,t[1]-=i,t[3]+=i}function po(t,e,o){return t=[t[0],t[1],t[0],t[3],t[2],t[1],t[2],t[3]],e(t,t,2),Ie([t[0],t[2],t[4],t[6]],[t[1],t[3],t[5],t[7]],o)}function lo(t){this.radius=t}function ho(e){if(this.b=e.code,this.a=e.units,this.f=t(e.extent)?e.extent:null,this.g=t(e.worldExtent)?e.worldExtent:null,this.d=t(e.axisOrientation)?e.axisOrientation:"enu",this.c=(this.e=!!t(e.global)&&e.global)&&null!==this.f,this.q=t(e.getPointResolution)?e.getPointResolution:this.rj,this.i=null,"function"==typeof proj4){var o=e.code,i=proj4.defs(o);if(t(i)){t(i.axis)&&!t(e.axisOrientation)&&(this.d=i.axis),t(e.units)||(e=i.units,!t(e)&&t(i.to_meter)&&(e=i.to_meter.toString(),Jm[e]=i.to_meter),this.a=e),e=Qm;var n,r;for(n in e)r=proj4.defs(n),t(r)&&(e=xo(n),r===i?co([e,this]):(r=proj4(n,o),bo(e,this,r.forward,r.inverse)))}}}function uo(t){return t.d}function co(t){go(t),E(t,function(e){E(t,function(t){e!==t&&mo(e,t,Eo)})})}function fo(){var t=pw,e=Ep,o=Pp;E(hw,function(i){E(t,function(t){mo(i,t,e),mo(t,i,o)})})}function yo(t){Qm[t.b]=t,mo(t,t,Eo)}function go(t){var e=[];E(t,function(t){e.push(yo(t))})}function vo(t){return null!=t?p(t)?xo(t):t:xo("EPSG:3857")}function mo(t,e,o){t=t.b,e=e.b,t in tb||(tb[t]={}),tb[t][e]=o}function bo(t,e,o,i){t=xo(t),e=xo(e),mo(t,e,wo(o)),mo(e,t,wo(i))}function wo(e){return function(o,i,n){var r=o.length;n=t(n)?n:2,i=t(i)?i:Array(r);var s,a;for(a=0;a<r;a+=n)for(s=e([o[a],o[a+1]]),i[a]=s[0],i[a+1]=s[1],s=n-1;2<=s;--s)i[a+s]=o[a+s];return i}}function xo(e){var o;return e instanceof ho?o=e:p(e)?(o=Qm[e],!t(o)&&"function"==typeof proj4&&t(proj4.defs(e))&&(o=new ho({code:e}),yo(o))):o=null,o}function So(t,e){return t===e||(t.b===e.b||t.a==e.a&&Mo(t,e)===Eo)}function To(t,e){var o=xo(t),i=xo(e);return Mo(o,i)}function Mo(e,o){var i,n=e.b,r=o.b;return n in tb&&r in tb[n]&&(i=tb[n][r]),t(i)||(i=Co),i}function Co(e,o){if(t(o)&&e!==o){for(var i=0,n=e.length;i<n;++i)o[i]=e[i];e=o}return e}function Eo(e,o){var i;if(t(o)){i=0;for(var n=e.length;i<n;++i)o[i]=e[i];i=o}else i=e.slice();return i}function Po(t,e,o){return To(e,o)(t,void 0,t.length)}function ko(t,e,o){return e=To(e,o),po(t,e)}function Ao(e){re.call(this),e=t(e)?e:{},this.c=[0,0];var o={};o.center=t(e.center)?e.center:null,this.e=vo(e.projection);var i,n,r,s=t(e.minZoom)?e.minZoom:0;i=t(e.maxZoom)?e.maxZoom:28;var a=t(e.zoomFactor)?e.zoomFactor:2;if(t(e.resolutions))i=e.resolutions,n=i[0],r=i[i.length-1],i=gt(i);else{n=vo(e.projection),r=n.G();var p=(null===r?360*Jm.degrees/Jm[n.a]:Math.max(no(r),to(r)))/256/Math.pow(2,0),h=p/Math.pow(2,28);n=e.maxResolution,t(n)?s=0:n=p/Math.pow(a,s),r=e.minResolution,t(r)||(r=t(e.maxZoom)?t(e.maxResolution)?n/Math.pow(a,i):p/Math.pow(a,i):h),i=s+Math.floor(Math.log(n/r)/Math.log(a)),r=n/Math.pow(a,i-s),i=vt(a,n,i-s)}this.a=n,this.g=r,this.d=s,s=t(e.extent)?ft(e.extent):yt,(t(e.enableRotation)?e.enableRotation:1)?(n=e.constrainRotation,n=t(n)&&!0!==n?!1===n?bt:l(n)?wt(n):bt:xt()):n=mt,this.f=new St(s,i,n),t(e.resolution)?o.resolution=e.resolution:t(e.zoom)&&(o.resolution=this.constrainResolution(this.a,e.zoom-this.d)),o.rotation=t(e.rotation)?e.rotation:0,this.t(o)}function Ro(t,e){return Math.max(no(t)/e[0],to(t)/e[1])}function Lo(t){var e=t.a,o=Math.log(e/t.g)/Math.log(2);return function(t){return e/Math.pow(2,t*o)}}function No(t){var e=t.a,o=Math.log(e/t.g)/Math.log(2);return function(t){return Math.log(e/t)/Math.log(2)/o}}function jo(e){var o=e.Ca(),i=e.e,n=e.ya();return e=e.Da(),{center:o.slice(),projection:t(i)?i:null,resolution:n,rotation:e}}function Io(e){return null!=e.Ca()&&t(e.ya())}function Do(t,e){t.c[1]+=e}function Fo(t){return 1-Math.pow(1-t,3)}function Oo(t){return 3*t*t-2*t*t*t}function Bo(t){return t}function Uo(t){return.5>t?Oo(2*t):1-Oo(2*(t-.5))}function Go(e){var o=e.source,i=t(e.start)?e.start:lm(),n=o[0],r=o[1],s=t(e.duration)?e.duration:1e3,a=t(e.easing)?e.easing:Oo;return function(t,e){if(e.time<i)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<i+s){var o=1-a((e.time-i)/s),p=n-e.viewState.center[0],l=r-e.viewState.center[1];return e.animate=!0,e.viewState.center[0]+=o*p,e.viewState.center[1]+=o*l,e.viewHints[0]+=1,!0}return!1}}function Ho(e){var o=t(e.rotation)?e.rotation:0,i=t(e.start)?e.start:lm(),n=t(e.duration)?e.duration:1e3,r=t(e.easing)?e.easing:Oo,s=t(e.anchor)?e.anchor:null;return function(t,e){if(e.time<i)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<i+n){var a=1-r((e.time-i)/n),a=(o-e.viewState.rotation)*a;if(e.animate=!0,e.viewState.rotation+=a,null!==s){var p=e.viewState.center;p[0]-=s[0],p[1]-=s[1],ge(p,a),ue(p,s)}return e.viewHints[0]+=1,!0}return!1}}function qo(e){var o=e.resolution,i=t(e.start)?e.start:lm(),n=t(e.duration)?e.duration:1e3,r=t(e.easing)?e.easing:Oo;return function(t,e){if(e.time<i)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<i+n){var s=1-r((e.time-i)/n),a=o-e.viewState.resolution;return e.animate=!0,e.viewState.resolution+=s*a,e.viewHints[0]+=1,!0}return!1}}function $o(e,o,i,n){
+return t(n)?(n[0]=e,n[1]=o,n[2]=i,n):[e,o,i]}function Xo(t,e,o){return t+"/"+e+"/"+o}function Wo(t){var e,o,i=t[0],n=Array(i),r=1<<i-1;for(e=0;e<i;++e)o=48,t[1]&r&&(o+=1),t[2]&r&&(o+=2),n[e]=String.fromCharCode(o),r>>=1;return n.join("")}function zo(t){return Xo(t[0],t[1],t[2])}function Ko(t,e,o,i){this.b=t,this.d=e,this.c=o,this.a=i}function Vo(e,o,i,n,r){return t(r)?(r.b=e,r.d=o,r.c=i,r.a=n,r):new Ko(e,o,i,n)}function Yo(t,e,o){return t.b<=e&&e<=t.d&&t.c<=o&&o<=t.a}function Zo(t,e){return t.b==e.b&&t.c==e.c&&t.d==e.d&&t.a==e.a}function _o(t){return t.d-t.b+1}function Jo(t,e){return t.b<=e.d&&t.d>=e.b&&t.c<=e.a&&t.a>=e.c}function Qo(e){this.a=e.html,this.b=t(e.tileRanges)?e.tileRanges:null}function ti(t,e,o){Et.call(this,t,o),this.element=e}function ei(e){re.call(this),this.a=t(e)?e:[],oi(this)}function oi(t){t.set("length",t.a.length)}function ii(t){return s(t)?t:nb(t)}function ni(t){if(!p(t)){var e=t[0];e!=(0|e)&&(e=e+.5|0);var o=t[1];o!=(0|o)&&(o=o+.5|0);var i=t[2];i!=(0|i)&&(i=i+.5|0),t="rgba("+e+","+o+","+i+","+t[3]+")"}return t}function ri(e,o){var i=t(o)?o:[];return i[0]=lt(e[0]+.5|0,0,255),i[1]=lt(e[1]+.5|0,0,255),i[2]=lt(e[2]+.5|0,0,255),i[3]=lt(e[3],0,1),i}function si(){this.g=Te(),this.a=void 0,this.b=Te(),this.d=void 0,this.c=Te(),this.f=void 0,this.e=Te(),this.q=void 0,this.i=Te()}function ai(e,o,i,n,r){var s=!1;if(t(o)&&o!==e.a&&(s=e.b,Pe(s),s[12]=o,s[13]=o,s[14]=o,s[15]=1,e.a=o,s=!0),t(i)&&i!==e.d){s=e.c,Pe(s),s[0]=i,s[5]=i,s[10]=i,s[15]=1;var a=-.5*i+.5;s[12]=a,s[13]=a,s[14]=a,s[15]=1,e.d=i,s=!0}return t(n)&&n!==e.f&&(s=Math.cos(n),a=Math.sin(n),Ce(e.e,.213+.787*s-.213*a,.213-.213*s+.143*a,.213-.213*s-.787*a,0,.715-.715*s-.715*a,.715+.285*s+.14*a,.715-.715*s+.715*a,0,.072-.072*s+.928*a,.072-.072*s-.283*a,.072+.928*s+.072*a,0,0,0,0,1),e.f=n,s=!0),t(r)&&r!==e.q&&(Ce(e.i,.213+.787*r,.213-.213*r,.213-.213*r,0,.715-.715*r,.715+.285*r,.715-.715*r,0,.072-.072*r,.072-.072*r,.072+.928*r,0,0,0,0,1),e.q=r,s=!0),s&&(s=e.g,Pe(s),t(i)&&ke(s,e.c,s),t(o)&&ke(s,e.b,s),t(r)&&ke(s,e.i,s),t(n)&&ke(s,e.e,s)),e.g}function pi(e,o){this.x=t(e)?e:0,this.y=t(o)?o:0}function li(t,e){this.width=t,this.height=e}function hi(t){return t?new Ei(Mi(t)):hm||(hm=new Ei)}function ui(t){var e=document;return p(t)?e.getElementById(t):t}function ci(t,e){W(e,function(e,o){"style"==o?t.style.cssText=e:"class"==o?t.className=e:"for"==o?t.htmlFor=e:o in sb?t.setAttribute(sb[o],e):0==o.lastIndexOf("aria-",0)||0==o.lastIndexOf("data-",0)?t.setAttribute(o,e):t[o]=e})}function fi(t){return t=t.document.documentElement,new li(t.clientWidth,t.clientHeight)}function yi(t,e,o){var i=arguments,n=document,r=i[0],a=i[1];if(!rb&&a&&(a.name||a.type)){if(r=["<",r],a.name&&r.push(' name="',x(a.name),'"'),a.type){r.push(' type="',x(a.type),'"');var l={};rt(l,a),delete l.type,a=l}r.push(">"),r=r.join("")}return r=n.createElement(r),a&&(p(a)?r.className=a:s(a)?r.className=a.join(" "):ci(r,a)),2<i.length&&di(n,r,i,2),r}function di(t,e,o,i){function n(o){o&&e.appendChild(p(o)?t.createTextNode(o):o)}for(;i<o.length;i++){var r=o[i];!a(r)||u(r)&&0<r.nodeType?n(r):E(Ci(r)?D(r):r,n)}}function gi(t){return document.createElement(t)}function vi(t,e){di(Mi(t),t,arguments,1)}function mi(t){for(var e;e=t.firstChild;)t.removeChild(e)}function bi(t,e,o){t.insertBefore(e,t.childNodes[o]||null)}function wi(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function xi(t,e){var o=e.parentNode;o&&o.replaceChild(t,e)}function Si(t){if(void 0!=t.firstElementChild)t=t.firstElementChild;else for(t=t.firstChild;t&&1!=t.nodeType;)t=t.nextSibling;return t}function Ti(t,e){if(t.contains&&1==e.nodeType)return t==e||t.contains(e);if("undefined"!=typeof t.compareDocumentPosition)return t==e||Boolean(16&t.compareDocumentPosition(e));for(;e&&t!=e;)e=e.parentNode;return e==t}function Mi(t){return 9==t.nodeType?t:t.ownerDocument||t.document}function Ci(t){if(t&&"number"==typeof t.length){if(u(t))return"function"==typeof t.item||"string"==typeof t.item;if(h(t))return"function"==typeof t.item}return!1}function Ei(t){this.b=t||sm.document||document}function Pi(){return!0}function ki(t){var e=t.b;return t=Pm?e.body||e.documentElement:e.documentElement,e=e.parentWindow||e.defaultView,Cm&&pt("10")&&e.pageYOffset!=t.scrollTop?new pi(t.scrollLeft,t.scrollTop):new pi(e.pageXOffset||t.scrollLeft,e.pageYOffset||t.scrollTop)}function Ai(t){return t.classList?t.classList:(t=t.className,p(t)&&t.match(/\S+/g)||[])}function Ri(t,e){return t.classList?t.classList.contains(e):N(Ai(t),e)}function Li(t,e){t.classList?t.classList.add(e):Ri(t,e)||(t.className+=0<t.className.length?" "+e:e)}function Ni(t,e){t.classList?t.classList.remove(e):Ri(t,e)&&(t.className=P(Ai(t),function(t){return t!=e}).join(" "))}function ji(t,e){Ri(t,e)?Ni(t,e):Li(t,e)}function Ii(t,e,o,i){this.top=t,this.right=e,this.bottom=o,this.left=i}function Di(t,e,o,i){this.left=t,this.top=e,this.width=o,this.height=i}function Fi(t,e){var o=e.x<t.left?t.left-e.x:Math.max(e.x-(t.left+t.width),0),i=e.y<t.top?t.top-e.y:Math.max(e.y-(t.top+t.height),0);return o*o+i*i}function Oi(t,e){var o=Mi(t);return o.defaultView&&o.defaultView.getComputedStyle&&(o=o.defaultView.getComputedStyle(t,null))?o[e]||o.getPropertyValue(e)||"":""}function Bi(t,e){return Oi(t,e)||(t.currentStyle?t.currentStyle[e]:null)||t.style&&t.style[e]}function Ui(t,e,o){var i;e instanceof pi?(i=e.x,e=e.y):(i=e,e=o),t.style.left=qi(i),t.style.top=qi(e)}function Gi(t){var e;try{e=t.getBoundingClientRect()}catch(o){return{left:0,top:0,right:0,bottom:0}}return Cm&&t.ownerDocument.body&&(t=t.ownerDocument,e.left-=t.documentElement.clientLeft+t.body.clientLeft,e.top-=t.documentElement.clientTop+t.body.clientTop),e}function Hi(t){if(1==t.nodeType)return t=Gi(t),new pi(t.left,t.top);var e=h(t.Qi),o=t;return t.targetTouches&&t.targetTouches.length?o=t.targetTouches[0]:e&&t.b.targetTouches&&t.b.targetTouches.length&&(o=t.b.targetTouches[0]),new pi(o.clientX,o.clientY)}function qi(t){return"number"==typeof t&&(t+="px"),t}function $i(t){var e=Xi;if("none"!=Bi(t,"display"))return e(t);var o=t.style,i=o.display,n=o.visibility,r=o.position;return o.visibility="hidden",o.position="absolute",o.display="inline",t=e(t),o.display=i,o.position=r,o.visibility=n,t}function Xi(e){var o=e.offsetWidth,i=e.offsetHeight,n=Pm&&!o&&!i;return t(o)&&!n||!e.getBoundingClientRect?new li(o,i):(e=Gi(e),new li(e.right-e.left,e.bottom-e.top))}function Wi(t,e){t.style.display=e?"":"none"}function zi(t,e,o,i){if(/^\d+px?$/.test(e))return parseInt(e,10);var n=t.style[o],r=t.runtimeStyle[o];return t.runtimeStyle[o]=t.currentStyle[o],t.style[o]=e,e=t.style[i],t.style[o]=n,t.runtimeStyle[o]=r,e}function Ki(t,e){var o=t.currentStyle?t.currentStyle[e]:null;return o?zi(t,o,"left","pixelLeft"):0}function Vi(t,e){if(Cm){var o=Ki(t,e+"Left"),i=Ki(t,e+"Right"),n=Ki(t,e+"Top"),r=Ki(t,e+"Bottom");return new Ii(n,i,r,o)}return o=Oi(t,e+"Left"),i=Oi(t,e+"Right"),n=Oi(t,e+"Top"),r=Oi(t,e+"Bottom"),new Ii(parseFloat(n),parseFloat(i),parseFloat(r),parseFloat(o))}function Yi(t,e){if("none"==(t.currentStyle?t.currentStyle[e+"Style"]:null))return 0;var o=t.currentStyle?t.currentStyle[e+"Width"]:null;return o in ab?ab[o]:zi(t,o,"left","pixelLeft")}function Zi(t){if(Cm&&!(Cm&&9<=Im)){var e=Yi(t,"borderLeft"),o=Yi(t,"borderRight"),i=Yi(t,"borderTop");return t=Yi(t,"borderBottom"),new Ii(i,o,t,e)}return e=Oi(t,"borderLeftWidth"),o=Oi(t,"borderRightWidth"),i=Oi(t,"borderTopWidth"),t=Oi(t,"borderBottomWidth"),new Ii(parseFloat(i),parseFloat(o),parseFloat(t),parseFloat(e))}function _i(e,o,i){Et.call(this,e),this.map=o,this.frameState=t(i)?i:null}function Ji(e){re.call(this),this.element=t(e.element)?e.element:null,this.a=this.L=null,this.l=[],this.render=t(e.render)?e.render:o,t(e.target)&&this.c(e.target)}function Qi(){this.c=0,this.d={},this.a=this.b=null}function tn(t,e){return t.d.hasOwnProperty(e)}function en(e){Qi.call(this),this.e=t(e)?e:2048}function on(t){return t.Tb()>t.e}function nn(t,e){Qt.call(this),this.b=t,this.state=e}function rn(t){t.dispatchEvent("change")}function sn(e){re.call(this),this.f=xo(e.projection),this.d=t(e.attributions)?e.attributions:null,this.L=e.logo,this.o=t(e.state)?e.state:"ready",this.H=e.wrapX}function an(t){return t.H}function pn(t,e){t.o=e,t.k()}function ln(t){return function(){return t}}function hn(t){return t}function un(t){var e;return e=e||0,function(){return t.apply(this,Array.prototype.slice.call(arguments,0,e))}}function cn(t){var e=arguments,o=e.length;return function(){for(var t,i=0;i<o;i++)t=e[i].apply(this,arguments);return t}}function fn(t){var e=arguments,o=e.length;return function(){for(var t=0;t<o;t++)if(!e[t].apply(this,arguments))return!1;return!0}}function yn(e){this.minZoom=t(e.minZoom)?e.minZoom:0,this.b=e.resolutions,this.maxZoom=this.b.length-1,this.f=t(e.origin)?e.origin:null,this.i=null,t(e.origins)&&(this.i=e.origins),this.c=null,t(e.tileSizes)&&(this.c=e.tileSizes),this.g=t(e.tileSize)?e.tileSize:null===this.c?256:null,this.a=[0,0],this.d=null,t(e.widths)&&(this.d=e.widths)}function dn(t,e,o,i){bn(t,e[0],e[1],o,!1,ub);var n=ub[1],r=ub[2];return bn(t,e[2],e[3],o,!0,ub),Vo(n,ub[1],r,ub[2],i)}function gn(t,e,o,i){return dn(t,e,t.ma(o),i)}function vn(t,e){var o=t.Mb(e[0]),i=t.ma(e[0]),n=he(t.na(e[0]),t.a);return[o[0]+(e[1]+.5)*n[0]*i,o[1]+(e[2]+.5)*n[1]*i]}function mn(t,e,o){var i=t.Mb(e[0]),n=t.ma(e[0]);t=he(t.na(e[0]),t.a);var r=i[0]+e[1]*t[0]*n;return e=i[1]+e[2]*t[1]*n,qe(r,e,r+t[0]*n,e+t[1]*n,o)}function bn(t,e,o,i,n,r){var s=Sn(t,i),a=i/t.ma(s),p=t.Mb(s);return t=he(t.na(s),t.a),e=a*(e-p[0])/(i*t[0]),o=a*(o-p[1])/(i*t[1]),n?(e=Math.ceil(e)-1,o=Math.ceil(o)-1):(e=Math.floor(e),o=Math.floor(o)),$o(s,e,o,r)}function wn(e,o,i){return i=gn(e,Cn(i),o),e=xn(e,o),t(e)||(e=_o(i)),Vo(0,e-1,0,i.a-i.c+1,void 0)}function xn(t,e){if(null!==t.d)return t.d[e]}function Sn(t,e){var o=dt(t.b,e,0);return lt(o,t.minZoom,t.maxZoom)}function Tn(e){var o=e.i;if(null===o){for(var o=Cn(e),i=he(t(void 0)?void 0:256),n=t(void 0)?void 0:"bottom-left",r=Mn(o,void 0,he(i)),s=Array(r.length),a=no(o),p=r.length-1;0<=p;--p)s[p]=a/i[0]/r[p];o=new yn({origin:Je(o,n),resolutions:r,tileSize:t(void 0)?void 0:256,widths:s}),e.i=o}return o}function Mn(e,o,i){o=t(o)?o:42;var n=to(e);for(e=no(e),i=t(i)?i:he(256),i=Math.max(e/i[0],n/i[1]),o+=1,n=Array(o),e=0;e<o;++e)n[e]=i/Math.pow(2,e);return n}function Cn(t){t=xo(t);var e=t.G();return null===e&&(t=180*Jm.degrees/t.Gd(),e=qe(-t,-t,t,t)),e}function En(e){sn.call(this,{attributions:e.attributions,extent:e.extent,logo:e.logo,projection:e.projection,state:e.state,wrapX:e.wrapX}),this.X=!!t(e.opaque)&&e.opaque,this.ba=t(e.tilePixelRatio)?e.tilePixelRatio:1,this.tileGrid=t(e.tileGrid)?e.tileGrid:null,this.a=new en,this.c=[0,0]}function Pn(t,e,o,i){for(var n,r,s=!0,a=o.b;a<=o.d;++a)for(var p=o.c;p<=o.a;++p)n=t.bb(e,a,p),r=!1,tn(t.a,n)&&(n=t.a.get(n),(r=2===n.state)&&(r=!1!==i(n))),r||(s=!1);return s}function kn(t,e){return null===t.tileGrid?Tn(e):t.tileGrid}function An(t,e){Et.call(this,t),this.tile=e}function Rn(e){e=t(e)?e:{},this.p=gi("UL"),this.o=gi("LI"),this.p.appendChild(this.o),Wi(this.o,!1),this.d=!t(e.collapsed)||e.collapsed,this.g=!t(e.collapsible)||e.collapsible,this.g||(this.d=!1);var o=t(e.className)?e.className:"ol-attribution",i=t(e.tipLabel)?e.tipLabel:"Attributions",n=t(e.collapseLabel)?e.collapseLabel:"»";this.H=p(n)?yi("SPAN",{},n):n,n=t(e.label)?e.label:"i",this.J=p(n)?yi("SPAN",{},n):n,i=yi("BUTTON",{type:"button",title:i},this.g&&!this.d?this.H:this.J),Ht(i,"click",this.gl,!1,this),Ht(i,["mouseout",Hm],function(){this.blur()},!1),o=yi("DIV",o+" ol-unselectable ol-control"+(this.d&&this.g?" ol-collapsed":"")+(this.g?"":" ol-uncollapsible"),this.p,i),Ji.call(this,{element:o,render:t(e.render)?e.render:Ln,target:e.target}),this.n=!0,this.i={},this.f={},this.N={}}function Ln(e){if(e=e.frameState,null===e)this.n&&(Wi(this.element,!1),this.n=!1);else{var o,i,n,r,s,a,p,l,h,u,f,y=e.layerStatesArray,d=nt(e.attributions),g={},v=e.viewState.projection;for(i=0,o=y.length;i<o;i++)if(a=y[i].layer.da(),null!==a&&(u=c(a).toString(),h=a.d,null!==h))for(n=0,r=h.length;n<r;n++)if(p=h[n],l=c(p).toString(),!(l in d)){if(s=e.usedTiles[u],t(s)){var m=kn(a,v);t:{f=p;var b=v;if(null===f.b)f=!0;else{var w=void 0,x=void 0,S=void 0,T=void 0;for(T in s)if(T in f.b)for(var M,S=s[T],w=0,x=f.b[T].length;w<x;++w){if(M=f.b[T][w],Jo(M,S)){f=!0;break t}var C=wn(m,parseInt(T,10),b),E=_o(C);if((S.b<C.b||S.d>C.d)&&(Jo(M,new Ko(ht(S.b,E),ht(S.d,E),S.c,S.a))||_o(S)>E&&Jo(M,C))){f=!0;break t}}f=!1}}}else f=!1;f?(l in g&&delete g[l],d[l]=p):g[l]=p}o=[d,g],i=o[0],o=o[1];for(var P in this.i)P in i?(this.f[P]||(Wi(this.i[P],!0),this.f[P]=!0),delete i[P]):P in o?(this.f[P]&&(Wi(this.i[P],!1),delete this.f[P]),delete o[P]):(wi(this.i[P]),delete this.i[P],delete this.f[P]);for(P in i)n=gi("LI"),n.innerHTML=i[P].a,this.p.appendChild(n),this.i[P]=n,this.f[P]=!0;for(P in o)n=gi("LI"),n.innerHTML=o[P].a,Wi(n,!1),this.p.appendChild(n),this.i[P]=n;P=!Q(this.f)||!Q(e.logos),this.n!=P&&(Wi(this.element,P),this.n=P),P&&Q(this.f)?Li(this.element,"ol-logo-only"):Ni(this.element,"ol-logo-only");var k;e=e.logos,P=this.N;for(k in P)k in e||(wi(P[k]),delete P[k]);for(var A in e)A in P||(k=new Image,k.src=A,i=e[A],""===i?i=k:(i=yi("A",{href:i}),i.appendChild(k)),this.o.appendChild(i),P[A]=i);Wi(this.o,!Q(e))}}function Nn(t){ji(t.element,"ol-collapsed"),t.d?xi(t.H,t.J):xi(t.J,t.H),t.d=!t.d}function jn(e){e=t(e)?e:{};var o=t(e.className)?e.className:"ol-rotate",i=t(e.label)?e.label:"⇧";this.d=null,p(i)?this.d=yi("SPAN","ol-compass",i):(this.d=i,Li(this.d,"ol-compass")),i=yi("BUTTON",{"class":o+"-reset",type:"button",title:t(e.tipLabel)?e.tipLabel:"Reset rotation"},this.d),Ht(i,"click",jn.prototype.o,!1,this),Ht(i,["mouseout",Hm],function(){this.blur()},!1),o=yi("DIV",o+" ol-unselectable ol-control",i),Ji.call(this,{element:o,render:t(e.render)?e.render:In,target:e.target}),this.g=t(e.duration)?e.duration:250,this.f=!t(e.autoHide)||e.autoHide,this.i=void 0,this.f&&Li(this.element,"ol-hidden")}function In(t){if(t=t.frameState,null!==t){if(t=t.viewState.rotation,t!=this.i){var e="rotate("+180*t/Math.PI+"deg)";if(this.f){var o=this.element;0===t?Li(o,"ol-hidden"):Ni(o,"ol-hidden")}this.d.style.msTransform=e,this.d.style.webkitTransform=e,this.d.style.transform=e}this.i=t}}function Dn(e){e=t(e)?e:{};var o=t(e.className)?e.className:"ol-zoom",i=t(e.delta)?e.delta:1,n=t(e.zoomOutLabel)?e.zoomOutLabel:"−",r=t(e.zoomOutTipLabel)?e.zoomOutTipLabel:"Zoom out",s=yi("BUTTON",{"class":o+"-in",type:"button",title:t(e.zoomInTipLabel)?e.zoomInTipLabel:"Zoom in"},t(e.zoomInLabel)?e.zoomInLabel:"+");Ht(s,"click",g(Dn.prototype.f,i),!1,this),Ht(s,["mouseout",Hm],function(){this.blur()},!1),n=yi("BUTTON",{"class":o+"-out",type:"button",title:r},n),Ht(n,"click",g(Dn.prototype.f,-i),!1,this),Ht(n,["mouseout",Hm],function(){this.blur()},!1),o=yi("DIV",o+" ol-unselectable ol-control",s,n),Ji.call(this,{element:o,target:e.target}),this.d=t(e.duration)?e.duration:250}function Fn(e){e=t(e)?e:{};var o=new ei;return(t(e.zoom)?e.zoom:1)&&o.push(new Dn(e.zoomOptions)),(t(e.rotate)?e.rotate:1)&&o.push(new jn(e.rotateOptions)),(t(e.attribution)?e.attribution:1)&&o.push(new Rn(e.attributionOptions)),o}function On(){var t=hi().b,e=t.body;return!!(e.webkitRequestFullscreen||e.mozRequestFullScreen&&t.mozFullScreenEnabled||e.msRequestFullscreen&&t.msFullscreenEnabled||e.requestFullscreen&&t.fullscreenEnabled)}function Bn(t){t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen?t.msRequestFullscreen():t.requestFullscreen&&t.requestFullscreen()}function Un(){var t=hi().b;return!!(t.webkitIsFullScreen||t.mozFullScreen||t.msFullscreenElement||t.fullscreenElement)}function Gn(e){e=t(e)?e:{},this.d=t(e.className)?e.className:"ol-full-screen";var o=t(e.label)?e.label:"↔";this.f=p(o)?document.createTextNode(String(o)):o,o=t(e.labelActive)?e.labelActive:"×",this.g=p(o)?document.createTextNode(String(o)):o,o=t(e.tipLabel)?e.tipLabel:"Toggle full-screen",o=yi("BUTTON",{"class":this.d+"-"+Un(),type:"button",title:o},this.f),Ht(o,"click",this.n,!1,this),Ht(o,["mouseout",Hm],function(){this.blur()},!1),Ht(sm.document,cb,this.i,!1,this);var i=this.d+" ol-unselectable ol-control "+(On()?"":"ol-unsupported"),o=yi("DIV",i,o);Ji.call(this,{element:o,target:e.target}),this.o=!!t(e.keys)&&e.keys}function Hn(e){e=t(e)?e:{};var o=yi("DIV",t(e.className)?e.className:"ol-mouse-position");Ji.call(this,{element:o,render:t(e.render)?e.render:qn,target:e.target}),Ht(this,se("projection"),this.jl,!1,this),t(e.coordinateFormat)&&this.vh(e.coordinateFormat),t(e.projection)&&this.yg(xo(e.projection)),this.o=t(e.undefinedHTML)?e.undefinedHTML:"",this.i=o.innerHTML,this.g=this.f=this.d=null}function qn(t){t=t.frameState,null===t?this.d=null:this.d!=t.viewState.projection&&(this.d=t.viewState.projection,this.f=null),$n(this,this.g)}function $n(e,o){var i=e.o;if(null!==o&&null!==e.d){if(null===e.f){var n=e.xg();e.f=t(n)?Mo(e.d,n):Co}n=e.a.ka(o),null!==n&&(e.f(n,n),i=e.Uf(),i=t(i)?i(n):n.toString())}t(e.i)&&i==e.i||(e.element.innerHTML=i,e.i=i)}function Xn(t,e,o){Tt.call(this),this.d=t,this.c=o,this.b=e||window,this.a=d(this.Pf,this)}function Wn(t){if(null!=t.$){var e=zn(t),o=Kn(t);e&&!o&&t.b.mozRequestAnimationFrame?zt(t.$):e&&o?o.call(t.b,t.$):t.b.clearTimeout(t.$)}t.$=null}function zn(t){return t=t.b,t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||null}function Kn(t){return t=t.b,t.cancelAnimationFrame||t.cancelRequestAnimationFrame||t.webkitCancelRequestAnimationFrame||t.mozCancelRequestAnimationFrame||t.oCancelRequestAnimationFrame||t.msCancelRequestAnimationFrame||null}function Vn(t){sm.setTimeout(function(){throw t},0)}function Yn(t,e){var o=t;e&&(o=d(t,e)),o=yb(o),!h(sm.setImmediate)||sm.Window&&sm.Window.prototype.setImmediate==sm.setImmediate?(fb||(fb=Zn()),fb(o)):sm.setImmediate(o)}function Zn(){var e=sm.MessageChannel;if("undefined"==typeof e&&"undefined"!=typeof window&&window.postMessage&&window.addEventListener&&(e=function(){var t=document.createElement("iframe");t.style.display="none",t.src="",document.documentElement.appendChild(t);var e=t.contentWindow,t=e.document;t.open(),t.write(""),t.close();var o="callImmediate"+Math.random(),i="file:"==e.location.protocol?"*":e.location.protocol+"//"+e.location.host,t=d(function(t){"*"!=i&&t.origin!=i||t.data!=o||this.port1.onmessage()},this);e.addEventListener("message",t,!1),this.port1={},this.port2={postMessage:function(){e.postMessage(o,i)}}}),"undefined"!=typeof e&&!X("Trident")&&!X("MSIE")){var o=new e,i={},n=i;return o.port1.onmessage=function(){if(t(i.next)){i=i.next;var e=i.Lf;i.Lf=null,e()}},function(t){n.next={Lf:t},n=n.next,o.port2.postMessage(0)}}return"undefined"!=typeof document&&"onreadystatechange"in document.createElement("script")?function(t){var e=document.createElement("script");e.onreadystatechange=function(){e.onreadystatechange=null,e.parentNode.removeChild(e),e=null,t(),t=null},document.documentElement.appendChild(e)}:function(t){sm.setTimeout(t,0)}}function _n(t){if("function"==typeof t.cb)return t.cb();if(p(t))return t.split("");if(a(t)){for(var e=[],o=t.length,i=0;i<o;i++)e.push(t[i]);return e}return V(t)}function Jn(t,e){if("function"==typeof t.forEach)t.forEach(e,void 0);else if(a(t)||p(t))E(t,e,void 0);else{var o;if("function"==typeof t.C)o=t.C();else if("function"!=typeof t.cb)if(a(t)||p(t)){o=[];for(var i=t.length,n=0;n<i;n++)o.push(n)}else o=Y(t);else o=void 0;for(var i=_n(t),n=i.length,r=0;r<n;r++)e.call(void 0,i[r],o&&o[r],t)}}function Qn(t,e){this.a={},this.b=[],this.c=0;var o=arguments.length;if(1<o){if(o%2)throw Error("Uneven number of arguments");for(var i=0;i<o;i+=2)this.set(arguments[i],arguments[i+1])}else if(t){t instanceof Qn?(o=t.C(),i=t.cb()):(o=Y(t),i=V(t));for(var n=0;n<o.length;n++)this.set(o[n],i[n])}}function tr(t){if(t.c!=t.b.length){for(var e=0,o=0;e<t.b.length;){var i=t.b[e];er(t.a,i)&&(t.b[o++]=i),e++}t.b.length=o}if(t.c!=t.b.length){for(var n={},o=e=0;e<t.b.length;)i=t.b[e],er(n,i)||(t.b[o++]=i,n[i]=1),e++;t.b.length=o}}function er(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function or(){this.b=lm()}function ir(t){Qt.call(this),this.pd=t||window,this.Md=Ht(this.pd,"resize",this.ik,!1,this),this.Nd=fi(this.pd||window)}function nr(t,e,o,i,n){if(!(Cm||Pm&&pt("525")))return!0;if(km&&n)return rr(t);if(n&&!i)return!1;if(l(e)&&(e=sr(e)),!o&&(17==e||18==e||km&&91==e))return!1;if(Pm&&i&&o)switch(t){case 220:case 219:case 221:case 192:case 186:case 189:case 187:case 188:case 190:case 191:case 192:case 222:return!1}if(Cm&&i&&e==t)return!1;switch(t){case 13:return!0;case 27:return!Pm}return rr(t)}function rr(t){if(48<=t&&57>=t||96<=t&&106>=t||65<=t&&90>=t||Pm&&0==t)return!0;switch(t){case 32:case 63:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return!0;default:return!1}}function sr(t){if(Em)t=ar(t);else if(km&&Pm)t:switch(t){case 93:t=91}return t}function ar(t){switch(t){case 61:return 187;case 59:return 186;case 173:return 189;case 224:return 91;case 0:return 224;default:return t}}function pr(t,e){Qt.call(this),t&&lr(this,t,e)}function lr(t,e,o){t.Vd&&hr(t),t.Z=e,t.Ud=Ht(t.Z,"keypress",t,o),t.Ye=Ht(t.Z,"keydown",t.b,o,t),t.Vd=Ht(t.Z,"keyup",t.a,o,t)}function hr(t){t.Ud&&(zt(t.Ud),zt(t.Ye),zt(t.Vd),t.Ud=null,t.Ye=null,t.Vd=null),t.Z=null,t.Ja=-1,t.Hb=-1}function ur(t,e,o,i){Rt.call(this,i),this.type="key",this.e=t,this.q=e}function cr(t,e){Qt.call(this);var o=this.Z=t;(o=u(o)&&1==o.nodeType?this.Z:this.Z?this.Z.body:null)&&Bi(o,"direction"),this.b=Ht(this.Z,Em?"DOMMouseScroll":"mousewheel",this,e)}function fr(t,e){return Pm&&(km||Rm)&&0!=t%e?t:t/e}function yr(t,e,o,i){Rt.call(this,e),this.type="mousewheel",this.detail=t,this.o=i}function dr(e,o,i){Et.call(this,e),this.b=o,e=t(i)?i:{},this.buttons=gr(e),this.pressure=vr(e,this.buttons),this.bubbles=ot(e,"bubbles",!1),this.cancelable=ot(e,"cancelable",!1),this.view=ot(e,"view",null),this.detail=ot(e,"detail",null),this.screenX=ot(e,"screenX",0),this.screenY=ot(e,"screenY",0),this.clientX=ot(e,"clientX",0),this.clientY=ot(e,"clientY",0),this.button=ot(e,"button",0),this.relatedTarget=ot(e,"relatedTarget",null),this.pointerId=ot(e,"pointerId",0),this.width=ot(e,"width",0),this.height=ot(e,"height",0),this.pointerType=ot(e,"pointerType",""),this.isPrimary=ot(e,"isPrimary",!1),o.preventDefault&&(this.preventDefault=function(){o.preventDefault()})}function gr(t){if(t.buttons||bb)t=t.buttons;else switch(t.which){case 1:t=1;break;case 2:t=4;break;case 3:t=2;break;default:t=0}return t}function vr(t,e){var o=0;return o=t.pressure?t.pressure:e?.5:0}function mr(e,o){var i=gi("CANVAS");return t(e)&&(i.width=e),t(o)&&(i.height=o),i.getContext("2d")}function br(t,e){var o=t.style;o.WebkitTransform=e,o.MozTransform=e,o.b=e,o.msTransform=e,o.transform=e,Cm&&!Dm&&(t.style.transformOrigin="0 0")}function wr(e,o){var i;if(Mb()){if(t(6)){var n=Array(16);for(i=0;16>i;++i)n[i]=o[i].toFixed(6);i=n.join(",")}else i=o.join(",");br(e,"matrix3d("+i+")")}else if(Tb()){if(n=[o[0],o[1],o[4],o[5],o[12],o[13]],t(6)){var r=Array(6);for(i=0;6>i;++i)r[i]=n[i].toFixed(6);i=r.join(",")}else i=n.join(",");br(e,"matrix("+i+")")}else e.style.left=Math.round(o[12])+"px",e.style.top=Math.round(o[13])+"px"}function xr(t,e){var o,i,n=Cb.length;for(i=0;i<n;++i)try{if(o=t.getContext(Cb[i],e),null!==o)return o}catch(r){}return null}function Sr(t,e){this.b=t,this.e=e}function Tr(t){Sr.call(this,t,{mousedown:this.tk,mousemove:this.uk,mouseup:this.xk,mouseover:this.wk,mouseout:this.vk}),this.a=t.a,this.c=[]}function Mr(t,e){for(var o,i=t.c,n=e.clientX,r=e.clientY,s=0,a=i.length;s<a&&(o=i[s]);s++){var p=Math.abs(r-o[1]);if(25>=Math.abs(n-o[0])&&25>=p)return!0}return!1}function Cr(t){var e=Or(t,t.b),o=e.preventDefault;return e.preventDefault=function(){t.preventDefault(),o()},e.pointerId=1,e.isPrimary=!0,e.pointerType="mouse",e}function Er(t){Sr.call(this,t,{MSPointerDown:this.Ck,MSPointerMove:this.Dk,MSPointerUp:this.Gk,MSPointerOut:this.Ek,MSPointerOver:this.Fk,MSPointerCancel:this.Bk,MSGotPointerCapture:this.zk,MSLostPointerCapture:this.Ak}),this.a=t.a,this.c=["","unavailable","touch","pen","mouse"]}function Pr(t,e){var o=e;return l(e.b.pointerType)&&(o=Or(e,e.b),o.pointerType=t.c[e.b.pointerType]),o}function kr(t){Sr.call(this,t,{pointerdown:this.nn,pointermove:this.pn,pointerup:this.sn,pointerout:this.qn,pointerover:this.rn,pointercancel:this.mn,gotpointercapture:this.Fj,lostpointercapture:this.sk})}function Ar(t,e){Sr.call(this,t,{touchstart:this.so,touchmove:this.ro,touchend:this.qo,touchcancel:this.po}),this.a=t.a,this.g=e,this.c=void 0,this.f=0,this.d=void 0}function Rr(t,e,o){return e=Or(e,o),e.pointerId=o.identifier+2,e.bubbles=!0,e.cancelable=!0,e.detail=t.f,e.button=0,e.buttons=1,e.width=o.webkitRadiusX||o.radiusX||0,e.height=o.webkitRadiusY||o.radiusY||0,e.pressure=o.webkitForce||o.force||.5,e.isPrimary=t.c===o.identifier,e.pointerType="touch",e.clientX=o.clientX,e.clientY=o.clientY,e.screenX=o.screenX,e.screenY=o.screenY,e}function Lr(t,e,o){function i(){e.preventDefault()}var n,r,s=Array.prototype.slice.call(e.b.changedTouches),a=s.length;for(n=0;n<a;++n)r=Rr(t,e,s[n]),r.preventDefault=i,o.call(t,e,r)}function Nr(t,e){var o=t.g.c,i=e.b.changedTouches[0];if(t.c===i.identifier){var n=[i.clientX,i.clientY];o.push(n),sm.setTimeout(function(){j(o,n)},2500)}}function jr(t){Qt.call(this),this.Z=t,this.a={},this.c={},this.b=[],Nb?Ir(this,new kr(this)):jb?Ir(this,new Er(this)):(t=new Tr(this),Ir(this,t),Lb&&Ir(this,new Ar(this,t))),t=this.b.length;for(var e,o=0;o<t;o++)e=this.b[o],Dr(this,Y(e.e))}function Ir(t,e){var o=Y(e.e);o&&(E(o,function(t){var o=e.e[t];o&&(this.c[t]=d(o,e))},t),t.b.push(e))}function Dr(t,e){E(e,function(t){Ht(this.Z,t,this.d,!1,this)},t)}function Fr(t,e){E(e,function(t){Wt(this.Z,t,this.d,!1,this)},t)}function Or(t,e){for(var o,i={},n=0,r=zb.length;n<r;n++)o=zb[n][0],i[o]=t[o]||e[o]||zb[n][1];return i}function Br(t,e,o){t.ec(e,o);var i=e.relatedTarget;null!==i&&Ti(e.target,i)||(e.bubbles=!1,Gr(t,Xb,e,o))}function Ur(t,e,o){e.bubbles=!0,Gr(t,Hb,e,o);var i=e.relatedTarget;null!==i&&Ti(e.target,i)||(e.bubbles=!1,Gr(t,$b,e,o))}function Gr(t,e,o,i){t.dispatchEvent(new dr(e,i,o))}function Hr(t,e){t.dispatchEvent(new dr(e.type,e,e.b))}function qr(e,o,i,n,r){_i.call(this,e,o,r),this.b=i,this.originalEvent=i.b,this.pixel=o.Bd(this.originalEvent),this.coordinate=o.ka(this.pixel),this.dragging=!!t(n)&&n}function $r(t,e,o,i,n){qr.call(this,t,e,o.b,i,n),this.a=o}function Xr(t){Qt.call(this),this.c=t,this.f=0,this.g=!1,this.a=this.i=this.d=null,t=this.c.a,this.o=0,this.l={},this.e=new jr(t),this.b=null,this.i=Ht(this.e,Ub,this.dk,!1,this),this.q=Ht(this.e,Bb,this.Kn,!1,this)}function Wr(t,e){var o;o=new $r(Vb,t.c,e),t.dispatchEvent(o),0!==t.f?(sm.clearTimeout(t.f),t.f=0,o=new $r(Yb,t.c,e),t.dispatchEvent(o)):t.f=sm.setTimeout(d(function(){this.f=0;var t=new $r(Kb,this.c,e);this.dispatchEvent(t)},t),250)}function zr(t,e){e.type==Qb||e.type==tw?delete t.l[e.pointerId]:e.type==Jb&&(t.l[e.pointerId]=!0),t.o=K(t.l)}function Kr(e){re.call(this);var o=nt(e);o.brightness=t(e.brightness)?e.brightness:0,o.contrast=t(e.contrast)?e.contrast:1,o.hue=t(e.hue)?e.hue:0,o.opacity=t(e.opacity)?e.opacity:1,o.saturation=t(e.saturation)?e.saturation:1,o.visible=!t(e.visible)||e.visible,o.maxResolution=t(e.maxResolution)?e.maxResolution:1/0,o.minResolution=t(e.minResolution)?e.minResolution:0,this.t(o)}function Vr(t){var e=t.Bb(),o=t.Cb(),i=t.Db(),n=t.Kb(),r=t.Gb(),s=t.We(),a=t.eb(),p=t.G(),l=t.Eb(),h=t.Fb();return{layer:t,brightness:lt(e,-1,1),contrast:Math.max(o,0),hue:i,opacity:lt(n,0,1),saturation:Math.max(r,0),i:s,visible:a,extent:p,maxResolution:l,minResolution:Math.max(h,0)}}function Yr(e){var o=nt(e);delete o.source,Kr.call(this,o),this.f=null,Ht(this,se("source"),this.kk,!1,this),this.Jc(t(e.source)?e.source:null)}function Zr(t,e){return t.visible&&e>=t.minResolution&&e<t.maxResolution}function _r(t,e,o,i,n){Qt.call(this),this.f=n,this.extent=t,this.e=o,this.resolution=e,this.state=i}function Jr(t,e,o,i,n,r,s,a){return Pe(t),0===e&&0===o||Re(t,e,o),1==i&&1==n||Le(t,i,n),0!==r&&Ne(t,r),0===s&&0===a||Re(t,s,a),t}function Qr(t,e){return t[0]==e[0]&&t[1]==e[1]&&t[4]==e[4]&&t[5]==e[5]&&t[12]==e[12]&&t[13]==e[13]}function ts(t,e,o){var i=t[1],n=t[5],r=t[13],s=e[0];return e=e[1],o[0]=t[0]*s+t[4]*e+t[12],o[1]=i*s+n*e+r,o}function es(t){oe.call(this),this.a=t}function os(t,e){var o=e.state;return 2!=o&&3!=o&&Ht(e,"change",t.Ol,!1,t),0==o&&(e.load(),o=e.state),2==o}function is(t){var e=t.a;e.eb()&&"ready"==e.We()&&t.k()}function ns(t,e){on(e.a)&&t.postRenderFunctions.push(g(function(t,e,o){e=c(t).toString(),t=t.a,o=o.usedTiles[e];for(var i;on(t)&&(e=t.b.qc,i=e.b[0].toString(),!(i in o&&o[i].contains(e.b)));)t.pop().Yc()},e))}function rs(t,e){if(null!=e){var o,i,n;for(i=0,n=e.length;i<n;++i)o=e[i],t[c(o).toString()]=o}}function ss(e,o){var i=o.L;t(i)&&(p(i)?e.logos[i]="":u(i)&&(e.logos[i.src]=i.href))}function as(t,e,o,i){e=c(e).toString(),o=o.toString(),e in t?o in t[e]?(t=t[e][o],i.b<t.b&&(t.b=i.b),i.d>t.d&&(t.d=i.d),i.c<t.c&&(t.c=i.c),i.a>t.a&&(t.a=i.a)):t[e][o]=i:(t[e]={},t[e][o]=i)}function ps(t,e,o){return[e*(Math.round(t[0]/e)+o[0]%2/2),e*(Math.round(t[1]/e)+o[1]%2/2)]}function ls(e,o,i,n,r,s,a,p,l,h){var u=c(o).toString();u in e.wantedTiles||(e.wantedTiles[u]={});var f=e.wantedTiles[u];e=e.tileQueue;var y,d,g,v,m,b,w=i.minZoom;for(b=a;b>=w;--b)for(d=gn(i,s,b,d),g=i.ma(b),v=d.b;v<=d.d;++v)for(m=d.c;m<=d.a;++m)a-b<=p?(y=o.Vb(b,v,m,n,r),0==y.state&&(f[zo(y.b)]=!0,y.gb()in e.c||xs(e,[y,u,vn(i,y.b),g])),t(l)&&l.call(h,y)):o.yf(b,v,m)}function hs(t){this.U=t.opacity,this.V=t.rotateWithView,this.q=t.rotation,this.l=t.scale,this.n=t.snapToPixel}function us(e){e=t(e)?e:{},this.e=t(e.anchor)?e.anchor:[.5,.5],this.d=null,this.a=t(e.anchorOrigin)?e.anchorOrigin:"top-left",this.g=t(e.anchorXUnits)?e.anchorXUnits:"fraction",this.i=t(e.anchorYUnits)?e.anchorYUnits:"fraction";var o=t(e.crossOrigin)?e.crossOrigin:null,i=t(e.img)?e.img:null,n=t(e.imgSize)?e.imgSize:null,r=e.src;t(r)&&0!==r.length||null===i||(r=i.src);var s=t(e.src)?0:2,a=fs.Ia(),p=a.get(r,o);null===p&&(p=new cs(i,r,n,o,s),a.set(r,o,p)),this.b=p,this.p=t(e.offset)?e.offset:[0,0],this.c=t(e.offsetOrigin)?e.offsetOrigin:"top-left",this.f=null,this.o=t(e.size)?e.size:null,hs.call(this,{opacity:t(e.opacity)?e.opacity:1,rotation:t(e.rotation)?e.rotation:0,scale:t(e.scale)?e.scale:1,snapToPixel:!t(e.snapToPixel)||e.snapToPixel,rotateWithView:!!t(e.rotateWithView)&&e.rotateWithView})}function cs(t,e,o,i,n){Qt.call(this),this.e=null,this.b=null===t?new Image:t,null!==i&&(this.b.crossOrigin=i),this.d=null,this.c=n,this.a=o,this.f=e,this.i=!1}function fs(){this.b={},this.a=0}function ys(t,e){Tt.call(this),this.g=e,this.c=null,this.f={},this.o={}}function ds(t){var e=t.viewState,o=t.coordinateToPixelMatrix;Jr(o,t.size[0]/2,t.size[1]/2,1/e.resolution,-1/e.resolution,-e.rotation,-e.center[0],-e.center[1]),Ae(o,t.pixelToCoordinateMatrix)}function gs(){var t=fs.Ia();if(32<t.a){var e,o,i=0;for(e in t.b){o=t.b[e];var n;(n=0===(3&i++))&&(jt(o)?o=ee(o,void 0,void 0):(o=_t(o),o=!!o&&Ut(o,void 0,void 0)),n=!o),n&&(delete t.b[e],--t.a)}}}function vs(t,e){var o=c(e).toString();if(o in t.f)return t.f[o];var i=t.Ke(e);return t.f[o]=i,t.o[o]=Ht(i,"change",t.Tj,!1,t),i}function ms(t,e){for(var o in t.f)if(!(o in e.layerStates)){e.postRenderFunctions.push(d(t.Pn,t));break}}function bs(t,e){this.g=t,this.e=e,this.b=[],this.a=[],this.c={}}function ws(t){var e=t.b,o=t.a,i=e[0];return 1==e.length?(e.length=0,o.length=0):(e[0]=e.pop(),o[0]=o.pop(),Ss(t,0)),e=t.e(i),delete t.c[e],i}function xs(t,e){var o=t.g(e);1/0!=o&&(t.b.push(e),t.a.push(o),t.c[t.e(e)]=!0,Ts(t,0,t.b.length-1))}function Ss(t,e){for(var o=t.b,i=t.a,n=o.length,r=o[e],s=i[e],a=e;e<n>>1;){var p=2*e+1,l=2*e+2,p=l<n&&i[l]<i[p]?l:p;o[e]=o[p],i[e]=i[p],e=p}o[e]=r,i[e]=s,Ts(t,a,e)}function Ts(t,e,o){var i=t.b;t=t.a;for(var n=i[o],r=t[o];o>e;){
+var s=o-1>>1;if(!(t[s]>r))break;i[o]=i[s],t[o]=t[s],o=s}i[o]=n,t[o]=r}function Ms(t){var e,o,i,n=t.g,r=t.b,s=t.a,a=0,p=r.length;for(o=0;o<p;++o)e=r[o],i=n(e),1/0==i?delete t.c[t.e(e)]:(s[a]=i,r[a++]=e);for(r.length=a,s.length=a,n=(t.b.length>>1)-1;0<=n;n--)Ss(t,n)}function Cs(t,e){bs.call(this,function(e){return t.apply(null,e)},function(t){return t[0].gb()}),this.i=e,this.d=0}function Es(t,e,o){this.d=t,this.c=e,this.f=o,this.b=[],this.a=this.e=0}function Ps(t,e){var o=t.d,i=t.a,n=t.c-i,r=ks(t);return Go({source:e,duration:r,easing:function(t){return i*(Math.exp(o*t*r)-1)/n}})}function ks(t){return Math.log(t.c/t.a)/t.d}function As(t){re.call(this),this.l=null,this.d(!0),this.handleEvent=t.handleEvent}function Rs(e,o,i,n,r){if(null!=i){var s=o.Da(),a=o.Ca();t(s)&&t(a)&&t(r)&&0<r&&(e.Ha(Ho({rotation:s,duration:r,easing:Fo})),t(n)&&e.Ha(Go({source:a,duration:r,easing:Fo}))),o.rotate(i,n)}}function Ls(t,e,o,i,n){var r=e.ya();o=e.constrainResolution(r,o,0),Ns(t,e,o,i,n)}function Ns(e,o,i,n,r){if(null!=i){var s=o.ya(),a=o.Ca();if(t(s)&&t(a)&&t(r)&&0<r&&(e.Ha(qo({resolution:s,duration:r,easing:Fo})),t(n)&&e.Ha(Go({source:a,duration:r,easing:Fo}))),null!=n){var p;e=o.Ca(),r=o.ya(),t(e)&&t(r)&&(p=[n[0]-i*(n[0]-e[0])/r,n[1]-i*(n[1]-e[1])/r]),o.Na(p)}o.tb(i)}}function js(e){e=t(e)?e:{},this.a=t(e.delta)?e.delta:1,As.call(this,{handleEvent:Is}),this.e=t(e.duration)?e.duration:250}function Is(t){var e=!1,o=t.b;if(t.type==Yb){var e=t.map,i=t.coordinate,o=o.d?-this.a:this.a,n=e.R();Ls(e,n,o,i,this.e),t.preventDefault(),e=!0}return!e}function Ds(t){return t=t.b,t.a&&!t.g&&t.d}function Fs(t){return"pointermove"==t.type}function Os(t){return t.type==Kb}function Bs(t){return t=t.b,!t.a&&!t.g&&!t.d}function Us(t){return t=t.b,!t.a&&!t.g&&t.d}function Gs(t){return t=t.b.target.tagName,"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}function Hs(t){return 1==t.a.pointerId}function qs(e){e=t(e)?e:{},As.call(this,{handleEvent:t(e.handleEvent)?e.handleEvent:Xs}),this.vb=t(e.handleDownEvent)?e.handleDownEvent:pb,this.wb=t(e.handleDragEvent)?e.handleDragEvent:o,this.xb=t(e.handleMoveEvent)?e.handleMoveEvent:o,this.sc=t(e.handleUpEvent)?e.handleUpEvent:pb,this.o=!1,this.J={},this.e=[]}function $s(t){for(var e=t.length,o=0,i=0,n=0;n<e;n++)o+=t[n].clientX,i+=t[n].clientY;return[o/e,i/e]}function Xs(t){if(!(t instanceof $r))return!0;var e=!1,o=t.type;return o!==Jb&&o!==Zb&&o!==Qb||(o=t.a,t.type==Qb?delete this.J[o.pointerId]:t.type==Jb?this.J[o.pointerId]=o:o.pointerId in this.J&&(this.J[o.pointerId]=o),this.e=V(this.J)),this.o&&(t.type==Zb?this.wb(t):t.type==Qb&&(this.o=this.sc(t))),t.type==Jb?(this.o=t=this.vb(t),e=this.nc(t)):t.type==_b&&this.xb(t),!e}function Ws(e){qs.call(this,{handleDownEvent:Vs,handleDragEvent:zs,handleUpEvent:Ks}),e=t(e)?e:{},this.a=e.kinetic,this.f=this.g=null,this.n=t(e.condition)?e.condition:Bs,this.i=!1}function zs(t){var e=$s(this.e);if(this.a&&this.a.update(e[0],e[1]),null!==this.f){var o=this.f[0]-e[0],i=e[1]-this.f[1];t=t.map;var n=t.R(),r=jo(n),i=o=[o,i],s=r.resolution;i[0]*=s,i[1]*=s,ge(o,r.rotation),ue(o,r.center),o=n.xd(o),t.render(),n.Na(o)}this.f=e}function Ks(t){t=t.map;var e=t.R();if(0===this.e.length){var o;if(o=!this.i&&this.a)if(o=this.a,6>o.b.length)o=!1;else{var i=lm()-o.f,n=o.b.length-3;if(o.b[n+2]<i)o=!1;else{for(var r=n-3;0<r&&o.b[r+2]>i;)r-=3;var i=o.b[n+2]-o.b[r+2],s=o.b[n]-o.b[r],n=o.b[n+1]-o.b[r+1];o.e=Math.atan2(n,s),o.a=Math.sqrt(s*s+n*n)/i,o=o.a>o.c}}return o&&(o=this.a,o=(o.c-o.a)/o.d,n=this.a.e,r=e.Ca(),this.g=Ps(this.a,r),t.Ha(this.g),r=t.ta(r),o=t.ka([r[0]-o*Math.cos(n),r[1]-o*Math.sin(n)]),o=e.xd(o),e.Na(o)),Do(e,-1),t.render(),!1}return this.f=null,!0}function Vs(t){if(0<this.e.length&&this.n(t)){var e=t.map,o=e.R();return this.f=null,this.o||Do(o,1),e.render(),null!==this.g&&j(e.H,this.g)&&(o.Na(t.frameState.viewState.center),this.g=null),this.a&&(t=this.a,t.b.length=0,t.e=0,t.a=0),this.i=1<this.e.length,!0}return!1}function Ys(e){e=t(e)?e:{},qs.call(this,{handleDownEvent:Js,handleDragEvent:Zs,handleUpEvent:_s}),this.f=t(e.condition)?e.condition:Ds,this.a=void 0,this.g=t(e.duration)?e.duration:250}function Zs(e){if(Hs(e)){var o=e.map,i=o.xa();if(e=e.pixel,i=Math.atan2(i[1]/2-e[1],e[0]-i[0]/2),t(this.a)){e=i-this.a;var n=o.R(),r=n.Da();o.render(),Rs(o,n,r-e)}this.a=i}}function _s(t){if(!Hs(t))return!0;t=t.map;var e=t.R();Do(e,-1);var o=e.Da(),i=this.g,o=e.constrainRotation(o,0);return Rs(t,e,o,void 0,i),!1}function Js(t){return!!(Hs(t)&&Nt(t.b)&&this.f(t))&&(t=t.map,Do(t.R(),1),t.render(),this.a=void 0,!0)}function Qs(){re.call(this),this.o=He(),this.n=-1,this.f={},this.l=this.g=0}function ta(e,o,i,n,r,s){var a=r[0],p=r[1],l=r[4],h=r[5],u=r[12];r=r[13];for(var c=t(s)?s:[],f=0;o<i;o+=n){var y=e[o],d=e[o+1];c[f++]=a*y+l*d+u,c[f++]=p*y+h*d+r}return t(s)&&c.length!=f&&(c.length=f),c}function ea(){Qs.call(this),this.a="XY",this.s=2,this.j=null}function oa(t){return"XY"==t?2:"XYZ"==t||"XYM"==t?3:"XYZM"==t?4:void 0}function ia(t,e,o){t.s=oa(e),t.a=e,t.j=o}function na(e,o,i,n){if(t(o))i=oa(o);else{for(o=0;o<n;++o){if(0===i.length)return e.a="XY",void(e.s=2);i=i[0]}i=i.length,o=2==i?"XY":3==i?"XYZ":4==i?"XYZM":void 0}e.a=o,e.s=i}function ra(t,e,o,i){for(var n=0,r=t[o-i],s=t[o-i+1];e<o;e+=i)var a=t[e],p=t[e+1],n=n+(s*a-r*p),r=a,s=p;return n/2}function sa(t,e,o,i){var n,r,s=0;for(n=0,r=o.length;n<r;++n){var a=o[n],s=s+ra(t,e,a,i);e=a}return s}function aa(t,e,o,i,n,r){var s=n-o,a=r-i;if(0!==s||0!==a){var p=((t-o)*s+(e-i)*a)/(s*s+a*a);1<p?(o=n,i=r):0<p&&(o+=s*p,i+=a*p)}return pa(t,e,o,i)}function pa(t,e,o,i){return t=o-t,e=i-e,t*t+e*e}function la(t,e,o,i,n,r,s){var a=t[e],p=t[e+1],l=t[o]-a,h=t[o+1]-p;if(0!==l||0!==h)if(r=((n-a)*l+(r-p)*h)/(l*l+h*h),1<r)e=o;else if(0<r){for(n=0;n<i;++n)s[n]=ut(t[e+n],t[o+n],r);return void(s.length=i)}for(n=0;n<i;++n)s[n]=t[e+n];s.length=i}function ha(t,e,o,i,n){var r=t[e],s=t[e+1];for(e+=i;e<o;e+=i){var a=t[e],p=t[e+1],r=pa(r,s,a,p);r>n&&(n=r),r=a,s=p}return n}function ua(t,e,o,i,n){var r,s;for(r=0,s=o.length;r<s;++r){var a=o[r];n=ha(t,e,a,i,n),e=a}return n}function ca(e,o,i,n,r,s,a,p,l,h,u){if(o==i)return h;var c;if(0===r){if(c=pa(a,p,e[o],e[o+1]),c<h){for(u=0;u<n;++u)l[u]=e[o+u];return l.length=n,c}return h}for(var f=t(u)?u:[NaN,NaN],y=o+n;y<i;)if(la(e,y-n,y,n,a,p,f),c=pa(a,p,f[0],f[1]),c<h){for(h=c,u=0;u<n;++u)l[u]=f[u];l.length=n,y+=n}else y+=n*Math.max((Math.sqrt(c)-Math.sqrt(h))/r|0,1);if(s&&(la(e,i-n,o,n,a,p,f),c=pa(a,p,f[0],f[1]),c<h)){for(h=c,u=0;u<n;++u)l[u]=f[u];l.length=n}return h}function fa(e,o,i,n,r,s,a,p,l,h,u){u=t(u)?u:[NaN,NaN];var c,f;for(c=0,f=i.length;c<f;++c){var y=i[c];h=ca(e,o,y,n,r,s,a,p,l,h,u),o=y}return h}function ya(t,e){var o,i,n=0;for(o=0,i=e.length;o<i;++o)t[n++]=e[o];return n}function da(t,e,o,i){var n,r;for(n=0,r=o.length;n<r;++n){var s,a=o[n];for(s=0;s<i;++s)t[e++]=a[s]}return e}function ga(e,o,i,n,r){r=t(r)?r:[];var s,a,p=0;for(s=0,a=i.length;s<a;++s)o=da(e,o,i[s],n),r[p++]=o;return r.length=p,r}function va(e,o,i,n,r){r=t(r)?r:[];for(var s=0;o<i;o+=n)r[s++]=e.slice(o,o+n);return r.length=s,r}function ma(e,o,i,n,r){r=t(r)?r:[];var s,a,p=0;for(s=0,a=i.length;s<a;++s){var l=i[s];r[p++]=va(e,o,l,n,r[p]),o=l}return r.length=p,r}function ba(t,e,o,i,n,r,s){var a=(o-e)/i;if(3>a){for(;e<o;e+=i)r[s++]=t[e],r[s++]=t[e+1];return s}var p=Array(a);p[0]=1,p[a-1]=1,o=[e,o-i];for(var l,h=0;0<o.length;){var u=o.pop(),c=o.pop(),f=0,y=t[c],d=t[c+1],g=t[u],v=t[u+1];for(l=c+i;l<u;l+=i){var m=aa(t[l],t[l+1],y,d,g,v);m>f&&(h=l,f=m)}f>n&&(p[(h-e)/i]=1,c+i<h&&o.push(c,h),h+i<u&&o.push(h,u))}for(l=0;l<a;++l)p[l]&&(r[s++]=t[e+l*i],r[s++]=t[e+l*i+1]);return s}function wa(t,e,o,i,n,r,s,a){var p,l;for(p=0,l=o.length;p<l;++p){var h=o[p];t:{var u=t,c=h,f=i,y=n,d=r;if(e!=c){var g=y*Math.round(u[e]/y),v=y*Math.round(u[e+1]/y);e+=f,d[s++]=g,d[s++]=v;var m=void 0,b=void 0;do if(m=y*Math.round(u[e]/y),b=y*Math.round(u[e+1]/y),e+=f,e==c){d[s++]=m,d[s++]=b;break t}while(m==g&&b==v);for(;e<c;){var w,x;if(w=y*Math.round(u[e]/y),x=y*Math.round(u[e+1]/y),e+=f,w!=m||x!=b){var S=m-g,T=b-v,M=w-g,C=x-v;S*C==T*M&&(0>S&&M<S||S==M||0<S&&M>S)&&(0>T&&C<T||T==C||0<T&&C>T)||(d[s++]=m,d[s++]=b,g=m,v=b),m=w,b=x}}d[s++]=m,d[s++]=b}}a.push(s),e=h}return s}function xa(t,e){ea.call(this),this.c=this.i=-1,this.W(t,e)}function Sa(t,e,o){ia(t,e,o),t.k()}function Ta(t,e){ea.call(this),this.W(t,e)}function Ma(t,e,o){ia(t,e,o),t.k()}function Ca(t,e,o,i,n){return!Ve(n,function(n){return!Ea(t,e,o,i,n[0],n[1])})}function Ea(t,e,o,i,n,r){for(var s=!1,a=t[o-i],p=t[o-i+1];e<o;e+=i){var l=t[e],h=t[e+1];p>r!=h>r&&n<(l-a)*(r-p)/(h-p)+a&&(s=!s),a=l,p=h}return s}function Pa(t,e,o,i,n,r){if(0===o.length||!Ea(t,e,o[0],i,n,r))return!1;var s;for(e=1,s=o.length;e<s;++e)if(Ea(t,o[e-1],o[e],i,n,r))return!1;return!0}function ka(e,o,i,n,r,s,a){var p,l,h,u,c,f=r[s+1],y=[],d=i[0];for(h=e[d-n],c=e[d-n+1],p=o;p<d;p+=n)u=e[p],l=e[p+1],(f<=c&&l<=f||c<=f&&f<=l)&&(h=(f-c)/(l-c)*(u-h)+h,y.push(h)),h=u,c=l;for(d=NaN,c=-(1/0),y.sort(),h=y[0],p=1,l=y.length;p<l;++p){u=y[p];var g=Math.abs(u-h);g>c&&(h=(h+u)/2,Pa(e,o,i,n,h,f)&&(d=h,c=g)),h=u}return isNaN(d)&&(d=r[s]),t(a)?(a.push(d,f),a):[d,f]}function Aa(t,e,o,i,n,r){for(var s,a=[t[e],t[e+1]],p=[];e+i<o;e+=i){if(p[0]=t[e+i],p[1]=t[e+i+1],s=n.call(r,a,p))return s;a[0]=p[0],a[1]=p[1]}return!1}function Ra(t,e,o,i,n){var r=Ke(He(),t,e,o,i);return!!ro(n,r)&&(!!(Be(n,r)||r[0]>=n[0]&&r[2]<=n[2]||r[1]>=n[1]&&r[3]<=n[3])||Aa(t,e,o,i,function(t,e){var o=!1,i=Ge(n,t),r=Ge(n,e);if(1===i||1===r)o=!0;else{var s=n[0],a=n[1],p=n[2],l=n[3],h=e[0],u=e[1],c=(u-t[1])/(h-t[0]);2&r&&!(2&i)&&(o=h-(u-l)/c,o=o>=s&&o<=p),o||!(4&r)||4&i||(o=u-(h-p)*c,o=o>=a&&o<=l),o||!(8&r)||8&i||(o=h-(u-a)/c,o=o>=s&&o<=p),o||!(16&r)||16&i||(o=u-(h-s)*c,o=o>=a&&o<=l)}return o}))}function La(t,e,o,i,n){var r=o[0];if(!(Ra(t,e,r,i,n)||Ea(t,e,r,i,n[0],n[1])||Ea(t,e,r,i,n[0],n[3])||Ea(t,e,r,i,n[2],n[1])||Ea(t,e,r,i,n[2],n[3])))return!1;if(1===o.length)return!0;for(e=1,r=o.length;e<r;++e)if(Ca(t,o[e-1],o[e],i,n))return!1;return!0}function Na(t,e,o,i){for(var n=0,r=t[o-i],s=t[o-i+1];e<o;e+=i)var a=t[e],p=t[e+1],n=n+(a-r)*(p+s),r=a,s=p;return 0<n}function ja(e,o,i,n){var r=0;n=!!t(n)&&n;var s,a;for(s=0,a=o.length;s<a;++s){var p=o[s],r=Na(e,r,p,i);if(0===s){if(n&&r||!n&&!r)return!1}else if(n&&!r||!n&&r)return!1;r=p}return!0}function Ia(e,o,i,n,r){r=!!t(r)&&r;var s,a;for(s=0,a=i.length;s<a;++s){var p=i[s],l=Na(e,o,p,n);if(0===s?r&&l||!r&&!l:r&&!l||!r&&l)for(var l=e,h=p,u=n;o<h-u;){var c;for(c=0;c<u;++c){var f=l[o+c];l[o+c]=l[h-u+c],l[h-u+c]=f}o+=u,h-=u}o=p}return o}function Da(t,e,o,i){var n,r,s=0;for(n=0,r=e.length;n<r;++n)s=Ia(t,s,e[n],o,i);return s}function Fa(t,e){ea.call(this),this.c=[],this.p=-1,this.H=null,this.N=this.J=this.L=-1,this.i=null,this.W(t,e)}function Oa(t){if(t.p!=t.b){var e=_e(t.G());t.H=ka(Ba(t),0,t.c,t.s,e,0),t.p=t.b}return t.H}function Ba(t){if(t.N!=t.b){var e=t.j;ja(e,t.c,t.s)?t.i=e:(t.i=e.slice(),t.i.length=Ia(t.i,0,t.c,t.s)),t.N=t.b}return t.i}function Ua(t,e,o,i){ia(t,e,o),t.c=i,t.k()}function Ga(e,o,i,n){var r=t(n)?n:32;n=[];var s;for(s=0;s<r;++s)F(n,e.offset(o,i,2*Math.PI*s/r));return n.push(n[0],n[1]),e=new Fa(null),Ua(e,"XY",n,[n.length]),e}function Ha(){}function qa(t,e,o,i,n,r,s){Et.call(this,t,e),this.vectorContext=o,this.b=i,this.frameState=n,this.context=r,this.glContext=s}function $a(t){this.c=this.a=this.e=this.d=this.b=null,this.f=t}function Xa(t){var e=t.e,o=t.a;return t=k([e,[e[0],o[1]],o,[o[0],e[1]]],t.b.ka,t.b),t[4]=t[0].slice(),new Fa([t])}function Wa(t){null===t.b||null===t.e||null===t.a||t.b.render()}function za(t,e){Et.call(this,t),this.coordinate=e}function Ka(e){qs.call(this,{handleDownEvent:Za,handleDragEvent:Va,handleUpEvent:Ya}),e=t(e)?e:{},this.f=new $a(t(e.style)?e.style:null),this.a=null,this.i=t(e.condition)?e.condition:lb}function Va(t){if(Hs(t)){var e=this.f;t=t.pixel,e.e=this.a,e.a=t,e.c=Xa(e),Wa(e)}}function Ya(t){if(!Hs(t))return!0;this.f.setMap(null);var e=t.pixel[0]-this.a[0],o=t.pixel[1]-this.a[1];return 64<=e*e+o*o&&(this.g(t),this.dispatchEvent(new za("boxend",t.coordinate))),!1}function Za(t){if(Hs(t)&&Nt(t.b)&&this.i(t)){this.a=t.pixel,this.f.setMap(t.map);var e=this.f,o=this.a;return e.e=this.a,e.a=o,e.c=Xa(e),Wa(e),this.dispatchEvent(new za("boxstart",t.coordinate)),!0}return!1}function _a(){this.a=-1}function Ja(){this.a=-1,this.a=64,this.b=Array(4),this.e=Array(this.a),this.d=this.c=0,this.b[0]=1732584193,this.b[1]=4023233417,this.b[2]=2562383102,this.b[3]=271733878,this.d=this.c=0}function Qa(t,e,o){o||(o=0);var i=Array(16);if(p(e))for(var n=0;16>n;++n)i[n]=e.charCodeAt(o++)|e.charCodeAt(o++)<<8|e.charCodeAt(o++)<<16|e.charCodeAt(o++)<<24;else for(n=0;16>n;++n)i[n]=e[o++]|e[o++]<<8|e[o++]<<16|e[o++]<<24;e=t.b[0],o=t.b[1];var n=t.b[2],r=t.b[3],s=0,s=e+(r^o&(n^r))+i[0]+3614090360&4294967295;e=o+(s<<7&4294967295|s>>>25),s=r+(n^e&(o^n))+i[1]+3905402710&4294967295,r=e+(s<<12&4294967295|s>>>20),s=n+(o^r&(e^o))+i[2]+606105819&4294967295,n=r+(s<<17&4294967295|s>>>15),s=o+(e^n&(r^e))+i[3]+3250441966&4294967295,o=n+(s<<22&4294967295|s>>>10),s=e+(r^o&(n^r))+i[4]+4118548399&4294967295,e=o+(s<<7&4294967295|s>>>25),s=r+(n^e&(o^n))+i[5]+1200080426&4294967295,r=e+(s<<12&4294967295|s>>>20),s=n+(o^r&(e^o))+i[6]+2821735955&4294967295,n=r+(s<<17&4294967295|s>>>15),s=o+(e^n&(r^e))+i[7]+4249261313&4294967295,o=n+(s<<22&4294967295|s>>>10),s=e+(r^o&(n^r))+i[8]+1770035416&4294967295,e=o+(s<<7&4294967295|s>>>25),s=r+(n^e&(o^n))+i[9]+2336552879&4294967295,r=e+(s<<12&4294967295|s>>>20),s=n+(o^r&(e^o))+i[10]+4294925233&4294967295,n=r+(s<<17&4294967295|s>>>15),s=o+(e^n&(r^e))+i[11]+2304563134&4294967295,o=n+(s<<22&4294967295|s>>>10),s=e+(r^o&(n^r))+i[12]+1804603682&4294967295,e=o+(s<<7&4294967295|s>>>25),s=r+(n^e&(o^n))+i[13]+4254626195&4294967295,r=e+(s<<12&4294967295|s>>>20),s=n+(o^r&(e^o))+i[14]+2792965006&4294967295,n=r+(s<<17&4294967295|s>>>15),s=o+(e^n&(r^e))+i[15]+1236535329&4294967295,o=n+(s<<22&4294967295|s>>>10),s=e+(n^r&(o^n))+i[1]+4129170786&4294967295,e=o+(s<<5&4294967295|s>>>27),s=r+(o^n&(e^o))+i[6]+3225465664&4294967295,r=e+(s<<9&4294967295|s>>>23),s=n+(e^o&(r^e))+i[11]+643717713&4294967295,n=r+(s<<14&4294967295|s>>>18),s=o+(r^e&(n^r))+i[0]+3921069994&4294967295,o=n+(s<<20&4294967295|s>>>12),s=e+(n^r&(o^n))+i[5]+3593408605&4294967295,e=o+(s<<5&4294967295|s>>>27),s=r+(o^n&(e^o))+i[10]+38016083&4294967295,r=e+(s<<9&4294967295|s>>>23),s=n+(e^o&(r^e))+i[15]+3634488961&4294967295,n=r+(s<<14&4294967295|s>>>18),s=o+(r^e&(n^r))+i[4]+3889429448&4294967295,o=n+(s<<20&4294967295|s>>>12),s=e+(n^r&(o^n))+i[9]+568446438&4294967295,e=o+(s<<5&4294967295|s>>>27),s=r+(o^n&(e^o))+i[14]+3275163606&4294967295,r=e+(s<<9&4294967295|s>>>23),s=n+(e^o&(r^e))+i[3]+4107603335&4294967295,n=r+(s<<14&4294967295|s>>>18),s=o+(r^e&(n^r))+i[8]+1163531501&4294967295,o=n+(s<<20&4294967295|s>>>12),s=e+(n^r&(o^n))+i[13]+2850285829&4294967295,e=o+(s<<5&4294967295|s>>>27),s=r+(o^n&(e^o))+i[2]+4243563512&4294967295,r=e+(s<<9&4294967295|s>>>23),s=n+(e^o&(r^e))+i[7]+1735328473&4294967295,n=r+(s<<14&4294967295|s>>>18),s=o+(r^e&(n^r))+i[12]+2368359562&4294967295,o=n+(s<<20&4294967295|s>>>12),s=e+(o^n^r)+i[5]+4294588738&4294967295,e=o+(s<<4&4294967295|s>>>28),s=r+(e^o^n)+i[8]+2272392833&4294967295,r=e+(s<<11&4294967295|s>>>21),s=n+(r^e^o)+i[11]+1839030562&4294967295,n=r+(s<<16&4294967295|s>>>16),s=o+(n^r^e)+i[14]+4259657740&4294967295,o=n+(s<<23&4294967295|s>>>9),s=e+(o^n^r)+i[1]+2763975236&4294967295,e=o+(s<<4&4294967295|s>>>28),s=r+(e^o^n)+i[4]+1272893353&4294967295,r=e+(s<<11&4294967295|s>>>21),s=n+(r^e^o)+i[7]+4139469664&4294967295,n=r+(s<<16&4294967295|s>>>16),s=o+(n^r^e)+i[10]+3200236656&4294967295,o=n+(s<<23&4294967295|s>>>9),s=e+(o^n^r)+i[13]+681279174&4294967295,e=o+(s<<4&4294967295|s>>>28),s=r+(e^o^n)+i[0]+3936430074&4294967295,r=e+(s<<11&4294967295|s>>>21),s=n+(r^e^o)+i[3]+3572445317&4294967295,n=r+(s<<16&4294967295|s>>>16),s=o+(n^r^e)+i[6]+76029189&4294967295,o=n+(s<<23&4294967295|s>>>9),s=e+(o^n^r)+i[9]+3654602809&4294967295,e=o+(s<<4&4294967295|s>>>28),s=r+(e^o^n)+i[12]+3873151461&4294967295,r=e+(s<<11&4294967295|s>>>21),s=n+(r^e^o)+i[15]+530742520&4294967295,n=r+(s<<16&4294967295|s>>>16),s=o+(n^r^e)+i[2]+3299628645&4294967295,o=n+(s<<23&4294967295|s>>>9),s=e+(n^(o|~r))+i[0]+4096336452&4294967295,e=o+(s<<6&4294967295|s>>>26),s=r+(o^(e|~n))+i[7]+1126891415&4294967295,r=e+(s<<10&4294967295|s>>>22),s=n+(e^(r|~o))+i[14]+2878612391&4294967295,n=r+(s<<15&4294967295|s>>>17),s=o+(r^(n|~e))+i[5]+4237533241&4294967295,o=n+(s<<21&4294967295|s>>>11),s=e+(n^(o|~r))+i[12]+1700485571&4294967295,e=o+(s<<6&4294967295|s>>>26),s=r+(o^(e|~n))+i[3]+2399980690&4294967295,r=e+(s<<10&4294967295|s>>>22),s=n+(e^(r|~o))+i[10]+4293915773&4294967295,n=r+(s<<15&4294967295|s>>>17),s=o+(r^(n|~e))+i[1]+2240044497&4294967295,o=n+(s<<21&4294967295|s>>>11),s=e+(n^(o|~r))+i[8]+1873313359&4294967295,e=o+(s<<6&4294967295|s>>>26),s=r+(o^(e|~n))+i[15]+4264355552&4294967295,r=e+(s<<10&4294967295|s>>>22),s=n+(e^(r|~o))+i[6]+2734768916&4294967295,n=r+(s<<15&4294967295|s>>>17),s=o+(r^(n|~e))+i[13]+1309151649&4294967295,o=n+(s<<21&4294967295|s>>>11),s=e+(n^(o|~r))+i[4]+4149444226&4294967295,e=o+(s<<6&4294967295|s>>>26),s=r+(o^(e|~n))+i[11]+3174756917&4294967295,r=e+(s<<10&4294967295|s>>>22),s=n+(e^(r|~o))+i[2]+718787259&4294967295,n=r+(s<<15&4294967295|s>>>17),s=o+(r^(n|~e))+i[9]+3951481745&4294967295,t.b[0]=t.b[0]+e&4294967295,t.b[1]=t.b[1]+(n+(s<<21&4294967295|s>>>11))&4294967295,t.b[2]=t.b[2]+n&4294967295,t.b[3]=t.b[3]+r&4294967295}function tp(e){e=t(e)?e:{},this.b=t(e.color)?e.color:null,this.d=e.lineCap,this.c=t(e.lineDash)?e.lineDash:null,this.e=e.lineJoin,this.f=e.miterLimit,this.a=e.width,this.g=void 0}function ep(e){e=t(e)?e:{},this.b=t(e.color)?e.color:null,this.a=void 0}function op(e){e=t(e)?e:{},this.f=this.b=this.e=null,this.d=t(e.fill)?e.fill:null,this.a=t(e.stroke)?e.stroke:null,this.c=e.radius,this.o=[0,0],this.i=this.p=this.g=null;var o,i,n=e.atlasManager,r=null,s=0;null!==this.a&&(i=ni(this.a.b),s=this.a.a,t(s)||(s=1),r=this.a.c,Pb||(r=null));var a=2*(this.c+s)+1;i={strokeStyle:i,md:s,size:a,lineDash:r},t(n)?(a=Math.round(a),(r=null===this.d)&&(o=d(this.Rg,this,i)),s=this.nb(),i=n.add(s,a,a,d(this.Sg,this,i),o),this.b=i.image,this.o=[i.offsetX,i.offsetY],o=i.image.width,this.f=r?i.ig:this.b):(this.b=gi("CANVAS"),this.b.height=a,this.b.width=a,o=a=this.b.width,n=this.b.getContext("2d"),this.Sg(i,n,0,0),null===this.d?(n=this.f=gi("CANVAS"),n.height=i.size,n.width=i.size,n=n.getContext("2d"),this.Rg(i,n,0,0)):this.f=this.b),this.g=[a/2,a/2],this.p=[a,a],this.i=[o,o],hs.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:!t(e.snapToPixel)||e.snapToPixel})}function ip(e){e=t(e)?e:{},this.g=null,this.d=ap,t(e.geometry)&&this.Vg(e.geometry),this.e=t(e.fill)?e.fill:null,this.f=t(e.image)?e.image:null,this.c=t(e.stroke)?e.stroke:null,this.a=t(e.text)?e.text:null,this.b=e.zIndex}function np(t){return h(t)||(t=s(t)?t:[t],t=ln(t)),t}function rp(){var t=new ep({color:"rgba(255,255,255,0.4)"}),e=new tp({color:"#3399CC",width:1.25}),o=[new ip({image:new op({fill:t,stroke:e,radius:5}),fill:t,stroke:e})];return rp=function(){return o},o}function sp(){var t={},e=[255,255,255,1],o=[0,153,255,1];return t.Polygon=[new ip({fill:new ep({color:[255,255,255,.5]})})],t.MultiPolygon=t.Polygon,t.LineString=[new ip({stroke:new tp({color:e,width:5})}),new ip({stroke:new tp({color:o,width:3})})],t.MultiLineString=t.LineString,t.Circle=t.Polygon.concat(t.LineString),t.Point=[new ip({image:new op({radius:6,fill:new ep({color:o}),stroke:new tp({color:e,width:1.5})}),zIndex:1/0})],t.MultiPoint=t.Point,t.GeometryCollection=t.Polygon.concat(t.Point),t}function ap(t){return t.Q()}function pp(e){var o=t(e)?e:{};e=t(o.condition)?o.condition:Us,this.n=t(o.duration)?o.duration:200,o=t(o.style)?o.style:new ip({stroke:new tp({color:[0,0,255,1]})}),Ka.call(this,{condition:e,style:o})}function lp(e){As.call(this,{handleEvent:hp}),e=t(e)?e:{},this.a=t(e.condition)?e.condition:fn(Bs,Gs),this.e=t(e.duration)?e.duration:100,this.f=t(e.pixelDelta)?e.pixelDelta:128}function hp(e){var o=!1;if("key"==e.type){var i=e.b.e;if(this.a(e)&&(40==i||37==i||39==i||38==i)){var n=e.map,o=n.R(),r=jo(o),s=r.resolution*this.f,a=0,p=0;40==i?p=-s:37==i?a=-s:39==i?a=s:p=s,i=[a,p],ge(i,r.rotation),r=this.e,s=o.Ca(),t(s)&&(t(r)&&0<r&&n.Ha(Go({source:s,duration:r,easing:Bo})),n=o.xd([s[0]+i[0],s[1]+i[1]]),o.Na(n)),e.preventDefault(),o=!0}}return!o}function up(e){As.call(this,{handleEvent:cp}),e=t(e)?e:{},this.e=t(e.condition)?e.condition:Gs,this.a=t(e.delta)?e.delta:1,this.f=t(e.duration)?e.duration:100}function cp(t){var e=!1;if("key"==t.type){var o=t.b.q;if(this.e(t)&&(43==o||45==o)){e=t.map,o=43==o?this.a:-this.a,e.render();var i=e.R();Ls(e,i,o,void 0,this.f),t.preventDefault(),e=!0}}return!e}function fp(e){As.call(this,{handleEvent:yp}),e=t(e)?e:{},this.a=0,this.o=t(e.duration)?e.duration:250,this.f=null,this.g=this.e=void 0}function yp(e){var o=!1;if("mousewheel"==e.type){var o=e.map,i=e.b;this.f=e.coordinate,this.a+=i.o,t(this.e)||(this.e=lm()),i=Math.max(80-(lm()-this.e),0),sm.clearTimeout(this.g),this.g=sm.setTimeout(d(this.i,this,o),i),e.preventDefault(),o=!0}return!o}function dp(e){qs.call(this,{handleDownEvent:mp,handleDragEvent:gp,handleUpEvent:vp}),e=t(e)?e:{},this.f=null,this.g=void 0,this.a=!1,this.i=0,this.p=t(e.threshold)?e.threshold:.3,this.n=t(e.duration)?e.duration:250}function gp(e){var o=0,i=this.e[0],n=this.e[1],i=Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX);t(this.g)&&(o=i-this.g,this.i+=o,!this.a&&Math.abs(this.i)>this.p&&(this.a=!0)),this.g=i,e=e.map,i=Hi(e.a),n=$s(this.e),n[0]-=i.x,n[1]-=i.y,this.f=e.ka(n),this.a&&(i=e.R(),n=i.Da(),e.render(),Rs(e,i,n+o,this.f))}function vp(t){if(2>this.e.length){t=t.map;var e=t.R();if(Do(e,-1),this.a){var o=e.Da(),i=this.f,n=this.n,o=e.constrainRotation(o,0);Rs(t,e,o,i,n)}return!1}return!0}function mp(t){return 2<=this.e.length&&(t=t.map,this.f=null,this.g=void 0,this.a=!1,this.i=0,this.o||Do(t.R(),1),t.render(),!0)}function bp(e){qs.call(this,{handleDownEvent:Sp,handleDragEvent:wp,handleUpEvent:xp}),e=t(e)?e:{},this.f=null,this.i=t(e.duration)?e.duration:400,this.a=void 0,this.g=1}function wp(e){var o=1,i=this.e[0],n=this.e[1],r=i.clientX-n.clientX,i=i.clientY-n.clientY,r=Math.sqrt(r*r+i*i);t(this.a)&&(o=this.a/r),this.a=r,1!=o&&(this.g=o),e=e.map;var r=e.R(),i=r.ya(),n=Hi(e.a),s=$s(this.e);s[0]-=n.x,s[1]-=n.y,this.f=e.ka(s),e.render(),Ns(e,r,i*o,this.f)}function xp(t){if(2>this.e.length){t=t.map;var e=t.R();Do(e,-1);var o=e.ya(),i=this.f,n=this.i,o=e.constrainResolution(o,0,this.g-1);return Ns(t,e,o,i,n),!1}return!0}function Sp(t){return 2<=this.e.length&&(t=t.map,this.f=null,this.a=void 0,this.g=1,this.o||Do(t.R(),1),t.render(),!0)}function Tp(e){e=t(e)?e:{};var o=new ei,i=new Es((-.005),.05,100);return(t(e.altShiftDragRotate)?e.altShiftDragRotate:1)&&o.push(new Ys),(t(e.doubleClickZoom)?e.doubleClickZoom:1)&&o.push(new js({delta:e.zoomDelta,duration:e.zoomDuration})),(t(e.dragPan)?e.dragPan:1)&&o.push(new Ws({kinetic:i})),(t(e.pinchRotate)?e.pinchRotate:1)&&o.push(new dp),(t(e.pinchZoom)?e.pinchZoom:1)&&o.push(new bp({duration:e.zoomDuration})),(t(e.keyboard)?e.keyboard:1)&&(o.push(new lp),o.push(new up({delta:e.zoomDelta,duration:e.zoomDuration}))),(t(e.mouseWheelZoom)?e.mouseWheelZoom:1)&&o.push(new fp({duration:e.zoomDuration})),(t(e.shiftDragZoom)?e.shiftDragZoom:1)&&o.push(new pp),o}function Mp(e){var o=t(e)?e:{};e=nt(o),delete e.layers,o=o.layers,Kr.call(this,e),this.c=[],this.a={},Ht(this,se("layers"),this.Vj,!1,this),null!=o?s(o)&&(o=new ei(o.slice())):o=new ei,this.Ah(o)}function Cp(t){ho.call(this,{code:t,units:"m",extent:sw,global:!0,worldExtent:aw})}function Ep(e,o,i){var n=e.length;i=1<i?i:2,t(o)||(o=2<i?e.slice():Array(n));for(var r=0;r<n;r+=i)o[r]=6378137*Math.PI*e[r]/180,o[r+1]=6378137*Math.log(Math.tan(Math.PI*(e[r+1]+90)/360));return o}function Pp(e,o,i){var n=e.length;i=1<i?i:2,t(o)||(o=2<i?e.slice():Array(n));for(var r=0;r<n;r+=i)o[r]=180*e[r]/(6378137*Math.PI),o[r+1]=360*Math.atan(Math.exp(e[r+1]/6378137))/Math.PI-90;return o}function kp(t,e){ho.call(this,{code:t,units:"degrees",extent:lw,axisOrientation:e,global:!0,worldExtent:lw})}function Ap(){co(pw),co(hw),fo()}function Rp(e){Yr.call(this,t(e)?e:{})}function Lp(e){e=t(e)?e:{};var o=nt(e);delete o.preload,delete o.useInterimTilesOnError,Yr.call(this,o),this.d(t(e.preload)?e.preload:0),this.e(!t(e.useInterimTilesOnError)||e.useInterimTilesOnError)}function Np(e){e=t(e)?e:{};var o=nt(e);delete o.style,delete o.renderBuffer,delete o.updateWhileAnimating,delete o.updateWhileInteracting,Yr.call(this,o),this.c=t(e.renderBuffer)?e.renderBuffer:100,this.g=null,this.a=void 0,this.e(e.style),this.o=!!t(e.updateWhileAnimating)&&e.updateWhileAnimating,this.n=!!t(e.updateWhileInteracting)&&e.updateWhileInteracting}function jp(t,e,o,i,n){this.U={},this.c=t,this.n=e,this.e=o,this.H=i,this.Nc=n,this.f=this.b=this.a=this.oa=this.ba=this.X=null,this.Ga=this.Fa=this.o=this.N=this.L=this.J=0,this.Ra=!1,this.g=this.rc=0,this.vb=!1,this.T=0,this.d="",this.q=this.p=this.xb=this.wb=0,this.sa=this.l=this.i=null,this.V=[],this.sc=Te()}function Ip(t,e,o){if(null!==t.f){e=ta(e,0,o,2,t.H,t.V),o=t.c;var i=t.sc,n=o.globalAlpha;1!=t.o&&(o.globalAlpha=n*t.o);var r=t.rc;t.Ra&&(r+=t.Nc);var s,a;for(s=0,a=e.length;s<a;s+=2){var p=e[s]-t.J,l=e[s+1]-t.L;if(t.vb&&(p=p+.5|0,l=l+.5|0),0!==r||1!=t.g){var h=p+t.J,u=l+t.L;Jr(i,h,u,t.g,t.g,r,-h,-u),o.setTransform(i[0],i[1],i[4],i[5],i[12],i[13])}o.drawImage(t.f,t.Fa,t.Ga,t.T,t.N,p,l,t.T,t.N)}0===r&&1==t.g||o.setTransform(1,0,0,1,0,0),1!=t.o&&(o.globalAlpha=n)}}function Dp(t,e,o,i){var n=0;if(null!==t.sa&&""!==t.d){null===t.i||Up(t,t.i),null===t.l||Gp(t,t.l);var r=t.sa,s=t.c,a=t.oa;for(null===a?(s.font=r.font,s.textAlign=r.textAlign,s.textBaseline=r.textBaseline,t.oa={font:r.font,textAlign:r.textAlign,textBaseline:r.textBaseline}):(a.font!=r.font&&(a.font=s.font=r.font),a.textAlign!=r.textAlign&&(a.textAlign=s.textAlign=r.textAlign),a.textBaseline!=r.textBaseline&&(a.textBaseline=s.textBaseline=r.textBaseline)),e=ta(e,n,o,i,t.H,t.V),r=t.c;n<o;n+=i){if(s=e[n]+t.wb,a=e[n+1]+t.xb,0!==t.p||1!=t.q){var p=Jr(t.sc,s,a,t.q,t.q,t.p,-s,-a);r.setTransform(p[0],p[1],p[4],p[5],p[12],p[13])}null===t.l||r.strokeText(t.d,s,a),null===t.i||r.fillText(t.d,s,a)}0===t.p&&1==t.q||r.setTransform(1,0,0,1,0,0)}}function Fp(t,e,o,i,n,r){var s=t.c;for(t=ta(e,o,i,n,t.H,t.V),s.moveTo(t[0],t[1]),e=2;e<t.length;e+=2)s.lineTo(t[e],t[e+1]);return r&&s.lineTo(t[0],t[1]),i}function Op(t,e,o,i,n){var r,s,a=t.c;for(r=0,s=i.length;r<s;++r)o=Fp(t,e,o,i[r],n,!0),a.closePath();return o}function Bp(t){var e=k(Y(t.U),Number);U(e);var o,i,n,r,s;for(o=0,i=e.length;o<i;++o)for(n=t.U[e[o].toString()],r=0,s=n.length;r<s;++r)n[r](t)}function Up(t,e){var o=t.c,i=t.X;null===i?(o.fillStyle=e.fillStyle,t.X={fillStyle:e.fillStyle}):i.fillStyle!=e.fillStyle&&(i.fillStyle=o.fillStyle=e.fillStyle)}function Gp(t,e){var o=t.c,i=t.ba;null===i?(o.lineCap=e.lineCap,Pb&&o.setLineDash(e.lineDash),o.lineJoin=e.lineJoin,o.lineWidth=e.lineWidth,o.miterLimit=e.miterLimit,o.strokeStyle=e.strokeStyle,t.ba={lineCap:e.lineCap,lineDash:e.lineDash,lineJoin:e.lineJoin,lineWidth:e.lineWidth,miterLimit:e.miterLimit,strokeStyle:e.strokeStyle}):(i.lineCap!=e.lineCap&&(i.lineCap=o.lineCap=e.lineCap),Pb&&!G(i.lineDash,e.lineDash)&&o.setLineDash(i.lineDash=e.lineDash),i.lineJoin!=e.lineJoin&&(i.lineJoin=o.lineJoin=e.lineJoin),i.lineWidth!=e.lineWidth&&(i.lineWidth=o.lineWidth=e.lineWidth),i.miterLimit!=e.miterLimit&&(i.miterLimit=o.miterLimit=e.miterLimit),i.strokeStyle!=e.strokeStyle&&(i.strokeStyle=o.strokeStyle=e.strokeStyle))}function Hp(t,e,o){this.oa=t,this.T=e,this.d=null,this.e=0,this.resolution=o,this.L=this.J=null,this.a=[],this.coordinates=[],this.X=Te(),this.b=[],this.sa=[],this.ba=Te()}function qp(t,e,o,i,n,r){var s,a,p,l=t.coordinates.length,h=t.Pe(),u=[e[o],e[o+1]],c=[NaN,NaN],f=!0;for(s=o+n;s<i;s+=n)c[0]=e[s],c[1]=e[s+1],p=Ge(h,c),p!==a?(f&&(t.coordinates[l++]=u[0],t.coordinates[l++]=u[1]),t.coordinates[l++]=c[0],t.coordinates[l++]=c[1],f=!1):1===p?(t.coordinates[l++]=c[0],t.coordinates[l++]=c[1],f=!1):f=!0,u[0]=c[0],u[1]=c[1],a=p;return s===o+n&&(t.coordinates[l++]=u[0],t.coordinates[l++]=u[1]),r&&(t.coordinates[l++]=e[o],t.coordinates[l++]=e[o+1]),l}function $p(t,e){t.J=[0,e,0],t.a.push(t.J),t.L=[0,e,0],t.b.push(t.L)}function Xp(e,o,i,n,r,s,a,p,l){var h;Qr(n,e.X)?h=e.sa:(h=ta(e.coordinates,0,e.coordinates.length,2,n,e.sa),Ee(e.X,n)),n=0;var u,f=a.length,y=0;for(e=e.ba;n<f;){var d,g,v,m,b=a[n];switch(b[0]){case 0:y=b[1],u=c(y).toString(),t(s[u])?n=b[2]:t(l)&&!ro(l,y.Q().G())?n=b[2]:++n;break;case 1:o.beginPath(),++n;break;case 2:y=b[1],u=h[y];var w=h[y+1],x=h[y+2]-u,y=h[y+3]-w;o.arc(u,w,Math.sqrt(x*x+y*y),0,2*Math.PI,!0),++n;break;case 3:o.closePath(),++n;break;case 4:y=b[1],u=b[2],d=b[3],v=b[4]*i;var S=b[5]*i,T=b[6];g=b[7];var M=b[8],C=b[9],w=b[11],x=b[12],E=b[13],P=b[14];for(b[10]&&(w+=r);y<u;y+=2){if(b=h[y]-v,m=h[y+1]-S,E&&(b=b+.5|0,m=m+.5|0),1!=x||0!==w){var k=b+v,A=m+S;Jr(e,k,A,x,x,w,-k,-A),o.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}k=o.globalAlpha,1!=g&&(o.globalAlpha=k*g),o.drawImage(d,M,C,P,T,b,m,P*i,T*i),1!=g&&(o.globalAlpha=k),1==x&&0===w||o.setTransform(1,0,0,1,0,0)}++n;break;case 5:for(y=b[1],u=b[2],v=b[3],S=b[4]*i,T=b[5]*i,w=b[6],x=b[7]*i,d=b[8],g=b[9];y<u;y+=2)b=h[y]+S,m=h[y+1]+T,1==x&&0===w||(Jr(e,b,m,x,x,w,-b,-m),o.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])),g&&o.strokeText(v,b,m),d&&o.fillText(v,b,m),1==x&&0===w||o.setTransform(1,0,0,1,0,0);++n;break;case 6:if(t(p)&&(y=b[1],y=p(y)))return y;++n;break;case 7:o.fill(),++n;break;case 8:for(y=b[1],u=b[2],o.moveTo(h[y],h[y+1]),y+=2;y<u;y+=2)o.lineTo(h[y],h[y+1]);++n;break;case 9:o.fillStyle=b[1],++n;break;case 10:y=!t(b[7])||b[7],u=b[2],o.strokeStyle=b[1],o.lineWidth=y?u*i:u,o.lineCap=b[3],o.lineJoin=b[4],o.miterLimit=b[5],Pb&&o.setLineDash(b[6]),++n;break;case 11:o.font=b[1],o.textAlign=b[2],o.textBaseline=b[3],++n;break;case 12:o.stroke(),++n;break;default:++n}}}function Wp(t){var e=t.b;e.reverse();var o,i,n,r=e.length,s=-1;for(o=0;o<r;++o)if(i=e[o],n=i[0],6==n)s=o;else if(0==n){for(i[2]=o,i=t.b,n=o;s<n;){var a=i[s];i[s]=i[n],i[n]=a,++s,--n}s=-1}}function zp(t,e){t.J[2]=t.a.length,t.J=null,t.L[2]=t.b.length,t.L=null;var o=[6,e];t.a.push(o),t.b.push(o)}function Kp(t,e,o){Hp.call(this,t,e,o),this.i=this.N=null,this.H=this.p=this.n=this.V=this.U=this.o=this.l=this.q=this.g=this.f=this.c=void 0}function Vp(t,e,o){Hp.call(this,t,e,o),this.c={Xc:void 0,Sc:void 0,Tc:null,Uc:void 0,Vc:void 0,Wc:void 0,Ze:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}function Yp(t,e,o,i,n){var r=t.coordinates.length;return e=qp(t,e,o,i,n,!1),r=[8,r,e],t.a.push(r),t.b.push(r),i}function Zp(t){var e=t.c,o=e.strokeStyle,i=e.lineCap,n=e.lineDash,r=e.lineJoin,s=e.lineWidth,a=e.miterLimit;e.Xc==o&&e.Sc==i&&G(e.Tc,n)&&e.Uc==r&&e.Vc==s&&e.Wc==a||(e.Ze!=t.coordinates.length&&(t.a.push([12]),e.Ze=t.coordinates.length),t.a.push([10,o,s,i,r,a,n],[1]),e.Xc=o,e.Sc=i,e.Tc=n,e.Uc=r,e.Vc=s,e.Wc=a)}function _p(t,e,o){Hp.call(this,t,e,o),this.c={Mf:void 0,Xc:void 0,Sc:void 0,Tc:null,Uc:void 0,Vc:void 0,Wc:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}function Jp(e,o,i,n,r){var s=e.c,a=[1];e.a.push(a),e.b.push(a);var p,a=0;for(p=n.length;a<p;++a){var l=n[a],h=e.coordinates.length;i=qp(e,o,i,l,r,!0),i=[8,h,i],h=[3],e.a.push(i,h),e.b.push(i,h),i=l}return o=[7],e.b.push(o),t(s.fillStyle)&&e.a.push(o),t(s.strokeStyle)&&(s=[12],e.a.push(s),e.b.push(s)),i}function Qp(e){var o=e.c,i=o.fillStyle,n=o.strokeStyle,r=o.lineCap,s=o.lineDash,a=o.lineJoin,p=o.lineWidth,l=o.miterLimit;t(i)&&o.Mf!=i&&(e.a.push([9,i]),o.Mf=o.fillStyle),!t(n)||o.Xc==n&&o.Sc==r&&o.Tc==s&&o.Uc==a&&o.Vc==p&&o.Wc==l||(e.a.push([10,n,p,r,a,l,s]),o.Xc=n,o.Sc=r,o.Tc=s,o.Uc=a,o.Vc=p,o.Wc=l)}function tl(t,e,o){Hp.call(this,t,e,o),this.p=this.n=this.V=null,this.i="",this.U=this.o=this.l=this.q=0,this.g=this.f=this.c=null}function el(t,e,o,i){this.q=t,this.d=e,this.i=o,this.e=i,this.a={},this.f=mr(1,1),this.g=Te()}function ol(t){for(var e in t.a){var o,i=t.a[e];
+for(o in i)i[o].de()}}function il(e,o,i,n,r,s){var a=k(Y(e.a),Number);U(a);var p=e.d,l=p[0],h=p[1],u=p[2],p=p[3],l=[l,h,l,p,u,p,u,h];ta(l,0,8,2,n,l),o.save(),o.beginPath(),o.moveTo(l[0],l[1]),o.lineTo(l[2],l[3]),o.lineTo(l[4],l[5]),o.lineTo(l[6],l[7]),o.closePath(),o.clip();for(var c,f,l=0,h=a.length;l<h;++l)for(c=e.a[a[l].toString()],u=0,p=cw.length;u<p;++u)f=c[cw[u]],t(f)&&Xp(f,o,i,n,r,s,f.a,void 0);o.restore()}function nl(e,o,i,n,r,s,a){var p=k(Y(e.a),Number);U(p,function(t,e){return e-t});var l,h,u,c,f;for(l=0,h=p.length;l<h;++l)for(c=e.a[p[l].toString()],u=cw.length-1;0<=u;--u)if(f=c[cw[u]],t(f)&&(f=Xp(f,o,1,i,n,r,f.b,s,a)))return f}function rl(t){es.call(this,t),this.J=Te()}function sl(e,o,i,n,r){var s=e.a;ee(s,o)&&(e=t(r)?r:al(e,n,0),e=new jp(i,n.pixelRatio,n.extent,e,n.viewState.rotation),s.dispatchEvent(new qa(o,s,e,null,n,i,null)),Bp(e))}function al(t,e,o){var i=e.viewState,n=e.pixelRatio;return Jr(t.J,n*e.size[0]/2,n*e.size[1]/2,n/i.resolution,-n/i.resolution,-i.rotation,-i.center[0]+o,-i.center[1])}function pl(t,e){var o=[0,0];return ts(e,t,o),o}function ll(e,o,i){ea.call(this),this.uh(e,t(o)?o:0,i)}function hl(t){var e=t.j[t.s]-t.j[0];return t=t.j[t.s+1]-t.j[1],e*e+t*t}function ul(e){Qs.call(this),this.d=t(e)?e:null,yl(this)}function cl(t){var e,o,i=[];for(e=0,o=t.length;e<o;++e)i.push(t[e].clone());return i}function fl(t){var e,o;if(null!==t.d)for(e=0,o=t.d.length;e<o;++e)Wt(t.d[e],"change",t.k,!1,t)}function yl(t){var e,o;if(null!==t.d)for(e=0,o=t.d.length;e<o;++e)Ht(t.d[e],"change",t.k,!1,t)}function dl(t,e,o,i,n){var r=NaN,s=NaN,a=(o-e)/i;if(0!==a)if(1==a)r=t[e],s=t[e+1];else if(2==a)r=.5*t[e]+.5*t[e+i],s=.5*t[e+1]+.5*t[e+i+1];else{var p,s=t[e],a=t[e+1],l=0,r=[0];for(p=e+i;p<o;p+=i){var h=t[p],u=t[p+1],l=l+Math.sqrt((h-s)*(h-s)+(u-a)*(u-a));r.push(l),s=h,a=u}o=.5*l;for(var c,s=H,a=0,l=r.length;a<l;)p=a+l>>1,h=s(o,r[p]),0<h?a=p+1:(l=p,c=!h);c=c?a:~a,0>c?(o=(o-r[-c-2])/(r[-c-1]-r[-c-2]),e+=(-c-2)*i,r=ut(t[e],t[e+i],o),s=ut(t[e+1],t[e+i+1],o)):(r=t[e+c*i],s=t[e+c*i+1])}return null!=n?(n[0]=r,n[1]=s,n):[r,s]}function gl(t,e,o,i,n,r){if(o==e)return null;if(n<t[e+i-1])return r?(o=t.slice(e,e+i),o[i-1]=n,o):null;if(t[o-1]<n)return r?(o=t.slice(o-i,o),o[i-1]=n,o):null;if(n==t[e+i-1])return t.slice(e,e+i);for(e/=i,o/=i;e<o;)r=e+o>>1,n<t[(r+1)*i-1]?o=r:e=r+1;if(o=t[e*i-1],n==o)return t.slice((e-1)*i,(e-1)*i+i);r=(n-o)/(t[(e+1)*i-1]-o),o=[];var s;for(s=0;s<i-1;++s)o.push(ut(t[(e-1)*i+s],t[e*i+s],r));return o.push(n),o}function vl(t,e,o,i,n,r){var s=0;if(r)return gl(t,s,e[e.length-1],o,i,n);if(i<t[o-1])return n?(t=t.slice(0,o),t[o-1]=i,t):null;if(t[t.length-1]<i)return n?(t=t.slice(t.length-o),t[o-1]=i,t):null;for(n=0,r=e.length;n<r;++n){var a=e[n];if(s!=a){if(i<t[s+o-1])break;if(i<=t[a-1])return gl(t,s,a,o,i,!1);s=a}}return null}function ml(t,e){ea.call(this),this.c=null,this.p=this.H=this.i=-1,this.W(t,e)}function bl(t){return t.i!=t.b&&(t.c=dl(t.j,0,t.j.length,t.s,t.c),t.i=t.b),t.c}function wl(t,e,o){ia(t,e,o),t.k()}function xl(t,e){ea.call(this),this.c=[],this.i=this.p=-1,this.W(t,e)}function Sl(t){var e=[],o=t.j,i=0,n=t.c;t=t.s;var r,s;for(r=0,s=n.length;r<s;++r){var a=n[r],i=dl(o,i,a,t);F(e,i),i=a}return e}function Tl(t,e,o,i){ia(t,e,o),t.c=i,t.k()}function Ml(t,e){var o,i,n="XY",r=[],s=[];for(o=0,i=e.length;o<i;++o){var a=e[o];0===o&&(n=a.a),F(r,a.j),s.push(r.length)}Tl(t,n,r,s)}function Cl(t,e){ea.call(this),this.W(t,e)}function El(t,e){ea.call(this),this.c=[],this.p=-1,this.H=null,this.N=this.J=this.L=-1,this.i=null,this.W(t,e)}function Pl(t){if(t.p!=t.b){var e,o,i=t.j,n=t.c,r=t.s,s=0,a=[],p=He();for(e=0,o=n.length;e<o;++e){var l=n[e],p=Ke(qe(1/0,1/0,-(1/0),-(1/0),void 0),i,s,l[0],r);a.push((p[0]+p[2])/2,(p[1]+p[3])/2),s=l[l.length-1]}for(i=kl(t),n=t.c,r=t.s,s=0,e=[],o=0,p=n.length;o<p;++o)l=n[o],e=ka(i,s,l,r,a,2*o,e),s=l[l.length-1];t.H=e,t.p=t.b}return t.H}function kl(t){if(t.N!=t.b){var e,o=t.j;t:{e=t.c;var i,n;for(i=0,n=e.length;i<n;++i)if(!ja(o,e[i],t.s,void 0)){e=!1;break t}e=!0}e?t.i=o:(t.i=o.slice(),t.i.length=Da(t.i,t.c,t.s)),t.N=t.b}return t.i}function Al(t,e,o,i){ia(t,e,o),t.c=i,t.k()}function Rl(t,e){var o,i,n,r="XY",s=[],a=[];for(o=0,i=e.length;o<i;++o){var p=e[o];0===o&&(r=p.a);var l=s.length;n=p.c;var h,u;for(h=0,u=n.length;h<u;++h)n[h]+=l;F(s,p.j),a.push(n)}Al(t,r,s,a)}function Ll(t,e){return c(t)-c(e)}function Nl(t,e){var o=.5*t/e;return o*o}function jl(t,e,o,i,n,r){var s,a,p=!1;return s=o.f,null!==s&&(a=s.gd(),2==a||3==a?s.xf(n,r):(0==a&&s.load(),s.$e(n,r),p=!0)),n=(0,o.d)(e),null!=n&&(i=n.Ve(i),(0,dw[i.M()])(t,i,o,e)),p}function Il(t,e,o,i,n){_r.call(this,t,e,o,2,i),this.a=n}function Dl(e){sn.call(this,{attributions:e.attributions,extent:e.extent,logo:e.logo,projection:e.projection,state:e.state}),this.l=t(e.resolutions)?e.resolutions:null}function Fl(t,e){if(null!==t.l){var o=dt(t.l,e,0);e=t.l[o]}return e}function Ol(t,e){t.b().src=e}function Bl(t,e){Et.call(this,t),this.image=e}function Ul(e){Dl.call(this,{attributions:e.attributions,logo:e.logo,projection:e.projection,resolutions:e.resolutions,state:t(e.state)?e.state:void 0}),this.T=e.canvasFunction,this.J=null,this.N=0,this.X=t(e.ratio)?e.ratio:1.5}function Gl(t){t.prototype.then=t.prototype.then,t.prototype.$goog_Thenable=!0}function Hl(t){if(!t)return!1;try{return!!t.$goog_Thenable}catch(e){return!1}}function ql(t,e){bw||$l(),ww||(bw(),ww=!0),xw.push(new Wl(t,e))}function $l(){if(sm.Promise&&sm.Promise.resolve){var t=sm.Promise.resolve();bw=function(){t.then(Xl)}}else bw=function(){Yn(Xl)}}function Xl(){for(;xw.length;){var t=xw;xw=[];for(var e=0;e<t.length;e++){var o=t[e];try{o.b.call(o.a)}catch(i){Vn(i)}}}ww=!1}function Wl(t,e){this.b=t,this.a=e}function zl(t,e){this.a=Sw,this.f=void 0,this.b=this.c=null,this.d=this.e=!1;try{var o=this;t.call(e,function(t){Zl(o,Tw,t)},function(t){Zl(o,Mw,t)})}catch(i){Zl(this,Mw,i)}}function Kl(t,e){if(t.a==Sw)if(t.c){var o=t.c;if(o.b){for(var i,n=0,r=-1,s=0;(i=o.b[s])&&!((i=i.Rc)&&(n++,i==t&&(r=s),0<=r&&1<n));s++);0<=r&&(o.a==Sw&&1==n?Kl(o,e):(n=o.b.splice(r,1)[0],Ql(o,n,Mw,e)))}}else Zl(t,Mw,e)}function Vl(t,e){t.b&&t.b.length||t.a!=Tw&&t.a!=Mw||Jl(t),t.b||(t.b=[]),t.b.push(e)}function Yl(e,o,i,n){var r={Rc:null,Wg:null,Yg:null};return r.Rc=new zl(function(e,s){r.Wg=o?function(t){try{var i=o.call(n,t);e(i)}catch(r){s(r)}}:e,r.Yg=i?function(o){try{var r=i.call(n,o);!t(r)&&o instanceof eh?s(o):e(r)}catch(a){s(a)}}:s}),r.Rc.c=e,Vl(e,r),r.Rc}function Zl(t,e,o){if(t.a==Sw){if(t==o)e=Mw,o=new TypeError("Promise cannot resolve to itself");else{if(Hl(o))return t.a=1,void o.then(t.g,t.i,t);if(u(o))try{var i=o.then;if(h(i))return void _l(t,o,i)}catch(n){e=Mw,o=n}}t.f=o,t.a=e,Jl(t),e!=Mw||o instanceof eh||th(t,o)}}function _l(t,e,o){function i(e){r||(r=!0,t.i(e))}function n(e){r||(r=!0,t.g(e))}t.a=1;var r=!1;try{o.call(e,n,i)}catch(s){i(s)}}function Jl(t){t.e||(t.e=!0,ql(t.q,t))}function Ql(t,e,o,i){if(o==Tw)e.Wg(i);else{if(e.Rc)for(;t&&t.d;t=t.c)t.d=!1;e.Yg(i)}}function th(t,e){t.d=!0,ql(function(){t.d&&Cw.call(null,e)})}function eh(t){m.call(this,t)}function oh(t,e,o){if(h(t))o&&(t=d(t,o));else{if(!t||"function"!=typeof t.handleEvent)throw Error("Invalid listener argument");t=d(t.handleEvent,t)}return 2147483647<e?-1:sm.setTimeout(t,e||0)}function ih(){}function nh(t){var e;return(e=t.b)||(e={},ah(t)&&(e[0]=!0,e[1]=!0),e=t.b=e),e}function rh(){}function sh(t){return(t=ah(t))?new ActiveXObject(t):new XMLHttpRequest}function ah(t){if(!t.a&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var e=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],o=0;o<e.length;o++){var i=e[o];try{return new ActiveXObject(i),t.a=i}catch(n){}}throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed")}return t.a}function ph(t){if(Rw){Rw=!1;var e=sm.location;if(e){var o=e.href;if(o&&(o=(o=ph(o)[3]||null)?decodeURI(o):o)&&o!=e.hostname)throw Rw=!0,Error()}}return t.match(Aw)}function lh(t,e){for(var o=t.split("&"),i=0;i<o.length;i++){var n=o[i].indexOf("="),r=null,s=null;0<=n?(r=o[i].substring(0,n),s=o[i].substring(n+1)):r=o[i],e(r,s?decodeURIComponent(s.replace(/\+/g," ")):"")}}function hh(t){if(t[1]){var e=t[0],o=e.indexOf("#");0<=o&&(t.push(e.substr(o)),t[0]=e=e.substr(0,o)),o=e.indexOf("?"),0>o?t[1]="?":o==e.length-1&&(t[1]=void 0)}return t.join("")}function uh(t,e,o){if(s(e))for(var i=0;i<e.length;i++)uh(t,String(e[i]),o);else null!=e&&o.push("&",t,""===e?"":"=",encodeURIComponent(String(e)))}function ch(t,e){for(var o in e)uh(o,e[o],t);return t}function fh(t){Qt.call(this),this.H=new Qn,this.i=t||null,this.b=!1,this.g=this.Y=null,this.e=this.o="",this.a=this.l=this.d=this.q=!1,this.f=0,this.c=null,this.n=Lw,this.p=this.J=!1}function yh(e){return Cm&&pt(9)&&l(e.timeout)&&t(e.ontimeout)}function dh(t){return"content-type"==t.toLowerCase()}function gh(t,e){t.b=!1,t.Y&&(t.a=!0,t.Y.abort(),t.a=!1),t.e=e,vh(t),bh(t)}function vh(t){t.q||(t.q=!0,t.dispatchEvent("complete"),t.dispatchEvent("error"))}function mh(t){if(t.b&&"undefined"!=typeof rm&&(!t.g[1]||4!=Sh(t)||2!=Th(t)))if(t.d&&4==Sh(t))oh(t.Xg,0,t);else if(t.dispatchEvent("readystatechange"),4==Sh(t)){t.b=!1;try{if(xh(t))t.dispatchEvent("complete"),t.dispatchEvent("success");else{var e;try{e=2<Sh(t)?t.Y.statusText:""}catch(o){e=""}t.e=e+" ["+Th(t)+"]",vh(t)}}finally{bh(t)}}}function bh(t,e){if(t.Y){wh(t);var i=t.Y,n=t.g[0]?o:null;t.Y=null,t.g=null,e||t.dispatchEvent("ready");try{i.onreadystatechange=n}catch(r){}}}function wh(t){t.Y&&t.p&&(t.Y.ontimeout=null),l(t.c)&&(sm.clearTimeout(t.c),t.c=null)}function xh(t){var e,o=Th(t);t:switch(o){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:e=!0;break t;default:e=!1}return e||((o=0===o)&&(t=ph(String(t.o))[1]||null,!t&&self.location&&(t=self.location.protocol,t=t.substr(0,t.length-1)),o=!Nw.test(t?t.toLowerCase():"")),e=o),e}function Sh(t){return t.Y?t.Y.readyState:0}function Th(t){try{return 2<Sh(t)?t.Y.status:-1}catch(e){return-1}}function Mh(t){try{return t.Y?t.Y.responseText:""}catch(e){return""}}function Ch(t){if("undefined"!=typeof XMLSerializer)return(new XMLSerializer).serializeToString(t);if(t=t.xml)return t;throw Error("Your browser does not support serializing XML documents")}function Eh(t,e){return Bw.createElementNS(t,e)}function Ph(t,e){return null===t&&(t=""),Bw.createNode(1,e,t)}function kh(t,e){return Ah(t,e,[]).join("")}function Ah(t,e,o){if(4==t.nodeType||3==t.nodeType)e?o.push(String(t.nodeValue).replace(/(\r\n|\r|\n)/g,"")):o.push(t.nodeValue);else for(t=t.firstChild;null!==t;t=t.nextSibling)Ah(t,e,o);return o}function Rh(t){return t.localName}function Lh(e){var o=e.localName;return t(o)?o:e.baseName}function Nh(t){return t instanceof Document}function jh(t){return u(t)&&9==t.nodeType}function Ih(t){return t instanceof Node}function Dh(e){return u(e)&&t(e.nodeType)}function Fh(t,e,o){return t.getAttributeNS(e,o)||""}function Oh(e,o,i){var n="";return e=Xw(e,o,i),t(e)&&(n=e.nodeValue),n}function Bh(t,e,o){return t.getAttributeNodeNS(e,o)}function Uh(t,e,o){var i=null;t=t.attributes;for(var n,r,s=0,a=t.length;s<a;++s)if(n=t[s],n.namespaceURI==e&&(r=n.prefix?n.prefix+":"+o:o,r==n.nodeName)){i=n;break}return i}function Gh(t,e,o,i){t.setAttributeNS(e,o,i)}function Hh(t,e,o,i){null===e?t.setAttribute(o,i):(e=t.ownerDocument.createNode(2,o,e),e.nodeValue=i,t.setAttributeNode(e))}function qh(t){return(new DOMParser).parseFromString(t,"application/xml")}function $h(e,o){return function(i,n){var r=e.call(o,i,n);t(r)&&F(n[n.length-1],r)}}function Xh(e,o){return function(i,n){var r=e.call(t(o)?o:this,i,n);t(r)&&n[n.length-1].push(r)}}function Wh(e,o){return function(i,n){var r=e.call(t(o)?o:this,i,n);t(r)&&(n[n.length-1]=r)}}function zh(e){return function(o,i){var n=e.call(t(void 0)?void 0:this,o,i);t(n)&&it(i[i.length-1],t(void 0)?void 0:o.localName).push(n)}}function Kh(e,o){return function(i,n){var r=e.call(t(void 0)?void 0:this,i,n);t(r)&&(n[n.length-1][t(o)?o:i.localName]=r)}}function Vh(t,e,o){return Qh(t,e,o)}function Yh(e,o){return function(i,n,r){e.call(t(o)?o:this,i,n,r),r[r.length-1].P.appendChild(i)}}function Zh(e){var o,i;return function(n,r,s){if(!t(o)){o={};var a={};a[n.localName]=e,o[n.namespaceURI]=a,i=_h(n.localName)}ou(o,i,r,s)}}function _h(e,o){return function(i,n,r){return i=n[n.length-1].P,n=e,t(n)||(n=r),r=o,t(o)||(r=i.namespaceURI),Uw(r,n)}}function Jh(t,e){for(var o=e.length,i=Array(o),n=0;n<o;++n)i[n]=t[e[n]];return i}function Qh(e,o,i){i=t(i)?i:{};var n,r;for(n=0,r=e.length;n<r;++n)i[e[n]]=o;return i}function tu(e,o,i,n){for(o=o.firstElementChild;null!==o;o=o.nextElementSibling){var r=e[o.namespaceURI];t(r)&&(r=r[o.localName],t(r)&&r.call(n,o,i))}}function eu(t,e,o,i,n){return i.push(t),tu(e,o,i,n),i.pop()}function ou(e,o,i,n,r,s){for(var a,p,l=(t(r)?r:i).length,h=0;h<l;++h)a=i[h],t(a)&&(p=o.call(s,a,n,t(r)?r[h]:void 0),t(p)&&e[p.namespaceURI][p.localName].call(s,p,a,n))}function iu(t,e,o,i,n,r,s){n.push(t),ou(e,o,i,n,r,s),n.pop()}function nu(t,e,o){return function(i,n,r){i=new fh,i.n="text",Ht(i,"complete",function(t){if(t=t.target,xh(t)){var i,n=e.M();if("json"==n)i=Mh(t);else if("text"==n)i=Mh(t);else if("xml"==n){if(!Cm)try{i=t.Y?t.Y.responseXML:null}catch(s){i=null}null!=i||(i=qh(Mh(t)))}null!=i&&(i=e.ja(i,{featureProjection:r}),o.call(this,i))}Ct(t)},!1,this),i.send(t)}}function ru(t,e){return nu(t,e,function(t){this.Oc(t)})}function su(){return[[-(1/0),-(1/0),1/0,1/0]]}function au(t){this.a=Ow(t),this.b={}}function pu(t){return t=t.a.all(),k(t,function(t){return t[4]})}function lu(t,e){var o=t.a.search(e);return k(o,function(t){return t[4]})}function hu(t,e,o,i){return uu(lu(t,e),o,i)}function uu(t,e,o){for(var i,n=0,r=t.length;n<r&&!(i=e.call(o,t[n]));n++);return i}function cu(e){e=t(e)?e:{},sn.call(this,{attributions:e.attributions,logo:e.logo,projection:void 0,state:"ready",wrapX:!t(e.wrapX)||e.wrapX}),this.J=o,t(e.loader)?this.J=e.loader:t(e.url)&&(this.J=ru(e.url,e.format)),this.oa=t(e.strategy)?e.strategy:su,this.a=new au,this.N=new au,this.c={},this.e={},this.g={},this.i={},t(e.features)&&du(this,e.features)}function fu(t,e,o){t.i[e]=[Ht(o,"change",t.Pg,!1,t),Ht(o,"propertychange",t.Pg,!1,t)]}function yu(e,o,i){var n=!0,r=i.$;return t(r)?r.toString()in e.e?n=!1:e.e[r.toString()]=i:e.g[o]=i,n}function du(t,e){var o,i,n,r,s=[],a=[],p=[];for(i=0,n=e.length;i<n;i++)r=e[i],o=c(r).toString(),yu(t,o,r)&&a.push(r);for(i=0,n=a.length;i<n;i++){r=a[i],o=c(r).toString(),fu(t,o,r);var l=r.Q();null!=l?(o=l.G(),s.push(o),p.push(r)):t.c[o]=r}for(t.a.load(s,p),i=0,n=a.length;i<n;i++)t.dispatchEvent(new mu("addfeature",a[i]))}function gu(t,e,o){t.$c([e[0],e[1],e[0],e[1]],function(t){if(t.Q().Jb(e[0],e[1]))return o.call(void 0,t)})}function vu(t,e){for(var o in t.e)if(t.e[o]===e){delete t.e[o];break}}function mu(t,e){Et.call(this,t),this.feature=e}function bu(t){this.a=t.source,this.ba=Te(),this.c=mr(),this.e=[0,0],this.n=null,Ul.call(this,{attributions:t.attributions,canvasFunction:d(this.zi,this),logo:t.logo,projection:t.projection,ratio:t.ratio,resolutions:t.resolutions,state:this.a.o}),this.p=null,this.g=void 0,this.Mg(t.style),Ht(this.a,"change",this.am,void 0,this)}function wu(t,e,o,i,n){return Jr(t.ba,n[0]/2,n[1]/2,i/o,-i/o,0,-e[0],-e[1])}function xu(t){rl.call(this,t),this.e=null,this.f=Te(),this.c=this.d=null}function Su(t){rl.call(this,t),this.c=this.f=null,this.q=!1,this.g=null,this.l=Te(),this.e=null,this.p=this.H=this.n=NaN,this.i=this.d=null,this.L=[0,0]}function Tu(t){rl.call(this,t),this.d=!1,this.q=-1,this.i=NaN,this.f=He(),this.c=this.g=null,this.e=mr()}function Mu(t,e){ys.call(this,0,e),this.d=mr(),this.b=this.d.canvas,this.b.style.width="100%",this.b.style.height="100%",this.b.className="ol-unselectable",bi(t,this.b,0),this.a=!0,this.e=Te()}function Cu(t,e,o){var i=t.g,n=t.d;if(ee(i,e)){var r=o.extent,s=o.pixelRatio,a=o.viewState,p=a.projection,l=a.resolution,a=a.rotation,h=0;if(p.c){var u=p.G(),p=no(u),c=o.focus[0];(c<u[0]||c>u[2])&&(h=Math.ceil((u[0]-c)/p),h*=p,r=[r[0]+h,r[1],r[2]+h,r[3]])}p=o.pixelRatio,u=o.viewState,c=u.resolution,h=Jr(t.e,t.b.width/2,t.b.height/2,p/c,-p/c,-u.rotation,-u.center[0]-h,-u.center[1]),l=new el(.5*l/s,r,l),r=new jp(n,s,r,h,a),i.dispatchEvent(new qa(e,i,r,l,o,n,null)),ol(l),l.la()||il(l,n,s,h,a,{}),Bp(r),t.c=l}}function Eu(t,e){es.call(this,t),this.target=e}function Pu(t){var e=gi("DIV");e.style.position="absolute",Eu.call(this,t,e),this.c=null,this.d=Me()}function ku(t){var e=gi("DIV");e.style.position="absolute",Eu.call(this,t,e),this.d=!0,this.q=1,this.g=0,this.c={}}function Au(t,e){this.target=gi("DIV"),this.target.style.position="absolute",this.target.style.width="100%",this.target.style.height="100%",this.d=t,this.c=e,this.f=oo(mn(t,e)),this.g=t.ma(e[0]),this.a={},this.b=null,this.e=Me(),this.i=[0,0]}function Ru(t){this.g=mr();var e=this.g.canvas;e.style.maxWidth="none",e.style.position="absolute",Eu.call(this,t,e),this.d=!1,this.n=-1,this.o=NaN,this.q=He(),this.c=this.l=null,this.H=Te(),this.p=Te()}function Lu(t,e,o,i){var n=t.g;t=t.a,ee(t,e)&&(i=new jp(n,o.pixelRatio,o.extent,i,o.viewState.rotation),t.dispatchEvent(new qa(e,t,i,null,o,n,null)),Bp(i))}function Nu(t,e){ys.call(this,0,e),this.a=null,this.a=mr();var o=this.a.canvas;o.style.position="absolute",o.style.width="100%",o.style.height="100%",o.className="ol-unselectable",bi(t,o,0),this.e=Te(),this.b=gi("DIV"),this.b.className="ol-unselectable",o=this.b.style,o.position="absolute",o.width="100%",o.height="100%",Ht(this.b,"touchstart",kt),bi(t,this.b,0),this.d=!0}function ju(t,e,o){var i=t.g;if(ee(i,e)){var n=o.extent,r=o.pixelRatio,s=o.viewState,a=s.resolution,p=s.rotation,l=t.a,h=l.canvas;Jr(t.e,h.width/2,h.height/2,r/s.resolution,-r/s.resolution,-s.rotation,-s.center[0],-s.center[1]),s=new jp(l,r,n,t.e,p),n=new el(.5*a/r,n,a),i.dispatchEvent(new qa(e,i,s,n,o,l,null)),ol(n),n.la()||il(n,l,r,t.e,p,{}),Bp(s),t.c=n}}function Iu(t){this.b=t}function Du(t){this.b=t}function Fu(t){this.b=t}function Ou(){this.b="precision mediump float;varying vec2 a;varying float b;uniform mat4 k;uniform float l;uniform sampler2D m;void main(void){vec4 texColor=texture2D(m,a);float alpha=texColor.a*b*l;if(alpha==0.0){discard;}gl_FragColor.a=alpha;gl_FragColor.rgb=(k*vec4(texColor.rgb,1.)).rgb;}"}function Bu(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}function Uu(t,e){this.l=t.getUniformLocation(e,"k"),this.i=t.getUniformLocation(e,"j"),this.q=t.getUniformLocation(e,"i"),this.f=t.getUniformLocation(e,"l"),this.g=t.getUniformLocation(e,"h"),this.b=t.getAttribLocation(e,"e"),this.a=t.getAttribLocation(e,"f"),this.d=t.getAttribLocation(e,"c"),this.c=t.getAttribLocation(e,"g"),this.e=t.getAttribLocation(e,"d")}function Gu(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}function Hu(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}function qu(t,e){this.i=t.getUniformLocation(e,"j"),this.q=t.getUniformLocation(e,"i"),this.f=t.getUniformLocation(e,"k"),this.g=t.getUniformLocation(e,"h"),this.b=t.getAttribLocation(e,"e"),this.a=t.getAttribLocation(e,"f"),this.d=t.getAttribLocation(e,"c"),this.c=t.getAttribLocation(e,"g"),this.e=t.getAttribLocation(e,"d")}function $u(e){this.b=t(e)?e:[],this.a=t(void 0)?void 0:35044}function Xu(t,e){this.l=t,this.b=e,this.a={},this.f={},this.e={},this.i=this.q=this.d=this.g=null,(this.c=N(im,"OES_element_index_uint"))&&e.getExtension("OES_element_index_uint"),Ht(this.l,"webglcontextlost",this.Ym,!1,this),Ht(this.l,"webglcontextrestored",this.Zm,!1,this)}function Wu(t,e,o){var i=t.b,n=o.b,r=c(o);if(r in t.a)i.bindBuffer(e,t.a[r].buffer);else{var s=i.createBuffer();i.bindBuffer(e,s);var a;34962==e?a=new Float32Array(n):34963==e&&(a=t.c?new Uint32Array(n):new Uint16Array(n)),i.bufferData(e,a,o.a),t.a[r]={c:o,buffer:s}}}function zu(t,e){var o=t.b,i=c(e),n=t.a[i];o.isContextLost()||o.deleteBuffer(n.buffer),delete t.a[i]}function Ku(t,e){var o=c(e);if(o in t.f)return t.f[o];var i=t.b,n=i.createShader(e.M());return i.shaderSource(n,e.b),i.compileShader(n),t.f[o]=n}function Vu(t,e,o){var i=c(e)+"/"+c(o);if(i in t.e)return t.e[i];var n=t.b,r=n.createProgram();return n.attachShader(r,Ku(t,e)),n.attachShader(r,Ku(t,o)),n.linkProgram(r),t.e[i]=r}function Yu(e,o,i){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t(o)&&e.texParameteri(3553,10242,o),t(i)&&e.texParameteri(3553,10243,i),n}function Zu(t,e,o){var i=Yu(t,void 0,void 0);return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,o,0,t.RGBA,t.UNSIGNED_BYTE,null),i}function _u(t,e){var o=Yu(t,33071,33071);return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e),o}function Ju(t,e){this.n=this.V=void 0,this.wb=new si,this.q=_e(e),this.U=[],this.f=[],this.J=void 0,this.e=[],this.d=[],this.N=this.L=void 0,this.a=[],this.H=this.p=this.i=null,this.T=void 0,this.rc=Me(),this.vb=Me(),this.X=this.sa=void 0,this.xb=Me(),this.Fa=this.oa=this.ba=void 0,this.Ra=[],this.g=[],this.b=[],this.o=null,this.c=[],this.l=[],this.Ga=void 0}function Qu(t,e){var o=t.o,i=t.i,n=t.Ra,r=t.g,s=e.b;return function(){if(!s.isContextLost()){var t,a;for(t=0,a=n.length;t<a;++t)s.deleteTexture(n[t]);for(t=0,a=r.length;t<a;++t)s.deleteTexture(r[t])}zu(e,o),zu(e,i)}}function tc(t,e,o,i){var n,r,s,a,p,l,h=t.V,u=t.n,c=t.J,f=t.L,y=t.N,d=t.T,g=t.sa,v=t.X,m=t.ba?1:0,b=t.oa,w=t.Fa,x=t.Ga,S=Math.cos(b),b=Math.sin(b),T=t.a.length,M=t.b.length;for(n=0;n<o;n+=i)p=e[n]-t.q[0],l=e[n+1]-t.q[1],r=M/8,s=-w*h,a=-w*(c-u),t.b[M++]=p,t.b[M++]=l,t.b[M++]=s*S-a*b,t.b[M++]=s*b+a*S,t.b[M++]=g/y,t.b[M++]=(v+c)/f,t.b[M++]=d,t.b[M++]=m,s=w*(x-h),a=-w*(c-u),t.b[M++]=p,t.b[M++]=l,t.b[M++]=s*S-a*b,t.b[M++]=s*b+a*S,t.b[M++]=(g+x)/y,t.b[M++]=(v+c)/f,t.b[M++]=d,t.b[M++]=m,s=w*(x-h),a=w*u,t.b[M++]=p,t.b[M++]=l,t.b[M++]=s*S-a*b,t.b[M++]=s*b+a*S,t.b[M++]=(g+x)/y,t.b[M++]=v/f,t.b[M++]=d,t.b[M++]=m,s=-w*h,a=w*u,t.b[M++]=p,t.b[M++]=l,t.b[M++]=s*S-a*b,t.b[M++]=s*b+a*S,t.b[M++]=g/y,t.b[M++]=v/f,t.b[M++]=d,t.b[M++]=m,t.a[T++]=r,t.a[T++]=r+1,t.a[T++]=r+2,t.a[T++]=r,t.a[T++]=r+2,t.a[T++]=r+3}function ec(t,e){var o=e.b;t.U.push(t.a.length),t.f.push(t.a.length),t.o=new $u(t.b),Wu(e,34962,t.o),t.i=new $u(t.a),Wu(e,34963,t.i);var i={};oc(t.Ra,t.e,i,o),oc(t.g,t.d,i,o),t.V=void 0,t.n=void 0,t.J=void 0,t.e=null,t.d=null,t.L=void 0,t.N=void 0,t.a=null,t.T=void 0,t.sa=void 0,t.X=void 0,t.ba=void 0,t.oa=void 0,t.Fa=void 0,t.b=null,t.Ga=void 0}function oc(t,e,o,i){var n,r,s,a=e.length;for(s=0;s<a;++s)n=e[s],r=c(n).toString(),r in o?n=o[r]:(n=_u(i,n),o[r]=n),t[s]=n}function ic(e,o,i,n,r,s,a,p,l,h,u,f,y,d,g){var v=o.b;Wu(o,34962,e.o),Wu(o,34963,e.i);var m,b,w=p||1!=l||h||1!=u;w?(m=Ou.Ia(),b=Bu.Ia()):(m=Gu.Ia(),b=Hu.Ia()),b=Vu(o,m,b),w?null===e.p?(m=new Uu(v,b),e.p=m):m=e.p:null===e.H?(m=new qu(v,b),e.H=m):m=e.H,o.oe(b),v.enableVertexAttribArray(m.d),v.vertexAttribPointer(m.d,2,5126,!1,32,0),v.enableVertexAttribArray(m.b),v.vertexAttribPointer(m.b,2,5126,!1,32,8),v.enableVertexAttribArray(m.e),v.vertexAttribPointer(m.e,2,5126,!1,32,16),v.enableVertexAttribArray(m.a),v.vertexAttribPointer(m.a,1,5126,!1,32,24),v.enableVertexAttribArray(m.c),v.vertexAttribPointer(m.c,1,5126,!1,32,28),b=e.xb,Jr(b,0,0,2/(n*s[0]),2/(n*s[1]),-r,-(i[0]-e.q[0]),-(i[1]-e.q[1])),i=e.vb,n=2/s[0],s=2/s[1],Pe(i),i[0]=n,i[5]=s,i[10]=1,i[15]=1,s=e.rc,Pe(s),0!==r&&Ne(s,-r),v.uniformMatrix4fv(m.g,!1,b),v.uniformMatrix4fv(m.q,!1,i),v.uniformMatrix4fv(m.i,!1,s),v.uniform1f(m.f,a),w&&v.uniformMatrix4fv(m.l,!1,ai(e.wb,p,l,h,u));var x;if(t(y)){if(d)t:{for(r=o.c?5125:5123,o=o.c?4:2,h=e.c.length-1,a=e.g.length-1;0<=a;--a)for(v.bindTexture(3553,e.g[a]),p=0<a?e.f[a-1]:0,u=e.f[a];0<=h&&e.c[h]>=p;){if(l=e.c[h],d=e.l[h],w=c(d).toString(),!t(f[w])&&(!t(g)||ro(g,d.Q().G()))&&(v.clear(v.COLOR_BUFFER_BIT|v.DEPTH_BUFFER_BIT),v.drawElements(4,u-l,r,l*o),u=y(d))){e=u;break t}u=l,h--}e=void 0}else v.clear(v.COLOR_BUFFER_BIT|v.DEPTH_BUFFER_BIT),nc(e,v,o,f,e.g,e.f),e=(e=y(null))?e:void 0;x=e}else nc(e,v,o,f,e.Ra,e.U);return v.disableVertexAttribArray(m.d),v.disableVertexAttribArray(m.b),v.disableVertexAttribArray(m.e),v.disableVertexAttribArray(m.a),v.disableVertexAttribArray(m.c),x}function nc(e,o,i,n,r,s){var a=i.c?5125:5123;if(i=i.c?4:2,Q(n)){var p;for(e=0,n=r.length,p=0;e<n;++e){o.bindTexture(3553,r[e]);var l=s[e];o.drawElements(4,l-p,a,p*i),p=l}}else{p=0;var h,l=0;for(h=r.length;l<h;++l){o.bindTexture(3553,r[l]);for(var u=0<l?s[l-1]:0,f=s[l],y=u;p<e.c.length&&e.c[p]<=f;){var d=c(e.l[p]).toString();t(n[d])?(y!==u&&o.drawElements(4,u-y,a,y*i),u=y=p===e.c.length-1?f:e.c[p+1]):u=p===e.c.length-1?f:e.c[p+1],p++}y!==u&&o.drawElements(4,u-y,a,y*i)}}}function rc(t,e,o){this.e=e,this.f=t,this.d=o,this.a={}}function sc(t,e){var o,i=[];for(o in t.a)i.push(Qu(t.a[o],e));return cn.apply(null,i)}function ac(t,e){for(var o in t.a)ec(t.a[o],e)}function pc(e,o,i,n,r,s,a,p,l,h,u,c,f,y){var d,g,v=Vw;for(d=cw.length-1;0<=d;--d)if(g=e.a[cw[d]],t(g)&&(g=ic(g,o,i,n,r,v,s,a,p,l,h,u,c,f,y)))return g}function lc(e,o,i,n,r,s,a,p,l,h,u){var c=i.b;return c.bindFramebuffer(c.FRAMEBUFFER,i.Te()),e=pc(e,i,o,n,r,s,a,p,l,h,u,function(){var t=new Uint8Array(4);return c.readPixels(0,0,1,1,c.RGBA,c.UNSIGNED_BYTE,t),0<t[3]},!1),t(e)}function hc(t,e,o,i,n,r){this.a=t,this.e=e,this.d=r,this.i=n,this.g=i,this.f=o,this.c=null,this.b={}}function uc(){this.b="precision mediump float;varying vec2 a;uniform mat4 f;uniform float g;uniform sampler2D h;void main(void){vec4 texColor=texture2D(h,a);gl_FragColor.rgb=(f*vec4(texColor.rgb,1.)).rgb;gl_FragColor.a=texColor.a*g;}"}function cc(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}function fc(t,e){this.g=t.getUniformLocation(e,"f"),this.c=t.getUniformLocation(e,"g"),this.d=t.getUniformLocation(e,"e"),this.f=t.getUniformLocation(e,"d"),this.e=t.getUniformLocation(e,"h"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function yc(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}function dc(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}function gc(t,e){this.c=t.getUniformLocation(e,"f"),this.d=t.getUniformLocation(e,"e"),this.f=t.getUniformLocation(e,"d"),this.e=t.getUniformLocation(e,"g"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function vc(t,e){es.call(this,e),this.c=t,this.N=new $u([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]),this.e=this.Qa=null,this.f=void 0,this.q=Te(),this.n=Me(),this.T=new si,this.o=this.l=null}function mc(e,o,i){var n=e.c.e;if(t(e.f)&&e.f==i)n.bindFramebuffer(36160,e.e);else{o.postRenderFunctions.push(g(function(t,e,o){t.isContextLost()||(t.deleteFramebuffer(e),t.deleteTexture(o))},n,e.e,e.Qa)),o=Zu(n,i,i);var r=n.createFramebuffer();n.bindFramebuffer(36160,r),n.framebufferTexture2D(36160,36064,3553,o,0),e.Qa=o,e.e=r,e.f=i}}function bc(t,e,o,i){if(t=t.a,ee(t,e)){var n=i.viewState;t.dispatchEvent(new qa(e,t,new hc(o,n.center,n.resolution,n.rotation,i.size,i.extent),null,i,null,o))}}function wc(t,e){vc.call(this,t,e),this.i=this.g=this.d=null}function xc(t,e){var o=e.b();return _u(t.c.e,o)}function Sc(t,e,o,i,n,r,s,a){e*=r,o*=r,t=t.n,Pe(t),Le(t,2*i/e,2*i/o),Ne(t,-s),Re(t,a[0]-n[0],a[1]-n[1]),Le(t,(a[2]-a[0])/2,(a[3]-a[1])/2),Re(t,1,1)}function Tc(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}function Mc(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}function Cc(t,e){this.c=t.getUniformLocation(e,"e"),this.d=t.getUniformLocation(e,"d"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function Ec(t,e){vc.call(this,t,e),this.J=Tc.Ia(),this.X=Mc.Ia(),this.d=null,this.H=new $u([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]),this.p=this.g=null,this.i=-1,this.L=[0,0]}function Pc(t,e){vc.call(this,t,e),this.i=!1,this.L=-1,this.J=NaN,this.p=He(),this.g=this.d=this.H=null}function kc(t,e){ys.call(this,0,e),this.b=gi("CANVAS"),this.b.style.width="100%",this.b.style.height="100%",this.b.className="ol-unselectable",bi(t,this.b,0),this.p=this.H=0,this.J=mr(),this.l=!0,this.e=xr(this.b,{antialias:!0,depth:!1,Ei:!0,preserveDrawingBuffer:!1,stencil:!0}),this.d=new Xu(this.b,this.e),Ht(this.b,"webglcontextlost",this.Pl,!1,this),Ht(this.b,"webglcontextrestored",this.Ql,!1,this),this.a=new Qi,this.n=null,this.q=new bs(d(function(t){var e=t[1];t=t[2];var o=e[0]-this.n[0],e=e[1]-this.n[1];return 65536*Math.log(t)+Math.sqrt(o*o+e*e)/t},this),function(t){return t[0].gb()}),this.L=d(function(){if(!this.q.la()){Ms(this.q);var t=ws(this.q);Ac(this,t[0],t[3],t[4])}},this),this.i=0,Lc(this)}function Ac(t,e,o,i){var n=t.e,r=e.gb();if(tn(t.a,r))t=t.a.get(r),n.bindTexture(3553,t.Qa),9729!=t.lg&&(n.texParameteri(3553,10240,9729),t.lg=9729),9729!=t.mg&&(n.texParameteri(3553,10240,9729),t.mg=9729);else{var s=n.createTexture();if(n.bindTexture(3553,s),0<i){var a=t.J.canvas,p=t.J;t.H!==o[0]||t.p!==o[1]?(a.width=o[0],a.height=o[1],t.H=o[0],t.p=o[1]):p.clearRect(0,0,o[0],o[1]),p.drawImage(e.Ma(),i,i,o[0],o[1],0,0,o[0],o[1]),n.texImage2D(3553,0,6408,6408,5121,a)}else n.texImage2D(3553,0,6408,6408,5121,e.Ma());n.texParameteri(3553,10240,9729),n.texParameteri(3553,10241,9729),n.texParameteri(3553,10242,33071),n.texParameteri(3553,10243,33071),t.a.set(r,{Qa:s,lg:9729,mg:9729})}}function Rc(e,o,i){var n=e.g;if(ee(n,o)){var r=e.d,s=i.extent,a=i.size,p=i.viewState,l=p.resolution,h=p.center,u=p.rotation,p=new hc(r,h,l,u,a,s),s=new rc(.5*l/i.pixelRatio,s);if(n.dispatchEvent(new qa(o,n,p,s,i,null,r)),ac(s,r),!s.la()){var c=Zw;o=c.opacity,i=c.brightness;var f,y,d,n=c.contrast,g=c.hue,c=c.saturation,v={};for(f=0,y=cw.length;f<y;++f)d=s.a[cw[f]],t(d)&&ic(d,r,h,l,u,a,o,i,n,g,c,v,void 0,!1)}for(sc(s,r)(),r=k(Y(p.b),Number),U(r),a=0,l=r.length;a<l;++a)for(h=p.b[r[a].toString()],u=0,o=h.length;u<o;++u)h[u](p);e.c=s}}function Lc(t){t=t.e,t.activeTexture(33984),t.blendFuncSeparate(770,771,1,771),t.disable(2884),t.disable(2929),t.disable(3089),t.disable(2960)}function Nc(e){re.call(this);var o=jc(e);this.wb=!!t(e.loadTilesWhileAnimating)&&e.loadTilesWhileAnimating,this.xb=!!t(e.loadTilesWhileInteracting)&&e.loadTilesWhileInteracting,this.Nc=t(e.pixelRatio)?e.pixelRatio:Eb,this.sc=o.logos,this.o=new Xn(this.Qn,(void 0),this),Mt(this,this.o),this.Ra=Te(),this.Ee=Te(),this.vb=0,this.c=null,this.oa=He(),this.g=this.J=null,this.a=yi("DIV","ol-viewport"),this.a.style.position="relative",this.a.style.overflow="hidden",this.a.style.width="100%",this.a.style.height="100%",this.a.style.msTouchAction="none",Lb&&(this.a.className="ol-touch"),this.X=yi("DIV","ol-overlaycontainer"),this.a.appendChild(this.X),this.p=yi("DIV","ol-overlaycontainer-stopevent"),Ht(this.p,["click","dblclick","mousedown","touchstart","MSPointerDown",Jb,Em?"DOMMouseScroll":"mousewheel"],Pt),this.a.appendChild(this.p),e=new Xr(this),Ht(e,V(ew),this.eg,!1,this),Mt(this,e),this.T=o.keyboardEventTarget,this.n=new pr,Ht(this.n,"key",this.dg,!1,this),Mt(this,this.n),e=new cr(this.a),Ht(e,"mousewheel",this.dg,!1,this),Mt(this,e),this.e=o.controls,this.d=o.interactions,this.f=o.overlays,
+this.i=new o.Sn(this.a,this),Mt(this,this.i),this.Ga=new ir,Mt(this,this.Ga),this.L=this.l=null,this.H=[],this.ba=[],this.Fa=new Cs(d(this.zj,this),d(this.bl,this)),this.N={},Ht(this,se("layergroup"),this.Qj,!1,this),Ht(this,se("view"),this.mk,!1,this),Ht(this,se("size"),this.jk,!1,this),Ht(this,se("target"),this.lk,!1,this),this.t(o.values),this.e.forEach(function(t){t.setMap(this)},this),Ht(this.e,"add",function(t){t.element.setMap(this)},!1,this),Ht(this.e,"remove",function(t){t.element.setMap(null)},!1,this),this.d.forEach(function(t){t.setMap(this)},this),Ht(this.d,"add",function(t){t.element.setMap(this)},!1,this),Ht(this.d,"remove",function(t){t.element.setMap(null)},!1,this),this.f.forEach(function(t){t.setMap(this)},this),Ht(this.f,"add",function(t){t.element.setMap(this)},!1,this),Ht(this.f,"remove",function(t){t.element.setMap(null)},!1,this)}function jc(e){var o=null;t(e.keyboardEventTarget)&&(o=p(e.keyboardEventTarget)?document.getElementById(e.keyboardEventTarget):e.keyboardEventTarget);var i={},n={};if(!t(e.logo)||"boolean"==typeof e.logo&&e.logo)n["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]="http://openlayers.org/";else{var r=e.logo;p(r)?n[r]="":u(r)&&(n[r.src]=r.href)}r=e.layers instanceof Mp?e.layers:new Mp({layers:e.layers}),i.layergroup=r,i.target=e.target,i.view=t(e.view)?e.view:new Ao;var a,r=ys;t(e.renderer)?s(e.renderer)?a=e.renderer:p(e.renderer)&&(a=[e.renderer]):a=_w;var l,h;for(l=0,h=a.length;l<h;++l){var c=a[l];if("canvas"==c){if(kb){r=Mu;break}}else{if("dom"==c){r=Nu;break}if("webgl"==c&&xb){r=kc;break}}}var f;f=t(e.controls)?s(e.controls)?new ei(e.controls.slice()):e.controls:Fn();var y;return y=t(e.interactions)?s(e.interactions)?new ei(e.interactions.slice()):e.interactions:Tp(),e=t(e.overlays)?s(e.overlays)?new ei(e.overlays.slice()):e.overlays:new ei,{controls:f,interactions:y,keyboardEventTarget:o,logos:n,overlays:e,Sn:r,values:i}}function Ic(e){re.call(this),this.g=!t(e.insertFirst)||e.insertFirst,this.i=!t(e.stopEvent)||e.stopEvent,this.Z=yi("DIV",{"class":"ol-overlay-container"}),this.Z.style.position="absolute",this.f=!!t(e.autoPan)&&e.autoPan,this.d=t(e.autoPanAnimation)?e.autoPanAnimation:{},this.e=t(e.autoPanMargin)?e.autoPanMargin:20,this.a={ud:"",Xd:"",ve:"",we:"",visible:!0},this.c=null,Ht(this,se("element"),this.Kj,!1,this),Ht(this,se("map"),this.Yj,!1,this),Ht(this,se("offset"),this.ck,!1,this),Ht(this,se("position"),this.ek,!1,this),Ht(this,se("positioning"),this.fk,!1,this),t(e.element)&&this.wh(e.element),this.Bh(t(e.offset)?e.offset:[0,0]),this.Ch(t(e.positioning)?e.positioning:"top-left"),t(e.position)&&this.uf(e.position)}function Dc(t,e){var o=Mi(t);Bi(t,"position");var i,n=new pi(0,0);return i=o?Mi(o):document,i=!Cm||Cm&&9<=Im||Pi(hi(i))?i.documentElement:i.body,t!=i&&(i=Gi(t),o=ki(hi(o)),n.x=i.left+o.x,n.y=i.top+o.y),[n.x,n.y,n.x+e[0],n.y+e[1]]}function Fc(e){var o=e.ae(),i=e.wg();if(t(o)&&null!==o.c&&t(i)){var i=o.ta(i),n=o.xa(),o=e.Z.style,r=e.Yf(),s=e.ag(),a=r[0],r=r[1];"bottom-right"==s||"center-right"==s||"top-right"==s?(""!==e.a.Xd&&(e.a.Xd=o.left=""),a=Math.round(n[0]-i[0]-a)+"px",e.a.ve!=a&&(e.a.ve=o.right=a)):(""!==e.a.ve&&(e.a.ve=o.right=""),"bottom-center"!=s&&"center-center"!=s&&"top-center"!=s||(a-=$i(e.Z).width/2),a=Math.round(i[0]+a)+"px",e.a.Xd!=a&&(e.a.Xd=o.left=a)),"bottom-left"==s||"bottom-center"==s||"bottom-right"==s?(""!==e.a.we&&(e.a.we=o.top=""),i=Math.round(n[1]-i[1]-r)+"px",e.a.ud!=i&&(e.a.ud=o.bottom=i)):(""!==e.a.ud&&(e.a.ud=o.bottom=""),"center-left"!=s&&"center-center"!=s&&"center-right"!=s||(r-=$i(e.Z).height/2),i=Math.round(i[1]+r)+"px",e.a.we!=i&&(e.a.we=o.top=i)),e.a.visible||(Wi(e.Z,!0),e.a.visible=!0)}else e.a.visible&&(Wi(e.Z,!1),e.a.visible=!1)}function Oc(e){e=t(e)?e:{},this.f=!t(e.collapsed)||e.collapsed,this.g=!t(e.collapsible)||e.collapsible,this.g||(this.f=!1);var o=t(e.className)?e.className:"ol-overviewmap",i=t(e.tipLabel)?e.tipLabel:"Overview map",n=t(e.collapseLabel)?e.collapseLabel:"«";this.o=p(n)?yi("SPAN",{},n):n,n=t(e.label)?e.label:"»",this.n=p(n)?yi("SPAN",{},n):n,i=yi("BUTTON",{type:"button",title:i},this.g&&!this.f?this.o:this.n),Ht(i,"click",this.ml,!1,this),Ht(i,["mouseout",Hm],function(){this.blur()},!1);var n=yi("DIV","ol-overviewmap-map"),r=this.d=new Nc({controls:new ei,interactions:new ei,target:n});t(e.layers)&&e.layers.forEach(function(t){r.Jf(t)},this);var s=yi("DIV","ol-overviewmap-box");this.i=new Ic({position:[0,0],positioning:"bottom-left",element:s}),this.d.Kf(this.i),o=yi("DIV",o+" ol-unselectable ol-control"+(this.f&&this.g?" ol-collapsed":"")+(this.g?"":" ol-uncollapsible"),n,i),Ji.call(this,{element:o,render:t(e.render)?e.render:Bc,target:e.target})}function Bc(){var t=this.a,e=this.d;if(null!==t.c&&null!==e.c){var o=t.xa(),t=t.R().Pc(o),i=e.xa(),o=e.R().Pc(i),n=e.ta(oo(t)),e=e.ta(Ze(t)),e=new li(Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1])),n=i[0],i=i[1];e.width<.1*n||e.height<.1*i||e.width>.75*n||e.height>.75*i?Uc(this):Be(o,t)||(t=this.d,o=this.a.R(),t.R().Na(o.Ca()))}Gc(this)}function Uc(t){var e=t.a;t=t.d;var o=e.xa(),e=e.R().Pc(o),o=t.xa();t=t.R();var i=Math.log(7.5)/Math.LN2;ao(e,1/(.1*Math.pow(2,i/2))),t.Me(e,o)}function Gc(e){var o=e.a,i=e.d;if(null!==o.c&&null!==i.c){var n=o.xa(),r=o.R(),s=i.R();i.xa();var a,o=r.Da(),p=e.i,i=e.i.$d(),r=r.Pc(n),n=s.ya(),s=Ye(r),r=io(r);e=e.a.R().Ca(),t(e)&&(a=[s[0]-e[0],s[1]-e[1]],ge(a,o),ue(a,e)),p.uf(a),null!=i&&(a=new li(Math.abs((s[0]-r[0])/n),Math.abs((r[1]-s[1])/n)),o=Pi(hi(Mi(i))),!Cm||pt("10")||o&&pt("8")?(i=i.style,Em?i.MozBoxSizing="border-box":Pm?i.WebkitBoxSizing="border-box":i.boxSizing="border-box",i.width=Math.max(a.width,0)+"px",i.height=Math.max(a.height,0)+"px"):(e=i.style,o?(o=Vi(i,"padding"),i=Zi(i),e.pixelWidth=a.width-i.left-o.left-o.right-i.right,e.pixelHeight=a.height-i.top-o.top-o.bottom-i.bottom):(e.pixelWidth=a.width,e.pixelHeight=a.height)))}}function Hc(t){ji(t.element,"ol-collapsed"),t.f?xi(t.o,t.n):xi(t.n,t.o),t.f=!t.f;var e=t.d;t.f||null!==e.c||(e.Kc(),Uc(t),Xt(e,"postrender",function(){Gc(this)},!1,t))}function qc(e){e=t(e)?e:{};var o=t(e.className)?e.className:"ol-scale-line";this.g=yi("DIV",o+"-inner"),this.Z=yi("DIV",o+" ol-unselectable",this.g),this.o=null,this.i=t(e.minWidth)?e.minWidth:64,this.d=!1,this.H=void 0,this.n="",this.f=null,Ji.call(this,{element:this.Z,render:t(e.render)?e.render:$c,target:e.target}),Ht(this,se("units"),this.N,!1,this),this.J(e.units||"metric")}function $c(t){t=t.frameState,null===t?this.o=null:this.o=t.viewState,Xc(this)}function Xc(t){var e=t.o;if(null===e)t.d&&(Wi(t.Z,!1),t.d=!1);else{var o=e.center,i=e.projection,e=i.getPointResolution(e.resolution,o),n=i.a,r=t.p();for("degrees"!=n||"metric"!=r&&"imperial"!=r&&"us"!=r&&"nautical"!=r?"degrees"!=n&&"degrees"==r?(null===t.f&&(t.f=Mo(i,xo("EPSG:4326"))),o=Math.cos(ct(t.f(o)[1])),i=_m.radius,i/=Jm[n],e*=180/(Math.PI*o*i)):t.f=null:(t.f=null,o=Math.cos(ct(o[1])),e*=Math.PI*o*_m.radius/180),o=t.i*e,n="","degrees"==r?o<1/60?(n="″",e*=3600):1>o?(n="′",e*=60):n="°":"imperial"==r?.9144>o?(n="in",e/=.0254):1609.344>o?(n="ft",e/=.3048):(n="mi",e/=1609.344):"nautical"==r?(e/=1852,n="nm"):"metric"==r?1>o?(n="mm",e*=1e3):1e3>o?n="m":(n="km",e/=1e3):"us"==r&&(.9144>o?(n="in",e*=39.37):1609.344>o?(n="ft",e/=.30480061):(n="mi",e/=1609.3472)),o=3*Math.floor(Math.log(t.i*e)/Math.log(10));;){if(i=Jw[o%3]*Math.pow(10,Math.floor(o/3)),r=Math.round(i/e),isNaN(r))return Wi(t.Z,!1),void(t.d=!1);if(r>=t.i)break;++o}e=i+" "+n,t.n!=e&&(t.g.innerHTML=e,t.n=e),t.H!=r&&(t.g.style.width=r+"px",t.H=r),t.d||(Wi(t.Z,!0),t.d=!0)}}function Wc(t){Tt.call(this),this.a=t,this.b={}}function zc(t){W(t.b,zt),t.b={}}function Kc(t,e,o){Qt.call(this),this.target=t,this.handle=e||t,this.b=o||new Di(NaN,NaN,NaN,NaN),this.c=Mi(t),this.a=new Wc(this),Mt(this,this.a),Ht(this.handle,["touchstart","mousedown"],this.cg,!1,this)}function Vc(t){var e=t.type;"touchstart"==e||"touchmove"==e?Lt(t,t.b.targetTouches[0],t.c):"touchend"!=e&&"touchcancel"!=e||Lt(t,t.b.changedTouches[0],t.c)}function Yc(t,e,o){var i=ki(hi(t.c));return e+=i.x-t.d.x,o+=i.y-t.d.y,t.d=i,t.yc+=e,t.zc+=o,e=_c(t,t.yc),t=Jc(t,t.zc),new pi(e,t)}function Zc(t,e,o,i){t.target.style.left=o+"px",t.target.style.top=i+"px",t.dispatchEvent(new Qc("drag",t,e.clientX,e.clientY,0,o,i))}function _c(t,e){var o=t.b,i=isNaN(o.left)?null:o.left,o=isNaN(o.width)?0:o.width;return Math.min(null!=i?i+o:1/0,Math.max(null!=i?i:-(1/0),e))}function Jc(t,e){var o=t.b,i=isNaN(o.top)?null:o.top,o=isNaN(o.height)?0:o.height;return Math.min(null!=i?i+o:1/0,Math.max(null!=i?i:-(1/0),e))}function Qc(e,o,i,n,r,s,a){Et.call(this,e),this.clientX=i,this.clientY=n,this.left=t(s)?s:o.yc,this.top=t(a)?a:o.zc}function tf(e){e=t(e)?e:{},this.f=void 0,this.g=ex,this.i=null,this.n=!1,this.o=t(e.duration)?e.duration:200;var o=t(e.className)?e.className:"ol-zoomslider",i=yi("DIV",[o+"-thumb","ol-unselectable"]),o=yi("DIV",[o,"ol-unselectable","ol-control"],i);this.d=new Kc(i),Mt(this,this.d),Ht(this.d,"start",this.Jj,!1,this),Ht(this.d,"drag",this.Hj,!1,this),Ht(this.d,"end",this.Ij,!1,this),Ht(o,"click",this.Gj,!1,this),Ht(i,"click",Pt),Ji.call(this,{element:o,render:t(e.render)?e.render:ef})}function ef(t){if(null!==t.frameState){if(!this.n){var e=this.element,o=$i(e),i=Si(e),e=Vi(i,"margin"),n=new li(i.offsetWidth,i.offsetHeight),i=n.width+e.right+e.left,e=n.height+e.top+e.bottom;this.i=[i,e],i=o.width-i,e=o.height-e,o.width>o.height?(this.g=1,o=new Di(0,0,i,0)):(this.g=ex,o=new Di(0,0,0,e)),this.d.b=o||new Di(NaN,NaN,NaN,NaN),this.n=!0}t=t.frameState.viewState.resolution,t!==this.f&&(this.f=t,t=1-No(this.a.R())(t),o=this.d,e=Si(this.element),1==this.g?Ui(e,o.b.left+o.b.width*t):Ui(e,o.b.left,o.b.top+o.b.height*t))}}function of(t,e,o){var i=t.d.b;return lt(1===t.g?(e-i.left)/i.width:(o-i.top)/i.height,0,1)}function nf(t,e){return Lo(t.a.R())(1-e)}function rf(e){e=t(e)?e:{},this.d=t(e.extent)?e.extent:null;var o=t(e.className)?e.className:"ol-zoom-extent",i=yi("BUTTON",{type:"button",title:t(e.tipLabel)?e.tipLabel:"Fit to extent"},t(e.label)?e.label:"E");Ht(i,"click",this.f,!1,this),Ht(i,["mouseout",Hm],function(){this.blur()},!1),o=yi("DIV",o+" ol-unselectable ol-control",i),Ji.call(this,{element:o,target:e.target})}function sf(e){re.call(this),e=t(e)?e:{},this.a=null,Ht(this,se("tracking"),this.Jk,!1,this),this.bf(!!t(e.tracking)&&e.tracking)}function af(e){re.call(this),this.$=void 0,this.a="geometry",this.e=null,this.c=void 0,this.d=null,Ht(this,se(this.a),this.Pd,!1,this),t(e)&&(e instanceof Qs||null===e?this.La(e):this.t(e))}function pf(e){e=t(e)?e:{},this.g=this.e=this.d=this.a=this.c=this.b=null,this.f=void 0,this.rg(t(e.style)?e.style:rp),t(e.features)?s(e.features)?this.ld(new ei(e.features.slice())):this.ld(e.features):this.ld(new ei),t(e.map)&&this.setMap(e.map)}function lf(t){null===t.d||t.d.render()}function hf(){this.defaultDataProjection=null}function uf(e,o,i){var n;return t(i)&&(n={dataProjection:t(i.dataProjection)?i.dataProjection:e.za(o),featureProjection:i.featureProjection}),cf(e,n)}function cf(e,o){var i;return t(o)&&(i={featureProjection:o.featureProjection,dataProjection:null!=o.dataProjection?o.dataProjection:e.defaultDataProjection,rightHanded:o.rightHanded}),i}function ff(e,o,i){var n=t(i)?xo(i.featureProjection):null;return i=t(i)?xo(i.dataProjection):null,null===n||null===i||So(n,i)?e:e instanceof Qs?(o?e.clone():e).transform(o?n:i,o?i:n):ko(o?e.slice():e,o?n:i,o?i:n)}function yf(){this.defaultDataProjection=null}function df(e){return u(e)?e:p(e)?(e=Ew(e),t(e)?e:null):null}function gf(e){e=t(e)?e:{},this.defaultDataProjection=null,this.b=e.geometryName}function vf(t,e){if(null===t)return null;var o;if(l(t.x)&&l(t.y))o="Point";else if(null!=t.points)o="MultiPoint";else if(null!=t.paths)o=1===t.paths.length?"LineString":"MultiLineString";else if(null!=t.rings){var i=t.rings,n=mf(t),r=[];o=[];var s,a;for(s=0,a=i.length;s<a;++s){var p=$(i[s]);Na(p,0,p.length,n.length)?r.push([i[s]]):o.push(i[s])}for(;o.length;){for(i=o.shift(),n=!1,s=r.length-1;0<=s;s--)if(Be(new xa(r[s][0]).G(),new xa(i).G())){r[s].push(i),n=!0;break}n||r.push([i.reverse()])}t=nt(t),1===r.length?(o="Polygon",t.rings=r[0]):(o="MultiPolygon",t.rings=r)}return ff((0,ox[o])(t),!1,e)}function mf(t){var e="XY";return!0===t.hasZ&&!0===t.hasM?e="XYZM":!0===t.hasZ?e="XYZ":!0===t.hasM&&(e="XYM"),e}function bf(t){return t=t.a,{hasZ:"XYZ"===t||"XYZM"===t,hasM:"XYM"===t||"XYZM"===t}}function wf(t,e){return(0,ix[t.M()])(ff(t,!0,e),e)}function xf(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo(null!=e.defaultDataProjection?e.defaultDataProjection:"EPSG:4326"),this.b=e.geometryName}function Sf(t,e){return null===t?null:ff((0,nx[t.type])(t),!1,e)}function Tf(t,e){return(0,rx[t.M()])(ff(t,!0,e),e)}function Mf(){this.defaultDataProjection=null}function Cf(t,e,o){return t=Ef(t,e,o),0<t.length?t[0]:null}function Ef(t,e,o){var i=[];for(e=e.firstChild;null!==e;e=e.nextSibling)1==e.nodeType&&F(i,t.Ob(e,o));return i}function Pf(e){e=t(e)?e:{},this.featureType=e.featureType,this.featureNS=e.featureNS,this.srsName=e.srsName,this.schemaLocation="",this.b={},this.b["http://www.opengis.net/gml"]={featureMember:Wh(Pf.prototype.jd),featureMembers:Wh(Pf.prototype.jd)},this.defaultDataProjection=null}function kf(t){return t=kh(t,!1),Af(t)}function Af(e){if(e=/^\s*(true|1)|(false|0)\s*$/.exec(e))return t(e[1])||!1}function Rf(e){if(e=kh(e,!1),e=/^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?))\s*$/.exec(e)){var o=Date.UTC(parseInt(e[1],10),parseInt(e[2],10)-1,parseInt(e[3],10),parseInt(e[4],10),parseInt(e[5],10),parseInt(e[6],10))/1e3;if("Z"!=e[7]){var i="-"==e[8]?-1:1,o=o+60*i*parseInt(e[9],10);t(e[10])&&(o+=3600*i*parseInt(e[10],10))}return o}}function Lf(t){return t=kh(t,!1),Nf(t)}function Nf(t){if(t=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(t))return parseFloat(t[1])}function jf(t){return t=kh(t,!1),If(t)}function If(t){if(t=/^\s*(\d+)\s*$/.exec(t))return parseInt(t[1],10)}function Df(t){return t=kh(t,!1),cm(t)}function Ff(t,e){Uf(t,e?"1":"0")}function Of(t,e){t.appendChild(Bw.createTextNode(e.toPrecision()))}function Bf(t,e){t.appendChild(Bw.createTextNode(e.toString()))}function Uf(t,e){t.appendChild(Bw.createTextNode(e))}function Gf(e){e=t(e)?e:{},Pf.call(this,e),this.i=!!t(e.surface)&&e.surface,this.e=!!t(e.curve)&&e.curve,this.f=!t(e.multiCurve)||e.multiCurve,this.g=!t(e.multiSurface)||e.multiSurface,this.schemaLocation=t(e.schemaLocation)?e.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"}function Hf(t,e,o){o=o[o.length-1].srsName,e=e.K();for(var i,n=e.length,r=Array(n),s=0;s<n;++s){i=e[s];var a=s,p="enu";null!=o&&(p=uo(xo(o))),r[a]="en"===p.substr(0,2)?i[0]+" "+i[1]:i[1]+" "+i[0]}Uf(t,r.join(" "))}function qf(e){e=t(e)?e:{},Pf.call(this,e),this.b["http://www.opengis.net/gml"].featureMember=Xh(Pf.prototype.jd),this.schemaLocation=t(e.schemaLocation)?e.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"}function $f(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326"),this.b=e.readExtensions}function Xf(t,e,o){return t.push(parseFloat(e.getAttribute("lon")),parseFloat(e.getAttribute("lat"))),"ele"in o?(t.push(o.ele),et(o,"ele")):t.push(0),"time"in o?(t.push(o.time),et(o,"time")):t.push(0),t}function Wf(t,e){var o=e[e.length-1],i=t.getAttribute("href");null===i||(o.link=i),tu(gx,t,e)}function zf(t,e){e[e.length-1].extensionsNode_=t}function Kf(e,o){var i=o[0],n=eu({flatCoordinates:[]},vx,e,o);if(t(n)){var r=n.flatCoordinates;et(n,"flatCoordinates");var s=new ml(null);return wl(s,"XYZM",r),ff(s,!1,i),i=new af(s),i.t(n),i}}function Vf(e,o){var i=o[0],n=eu({flatCoordinates:[],ends:[]},bx,e,o);if(t(n)){var r=n.flatCoordinates;et(n,"flatCoordinates");var s=n.ends;et(n,"ends");var a=new xl(null);return Tl(a,"XYZM",r,s),ff(a,!1,i),i=new af(a),i.t(n),i}}function Yf(e,o){var i=o[0],n=eu({},Sx,e,o);if(t(n)){var r=Xf([],e,n),r=new Ta(r,"XYZM");return ff(r,!1,i),i=new af(r),i.t(n),i}}function Zf(e,o){null===o&&(o=[]);for(var i=0,n=o.length;i<n;++i){var r=o[i];if(t(e.b)){var s=r.get("extensionsNode_")||null;e.b(r,s)}r.set("extensionsNode_",void 0)}}function _f(t,e,o){t.setAttribute("href",e),e=o[o.length-1].properties,iu({P:t},Mx,zw,[e.linkText,e.linkType],o,Tx)}function Jf(t,e,o){var i=o[o.length-1],n=i.P.namespaceURI,r=i.properties;switch(Ww(t,null,"lat",e[1]),Ww(t,null,"lon",e[0]),i.geometryLayout){case"XYZM":0!==e[3]&&(r.time=e[3]);case"XYZ":0!==e[2]&&(r.ele=e[2]);break;case"XYM":0!==e[2]&&(r.time=e[2])}e=Lx[n],i=Jh(r,e),iu({P:t,properties:r},Nx,zw,i,o,e)}function Qf(e,o){var i=e.Q();if(t(i))return Uw(o[o.length-1].P.namespaceURI,jx[i.M()])}function ty(t){return t=oy(t),k(t,function(t){return t.c.substring(t.a,t.b)})}function ey(t,e,o){this.c=t,this.a=e,this.b=o}function oy(t){for(var e,o=RegExp("\r\n|\r|\n","g"),i=0,n=[];e=o.exec(t);)i=new ey(t,i,e.index),n.push(i),i=o.lastIndex;return i<t.length&&(i=new ey(t,i,t.length),n.push(i)),n}function iy(){this.defaultDataProjection=null}function ny(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326"),this.b=t(e.altitudeMode)?e.altitudeMode:"none"}function ry(e,o){var i;e instanceof ry?(this.Yb=t(o)?o:e.Yb,sy(this,e.Pb),this.pc=e.pc,this.ib=e.ib,ay(this,e.Ec),this.hb=e.hb,py(this,e.b.clone()),this.Sb=e.Sb):e&&(i=ph(String(e)))?(this.Yb=!!o,sy(this,i[1]||"",!0),this.pc=uy(i[2]||""),this.ib=uy(i[3]||"",!0),ay(this,i[4]),this.hb=uy(i[5]||"",!0),py(this,i[6]||"",!0),this.Sb=uy(i[7]||"")):(this.Yb=!!o,this.b=new yy(null,0,this.Yb))}function sy(t,e,o){t.Pb=o?uy(e,!0):e,t.Pb&&(t.Pb=t.Pb.replace(/:$/,""))}function ay(t,e){if(e){if(e=Number(e),isNaN(e)||0>e)throw Error("Bad port number "+e);t.Ec=e}else t.Ec=null}function py(t,e,o){e instanceof yy?(t.b=e,by(t.b,t.Yb)):(o||(e=cy(e,Hx)),t.b=new yy(e,0,t.Yb))}function ly(t){return t instanceof ry?t.clone():new ry(t,(void 0))}function hy(t,e){t instanceof ry||(t=ly(t)),e instanceof ry||(e=ly(e));var o=t,i=e,n=o.clone(),r=!!i.Pb;r?sy(n,i.Pb):r=!!i.pc,r?n.pc=i.pc:r=!!i.ib,r?n.ib=i.ib:r=null!=i.Ec;var s=i.hb;if(r)ay(n,i.Ec);else if(r=!!i.hb)if("/"!=s.charAt(0)&&(o.ib&&!o.hb?s="/"+s:(o=n.hb.lastIndexOf("/"),-1!=o&&(s=n.hb.substr(0,o+1)+s))),o=s,".."==o||"."==o)s="";else if(-1!=o.indexOf("./")||-1!=o.indexOf("/.")){for(var s=0==o.lastIndexOf("/",0),o=o.split("/"),a=[],p=0;p<o.length;){var l=o[p++];"."==l?s&&p==o.length&&a.push(""):".."==l?((1<a.length||1==a.length&&""!=a[0])&&a.pop(),s&&p==o.length&&a.push("")):(a.push(l),s=!0)}s=a.join("/")}else s=o;return r?n.hb=s:r=""!==i.b.toString(),r?py(n,uy(i.b.toString())):r=!!i.Sb,r&&(n.Sb=i.Sb),n}function uy(t,e){return t?e?decodeURI(t):decodeURIComponent(t):""}function cy(t,e,o){return p(t)?(t=encodeURI(t).replace(e,fy),o&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function fy(t){return t=t.charCodeAt(0),"%"+(t>>4&15).toString(16)+(15&t).toString(16)}function yy(t,e,o){this.b=t||null,this.a=!!o}function dy(t){t.ia||(t.ia=new Qn,t.va=0,t.b&&lh(t.b,function(e,o){t.add(decodeURIComponent(e.replace(/\+/g," ")),o)}))}function gy(t,e){return dy(t),e=my(t,e),er(t.ia.a,e)}function vy(t,e,o){t.remove(e),0<o.length&&(t.b=null,t.ia.set(my(t,e),D(o)),t.va+=o.length)}function my(t,e){var o=String(e);return t.a&&(o=o.toLowerCase()),o}function by(t,e){e&&!t.a&&(dy(t),t.b=null,t.ia.forEach(function(t,e){var o=e.toLowerCase();e!=o&&(this.remove(e),vy(this,o,t))},t)),t.a=e}function wy(e){e=t(e)?e:{},this.d=e.font,this.e=e.rotation,this.a=e.scale,this.c=e.text,this.g=e.textAlign,this.i=e.textBaseline,this.b=t(e.fill)?e.fill:null,this.f=t(e.stroke)?e.stroke:null,this.q=t(e.offsetX)?e.offsetX:0,this.l=t(e.offsetY)?e.offsetY:0}function xy(e){function o(t){return s(t)?t:p(t)?(!(t in n)&&"#"+t in n&&(t="#"+t),o(n[t])):i}e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326");var i=t(e.defaultStyle)?e.defaultStyle:Jx,n={};this.c=!t(e.extractStyles)||e.extractStyles,this.b=n,this.d=function(){var e=this.get("Style");return t(e)?e:(e=this.get("styleUrl"),t(e)?o(e):i)}}function Sy(t){if(t=kh(t,!1),t=/^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(t))return t=t[1],[parseInt(t.substr(6,2),16),parseInt(t.substr(4,2),16),parseInt(t.substr(2,2),16),parseInt(t.substr(0,2),16)/255]}function Ty(t){t=kh(t,!1);for(var e,o=[],i=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i;e=i.exec(t);)o.push(parseFloat(e[1]),parseFloat(e[2]),e[3]?parseFloat(e[3]):0),t=t.substr(e[0].length);return""!==t?void 0:o}function My(t){var e=kh(t,!1);return null!=t.baseURI?hy(t.baseURI,cm(e)).toString():cm(e)}function Cy(e){if(e=Lf(e),t(e))return Math.sqrt(e)}function Ey(t,e){return eu(null,iS,t,e)}function Py(e,o){var i=eu({j:[],Kh:[]},rS,e,o);if(t(i)){var n,r,s=i.j,i=i.Kh;for(n=0,r=Math.min(s.length,i.length);n<r;++n)s[4*n+3]=i[n];return i=new ml(null),wl(i,"XYZM",s),i}}function ky(e,o){var i=eu({},oS,e,o),n=eu(null,sS,e,o);if(t(n)){var r=new ml(null);return wl(r,"XYZ",n),r.t(i),r}}function Ay(e,o){var i=eu({},oS,e,o),n=eu(null,sS,e,o);if(t(n)){var r=new Fa(null);return Ua(r,"XYZ",n,[n.length]),r.t(i),r}}function Ry(e,o){var i=eu([],cS,e,o);if(!t(i))return null;if(0===i.length)return new ul(i);var n,r,s,a=!0,p=i[0].M();for(r=1,s=i.length;r<s;++r)if(n=i[r],n.M()!=p){a=!1;break}if(a){if("Point"==p){for(n=i[0],a=n.a,p=n.j,r=1,s=i.length;r<s;++r)n=i[r],F(p,n.j);return n=new Cl(null),ia(n,a,p),n.k(),Iy(n,i),n}return"LineString"==p?(n=new xl(null),Ml(n,i),Iy(n,i),n):"Polygon"==p?(n=new El(null),Rl(n,i),Iy(n,i),n):"GeometryCollection"==p?new ul(i):null}return new ul(i)}function Ly(t,e){var o=eu({},oS,t,e),i=eu(null,sS,t,e);if(null!=i){var n=new Ta(null);return Ma(n,"XYZ",i),n.t(o),n}}function Ny(t,e){var o=eu({},oS,t,e),i=eu([null],nS,t,e);if(null!=i&&null!==i[0]){var n,r,s=new Fa(null),a=i[0],p=[a.length];for(n=1,r=i.length;n<r;++n)F(a,i[n]),p.push(a.length);return Ua(s,"XYZ",a,p),s.t(o),s}}function jy(e,o){var i=eu({},xS,e,o);if(!t(i))return null;var n=ot(i,"fillStyle",zx),r=i.fill;t(r)&&!r&&(n=null);var r=ot(i,"imageStyle",Yx),s=ot(i,"textStyle",_x),a=ot(i,"strokeStyle",Zx),i=i.outline;return t(i)&&!i&&(a=null),[new ip({fill:n,image:r,stroke:a,text:s,zIndex:void 0})]}function Iy(e,o){var i,n,r,s,a=o.length,p=Array(o.length),l=Array(o.length);for(r=s=!1,n=0;n<a;++n)i=o[n],p[n]=i.get("extrude"),l[n]=i.get("altitudeMode"),r=r||t(p[n]),s=s||t(l[n]);r&&e.set("extrude",p),s&&e.set("altitudeMode",l)}function Dy(t,e){tu(eS,t,e)}function Fy(e,o){var i;for(i=o.firstChild;null!==i;i=i.nextSibling)if(1==i.nodeType){var n=Oy(e,i);if(t(n))return n}}function Oy(e,o){var i;for(i=o.firstElementChild;null!==i;i=i.nextElementSibling)if(N(Xx,i.namespaceURI)&&"name"==i.localName)return Df(i);for(i=o.firstElementChild;null!==i;i=i.nextElementSibling){var n=Gw(i);if(N(Xx,i.namespaceURI)&&("Document"==n||"Folder"==n||"Placemark"==n||"kml"==n)&&(n=Oy(e,i),t(n)))return n}}function By(t,e){var o,i=[];for(o=e.firstChild;null!==o;o=o.nextSibling)1==o.nodeType&&F(i,Uy(t,o));return i}function Uy(t,e){var o,i=[];for(o=e.firstElementChild;null!==o;o=o.nextElementSibling)if(N(Xx,o.namespaceURI)&&"NetworkLink"==o.localName){var n=eu({},yS,o,[]);i.push(n)}for(o=e.firstElementChild;null!==o;o=o.nextElementSibling)n=Gw(o),!N(Xx,o.namespaceURI)||"Document"!=n&&"Folder"!=n&&"kml"!=n||F(i,Uy(t,o));return i}function Gy(t,e){var o,i=ii(e),i=[255*(4==i.length?i[3]:1),i[2],i[1],i[0]];for(o=0;4>o;++o){var n=parseInt(i[o],10).toString(16);i[o]=1==n.length?"0"+n:n}Uf(t,i.join(""))}function Hy(t,e,o){iu({P:t},DS,YS,[e],o)}function qy(e,o,i){var n={P:e};null!=o.$&&e.setAttribute("id",o.$),e=o.D();var r=o.c;t(r)&&(r=r.call(o,0),null!==r&&0<r.length&&(e.Style=r[0],r=r[0].a,null===r||(e.name=r.c))),r=OS[i[i.length-1].P.namespaceURI],e=Jh(e,r),iu(n,BS,zw,e,i,r),e=i[0],o=o.Q(),null!=o&&(o=ff(o,!0,e)),iu(n,BS,Vy,[o],i)}function $y(t,e,o){var i=e.j;t={P:t},t.layout=e.a,t.stride=e.s,iu(t,US,WS,[i],o)}function Xy(t,e,o){e=e.Ed();var i=e.shift();t={P:t},iu(t,GS,zS,e,o),iu(t,GS,_S,[i],o)}function Wy(t,e){Of(t,e*e)}function zy(t,e,o){return Uw($x[0],"gx:"+o)}function Ky(t,e){return Uw(e[e.length-1].P.namespaceURI,"Placemark")}function Vy(t,e){if(null!=t)return Uw(e[e.length-1].P.namespaceURI,ES[t.M()])}function Yy(){this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326")}function Zy(t,e){e[e.length-1].od[t.getAttribute("k")]=t.getAttribute("v")}function _y(t){return t.getAttributeNS("http://www.w3.org/1999/xlink","href")}function Jy(){}function Qy(){}function td(e,o,i,n){var r;t(n)?r=t(void 0)?void 0:0:(n=[],r=0);var s,a;for(s=0;s<o;)for(a=e[s++],n[r++]=e[s++],n[r++]=a,a=2;a<i;++a)n[r++]=e[s++];n.length=r}function ed(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326"),this.b=t(e.factor)?e.factor:1e5,this.a=t(e.geometryLayout)?e.geometryLayout:"XY"}function od(e,o,i){i=t(i)?i:1e5;var n,r=Array(o);for(n=0;n<o;++n)r[n]=0;var s,a;for(s=0,a=e.length;s<a;)for(n=0;n<o;++n,++s){var p=e[s],l=p-r[n];r[n]=p,e[s]=l}return nd(e,i)}function id(e,o,i){var n=t(i)?i:1e5,r=Array(o);for(i=0;i<o;++i)r[i]=0;e=rd(e,n);var s,n=0;for(s=e.length;n<s;)for(i=0;i<o;++i,++n)r[i]+=e[n],e[n]=r[i];return e}function nd(e,o){var i,n,r=t(o)?o:1e5;for(i=0,n=e.length;i<n;++i)e[i]=Math.round(e[i]*r);for(r=0,i=e.length;r<i;++r)n=e[r],e[r]=0>n?~(n<<1):n<<1;for(r="",i=0,n=e.length;i<n;++i){for(var s=e[i],a=void 0,p="";32<=s;)a=(32|31&s)+63,p+=String.fromCharCode(a),s>>=5;a=s+63,p+=String.fromCharCode(a),r+=p}return r}function rd(e,o){var i,n,r=t(o)?o:1e5,s=[],a=0,p=0;for(i=0,n=e.length;i<n;++i){var l=e.charCodeAt(i)-63,a=a|(31&l)<<p;32>l?(s.push(a),p=a=0):p+=5}for(a=0,p=s.length;a<p;++a)i=s[a],s[a]=1&i?~(i>>1):i>>1;for(a=0,p=s.length;a<p;++a)s[a]/=r;return s}function sd(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo(null!=e.defaultDataProjection?e.defaultDataProjection:"EPSG:4326")}function ad(t,e){var o,i,n,r,s=[];for(n=0,r=t.length;n<r;++n)o=t[n],0<n&&s.pop(),i=0<=o?e[o]:e[~o].slice().reverse(),s.push.apply(s,i);for(o=0,i=s.length;o<i;++o)s[o]=s[o].slice();return s}function pd(t,e,o,i,n){t=t.geometries;var r,s,a=[];for(r=0,s=t.length;r<s;++r)a[r]=ld(t[r],e,o,i,n);return a}function ld(e,o,i,n,r){var s=e.type,a=vT[s];return o="Point"===s||"MultiPoint"===s?a(e,i,n):a(e,o),i=new af,i.La(ff(o,!1,r)),t(e.id)&&i.Qb(e.id),t(e.properties)&&i.t(e.properties),i}function hd(t,e,o){t[0]=t[0]*e[0]+o[0],t[1]=t[1]*e[1]+o[1]}function ud(e){e=t(e)?e:{},this.e=e.featureType,this.c=e.featureNS,this.b=t(e.gmlFormat)?e.gmlFormat:new Gf,this.d=t(e.schemaLocation)?e.schemaLocation:"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd",this.defaultDataProjection=null}function cd(t,e){for(var o=e.firstChild;null!==o;o=o.nextSibling)if(1==o.nodeType)return fd(t,o)}function fd(t,e){var o={},i=If(e.getAttribute("numberOfFeatures"));return o.numberOfFeatures=i,eu(o,mT,e,[],t.b)}function yd(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return eu({},ST,t,[])}function dd(t,e){var o=Uw("http://www.opengis.net/ogc","Filter"),i=Uw("http://www.opengis.net/ogc","FeatureId");o.appendChild(i),i.setAttribute("fid",e),t.appendChild(o)}function gd(e){e=t(e)?e:{},this.defaultDataProjection=null,this.b=!!t(e.splitCollection)&&e.splitCollection}function vd(t){return t=t.K(),0==t.length?"":t[0]+" "+t[1]}function md(t){t=t.K();for(var e=[],o=0,i=t.length;o<i;++o)e.push(t[o][0]+" "+t[o][1]);return e.join(",")}function bd(t){var e=[];t=t.Ed();for(var o=0,i=t.length;o<i;++o)e.push("("+md(t[o])+")");return e.join(",")}function wd(t){var e=t.M();return t=(0,ET[e])(t),e=e.toUpperCase(),0===t.length?e+" EMPTY":e+"("+t+")"}function xd(t){this.a=t,this.b=-1}function Sd(e,o){var i=!!t(o)&&o;return"0"<=e&&"9">=e||"."==e&&!i}function Td(t){var e=t.a.charAt(++t.b),o={position:t.b,value:e};if("("==e)o.type=2;else if(","==e)o.type=5;else if(")"==e)o.type=3;else if(Sd(e)||"-"==e){o.type=4;var i,e=t.b,n=!1;do"."==i&&(n=!0),i=t.a.charAt(++t.b);while(Sd(i,n));t=parseFloat(t.a.substring(e,t.b--)),o.value=t}else if("a"<=e&&"z">=e||"A"<=e&&"Z">=e){o.type=1,e=t.b;do i=t.a.charAt(++t.b);while("a"<=i&&"z">=i||"A"<=i&&"Z">=i);t=t.a.substring(e,t.b--).toUpperCase(),o.value=t}else{if(" "==e||"\t"==e||"\r"==e||"\n"==e)return Td(t);if(""!==e)throw Error("Unexpected character: "+e);o.type=6}return o}function Md(t){this.a=t}function Cd(e){var o=e.b;if(e.match(1)){var i=o.value;if("GEOMETRYCOLLECTION"==i){t:{if(e.match(2)){o=[];do o.push(Cd(e));while(e.match(5));if(e.match(3)){e=o;break t}}else if(Ad(e)){e=[];break t}throw Error(Rd(e))}return new ul(e)}var n=kT[i],o=PT[i];if(!t(n)||!t(o))throw Error("Invalid geometry type: "+i);return e=n.call(e),new o(e)}throw Error(Rd(e))}function Ed(t){for(var e=[],o=0;2>o;++o){var i=t.b;if(!t.match(4))break;e.push(i.value)}if(2==e.length)return e;throw Error(Rd(t))}function Pd(t){for(var e=[Ed(t)];t.match(5);)e.push(Ed(t));return e}function kd(t){for(var e=[t.kf()];t.match(5);)e.push(t.kf());return e}function Ad(t){var e=1==t.b.type&&"EMPTY"==t.b.value;return e&&(t.b=Td(t.a)),e}function Rd(t){return"Unexpected `"+t.b.value+"` at position "+t.b.position+" in `"+t.a.a+"`"}function Ld(){this.version=void 0}function Nd(t,e){return eu({},WT,t,e)}function jd(t,e){return eu({},HT,t,e)}function Id(e,o){var i=Nd(e,o);if(t(i)){var n=[If(e.getAttribute("width")),If(e.getAttribute("height"))];return i.size=n,i}}function Dd(t,e){return eu([],zT,t,e)}function Fd(){this.c="http://mapserver.gis.umn.edu/mapserver",this.b=new qf,this.defaultDataProjection=null}function Od(e,o,i){o.namespaceURI=e.c;var n=Gw(o),r=[];return 0===o.childNodes.length?r:("msGMLOutput"==n&&E(o.childNodes,function(e){if(1===e.nodeType){var o,n=i[0],s=e.localName,a=RegExp;o="_layer".replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08"),a=new a(o,""),s=s.replace(a,"")+"_feature",n.featureType=s,n.featureNS=this.c,a={},a[s]=Xh(this.b.nf,this.b),n=Vh([n.featureNS,null],a),e.namespaceURI=this.c,e=eu([],n,e,i,this.b),t(e)&&F(r,e)}},e),"FeatureCollection"==n&&(e=eu([],e.b.b,o,[{}],e.b),t(e)&&(r=e)),r)}function Bd(){this.d=new Qy}function Ud(e){var o=Df(e).split(" ");if(t(o)&&2==o.length)return e=+o[0],o=+o[1],isNaN(e)||isNaN(o)?void 0:[e,o]}function Gd(e){re.call(this),e=t(e)?e:{},this.a=null,this.d=Co,this.c=void 0,Ht(this,se("projection"),this.Vk,!1,this),Ht(this,se("tracking"),this.Wk,!1,this),t(e.projection)&&this.ug(xo(e.projection)),t(e.trackingOptions)&&this.Dh(e.trackingOptions),this.Zd(!!t(e.tracking)&&e.tracking)}function Hd(t,e,o){for(var i,n,r,s,a,p=[],l=t(0),h=t(1),u=e(l),c=e(h),f=[h,l],y=[c,u],d=[1,0],g={},v=1e5;0<--v&&0<d.length;)r=d.pop(),
+l=f.pop(),u=y.pop(),h=r.toString(),h in g||(p.push(u[0],u[1]),g[h]=!0),s=d.pop(),h=f.pop(),c=y.pop(),a=(r+s)/2,i=t(a),n=e(i),aa(n[0],n[1],u[0],u[1],c[0],c[1])<o?(p.push(c[0],c[1]),h=s.toString(),g[h]=!0):(d.push(s,a,a,r),y.push(c,n,n,u),f.push(h,i,i,l));return p}function qd(t,e,o,i,n){var r=xo("EPSG:4326");return Hd(function(i){return[t,e+(o-e)*i]},To(r,i),n)}function $d(t,e,o,i,n){var r=xo("EPSG:4326");return Hd(function(i){return[e+(o-e)*i,t]},To(r,i),n)}function Xd(e){e=t(e)?e:{},this.i=this.g=null,this.d=this.c=1/0,this.f=this.e=-(1/0),this.n=t(e.targetSize)?e.targetSize:100,this.U=t(e.maxLines)?e.maxLines:100,this.b=[],this.a=[],this.V=t(e.strokeStyle)?e.strokeStyle:nM,this.o=this.q=void 0,this.l=null,this.setMap(t(e.map)?e.map:null)}function Wd(e,o,i,n,r){var s=r;return o=qd(o,e.e,e.c,e.i,i),s=t(e.b[s])?e.b[s]:new ml(null),wl(s,"XY",o),ro(s.G(),n)&&(e.b[r++]=s),r}function zd(e,o,i,n,r){var s=r;return o=$d(o,e.f,e.d,e.i,i),s=t(e.a[s])?e.a[s]:new ml(null),wl(s,"XY",o),ro(s.G(),n)&&(e.a[r++]=s),r}function Kd(t,e,o,i,n,r,s){_r.call(this,t,e,o,0,i),this.i=n,this.a=new Image,null!==r&&(this.a.crossOrigin=r),this.d={},this.c=null,this.state=0,this.g=s}function Vd(t,e,o,i,n){nn.call(this,t,e),this.g=o,this.a=new Image,null!==i&&(this.a.crossOrigin=i),this.c={},this.e=null,this.i=n}function Yd(t){E(t.e,zt),t.e=null}function Zd(t,e,o){return function(i,n,r){return o(t,e,i,n,r)}}function _d(){}function Jd(t,e){Qt.call(this),this.b=new Wc(this);var o=t;e&&(o=Mi(t)),this.b.Ka(o,"dragenter",this.$m),o!=t&&this.b.Ka(o,"dragover",this.an),this.b.Ka(t,"dragover",this.bn),this.b.Ka(t,"drop",this.cn)}function Qd(t,e){this.e=[],this.U=t,this.o=e||null,this.d=this.b=!1,this.c=void 0,this.q=this.V=this.g=!1,this.f=0,this.a=null,this.i=0}function tg(t,e,o){t.b=!0,t.c=o,t.d=!e,ng(t)}function eg(t){if(t.b){if(!t.q)throw new rg;t.q=!1}}function og(t,e,o,i){t.e.push([e,o,i]),t.b&&ng(t)}function ig(t){return A(t.e,function(t){return h(t[1])})}function ng(e){if(e.f&&e.b&&ig(e)){var o=e.f,i=sM[o];i&&(sm.clearTimeout(i.$),delete sM[o]),e.f=0}e.a&&(e.a.i--,delete e.a);for(var o=e.c,n=i=!1;e.e.length&&!e.g;){var r=e.e.shift(),s=r[0],a=r[1],r=r[2];if(s=e.d?a:s)try{var p=s.call(r||e.o,o);t(p)&&(e.d=e.d&&(p==o||p instanceof Error),e.c=o=p),Hl(o)&&(n=!0,e.g=!0)}catch(l){o=l,e.d=!0,ig(e)||(i=!0)}}e.c=o,n&&(p=d(e.l,e,!0),n=d(e.l,e,!1),o instanceof Qd?(og(o,p,n),o.V=!0):o.then(p,n)),i&&(o=new ag(o),sM[o.$]=o,e.f=o.$)}function rg(){m.call(this)}function sg(){m.call(this)}function ag(t){this.$=sm.setTimeout(d(this.a,this),0),this.b=t}function pg(e,o){t(e.name)?(this.name=e.name,this.code=aM[e.name]):(this.code=e.code,this.name=lg(e.code)),m.call(this,w("%s %s",this.name,o))}function lg(e){var o=J(aM,function(t){return e==t});if(!t(o))throw Error("Invalid code: "+e);return o}function hg(t,e){Et.call(this,t.type,e)}function ug(){Qt.call(this),this.Ya=new FileReader,this.Ya.onloadstart=d(this.b,this),this.Ya.onprogress=d(this.b,this),this.Ya.onload=d(this.b,this),this.Ya.onabort=d(this.b,this),this.Ya.onerror=d(this.b,this),this.Ya.onloadend=d(this.b,this)}function cg(t){var e=new Qd;return t.Ka("loadend",g(function(t,e){var o=e.Ya.result,i=e.getError();null==o||i?(eg(t),tg(t,!1,i)):(eg(t),tg(t,!0,o)),e.Yc()},e,t)),e}function fg(e){e=t(e)?e:{},As.call(this,{handleEvent:lb}),this.f=t(e.formatConstructors)?e.formatConstructors:[],this.o=t(e.projection)?xo(e.projection):null,this.e=null,this.a=void 0}function yg(t,e,o,i,n){Et.call(this,t,e),this.features=i,this.file=o,this.projection=n}function dg(t,e){this.x=t,this.y=e}function gg(e){e=t(e)?e:{},qs.call(this,{handleDownEvent:bg,handleDragEvent:vg,handleUpEvent:mg}),this.i=t(e.condition)?e.condition:Us,this.a=this.f=void 0,this.g=0,this.n=t(e.duration)?e.duration:400}function vg(e){if(Hs(e)){var o=e.map,i=o.xa();e=e.pixel,e=new dg(e[0]-i[0]/2,i[1]/2-e[1]),i=Math.atan2(e.y,e.x),e=Math.sqrt(e.x*e.x+e.y*e.y);var n=o.R(),r=jo(n);o.render(),t(this.f)&&Rs(o,n,r.rotation-(i-this.f)),this.f=i,t(this.a)&&Ns(o,n,r.resolution/e*this.a),t(this.a)&&(this.g=this.a/e),this.a=e}}function mg(t){if(!Hs(t))return!0;t=t.map;var e=t.R();Do(e,-1);var o=jo(e),i=this.g-1,n=o.rotation,n=e.constrainRotation(n,0);return Rs(t,e,n,void 0,void 0),o=o.resolution,n=this.n,o=e.constrainResolution(o,0,i),Ns(t,e,o,void 0,n),this.g=0,!1}function bg(t){return!(!Hs(t)||!this.i(t))&&(Do(t.map.R(),1),this.a=this.f=void 0,!0)}function wg(t,e){Et.call(this,t),this.feature=e}function xg(e){qs.call(this,{handleDownEvent:Mg,handleEvent:Tg,handleUpEvent:Cg}),this.N=null,this.H=!1,this.Ga=t(e.source)?e.source:null,this.oa=t(e.features)?e.features:null,this.gi=t(e.snapTolerance)?e.snapTolerance:12,this.Nc=t(e.minPointsPerRing)?e.minPointsPerRing:3;var o,i=this.L=e.type;"Point"===i||"MultiPoint"===i?o=lM:"LineString"===i||"MultiLineString"===i?o=hM:"Polygon"===i||"MultiPolygon"===i?o=uM:"Circle"===i&&(o=cM),this.a=o,this.f=this.n=this.p=this.g=this.i=null,this.T=new pf({style:t(e.style)?e.style:Sg()}),this.Fa=e.geometryName,this.Ee=t(e.condition)?e.condition:Bs,this.ba=t(e.freehandCondition)?e.freehandCondition:Us,Ht(this,se("active"),this.Ra,!1,this)}function Sg(){var t=sp();return function(e){return t[e.Q().M()]}}function Tg(t){var e=!this.H;return this.H&&t.type===Zb?(Ag(this,t),e=!1):t.type===_b?e=Eg(this,t):t.type===Yb&&(e=!1),Xs.call(this,t)&&e}function Mg(t){return this.Ee(t)?(this.N=t.pixel,!0):!(this.a!==hM&&this.a!==uM||!this.ba(t))&&(this.N=t.pixel,this.H=!0,null===this.i&&kg(this,t),!0)}function Cg(t){this.H=!1;var e=this.N,o=t.pixel,i=e[0]-o[0],e=e[1]-o[1],o=!0;return 4>=i*i+e*e&&(Eg(this,t),null===this.i?kg(this,t):(this.a===lM||this.a===cM)&&null!==this.i||Pg(this,t)?this.X():Ag(this,t),o=!1),o}function Eg(t,e){if(t.a===lM&&null===t.i)kg(t,e);else if(null===t.i){var o=e.coordinate.slice();null===t.p?(t.p=new af(new Ta(o)),Lg(t)):t.p.Q().W(o)}else{var i,n,o=e.coordinate,r=t.g.Q();t.a===lM?(n=r.K(),n[0]=o[0],n[1]=o[1],r.W(n)):(t.a===hM?i=r.K():t.a===uM?i=t.f[0]:t.a===cM&&(i=r.dd()),Pg(t,e)&&(o=t.i.slice()),t.p.Q().W(o),n=i[i.length-1],n[0]=o[0],n[1]=o[1],t.a===hM?r.W(i):t.a===uM?(n=t.n.Q(),n.W(i),r.W(t.f)):t.a===cM&&(n=t.n.Q(),n.W([r.dd(),o]),r.Ag(n.Bg()))),Lg(t)}return!0}function Pg(t,e){var o=!1;if(null!==t.g){var i=t.g.Q(),n=!1,r=[t.i];if(t.a===hM?n=2<i.K().length:t.a===uM&&(n=i.K()[0].length>t.Nc,r=[t.f[0][0],t.f[0][t.f[0].length-2]]),n)for(var i=e.map,n=0,s=r.length;n<s;n++){var a=r[n],p=i.ta(a),l=e.pixel,o=l[0]-p[0],p=l[1]-p[1],l=t.H&&t.ba(e)?1:t.gi;if(o=Math.sqrt(o*o+p*p)<=l){t.i=a;break}}}return o}function kg(e,o){var i=o.coordinate;e.i=i;var n;e.a===lM?n=new Ta(i.slice()):e.a===hM?n=new ml([i.slice(),i.slice()]):e.a===uM?(e.n=new af(new ml([i.slice(),i.slice()])),e.f=[[i.slice(),i.slice()]],n=new Fa(e.f)):e.a===cM&&(n=new ll(i.slice(),0),e.n=new af(new ml([i.slice(),i.slice()]))),e.g=new af,t(e.Fa)&&e.g.Ic(e.Fa),e.g.La(n),Lg(e),e.dispatchEvent(new wg("drawstart",e.g))}function Ag(t,e){var o,i=e.coordinate,n=t.g.Q();t.a===hM?(t.i=i.slice(),o=n.K(),o.push(i.slice()),n.W(o)):t.a===uM&&(t.f[0].push(i.slice()),n.W(t.f)),Lg(t)}function Rg(t){t.i=null;var e=t.g;return null!==e&&(t.g=null,t.p=null,t.n=null,t.T.b.clear()),e}function Lg(t){var e=[];null===t.g||e.push(t.g),null===t.n||e.push(t.n),null===t.p||e.push(t.p),t.T.ld(new ei(e))}function Ng(e){qs.call(this,{handleDownEvent:Dg,handleDragEvent:Fg,handleEvent:Bg,handleUpEvent:Og}),this.X=t(e.deleteCondition)?e.deleteCondition:fn(Bs,Os),this.T=this.f=null,this.L=[0,0],this.a=new au,this.i=t(e.pixelTolerance)?e.pixelTolerance:10,this.N=!1,this.g=null,this.n=new pf({style:t(e.style)?e.style:Hg()}),this.H={Point:this.Bl,LineString:this.Dg,LinearRing:this.Dg,Polygon:this.Cl,MultiPoint:this.zl,MultiLineString:this.yl,MultiPolygon:this.Al,GeometryCollection:this.xl},this.p=e.features,this.p.forEach(this.Cg,this),Ht(this.p,"add",this.vl,!1,this),Ht(this.p,"remove",this.wl,!1,this)}function jg(t,e){var o=t.f;null===o?(o=new af(new Ta(e)),t.f=o,t.n.pg(o)):o.Q().W(e)}function Ig(t,e){return t.index-e.index}function Dg(t){Ug(this,t.pixel,t.map),this.g=[];var e=this.f;if(null!==e){t=[];var e=e.Q().K(),o=je([e]),o=lu(this.a,o),i={};o.sort(Ig);for(var n=0,r=o.length;n<r;++n){var s=o[n],a=s.aa,p=c(s.feature),l=s.depth;l&&(p+="-"+l.join("-")),i[p]||(i[p]=Array(2)),de(a[0],e)&&!i[p][0]?(this.g.push([s,0]),i[p][0]=s):de(a[1],e)&&!i[p][1]?("LineString"!==s.geometry.M()&&"MultiLineString"!==s.geometry.M()||!i[p][0]||0!==i[p][0].index)&&(this.g.push([s,1]),i[p][1]=s):c(a)in this.T&&!i[p][0]&&!i[p][1]&&t.push([s,e])}for(n=t.length-1;0<=n;--n)this.qk.apply(this,t[n])}return null!==this.f}function Fg(t){t=t.coordinate;for(var e=0,o=this.g.length;e<o;++e){for(var i=this.g[e],n=i[0],r=n.depth,s=n.geometry,a=s.K(),p=n.aa,i=i[1];t.length<s.s;)t.push(0);switch(s.M()){case"Point":a=t,p[0]=p[1]=t;break;case"MultiPoint":a[n.index]=t,p[0]=p[1]=t;break;case"LineString":a[n.index+i]=t,p[i]=t;break;case"MultiLineString":a[r[0]][n.index+i]=t,p[i]=t;break;case"Polygon":a[r[0]][n.index+i]=t,p[i]=t;break;case"MultiPolygon":a[r[1]][r[0]][n.index+i]=t,p[i]=t}s.W(a)}jg(this,t)}function Og(){for(var t,e=this.g.length-1;0<=e;--e)t=this.g[e][0],this.a.update(je(t.aa),t);return!1}function Bg(e){var o;if(e.map.R().c.slice()[1]||e.type!=_b||this.o||(this.L=e.pixel,Ug(this,e.pixel,e.map)),null!==this.f&&this.X(e)){this.f.Q(),o=this.g;var i,n,r,s,a,p,l,h,u,f={};for(a=o.length-1;0<=a;--a)if(r=o[a],h=r[0],s=h.geometry,n=s.K(),u=c(h.feature),h.depth&&(u+="-"+h.depth.join("-")),i=l=p=void 0,0===r[1]?(l=h,p=h.index):1==r[1]&&(i=h,p=h.index+1),u in f||(f[u]=[i,l,p]),r=f[u],t(i)&&(r[0]=i),t(l)&&(r[1]=l),t(r[0])&&t(r[1])){switch(i=n,u=!1,l=p-1,s.M()){case"MultiLineString":n[h.depth[0]].splice(p,1),u=!0;break;case"LineString":n.splice(p,1),u=!0;break;case"MultiPolygon":i=i[h.depth[1]];case"Polygon":i=i[h.depth[0]],4<i.length&&(p==i.length-1&&(p=0),i.splice(p,1),u=!0,0===p&&(i.pop(),i.push(i[0]),l=i.length-1))}u&&(this.a.remove(r[0]),this.a.remove(r[1]),s.W(n),n={depth:h.depth,feature:h.feature,geometry:h.geometry,index:l,aa:[r[0].aa[0],r[1].aa[1]]},this.a.ha(je(n.aa),n),Gg(this,s,p,h.depth,-1),this.n.Yd(this.f),this.f=null)}o=!0}return Xs.call(this,e)&&!o}function Ug(t,e,o){function i(t,e){return me(n,t.aa)-me(n,e.aa)}var n=o.ka(e),r=o.ka([e[0]-t.i,e[1]+t.i]),s=o.ka([e[0]+t.i,e[1]-t.i]),r=je([r,s]),r=lu(t.a,r);if(0<r.length){r.sort(i);var s=r[0].aa,a=ce(n,s),p=o.ta(a);if(Math.sqrt(ve(e,p))<=t.i){for(e=o.ta(s[0]),o=o.ta(s[1]),e=ve(p,e),o=ve(p,o),t.N=Math.sqrt(Math.min(e,o))<=t.i,t.N&&(a=e>o?s[1]:s[0]),jg(t,a),o={},o[c(s)]=!0,e=1,p=r.length;e<p&&(a=r[e].aa,de(s[0],a[0])&&de(s[1],a[1])||de(s[0],a[1])&&de(s[1],a[0]));++e)o[c(a)]=!0;return void(t.T=o)}}null!==t.f&&(t.n.Yd(t.f),t.f=null)}function Gg(e,o,i,n,r){hu(e.a,o.G(),function(e){e.geometry===o&&(!t(n)||G(e.depth,n))&&e.index>i&&(e.index+=r)})}function Hg(){var t=sp();return function(){return t.Point}}function qg(t,e,o){Et.call(this,t),this.selected=e,this.deselected=o}function $g(e){As.call(this,{handleEvent:Xg}),e=t(e)?e:{},this.o=t(e.condition)?e.condition:Os,this.g=t(e.addCondition)?e.addCondition:pb,this.H=t(e.removeCondition)?e.removeCondition:pb,this.L=t(e.toggleCondition)?e.toggleCondition:Us,this.i=!!t(e.multi)&&e.multi,this.e=t(e.filter)?e.filter:lb;var o;if(t(e.layers))if(h(e.layers))o=e.layers;else{var i=e.layers;o=function(t){return N(i,t)}}else o=lb;this.f=o,this.a=new pf({style:t(e.style)?e.style:Wg()}),e=this.a.b,Ht(e,"add",this.n,!1,this),Ht(e,"remove",this.J,!1,this)}function Xg(t){if(!this.o(t))return!0;var e=this.g(t),o=this.H(t),i=this.L(t),n=t.map,r=this.a.b,s=[],a=[],p=!1;if(e||o||i){for(n.Ne(t.pixel,function(t,n){-1==C(r.a,t)?(e||i)&&this.e(t,n)&&a.push(t):(o||i)&&s.push(t)},this,this.f),n=s.length-1;0<=n;--n)r.remove(s[n]);r.af(a),(0<a.length||0<s.length)&&(p=!0)}else n.Ne(t.pixel,function(t,e){if(this.e(t,e))return a.push(t),!this.i},this,this.f),0<a.length&&1==r.Ib()&&r.item(0)==a[0]||(p=!0,0!==r.Ib()&&(s=Array.prototype.concat(r.a),r.clear()),r.af(a));return p&&this.dispatchEvent(new qg("select",a,s)),Fs(t)}function Wg(){var t=sp();return F(t.Polygon,t.LineString),F(t.GeometryCollection,t.LineString),function(e){return t[e.Q().M()]}}function zg(e){qs.call(this,{handleEvent:Kg,handleDownEvent:lb,handleUpEvent:Vg}),e=t(e)?e:{},this.i=t(e.source)?e.source:null,this.g=t(e.features)?e.features:null,this.X=[],this.p={},this.H={},this.N={},this.n={},this.L=null,this.f=t(e.pixelTolerance)?e.pixelTolerance:10,this.ba=d(Yg,this),this.a=new au,this.T={Point:this.Il,LineString:this.Gg,LinearRing:this.Gg,Polygon:this.Jl,MultiPoint:this.Gl,MultiLineString:this.Fl,MultiPolygon:this.Hl,GeometryCollection:this.El}}function Kg(t){var e,o,i=t.pixel,n=t.coordinate;e=t.map;var r=e.ka([i[0]-this.f,i[1]+this.f]);o=e.ka([i[0]+this.f,i[1]-this.f]);var r=je([r,o]),s=lu(this.a,r),a=!1,r=!1,p=null;return o=null,0<s.length&&(this.L=n,s.sort(this.ba),s=s[0].aa,p=ce(n,s),o=e.ta(p),Math.sqrt(ve(i,o))<=this.f&&(r=!0,i=e.ta(s[0]),n=e.ta(s[1]),i=ve(o,i),n=ve(o,n),a=Math.sqrt(Math.min(i,n))<=this.f))&&(p=i>n?s[1]:s[0],o=e.ta(p),o=[Math.round(o[0]),Math.round(o[1])]),e=p,r&&(t.coordinate=e.slice(0,2),t.pixel=o),Xs.call(this,t)}function Vg(){var t=V(this.n);return t.length&&(E(t,this.Jh,this),this.n={}),!1}function Yg(t,e){return me(this.L,t.aa)-me(this.L,e.aa)}function Zg(e){e=t(e)?e:{};var o=nt(e);delete o.gradient,delete o.radius,delete o.blur,delete o.shadow,delete o.weight,Np.call(this,o),this.d=null,this.L=t(e.shadow)?e.shadow:250,this.p=void 0,this.l=null,Ht(this,se("gradient"),this.Pj,!1,this),this.yh(t(e.gradient)?e.gradient:fM),this.th(t(e.blur)?e.blur:15),this.Ig(t(e.radius)?e.radius:8),Ht(this,[se("blur"),se("radius")],this.hg,!1,this),this.hg();var i,n=t(e.weight)?e.weight:"weight";i=p(n)?function(t){return t.get(n)}:n,this.e(d(function(e){e=i(e),e=t(e)?lt(e,0,1):1;var o=255*e|0,n=this.l[o];return t(n)||(n=[new ip({image:new us({opacity:e,src:this.p})})],this.l[o]=n),n},this)),this.set("renderOrder",null),Ht(this,"render",this.hk,!1,this)}function _g(t,e){var o=e||{},i=o.document||document,n=gi("SCRIPT"),r={sh:n,oc:void 0},s=new Qd(Qg,r),a=null,p=null!=o.timeout?o.timeout:5e3;return 0<p&&(a=window.setTimeout(function(){tv(n,!0);var e=new ev(dM,"Timeout reached for loading script "+t);eg(s),tg(s,!1,e)},p),r.oc=a),n.onload=n.onreadystatechange=function(){n.readyState&&"loaded"!=n.readyState&&"complete"!=n.readyState||(tv(n,o.Bi||!1,a),eg(s),tg(s,!0,null))},n.onerror=function(){tv(n,!0,a);var e=new ev(yM,"Error while loading script "+t);eg(s),tg(s,!1,e)},ci(n,{type:"text/javascript",charset:"UTF-8",src:t}),Jg(i).appendChild(n),s}function Jg(t){var e=t.getElementsByTagName("HEAD");return e&&0!=e.length?e[0]:t.documentElement}function Qg(){if(this&&this.sh){var t=this.sh;t&&"SCRIPT"==t.tagName&&tv(t,!0,this.oc)}}function tv(t,e,i){null!=i&&sm.clearTimeout(i),t.onload=o,t.onerror=o,t.onreadystatechange=o,e&&window.setTimeout(function(){wi(t)},0)}function ev(t,e){var o="Jsloader error (code #"+t+")";e&&(o+=": "+e),m.call(this,o),this.code=t}function ov(t,e){this.a=new ry(t),this.b=e?e:"callback",this.oc=5e3}function iv(t,e,o){return function(){rv(t,!1),o&&o(e)}}function nv(t,e){return function(o){rv(t,!0),e.apply(void 0,arguments)}}function rv(t,e){sm._callbacks_[t]&&(e?delete sm._callbacks_[t]:sm._callbacks_[t]=o)}function sv(t){var e=/\{z\}/g,o=/\{x\}/g,i=/\{y\}/g,n=/\{-y\}/g;return function(r){return null===r?void 0:t.replace(e,r[0].toString()).replace(o,r[1].toString()).replace(i,r[2].toString()).replace(n,function(){return((1<<r[0])-r[2]-1).toString()})}}function av(t){return pv(k(t,sv))}function pv(t){return 1===t.length?t[0]:function(e,o,i){return null===e?void 0:t[ht((e[1]<<e[0])+e[2],t.length)](e,o,i)}}function lv(){}function hv(t,e){var o=[0,0,0];return function(i,n,r){return null===i?void 0:e(t(i,r,o),n,r)}}function uv(t){var e=[],o=/\{(\d)-(\d)\}/.exec(t)||/\{([a-z])-([a-z])\}/.exec(t);if(o){var i,n=o[2].charCodeAt(0);for(i=o[1].charCodeAt(0);i<=n;++i)e.push(t.replace(o[0],String.fromCharCode(i)))}else e.push(t);return e}function cv(e){En.call(this,{attributions:e.attributions,extent:e.extent,logo:e.logo,opaque:e.opaque,projection:e.projection,state:t(e.state)?e.state:void 0,tileGrid:e.tileGrid,tilePixelRatio:e.tilePixelRatio,wrapX:e.wrapX}),this.tileUrlFunction=t(e.tileUrlFunction)?e.tileUrlFunction:lv,this.crossOrigin=t(e.crossOrigin)?e.crossOrigin:null,this.tileLoadFunction=t(e.tileLoadFunction)?e.tileLoadFunction:fv,this.tileClass=t(e.tileClass)?e.tileClass:Vd}function fv(t,e){t.Ma().src=e}function yv(e){var o,i=t(e.extent)?e.extent:sw;t(e.tileSize)&&(o=he(e.tileSize)),o=Mn(i,e.maxZoom,o),yn.call(this,{minZoom:e.minZoom,origin:Je(i,"top-left"),resolutions:o,tileSize:e.tileSize})}function dv(e){cv.call(this,{crossOrigin:"anonymous",opaque:!0,projection:xo("EPSG:3857"),state:"loading",tileLoadFunction:e.tileLoadFunction,wrapX:!t(e.wrapX)||e.wrapX}),this.g=t(e.culture)?e.culture:"en-us",this.e=t(e.maxZoom)?e.maxZoom:-1;var o=new ry("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+e.imagerySet);new ov(o,"jsonp").send({include:"ImageryProviders",uriScheme:"https",key:e.key},d(this.i,this))}function gv(e){cu.call(this,{attributions:e.attributions,extent:e.extent,logo:e.logo,projection:e.projection}),this.p=void 0,this.T=t(e.distance)?e.distance:20,this.n=[],this.l=e.source,this.l.r("change",gv.prototype.ba,this)}function vv(e){if(t(e.p)){e.n.length=0;for(var o=He(),i=e.T*e.p,n=e.l.Dc(),r={},s=0,a=n.length;s<a;s++){var p=n[s];Z(r,c(p).toString())||(p=p.Q().K(),$e(p,o),De(o,i,o),p=e.l.Se(o),p=P(p,function(t){return t=c(t).toString(),!(t in r)&&(r[t]=!0)}),e.n.push(mv(p)))}}}function mv(t){for(var e=t.length,o=[0,0],i=0;i<e;i++){var n=t[i].Q().K();ue(o,n)}return e=1/e,o[0]*=e,o[1]*=e,o=new af(new Ta(o)),o.set("features",t),o}function bv(e){Dl.call(this,{projection:e.projection,resolutions:e.resolutions}),this.T=t(e.crossOrigin)?e.crossOrigin:null,this.g=t(e.displayDpi)?e.displayDpi:96,this.e=t(e.params)?e.params:{};var o;o=t(e.url)?Zd(e.url,this.e,d(this.Ul,this)):_d,this.J=o,this.a=t(e.imageLoadFunction)?e.imageLoadFunction:Ol,this.X=!t(e.hidpi)||e.hidpi,this.N=t(e.metersPerUnit)?e.metersPerUnit:1,this.n=t(e.ratio)?e.ratio:1,this.ba=!!t(e.useOverlay)&&e.useOverlay,this.c=null,this.p=0}function wv(e){var o,i,n=t(e.attributions)?e.attributions:null,r=e.imageExtent;t(e.imageSize)&&(o=to(r)/e.imageSize[1],i=[o]);var s=t(e.crossOrigin)?e.crossOrigin:null,a=t(e.imageLoadFunction)?e.imageLoadFunction:Ol;Dl.call(this,{attributions:n,logo:e.logo,projection:xo(e.projection),resolutions:i}),this.a=new Kd(r,o,1,n,e.url,s,a),Ht(this.a,"change",this.i,!1,this)}function xv(e){e=t(e)?e:{},Dl.call(this,{attributions:e.attributions,logo:e.logo,projection:e.projection,resolutions:e.resolutions}),this.X=t(e.crossOrigin)?e.crossOrigin:null,this.e=e.url,this.n=t(e.imageLoadFunction)?e.imageLoadFunction:Ol,this.c=e.params,this.g=!0,Tv(this),this.T=e.serverType,this.ba=!t(e.hidpi)||e.hidpi,this.a=null,this.p=[0,0],this.N=0,this.J=t(e.ratio)?e.ratio:1.5}function Sv(e,o,i,n,r,s){if(s[e.g?"CRS":"SRS"]=r.b,"STYLES"in e.c||(s.STYLES=new String("")),1!=n)switch(e.T){case"geoserver":n=90*n+.5|0,s.FORMAT_OPTIONS=t(s.FORMAT_OPTIONS)?s.FORMAT_OPTIONS+(";dpi:"+n):"dpi:"+n;break;case"mapserver":s.MAP_RESOLUTION=90*n;break;case"carmentaserver":case"qgis":s.DPI=90*n}s.WIDTH=i[0],s.HEIGHT=i[1],i=r.d;var a;return a=e.g&&"ne"==i.substr(0,2)?[o[1],o[0],o[3],o[2]]:o,s.BBOX=a.join(","),hh(ch([e.e],s))}function Tv(t){t.g=0<=T(ot(t.c,"VERSION","1.3.0"),"1.3")}function Mv(e){var o=t(e.projection)?e.projection:"EPSG:3857",i=new yv({extent:Cn(o),maxZoom:e.maxZoom,tileSize:e.tileSize});cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,logo:e.logo,projection:o,tileGrid:i,tileLoadFunction:e.tileLoadFunction,tilePixelRatio:e.tilePixelRatio,tileUrlFunction:lv,wrapX:!t(e.wrapX)||e.wrapX}),this.l=i.yb(),t(e.tileUrlFunction)?this.pa(e.tileUrlFunction):t(e.urls)?this.pa(av(e.urls)):t(e.url)&&this.e(e.url)}function Cv(e){e=t(e)?e:{};var o;o=t(e.attributions)?e.attributions:[bM],Mv.call(this,{attributions:o,crossOrigin:t(e.crossOrigin)?e.crossOrigin:"anonymous",opaque:!0,maxZoom:t(e.maxZoom)?e.maxZoom:19,tileLoadFunction:e.tileLoadFunction,url:t(e.url)?e.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:e.wrapX})}function Ev(e){e=t(e)?e:{};var o=xM[e.layer];this.g=e.layer,Mv.call(this,{attributions:o.attributions,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:o.maxZoom,opaque:!0,tileLoadFunction:e.tileLoadFunction,url:t(e.url)?e.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.g+"/{z}/{x}/{y}.jpg"})}function Pv(e){var o=e.layer.indexOf("-"),i=SM[e.layer];Mv.call(this,{attributions:MM,crossOrigin:"anonymous",maxZoom:TM[-1==o?e.layer:e.layer.slice(0,o)].maxZoom,opaque:i.opaque,tileLoadFunction:e.tileLoadFunction,url:t(e.url)?e.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+e.layer+"/{z}/{x}/{y}."+i.Ta})}function kv(e){e=t(e)?e:{};var o=t(e.params)?e.params:{};cv.call(this,{attributions:e.attributions,logo:e.logo,projection:e.projection,tileGrid:e.tileGrid,tileLoadFunction:e.tileLoadFunction,tileUrlFunction:d(this.lm,this),wrapX:!t(e.wrapX)||e.wrapX});var i=e.urls;!t(i)&&t(e.url)&&(i=uv(e.url)),this.g=null!=i?i:[],this.e=o,this.i=He()}function Av(t,e){nn.call(this,t,2),this.c=he(e.na(t[0])),this.a={}}function Rv(t){En.call(this,{opaque:!1,projection:t.projection,tileGrid:t.tileGrid})}function Lv(e){cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,projection:xo("EPSG:3857"),state:"loading",tileLoadFunction:e.tileLoadFunction,wrapX:!t(e.wrapX)||e.wrapX}),new ov(e.url).send(void 0,d(this.e,this))}function Nv(e){En.call(this,{projection:xo("EPSG:3857"),state:"loading"}),this.i=!t(e.preemptive)||e.preemptive,this.e=lv,this.g=void 0,new ov(e.url).send(void 0,d(this.om,this))}function jv(t,e,o,i,n){nn.call(this,t,e),this.g=o,this.a=i,this.i=n,this.d=this.e=this.c=null}function Iv(t,e){if(null===t.c||null===t.e||null==t.d)return null;var o=t.c[Math.floor((1-(e[1]-t.a[1])/(t.a[3]-t.a[1]))*t.c.length)];return p(o)?(o=o.charCodeAt(Math.floor((e[0]-t.a[0])/(t.a[2]-t.a[0])*o.length)),93<=o&&o--,35<=o&&o--,o=t.e[o-32],null!=o?t.d[o]:null):null}function Dv(t,e,o,i,n){0==t.state&&!0===n?(Xt(t,"change",function(){o.call(i,Iv(this,e))},!1,t),Fv(t)):!0===n?Yn(function(){o.call(i,Iv(this,e))},t):o.call(i,Iv(t,e))}function Fv(t){0==t.state&&(t.state=1,new ov(t.g).send(void 0,d(t.Xj,t),d(t.Lj,t)))}function Ov(e){cu.call(this,{attributions:e.attributions,logo:e.logo,projection:void 0,state:"ready"}),this.T=e.format,this.n=e.tileGrid,this.p=lv,this.X=this.n.yb(),this.l={},t(e.tileUrlFunction)?(this.p=e.tileUrlFunction,this.k()):t(e.urls)?(this.p=av(e.urls),this.k()):t(e.url)&&(this.p=av(uv(e.url)),this.k())}function Bv(e,o,i,n){var r=e.l;if(e=e.n.Wb(o,i),r=r[e[0]+"/"+e[1]+"/"+e[2]],t(r))for(e=0,i=r.length;e<i;++e){var s=r[e];if(s.Q().Jb(o[0],o[1])&&n.call(void 0,s))break}}function Uv(e){e=t(e)?e:{};var o=t(e.params)?e.params:{};cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,logo:e.logo,opaque:!ot(o,"TRANSPARENT",!0),projection:e.projection,tileGrid:e.tileGrid,tileLoadFunction:e.tileLoadFunction,tileUrlFunction:d(this.tm,this),wrapX:e.wrapX});var i=e.urls;!t(i)&&t(e.url)&&(i=uv(e.url)),this.g=null!=i?i:[],this.l=t(e.gutter)?e.gutter:0,this.e=o,this.i=!0,this.n=e.serverType,this.J=!t(e.hidpi)||e.hidpi,this.p="",Hv(this),this.N=He(),qv(this)}function Gv(e,o,i,n,r,s,a){var p=e.g;if(0!=p.length){if(a.WIDTH=i[0],a.HEIGHT=i[1],a[e.i?"CRS":"SRS"]=s.b,"STYLES"in e.e||(a.STYLES=new String("")),1!=r)switch(e.n){case"geoserver":i=90*r+.5|0,a.FORMAT_OPTIONS=t(a.FORMAT_OPTIONS)?a.FORMAT_OPTIONS+(";dpi:"+i):"dpi:"+i;break;case"mapserver":a.MAP_RESOLUTION=90*r;break;case"carmentaserver":case"qgis":a.DPI=90*r}return s=s.d,e.i&&"ne"==s.substr(0,2)&&(e=n[0],n[0]=n[1],n[1]=e,e=n[2],n[2]=n[3],n[3]=e),a.BBOX=n.join(","),hh(ch([1==p.length?p[0]:p[ht((o[1]<<o[0])+o[2],p.length)]],a))}}function Hv(t){var e,o,i=0,n=[];for(e=0,o=t.g.length;e<o;++e)n[i++]=t.g[e];for(var r in t.e)n[i++]=r+"-"+t.e[r];t.p=n.join("#")}function qv(t){t.i=0<=T(ot(t.e,"VERSION","1.3.0"),"1.3")}function $v(t){this.e=t.matrixIds,yn.call(this,{origin:t.origin,origins:t.origins,resolutions:t.resolutions,tileSize:t.tileSize,tileSizes:t.tileSizes,widths:t.widths})}function Xv(t){var e,o=[],i=[],n=[],r=[],s=[];e=xo(t.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var a=e.Gd(),p="ne"==e.d.substr(0,2);return U(t.TileMatrix,function(t,e){return e.ScaleDenominator-t.ScaleDenominator}),E(t.TileMatrix,function(t){i.push(t.Identifier),p?n.push([t.TopLeftCorner[1],t.TopLeftCorner[0]]):n.push(t.TopLeftCorner),o.push(28e-5*t.ScaleDenominator/a);var e=t.TileWidth,l=t.TileHeight;r.push(e==l?e:[e,l]),s.push(t.MatrixWidth)}),new $v({origins:n,resolutions:o,matrixIds:i,tileSizes:r,widths:s})}function Wv(e){function o(t){return t="KVP"==n?hh(ch([t],s)):t.replace(/\{(\w+?)\}/g,function(t,e){return e.toLowerCase()in s?s[e.toLowerCase()]:t}),function(e){if(null!==e){var o={TileMatrix:r.e[e[0]],TileCol:e[1],TileRow:e[2]};return rt(o,a),e=t,e="KVP"==n?hh(ch([e],o)):e.replace(/\{(\w+?)\}/g,function(t,e){return o[e]})}}}this.N=t(e.version)?e.version:"1.0.0",this.n=t(e.format)?e.format:"image/jpeg",this.e=t(e.dimensions)?e.dimensions:{},this.l="",zv(this),this.p=e.layer,this.i=e.matrixSet,this.J=e.style;var i=e.urls;!t(i)&&t(e.url)&&(i=uv(e.url)),this.g=null!=i?i:[];var n=this.T=t(e.requestEncoding)?e.requestEncoding:"KVP",r=e.tileGrid,s={layer:this.p,style:this.J,tilematrixset:this.i};"KVP"==n&&rt(s,{Service:"WMTS",Request:"GetTile",Version:this.N,Format:this.n});var a=this.e,i=0<this.g.length?pv(k(this.g,o)):lv,p=He(),i=hv(function(t,e,o){if(r.b.length<=t[0])return null;var i=t[1],n=-t[2]-1,s=mn(r,t,p);return e=e.G(),!ro(s,e)||ro(s,e)&&(s[0]==e[2]||s[2]==e[0]||s[1]==e[3]||s[3]==e[1])?null:$o(t[0],i,n,o)},i);cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,logo:e.logo,projection:e.projection,tileClass:e.tileClass,tileGrid:r,tileLoadFunction:e.tileLoadFunction,tilePixelRatio:e.tilePixelRatio,tileUrlFunction:i,wrapX:!!t(e.wrapX)&&e.wrapX})}function zv(t){var e,o=0,i=[];for(e in t.e)i[o++]=e+"-"+t.e[e];t.l=i.join("/")}function Kv(e){var o=t(e)?e:o;yn.call(this,{origin:[0,0],resolutions:o.resolutions})}function Vv(e){e=t(e)?e:{};var o=e.size,i=o[0],n=o[1],r=[],s=256;switch(t(e.tierSizeCalculation)?e.tierSizeCalculation:"default"){case"default":for(;i>s||n>s;)r.push([Math.ceil(i/s),Math.ceil(n/s)]),s+=s;break;case"truncated":for(;i>s||n>s;)r.push([Math.ceil(i/s),Math.ceil(n/s)]),i>>=1,n>>=1}r.push([1,1]),r.reverse();for(var s=[1],a=[0],n=1,i=r.length;n<i;n++)s.push(1<<n),a.push(r[n-1][0]*r[n-1][1]+a[n-1]);s.reverse();var s=new Kv({resolutions:s}),p=e.url,o=hv(s.yb({extent:[0,0,o[0],o[1]]}),function(t){if(null!==t){var e=t[0],o=t[1];return t=t[2],p+"TileGroup"+((o+t*r[e][0]+a[e])/256|0)+"/"+e+"-"+o+"-"+t+".jpg"}});cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,logo:e.logo,tileClass:Yv,tileGrid:s,tileUrlFunction:o})}function Yv(t,e,o,i,n){Vd.call(this,t,e,o,i,n),this.d={}}function Zv(e){e=t(e)?e:{},this.a=t(e.initialSize)?e.initialSize:256,this.c=t(e.maxSize)?e.maxSize:t(om)?om:2048,this.b=t(e.space)?e.space:1,this.e=[new Jv(this.a,this.b)],this.d=this.a,this.f=[new Jv(this.d,this.b)]}function _v(t,e,o,i,n,r,s){var a,p,l,h=e?t.f:t.e;for(p=0,l=h.length;p<l;++p){if(a=h[p],a=a.add(o,i,n,r,s),null!==a)return a;null===a&&p===l-1&&(e?(a=Math.min(2*t.d,t.c),t.d=a):(a=Math.min(2*t.a,t.c),t.a=a),a=new Jv(a,t.b),h.push(a),++l)}}function Jv(t,e){this.b=e,this.a=[{x:0,y:0,width:t,height:t}],this.d={},this.c=gi("CANVAS"),this.c.width=t,this.c.height=t,this.e=this.c.getContext("2d")}function Qv(t,e,o,i){e=[e,1],0<o.width&&0<o.height&&e.push(o),0<i.width&&0<i.height&&e.push(i),t.a.splice.apply(t.a,e)}function tm(e){this.o=this.d=this.e=null,this.i=t(e.fill)?e.fill:null,this.J=[0,0],this.b=e.points,this.c=t(e.radius)?e.radius:e.radius1,this.f=t(e.radius2)?e.radius2:this.c,this.g=t(e.angle)?e.angle:0,this.a=t(e.stroke)?e.stroke:null,this.H=this.L=this.p=null;var o,i=e.atlasManager,n="",r="",s=0,a=null,p=0;null!==this.a&&(o=ni(this.a.b),p=this.a.a,t(p)||(p=1),a=this.a.c,Pb||(a=null),r=this.a.e,t(r)||(r="round"),n=this.a.d,t(n)||(n="round"),s=this.a.f,t(s)||(s=10));var l=2*(this.c+p)+1,n={strokeStyle:o,md:p,size:l,lineCap:n,lineDash:a,lineJoin:r,miterLimit:s};if(t(i)){var h,l=Math.round(l),r=null===this.i;r&&(h=d(this.Tg,this,n)),s=this.nb(),h=i.add(s,l,l,d(this.Ug,this,n),h),this.d=h.image,this.J=[h.offsetX,h.offsetY],i=h.image.width,this.o=r?h.ig:this.d}else this.d=gi("CANVAS"),this.d.height=l,this.d.width=l,i=l=this.d.width,h=this.d.getContext("2d"),this.Ug(n,h,0,0),null===this.i?(h=this.o=gi("CANVAS"),h.height=n.size,h.width=n.size,h=h.getContext("2d"),this.Tg(n,h,0,0)):this.o=this.d;this.p=[l/2,l/2],this.L=[l,l],this.H=[i,i],hs.call(this,{opacity:1,rotateWithView:!1,rotation:t(e.rotation)?e.rotation:0,scale:1,snapToPixel:!t(e.snapToPixel)||e.snapToPixel})}var em,om,im,nm={},rm=rm||{},sm=this,am="closure_uid_"+(1e9*Math.random()>>>0),pm=0,lm=Date.now||function(){return+new Date};v(m,Error),m.prototype.name="CustomError";var hm,um,cm=String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},fm=/&/g,ym=/</g,dm=/>/g,gm=/"/g,vm=/'/g,mm=/\x00/g,bm=/[\x00&<>"']/,wm=Array.prototype;t:{var xm=sm.navigator;if(xm){var Sm=xm.userAgent;if(Sm){um=Sm;break t}}um=""}var Tm="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),Mm=X("Opera")||X("OPR"),Cm=X("Trident")||X("MSIE"),Em=X("Gecko")&&-1==um.toLowerCase().indexOf("webkit")&&!(X("Trident")||X("MSIE")),Pm=-1!=um.toLowerCase().indexOf("webkit"),km=X("Macintosh"),Am=X("Windows"),Rm=X("Linux")||X("CrOS"),Lm=function(){var t,e="";return Mm&&sm.opera?(e=sm.opera.version,h(e)?e():e):(Em?t=/rv\:([^\);]+)(\)|;)/:Cm?t=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:Pm&&(t=/WebKit\/(\S+)/),t&&(e=(e=t.exec(um))?e[1]:""),Cm&&(t=at(),t>parseFloat(e))?String(t):e)}(),Nm={},jm=sm.document,Im=jm&&Cm?at()||("CSS1Compat"==jm.compatMode?parseInt(Lm,10):5):void 0,Dm=Cm&&!pt("9.0")&&""!==Lm,Fm=!Cm||Cm&&9<=Im,Om=!Cm||Cm&&9<=Im,Bm=Cm&&!pt("9");!Pm||pt("528"),Em&&pt("1.9b")||Cm&&pt("8")||Mm&&pt("9.5")||Pm&&pt("528"),Em&&!pt("8")||Cm&&pt("9");var Um=0,Gm={};Tt.prototype.U=!1,Tt.prototype.Yc=function(){if(!this.U&&(this.U=!0,this.O(),0!=Um)){var t=c(this);delete Gm[t]}},Tt.prototype.O=function(){if(this.V)for(;this.V.length;)this.V.shift()()},Et.prototype.fb=function(){this.f=!0},Et.prototype.preventDefault=function(){this.rh=!1};var Hm=Cm?"focusout":"DOMFocusOut";At[" "]=o,v(Rt,Et);var qm=[1,4,2];em=Rt.prototype,em.fb=function(){Rt.S.fb.call(this),this.b.stopPropagation?this.b.stopPropagation():this.b.cancelBubble=!0},em.preventDefault=function(){Rt.S.preventDefault.call(this);var t=this.b;if(t.preventDefault);else if(t.returnValue=!1,Bm)try{(t.ctrlKey||112<=t.keyCode&&123>=t.keyCode)&&(t.keyCode=-1)}catch(e){}},em.Qi=function(){return this.b},em.Zf=function(){return Pm||void 0!==this.b.offsetX?this.b.offsetX:this.b.layerX},em.bo=function(t){Object.defineProperties(this,{offsetX:{writable:!0,enumerable:!0,configurable:!0,value:t}})},em.$f=function(){return Pm||void 0!==this.b.offsetY?this.b.offsetY:this.b.layerY},em.co=function(t){Object.defineProperties(this,{offsetY:{writable:!0,enumerable:!0,configurable:!0,value:t}})};var $m="closure_listenable_"+(1e6*Math.random()|0),Xm=0;Ft.prototype.add=function(t,e,o,i,n){var r=t.toString();t=this.b[r],t||(t=this.b[r]=[],this.a++);var s=Gt(t,e,i,n);return-1<s?(e=t[s],o||(e.vd=!1)):(e=new It(e,this.src,r,(!!i),n),e.vd=o,t.push(e)),e},Ft.prototype.remove=function(t,e,o,i){if(t=t.toString(),!(t in this.b))return!1;var n=this.b[t];return e=Gt(n,e,o,i),-1<e&&(Dt(n[e]),wm.splice.call(n,e,1),0==n.length&&(delete this.b[t],this.a--),!0)};var Wm="closure_lm_"+(1e6*Math.random()|0),zm={},Km=0,Vm="__closure_events_fn_"+(1e9*Math.random()>>>0);v(Qt,Tt),Qt.prototype[$m]=!0,em=Qt.prototype,em.addEventListener=function(t,e,o,i){
+Ht(this,t,e,o,i)},em.removeEventListener=function(t,e,o,i){Wt(this,t,e,o,i)},em.dispatchEvent=function(t){var e,o=this.sa;if(o)for(e=[];o;o=o.sa)e.push(o);var o=this.rc,i=t.type||t;if(p(t))t=new Et(t,o);else if(t instanceof Et)t.target=t.target||o;else{var n=t;t=new Et(i,o),rt(t,n)}var r,n=!0;if(e)for(var s=e.length-1;!t.f&&0<=s;s--)r=t.c=e[s],n=te(r,i,!0,t)&&n;if(t.f||(r=t.c=o,n=te(r,i,!0,t)&&n,t.f||(n=te(r,i,!1,t)&&n)),e)for(s=0;!t.f&&s<e.length;s++)r=t.c=e[s],n=te(r,i,!1,t)&&n;return n},em.O=function(){if(Qt.S.O.call(this),this.ab){var t,e=this.ab,o=0;for(t in e.b){for(var i=e.b[t],n=0;n<i.length;n++)++o,Dt(i[n]);delete e.b[t],e.a--}}this.sa=null},em.Ka=function(t,e,o,i){return this.ab.add(String(t),e,!1,o,i)},em.wf=function(t,e,o,i){return this.ab.remove(String(t),e,o,i)},v(oe,Qt),em=oe.prototype,em.k=function(){++this.b,this.dispatchEvent("change")},em.v=function(){return this.b},em.r=function(t,e,o){return Ht(this,t,e,!1,o)},em.A=function(t,e,o){return Xt(this,t,e,!1,o)},em.u=function(t,e,o){Wt(this,t,e,!1,o)},em.B=ie,v(ne,Et),v(re,oe);var Ym={};if(em=re.prototype,em.get=function(t){var e;return this.q.hasOwnProperty(t)&&(e=this.q[t]),e},em.C=function(){return Y(this.q)},em.D=function(){var t,e={};for(t in this.q)e[t]=this.q[t];return e},em.set=function(t,e){var o=this.q[t];this.q[t]=e,ae(this,t,o)},em.t=function(t){for(var e in t)this.set(e,t[e])},em.I=function(t){if(t in this.q){var e=this.q[t];delete this.q[t],ae(this,t,e)}},we.prototype.b=4,we.prototype.set=function(t,e){e=e||0;for(var o=0;o<t.length&&e+o<this.length;o++)this[e+o]=t[o]},we.prototype.toString=Array.prototype.join,"undefined"==typeof Float32Array&&(we.BYTES_PER_ELEMENT=4,we.prototype.BYTES_PER_ELEMENT=we.prototype.b,we.prototype.set=we.prototype.set,we.prototype.toString=we.prototype.toString,e("Float32Array",we,void 0)),xe.prototype.b=8,xe.prototype.set=function(t,e){e=e||0;for(var o=0;o<t.length&&e+o<this.length;o++)this[e+o]=t[o]},xe.prototype.toString=Array.prototype.join,"undefined"==typeof Float64Array){try{xe.BYTES_PER_ELEMENT=8}catch(Zm){}xe.prototype.BYTES_PER_ELEMENT=xe.prototype.b,xe.prototype.set=xe.prototype.set,xe.prototype.toString=xe.prototype.toString,e("Float64Array",xe,void 0)}new Float64Array(3),new Float64Array(3),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(16),lo.prototype.a=function(t){for(var e=0,o=t.length,i=t[o-1][0],n=t[o-1][1],r=0;r<o;r++)var s=t[r][0],a=t[r][1],e=e+ct(s-i)*(2+Math.sin(ct(n))+Math.sin(ct(a))),i=s,n=a;return e*this.radius*this.radius/2},lo.prototype.b=function(t,e){var o=ct(t[1]),i=ct(e[1]),n=(i-o)/2,r=ct(e[0]-t[0])/2,o=Math.sin(n)*Math.sin(n)+Math.sin(r)*Math.sin(r)*Math.cos(o)*Math.cos(i);return 2*this.radius*Math.atan2(Math.sqrt(o),Math.sqrt(1-o))},lo.prototype.offset=function(t,e,o){var i=ct(t[1]);e/=this.radius;var n=Math.asin(Math.sin(i)*Math.cos(e)+Math.cos(i)*Math.sin(e)*Math.cos(o));return[180*(ct(t[0])+Math.atan2(Math.sin(o)*Math.sin(e)*Math.cos(i),Math.cos(e)-Math.sin(i)*Math.sin(n)))/Math.PI,180*n/Math.PI]};var _m=new lo(6370997),Jm={};Jm.degrees=2*Math.PI*_m.radius/360,Jm.ft=.3048,Jm.m=1,Jm["us-ft"]=1200/3937,em=ho.prototype,em.Ri=function(){return this.b},em.G=function(){return this.f},em.Ll=function(){return this.a},em.Gd=function(){return Jm[this.a]},em.Cj=function(){return this.g},em.Ml=function(){return this.e},em.Yn=function(t){this.c=(this.e=t)&&null!==this.f},em.Nl=function(t){this.f=t,this.c=this.e&&null!==t},em.lo=function(t){this.g=t},em.Xn=function(t){this.q=t},em.rj=function(e,o){if("degrees"==this.a)return e;var i=Mo(this,xo("EPSG:4326")),n=[o[0]-e/2,o[1],o[0]+e/2,o[1],o[0],o[1]-e/2,o[0],o[1]+e/2],n=i(n,n,2),i=(_m.b(n.slice(0,2),n.slice(2,4))+_m.b(n.slice(4,6),n.slice(6,8)))/2,n=this.Gd();return t(n)&&(i/=n),i},em.getPointResolution=function(t,e){return this.q(t,e)};var Qm={},tb={};v(Ao,re),em=Ao.prototype,em.xd=function(t){return this.f.center(t)},em.constrainResolution=function(t,e,o){return this.f.resolution(t,e||0,o||0)},em.constrainRotation=function(t,e){return this.f.rotation(t,e||0)},em.Ca=function(){return this.get("center")},em.Pc=function(t){var e=this.Ca(),o=this.ya();return[e[0]-o*t[0]/2,e[1]-o*t[1]/2,e[0]+o*t[0]/2,e[1]+o*t[1]/2]},em.dl=function(){return this.e},em.ya=function(){return this.get("resolution")},em.Da=function(){return this.get("rotation")},em.Ej=function(){var e,o=this.ya();if(t(o)){var i,n=0;do{if(i=this.constrainResolution(this.a,n),i==o){e=n;break}++n}while(i>this.g)}return t(e)?this.d+e:e},em.Me=function(t,e){if(!so(t)){this.Na(_e(t));var o=Ro(t,e),i=this.constrainResolution(o,0,0);i<o&&(i=this.constrainResolution(i,-1,0)),this.tb(i)}},em.Fi=function(e,o,i){var n=t(i)?i:{};i=t(n.padding)?n.padding:[0,0,0,0];var r,s=!t(n.constrainResolution)||n.constrainResolution,a=!!t(n.nearest)&&n.nearest;r=t(n.minResolution)?n.minResolution:t(n.maxZoom)?this.constrainResolution(this.a,n.maxZoom-this.d,0):0;var p=e.j,l=this.Da(),n=Math.cos(-l),l=Math.sin(-l),h=1/0,u=1/0,c=-(1/0),f=-(1/0);e=e.s;for(var y=0,d=p.length;y<d;y+=e)var g=p[y]*n-p[y+1]*l,v=p[y]*l+p[y+1]*n,h=Math.min(h,g),u=Math.min(u,v),c=Math.max(c,g),f=Math.max(f,v);o=Ro([h,u,c,f],[o[0]-i[1]-i[3],o[1]-i[0]-i[2]]),o=isNaN(o)?r:Math.max(o,r),s&&(r=this.constrainResolution(o,0,0),!a&&r<o&&(r=this.constrainResolution(r,-1,0)),o=r),this.tb(o),l=-l,a=(h+c)/2+(i[1]-i[3])/2*o,i=(u+f)/2+(i[0]-i[2])/2*o,this.Na([a*n-i*l,i*n+a*l])},em.Ai=function(t,e,o){var i=this.Da(),n=Math.cos(-i),i=Math.sin(-i),r=t[0]*n-t[1]*i;t=t[1]*n+t[0]*i;var s=this.ya(),r=r+(e[0]/2-o[0])*s;t+=(o[1]-e[1]/2)*s,i=-i,this.Na([r*n-t*i,t*n+r*i])},em.rotate=function(e,o){if(t(o)){var i,n=this.Ca();t(n)&&(i=[n[0]-o[0],n[1]-o[1]],ge(i,e-this.Da()),ue(i,o)),this.Na(i)}this.be(e)},em.Na=function(t){this.set("center",t)},em.tb=function(t){this.set("resolution",t)},em.be=function(t){this.set("rotation",t)},em.no=function(t){t=this.constrainResolution(this.a,t-this.d,0),this.tb(t)},Ko.prototype.contains=function(t){return Yo(this,t[1],t[2])},Qo.prototype.c=function(){return this.a},v(ti,Et),v(ei,re),em=ei.prototype,em.clear=function(){for(;0<this.Ib();)this.pop()},em.af=function(t){var e,o;for(e=0,o=t.length;e<o;++e)this.push(t[e]);return this},em.forEach=function(t,e){E(this.a,t,e)},em.Hk=function(){return this.a},em.item=function(t){return this.a[t]},em.Ib=function(){return this.get("length")},em.Td=function(t,e){O(this.a,t,0,e),oi(this),this.dispatchEvent(new ti("add",e,this))},em.pop=function(){return this.tf(this.Ib()-1)},em.push=function(t){var e=this.a.length;return this.Td(e,t),e},em.remove=function(t){var e,o,i=this.a;for(e=0,o=i.length;e<o;++e)if(i[e]===t)return this.tf(e)},em.tf=function(t){var e=this.a[t];return wm.splice.call(this.a,t,1),oi(this),this.dispatchEvent(new ti("remove",e,this)),e},em.Un=function(t,e){var o=this.Ib();if(t<o)o=this.a[t],this.a[t]=e,this.dispatchEvent(new ti("remove",o,this)),this.dispatchEvent(new ti("add",e,this));else{for(;o<t;++o)this.Td(o,void 0);this.Td(t,e)}};var eb=/^#(?:[0-9a-f]{3}){1,2}$/i,ob=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ib=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i,nb=function(){var t={},e=0;return function(o){var i;if(t.hasOwnProperty(o))i=t[o];else{if(1024<=e){i=0;for(var n in t)0===(3&i++)&&(delete t[n],--e)}var r,s;eb.exec(o)?(s=3==o.length-1?1:2,i=parseInt(o.substr(1+0*s,s),16),n=parseInt(o.substr(1+1*s,s),16),r=parseInt(o.substr(1+2*s,s),16),1==s&&(i=(i<<4)+i,n=(n<<4)+n,r=(r<<4)+r),i=[i,n,r,1]):(s=ib.exec(o))?(i=Number(s[1]),n=Number(s[2]),r=Number(s[3]),s=Number(s[4]),i=[i,n,r,s],i=ri(i,i)):(s=ob.exec(o))?(i=Number(s[1]),n=Number(s[2]),r=Number(s[3]),i=[i,n,r,1],i=ri(i,i)):i=void 0,t[o]=i,++e}return i}}(),rb=!Cm||Cm&&9<=Im;!Em&&!Cm||Cm&&Cm&&9<=Im||Em&&pt("1.9.1"),Cm&&pt("9"),st("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),em=pi.prototype,em.clone=function(){return new pi(this.x,this.y)},em.ceil=function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},em.floor=function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},em.round=function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},em.scale=function(t,e){var o=l(e)?e:t;return this.x*=t,this.y*=o,this},em=li.prototype,em.clone=function(){return new li(this.width,this.height)},em.la=function(){return!(this.width*this.height)},em.ceil=function(){return this.width=Math.ceil(this.width),this.height=Math.ceil(this.height),this},em.floor=function(){return this.width=Math.floor(this.width),this.height=Math.floor(this.height),this},em.round=function(){return this.width=Math.round(this.width),this.height=Math.round(this.height),this},em.scale=function(t,e){var o=l(e)?e:t;return this.width*=t,this.height*=o,this};var sb={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};Ei.prototype.appendChild=function(t,e){t.appendChild(e)},Ei.prototype.contains=Ti,em=Ii.prototype,em.clone=function(){return new Ii(this.top,this.right,this.bottom,this.left)},em.contains=function(t){return!(!this||!t)&&(t instanceof Ii?t.left>=this.left&&t.right<=this.right&&t.top>=this.top&&t.bottom<=this.bottom:t.x>=this.left&&t.x<=this.right&&t.y>=this.top&&t.y<=this.bottom)},em.ceil=function(){return this.top=Math.ceil(this.top),this.right=Math.ceil(this.right),this.bottom=Math.ceil(this.bottom),this.left=Math.ceil(this.left),this},em.floor=function(){return this.top=Math.floor(this.top),this.right=Math.floor(this.right),this.bottom=Math.floor(this.bottom),this.left=Math.floor(this.left),this},em.round=function(){return this.top=Math.round(this.top),this.right=Math.round(this.right),this.bottom=Math.round(this.bottom),this.left=Math.round(this.left),this},em.scale=function(t,e){var o=l(e)?e:t;return this.left*=t,this.right*=t,this.top*=o,this.bottom*=o,this},em=Di.prototype,em.clone=function(){return new Di(this.left,this.top,this.width,this.height)},em.contains=function(t){return t instanceof Di?this.left<=t.left&&this.left+this.width>=t.left+t.width&&this.top<=t.top&&this.top+this.height>=t.top+t.height:t.x>=this.left&&t.x<=this.left+this.width&&t.y>=this.top&&t.y<=this.top+this.height},em.distance=function(t){return Math.sqrt(Fi(this,t))},em.ceil=function(){return this.left=Math.ceil(this.left),this.top=Math.ceil(this.top),this.width=Math.ceil(this.width),this.height=Math.ceil(this.height),this},em.floor=function(){return this.left=Math.floor(this.left),this.top=Math.floor(this.top),this.width=Math.floor(this.width),this.height=Math.floor(this.height),this},em.round=function(){return this.left=Math.round(this.left),this.top=Math.round(this.top),this.width=Math.round(this.width),this.height=Math.round(this.height),this},em.scale=function(t,e){var o=l(e)?e:t;return this.left*=t,this.width*=t,this.top*=o,this.height*=o,this};var ab={thin:2,medium:4,thick:6};v(_i,Et),v(Ji,re),Ji.prototype.O=function(){wi(this.element),Ji.S.O.call(this)},Ji.prototype.e=function(){return this.a},Ji.prototype.setMap=function(t){null===this.a||wi(this.element),0!=this.l.length&&(E(this.l,zt),this.l.length=0),this.a=t,null!==this.a&&((null===this.L?t.p:this.L).appendChild(this.element),this.render!==o&&this.l.push(Ht(t,"postrender",this.render,!1,this)),t.render())},Ji.prototype.c=function(t){this.L=ui(t)},em=Qi.prototype,em.clear=function(){this.c=0,this.d={},this.a=this.b=null},em.forEach=function(t,e){for(var o=this.b;null!==o;)t.call(e,o.qc,o.Wd,this),o=o.Wa},em.get=function(t){return t=this.d[t],t===this.a?t.qc:(t===this.b?(this.b=this.b.Wa,this.b.Nb=null):(t.Wa.Nb=t.Nb,t.Nb.Wa=t.Wa),t.Wa=null,t.Nb=this.a,this.a=this.a.Wa=t,t.qc)},em.Tb=function(){return this.c},em.C=function(){var t,e=Array(this.c),o=0;for(t=this.a;null!==t;t=t.Nb)e[o++]=t.Wd;return e},em.cb=function(){var t,e=Array(this.c),o=0;for(t=this.a;null!==t;t=t.Nb)e[o++]=t.qc;return e},em.pop=function(){var t=this.b;return delete this.d[t.Wd],null!==t.Wa&&(t.Wa.Nb=null),this.b=t.Wa,null===this.b&&(this.a=null),--this.c,t.qc},em.set=function(t,e){var o={Wd:t,Wa:null,Nb:this.a,qc:e};null===this.a?this.b=o:this.a.Wa=o,this.a=o,this.d[t]=o,++this.c},v(en,Qi),v(nn,Qt),nn.prototype.gb=function(){return c(this).toString()},nn.prototype.f=function(){return this.b},v(sn,re),em=sn.prototype,em.ge=o,em.ea=function(){return this.d},em.ca=function(){return this.L},em.fa=function(){return this.f},em.ga=function(){return this.o};var pb=ln(!1),lb=ln(!0),hb=ln(null),ub=[0,0,0];em=yn.prototype,em.yb=function(){return hn},em.Ad=function(t,e,o,i,n){for(n=mn(this,t,n),t=t[0]-1;t>=this.minZoom;){if(e.call(o,t,gn(this,n,t,i)))return!0;--t}return!1},em.Fd=function(){return this.maxZoom},em.Hd=function(){return this.minZoom},em.Mb=function(t){return null===this.f?this.i[t]:this.f},em.ma=function(t){return this.b[t]},em.ne=function(){return this.b},em.Ld=function(t,e,o){return t[0]<this.maxZoom?(o=mn(this,t,o),gn(this,o,t[0]+1,e)):null},em.Wb=function(t,e,o){return bn(this,t[0],t[1],e,!1,o)},em.cd=function(t,e,o){return bn(this,t[0],t[1],this.ma(e),!1,o)},em.na=function(t){return null===this.g?this.c[t]:this.g},v(En,sn),em=En.prototype,em.Cd=function(){return 0},em.bb=Xo,em.ua=function(){return this.tileGrid},em.Xb=function(t,e,o){return e=kn(this,o),le(he(e.na(t),this.c),this.ba,this.c)},em.yf=o,v(An,Et),v(Rn,Ji),em=Rn.prototype,em.gl=function(t){t.preventDefault(),Nn(this)},em.fl=function(){return this.g},em.il=function(t){this.g!==t&&(this.g=t,ji(this.element,"ol-uncollapsible"),!t&&this.d&&Nn(this))},em.hl=function(t){this.g&&this.d!==t&&Nn(this)},em.el=function(){return this.d},v(jn,Ji),jn.prototype.o=function(e){e.preventDefault(),e=this.a;var o=e.R();if(null!==o){for(var i=o.Da();i<-Math.PI;)i+=2*Math.PI;for(;i>Math.PI;)i-=2*Math.PI;t(i)&&(0<this.g&&e.Ha(Ho({rotation:i,duration:this.g,easing:Fo})),o.be(0))}},v(Dn,Ji),Dn.prototype.f=function(e,o){o.preventDefault();var i=this.a,n=i.R();if(null!==n){var r=n.ya();t(r)&&(0<this.d&&i.Ha(qo({resolution:r,duration:this.d,easing:Fo})),i=n.constrainResolution(r,e),n.tb(i))}};var cb=Pm?"webkitfullscreenchange":Em?"mozfullscreenchange":Cm?"MSFullscreenChange":"fullscreenchange";v(Gn,Ji),Gn.prototype.n=function(t){t.preventDefault(),On()&&(t=this.a,null!==t&&(Un()?(t=hi().b,t.webkitCancelFullScreen?t.webkitCancelFullScreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen?t.msExitFullscreen():t.exitFullscreen&&t.exitFullscreen()):(t=t.df(),t=ui(t),this.o?t.mozRequestFullScreenWithKeys?t.mozRequestFullScreenWithKeys():t.webkitRequestFullscreen?t.webkitRequestFullscreen():Bn(t):Bn(t))))},Gn.prototype.i=function(){var t=this.d+"-true",e=this.d+"-false",o=Si(this.element),i=this.a;Un()?(Ri(o,e)&&(Ni(o,e),Li(o,t)),xi(this.g,this.f)):(Ri(o,t)&&(Ni(o,t),Li(o,e)),xi(this.f,this.g)),null===i||i.Kc()},v(Hn,Ji),em=Hn.prototype,em.jl=function(){this.f=null},em.Uf=function(){return this.get("coordinateFormat")},em.xg=function(){return this.get("projection")},em.$j=function(t){this.g=this.a.Bd(t.b),$n(this,this.g)},em.ak=function(){$n(this,null),this.g=null},em.setMap=function(t){Hn.S.setMap.call(this,t),null!==t&&(t=t.a,this.l.push(Ht(t,"mousemove",this.$j,!1,this),Ht(t,"mouseout",this.ak,!1,this)))},em.vh=function(t){this.set("coordinateFormat",t)},em.yg=function(t){this.set("projection",t)},v(Xn,Tt),em=Xn.prototype,em.$=null,em.zf=!1,em.start=function(){Wn(this),this.zf=!1;var t=zn(this),e=Kn(this);t&&!e&&this.b.mozRequestAnimationFrame?(this.$=Ht(this.b,"MozBeforePaint",this.a),this.b.mozRequestAnimationFrame(null),this.zf=!0):this.$=t&&e?t.call(this.b,this.a):this.b.setTimeout(un(this.a),20)},em.Pf=function(){this.zf&&this.$&&zt(this.$),this.$=null,this.d.call(this.c,lm())},em.O=function(){Wn(this),Xn.S.O.call(this)};var fb,yb=hn;em=Qn.prototype,em.Tb=function(){return this.c},em.cb=function(){tr(this);for(var t=[],e=0;e<this.b.length;e++)t.push(this.a[this.b[e]]);return t},em.C=function(){return tr(this),this.b.concat()},em.la=function(){return 0==this.c},em.clear=function(){this.a={},this.c=this.b.length=0},em.remove=function(t){return!!er(this.a,t)&&(delete this.a[t],this.c--,this.b.length>2*this.c&&tr(this),!0)},em.get=function(t,e){return er(this.a,t)?this.a[t]:e},em.set=function(t,e){er(this.a,t)||(this.c++,this.b.push(t)),this.a[t]=e},em.forEach=function(t,e){for(var o=this.C(),i=0;i<o.length;i++){var n=o[i],r=this.get(n);t.call(e,r,n,this)}},em.clone=function(){return new Qn(this)},new or,or.prototype.set=function(t){this.b=t},or.prototype.get=function(){return this.b},v(ir,Qt),em=ir.prototype,em.Md=null,em.pd=null,em.Nd=null,em.O=function(){ir.S.O.call(this),this.Md&&(zt(this.Md),this.Md=null),this.Nd=this.pd=null},em.ik=function(){var t=fi(this.pd||window),e=this.Nd;t==e||t&&e&&t.width==e.width&&t.height==e.height||(this.Nd=t,this.dispatchEvent("resize"))},v(pr,Qt),em=pr.prototype,em.Z=null,em.Ud=null,em.Ye=null,em.Vd=null,em.Ja=-1,em.Hb=-1,em.Ge=!1;var db={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},gb={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},vb=Cm||Pm&&pt("525"),mb=km&&Em;pr.prototype.b=function(t){Pm&&(17==this.Ja&&!t.i||18==this.Ja&&!t.a||km&&91==this.Ja&&!t.l)&&(this.Hb=this.Ja=-1),-1==this.Ja&&(t.i&&17!=t.e?this.Ja=17:t.a&&18!=t.e?this.Ja=18:t.l&&91!=t.e&&(this.Ja=91)),vb&&!nr(t.e,this.Ja,t.d,t.i,t.a)?this.handleEvent(t):(this.Hb=sr(t.e),mb&&(this.Ge=t.a))},pr.prototype.a=function(t){this.Hb=this.Ja=-1,this.Ge=t.a},pr.prototype.handleEvent=function(t){var e,o,i=t.b,n=i.altKey;Cm&&"keypress"==t.type?(e=this.Hb,o=13!=e&&27!=e?i.keyCode:0):Pm&&"keypress"==t.type?(e=this.Hb,o=0<=i.charCode&&63232>i.charCode&&rr(e)?i.charCode:0):Mm?(e=this.Hb,o=rr(e)?i.keyCode:0):(e=i.keyCode||this.Hb,o=i.charCode||0,mb&&(n=this.Ge),km&&63==o&&224==e&&(e=191));var r=e=sr(e),s=i.keyIdentifier;e?63232<=e&&e in db?r=db[e]:25==e&&t.d&&(r=9):s&&s in gb&&(r=gb[s]),this.Ja=r,t=new ur(r,o,0,i),t.a=n,this.dispatchEvent(t)},pr.prototype.O=function(){pr.S.O.call(this),hr(this)},v(ur,Rt),v(cr,Qt),cr.prototype.handleEvent=function(e){var o=0,i=0,n=0;e=e.b,"mousewheel"==e.type?(i=1,(Cm||Pm&&(Am||pt("532.0")))&&(i=40),n=fr(-e.wheelDelta,i),t(e.wheelDeltaX)?(o=fr(-e.wheelDeltaX,i),i=fr(-e.wheelDeltaY,i)):i=n):(n=e.detail,100<n?n=3:-100>n&&(n=-3),t(e.axis)&&e.axis===e.HORIZONTAL_AXIS?o=n:i=n),l(this.a)&&lt(o,-this.a,this.a),l(this.c)&&(i=lt(i,-this.c,this.c)),o=new yr(n,e,0,i),this.dispatchEvent(o)},cr.prototype.O=function(){cr.S.O.call(this),zt(this.b),this.b=null},v(yr,Rt),v(dr,Et);var bb=!1;try{bb=1===new MouseEvent("click",{buttons:1}).buttons}catch(wb){}var xb,Sb,Tb=function(){var e;return function(){if(!t(e))if(sm.getComputedStyle){var o,i=gi("P"),n={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(i);for(var r in n)r in i.style&&(i.style[r]="translate(1px,1px)",o=sm.getComputedStyle(i).getPropertyValue(n[r]));wi(i),e=o&&"none"!==o}else e=!1;return e}}(),Mb=function(){var e;return function(){if(!t(e))if(sm.getComputedStyle){var o,i=gi("P"),n={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(i);for(var r in n)r in i.style&&(i.style[r]="translate3d(1px,1px,1px)",o=sm.getComputedStyle(i).getPropertyValue(n[r]));wi(i),e=o&&"none"!==o}else e=!1;return e}}(),Cb=["experimental-webgl","webgl","webkit-3d","moz-webgl"],Eb=sm.devicePixelRatio||1,Pb=!1,kb=function(){if(!("HTMLCanvasElement"in sm))return!1;try{var e=mr();return null!==e&&(t(e.setLineDash)&&(Pb=!0),!0)}catch(o){return!1}}(),Ab="DeviceOrientationEvent"in sm,Rb="geolocation"in sm.navigator,Lb="ontouchstart"in sm,Nb="PointerEvent"in sm,jb=!!sm.navigator.msPointerEnabled,Ib=!1,Db=[];if("WebGLRenderingContext"in sm)try{var Fb=xr(gi("CANVAS"),{Ei:!0});null!==Fb&&(Ib=!0,Sb=Fb.getParameter(Fb.MAX_TEXTURE_SIZE),Db=Fb.getSupportedExtensions())}catch(Ob){}xb=Ib,im=Db,om=Sb,v(Tr,Sr),em=Tr.prototype,em.tk=function(t){if(!Mr(this,t)){1..toString()in this.a&&this.cancel(t);var e=Cr(t);this.a[1..toString()]=t,Gr(this.b,Ub,e,t)}},em.uk=function(t){if(!Mr(this,t)){var e=Cr(t);Gr(this.b,Bb,e,t)}},em.xk=function(t){if(!Mr(this,t)){var e=this.a[1..toString()];e&&e.button===t.button&&(e=Cr(t),Gr(this.b,Gb,e,t),et(this.a,1..toString()))}},em.wk=function(t){if(!Mr(this,t)){var e=Cr(t);Ur(this.b,e,t)}},em.vk=function(t){if(!Mr(this,t)){var e=Cr(t);Br(this.b,e,t)}},em.cancel=function(t){var e=Cr(t);this.b.cancel(e,t),et(this.a,1..toString())},v(Er,Sr),em=Er.prototype,em.Ck=function(t){this.a[t.b.pointerId]=t;var e=Pr(this,t);Gr(this.b,Ub,e,t)},em.Dk=function(t){var e=Pr(this,t);Gr(this.b,Bb,e,t)},em.Gk=function(t){var e=Pr(this,t);Gr(this.b,Gb,e,t),et(this.a,t.b.pointerId)},em.Ek=function(t){var e=Pr(this,t);Br(this.b,e,t)},em.Fk=function(t){var e=Pr(this,t);Ur(this.b,e,t)},em.Bk=function(t){var e=Pr(this,t);this.b.cancel(e,t),et(this.a,t.b.pointerId)},em.Ak=function(t){this.b.dispatchEvent(new dr("lostpointercapture",t,t.b))},em.zk=function(t){this.b.dispatchEvent(new dr("gotpointercapture",t,t.b))},v(kr,Sr),em=kr.prototype,em.nn=function(t){Hr(this.b,t)},em.pn=function(t){Hr(this.b,t)},em.sn=function(t){Hr(this.b,t)},em.qn=function(t){Hr(this.b,t)},em.rn=function(t){Hr(this.b,t)},em.mn=function(t){Hr(this.b,t)},em.sk=function(t){Hr(this.b,t)},em.Fj=function(t){Hr(this.b,t)},v(Ar,Sr),em=Ar.prototype,em.qh=function(){this.f=0,this.d=void 0},em.so=function(e){var o=e.b.touches,i=Y(this.a),n=i.length;if(n>=o.length){var r,s,a,p=[];for(r=0;r<n;++r){s=i[r],a=this.a[s];var l;if(!(l=1==s))t:{l=o.length;for(var h=void 0,u=0;u<l;u++)if(h=o[u],h.identifier===s-2){l=!0;break t}l=!1}l||p.push(a.ec)}for(r=0;r<p.length;++r)this.He(e,p[r])}o=K(this.a),(0===o||1===o&&1..toString()in this.a)&&(this.c=e.b.changedTouches[0].identifier,t(this.d)&&sm.clearTimeout(this.d)),Nr(this,e),this.f++,Lr(this,e,this.hn)},em.hn=function(t,e){this.a[e.pointerId]={target:e.target,ec:e,Zg:e.target};var o=this.b;e.bubbles=!0,Gr(o,Hb,e,t),o=this.b,e.bubbles=!1,Gr(o,$b,e,t),Gr(this.b,Ub,e,t)},em.ro=function(t){t.preventDefault(),Lr(this,t,this.yk)},em.yk=function(t,e){var o=this.a[e.pointerId];if(o){var i=o.ec,n=o.Zg;Gr(this.b,Bb,e,t),i&&n!==e.target&&(i.relatedTarget=e.target,e.relatedTarget=n,i.target=n,e.target?(Br(this.b,i,t),Ur(this.b,e,t)):(e.target=n,e.relatedTarget=null,this.He(t,e))),o.ec=e,o.Zg=e.target}},em.qo=function(t){Nr(this,t),Lr(this,t,this.to)},em.to=function(t,e){Gr(this.b,Gb,e,t),this.b.ec(e,t);var o=this.b;e.bubbles=!1,Gr(o,Xb,e,t),et(this.a,e.pointerId),e.isPrimary&&(this.c=void 0,this.d=sm.setTimeout(d(this.qh,this),200))},em.po=function(t){Lr(this,t,this.He)},em.He=function(t,e){this.b.cancel(e,t),this.b.ec(e,t);var o=this.b;e.bubbles=!1,Gr(o,Xb,e,t),et(this.a,e.pointerId),e.isPrimary&&(this.c=void 0,this.d=sm.setTimeout(d(this.qh,this),200))},v(jr,Qt),jr.prototype.d=function(t){var e=this.c[t.type];e&&e(t)},jr.prototype.ec=function(t,e){t.bubbles=!0,Gr(this,qb,t,e)},jr.prototype.cancel=function(t,e){Gr(this,Wb,t,e)},jr.prototype.O=function(){for(var t,e=this.b.length,o=0;o<e;o++)t=this.b[o],Fr(this,Y(t.e));jr.S.O.call(this)};var Bb="pointermove",Ub="pointerdown",Gb="pointerup",Hb="pointerover",qb="pointerout",$b="pointerenter",Xb="pointerleave",Wb="pointercancel",zb=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",!1],["type",""],["target",null],["currentTarget",null],["which",0]];v(qr,_i),qr.prototype.preventDefault=function(){qr.S.preventDefault.call(this),this.b.preventDefault()},qr.prototype.fb=function(){qr.S.fb.call(this),this.b.fb()},v($r,qr),v(Xr,Qt),em=Xr.prototype,em.fg=function(t){zr(this,t);var e=new $r(Qb,this.c,t);this.dispatchEvent(e),!this.g&&0===t.button&&Wr(this,this.a),0===this.o&&(E(this.d,zt),this.d=null,this.g=!1,this.a=null,Ct(this.b),this.b=null)},em.dk=function(t){zr(this,t);var e=new $r(Jb,this.c,t);this.dispatchEvent(e),this.a=t,null===this.d&&(this.b=new jr(document),this.d=[Ht(this.b,_b,this.$k,!1,this),Ht(this.b,Qb,this.fg,!1,this),Ht(this.e,tw,this.fg,!1,this)])},em.$k=function(t){if(t.clientX!=this.a.clientX||t.clientY!=this.a.clientY){this.g=!0;var e=new $r(Zb,this.c,t,this.g);this.dispatchEvent(e)}t.preventDefault()},em.Kn=function(t){this.dispatchEvent(new $r(t.type,this.c,t,null!==this.a&&(t.clientX!=this.a.clientX||t.clientY!=this.a.clientY)))},em.O=function(){null!==this.q&&(zt(this.q),this.q=null),null!==this.i&&(zt(this.i),this.i=null),null!==this.d&&(E(this.d,zt),this.d=null),null!==this.b&&(Ct(this.b),this.b=null),null!==this.e&&(Ct(this.e),this.e=null),Xr.S.O.call(this)};var Kb="singleclick",Vb="click",Yb="dblclick",Zb="pointerdrag",_b="pointermove",Jb="pointerdown",Qb="pointerup",tw="pointercancel",ew={Ko:Kb,zo:Vb,Ao:Yb,Do:Zb,Go:_b,Co:Jb,Jo:Qb,Io:"pointerover",Ho:"pointerout",Eo:"pointerenter",Fo:"pointerleave",Bo:tw};v(Kr,re),em=Kr.prototype,em.Bb=function(){return this.get("brightness")},em.Cb=function(){return this.get("contrast")},em.Db=function(){return this.get("hue")},em.G=function(){return this.get("extent")},em.Eb=function(){return this.get("maxResolution")},em.Fb=function(){return this.get("minResolution")},em.Kb=function(){return this.get("opacity")},em.Gb=function(){return this.get("saturation")},em.eb=function(){return this.get("visible")},em.gc=function(t){this.set("brightness",t)},em.hc=function(t){this.set("contrast",t)},em.ic=function(t){this.set("hue",t)},em.bc=function(t){this.set("extent",t)},em.jc=function(t){this.set("maxResolution",t)},em.kc=function(t){this.set("minResolution",t)},em.cc=function(t){this.set("opacity",t)},em.lc=function(t){this.set("saturation",t)},em.mc=function(t){this.set("visible",t)},v(Yr,Kr),em=Yr.prototype,em.Ue=function(e){return e=t(e)?e:[],e.push(Vr(this)),e},em.da=function(){var e=this.get("source");return t(e)?e:null},em.We=function(){var t=this.da();return null===t?"undefined":t.o},em.Kl=function(){this.k()},em.kk=function(){null!==this.f&&(zt(this.f),this.f=null);var t=this.da();null!==t&&(this.f=Ht(t,"change",this.Kl,!1,this)),this.k()},em.Jc=function(t){this.set("source",t)},v(_r,Qt),_r.prototype.G=function(){return this.extent},v(es,oe),em=es.prototype,em.Pa=o,em.dc=function(t,e,o,i){if(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t),this.Pa(t,e,lb,this))return o.call(i,this.a)},em.ee=pb,em.yd=function(t,e){return function(o,i){return Pn(t,o,i,function(t){e[o]||(e[o]={}),e[o][t.b.toString()]=t})}},em.Ol=function(t){2===t.target.state&&is(this)},em=hs.prototype,em.ie=function(){return this.U},em.Jd=function(){return this.V},em.je=function(){return this.q},em.ke=function(){return this.l},em.Kd=function(){return this.n},em.le=function(t){this.q=t},em.me=function(t){this.l=t},v(us,hs),em=us.prototype,em.mb=function(){if(null!==this.d)return this.d;var t=this.e,e=this.Xa();if("fraction"==this.g||"fraction"==this.i){if(null===e)return null;t=this.e.slice(),"fraction"==this.g&&(t[0]*=e[0]),"fraction"==this.i&&(t[1]*=e[1])}if("top-left"!=this.a){if(null===e)return null;t===this.e&&(t=this.e.slice()),"top-right"!=this.a&&"bottom-right"!=this.a||(t[0]=-t[0]+e[0]),"bottom-left"!=this.a&&"bottom-right"!=this.a||(t[1]=-t[1]+e[1])}return this.d=t},em.Lb=function(){return this.b.b},em.Dd=function(){return this.b.a},em.gd=function(){return this.b.c},em.he=function(){var t=this.b;if(null===t.e)if(t.i){var e=t.a[0],o=t.a[1],i=mr(e,o);i.fillRect(0,0,e,o),t.e=i.canvas}else t.e=t.b;return t.e},em.rb=function(){if(null!==this.f)return this.f;var t=this.p;if("top-left"!=this.c){var e=this.Xa(),o=this.b.a;if(null===e||null===o)return null;t=t.slice(),"top-right"!=this.c&&"bottom-right"!=this.c||(t[0]=o[0]-e[0]-t[0]),"bottom-left"!=this.c&&"bottom-right"!=this.c||(t[1]=o[1]-e[1]-t[1])}return this.f=t},em.Bm=function(){return this.b.f},em.Xa=function(){return null===this.o?this.b.a:this.o},em.$e=function(t,e){return Ht(this.b,"change",t,!1,e)},em.load=function(){this.b.load()},em.xf=function(t,e){Wt(this.b,"change",t,!1,e)},v(cs,Qt),cs.prototype.g=function(){this.c=3,E(this.d,zt),this.d=null,this.dispatchEvent("change")},cs.prototype.q=function(){this.c=2,this.a=[this.b.width,this.b.height],E(this.d,zt),this.d=null;var t=mr(1,1);t.drawImage(this.b,0,0);try{t.getImageData(0,0,1,1)}catch(e){this.i=!0}this.dispatchEvent("change")},cs.prototype.load=function(){if(0==this.c){this.c=1,this.d=[Xt(this.b,"error",this.g,!1,this),Xt(this.b,"load",this.q,!1,this)];try{this.b.src=this.f}catch(t){this.g()}}},i(fs),fs.prototype.clear=function(){this.b={},this.a=0},fs.prototype.get=function(t,e){var o=e+":"+t;return o in this.b?this.b[o]:null},fs.prototype.set=function(t,e,o){this.b[e+":"+t]=o,++this.a},v(ys,Tt),em=ys.prototype,em.O=function(){W(this.f,Ct),ys.S.O.call(this)},em.ef=function(t,e,o,i,n,r){function s(t){var e=c(t).toString();if(!(e in u))return u[e]=!0,o.call(i,t,null)}var a,p=e.viewState,l=p.resolution,h=p.rotation,u={},f=p.projection,p=t;if(f.c){var y=f.G(),f=no(y);a=t[0],(a<y[0]||a>y[2])&&(p=Math.ceil((y[0]-a)/f),p=[a+f*p,t[1]])}if(null!==this.c&&(a=this.c.c(p,l,h,{},s)))return a;for(h=e.layerStatesArray,f=h.length-1;0<=f;--f)if(a=h[f],y=a.layer,Zr(a,l)&&n.call(r,y)&&(a=vs(this,y).Pa(an(y.da())?p:t,e,o,i)))return a},em.Jg=function(t,e,o,i,n,r){var s,a=e.viewState,p=a.resolution,a=a.rotation;if(null!==this.c){var l=this.g.ka(t);if(this.c.c(l,p,a,{},lb)&&(s=o.call(i,null)))return s}for(a=e.layerStatesArray,l=a.length-1;0<=l;--l){s=a[l];var h=s.layer;if(Zr(s,p)&&n.call(r,h)&&(s=vs(this,h).dc(t,e,o,i)))return s}},em.Kg=function(e,o,i,n){return e=this.ef(e,o,lb,this,i,n),t(e)},em.Tj=function(){this.g.render()},em.ue=o,em.Pn=function(t,e){for(var o in this.f)if(!(null!==e&&o in e.layerStates)){var i=o,n=this.f[i];delete this.f[i],zt(this.o[i]),delete this.o[i],Ct(n)}},bs.prototype.clear=function(){this.b.length=0,this.a.length=0,tt(this.c)},bs.prototype.Tb=function(){return this.b.length},bs.prototype.la=function(){return 0===this.b.length},v(Cs,bs),Cs.prototype.f=function(t){t=t.target;var e=t.state;2!==e&&3!==e&&4!==e||(Wt(t,"change",this.f,!1,this),--this.d,this.i())},Es.prototype.update=function(t,e){this.b.push(t,e,lm())},v(As,re),As.prototype.c=function(){return this.get("active")},As.prototype.d=function(t){this.set("active",t)},As.prototype.setMap=function(t){this.l=t},v(js,As),v(qs,As),qs.prototype.nc=hn,v(Ws,qs),Ws.prototype.nc=pb,v(Ys,qs),Ys.prototype.nc=pb,v(Qs,re),Qs.prototype.e=function(e,o){var i=t(o)?o:[NaN,NaN];return this.Sa(e[0],e[1],i,1/0),i},Qs.prototype.Jb=pb,Qs.prototype.G=function(e){this.n!=this.b&&(this.o=this.wd(this.o),this.n=this.b);var o=this.o;return t(e)?(e[0]=o[0],e[1]=o[1],e[2]=o[2],e[3]=o[3]):e=o,e},Qs.prototype.transform=function(t,e){return this.qa(To(t,e)),this},v(ea,Qs),em=ea.prototype,em.Jb=pb,em.wd=function(t){var e=this.j,o=this.j.length,i=this.s;return t=qe(1/0,1/0,-(1/0),-(1/0),t),Ke(t,e,0,o,i)},em.ob=function(){return this.j.slice(0,this.s)},em.pb=function(){return this.j.slice(this.j.length-this.s)},em.qb=function(){return this.a},em.Ve=function(t){if(this.l!=this.b&&(tt(this.f),this.g=0,this.l=this.b),0>t||0!==this.g&&t<=this.g)return this;var e=t.toString();if(this.f.hasOwnProperty(e))return this.f[e];var o=this.xc(t);return o.j.length<this.j.length?this.f[e]=o:(this.g=t,this)},em.xc=function(){return this},em.qa=function(t){null!==this.j&&(t(this.j,this.j,this.s),this.k())},em.Oa=function(e,o){
+var i=this.j;if(null!==i){var n,r,s=i.length,a=this.s,p=t(i)?i:[],l=0;for(n=0;n<s;n+=a)for(p[l++]=i[n]+e,p[l++]=i[n+1]+o,r=n+2;r<n+a;++r)p[l++]=i[r];t(i)&&p.length!=l&&(p.length=l),this.k()}},v(xa,ea),em=xa.prototype,em.clone=function(){var t=new xa(null);return Sa(t,this.a,this.j.slice()),t},em.Sa=function(t,e,o,i){return i<Oe(this.G(),t,e)?i:(this.c!=this.b&&(this.i=Math.sqrt(ha(this.j,0,this.j.length,this.s,0)),this.c=this.b),ca(this.j,0,this.j.length,this.s,this.i,!0,t,e,o,i))},em.rl=function(){return ra(this.j,0,this.j.length,this.s)},em.K=function(){return va(this.j,0,this.j.length,this.s)},em.xc=function(t){var e=[];return e.length=ba(this.j,0,this.j.length,this.s,t,e,0),t=new xa(null),Sa(t,"XY",e),t},em.M=function(){return"LinearRing"},em.W=function(t,e){null===t?Sa(this,"XY",null):(na(this,e,t,1),null===this.j&&(this.j=[]),this.j.length=da(this.j,0,t,this.s),this.k())},v(Ta,ea),em=Ta.prototype,em.clone=function(){var t=new Ta(null);return Ma(t,this.a,this.j.slice()),t},em.Sa=function(t,e,o,i){var n=this.j;if(t=pa(t,e,n[0],n[1]),t<i){for(i=this.s,e=0;e<i;++e)o[e]=n[e];return o.length=i,t}return i},em.K=function(){return null===this.j?[]:this.j.slice()},em.wd=function(t){return $e(this.j,t)},em.M=function(){return"Point"},em.ra=function(t){return Ue(t,this.j[0],this.j[1])},em.W=function(t,e){null===t?Ma(this,"XY",null):(na(this,e,t,0),null===this.j&&(this.j=[]),this.j.length=ya(this.j,t),this.k())},v(Fa,ea),em=Fa.prototype,em.wi=function(t){null===this.j?this.j=t.j.slice():F(this.j,t.j),this.c.push(this.j.length),this.k()},em.clone=function(){var t=new Fa(null);return Ua(t,this.a,this.j.slice(),this.c.slice()),t},em.Sa=function(t,e,o,i){return i<Oe(this.G(),t,e)?i:(this.J!=this.b&&(this.L=Math.sqrt(ua(this.j,0,this.c,this.s,0)),this.J=this.b),fa(this.j,0,this.c,this.s,this.L,!0,t,e,o,i))},em.Jb=function(t,e){return Pa(Ba(this),0,this.c,this.s,t,e)},em.ul=function(){return sa(Ba(this),0,this.c,this.s)},em.K=function(e){var o;return t(e)?(o=Ba(this).slice(),Ia(o,0,this.c,this.s,e)):o=this.j,ma(o,0,this.c,this.s)},em.cj=function(){return new Ta(Oa(this))},em.ij=function(){return this.c.length},em.hj=function(t){if(0>t||this.c.length<=t)return null;var e=new xa(null);return Sa(e,this.a,this.j.slice(0===t?0:this.c[t-1],this.c[t])),e},em.Ed=function(){var t,e,o=this.a,i=this.j,n=this.c,r=[],s=0;for(t=0,e=n.length;t<e;++t){var a=n[t],p=new xa(null);Sa(p,o,i.slice(s,a)),r.push(p),s=a}return r},em.xc=function(t){var e=[],o=[];return e.length=wa(this.j,0,this.c,this.s,Math.sqrt(t),e,0,o),t=new Fa(null),Ua(t,"XY",e,o),t},em.M=function(){return"Polygon"},em.ra=function(t){return La(Ba(this),0,this.c,this.s,t)},em.W=function(t,e){if(null===t)Ua(this,"XY",null,this.c);else{na(this,e,t,2),null===this.j&&(this.j=[]);var o=ga(this.j,0,t,this.s,this.c);this.j.length=0===o.length?0:o[o.length-1],this.k()}},v(qa,Et),v($a,Tt),$a.prototype.O=function(){this.setMap(null)},$a.prototype.g=function(t){var e=this.c,o=this.f;t.vectorContext.tc(1/0,function(t){t.Aa(o.e,o.c),t.Ba(o.a),t.Rb(e,null)})},$a.prototype.Q=function(){return this.c},$a.prototype.setMap=function(t){null!==this.d&&(zt(this.d),this.d=null,this.b.render(),this.b=null),this.b=t,null!==this.b&&(this.d=Ht(t,"postcompose",this.g,!1,this),Wa(this))},v(za,Et),v(Ka,qs),Ka.prototype.Q=function(){return this.f.Q()},Ka.prototype.g=o,v(Ja,_a),Ja.prototype.update=function(e,o){t(o)||(o=e.length);for(var i=o-this.a,n=this.e,r=this.c,s=0;s<o;){if(0==r)for(;s<=i;)Qa(this,e,s),s+=this.a;if(p(e)){for(;s<o;)if(n[r++]=e.charCodeAt(s++),r==this.a){Qa(this,n),r=0;break}}else for(;s<o;)if(n[r++]=e[s++],r==this.a){Qa(this,n),r=0;break}}this.c=r,this.d+=o},em=tp.prototype,em.Hm=function(){return this.b},em.ej=function(){return this.d},em.Im=function(){return this.c},em.fj=function(){return this.e},em.lj=function(){return this.f},em.Jm=function(){return this.a},em.Km=function(t){this.b=t,this.g=void 0},em.Zn=function(t){this.d=t,this.g=void 0},em.Lm=function(t){this.c=t,this.g=void 0},em.$n=function(t){this.e=t,this.g=void 0},em.ao=function(t){this.f=t,this.g=void 0},em.ko=function(t){this.a=t,this.g=void 0},em.nb=function(){if(!t(this.g)){var e="s"+(null===this.b?"-":ni(this.b))+","+(t(this.d)?this.d.toString():"-")+","+(null===this.c?"-":this.c.toString())+","+(t(this.e)?this.e:"-")+","+(t(this.f)?this.f.toString():"-")+","+(t(this.a)?this.a.toString():"-"),o=new Ja;o.update(e);var i=Array((56>o.c?o.a:2*o.a)-o.c);for(i[0]=128,e=1;e<i.length-8;++e)i[e]=0;for(var n=8*o.d,e=i.length-8;e<i.length;++e)i[e]=255&n,n/=256;for(o.update(i),i=Array(16),e=n=0;4>e;++e)for(var r=0;32>r;r+=8)i[n++]=o.b[e]>>>r&255;if(8192>i.length)o=String.fromCharCode.apply(null,i);else for(o="",e=0;e<i.length;e+=8192)o+=String.fromCharCode.apply(null,B(i,e,e+8192));this.g=o}return this.g};var ow=[0,0,0,1],iw=[],nw=[0,0,0,1];ep.prototype.c=function(){return this.b},ep.prototype.d=function(t){this.b=t,this.a=void 0},ep.prototype.nb=function(){return t(this.a)||(this.a="f"+(null===this.b?"-":ni(this.b))),this.a},v(op,hs),em=op.prototype,em.mb=function(){return this.g},em.ym=function(){return this.d},em.he=function(){return this.f},em.Lb=function(){return this.b},em.gd=function(){return 2},em.Dd=function(){return this.i},em.rb=function(){return this.o},em.zm=function(){return this.c},em.Xa=function(){return this.p},em.Am=function(){return this.a},em.$e=o,em.load=o,em.xf=o,em.Sg=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),e.arc(t.size/2,t.size/2,this.c,0,2*Math.PI,!0),null!==this.d&&(e.fillStyle=ni(this.d.b),e.fill()),null!==this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.md,null===t.lineDash||e.setLineDash(t.lineDash),e.stroke()),e.closePath()},em.Rg=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),e.arc(t.size/2,t.size/2,this.c,0,2*Math.PI,!0),e.fillStyle=ow,e.fill(),null!==this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.md,null===t.lineDash||e.setLineDash(t.lineDash),e.stroke()),e.closePath()},em.nb=function(){var e=null===this.a?"-":this.a.nb(),o=null===this.d?"-":this.d.nb();return null!==this.e&&e==this.e[1]&&o==this.e[2]&&this.c==this.e[3]||(this.e=["c"+e+o+(t(this.c)?this.c.toString():"-"),e,o,this.c]),this.e[0]},em=ip.prototype,em.Q=function(){return this.g},em.Zi=function(){return this.d},em.Mm=function(){return this.e},em.Nm=function(){return this.f},em.Om=function(){return this.c},em.Pm=function(){return this.a},em.Dj=function(){return this.b},em.Vg=function(e){h(e)?this.d=e:p(e)?this.d=function(t){return t.get(e)}:null===e?this.d=ap:t(e)&&(this.d=function(){return e}),this.g=e},em.mo=function(t){this.b=t},v(pp,Ka),pp.prototype.g=function(){var t=this.l,e=t.R(),o=this.Q().G(),i=_e(o),n=t.xa(),o=Ro(o,n),n=this.n,o=e.constrainResolution(o,0,void 0);Ns(t,e,o,i,n)},v(lp,As),v(up,As),v(fp,As),fp.prototype.i=function(t){var e=lt(this.a,-1,1),o=t.R();t.render(),Ls(t,o,-e,this.f,this.o),this.a=0,this.f=null,this.g=this.e=void 0},v(dp,qs),dp.prototype.nc=pb,v(bp,qs),bp.prototype.nc=pb,v(Mp,Kr),em=Mp.prototype,em.Qd=function(){this.eb()&&this.k()},em.Vj=function(){E(this.c,zt),this.c.length=0;var t=this.Bc();this.c.push(Ht(t,"add",this.Uj,!1,this),Ht(t,"remove",this.Wj,!1,this)),W(this.a,function(t){E(t,zt)}),tt(this.a);var e,o,i,t=t.a;for(e=0,o=t.length;e<o;e++)i=t[e],this.a[c(i).toString()]=[Ht(i,"propertychange",this.Qd,!1,this),Ht(i,"change",this.Qd,!1,this)];this.k()},em.Uj=function(t){t=t.element;var e=c(t).toString();this.a[e]=[Ht(t,"propertychange",this.Qd,!1,this),Ht(t,"change",this.Qd,!1,this)],this.k()},em.Wj=function(t){t=c(t.element).toString(),E(this.a[t],zt),delete this.a[t],this.k()},em.Bc=function(){return this.get("layers")},em.Ah=function(t){this.set("layers",t)},em.Ue=function(e){var o=t(e)?e:[],i=o.length;this.Bc().forEach(function(t){t.Ue(o)}),e=Vr(this);var n,r;for(n=o.length;i<n;i++)r=o[i],r.brightness=lt(r.brightness+e.brightness,-1,1),r.contrast*=e.contrast,r.hue+=e.hue,r.opacity*=e.opacity,r.saturation*=e.saturation,r.visible=r.visible&&e.visible,r.maxResolution=Math.min(r.maxResolution,e.maxResolution),r.minResolution=Math.max(r.minResolution,e.minResolution),t(e.extent)&&(r.extent=t(r.extent)?eo(r.extent,e.extent):e.extent);return o},em.We=function(){return"ready"},v(Cp,ho),Cp.prototype.getPointResolution=function(t,e){var o=e[1]/6378137;return t/((Math.exp(o)+Math.exp(-o))/2)};var rw=6378137*Math.PI,sw=[-rw,-rw,rw,rw],aw=[-180,-85,180,85],pw=k("EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" "),function(t){return new Cp(t)});v(kp,ho),kp.prototype.getPointResolution=function(t){return t};var lw=[-180,-90,180,90],hw=[new kp("CRS:84"),new kp("EPSG:4326","neu"),new kp("urn:ogc:def:crs:EPSG::4326","neu"),new kp("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new kp("urn:ogc:def:crs:OGC:1.3:CRS84"),new kp("urn:ogc:def:crs:OGC:2:84"),new kp("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new kp("urn:x-ogc:def:crs:EPSG:4326","neu")];v(Rp,Yr),v(Lp,Yr),Lp.prototype.a=function(){return this.get("preload")},Lp.prototype.d=function(t){this.set("preload",t)},Lp.prototype.c=function(){return this.get("useInterimTilesOnError")},Lp.prototype.e=function(t){this.set("useInterimTilesOnError",t)},v(Np,Yr),Np.prototype.H=function(){return this.g},Np.prototype.J=function(){return this.a},Np.prototype.e=function(e){this.g=t(e)?e:rp,this.a=null===e?void 0:np(this.g),this.k()},em=jp.prototype,em.tc=function(e,o){var i=e.toString(),n=this.U[i];t(n)?n.push(o):this.U[i]=[o]},em.uc=function(t){if(ro(this.e,t.G())){if(null!==this.a||null!==this.b){null===this.a||Up(this,this.a),null===this.b||Gp(this,this.b);var e;e=t.j,e=null===e?null:ta(e,0,e.length,t.s,this.H,this.V);var o=e[2]-e[0],i=e[3]-e[1],o=Math.sqrt(o*o+i*i),i=this.c;i.beginPath(),i.arc(e[0],e[1],o,0,2*Math.PI),null===this.a||i.fill(),null===this.b||i.stroke()}""!==this.d&&Dp(this,t.dd(),2,2)}},em.Le=function(e,o){var i=(0,o.d)(e);if(null!=i&&ro(this.e,i.G())){var n=o.b;t(n)||(n=0),this.tc(n,function(t){t.Aa(o.e,o.c),t.Za(o.f),t.Ba(o.a),uw[i.M()].call(t,i,null)})}},em.zd=function(t,e){var o,i,n=t.d;for(o=0,i=n.length;o<i;++o){var r=n[o];uw[r.M()].call(this,r,e)}},em.kb=function(t){var e=t.j;t=t.s,null===this.f||Ip(this,e,e.length),""!==this.d&&Dp(this,e,e.length,t)},em.jb=function(t){var e=t.j;t=t.s,null===this.f||Ip(this,e,e.length),""!==this.d&&Dp(this,e,e.length,t)},em.zb=function(t){if(ro(this.e,t.G())){if(null!==this.b){Gp(this,this.b);var e=this.c,o=t.j;e.beginPath(),Fp(this,o,0,o.length,t.s,!1),e.stroke()}""!==this.d&&(t=bl(t),Dp(this,t,2,2))}},em.vc=function(t){var e=t.G();if(ro(this.e,e)){if(null!==this.b){Gp(this,this.b);var e=this.c,o=t.j,i=0,n=t.c,r=t.s;e.beginPath();var s,a;for(s=0,a=n.length;s<a;++s)i=Fp(this,o,i,n[s],r,!1);e.stroke()}""!==this.d&&(t=Sl(t),Dp(this,t,t.length,2))}},em.Rb=function(t){if(ro(this.e,t.G())){if(null!==this.b||null!==this.a){null===this.a||Up(this,this.a),null===this.b||Gp(this,this.b);var e=this.c;e.beginPath(),Op(this,Ba(t),0,t.c,t.s),null===this.a||e.fill(),null===this.b||e.stroke()}""!==this.d&&(t=Oa(t),Dp(this,t,2,2))}},em.wc=function(t){if(ro(this.e,t.G())){if(null!==this.b||null!==this.a){null===this.a||Up(this,this.a),null===this.b||Gp(this,this.b);var e,o,i=this.c,n=kl(t),r=0,s=t.c,a=t.s;for(e=0,o=s.length;e<o;++e){var p=s[e];i.beginPath(),r=Op(this,n,r,p,a),null===this.a||i.fill(),null===this.b||i.stroke()}}""!==this.d&&(t=Pl(t),Dp(this,t,t.length,2))}},em.Aa=function(e,o){if(null===e)this.a=null;else{var i=e.b;this.a={fillStyle:ni(null===i?ow:i)}}if(null===o)this.b=null;else{var i=o.b,n=o.d,r=o.c,s=o.e,a=o.a,p=o.f;this.b={lineCap:t(n)?n:"round",lineDash:null!=r?r:iw,lineJoin:t(s)?s:"round",lineWidth:this.n*(t(a)?a:1),miterLimit:t(p)?p:10,strokeStyle:ni(null===i?nw:i)}}},em.Za=function(t){if(null===t)this.f=null;else{var e=t.mb(),o=t.Lb(1),i=t.rb(),n=t.Xa();this.J=e[0],this.L=e[1],this.N=n[1],this.f=o,this.o=t.U,this.Fa=i[0],this.Ga=i[1],this.Ra=t.V,this.rc=t.q,this.g=t.l,this.vb=t.n,this.T=n[0]}},em.Ba=function(e){if(null===e)this.d="";else{var o=e.b;null===o?this.i=null:(o=o.b,this.i={fillStyle:ni(null===o?ow:o)});var i=e.f;if(null===i)this.l=null;else{var o=i.b,n=i.d,r=i.c,s=i.e,a=i.a,i=i.f;this.l={lineCap:t(n)?n:"round",lineDash:null!=r?r:iw,lineJoin:t(s)?s:"round",lineWidth:t(a)?a:1,miterLimit:t(i)?i:10,strokeStyle:ni(null===o?nw:o)}}var o=e.d,n=e.q,r=e.l,s=e.e,a=e.a,i=e.c,p=e.g;e=e.i,this.sa={font:t(o)?o:"10px sans-serif",textAlign:t(p)?p:"center",textBaseline:t(e)?e:"middle"},this.d=t(i)?i:"",this.wb=t(n)?this.n*n:0,this.xb=t(r)?this.n*r:0,this.p=t(s)?s:0,this.q=this.n*(t(a)?a:1)}};var uw={Point:jp.prototype.kb,LineString:jp.prototype.zb,Polygon:jp.prototype.Rb,MultiPoint:jp.prototype.jb,MultiLineString:jp.prototype.vc,MultiPolygon:jp.prototype.wc,GeometryCollection:jp.prototype.zd,Circle:jp.prototype.uc},cw=["Polygon","LineString","Image","Text"];v(Hp,Ha),Hp.prototype.de=o,Hp.prototype.Pe=function(){return this.T},v(Kp,Hp),Kp.prototype.kb=function(t,e){if(null!==this.i){$p(this,e);var o=t.j,i=this.coordinates.length,o=qp(this,o,0,o.length,t.s,!1);this.a.push([4,i,o,this.i,this.c,this.f,this.g,this.q,this.l,this.o,this.U,this.V,this.n,this.p,this.H]),this.b.push([4,i,o,this.N,this.c,this.f,this.g,this.q,this.l,this.o,this.U,this.V,this.n,this.p,this.H]),zp(this,e)}},Kp.prototype.jb=function(t,e){if(null!==this.i){$p(this,e);var o=t.j,i=this.coordinates.length,o=qp(this,o,0,o.length,t.s,!1);this.a.push([4,i,o,this.i,this.c,this.f,this.g,this.q,this.l,this.o,this.U,this.V,this.n,this.p,this.H]),this.b.push([4,i,o,this.N,this.c,this.f,this.g,this.q,this.l,this.o,this.U,this.V,this.n,this.p,this.H]),zp(this,e)}},Kp.prototype.de=function(){Wp(this),this.f=this.c=void 0,this.i=this.N=null,this.H=this.p=this.V=this.U=this.o=this.l=this.q=this.n=this.g=void 0},Kp.prototype.Za=function(t){var e=t.mb(),o=t.Xa(),i=t.he(1),n=t.Lb(1),r=t.rb();this.c=e[0],this.f=e[1],this.N=i,this.i=n,this.g=o[1],this.q=t.U,this.l=r[0],this.o=r[1],this.U=t.V,this.V=t.q,this.n=t.l,this.p=t.n,this.H=o[0]},v(Vp,Hp),em=Vp.prototype,em.Pe=function(){return null===this.d&&(this.d=Fe(this.T),0<this.e&&De(this.d,this.resolution*(this.e+1)/2,this.d)),this.d},em.zb=function(e,o){var i=this.c,n=i.lineWidth;t(i.strokeStyle)&&t(n)&&(Zp(this),$p(this,o),this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash],[1]),i=e.j,Yp(this,i,0,i.length,e.s),this.b.push([12]),zp(this,o))},em.vc=function(e,o){var i=this.c,n=i.lineWidth;if(t(i.strokeStyle)&&t(n)){Zp(this),$p(this,o),this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash],[1]);var r,s,i=e.c,n=e.j,a=e.s,p=0;for(r=0,s=i.length;r<s;++r)p=Yp(this,n,p,i[r],a);this.b.push([12]),zp(this,o)}},em.de=function(){this.c.Ze!=this.coordinates.length&&this.a.push([12]),Wp(this),this.c=null},em.Aa=function(e,o){var i=o.b;this.c.strokeStyle=ni(null===i?nw:i),i=o.d,this.c.lineCap=t(i)?i:"round",i=o.c,this.c.lineDash=null===i?iw:i,i=o.e,this.c.lineJoin=t(i)?i:"round",i=o.a,this.c.lineWidth=t(i)?i:1,i=o.f,this.c.miterLimit=t(i)?i:10,this.c.lineWidth>this.e&&(this.e=this.c.lineWidth,this.d=null)},v(_p,Hp),em=_p.prototype,em.uc=function(e,o){var i=this.c,n=i.strokeStyle;if(t(i.fillStyle)||t(n)){Qp(this),$p(this,o),this.b.push([9,ni(ow)]),t(i.strokeStyle)&&this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash]);var r=e.j,n=this.coordinates.length;qp(this,r,0,r.length,e.s,!1),r=[1],n=[2,n],this.a.push(r,n),this.b.push(r,n),n=[7],this.b.push(n),t(i.fillStyle)&&this.a.push(n),t(i.strokeStyle)&&(i=[12],this.a.push(i),this.b.push(i)),zp(this,o)}},em.Rb=function(e,o){var i=this.c,n=i.strokeStyle;(t(i.fillStyle)||t(n))&&(Qp(this),$p(this,o),this.b.push([9,ni(ow)]),t(i.strokeStyle)&&this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash]),i=e.c,n=Ba(e),Jp(this,n,0,i,e.s),zp(this,o))},em.wc=function(e,o){var i=this.c,n=i.strokeStyle;if(t(i.fillStyle)||t(n)){Qp(this),$p(this,o),this.b.push([9,ni(ow)]),t(i.strokeStyle)&&this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash]);var r,s,i=e.c,n=kl(e),a=e.s,p=0;for(r=0,s=i.length;r<s;++r)p=Jp(this,n,p,i[r],a);zp(this,o)}},em.de=function(){Wp(this),this.c=null;var t=this.oa;if(0!==t){var e,o,i=this.coordinates;for(e=0,o=i.length;e<o;++e)i[e]=t*Math.round(i[e]/t)}},em.Pe=function(){return null===this.d&&(this.d=Fe(this.T),0<this.e&&De(this.d,this.resolution*(this.e+1)/2,this.d)),this.d},em.Aa=function(e,o){var i=this.c;if(null===e)i.fillStyle=void 0;else{var n=e.b;i.fillStyle=ni(null===n?ow:n)}null===o?(i.strokeStyle=void 0,i.lineCap=void 0,i.lineDash=null,i.lineJoin=void 0,i.lineWidth=void 0,i.miterLimit=void 0):(n=o.b,i.strokeStyle=ni(null===n?nw:n),n=o.d,i.lineCap=t(n)?n:"round",n=o.c,i.lineDash=null===n?iw:n.slice(),n=o.e,i.lineJoin=t(n)?n:"round",n=o.a,i.lineWidth=t(n)?n:1,n=o.f,i.miterLimit=t(n)?n:10,i.lineWidth>this.e&&(this.e=i.lineWidth,this.d=null))},v(tl,Hp),tl.prototype.lb=function(t,e,o,i,n,r){if(""!==this.i&&null!==this.g&&(null!==this.c||null!==this.f)){if(null!==this.c){n=this.c;var s=this.V;if(null===s||s.fillStyle!=n.fillStyle){var a=[9,n.fillStyle];this.a.push(a),this.b.push(a),null===s?this.V={fillStyle:n.fillStyle}:s.fillStyle=n.fillStyle}}null!==this.f&&(n=this.f,s=this.n,null===s||s.lineCap!=n.lineCap||s.lineDash!=n.lineDash||s.lineJoin!=n.lineJoin||s.lineWidth!=n.lineWidth||s.miterLimit!=n.miterLimit||s.strokeStyle!=n.strokeStyle)&&(a=[10,n.strokeStyle,n.lineWidth,n.lineCap,n.lineJoin,n.miterLimit,n.lineDash,!1],this.a.push(a),this.b.push(a),null===s?this.n={lineCap:n.lineCap,lineDash:n.lineDash,lineJoin:n.lineJoin,lineWidth:n.lineWidth,miterLimit:n.miterLimit,strokeStyle:n.strokeStyle}:(s.lineCap=n.lineCap,s.lineDash=n.lineDash,s.lineJoin=n.lineJoin,s.lineWidth=n.lineWidth,s.miterLimit=n.miterLimit,s.strokeStyle=n.strokeStyle)),n=this.g,s=this.p,null!==s&&s.font==n.font&&s.textAlign==n.textAlign&&s.textBaseline==n.textBaseline||(a=[11,n.font,n.textAlign,n.textBaseline],this.a.push(a),this.b.push(a),null===s?this.p={font:n.font,textAlign:n.textAlign,textBaseline:n.textBaseline}:(s.font=n.font,s.textAlign=n.textAlign,s.textBaseline=n.textBaseline)),$p(this,r),n=this.coordinates.length,t=qp(this,t,e,o,i,!1),t=[5,n,t,this.i,this.q,this.l,this.o,this.U,null!==this.c,null!==this.f],this.a.push(t),this.b.push(t),zp(this,r)}},tl.prototype.Ba=function(e){if(null===e)this.i="";else{var o=e.b;null===o?this.c=null:(o=o.b,o=ni(null===o?ow:o),null===this.c?this.c={fillStyle:o}:this.c.fillStyle=o);var i=e.f;if(null===i)this.f=null;else{var o=i.b,n=i.d,r=i.c,s=i.e,a=i.a,i=i.f,n=t(n)?n:"round",r=null!=r?r.slice():iw,s=t(s)?s:"round",a=t(a)?a:1,i=t(i)?i:10,o=ni(null===o?nw:o);if(null===this.f)this.f={lineCap:n,lineDash:r,lineJoin:s,lineWidth:a,miterLimit:i,strokeStyle:o};else{var p=this.f;p.lineCap=n,p.lineDash=r,p.lineJoin=s,p.lineWidth=a,p.miterLimit=i,p.strokeStyle=o}}var l=e.d,o=e.q,n=e.l,r=e.e,a=e.a,i=e.c,s=e.g,p=e.i;e=t(l)?l:"10px sans-serif",s=t(s)?s:"center",p=t(p)?p:"middle",null===this.g?this.g={font:e,textAlign:s,textBaseline:p}:(l=this.g,l.font=e,l.textAlign=s,l.textBaseline=p),this.i=t(i)?i:"",this.q=t(o)?o:0,this.l=t(n)?n:0,this.o=t(r)?r:0,this.U=t(a)?a:1}},el.prototype.c=function(e,o,i,n,r){var s=this.g;Jr(s,.5,.5,1/o,-1/o,-i,-e[0],-e[1]);var a=this.f;a.clearRect(0,0,1,1);var p;return t(this.e)&&(p=He(),ze(p,e),De(p,o*this.e,p)),nl(this,a,s,i,n,function(t){if(0<a.getImageData(0,0,1,1).data[3]){if(t=r(t))return t;a.clearRect(0,0,1,1)}},p)},el.prototype.b=function(e,o){var i=t(e)?e.toString():"0",n=this.a[i];return t(n)||(n={},this.a[i]=n),i=n[o],t(i)||(i=new fw[o](this.q,this.d,this.i),n[o]=i),i},el.prototype.la=function(){return Q(this.a)};var fw={Image:Kp,LineString:Vp,Polygon:_p,Text:tl};v(rl,es),rl.prototype.o=function(e,o,i){sl(this,"precompose",i,e,void 0);var n=this.fe();if(null!==n){var r=o.extent,s=t(r);if(s){var a=e.pixelRatio,p=oo(r),l=io(r),h=Ze(r),r=Ye(r);ts(e.coordinateToPixelMatrix,p,p),ts(e.coordinateToPixelMatrix,l,l),ts(e.coordinateToPixelMatrix,h,h),ts(e.coordinateToPixelMatrix,r,r),i.save(),i.beginPath(),i.moveTo(p[0]*a,p[1]*a),i.lineTo(l[0]*a,l[1]*a),i.lineTo(h[0]*a,h[1]*a),i.lineTo(r[0]*a,r[1]*a),i.clip()}a=this.Xf(),p=i.globalAlpha,i.globalAlpha=o.opacity,0===e.viewState.rotation?(o=a[13],l=n.width*a[0],h=n.height*a[5],i.drawImage(n,0,0,+n.width,+n.height,Math.round(a[12]),Math.round(o),Math.round(l),Math.round(h))):(i.setTransform(a[0],a[1],a[4],a[5],a[12],a[13]),i.drawImage(n,0,0),i.setTransform(1,0,0,1,0,0)),i.globalAlpha=p,s&&i.restore()}sl(this,"postcompose",i,e,void 0)};var yw=function(){var t=null,e=null;return function(o){if(null===t){t=mr(1,1),e=t.createImageData(1,1);var i=e.data;i[0]=42,i[1]=84,i[2]=126,i[3]=255}var i=t.canvas,n=o[0]<=i.width&&o[1]<=i.height;return n||(i.width=o[0],i.height=o[1],i=o[0]-1,o=o[1]-1,t.putImageData(e,i,o),o=t.getImageData(i,o,1,1),n=G(e.data,o.data)),n}}();v(ll,ea),em=ll.prototype,em.clone=function(){var t=new ll(null);return ia(t,this.a,this.j.slice()),t.k(),t},em.Sa=function(t,e,o,i){var n=this.j;t-=n[0];var r=e-n[1];if(e=t*t+r*r,e<i){if(0===e)for(i=0;i<this.s;++i)o[i]=n[i];else for(i=this.zg()/Math.sqrt(e),o[0]=n[0]+i*t,o[1]=n[1]+i*r,i=2;i<this.s;++i)o[i]=n[i];return o.length=this.s,e}return i},em.Jb=function(t,e){var o=this.j,i=t-o[0],o=e-o[1];return i*i+o*o<=hl(this)},em.dd=function(){return this.j.slice(0,this.s)},em.wd=function(t){var e=this.j,o=e[this.s]-e[0];return qe(e[0]-o,e[1]-o,e[0]+o,e[1]+o,t)},em.zg=function(){return Math.sqrt(hl(this))},em.M=function(){return"Circle"},em.pl=function(t){var e=this.s,o=t.slice();o[e]=o[0]+(this.j[e]-this.j[0]);var i;for(i=1;i<e;++i)o[e+i]=t[i];ia(this,this.a,o),this.k()},em.uh=function(t,e,o){if(null===t)ia(this,"XY",null);else{na(this,o,t,0),null===this.j&&(this.j=[]),o=this.j,t=ya(o,t),o[t++]=o[0]+e;var i;for(e=1,i=this.s;e<i;++e)o[t++]=o[e];o.length=t}this.k()},em.Ag=function(t){this.j[this.s]=this.j[0]+t,this.k()},v(ul,Qs),em=ul.prototype,em.clone=function(){var t=new ul(null);return t.xh(this.d),t},em.Sa=function(t,e,o,i){if(i<Oe(this.G(),t,e))return i;var n,r,s=this.d;for(n=0,r=s.length;n<r;++n)i=s[n].Sa(t,e,o,i);return i},em.Jb=function(t,e){var o,i,n=this.d;for(o=0,i=n.length;o<i;++o)if(n[o].Jb(t,e))return!0;return!1},em.wd=function(t){qe(1/0,1/0,-(1/0),-(1/0),t);for(var e=this.d,o=0,i=e.length;o<i;++o)We(t,e[o].G());return t},em.Vf=function(){return cl(this.d)},em.Ve=function(t){if(this.l!=this.b&&(tt(this.f),this.g=0,this.l=this.b),0>t||0!==this.g&&t<this.g)return this;var e=t.toString();if(this.f.hasOwnProperty(e))return this.f[e];var o,i,n=[],r=this.d,s=!1;for(o=0,i=r.length;o<i;++o){var a=r[o],p=a.Ve(t);n.push(p),p!==a&&(s=!0)}return s?(t=new ul(null),fl(t),t.d=n,yl(t),t.k(),this.f[e]=t):(this.g=t,this)},em.M=function(){return"GeometryCollection"},em.ra=function(t){var e,o,i=this.d;for(e=0,o=i.length;e<o;++e)if(i[e].ra(t))return!0;return!1},em.la=function(){return 0==this.d.length},em.xh=function(t){t=cl(t),fl(this),this.d=t,yl(this),this.k()},em.qa=function(t){var e,o,i=this.d;for(e=0,o=i.length;e<o;++e)i[e].qa(t);this.k()},em.Oa=function(t,e){var o,i,n=this.d;for(o=0,i=n.length;o<i;++o)n[o].Oa(t,e);this.k()},em.O=function(){fl(this),ul.S.O.call(this)},v(ml,ea),em=ml.prototype,em.ui=function(t){null===this.j?this.j=t.slice():F(this.j,t),this.k()},em.clone=function(){var t=new ml(null);return wl(t,this.a,this.j.slice()),t},em.Sa=function(t,e,o,i){return i<Oe(this.G(),t,e)?i:(this.p!=this.b&&(this.H=Math.sqrt(ha(this.j,0,this.j.length,this.s,0)),this.p=this.b),ca(this.j,0,this.j.length,this.s,this.H,!1,t,e,o,i))},em.Ji=function(t,e){return Aa(this.j,0,this.j.length,this.s,t,e)},em.ql=function(e,o){return"XYM"!=this.a&&"XYZM"!=this.a?null:gl(this.j,0,this.j.length,this.s,e,!!t(o)&&o)},em.K=function(){return va(this.j,0,this.j.length,this.s)},em.Bg=function(){var t,e=this.j,o=this.s,i=e[0],n=e[1],r=0;for(t=0+o;t<this.j.length;t+=o)var s=e[t],a=e[t+1],r=r+Math.sqrt((s-i)*(s-i)+(a-n)*(a-n)),i=s,n=a;return r},em.xc=function(t){var e=[];return e.length=ba(this.j,0,this.j.length,this.s,t,e,0),t=new ml(null),wl(t,"XY",e),t},em.M=function(){return"LineString"},em.ra=function(t){return Ra(this.j,0,this.j.length,this.s,t)},em.W=function(t,e){null===t?wl(this,"XY",null):(na(this,e,t,1),null===this.j&&(this.j=[]),this.j.length=da(this.j,0,t,this.s),this.k())},v(xl,ea),em=xl.prototype,em.vi=function(t){null===this.j?this.j=t.j.slice():F(this.j,t.j.slice()),this.c.push(this.j.length),this.k()},em.clone=function(){var t=new xl(null);return Tl(t,this.a,this.j.slice(),this.c.slice()),t},em.Sa=function(t,e,o,i){return i<Oe(this.G(),t,e)?i:(this.i!=this.b&&(this.p=Math.sqrt(ua(this.j,0,this.c,this.s,0)),this.i=this.b),fa(this.j,0,this.c,this.s,this.p,!1,t,e,o,i))},em.sl=function(e,o,i){return"XYM"!=this.a&&"XYZM"!=this.a||0===this.j.length?null:vl(this.j,this.c,this.s,e,!!t(o)&&o,!!t(i)&&i)},em.K=function(){return ma(this.j,0,this.c,this.s)},em.gj=function(t){if(0>t||this.c.length<=t)return null;var e=new ml(null);return wl(e,this.a,this.j.slice(0===t?0:this.c[t-1],this.c[t])),e},em.ad=function(){var t,e,o=this.j,i=this.c,n=this.a,r=[],s=0;for(t=0,e=i.length;t<e;++t){var a=i[t],p=new ml(null);wl(p,n,o.slice(s,a)),r.push(p),s=a}return r},em.xc=function(t){var e,o,i=[],n=[],r=this.j,s=this.c,a=this.s,p=0,l=0;for(e=0,o=s.length;e<o;++e){var h=s[e],l=ba(r,p,h,a,t,i,l);n.push(l),p=h}return i.length=l,t=new xl(null),Tl(t,"XY",i,n),t},em.M=function(){return"MultiLineString"},em.ra=function(t){t:{var e,o,i=this.j,n=this.c,r=this.s,s=0;for(e=0,o=n.length;e<o;++e){if(Ra(i,s,n[e],r,t)){t=!0;break t}s=n[e]}t=!1}return t},em.W=function(t,e){if(null===t)Tl(this,"XY",null,this.c);else{na(this,e,t,2),null===this.j&&(this.j=[]);var o=ga(this.j,0,t,this.s,this.c);this.j.length=0===o.length?0:o[o.length-1],this.k()}},v(Cl,ea),em=Cl.prototype,em.xi=function(t){null===this.j?this.j=t.j.slice():F(this.j,t.j),this.k()},em.clone=function(){var t=new Cl(null);return ia(t,this.a,this.j.slice()),t.k(),t},em.Sa=function(t,e,o,i){if(i<Oe(this.G(),t,e))return i;var n,r,s,a=this.j,p=this.s;for(n=0,r=a.length;n<r;n+=p)if(s=pa(t,e,a[n],a[n+1]),s<i){for(i=s,s=0;s<p;++s)o[s]=a[n+s];o.length=p}return i},em.K=function(){return va(this.j,0,this.j.length,this.s)},em.qj=function(t){var e=null===this.j?0:this.j.length/this.s;return 0>t||e<=t?null:(e=new Ta(null),Ma(e,this.a,this.j.slice(t*this.s,(t+1)*this.s)),e)},em.ce=function(){var t,e,o=this.j,i=this.a,n=this.s,r=[];for(t=0,e=o.length;t<e;t+=n){var s=new Ta(null);Ma(s,i,o.slice(t,t+n)),r.push(s)}return r},em.M=function(){return"MultiPoint"},em.ra=function(t){var e,o,i,n,r=this.j,s=this.s;for(e=0,o=r.length;e<o;e+=s)if(i=r[e],n=r[e+1],Ue(t,i,n))return!0;return!1},em.W=function(t,e){null===t?ia(this,"XY",null):(na(this,e,t,1),null===this.j&&(this.j=[]),this.j.length=da(this.j,0,t,this.s)),this.k()},v(El,ea),em=El.prototype,em.yi=function(t){if(null===this.j)this.j=t.j.slice(),t=t.c.slice(),this.c.push();else{var e=this.j.length;F(this.j,t.j),t=t.c.slice();var o,i;for(o=0,i=t.length;o<i;++o)t[o]+=e}this.c.push(t),this.k()},em.clone=function(){var t=new El(null);return Al(t,this.a,this.j.slice(),this.c.slice()),t},em.Sa=function(e,o,i,n){if(n<Oe(this.G(),e,o))return n;if(this.J!=this.b){var r,s,a=this.c,p=0,l=0;for(r=0,s=a.length;r<s;++r)var h=a[r],l=ua(this.j,p,h,this.s,l),p=h[h.length-1];this.L=Math.sqrt(l),this.J=this.b}a=kl(this),p=this.c,l=this.s,r=this.L,s=0;var u,c,h=t(void 0)?void 0:[NaN,NaN];for(u=0,c=p.length;u<c;++u){var f=p[u];n=fa(a,s,f,l,r,!0,e,o,i,n,h),s=f[f.length-1]}return n},em.Jb=function(t,e){var o;t:{o=kl(this);var i=this.c,n=0;if(0!==i.length){var r,s;for(r=0,s=i.length;r<s;++r){var a=i[r];if(Pa(o,n,a,this.s,t,e)){o=!0;break t}n=a[a.length-1]}}o=!1}return o},em.tl=function(){var t,e,o=kl(this),i=this.c,n=0,r=0;for(t=0,e=i.length;t<e;++t)var s=i[t],r=r+sa(o,n,s,this.s),n=s[s.length-1];return r},em.K=function(e){var o;t(e)?(o=kl(this).slice(),Da(o,this.c,this.s,e)):o=this.j,e=o,o=this.c;var i,n,r=this.s,s=0,a=t(void 0)?void 0:[],p=0;for(i=0,n=o.length;i<n;++i){var l=o[i];a[p++]=ma(e,s,l,r,a[p]),s=l[l.length-1]}return a.length=p,a},em.dj=function(){var t=new Cl(null),e=Pl(this).slice();return ia(t,"XY",e),t.k(),t},em.xc=function(t){var e=[],o=[],i=this.j,n=this.c,r=this.s;t=Math.sqrt(t);var s,a,p=0,l=0;for(s=0,a=n.length;s<a;++s){var h=n[s],u=[],l=wa(i,p,h,r,t,e,l,u);o.push(u),p=h[h.length-1]}return e.length=l,i=new El(null),Al(i,"XY",e,o),i},em.sj=function(t){if(0>t||this.c.length<=t)return null;var e;0===t?e=0:(e=this.c[t-1],e=e[e.length-1]),t=this.c[t].slice();var o=t[t.length-1];if(0!==e){var i,n;for(i=0,n=t.length;i<n;++i)t[i]-=e}return i=new Fa(null),Ua(i,this.a,this.j.slice(e,o),t),i},em.Id=function(){var t,e,o,i,n=this.a,r=this.j,s=this.c,a=[],p=0;for(t=0,e=s.length;t<e;++t){var l=s[t].slice(),h=l[l.length-1];if(0!==p)for(o=0,i=l.length;o<i;++o)l[o]-=p;o=new Fa(null),Ua(o,n,r.slice(p,h),l),a.push(o),p=h}return a},em.M=function(){return"MultiPolygon"},em.ra=function(t){t:{var e,o,i=kl(this),n=this.c,r=this.s,s=0;for(e=0,o=n.length;e<o;++e){var a=n[e];if(La(i,s,a,r,t)){t=!0;break t}s=a[a.length-1]}t=!1}return t},em.W=function(e,o){if(null===e)Al(this,"XY",null,this.c);else{na(this,o,e,3),null===this.j&&(this.j=[]);var i,n,r=this.j,s=this.s,a=this.c,p=0,a=t(a)?a:[],l=0;for(i=0,n=e.length;i<n;++i)p=ga(r,p,e[i],s,a[l]),a[l++]=p,p=p[p.length-1];a.length=l,0===a.length?this.j.length=0:(r=a[a.length-1],this.j.length=0===r.length?0:r[r.length-1]),this.k()}};var dw={Point:function(t,e,o,i){var n=o.f;if(null!==n){if(2!=n.gd())return;var r=t.b(o.b,"Image");r.Za(n),r.kb(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),t.lb(e.K(),0,2,2,e,i))},LineString:function(t,e,o,i){var n=o.c;if(null!==n){var r=t.b(o.b,"LineString");r.Aa(null,n),r.zb(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),t.lb(bl(e),0,2,2,e,i))},Polygon:function(t,e,o,i){var n=o.e,r=o.c;if(null!==n||null!==r){var s=t.b(o.b,"Polygon");s.Aa(n,r),s.Rb(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),t.lb(Oa(e),0,2,2,e,i))},MultiPoint:function(t,e,o,i){var n=o.f;if(null!==n){if(2!=n.gd())return;var r=t.b(o.b,"Image");r.Za(n),r.jb(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),o=e.j,t.lb(o,0,o.length,e.s,e,i))},MultiLineString:function(t,e,o,i){var n=o.c;if(null!==n){var r=t.b(o.b,"LineString");r.Aa(null,n),r.vc(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),o=Sl(e),t.lb(o,0,o.length,2,e,i))},MultiPolygon:function(t,e,o,i){var n=o.e,r=o.c;if(null!==r||null!==n){var s=t.b(o.b,"Polygon");s.Aa(n,r),s.wc(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),o=Pl(e),t.lb(o,0,o.length,2,e,i))},GeometryCollection:function(t,e,o,i){e=e.d;var n,r;for(n=0,r=e.length;n<r;++n)(0,dw[e[n].M()])(t,e[n],o,i)},Circle:function(t,e,o,i){var n=o.e,r=o.c;if(null!==n||null!==r){var s=t.b(o.b,"Polygon");s.Aa(n,r),s.uc(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),t.lb(e.dd(),0,2,2,e,i))}};v(Il,_r),Il.prototype.b=function(){return this.a},v(Dl,sn),Dl.prototype.i=function(t){switch(t=t.target,t.state){case 1:this.dispatchEvent(new Bl(gw,t));break;case 2:this.dispatchEvent(new Bl(vw,t));break;case 3:this.dispatchEvent(new Bl(mw,t))}},v(Bl,Et);var gw="imageloadstart",vw="imageloadend",mw="imageloaderror";v(Ul,Dl),Ul.prototype.Cc=function(t,e,o,i){e=Fl(this,e);var n=this.J;return null!==n&&this.N==this.b&&n.resolution==e&&n.e==o&&Be(n.G(),t)?n:(t=t.slice(),ao(t,this.X),i=this.T(t,e,o,[no(t)/e*o,to(t)/e*o],i),null===i||(n=new Il(t,e,o,this.d,i)),this.J=n,this.N=this.b,n)};var bw,ww=!1,xw=[],Sw=0,Tw=2,Mw=3;zl.prototype.then=function(t,e,o){return Yl(this,h(t)?t:null,h(e)?e:null,o)},Gl(zl),zl.prototype.cancel=function(t){this.a==Sw&&ql(function(){var e=new eh(t);Kl(this,e)},this)},zl.prototype.g=function(t){this.a=Sw,Zl(this,Tw,t)},zl.prototype.i=function(t){this.a=Sw,Zl(this,Mw,t)},zl.prototype.q=function(){for(;this.b&&this.b.length;){var t=this.b;this.b=[];for(var e=0;e<t.length;e++)Ql(this,t[e],this.a,this.f)}this.e=!1};var Cw=Vn;v(eh,m),eh.prototype.name="cancel";var Ew=sm.JSON.parse,Pw=sm.JSON.stringify;ih.prototype.b=null;var kw;v(rh,ih),kw=new rh;
+var Aw=/^(?:([^:\/?#.]+):)?(?:\/\/(?:([^\/?#]*)@)?([^\/#?]*?)(?::([0-9]+))?(?=[\/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/,Rw=Pm;v(fh,Qt);var Lw="",Nw=/^https?$/i,jw=["POST","PUT"];em=fh.prototype,em.send=function(t,e,o,i){if(this.Y)throw Error("[goog.net.XhrIo] Object is active with another request="+this.o+"; newUri="+t);e=e?e.toUpperCase():"GET",this.o=t,this.e="",this.q=!1,this.b=!0,this.Y=sh(this.i?this.i:kw),this.g=nh(this.i?this.i:kw),this.Y.onreadystatechange=d(this.Xg,this);try{this.l=!0,this.Y.open(e,String(t),!0),this.l=!1}catch(n){return void gh(this,n)}t=o||"";var r=this.H.clone();i&&Jn(i,function(t,e){r.set(e,t)}),i=R(r.C(),dh),o=sm.FormData&&t instanceof sm.FormData,!N(jw,e)||i||o||r.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),r.forEach(function(t,e){this.Y.setRequestHeader(e,t)},this),this.n&&(this.Y.responseType=this.n),"withCredentials"in this.Y&&(this.Y.withCredentials=this.J);try{wh(this),0<this.f&&((this.p=yh(this.Y))?(this.Y.timeout=this.f,this.Y.ontimeout=d(this.oc,this)):this.c=oh(this.oc,this.f,this)),this.d=!0,this.Y.send(t),this.d=!1}catch(s){gh(this,s)}},em.oc=function(){"undefined"!=typeof rm&&this.Y&&(this.e="Timed out after "+this.f+"ms, aborting",this.dispatchEvent("timeout"),this.Y&&this.b&&(this.b=!1,this.a=!0,this.Y.abort(),this.a=!1,this.dispatchEvent("complete"),this.dispatchEvent("abort"),bh(this)))},em.O=function(){this.Y&&(this.b&&(this.b=!1,this.a=!0,this.Y.abort(),this.a=!1),bh(this,!0)),fh.S.O.call(this)},em.Xg=function(){this.U||(this.l||this.d||this.a?mh(this):this.dn())},em.dn=function(){mh(this)};var Iw;t:{if(!document.implementation||!document.implementation.createDocument){if("undefined"!=typeof ActiveXObject){var Dw=new ActiveXObject("MSXML2.DOMDocument");if(Dw){Dw.resolveExternals=!1,Dw.validateOnParse=!1;try{Dw.setProperty("ProhibitDTD",!0),Dw.setProperty("MaxXMLSize",2048),Dw.setProperty("MaxElementDepth",256)}catch(Fw){}}if(Dw){Iw=Dw;break t}}throw Error("Your browser does not support creating new documents")}Iw=document.implementation.createDocument("","",null)}var Ow,Bw=Iw,Uw=document.implementation&&document.implementation.createDocument?Eh:Ph,Gw=Cm?Lh:Rh,Hw=Cm?jh:Nh,qw=Cm?Dh:Ih,$w=document.implementation&&document.implementation.createDocument?Fh:Oh,Xw=document.implementation&&document.implementation.createDocument?Bh:Uh,Ww=document.implementation&&document.implementation.createDocument?Gh:Hh,zw=_h();!function(){var t={Qf:{}};!function(){function e(t,o){return this instanceof e?(this.Fe=Math.max(4,t||9),this.Hf=Math.max(2,Math.ceil(.4*this.Fe)),o&&this.qi(o),void this.clear()):new e(t,o)}function o(t,e){t.bbox=i(t,0,t.children.length,e)}function i(t,e,o,i){for(var r,s=[1/0,1/0,-(1/0),-(1/0)];e<o;e++)r=t.children[e],n(s,t.wa?i(r):r.bbox);return s}function n(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[2]),t[3]=Math.max(t[3],e[3])}function r(t,e){return t.bbox[0]-e.bbox[0]}function s(t,e){return t.bbox[1]-e.bbox[1]}function a(t){return(t[2]-t[0])*(t[3]-t[1])}function p(t){return t[2]-t[0]+(t[3]-t[1])}function l(t,e){return t[0]<=e[0]&&t[1]<=e[1]&&e[2]<=t[2]&&e[3]<=t[3]}function h(t,e){return e[0]<=t[2]&&e[1]<=t[3]&&e[2]>=t[0]&&e[3]>=t[1]}function u(t,e,o,i,n){for(var r,s=[e,o];s.length;)o=s.pop(),e=s.pop(),o-e<=i||(r=e+Math.ceil((o-e)/i/2)*i,c(t,e,o,r,n),s.push(e,r,r,o))}function c(t,e,o,i,n){for(var r,s,a,p,l;o>e;){for(600<o-e&&(r=o-e+1,s=i-e+1,a=Math.log(r),p=.5*Math.exp(2*a/3),l=.5*Math.sqrt(a*p*(r-p)/r)*(0>s-r/2?-1:1),a=Math.max(e,Math.floor(i-s*p/r+l)),s=Math.min(o,Math.floor(i+(r-s)*p/r+l)),c(t,a,s,i,n)),r=t[i],s=e,p=o,f(t,e,i),0<n(t[o],r)&&f(t,e,o);s<p;){for(f(t,s,p),s++,p--;0>n(t[s],r);)s++;for(;0<n(t[p],r);)p--}0===n(t[e],r)?f(t,e,p):(p++,f(t,p,o)),p<=i&&(e=p+1),i<=p&&(o=p-1)}}function f(t,e,o){var i=t[e];t[e]=t[o],t[o]=i}e.prototype={all:function(){return this.Df(this.data,[])},search:function(t){var e=this.data,o=[],i=this.Ea;if(!h(t,e.bbox))return o;for(var n,r,s,a,p=[];e;){for(n=0,r=e.children.length;n<r;n++)s=e.children[n],a=e.wa?i(s):s.bbox,h(t,a)&&(e.wa?o.push(s):l(t,a)?this.Df(s,o):p.push(s));e=p.pop()}return o},load:function(t){if(!t||!t.length)return this;if(t.length<this.Hf){for(var e=0,o=t.length;e<o;e++)this.ha(t[e]);return this}return t=this.Ff(t.slice(),0,t.length-1,0),this.data.children.length?this.data.height===t.height?this.If(this.data,t):(this.data.height<t.height&&(e=this.data,this.data=t,t=e),this.Gf(t,this.data.height-t.height-1,!0)):this.data=t,this},ha:function(t){return t&&this.Gf(t,this.data.height-1),this},clear:function(){return this.data={children:[],height:1,bbox:[1/0,1/0,-(1/0),-(1/0)],wa:!0},this},remove:function(t){if(!t)return this;for(var e,o,i,n,r=this.data,s=this.Ea(t),a=[],p=[];r||a.length;){if(r||(r=a.pop(),o=a[a.length-1],e=p.pop(),n=!0),r.wa&&(i=r.children.indexOf(t),-1!==i)){r.children.splice(i,1),a.push(r),this.pi(a);break}n||r.wa||!l(r.bbox,s)?o?(e++,r=o.children[e],n=!1):r=null:(a.push(r),p.push(e),e=0,o=r,r=r.children[0])}return this},Ea:function(t){return t},Ie:function(t,e){return t[0]-e[0]},Je:function(t,e){return t[1]-e[1]},toJSON:function(){return this.data},Df:function(t,e){for(var o=[];t;)t.wa?e.push.apply(e,t.children):o.push.apply(o,t.children),t=o.pop();return e},Ff:function(t,e,i,n){var r,s=i-e+1,a=this.Fe;if(s<=a)return r={children:t.slice(e,i+1),height:1,bbox:null,wa:!0},o(r,this.Ea),r;n||(n=Math.ceil(Math.log(s)/Math.log(a)),a=Math.ceil(s/Math.pow(a,n-1))),r={children:[],height:n,bbox:null};var p,l,h,s=Math.ceil(s/a),a=s*Math.ceil(Math.sqrt(a));for(u(t,e,i,a,this.Ie);e<=i;e+=a)for(l=Math.min(e+a-1,i),u(t,e,l,s,this.Je),p=e;p<=l;p+=s)h=Math.min(p+s-1,l),r.children.push(this.Ff(t,p,h,n-1));return o(r,this.Ea),r},oi:function(t,e,o,i){for(var n,r,s,p,l,h,u,c;i.push(e),!e.wa&&i.length-1!==o;){for(u=c=1/0,n=0,r=e.children.length;n<r;n++){s=e.children[n],l=a(s.bbox),h=t;var f=s.bbox;h=(Math.max(f[2],h[2])-Math.min(f[0],h[0]))*(Math.max(f[3],h[3])-Math.min(f[1],h[1]))-l,h<c?(c=h,u=l<u?l:u,p=s):h===c&&l<u&&(u=l,p=s)}e=p}return e},Gf:function(t,e,o){var i=this.Ea;o=o?t.bbox:i(t);var i=[],r=this.oi(o,this.data,e,i);for(r.children.push(t),n(r.bbox,o);0<=e&&i[e].children.length>this.Fe;)this.ri(i,e),e--;this.li(o,i,e)},ri:function(t,e){var i=t[e],n=i.children.length,r=this.Hf;this.mi(i,r,n),n={children:i.children.splice(this.ni(i,r,n)),height:i.height},i.wa&&(n.wa=!0),o(i,this.Ea),o(n,this.Ea),e?t[e-1].children.push(n):this.If(i,n)},If:function(t,e){this.data={children:[t,e],height:t.height+1},o(this.data,this.Ea)},ni:function(t,e,o){var n,r,s,p,l,h,u;for(l=h=1/0,n=e;n<=o-e;n++){r=i(t,0,n,this.Ea),s=i(t,n,o,this.Ea);var c=r,f=s;p=Math.max(c[0],f[0]);var y=Math.max(c[1],f[1]),d=Math.min(c[2],f[2]),c=Math.min(c[3],f[3]);p=Math.max(0,d-p)*Math.max(0,c-y),r=a(r)+a(s),p<l?(l=p,u=n,h=r<h?r:h):p===l&&r<h&&(h=r,u=n)}return u},mi:function(t,e,o){var i=t.wa?this.Ie:r,n=t.wa?this.Je:s,a=this.Ef(t,e,o,i);e=this.Ef(t,e,o,n),a<e&&t.children.sort(i)},Ef:function(t,e,o,r){t.children.sort(r),r=this.Ea;var s,a,l=i(t,0,e,r),h=i(t,o-e,o,r),u=p(l)+p(h);for(s=e;s<o-e;s++)a=t.children[s],n(l,t.wa?r(a):a.bbox),u+=p(l);for(s=o-e-1;s>=e;s--)a=t.children[s],n(h,t.wa?r(a):a.bbox),u+=p(h);return u},li:function(t,e,o){for(;0<=o;o--)n(e[o].bbox,t)},pi:function(t){for(var e,i=t.length-1;0<=i;i--)0===t[i].children.length?0<i?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():o(t[i],this.Ea)},qi:function(t){var e=["return a"," - b",";"];this.Ie=new Function("a","b",e.join(t[0])),this.Je=new Function("a","b",e.join(t[1])),this.Ea=new Function("a","return [a"+t.join(", a")+"];")}},"function"==typeof define&&define.Lo?define("rbush",function(){return e}):"undefined"!=typeof t?t.Qf=e:"undefined"!=typeof self?self.b=e:window.b=e}(),Ow=t.Qf}(),em=au.prototype,em.ha=function(t,e){var o=[t[0],t[1],t[2],t[3],e];this.a.ha(o),this.b[c(e)]=o},em.load=function(t,e){for(var o=Array(e.length),i=0,n=e.length;i<n;i++){var r=t[i],s=e[i],r=[r[0],r[1],r[2],r[3],s];o[i]=r,this.b[c(s)]=r}this.a.load(o)},em.remove=function(t){t=c(t);var e=this.b[t];return et(this.b,t),null!==this.a.remove(e)},em.update=function(t,e){var o=c(e);Xe(this.b[o].slice(0,4),t)||(this.remove(e),this.ha(t,e))},em.forEach=function(t,e){return uu(pu(this),t,e)},em.la=function(){return Q(this.b)},em.clear=function(){this.a.clear(),this.b={}},em.G=function(){return this.a.data.bbox},v(cu,sn),em=cu.prototype,em.jf=function(t){var e=c(t).toString();if(yu(this,e,t)){fu(this,e,t);var o=t.Q();null!=o?(e=o.G(),this.a.ha(e,t)):this.c[e]=t,this.dispatchEvent(new mu("addfeature",t))}this.k()},em.Oc=function(t){du(this,t),this.k()},em.clear=function(t){if(t){for(var e in this.i)E(this.i[e],zt);this.i={},this.e={},this.g={}}else t=this.ph,this.a.forEach(t,this),W(this.c,t,this);this.a.clear(),this.N.clear(),this.c={},this.dispatchEvent(new mu("clear")),this.k()},em.Rf=function(t,e){return this.a.forEach(t,e)},em.$c=function(t,e,o){return hu(this.a,t,e,o)},em.Ab=function(t,e,o,i){return this.$c(t,o,i)},em.Oe=function(t,e,o){return this.$c(t,function(i){if(i.Q().ra(t)&&(i=e.call(o,i)))return i})},em.Dc=function(){var t=pu(this.a);return Q(this.c)||F(t,V(this.c)),t},em.Re=function(t){var e=[];return gu(this,t,function(t){e.push(t)}),e},em.Se=function(t){return lu(this.a,t)},em.Tf=function(t){var e=t[0],o=t[1],i=null,n=[NaN,NaN],r=1/0,s=[-(1/0),-(1/0),1/0,1/0];return hu(this.a,s,function(t){var a=t.Q(),p=r;r=a.Sa(e,o,n,r),r<p&&(i=t,t=Math.sqrt(r),s[0]=e-t,s[1]=o-t,s[2]=e+t,s[3]=o+t)}),i},em.G=function(){return this.a.G()},em.Qe=function(e){return e=this.e[e.toString()],t(e)?e:null},em.Pg=function(e){e=e.target;var o=c(e).toString(),i=e.Q();null!=i?(i=i.G(),o in this.c?(delete this.c[o],this.a.ha(i,e)):this.a.update(i,e)):o in this.c||(this.a.remove(e),this.c[o]=e),i=e.$,t(i)?(i=i.toString(),o in this.g?(delete this.g[o],this.e[i]=e):this.e[i]!==e&&(vu(this,e),this.e[i]=e)):o in this.g||(vu(this,e),this.g[o]=e),this.k(),this.dispatchEvent(new mu("changefeature",e))},em.la=function(){return this.a.la()&&Q(this.c)},em.ac=function(t,e,o){var i=this.N;t=this.oa(t,e);var n,r;for(n=0,r=t.length;n<r;++n){var s=t[n];hu(i,s,function(t){return Be(t.extent,s)})||(this.J.call(this,s,e,o),i.ha(s,{extent:s.slice()}))}},em.Qg=function(t){var e=c(t).toString();e in this.c?delete this.c[e]:this.a.remove(t),this.ph(t),this.k()},em.ph=function(e){var o=c(e).toString();E(this.i[o],zt),delete this.i[o];var i=e.$;t(i)?delete this.e[i.toString()]:delete this.g[o],this.dispatchEvent(new mu("removefeature",e))},v(mu,Et),v(bu,Ul),em=bu.prototype,em.zi=function(e,o,i,n,r){var s=new el(.5*o/i,e,o);this.a.ac(e,o,r);var a=!1;return this.a.Ab(e,o,function(e){var n;if(!(n=a)){var r;if(t(e.c)?r=e.c.call(e,o):t(this.g)&&(r=this.g(e,o)),null!=r){var p,l=!1;for(n=0,p=r.length;n<p;++n)l=jl(s,e,r[n],Nl(o,i),this.$l,this)||l;n=l}else n=!1}a=n},this),ol(s),a?null:(this.e[0]!=n[0]||this.e[1]!=n[1]?(this.c.canvas.width=n[0],this.c.canvas.height=n[1],this.e[0]=n[0],this.e[1]=n[1]):this.c.clearRect(0,0,n[0],n[1]),e=wu(this,_e(e),o,i,n),il(s,this.c,i,e,0,{}),this.n=s,this.c.canvas)},em.ge=function(t,e,o,i,n){if(null!==this.n){var r={};return this.n.c(t,e,0,i,function(t){var e=c(t).toString();if(!(e in r))return r[e]=!0,n(t)})}},em.Xl=function(){return this.a},em.Yl=function(){return this.p},em.Zl=function(){return this.g},em.$l=function(){this.k()},em.am=function(){pn(this,this.a.o)},em.Mg=function(e){this.p=t(e)?e:rp,this.g=null===e?void 0:np(this.p),this.k()},v(xu,rl),em=xu.prototype,em.Pa=function(t,e,o,i){var n=this.a;return n.da().ge(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,n)})},em.dc=function(t,e,o,i){if(!r(this.fe()))if(this.a.da()instanceof bu){if(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t),this.Pa(t,e,lb,this))return o.call(i,this.a)}else if(null===this.d&&(this.d=Te(),Ae(this.f,this.d)),e=pl(t,this.d),null===this.c&&(this.c=mr(1,1)),this.c.clearRect(0,0,1,1),this.c.drawImage(this.fe(),e[0],e[1],1,1,0,0,1,1),0<this.c.getImageData(0,0,1,1).data[3])return o.call(i,this.a)},em.fe=function(){return null===this.e?null:this.e.b()},em.Xf=function(){return this.f},em.ff=function(e,o){var i,n=e.pixelRatio,r=e.viewState,s=r.center,a=r.resolution,p=r.rotation,l=this.a.da(),h=e.viewHints;if(i=e.extent,t(o.extent)&&(i=eo(i,o.extent)),h[0]||h[1]||so(i)||(r=r.projection,h=l.f,null===h||(r=h),i=l.Cc(i,a,n,r),null!==i&&os(this,i)&&(this.e=i)),null!==this.e){i=this.e;var r=i.G(),h=i.resolution,u=i.e,a=n*h/(a*u);Jr(this.f,n*e.size[0]/2,n*e.size[1]/2,a,a,p,u*(r[0]-s[0])/h,u*(s[1]-r[3])/h),this.d=null,rs(e.attributions,i.f),ss(e,l)}return!0},v(Su,rl),Su.prototype.fe=function(){return this.f},Su.prototype.Xf=function(){return this.l},Su.prototype.ff=function(e,o){var i,n=e.pixelRatio,r=e.viewState,s=r.projection,a=this.a,p=a.da(),l=kn(p,s),h=p.Cd(),u=Sn(l,r.resolution),c=p.Xb(u,e.pixelRatio,s),f=c[0]/he(l.na(u),this.L)[0],y=l.ma(u),f=y/f,d=r.center;if(y==r.resolution?(d=ps(d,y,e.size),i=Qe(d,y,r.rotation,e.size)):i=e.extent,t(o.extent)&&(i=eo(i,o.extent)),so(i))return!1;var g,v,m=dn(l,i,y),b=c[0]*_o(m),w=c[1]*(m.a-m.c+1);null===this.f?(v=mr(b,w),this.f=v.canvas,this.c=[b,w],this.g=v,this.q=!yw(this.c)):(g=this.f,v=this.g,this.c[0]<b||this.c[1]<w||this.H!==c[0]||this.p!==c[1]||this.q&&(this.c[0]>b||this.c[1]>w)?(g.width=b,g.height=w,this.c=[b,w],this.q=!yw(this.c),this.d=null):(b=this.c[0],w=this.c[1],(g=u!=this.n)||(g=this.d,g=!(g.b<=m.b&&m.d<=g.d&&g.c<=m.c&&m.a<=g.a)),g&&(this.d=null)));var x,S;null===this.d?(b/=c[0],w/=c[1],x=m.b-Math.floor((b-_o(m))/2),S=m.c-Math.floor((w-(m.a-m.c+1))/2),this.n=u,this.H=c[0],this.p=c[1],this.d=new Ko(x,x+b-1,S,S+w-1),this.i=Array(b*w),w=this.d):(w=this.d,b=_o(w)),g={},g[u]={};var T,M,C,E=[],P=this.yd(p,g),A=a.c(),R=He(),L=new Ko(0,0,0,0);for(S=m.b;S<=m.d;++S)for(C=m.c;C<=m.a;++C)M=p.Vb(u,S,C,n,s),x=M.state,2==x||4==x||3==x&&!A?g[u][zo(M.b)]=M:(T=l.Ad(M.b,P,null,L,R),T||(E.push(M),T=l.Ld(M.b,L,R),null===T||P(u+1,T)));for(P=0,T=E.length;P<T;++P)M=E[P],S=c[0]*(M.b[1]-w.b),C=c[1]*(w.a-M.b[2]),v.clearRect(S,C,c[0],c[1]);E=k(Y(g),Number),U(E);var N,j,I,D,F,O,B=p.X,G=oo(mn(l,[u,w.b,w.a],R)),P=0;for(T=E.length;P<T;++P)if(N=E[P],c=p.Xb(N,n,s),D=g[N],N==u)for(I in D)M=D[I],j=(M.b[2]-w.c)*b+(M.b[1]-w.b),this.i[j]!=M&&(S=c[0]*(M.b[1]-w.b),C=c[1]*(w.a-M.b[2]),x=M.state,4!=x&&(3!=x||A)&&B||v.clearRect(S,C,c[0],c[1]),2==x&&v.drawImage(M.Ma(),h,h,c[0],c[1],S,C,c[0],c[1]),this.i[j]=M);else for(I in N=l.ma(N)/y,D)for(M=D[I],j=mn(l,M.b,R),S=(j[0]-G[0])/f,C=(G[1]-j[3])/f,O=N*c[0],F=N*c[1],x=M.state,4!=x&&B||v.clearRect(S,C,O,F),2==x&&v.drawImage(M.Ma(),h,h,c[0],c[1],S,C,O,F),M=gn(l,j,u,L),x=Math.max(M.b,w.b),C=Math.min(M.d,w.d),S=Math.max(M.c,w.c),M=Math.min(M.a,w.a);x<=C;++x)for(F=S;F<=M;++F)j=(F-w.c)*b+(x-w.b),this.i[j]=void 0;return as(e.usedTiles,p,u,m),ls(e,p,l,n,s,i,u,a.a()),ns(e,p),ss(e,p),Jr(this.l,n*e.size[0]/2,n*e.size[1]/2,n*f/r.resolution,n*f/r.resolution,r.rotation,(G[0]-d[0])/f,(d[1]-G[1])/f),this.e=null,!0},Su.prototype.dc=function(t,e,o,i){if(null!==this.g&&(null===this.e&&(this.e=Te(),Ae(this.l,this.e)),t=pl(t,this.e),0<this.g.getImageData(t[0],t[1],1,1).data[3]))return o.call(i,this.a)},v(Tu,rl),Tu.prototype.o=function(t,e,o){var i=t.extent,n=t.focus,r=t.pixelRatio,s=t.skippedFeatureUids,a=t.viewState,p=a.projection,a=a.rotation,l=p.G(),h=this.a.da(),u=al(this,t,0);sl(this,"precompose",o,t,u);var c=this.c;if(null!==c&&!c.la()){var f;ee(this.a,"render")?(this.e.canvas.width=o.canvas.width,this.e.canvas.height=o.canvas.height,f=this.e):f=o;var y=f.globalAlpha;if(f.globalAlpha=e.opacity,e={},n=n[0],h.H&&p.c&&!Be(l,i)){p=l[0],h=l[2],il(c,f,r,u,a,p<=n&&n<=h?s:e);for(var d,g=i[0],v=no(l),m=0;g<l[0];)--m,d=v*m,u=al(this,t,d),il(c,f,r,u,a,p+d<=n&&n<=h+d?s:e),g+=v;for(m=0,g=i[2];g>l[2];)++m,d=v*m,u=al(this,t,d),il(c,f,r,u,a,p+d<=n&&n<=h+d?s:e),g-=v}else il(c,f,r,u,a,s);f!=o&&(sl(this,"render",f,t,u),o.drawImage(f.canvas,0,0)),f.globalAlpha=y}sl(this,"postcompose",o,t,u)},Tu.prototype.Pa=function(t,e,o,i){if(null!==this.c){var n=this.a,r={};return this.c.c(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){var e=c(t).toString();if(!(e in r))return r[e]=!0,o.call(i,t,n)})}},Tu.prototype.l=function(){is(this)},Tu.prototype.ff=function(e){function o(e){var o;if(t(e.c)?o=e.c.call(e,h):t(i.a)&&(o=(0,i.a)(e,h)),null!=o){if(null!=o){var n,r,s=!1;for(n=0,r=o.length;n<r;++n)s=jl(f,e,o[n],Nl(h,u),this.l,this)||s;e=s}else e=!1;this.d=this.d||e}}var i=this.a,n=i.da();rs(e.attributions,n.d),ss(e,n);var r=e.viewHints[0],s=e.viewHints[1],a=i.o,p=i.n;if(!this.d&&!a&&r||!p&&s)return!0;var l=e.extent,r=e.viewState,s=r.projection,h=r.resolution,u=e.pixelRatio,a=i.b,c=i.c,p=i.get("renderOrder");if(t(p)||(p=Ll),l=De(l,c*h),c=r.projection.G(),n.H&&r.projection.c&&!Be(c,e.extent)&&(l[0]=c[0],l[2]=c[2]),!this.d&&this.i==h&&this.q==a&&this.g==p&&Be(this.f,l))return!0;Ct(this.c),this.c=null,this.d=!1;var f=new el(.5*h/u,l,h,i.c);if(n.ac(l,h,s),null===p)n.Ab(l,h,o,this);else{var y=[];n.Ab(l,h,function(t){y.push(t)},this),U(y,p),E(y,o,this)}return ol(f),this.i=h,this.q=a,this.g=p,this.f=l,this.c=f,!0},v(Mu,ys),Mu.prototype.Ke=function(t){return t instanceof Rp?new xu(t):t instanceof Lp?new Su(t):t instanceof Np?new Tu(t):null},Mu.prototype.M=function(){return"canvas"},Mu.prototype.ue=function(t){if(null===t)this.a&&(Wi(this.b,!1),this.a=!1);else{var e=this.d,o=t.size[0]*t.pixelRatio,i=t.size[1]*t.pixelRatio;this.b.width!=o||this.b.height!=i?(this.b.width=o,this.b.height=i):e.clearRect(0,0,this.b.width,this.b.height),ds(t),Cu(this,"precompose",t);var n,r,s,a,o=t.layerStatesArray,i=t.viewState.resolution;for(n=0,r=o.length;n<r;++n)a=o[n],s=a.layer,s=vs(this,s),Zr(a,i)&&"ready"==a.i&&s.ff(t,a)&&s.o(t,a,e);Cu(this,"postcompose",t),this.a||(Wi(this.b,!0),this.a=!0),ms(this,t),t.postRenderFunctions.push(gs)}},v(Eu,es),Eu.prototype.e=o,Eu.prototype.i=o,v(Pu,Eu),Pu.prototype.Pa=function(t,e,o,i){var n=this.a;return n.da().ge(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,n)})},Pu.prototype.e=function(){mi(this.target),this.c=null},Pu.prototype.f=function(e,o){var i=e.viewState,n=i.center,r=i.resolution,s=i.rotation,a=this.c,p=this.a.da(),l=e.viewHints,h=e.extent;return t(o.extent)&&(h=eo(h,o.extent)),l[0]||l[1]||so(h)||(i=i.projection,l=p.f,null===l||(i=l),h=p.Cc(h,r,e.pixelRatio,i),null===h||os(this,h)&&(a=h)),null!==a&&(i=a.G(),l=a.resolution,h=Te(),Jr(h,e.size[0]/2,e.size[1]/2,l/r,l/r,s,(i[0]-n[0])/l,(n[1]-i[3])/l),a!=this.c&&(n=a.b(this),n.style.maxWidth="none",n.style.position="absolute",mi(this.target),this.target.appendChild(n),this.c=a),Qr(h,this.d)||(wr(this.target,h),Ee(this.d,h)),rs(e.attributions,a.f),ss(e,p)),!0},v(ku,Eu),ku.prototype.e=function(){mi(this.target),this.g=0},ku.prototype.f=function(e,o){if(!o.visible)return this.d&&(Wi(this.target,!1),this.d=!1),!0;var i,n=e.pixelRatio,r=e.viewState,s=r.projection,a=this.a,p=a.da(),l=kn(p,s),h=p.Cd(),u=Sn(l,r.resolution),c=l.ma(u),f=r.center;c==r.resolution?(f=ps(f,c,e.size),i=Qe(f,c,r.rotation,e.size)):i=e.extent,t(o.extent)&&(i=eo(i,o.extent));var c=dn(l,i,c),y={};y[u]={};var d,g,v,m,b=this.yd(p,y),w=a.c(),x=He(),S=new Ko(0,0,0,0);for(v=c.b;v<=c.d;++v)for(m=c.c;m<=c.a;++m)d=p.Vb(u,v,m,n,s),g=d.state,2==g?y[u][zo(d.b)]=d:4==g||3==g&&!w||(g=l.Ad(d.b,b,null,S,x),g||(d=l.Ld(d.b,S,x),null===d||b(u+1,d)));var T;if(this.g!=p.b){for(T in this.c)w=this.c[+T],wi(w.target);this.c={},this.g=p.b}x=k(Y(y),Number),U(x);var M,b={};for(v=0,m=x.length;v<m;++v){T=x[v],T in this.c?w=this.c[T]:(w=l.cd(f,T),w=new Au(l,w),b[T]=!0,this.c[T]=w),T=y[T];for(M in T){d=w,g=T[M];var C=h,E=g.b,P=E[0],A=E[1],R=E[2],E=zo(E);if(!(E in d.a)){var P=he(d.d.na(P),d.i),L=g.Ma(d),N=L.style;N.maxWidth="none";var j=void 0,I=void 0;0<C?(j=gi("DIV"),I=j.style,I.overflow="hidden",I.width=P[0]+"px",I.height=P[1]+"px",N.position="absolute",N.left=-C+"px",N.top=-C+"px",N.width=P[0]+2*C+"px",N.height=P[1]+2*C+"px",j.appendChild(L)):(N.width=P[0]+"px",N.height=P[1]+"px",j=L,I=N),I.position="absolute",I.left=(A-d.c[1])*P[0]+"px",I.top=(d.c[2]-R)*P[1]+"px",null===d.b&&(d.b=document.createDocumentFragment()),d.b.appendChild(j),d.a[E]=g}}null!==w.b&&(w.target.appendChild(w.b),w.b=null)}for(h=k(Y(this.c),Number),U(h),v=Te(),M=0,x=h.length;M<x;++M)if(T=h[M],w=this.c[T],T in y){if(d=w.g,m=w.f,Jr(v,e.size[0]/2,e.size[1]/2,d/r.resolution,d/r.resolution,r.rotation,(m[0]-f[0])/d,(f[1]-m[1])/d),m=w,d=v,Qr(d,m.e)||(wr(m.target,d),Ee(m.e,d)),T in b){for(--T;0<=T;--T)if(T in this.c){m=this.c[T].target,m.parentNode&&m.parentNode.insertBefore(w.target,m.nextSibling);break}0>T&&bi(this.target,w.target,0)}else if(!e.viewHints[0]&&!e.viewHints[1]){g=gn(w.d,i,w.c[0],S),T=[],d=m=void 0;for(d in w.a)m=w.a[d],g.contains(m.b)||T.push(m);for(C=g=void 0,g=0,C=T.length;g<C;++g)m=T[g],d=zo(m.b),wi(m.Ma(w)),delete w.a[d]}}else wi(w.target),delete this.c[T];return o.opacity!=this.q&&(this.q=this.target.style.opacity=o.opacity),o.visible&&!this.d&&(Wi(this.target,!0),this.d=!0),as(e.usedTiles,p,u,c),ls(e,p,l,n,s,i,u,a.a()),ns(e,p),ss(e,p),!0},v(Ru,Eu),Ru.prototype.i=function(t,e){var o=t.viewState,i=o.center,n=o.rotation,r=o.resolution,o=t.pixelRatio,s=t.size[0],a=t.size[1],p=s*o,l=a*o,i=Jr(this.H,o*s/2,o*a/2,o/r,-o/r,-n,-i[0],-i[1]),r=this.g;r.canvas.width=p,r.canvas.height=l,s=Jr(this.p,0,0,1/o,1/o,0,-(p-s)/2*o,-(l-a)/2*o),wr(r.canvas,s),Lu(this,"precompose",t,i),s=this.c,null===s||s.la()||(r.globalAlpha=e.opacity,il(s,r,o,i,n,t.skippedFeatureUids),Lu(this,"render",t,i)),Lu(this,"postcompose",t,i)},Ru.prototype.Pa=function(t,e,o,i){if(null!==this.c){var n=this.a,r={};return this.c.c(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){var e=c(t).toString();if(!(e in r))return r[e]=!0,o.call(i,t,n)})}},Ru.prototype.J=function(){is(this)},Ru.prototype.f=function(e){function o(e){var o;if(t(e.c)?o=e.c.call(e,l):t(i.a)&&(o=(0,i.a)(e,l)),null!=o){if(null!=o){var n,r,s=!1;for(n=0,r=o.length;n<r;++n)s=jl(u,e,o[n],Nl(l,h),this.J,this)||s;e=s}else e=!1;this.d=this.d||e}}var i=this.a,n=i.da();rs(e.attributions,n.d),ss(e,n);var r=e.viewHints[0],s=e.viewHints[1],a=i.o,p=i.n;if(!this.d&&!a&&r||!p&&s)return!0;var s=e.extent,a=e.viewState,r=a.projection,l=a.resolution,h=e.pixelRatio;if(e=i.b,p=i.c,a=i.get("renderOrder"),t(a)||(a=Ll),s=De(s,p*l),!this.d&&this.o==l&&this.n==e&&this.l==a&&Be(this.q,s))return!0;Ct(this.c),this.c=null,this.d=!1;var u=new el(.5*l/h,s,l,i.c);if(n.ac(s,l,r),null===a)n.Ab(s,l,o,this);else{var c=[];n.Ab(s,l,function(t){c.push(t)},this),U(c,a),E(c,o,this)}return ol(u),this.o=l,this.n=e,this.l=a,this.q=s,this.c=u,!0},v(Nu,ys),Nu.prototype.O=function(){wi(this.b),Nu.S.O.call(this)},Nu.prototype.Ke=function(t){if(t instanceof Rp)t=new Pu(t);else if(t instanceof Lp)t=new ku(t);else{if(!(t instanceof Np))return null;t=new Ru(t)}return t},Nu.prototype.M=function(){return"dom"},Nu.prototype.ue=function(t){if(null===t)this.d&&(Wi(this.b,!1),this.d=!1);else{var e;e=function(t,e){bi(this.b,t,e)};var o=this.g;if(ee(o,"precompose")||ee(o,"postcompose")){var o=this.a.canvas,i=t.pixelRatio;o.width=t.size[0]*i,o.height=t.size[1]*i}ju(this,"precompose",t);var n,r,s,a,o=t.layerStatesArray,i=t.viewState.resolution;for(n=0,r=o.length;n<r;++n)a=o[n],s=a.layer,s=vs(this,s),e.call(this,s.target,n),Zr(a,i)&&"ready"==a.i?s.f(t,a)&&s.i(t,a):s.e();e=t.layerStates;for(var p in this.f)p in e||(s=this.f[p],wi(s.target));this.d||(Wi(this.b,!0),this.d=!0),ds(t),ms(this,t),t.postRenderFunctions.push(gs),ju(this,"postcompose",t)}},v(Du,Iu),Du.prototype.M=function(){return 35632},v(Fu,Iu),Fu.prototype.M=function(){return 35633},v(Ou,Du),i(Ou),v(Bu,Fu),i(Bu),v(Gu,Du),i(Gu),v(Hu,Fu),i(Hu),em=Xu.prototype,em.O=function(){var t=this.b;t.isContextLost()||(W(this.a,function(e){t.deleteBuffer(e.buffer)}),W(this.e,function(e){t.deleteProgram(e)}),W(this.f,function(e){t.deleteShader(e)}),t.deleteFramebuffer(this.d),t.deleteRenderbuffer(this.i),t.deleteTexture(this.q))},em.Xm=function(){return this.b},em.Te=function(){if(null===this.d){var t=this.b,e=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,e);var o=Zu(t,1,1),i=t.createRenderbuffer();t.bindRenderbuffer(t.RENDERBUFFER,i),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,1,1),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,o,0),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,i),t.bindTexture(t.TEXTURE_2D,null),t.bindRenderbuffer(t.RENDERBUFFER,null),t.bindFramebuffer(t.FRAMEBUFFER,null),this.d=e,this.q=o,this.i=i}return this.d},em.Ym=function(){tt(this.a),tt(this.f),tt(this.e),this.i=this.q=this.d=this.g=null},em.Zm=function(){},em.oe=function(t){return t!=this.g&&(this.b.useProgram(t),this.g=t,!0)},v(Ju,Ha),Ju.prototype.jb=function(t,e){this.c.push(this.a.length),this.l.push(e);var o=t.j;tc(this,o,o.length,t.s)},Ju.prototype.kb=function(t,e){this.c.push(this.a.length),this.l.push(e);var o=t.j;tc(this,o,o.length,t.s)},Ju.prototype.Za=function(t){var e=t.mb(),o=t.Lb(1),i=t.Dd(),n=t.he(1),r=t.U,s=t.rb(),a=t.V,p=t.q,l=t.Xa();t=t.l;var h;0===this.e.length?this.e.push(o):(h=this.e[this.e.length-1],c(h)!=c(o)&&(this.U.push(this.a.length),this.e.push(o))),0===this.d.length?this.d.push(n):(h=this.d[this.d.length-1],c(h)!=c(n)&&(this.f.push(this.a.length),this.d.push(n))),this.V=e[0],this.n=e[1],this.J=l[1],this.L=i[1],this.N=i[0],this.T=r,this.sa=s[0],this.X=s[1],this.oa=p,this.ba=a,this.Fa=t,this.Ga=l[0]},rc.prototype.b=function(e,o){var i=this.a[o];return t(i)||(i=new Kw[o](this.f,this.e),this.a[o]=i),i},rc.prototype.la=function(){return Q(this.a)},rc.prototype.c=function(e,o,i,n,r,s,a,p,l,h,u,c,f,y){var d=o.b;d.bindFramebuffer(d.FRAMEBUFFER,o.Te());var g;return t(this.d)&&(g=De($e(e),n*this.d)),pc(this,o,e,n,r,p,l,h,u,c,f,function(t){var e=new Uint8Array(4);if(d.readPixels(0,0,1,1,d.RGBA,d.UNSIGNED_BYTE,e),0<e[3]&&(t=y(t)))return t},!0,g)};var Kw={Image:Ju},Vw=[1,1];v(hc,Ha),em=hc.prototype,em.tc=function(e,o){var i=e.toString(),n=this.b[i];t(n)?n.push(o):this.b[i]=[o]},em.uc=function(){},em.Le=function(e,o){var i=(0,o.d)(e);if(null!=i&&ro(this.d,i.G())){var n=o.b;t(n)||(n=0),this.tc(n,function(t){t.Aa(o.e,o.c),t.Za(o.f),t.Ba(o.a);var e=Yw[i.M()];e&&e.call(t,i,null)})}},em.zd=function(t,e){var o,i,n=t.d;for(o=0,i=n.length;o<i;++o){var r=n[o],s=Yw[r.M()];s&&s.call(this,r,e)}},em.kb=function(t,e){var o=this.a,i=new rc(1,this.d).b(0,"Image");i.Za(this.c),i.kb(t,e),ec(i,o),ic(i,this.a,this.e,this.f,this.g,this.i,1,0,1,0,1,{},void 0,!1),Qu(i,o)()},em.zb=function(){},em.vc=function(){},em.jb=function(t,e){var o=this.a,i=new rc(1,this.d).b(0,"Image");i.Za(this.c),i.jb(t,e),ec(i,o),ic(i,this.a,this.e,this.f,this.g,this.i,1,0,1,0,1,{},void 0,!1),Qu(i,o)()},em.wc=function(){},em.Rb=function(){},em.lb=function(){},em.Aa=function(){},em.Za=function(t){this.c=t},em.Ba=function(){};var Yw={Point:hc.prototype.kb,MultiPoint:hc.prototype.jb,GeometryCollection:hc.prototype.zd};v(uc,Du),i(uc),v(cc,Fu),i(cc),v(yc,Du),i(yc),v(dc,Fu),i(dc),v(vc,es),vc.prototype.Lg=function(t,e,o){bc(this,"precompose",o,t),Wu(o,34962,this.N);var i,n,r=o.b,s=e.brightness||1!=e.contrast||e.hue||1!=e.saturation;s?(i=uc.Ia(),n=cc.Ia()):(i=yc.Ia(),n=dc.Ia()),i=Vu(o,i,n),s?null===this.l?this.l=n=new fc(r,i):n=this.l:null===this.o?this.o=n=new gc(r,i):n=this.o,o.oe(i)&&(r.enableVertexAttribArray(n.b),r.vertexAttribPointer(n.b,2,5126,!1,16,0),r.enableVertexAttribArray(n.a),r.vertexAttribPointer(n.a,2,5126,!1,16,8),r.uniform1i(n.e,0)),r.uniformMatrix4fv(n.f,!1,this.q),r.uniformMatrix4fv(n.d,!1,this.n),s&&r.uniformMatrix4fv(n.g,!1,ai(this.T,e.brightness,e.contrast,e.hue,e.saturation)),r.uniform1f(n.c,e.opacity),r.bindTexture(3553,this.Qa),r.drawArrays(5,0,4),bc(this,"postcompose",o,t)},vc.prototype.gf=function(){this.e=this.Qa=null,this.f=void 0},v(wc,vc),wc.prototype.Pa=function(t,e,o,i){var n=this.a;return n.da().ge(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,n)})},wc.prototype.hf=function(e,o){var i=this.c.e,n=e.pixelRatio,r=e.viewState,s=r.center,a=r.resolution,p=r.rotation,l=this.d,h=this.Qa,u=this.a.da(),c=e.viewHints,f=e.extent;return t(o.extent)&&(f=eo(f,o.extent)),c[0]||c[1]||so(f)||(r=r.projection,c=u.f,null===c||(r=c),f=u.Cc(f,a,n,r),null!==f&&os(this,f)&&(l=f,h=xc(this,f),null===this.Qa||e.postRenderFunctions.push(g(function(t,e){t.isContextLost()||t.deleteTexture(e)},i,this.Qa)))),null!==l&&(i=this.c.d.l,Sc(this,i.width,i.height,n,s,a,p,l.G()),this.i=null,n=this.q,Pe(n),Le(n,1,-1),Re(n,0,-1),this.d=l,this.Qa=h,rs(e.attributions,l.f),ss(e,u)),!0},wc.prototype.ee=function(e,o){var i=this.Pa(e,o,lb,this);return t(i)},wc.prototype.dc=function(t,e,o,i){if(null!==this.d&&!r(this.d.b()))if(this.a.da()instanceof bu){if(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t),this.Pa(t,e,lb,this))return o.call(i,this.a)}else{var n=[this.d.b().width,this.d.b().height];if(null===this.i){var s=e.size;e=Te(),Pe(e),Re(e,-1,-1),Le(e,2/s[0],2/s[1]),Re(e,0,s[1]),Le(e,1,-1),s=Te(),Ae(this.n,s);var a=Te();Pe(a),Re(a,0,n[1]),Le(a,1,-1),Le(a,n[0]/2,n[1]/2),Re(a,1,1);var p=Te();ke(a,s,p),ke(p,e,p),this.i=p}if(e=[0,0],ts(this.i,t,e),!(0>e[0]||e[0]>n[0]||0>e[1]||e[1]>n[1])&&(null===this.g&&(this.g=mr(1,1)),this.g.clearRect(0,0,1,1),this.g.drawImage(this.d.b(),e[0],e[1],1,1,0,0,1,1),0<this.g.getImageData(0,0,1,1).data[3]))return o.call(i,this.a)}},v(Tc,Du),i(Tc),v(Mc,Fu),i(Mc),v(Ec,vc),em=Ec.prototype,em.O=function(){zu(this.c.d,this.H),Ec.S.O.call(this)},em.yd=function(t,e){var o=this.c;return function(i,n){return Pn(t,i,n,function(t){var n=tn(o.a,t.gb());return n&&(e[i]||(e[i]={}),e[i][t.b.toString()]=t),n})}},em.gf=function(){Ec.S.gf.call(this),this.d=null},em.hf=function(e,o,i){var n,r=this.c,s=i.b,a=e.viewState,p=a.projection,l=this.a,h=l.da(),u=kn(h,p),c=Sn(u,a.resolution),f=u.ma(c),y=h.Xb(c,e.pixelRatio,p),d=y[0]/he(u.na(c),this.L)[0],g=f/d,v=h.Cd(),m=a.center;if(f==a.resolution?(m=ps(m,f,e.size),n=Qe(m,f,a.rotation,e.size)):n=e.extent,f=dn(u,n,f),null!==this.g&&Zo(this.g,f)&&this.i==h.b)g=this.p;else{var b=[_o(f),f.a-f.c+1],b=Math.max(b[0]*y[0],b[1]*y[1]),w=Math.pow(2,Math.ceil(Math.log(b)/Math.LN2)),b=g*w,x=u.Mb(c),S=x[0]+f.b*y[0]*g,g=x[1]+f.c*y[1]*g,g=[S,g,S+b,g+b];mc(this,e,w),s.viewport(0,0,w,w),s.clearColor(0,0,0,0),s.clear(16384),s.disable(3042),w=Vu(i,this.J,this.X),i.oe(w),null===this.d&&(this.d=new Cc(s,w)),Wu(i,34962,this.H),s.enableVertexAttribArray(this.d.b),s.vertexAttribPointer(this.d.b,2,5126,!1,16,0),s.enableVertexAttribArray(this.d.a),s.vertexAttribPointer(this.d.a,2,5126,!1,16,8),s.uniform1i(this.d.c,0),i={},i[c]={};var T,M,C,E=this.yd(h,i),P=l.c(),w=!0,S=He(),A=new Ko(0,0,0,0);for(M=f.b;M<=f.d;++M)for(C=f.c;C<=f.a;++C)if(x=h.Vb(c,M,C,d,p),!t(o.extent)||(T=mn(u,x.b,S),ro(T,o.extent))){if(T=x.state,2==T){if(tn(r.a,x.gb())){i[c][zo(x.b)]=x;continue}}else if(4==T||3==T&&!P)continue;w=!1,T=u.Ad(x.b,E,null,A,S),T||(x=u.Ld(x.b,A,S),null===x||E(c+1,x))}o=k(Y(i),Number),U(o);for(var R,L,N,E=new Float32Array(4),P=0,A=o.length;P<A;++P)for(R in L=i[o[P]])x=L[R],T=mn(u,x.b,S),M=2*(T[2]-T[0])/b,C=2*(T[3]-T[1])/b,N=2*(T[0]-g[0])/b-1,T=2*(T[1]-g[1])/b-1,Se(E,M,C,N,T),s.uniform4fv(this.d.d,E),Ac(r,x,y,v*d),s.drawArrays(5,0,4);w?(this.g=f,this.p=g,this.i=h.b):(this.p=this.g=null,this.i=-1,e.animate=!0)}as(e.usedTiles,h,c,f);var j=r.q;return ls(e,h,u,d,p,n,c,l.a(),function(t){var e;(e=2!=t.state||tn(r.a,t.gb()))||(e=t.gb()in j.c),e||xs(j,[t,vn(u,t.b),u.ma(t.b[0]),y,v*d])},this),ns(e,h),ss(e,h),s=this.q,Pe(s),Re(s,(m[0]-g[0])/(g[2]-g[0]),(m[1]-g[1])/(g[3]-g[1])),0!==a.rotation&&Ne(s,a.rotation),Le(s,e.size[0]*a.resolution/(g[2]-g[0]),e.size[1]*a.resolution/(g[3]-g[1])),Re(s,-.5,-.5),!0},em.dc=function(t,e,o,i){if(null!==this.e){var n=[0,0];if(ts(this.q,[t[0]/e.size[0],(e.size[1]-t[1])/e.size[1]],n),t=[n[0]*this.f,n[1]*this.f],e=this.c.d.b,e.bindFramebuffer(e.FRAMEBUFFER,this.e),n=new Uint8Array(4),e.readPixels(t[0],t[1],1,1,e.RGBA,e.UNSIGNED_BYTE,n),0<n[3])return o.call(i,this.a)}},v(Pc,vc),em=Pc.prototype,em.Lg=function(e,o,i){this.g=o;var n=e.viewState,r=this.d;if(null!==r&&!r.la()){var s=n.center,a=n.resolution,n=n.rotation,p=e.size,l=o.opacity,h=o.brightness,u=o.contrast,c=o.hue;
+o=o.saturation,e=e.skippedFeatureUids;var f,y,d;for(f=0,y=cw.length;f<y;++f)d=r.a[cw[f]],t(d)&&ic(d,i,s,a,n,p,l,h,u,c,o,e,void 0,!1)}},em.O=function(){var t=this.d;null!==t&&(sc(t,this.c.d)(),this.d=null),Pc.S.O.call(this)},em.Pa=function(t,e,o,i){if(null!==this.d&&null!==this.g){var n=e.viewState,r=this.a,s=this.g,a={};return this.d.c(t,this.c.d,n.center,n.resolution,n.rotation,e.size,e.pixelRatio,s.opacity,s.brightness,s.contrast,s.hue,s.saturation,e.skippedFeatureUids,function(t){var e=c(t).toString();if(!(e in a))return a[e]=!0,o.call(i,t,r)})}},em.ee=function(t,e){if(null===this.d||null===this.g)return!1;var o=e.viewState,i=this.g;return lc(this.d,t,this.c.d,o.resolution,o.rotation,i.opacity,i.brightness,i.contrast,i.hue,i.saturation,e.skippedFeatureUids)},em.dc=function(t,e,o,i){if(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t),this.ee(t,e))return o.call(i,this.a)},em.Rl=function(){is(this)},em.hf=function(e,o,i){function n(e){var o;if(t(e.c)?o=e.c.call(e,h):t(r.a)&&(o=(0,r.a)(e,h)),null!=o){if(null!=o){var i,n,s=!1;for(i=0,n=o.length;i<n;++i)s=jl(f,e,o[i],Nl(h,u),this.Rl,this)||s;e=s}else e=!1;this.i=this.i||e}}var r=this.a;o=r.da(),rs(e.attributions,o.d),ss(e,o);var s=e.viewHints[0],a=e.viewHints[1],p=r.o,l=r.n;if(!this.i&&!p&&s||!l&&a)return!0;var a=e.extent,p=e.viewState,s=p.projection,h=p.resolution,u=e.pixelRatio,p=r.b,c=r.c,l=r.get("renderOrder");if(t(l)||(l=Ll),a=De(a,c*h),!this.i&&this.J==h&&this.L==p&&this.H==l&&Be(this.p,a))return!0;null===this.d||e.postRenderFunctions.push(sc(this.d,i)),this.i=!1;var f=new rc(.5*h/u,a,r.c);if(o.ac(a,h,s),null===l)o.Ab(a,h,n,this);else{var y=[];o.Ab(a,h,function(t){y.push(t)},this),U(y,l),E(y,n,this)}return ac(f,i),this.J=h,this.L=p,this.H=l,this.p=a,this.d=f,!0},v(kc,ys),em=kc.prototype,em.Ke=function(t){return t instanceof Rp?new wc(this,t):t instanceof Lp?new Ec(this,t):t instanceof Np?new Pc(this,t):null},em.O=function(){var t=this.e;t.isContextLost()||this.a.forEach(function(e){null===e||t.deleteTexture(e.Qa)}),Ct(this.d),kc.S.O.call(this)},em.Ci=function(t,e){for(var o,i=this.e;1024<this.a.Tb()-this.i;){if(o=this.a.b.qc,null===o){if(+this.a.b.Wd==e.index)break;--this.i}else i.deleteTexture(o.Qa);this.a.pop()}},em.M=function(){return"webgl"},em.Pl=function(t){t.preventDefault(),this.a.clear(),this.i=0,W(this.f,function(t){t.gf()})},em.Ql=function(){Lc(this),this.g.render()},em.ue=function(t){var e=this.d,o=this.e;if(o.isContextLost())return!1;if(null===t)return this.l&&(Wi(this.b,!1),this.l=!1),!1;this.n=t.focus,this.a.set((-t.index).toString(),null),++this.i;var i,n,r,s,a=[],p=t.layerStatesArray,l=t.viewState.resolution;for(i=0,n=p.length;i<n;++i)s=p[i],Zr(s,l)&&"ready"==s.i&&(r=vs(this,s.layer),r.hf(t,s,e)&&a.push(s));for(p=t.size[0]*t.pixelRatio,l=t.size[1]*t.pixelRatio,this.b.width==p&&this.b.height==l||(this.b.width=p,this.b.height=l),o.bindFramebuffer(36160,null),o.clearColor(0,0,0,0),o.clear(16384),o.enable(3042),o.viewport(0,0,this.b.width,this.b.height),Rc(this,"precompose",t),i=0,n=a.length;i<n;++i)s=a[i],r=vs(this,s.layer),r.Lg(t,s,e);this.l||(Wi(this.b,!0),this.l=!0),ds(t),1024<this.a.Tb()-this.i&&t.postRenderFunctions.push(d(this.Ci,this)),this.q.la()||(t.postRenderFunctions.push(this.L),t.animate=!0),Rc(this,"postcompose",t),ms(this,t),t.postRenderFunctions.push(gs)},em.ef=function(t,e,o,i,n,r){var s;if(this.e.isContextLost())return!1;var a=this.d,p=e.viewState;if(null!==this.c){var l={},h=Zw;if(s=this.c.c(t,a,p.center,p.resolution,p.rotation,e.size,e.pixelRatio,h.opacity,h.brightness,h.contrast,h.hue,h.saturation,{},function(t){var e=c(t).toString();if(!(e in l))return l[e]=!0,o.call(i,t,null)}))return s}for(a=e.layerStatesArray,h=a.length-1;0<=h;--h){s=a[h];var u=s.layer;if(Zr(s,p.resolution)&&n.call(r,u)&&(s=vs(this,u).Pa(t,e,o,i)))return s}},em.Kg=function(t,e,o,i){var n=!1;if(this.e.isContextLost())return!1;var r=this.d,s=e.viewState;if(null!==this.c&&(n=Zw,n=lc(this.c,t,r,s.resolution,s.rotation,n.opacity,n.brightness,n.contrast,n.hue,n.saturation,{})))return!0;var a,r=e.layerStatesArray;for(a=r.length-1;0<=a;--a){var p=r[a],l=p.layer;if(Zr(p,s.resolution)&&o.call(i,l)&&(n=vs(this,l).ee(t,e)))return!0}return n},em.Jg=function(t,e,o,i,n){if(this.e.isContextLost())return!1;var r,s=this.d,a=e.viewState;if(null!==this.c){var p=Zw;if(r=this.g.ka(t),lc(this.c,r,s,a.resolution,a.rotation,p.opacity,p.brightness,p.contrast,p.hue,p.saturation,{})&&(r=o.call(i,null)))return r}for(s=e.layerStatesArray,p=s.length-1;0<=p;--p){r=s[p];var l=r.layer;if(Zr(r,a.resolution)&&n.call(i,l)&&(r=vs(this,l).dc(t,e,o,i)))return r}};var Zw={opacity:1,brightness:0,contrast:1,hue:0,saturation:1},_w=["canvas","webgl","dom"];v(Nc,re),em=Nc.prototype,em.si=function(t){this.e.push(t)},em.ti=function(t){this.d.push(t)},em.Jf=function(t){this.Ub().Bc().push(t)},em.Kf=function(t){this.f.push(t)},em.Ha=function(t){this.render(),Array.prototype.push.apply(this.H,arguments)},em.O=function(){wi(this.a),Nc.S.O.call(this)},em.Ne=function(e,o,i,n,r){if(null!==this.c)return e=this.ka(e),this.i.ef(e,this.c,o,t(i)?i:null,t(n)?n:lb,t(r)?r:null)},em.al=function(e,o,i,n,r){if(null!==this.c)return this.i.Jg(e,this.c,o,t(i)?i:null,t(n)?n:lb,t(r)?r:null)},em.ok=function(e,o,i){return null!==this.c&&(e=this.ka(e),this.i.Kg(e,this.c,t(o)?o:lb,t(i)?i:null))},em.Ui=function(t){return this.ka(this.Bd(t))},em.Bd=function(e){if(t(e.changedTouches)){var o=e.changedTouches[0];return e=Hi(this.a),[o.clientX-e.x,o.clientY-e.y]}return o=this.a,e=Hi(e),o=Hi(o),o=new pi(e.x-o.x,e.y-o.y),[o.x,o.y]},em.df=function(){return this.get("target")},em.bd=function(){var e=this.df();return t(e)?ui(e):null},em.ka=function(t){var e=this.c;return null===e?null:(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t))},em.Si=function(){return this.e},em.oj=function(){return this.f},em.bj=function(){return this.d},em.Ub=function(){return this.get("layergroup")},em.vg=function(){return this.Ub().Bc()},em.ta=function(t){var e=this.c;return null===e?null:(t=t.slice(0,2),ts(e.coordinateToPixelMatrix,t,t))},em.xa=function(){return this.get("size")},em.R=function(){return this.get("view")},em.Bj=function(){return this.a},em.zj=function(t,e,o,i){var n=this.c;return null!==n&&e in n.wantedTiles&&n.wantedTiles[e][zo(t.b)]?(t=o[0]-n.focus[0],o=o[1]-n.focus[1],65536*Math.log(i)+Math.sqrt(t*t+o*o)/i):1/0},em.dg=function(t,e){var o=new qr(e||t.type,this,t);this.eg(o)},em.eg=function(t){if(null!==this.c){this.L=t.coordinate,t.frameState=this.c;var e,o=this.d.a;if(!1!==this.dispatchEvent(t))for(e=o.length-1;0<=e;e--){var i=o[e];if(i.c()&&!i.handleEvent(t))break}}},em.gk=function(){var t=this.c,e=this.Fa;if(!e.la()){var o=16,i=o,n=0;if(null!==t&&(n=t.viewHints,n[0]&&(o=this.wb?8:0,i=2),n[1]&&(o=this.xb?8:0,i=2),n=K(t.wantedTiles)),o*=n,i*=n,e.d<o){for(Ms(e),o=Math.min(o-e.d,i,e.Tb()),i=0;i<o;++i)n=ws(e)[0],Ht(n,"change",e.f,!1,e),n.load();e.d+=o}}for(e=this.ba,o=0,i=e.length;o<i;++o)e[o](this,t);e.length=0},em.jk=function(){this.render()},em.lk=function(){var t=this.bd();hr(this.n),null===t?(wi(this.a),null!==this.l&&(zt(this.l),this.l=null)):(t.appendChild(this.a),lr(this.n,null===this.T?t:this.T),null===this.l&&(this.l=Ht(this.Ga,"resize",this.Kc,!1,this))),this.Kc()},em.bl=function(){this.render()},em.nk=function(){this.render()},em.mk=function(){null!==this.J&&(zt(this.J),this.J=null);var t=this.R();null!==t&&(this.J=Ht(t,"propertychange",this.nk,!1,this)),this.render()},em.Rj=function(){this.render()},em.Sj=function(){this.render()},em.Qj=function(){if(null!==this.g){for(var t=this.g.length,e=0;e<t;++e)zt(this.g[e]);this.g=null}t=this.Ub(),null!=t&&(this.g=[Ht(t,"propertychange",this.Sj,!1,this),Ht(t,"change",this.Rj,!1,this)]),this.render()},em.Rn=function(){var t=this.o;Wn(t),t.Pf()},em.render=function(){null!=this.o.$||this.o.start()},em.Ln=function(e){if(t(this.e.remove(e)))return e},em.Mn=function(e){var o;return t(this.d.remove(e))&&(o=e),o},em.Nn=function(t){return this.Ub().Bc().remove(t)},em.On=function(e){if(t(this.f.remove(e)))return e},em.Qn=function(e){var o,i,n,r=this.xa(),s=this.R(),a=null;if(t(r)&&0<r[0]&&0<r[1]&&null!==s&&Io(s)){var a=s.c.slice(),p=this.Ub().Ue(),l={};for(o=0,i=p.length;o<i;++o)l[c(p[o].layer)]=p[o];n=jo(s),a={animate:!1,attributions:{},coordinateToPixelMatrix:this.Ra,extent:null,focus:null===this.L?n.center:this.L,index:this.vb++,layerStates:l,layerStatesArray:p,logos:nt(this.sc),pixelRatio:this.Nc,pixelToCoordinateMatrix:this.Ee,postRenderFunctions:[],size:r,skippedFeatureUids:this.N,tileQueue:this.Fa,time:e,usedTiles:{},viewState:n,viewHints:a,wantedTiles:{}}}if(null!==a){for(e=this.H,o=r=0,i=e.length;o<i;++o)s=e[o],s(this,a)&&(e[r++]=s);e.length=r,a.extent=Qe(n.center,n.resolution,n.rotation,a.size)}this.c=a,this.i.ue(a),null!==a&&(a.animate&&this.render(),Array.prototype.push.apply(this.ba,a.postRenderFunctions),0!==this.H.length||a.viewHints[0]||a.viewHints[1]||Xe(a.extent,this.oa)||(this.dispatchEvent(new _i("moveend",this,a)),Fe(a.extent,this.oa))),this.dispatchEvent(new _i("postrender",this,a)),Yn(this.gk,this)},em.zh=function(t){this.set("layergroup",t)},em.vf=function(t){this.set("size",t)},em.cl=function(t){this.set("target",t)},em.jo=function(t){this.set("view",t)},em.Eh=function(t){t=c(t).toString(),this.N[t]=!0,this.render()},em.Kc=function(){var t=this.bd();if(null===t)this.vf(void 0);else{var e=Mi(t),o=Cm&&t.currentStyle;o&&Pi(hi(e))&&"auto"!=o.width&&"auto"!=o.height&&!o.boxSizing?(e=zi(t,o.width,"width","pixelWidth"),t=zi(t,o.height,"height","pixelHeight"),t=new li(e,t)):(o=new li(t.offsetWidth,t.offsetHeight),e=Vi(t,"padding"),t=Zi(t),t=new li(o.width-t.left-e.left-e.right-t.right,o.height-t.top-e.top-e.bottom-t.bottom)),this.vf([t.width,t.height])}},em.Ih=function(t){t=c(t).toString(),delete this.N[t],this.render()},Ap(),v(Ic,re),em=Ic.prototype,em.$d=function(){return this.get("element")},em.ae=function(){return this.get("map")},em.Yf=function(){return this.get("offset")},em.wg=function(){return this.get("position")},em.ag=function(){return this.get("positioning")},em.Kj=function(){mi(this.Z);var t=this.$d();null!=t&&vi(this.Z,t)},em.Yj=function(){null!==this.c&&(wi(this.Z),zt(this.c),this.c=null);var t=this.ae();null!=t&&(this.c=Ht(t,"postrender",this.render,!1,this),Fc(this),t=this.i?t.p:t.X,this.g?bi(t,this.Z,0):vi(t,this.Z))},em.render=function(){Fc(this)},em.ck=function(){Fc(this)},em.ek=function(){if(Fc(this),t(this.get("position"))&&this.f){var e=this.ae();if(t(e)&&!r(e.bd())){var o=Dc(e.bd(),e.xa()),i=this.$d(),n=i.offsetWidth,s=i.currentStyle||window.getComputedStyle(i),n=n+(parseInt(s.marginLeft,10)+parseInt(s.marginRight,10)),s=i.offsetHeight,a=i.currentStyle||window.getComputedStyle(i),s=s+(parseInt(a.marginTop,10)+parseInt(a.marginBottom,10)),p=Dc(i,[n,s]),i=this.e;Be(o,p)||(n=p[0]-o[0],s=o[2]-p[2],a=p[1]-o[1],p=o[3]-p[3],o=[0,0],0>n?o[0]=n-i:0>s&&(o[0]=Math.abs(s)+i),0>a?o[1]=a-i:0>p&&(o[1]=Math.abs(p)+i),0===o[0]&&0===o[1])||(i=e.R().Ca(),n=e.ta(i),o=[n[0]+o[0],n[1]+o[1]],null!==this.d&&(this.d.source=i,e.Ha(Go(this.d))),e.R().Na(e.ka(o)))}}},em.fk=function(){Fc(this)},em.wh=function(t){this.set("element",t)},em.setMap=function(t){this.set("map",t)},em.Bh=function(t){this.set("offset",t)},em.uf=function(t){this.set("position",t)},em.Ch=function(t){this.set("positioning",t)},v(Oc,Ji),em=Oc.prototype,em.setMap=function(t){var e=this.a;t!==e&&(e&&(e=e.R())&&Wt(e,se("rotation"),this.Rd,!1,this),Oc.S.setMap.call(this,t),t&&(this.l.push(Ht(t,"propertychange",this.Zj,!1,this)),0===this.d.vg().Ib()&&this.d.zh(t.Ub()),t=t.R()))&&(Ht(t,se("rotation"),this.Rd,!1,this),Io(t)&&(this.d.Kc(),Uc(this)))},em.Zj=function(t){"view"===t.key&&((t=t.oldValue)&&Wt(t,se("rotation"),this.Rd,!1,this),t=this.a.R(),Ht(t,se("rotation"),this.Rd,!1,this))},em.Rd=function(){this.d.R().be(this.a.R().Da())},em.ml=function(t){t.preventDefault(),Hc(this)},em.ll=function(){return this.g},em.ol=function(t){this.g!==t&&(this.g=t,ji(this.element,"ol-uncollapsible"),!t&&this.f&&Hc(this))},em.nl=function(t){this.g&&this.f!==t&&Hc(this)},em.kl=function(){return this.f},v(qc,Ji);var Jw=[1,2,5];qc.prototype.p=function(){return this.get("units")},qc.prototype.N=function(){Xc(this)},qc.prototype.J=function(t){this.set("units",t)},v(Wc,Tt);var Qw=[];Wc.prototype.Ka=function(t,e,o,i){s(e)||(e&&(Qw[0]=e.toString()),e=Qw);for(var n=0;n<e.length;n++){var r=Ht(t,e[n],o||this.handleEvent,i||!1,this.a||this);if(!r)break;this.b[r.key]=r}return this},Wc.prototype.wf=function(t,e,o,i,n){if(s(e))for(var r=0;r<e.length;r++)this.wf(t,e[r],o,i,n);else o=o||this.handleEvent,n=n||this.a||this,o=Jt(o),i=!!i,e=jt(t)?Bt(t.ab,String(e),o,i,n):t&&(t=_t(t))?Bt(t,e,o,i,n):null,e&&(zt(e),delete this.b[e.key]);return this},Wc.prototype.O=function(){Wc.S.O.call(this),zc(this)},Wc.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented")},v(Kc,Qt);var tx=Cm||Em&&pt("1.9.3");em=Kc.prototype,em.clientX=0,em.clientY=0,em.screenX=0,em.screenY=0,em.Fh=0,em.Gh=0,em.yc=0,em.zc=0,em.Zb=!1,em.O=function(){Kc.S.O.call(this),Wt(this.handle,["touchstart","mousedown"],this.cg,!1,this),zc(this.a),tx&&this.c.releaseCapture(),this.handle=this.target=null},em.cg=function(t){var e="mousedown"==t.type;if(this.Zb||e&&!Nt(t))this.dispatchEvent("earlycancel");else if(Vc(t),this.dispatchEvent(new Qc("start",this,t.clientX,t.clientY))){this.Zb=!0,t.preventDefault();var e=this.c,o=e.documentElement,i=!tx;this.a.Ka(e,["touchmove","mousemove"],this.bk,i),this.a.Ka(e,["touchend","mouseup"],this.Od,i),tx?(o.setCapture(!1),this.a.Ka(o,"losecapture",this.Od)):this.a.Ka(e?e.parentWindow||e.defaultView:window,"blur",this.Od),this.e&&this.a.Ka(this.e,"scroll",this.en,i),this.clientX=this.Fh=t.clientX,this.clientY=this.Gh=t.clientY,this.screenX=t.screenX,this.screenY=t.screenY,this.yc=this.target.offsetLeft,this.zc=this.target.offsetTop,this.d=ki(hi(this.c)),lm()}},em.Od=function(t){if(zc(this.a),tx&&this.c.releaseCapture(),this.Zb){Vc(t),this.Zb=!1;var e=_c(this,this.yc),o=Jc(this,this.zc);this.dispatchEvent(new Qc("end",this,t.clientX,t.clientY,0,e,o))}else this.dispatchEvent("earlycancel")},em.bk=function(t){Vc(t);var e=1*(t.clientX-this.clientX),o=t.clientY-this.clientY;if(this.clientX=t.clientX,this.clientY=t.clientY,this.screenX=t.screenX,this.screenY=t.screenY,!this.Zb){var i=this.Fh-this.clientX,n=this.Gh-this.clientY;if(0<i*i+n*n){if(!this.dispatchEvent(new Qc("start",this,t.clientX,t.clientY)))return void(this.U||this.Od(t));this.Zb=!0}}o=Yc(this,e,o),e=o.x,o=o.y,this.Zb&&this.dispatchEvent(new Qc("beforedrag",this,t.clientX,t.clientY,0,e,o))&&(Zc(this,t,e,o),t.preventDefault())},em.en=function(t){var e=Yc(this,0,0);t.clientX=this.clientX,t.clientY=this.clientY,Zc(this,t,e.x,e.y)},v(Qc,Et),v(tf,Ji);var ex=0;em=tf.prototype,em.setMap=function(t){tf.S.setMap.call(this,t),null===t||t.render()},em.Gj=function(t){var e=this.a,o=e.R(),i=o.ya();e.Ha(qo({resolution:i,duration:this.o,easing:Fo})),t=of(this,t.offsetX-this.i[0]/2,t.offsetY-this.i[1]/2),t=nf(this,t),o.tb(o.constrainResolution(t))},em.Jj=function(){Do(this.a.R(),1)},em.Hj=function(t){t=of(this,t.left,t.top),this.f=nf(this,t),this.a.R().tb(this.f)},em.Ij=function(){var t=this.a,e=t.R();Do(e,-1),t.Ha(qo({resolution:this.f,duration:this.o,easing:Fo})),t=e.constrainResolution(this.f),e.tb(t)},v(rf,Ji),rf.prototype.f=function(t){t.preventDefault();var e=this.a;t=e.R();var o=null===this.d?t.e.G():this.d,e=e.xa();t.Me(o,e)},v(sf,re),em=sf.prototype,em.O=function(){this.bf(!1),sf.S.O.call(this)},em.fn=function(t){if(t=t.b,null!=t.alpha){var e=ct(t.alpha);this.set("alpha",e),"boolean"==typeof t.absolute&&t.absolute?this.set("heading",e):null!=t.webkitCompassHeading&&null!=t.webkitCompassAccuracy&&-1!=t.webkitCompassAccuracy&&this.set("heading",ct(t.webkitCompassHeading))}null!=t.beta&&this.set("beta",ct(t.beta)),null!=t.gamma&&this.set("gamma",ct(t.gamma)),this.k()},em.Mi=function(){return this.get("alpha")},em.Pi=function(){return this.get("beta")},em.Yi=function(){return this.get("gamma")},em.Ik=function(){return this.get("heading")},em.og=function(){return this.get("tracking")},em.Jk=function(){if(Ab){var t=this.og();t&&null===this.a?this.a=Ht(sm,"deviceorientation",this.fn,!1,this):t||null===this.a||(zt(this.a),this.a=null)}},em.bf=function(t){this.set("tracking",t)},v(af,re),em=af.prototype,em.clone=function(){var t=new af(this.D());t.Ic(this.a);var e=this.Q();return null!=e&&t.La(e.clone()),e=this.e,null===e||t.cf(e),t},em.Q=function(){return this.get(this.a)},em.aj=function(){return this.$},em.$i=function(){return this.a},em.Qk=function(){return this.e},em.Rk=function(){return this.c},em.Sk=function(){this.k()},em.Pd=function(){null!==this.d&&(zt(this.d),this.d=null);var t=this.Q();null!=t&&(this.d=Ht(t,"change",this.Sk,!1,this)),this.k()},em.La=function(t){this.set(this.a,t)},em.cf=function(t){this.e=t,null===t?t=void 0:h(t)||(t=s(t)?t:[t],t=ln(t)),this.c=t,this.k()},em.Qb=function(t){this.$=t,this.k()},em.Ic=function(t){Wt(this,se(this.a),this.Pd,!1,this),this.a=t,Ht(this,se(this.a),this.Pd,!1,this),this.Pd()},em=pf.prototype,em.pg=function(t){this.b.push(t)},em.Kk=function(){return this.b},em.Lk=function(){return this.d},em.qg=function(){lf(this)},em.Mj=function(t){t=t.element,this.a[c(t).toString()]=Ht(t,"change",this.qg,!1,this),lf(this)},em.Nj=function(t){t=c(t.element).toString(),zt(this.a[t]),delete this.a[t],lf(this)},em.Ok=function(){lf(this)},em.Pk=function(e){if(null!==this.b){var o=this.f;t(o)||(o=rp);var i=e.b;e=e.frameState;var n,r,s,a,p=e.viewState.resolution,l=Nl(p,e.pixelRatio);this.b.forEach(function(e){if(a=e.c,s=t(a)?a.call(e,p):o(e,p),null!=s)for(r=s.length,n=0;n<r;++n)jl(i,e,s[n],l,this.Ok,this)},this)}},em.Yd=function(t){this.b.remove(t)},em.ld=function(t){null!==this.c&&(E(this.c,zt),this.c=null),null!==this.a&&(E(V(this.a),zt),this.a=null),this.b=t,null!==t&&(this.c=[Ht(t,"add",this.Mj,!1,this),Ht(t,"remove",this.Nj,!1,this)],this.a={},t.forEach(function(t){this.a[c(t).toString()]=Ht(t,"change",this.qg,!1,this)},this)),lf(this)},em.setMap=function(t){null!==this.e&&(zt(this.e),this.e=null),lf(this),this.d=t,null!==t&&(this.e=Ht(t,"postcompose",this.Pk,!1,this),t.render())},em.rg=function(t){this.g=t,this.f=np(t),lf(this)},em.Mk=function(){return this.g},em.Nk=function(){return this.f},v(yf,hf),em=yf.prototype,em.M=function(){return"json"},em.sb=function(t,e){return this.Fc(df(t),uf(this,t,e))},em.ja=function(t,e){return this.of(df(t),uf(this,t,e))},em.Gc=function(t,e){return this.hh(df(t),uf(this,t,e))},em.za=function(t){return this.nh(df(t))},em.qd=function(t,e){return Pw(this.Lc(t,e))},em.ub=function(t,e){return Pw(this.ze(t,e))},em.Mc=function(t,e){return Pw(this.Be(t,e))},v(gf,yf);var ox={Point:function(t){return null!=t.m&&null!=t.z?new Ta([t.x,t.y,t.z,t.m],"XYZM"):null!=t.z?new Ta([t.x,t.y,t.z],"XYZ"):null!=t.m?new Ta([t.x,t.y,t.m],"XYM"):new Ta([t.x,t.y])},LineString:function(t){return new ml(t.paths[0],mf(t))},Polygon:function(t){return new Fa(t.rings,mf(t))},MultiPoint:function(t){return new Cl(t.points,mf(t))},MultiLineString:function(t){return new xl(t.paths,mf(t))},MultiPolygon:function(t){return new El(t.rings,mf(t))}},ix={Point:function(t){var e=t.K();return t=t.a,"XYZ"===t?{x:e[0],y:e[1],z:e[2]}:"XYM"===t?{x:e[0],y:e[1],m:e[2]}:"XYZM"===t?{x:e[0],y:e[1],z:e[2],m:e[3]}:"XY"===t?{x:e[0],y:e[1]}:void 0},LineString:function(t){var e=bf(t);return{hasZ:e.hasZ,hasM:e.hasM,paths:[t.K()]}},Polygon:function(t){var e=bf(t);return{hasZ:e.hasZ,hasM:e.hasM,rings:t.K(!1)}},MultiPoint:function(t){var e=bf(t);return{hasZ:e.hasZ,hasM:e.hasM,points:t.K()}},MultiLineString:function(t){var e=bf(t);return{hasZ:e.hasZ,hasM:e.hasM,paths:t.K()}},MultiPolygon:function(t){var e=bf(t);t=t.K(!1);for(var o=[],i=0;i<t.length;i++)for(var n=t[i].length-1;0<=n;n--)o.push(t[i][n]);return{hasZ:e.hasZ,hasM:e.hasM,rings:o}}};em=gf.prototype,em.Fc=function(e,o){var i=vf(e.geometry,o),n=new af;return t(this.b)&&n.Ic(this.b),n.La(i),t(o)&&t(o.Xe)&&t(e.attributes[o.Xe])&&n.Qb(e.attributes[o.Xe]),t(e.attributes)&&n.t(e.attributes),n},em.of=function(e,o){var i=t(o)?o:{};if(null!=e.features){var n,r,s=[],a=e.features;for(i.Xe=e.objectIdFieldName,n=0,r=a.length;n<r;++n)s.push(this.Fc(a[n],i));return s}return[this.Fc(e,i)]},em.hh=function(t,e){return vf(t,e)},em.nh=function(t){return null!=t.spatialReference&&null!=t.spatialReference.wkid?xo("EPSG:"+t.spatialReference.wkid):null},em.Be=function(t,e){return wf(t,cf(this,e))},em.Lc=function(e,o){o=cf(this,o);var i={},n=e.Q();return null!=n&&(i.geometry=wf(n,o)),n=e.D(),et(n,e.a),i.attributes=Q(n)?{}:n,t(o)&&t(o.featureProjection)&&(i.spatialReference={wkid:xo(o.featureProjection).b.split(":").pop()}),i},em.ze=function(t,e){e=cf(this,e);var o,i,n=[];for(o=0,i=t.length;o<i;++o)n.push(this.Lc(t[o],e));return{features:n}},v(xf,yf);var nx={Point:function(t){return new Ta(t.coordinates)},LineString:function(t){return new ml(t.coordinates)},Polygon:function(t){return new Fa(t.coordinates)},MultiPoint:function(t){return new Cl(t.coordinates)},MultiLineString:function(t){return new xl(t.coordinates)},MultiPolygon:function(t){return new El(t.coordinates)},GeometryCollection:function(t,e){var o=k(t.geometries,function(t){return Sf(t,e)});return new ul(o)}},rx={Point:function(t){return{type:"Point",coordinates:t.K()}},LineString:function(t){return{type:"LineString",coordinates:t.K()}},Polygon:function(e,o){var i;return t(o)&&(i=o.rightHanded),{type:"Polygon",coordinates:e.K(i)}},MultiPoint:function(t){return{type:"MultiPoint",coordinates:t.K()}},MultiLineString:function(t){return{type:"MultiLineString",coordinates:t.K()}},MultiPolygon:function(e,o){var i;return t(o)&&(i=o.rightHanded),{type:"MultiPolygon",coordinates:e.K(i)}},GeometryCollection:function(t,e){return{type:"GeometryCollection",geometries:k(t.d,function(t){return Tf(t,e)})}},Circle:function(){return{type:"GeometryCollection",geometries:[]}}};em=xf.prototype,em.Fc=function(e,o){var i=Sf(e.geometry,o),n=new af;return t(this.b)&&n.Ic(this.b),n.La(i),t(e.id)&&n.Qb(e.id),t(e.properties)&&n.t(e.properties),n},em.of=function(t,e){if("Feature"==t.type)return[this.Fc(t,e)];if("FeatureCollection"==t.type){var o,i,n=[],r=t.features;for(o=0,i=r.length;o<i;++o)n.push(this.Fc(r[o],e));return n}return[]},em.hh=function(t,e){return Sf(t,e)},em.nh=function(t){return t=t.crs,null!=t?"name"==t.type?xo(t.properties.name):"EPSG"==t.type?xo("EPSG:"+t.properties.code):null:this.defaultDataProjection},em.Lc=function(t,e){e=cf(this,e);var o={type:"Feature"},i=t.$;return null!=i&&(o.id=i),i=t.Q(),null!=i&&(o.geometry=Tf(i,e)),i=t.D(),et(i,t.a),o.properties=Q(i)?null:i,o},em.ze=function(t,e){e=cf(this,e);var o,i,n=[];for(o=0,i=t.length;o<i;++o)n.push(this.Lc(t[o],e));return{type:"FeatureCollection",features:n}},em.Be=function(t,e){return Tf(t,cf(this,e))},v(Mf,hf),em=Mf.prototype,em.M=function(){return"xml"},em.sb=function(t,e){if(Hw(t))return Cf(this,t,e);if(qw(t))return this.fh(t,e);if(p(t)){var o=qh(t);return Cf(this,o,e)}return null},em.ja=function(t,e){if(Hw(t))return Ef(this,t,e);if(qw(t))return this.Ob(t,e);if(p(t)){var o=qh(t);return Ef(this,o,e)}return[]},em.Gc=function(e,o){if(Hw(e))return this.l(e,o);if(qw(e)){var i=this.qe(e,[uf(this,e,t(o)?o:{})]);return t(i)?i:null}return p(e)?(i=qh(e),this.l(i,o)):null},em.za=function(t){return Hw(t)?this.sf(t):qw(t)?this.te(t):p(t)?(t=qh(t),this.sf(t)):null},em.sf=function(){return this.defaultDataProjection},em.te=function(){return this.defaultDataProjection},em.qd=function(t,e){var o=this.U(t,e);return Ch(o)},em.ub=function(t,e){var o=this.a(t,e);return Ch(o)},em.Mc=function(t,e){var o=this.q(t,e);return Ch(o)},v(Pf,Mf),em=Pf.prototype,em.jd=function(e,o){var i,n=Gw(e);if("FeatureCollection"==n)i="http://www.opengis.net/wfs"===e.namespaceURI?eu([],this.b,e,o,this):eu(null,this.b,e,o,this);else if("featureMembers"==n||"featureMember"==n){var r=o[0],a=r.featureType;i=r.featureNS;var l,h;if(!t(a)&&null!=e.childNodes){for(a=[],i={},l=0,h=e.childNodes.length;l<h;++l){var u=e.childNodes[l];if(1===u.nodeType){var c=u.nodeName.split(":").pop();if(-1===C(a,c)){var f;_(i,u.namespaceURI)?f=J(i,function(t){return t===u.namespaceURI}):(f="p"+K(i),i[f]=u.namespaceURI),a.push(f+":"+c)}}}r.featureType=a,r.featureNS=i}p(i)&&(l=i,i={},i.p0=l);var y,r={},a=s(a)?a:[a];for(y in i){for(c={},l=0,h=a.length;l<h;++l)(-1===a[l].indexOf(":")?"p0":a[l].split(":")[0])===y&&(c[a[l].split(":").pop()]="featureMembers"==n?Xh(this.nf,this):Wh(this.nf,this));r[i[y]]=c}i=eu([],r,e,o)}return t(i)||(i=[]),i},em.qe=function(t,e){var o=e[0];o.srsName=t.firstElementChild.getAttribute("srsName");var i=eu(null,this.Cf,t,e,this);if(null!=i)return ff(i,!1,o)},em.nf=function(e,o){var i,n,r=e.getAttribute("fid")||$w(e,"http://www.opengis.net/gml","id"),s={};for(i=e.firstElementChild;null!==i;i=i.nextElementSibling){var a=Gw(i);if(0===i.childNodes.length||1===i.childNodes.length&&3===i.firstChild.nodeType){var p=kh(i,!1);/^[\s\xa0]*$/.test(p)&&(p=void 0),s[a]=p}else"boundedBy"!==a&&(n=a),s[a]=this.qe(i,o)}return i=new af(s),t(n)&&i.Ic(n),r&&i.Qb(r),i},em.mh=function(t,e){var o=this.pe(t,e);if(null!=o){var i=new Ta(null);return Ma(i,"XYZ",o),i}},em.kh=function(e,o){var i=eu([],this.ai,e,o,this);if(t(i))return new Cl(i)},em.jh=function(e,o){var i=eu([],this.$h,e,o,this);if(t(i)){var n=new xl(null);return Ml(n,i),n}},em.lh=function(e,o){var i=eu([],this.bi,e,o,this);if(t(i)){var n=new El(null);return Rl(n,i),n}},em.$g=function(t,e){tu(this.ei,t,e,this)},em.kg=function(t,e){tu(this.Yh,t,e,this)},em.ah=function(t,e){tu(this.fi,t,e,this)},em.re=function(t,e){var o=this.pe(t,e);if(null!=o){var i=new ml(null);return wl(i,"XYZ",o),i}},em.yn=function(t,e){var o=eu(null,this.sd,t,e,this);if(null!=o)return o},em.ih=function(e,o){var i=this.pe(e,o);if(t(i)){var n=new xa(null);return Sa(n,"XYZ",i),n}},em.se=function(e,o){var i=eu([null],this.De,e,o,this);if(t(i)&&null!==i[0]){var n,r,s=new Fa(null),a=i[0],p=[a.length];for(n=1,r=i.length;n<r;++n)F(a,i[n]),p.push(a.length);return Ua(s,"XYZ",a,p),s}},em.pe=function(t,e){return eu(null,this.sd,t,e,this)},em.ai=Object({"http://www.opengis.net/gml":{pointMember:Xh(Pf.prototype.$g),pointMembers:Xh(Pf.prototype.$g)}}),em.$h=Object({"http://www.opengis.net/gml":{lineStringMember:Xh(Pf.prototype.kg),lineStringMembers:Xh(Pf.prototype.kg)}}),em.bi=Object({"http://www.opengis.net/gml":{polygonMember:Xh(Pf.prototype.ah),polygonMembers:Xh(Pf.prototype.ah)}}),em.ei=Object({"http://www.opengis.net/gml":{Point:Xh(Pf.prototype.pe)}}),em.Yh=Object({"http://www.opengis.net/gml":{LineString:Xh(Pf.prototype.re)}}),em.fi=Object({"http://www.opengis.net/gml":{Polygon:Xh(Pf.prototype.se)}}),em.td=Object({"http://www.opengis.net/gml":{LinearRing:Wh(Pf.prototype.yn)}}),em.Ob=function(e,o){var i={featureType:this.featureType,featureNS:this.featureNS};return t(o)&&rt(i,uf(this,e,o)),this.jd(e,[i])},em.te=function(e){return xo(t(this.o)?this.o:e.firstElementChild.getAttribute("srsName"))},v(Gf,Pf),em=Gf.prototype,em.Bn=function(e,o){var i=eu([],this.Zh,e,o,this);if(t(i)){var n=new xl(null);return Ml(n,i),n}},em.Cn=function(e,o){var i=eu([],this.ci,e,o,this);if(t(i)){var n=new El(null);return Rl(n,i),n}},em.Nf=function(t,e){tu(this.Vh,t,e,this)},em.Hh=function(t,e){tu(this.ji,t,e,this)},em.Fn=function(t,e){return eu([null],this.di,t,e,this)},em.Hn=function(t,e){return eu([null],this.ii,t,e,this)},em.Gn=function(t,e){return eu([null],this.De,t,e,this)},em.An=function(t,e){return eu([null],this.sd,t,e,this)},em.rk=function(e,o){var i=eu(void 0,this.td,e,o,this);t(i)&&o[o.length-1].push(i)},em.Di=function(e,o){var i=eu(void 0,this.td,e,o,this);t(i)&&(o[o.length-1][0]=i)},em.oh=function(e,o){var i=eu([null],this.ki,e,o,this);if(t(i)&&null!==i[0]){var n,r,s=new Fa(null),a=i[0],p=[a.length];for(n=1,r=i.length;n<r;++n)F(a,i[n]),p.push(a.length);return Ua(s,"XYZ",a,p),s}},em.dh=function(e,o){var i=eu([null],this.Wh,e,o,this);if(t(i)){var n=new ml(null);return wl(n,"XYZ",i),n}},em.xn=function(t,e){var o=eu([null],this.Xh,t,e,this);return qe(o[1][0],o[1][1],o[2][0],o[2][1])},em.zn=function(t,e){for(var o,i=kh(t,!1),n=/^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/,r=[];o=n.exec(i);)r.push(parseFloat(o[1])),i=i.substr(o[0].length);if(""===i){if(i=e[0].srsName,n="enu",null===i||(n=uo(xo(i))),"neu"===n)for(i=0,n=r.length;i<n;i+=3)o=r[i],r[i]=r[i+1],r[i+1]=o;return i=r.length,2==i&&r.push(0),0===i?void 0:r}},em.qf=function(t,e){var o=kh(t,!1).replace(/^\s*|\s*$/g,""),i=e[0].srsName,n=t.parentNode.getAttribute("srsDimension"),s="enu";null===i||(s=uo(xo(i))),o=o.split(/\s+/),i=2,r(t.getAttribute("srsDimension"))?r(t.getAttribute("dimension"))?null===n||(i=If(n)):i=If(t.getAttribute("dimension")):i=If(t.getAttribute("srsDimension"));for(var a,p,l=[],h=0,u=o.length;h<u;h+=i)n=parseFloat(o[h]),a=parseFloat(o[h+1]),p=3===i?parseFloat(o[h+2]):0,"en"===s.substr(0,2)?l.push(n,a,p):l.push(a,n,p);return l},em.sd=Object({"http://www.opengis.net/gml":{pos:Wh(Gf.prototype.zn),posList:Wh(Gf.prototype.qf)}}),em.De=Object({"http://www.opengis.net/gml":{interior:Gf.prototype.rk,exterior:Gf.prototype.Di}}),em.Cf=Object({"http://www.opengis.net/gml":{Point:Wh(Pf.prototype.mh),MultiPoint:Wh(Pf.prototype.kh),LineString:Wh(Pf.prototype.re),MultiLineString:Wh(Pf.prototype.jh),LinearRing:Wh(Pf.prototype.ih),Polygon:Wh(Pf.prototype.se),MultiPolygon:Wh(Pf.prototype.lh),Surface:Wh(Gf.prototype.oh),MultiSurface:Wh(Gf.prototype.Cn),Curve:Wh(Gf.prototype.dh),MultiCurve:Wh(Gf.prototype.Bn),Envelope:Wh(Gf.prototype.xn)}}),em.Zh=Object({"http://www.opengis.net/gml":{curveMember:Xh(Gf.prototype.Nf),curveMembers:Xh(Gf.prototype.Nf)}}),em.ci=Object({"http://www.opengis.net/gml":{surfaceMember:Xh(Gf.prototype.Hh),surfaceMembers:Xh(Gf.prototype.Hh)}}),em.Vh=Object({"http://www.opengis.net/gml":{LineString:Xh(Pf.prototype.re),Curve:Xh(Gf.prototype.dh)}}),em.ji=Object({"http://www.opengis.net/gml":{Polygon:Xh(Pf.prototype.se),Surface:Xh(Gf.prototype.oh)}}),em.ki=Object({"http://www.opengis.net/gml":{patches:Wh(Gf.prototype.Fn)}}),em.Wh=Object({"http://www.opengis.net/gml":{segments:Wh(Gf.prototype.Hn)}}),em.Xh=Object({"http://www.opengis.net/gml":{lowerCorner:Xh(Gf.prototype.qf),upperCorner:Xh(Gf.prototype.qf)}}),em.di=Object({"http://www.opengis.net/gml":{PolygonPatch:Wh(Gf.prototype.Gn)}}),em.ii=Object({"http://www.opengis.net/gml":{LineStringSegment:Wh(Gf.prototype.An)}}),em.Rh=function(t,e,o){var i=o[o.length-1].srsName;null!=i&&t.setAttribute("srsName",i),i=Uw(t.namespaceURI,"pos"),t.appendChild(i),o=o[o.length-1].srsName,t="enu",null!=o&&(t=uo(xo(o))),e=e.K(),Uf(i,"en"===t.substr(0,2)?e[0]+" "+e[1]:e[1]+" "+e[0])};var sx={"http://www.opengis.net/gml":{lowerCorner:Yh(Uf),upperCorner:Yh(Uf)}};em=Gf.prototype,em.wo=function(e,o,i){var n=i[i.length-1].srsName;t(n)&&e.setAttribute("srsName",n),iu({P:e},sx,zw,[o[0]+" "+o[1],o[2]+" "+o[3]],i,["lowerCorner","upperCorner"],this)},em.Oh=function(t,e,o){var i=o[o.length-1].srsName;null!=i&&t.setAttribute("srsName",i),i=Uw(t.namespaceURI,"posList"),t.appendChild(i),Hf(i,e,o)},em.hi=function(e,o){var i=o[o.length-1],n=i.P,r=i.exteriorWritten;return t(r)||(i.exteriorWritten=!0),Uw(n.namespaceURI,t(r)?"interior":"exterior")},em.Ce=function(t,e,o){var i=o[o.length-1].srsName;"PolygonPatch"!==t.nodeName&&null!=i&&t.setAttribute("srsName",i),"Polygon"===t.nodeName||"PolygonPatch"===t.nodeName?(e=e.Ed(),iu({P:t,srsName:i},hx,this.hi,e,o,void 0,this)):"Surface"===t.nodeName&&(i=Uw(t.namespaceURI,"patches"),t.appendChild(i),t=Uw(i.namespaceURI,"PolygonPatch"),i.appendChild(t),this.Ce(t,e,o))},em.xe=function(t,e,o){var i=o[o.length-1].srsName;"LineStringSegment"!==t.nodeName&&null!=i&&t.setAttribute("srsName",i),"LineString"===t.nodeName||"LineStringSegment"===t.nodeName?(i=Uw(t.namespaceURI,"posList"),t.appendChild(i),Hf(i,e,o)):"Curve"===t.nodeName&&(i=Uw(t.namespaceURI,"segments"),t.appendChild(i),t=Uw(i.namespaceURI,"LineStringSegment"),i.appendChild(t),this.xe(t,e,o))},em.Qh=function(t,e,o){var i=o[o.length-1],n=i.srsName,i=i.surface;null!=n&&t.setAttribute("srsName",n),e=e.Id(),iu({P:t,srsName:n,surface:i},ax,this.d,e,o,void 0,this)},em.xo=function(t,e,o){var i=o[o.length-1].srsName;null!=i&&t.setAttribute("srsName",i),
+e=e.ce(),iu({P:t,srsName:i},px,_h("pointMember"),e,o,void 0,this)},em.Ph=function(t,e,o){var i=o[o.length-1],n=i.srsName,i=i.curve;null!=n&&t.setAttribute("srsName",n),e=e.ad(),iu({P:t,srsName:n,curve:i},lx,this.d,e,o,void 0,this)},em.Sh=function(t,e,o){var i=Uw(t.namespaceURI,"LinearRing");t.appendChild(i),this.Oh(i,e,o)},em.Th=function(e,o,i){var n=this.c(o,i);t(n)&&(e.appendChild(n),this.Ce(n,o,i))},em.yo=function(t,e,o){var i=Uw(t.namespaceURI,"Point");t.appendChild(i),this.Rh(i,e,o)},em.Nh=function(e,o,i){var n=this.c(o,i);t(n)&&(e.appendChild(n),this.xe(n,o,i))},em.Ae=function(e,o,i){var n=i[i.length-1],r=nt(n);r.P=e;var a;a=s(o)?t(n.dataProjection)?ko(o,n.featureProjection,n.dataProjection):o:ff(o,!0,n),iu(r,ux,this.c,[a],i,void 0,this)},em.Lh=function(e,o,i){var n=o.$;t(n)&&e.setAttribute("fid",n);var n=i[i.length-1],r=n.featureNS,s=o.a;t(n.fc)||(n.fc={},n.fc[r]={});var a=o.D();o=[];var p,l=[];for(p in a){var h=a[p];null!==h&&(o.push(p),l.push(h),p==s?p in n.fc[r]||(n.fc[r][p]=Yh(this.Ae,this)):p in n.fc[r]||(n.fc[r][p]=Yh(Uf)))}p=nt(n),p.P=e,iu(p,n.fc,_h(void 0,r),l,i,o)};var ax={"http://www.opengis.net/gml":{surfaceMember:Yh(Gf.prototype.Th),polygonMember:Yh(Gf.prototype.Th)}},px={"http://www.opengis.net/gml":{pointMember:Yh(Gf.prototype.yo)}},lx={"http://www.opengis.net/gml":{lineStringMember:Yh(Gf.prototype.Nh),curveMember:Yh(Gf.prototype.Nh)}},hx={"http://www.opengis.net/gml":{exterior:Yh(Gf.prototype.Sh),interior:Yh(Gf.prototype.Sh)}},ux={"http://www.opengis.net/gml":{Curve:Yh(Gf.prototype.xe),MultiCurve:Yh(Gf.prototype.Ph),Point:Yh(Gf.prototype.Rh),MultiPoint:Yh(Gf.prototype.xo),LineString:Yh(Gf.prototype.xe),MultiLineString:Yh(Gf.prototype.Ph),LinearRing:Yh(Gf.prototype.Oh),Polygon:Yh(Gf.prototype.Ce),MultiPolygon:Yh(Gf.prototype.Qh),Surface:Yh(Gf.prototype.Ce),MultiSurface:Yh(Gf.prototype.Qh),Envelope:Yh(Gf.prototype.wo)}},cx={MultiLineString:"lineStringMember",MultiCurve:"curveMember",MultiPolygon:"polygonMember",MultiSurface:"surfaceMember"};Gf.prototype.d=function(t,e){return Uw("http://www.opengis.net/gml",cx[e[e.length-1].P.nodeName])},Gf.prototype.c=function(t,e){var o,i=e[e.length-1],n=i.multiSurface,r=i.surface,a=i.curve,i=i.multiCurve;return s(t)?o="Envelope":(o=t.M(),"MultiPolygon"===o&&!0===n?o="MultiSurface":"Polygon"===o&&!0===r?o="Surface":"LineString"===o&&!0===a?o="Curve":"MultiLineString"===o&&!0===i&&(o="MultiCurve")),Uw("http://www.opengis.net/gml",o)},Gf.prototype.q=function(e,o){o=cf(this,o);var i=Uw("http://www.opengis.net/gml","geom"),n={P:i,srsName:this.srsName,curve:this.e,surface:this.i,multiSurface:this.g,multiCurve:this.f};return t(o)&&rt(n,o),this.Ae(i,e,[n]),i},Gf.prototype.a=function(e,o){o=cf(this,o);var i=Uw("http://www.opengis.net/gml","featureMembers");Ww(i,"http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.schemaLocation);var n={srsName:this.srsName,curve:this.e,surface:this.i,multiSurface:this.g,multiCurve:this.f,featureNS:this.featureNS,featureType:this.featureType};t(o)&&rt(n,o);var n=[n],r=n[n.length-1],s=r.featureType,a=r.featureNS,p={};return p[a]={},p[a][s]=Yh(this.Lh,this),r=nt(r),r.P=i,iu(r,p,_h(s,a),e,n),i},v(qf,Pf),em=qf.prototype,em.gh=function(t,e){var o=kh(t,!1).replace(/^\s*|\s*$/g,""),i=e[0].srsName,n=t.parentNode.getAttribute("srsDimension"),s="enu";null===i||(s=uo(xo(i))),o=o.split(/[\s,]+/),i=2,r(t.getAttribute("srsDimension"))?r(t.getAttribute("dimension"))?null===n||(i=If(n)):i=If(t.getAttribute("dimension")):i=If(t.getAttribute("srsDimension"));for(var a,p,l=[],h=0,u=o.length;h<u;h+=i)n=parseFloat(o[h]),a=parseFloat(o[h+1]),p=3===i?parseFloat(o[h+2]):0,"en"===s.substr(0,2)?l.push(n,a,p):l.push(a,n,p);return l},em.wn=function(t,e){var o=eu([null],this.Uh,t,e,this);return qe(o[1][0],o[1][1],o[1][3],o[1][4])},em.pk=function(e,o){var i=eu(void 0,this.td,e,o,this);t(i)&&o[o.length-1].push(i)},em.gn=function(e,o){var i=eu(void 0,this.td,e,o,this);t(i)&&(o[o.length-1][0]=i)},em.sd=Object({"http://www.opengis.net/gml":{coordinates:Wh(qf.prototype.gh)}}),em.De=Object({"http://www.opengis.net/gml":{innerBoundaryIs:qf.prototype.pk,outerBoundaryIs:qf.prototype.gn}}),em.Uh=Object({"http://www.opengis.net/gml":{coordinates:Xh(qf.prototype.gh)}}),em.Cf=Object({"http://www.opengis.net/gml":{Point:Wh(Pf.prototype.mh),MultiPoint:Wh(Pf.prototype.kh),LineString:Wh(Pf.prototype.re),MultiLineString:Wh(Pf.prototype.jh),LinearRing:Wh(Pf.prototype.ih),Polygon:Wh(Pf.prototype.se),MultiPolygon:Wh(Pf.prototype.lh),Box:Wh(qf.prototype.wn)}}),v($f,Mf);var fx=[null,"http://www.topografix.com/GPX/1/0","http://www.topografix.com/GPX/1/1"],yx={rte:Kf,trk:Vf,wpt:Yf},dx=Vh(fx,{rte:Xh(Kf),trk:Xh(Vf),wpt:Xh(Yf)}),gx=Vh(fx,{text:Kh(Df,"linkText"),type:Kh(Df,"linkType")}),vx=Vh(fx,{name:Kh(Df),cmt:Kh(Df),desc:Kh(Df),src:Kh(Df),link:Wf,number:Kh(jf),extensions:zf,type:Kh(Df),rtept:function(e,o){var i=eu({},mx,e,o);t(i)&&Xf(o[o.length-1].flatCoordinates,e,i)}}),mx=Vh(fx,{ele:Kh(Lf),time:Kh(Rf)}),bx=Vh(fx,{name:Kh(Df),cmt:Kh(Df),desc:Kh(Df),src:Kh(Df),link:Wf,number:Kh(jf),type:Kh(Df),extensions:zf,trkseg:function(t,e){var o=e[e.length-1];tu(wx,t,e),o.ends.push(o.flatCoordinates.length)}}),wx=Vh(fx,{trkpt:function(e,o){var i=eu({},xx,e,o);t(i)&&Xf(o[o.length-1].flatCoordinates,e,i)}}),xx=Vh(fx,{ele:Kh(Lf),time:Kh(Rf)}),Sx=Vh(fx,{ele:Kh(Lf),time:Kh(Rf),magvar:Kh(Lf),geoidheight:Kh(Lf),name:Kh(Df),cmt:Kh(Df),desc:Kh(Df),src:Kh(Df),link:Wf,sym:Kh(Df),type:Kh(Df),fix:Kh(Df),sat:Kh(jf),hdop:Kh(Lf),vdop:Kh(Lf),pdop:Kh(Lf),ageofdgpsdata:Kh(Lf),dgpsid:Kh(jf),extensions:zf});$f.prototype.fh=function(e,o){if(!N(fx,e.namespaceURI))return null;var i=yx[e.localName];return t(i)?(i=i(e,[uf(this,e,o)]),t(i)?(Zf(this,[i]),i):null):null},$f.prototype.Ob=function(e,o){if(!N(fx,e.namespaceURI))return[];if("gpx"==e.localName){var i=eu([],dx,e,[uf(this,e,o)]);if(t(i))return Zf(this,i),i}return[]};var Tx=["text","type"],Mx=Qh(fx,{text:Yh(Uf),type:Yh(Uf)}),Cx=Qh(fx,"name cmt desc src link number type rtept".split(" ")),Ex=Qh(fx,{name:Yh(Uf),cmt:Yh(Uf),desc:Yh(Uf),src:Yh(Uf),link:Yh(_f),number:Yh(Bf),type:Yh(Uf),rtept:Zh(Yh(Jf))}),Px=Qh(fx,"name cmt desc src link number type trkseg".split(" ")),kx=Qh(fx,{name:Yh(Uf),cmt:Yh(Uf),desc:Yh(Uf),src:Yh(Uf),link:Yh(_f),number:Yh(Bf),type:Yh(Uf),trkseg:Zh(Yh(function(t,e,o){iu({P:t,geometryLayout:e.a,properties:{}},Rx,Ax,e.K(),o)}))}),Ax=_h("trkpt"),Rx=Qh(fx,{trkpt:Yh(Jf)}),Lx=Qh(fx,"ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),Nx=Qh(fx,{ele:Yh(Of),time:Yh(function(t,e){var o=new Date(1e3*e),o=o.getUTCFullYear()+"-"+S(o.getUTCMonth()+1)+"-"+S(o.getUTCDate())+"T"+S(o.getUTCHours())+":"+S(o.getUTCMinutes())+":"+S(o.getUTCSeconds())+"Z";t.appendChild(Bw.createTextNode(o))}),magvar:Yh(Of),geoidheight:Yh(Of),name:Yh(Uf),cmt:Yh(Uf),desc:Yh(Uf),src:Yh(Uf),link:Yh(_f),sym:Yh(Uf),type:Yh(Uf),fix:Yh(Uf),sat:Yh(Bf),hdop:Yh(Of),vdop:Yh(Of),pdop:Yh(Of),ageofdgpsdata:Yh(Of),dgpsid:Yh(Bf)}),jx={Point:"wpt",LineString:"rte",MultiLineString:"trk"},Ix=Qh(fx,{rte:Yh(function(e,o,i){var n=i[0],r=o.D();e={P:e,properties:r},o=o.Q(),t(o)&&(o=ff(o,!0,n),e.geometryLayout=o.a,r.rtept=o.K()),n=Cx[i[i.length-1].P.namespaceURI],r=Jh(r,n),iu(e,Ex,zw,r,i,n)}),trk:Yh(function(e,o,i){var n=i[0],r=o.D();e={P:e,properties:r},o=o.Q(),t(o)&&(o=ff(o,!0,n),r.trkseg=o.ad()),n=Px[i[i.length-1].P.namespaceURI],r=Jh(r,n),iu(e,kx,zw,r,i,n)}),wpt:Yh(function(e,o,i){var n=i[0],r=i[i.length-1];r.properties=o.D(),o=o.Q(),t(o)&&(o=ff(o,!0,n),r.geometryLayout=o.a,Jf(e,o.K(),i))})});$f.prototype.a=function(t,e){e=cf(this,e);var o=Uw("http://www.topografix.com/GPX/1/1","gpx");return iu({P:o},Ix,Qf,t,[e]),o},v(iy,hf),em=iy.prototype,em.M=function(){return"text"},em.sb=function(t,e){return this.hd(p(t)?t:"",cf(this,e))},em.ja=function(t,e){return this.pf(p(t)?t:"",cf(this,e))},em.Gc=function(t,e){return this.kd(p(t)?t:"",cf(this,e))},em.za=function(){return this.defaultDataProjection},em.qd=function(t,e){return this.ye(t,cf(this,e))},em.ub=function(t,e){return this.Mh(t,cf(this,e))},em.Mc=function(t,e){return this.rd(t,cf(this,e))},v(ny,iy);var Dx=/^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,Fx=/^H.([A-Z]{3}).*?:(.*)/,Ox=/^HFDTE(\d{2})(\d{2})(\d{2})/;ny.prototype.hd=function(t,e){var o,i,n=this.b,r=ty(t),s={},a=[],p=2e3,l=0,h=1;for(o=0,i=r.length;o<i;++o){var u,c=r[o];if("B"==c.charAt(0)){if(u=Dx.exec(c)){var c=parseInt(u[1],10),f=parseInt(u[2],10),y=parseInt(u[3],10),d=parseInt(u[4],10)+parseInt(u[5],10)/6e4;"S"==u[6]&&(d=-d);var g=parseInt(u[7],10)+parseInt(u[8],10)/6e4;"W"==u[9]&&(g=-g),a.push(g,d),"none"!=n&&a.push("gps"==n?parseInt(u[11],10):"barometric"==n?parseInt(u[12],10):0),a.push(Date.UTC(p,l,h,c,f,y)/1e3)}}else"H"==c.charAt(0)&&((u=Ox.exec(c))?(h=parseInt(u[1],10),l=parseInt(u[2],10)-1,p=2e3+parseInt(u[3],10)):(u=Fx.exec(c))&&(s[u[1]]=cm(u[2]),Ox.exec(c)))}return 0===a.length?null:(r=new ml(null),wl(r,"none"==n?"XYM":"XYZM",a),n=new af(ff(r,!1,e)),n.t(s),n)},ny.prototype.pf=function(t,e){var o=this.hd(t,e);return null===o?[]:[o]},em=ry.prototype,em.Pb="",em.pc="",em.ib="",em.Ec=null,em.hb="",em.Sb="",em.Yb=!1,em.toString=function(){var t=[],e=this.Pb;if(e&&t.push(cy(e,Bx,!0),":"),e=this.ib){t.push("//");var o=this.pc;o&&t.push(cy(o,Bx,!0),"@"),t.push(encodeURIComponent(String(e)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),e=this.Ec,null!=e&&t.push(":",String(e))}return(e=this.hb)&&(this.ib&&"/"!=e.charAt(0)&&t.push("/"),t.push(cy(e,"/"==e.charAt(0)?Gx:Ux,!0))),(e=this.b.toString())&&t.push("?",e),(e=this.Sb)&&t.push("#",cy(e,qx)),t.join("")},em.clone=function(){return new ry(this)};var Bx=/[#\/\?@]/g,Ux=/[\#\?:]/g,Gx=/[\#\?]/g,Hx=/[\#\?@]/g,qx=/#/g;em=yy.prototype,em.ia=null,em.va=null,em.Tb=function(){return dy(this),this.va},em.add=function(t,e){dy(this),this.b=null,t=my(this,t);var o=this.ia.get(t);return o||this.ia.set(t,o=[]),o.push(e),this.va++,this},em.remove=function(t){return dy(this),t=my(this,t),!!er(this.ia.a,t)&&(this.b=null,this.va-=this.ia.get(t).length,this.ia.remove(t))},em.clear=function(){this.ia=this.b=null,this.va=0},em.la=function(){return dy(this),0==this.va},em.C=function(){dy(this);for(var t=this.ia.cb(),e=this.ia.C(),o=[],i=0;i<e.length;i++)for(var n=t[i],r=0;r<n.length;r++)o.push(e[i]);return o},em.cb=function(t){dy(this);var e=[];if(p(t))gy(this,t)&&(e=I(e,this.ia.get(my(this,t))));else{t=this.ia.cb();for(var o=0;o<t.length;o++)e=I(e,t[o])}return e},em.set=function(t,e){return dy(this),this.b=null,t=my(this,t),gy(this,t)&&(this.va-=this.ia.get(t).length),this.ia.set(t,[e]),this.va++,this},em.get=function(t,e){var o=t?this.cb(t):[];return 0<o.length?String(o[0]):e},em.toString=function(){if(this.b)return this.b;if(!this.ia)return"";for(var t=[],e=this.ia.C(),o=0;o<e.length;o++)for(var i=e[o],n=encodeURIComponent(String(i)),i=this.cb(i),r=0;r<i.length;r++){var s=n;""!==i[r]&&(s+="="+encodeURIComponent(String(i[r]))),t.push(s)}return this.b=t.join("&")},em.clone=function(){var t=new yy;return t.b=this.b,this.ia&&(t.ia=this.ia.clone(),t.va=this.va),t},em=wy.prototype,em.Wi=function(){return this.d},em.mj=function(){return this.q},em.nj=function(){return this.l},em.Qm=function(){return this.b},em.Rm=function(){return this.e},em.Sm=function(){return this.a},em.Tm=function(){return this.f},em.Um=function(){return this.c},em.xj=function(){return this.g},em.yj=function(){return this.i},em.Wn=function(t){this.d=t},em.Vn=function(t){this.b=t},em.Vm=function(t){this.e=t},em.Wm=function(t){this.a=t},em.eo=function(t){this.f=t},em.fo=function(t){this.c=t},em.ho=function(t){this.g=t},em.io=function(t){this.i=t},v(xy,Mf);var $x=["http://www.google.com/kml/ext/2.2"],Xx=[null,"http://earth.google.com/kml/2.0","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.2","http://www.opengis.net/kml/2.2"],Wx=[255,255,255,1],zx=new ep({color:Wx}),Kx=[20,2],Vx=[64,64],Yx=new us({anchor:Kx,anchorOrigin:"bottom-left",anchorXUnits:"pixels",anchorYUnits:"pixels",crossOrigin:"anonymous",rotation:0,scale:.5,size:Vx,src:"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"}),Zx=new tp({color:Wx,width:1}),_x=new wy({font:"normal 16px Helvetica",fill:zx,stroke:Zx,scale:1}),Jx=[new ip({fill:zx,image:Yx,text:_x,stroke:Zx,zIndex:0})],Qx={fraction:"fraction",pixels:"pixels"},tS=Vh(Xx,{value:Wh(Df)}),eS=Vh(Xx,{Data:function(e,o){var i=e.getAttribute("name");if(null!==i){var n=eu(void 0,tS,e,o);t(n)&&(o[o.length-1][i]=n)}},SchemaData:function(t,e){tu(wS,t,e)}}),oS=Vh(Xx,{extrude:Kh(kf),altitudeMode:Kh(Df)}),iS=Vh(Xx,{coordinates:Wh(Ty)}),nS=Vh(Xx,{innerBoundaryIs:function(e,o){var i=eu(void 0,lS,e,o);t(i)&&o[o.length-1].push(i)},outerBoundaryIs:function(e,o){var i=eu(void 0,gS,e,o);t(i)&&(o[o.length-1][0]=i)}}),rS=Vh(Xx,{when:function(e,o){var i=o[o.length-1].Kh,n=kh(e,!1);if(n=/^\s*(\d{4})($|-(\d{2})($|-(\d{2})($|T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?)))))\s*$/.exec(n)){var r=Date.UTC(parseInt(n[1],10),t(n[3])?parseInt(n[3],10)-1:0,t(n[5])?parseInt(n[5],10):1,t(n[7])?parseInt(n[7],10):0,t(n[8])?parseInt(n[8],10):0,t(n[9])?parseInt(n[9],10):0);if(t(n[10])&&"Z"!=n[10]){var s="-"==n[11]?-1:1,r=r+60*s*parseInt(n[12],10);t(n[13])&&(r+=3600*s*parseInt(n[13],10))}i.push(r)}else i.push(0)}},Vh($x,{coord:function(t,e){var o=e[e.length-1].j,i=kh(t,!1);(i=/^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(i))?o.push(parseFloat(i[1]),parseFloat(i[2]),parseFloat(i[3]),0):o.push(0,0,0,0)}})),sS=Vh(Xx,{coordinates:Wh(Ty)}),aS=Vh(Xx,{href:Kh(My)},Vh($x,{x:Kh(Lf),y:Kh(Lf),w:Kh(Lf),h:Kh(Lf)})),pS=Vh(Xx,{Icon:Kh(function(e,o){var i=eu({},aS,e,o);return t(i)?i:null}),heading:Kh(Lf),hotSpot:Kh(function(t){var e=t.getAttribute("xunits"),o=t.getAttribute("yunits");return{x:parseFloat(t.getAttribute("x")),Af:Qx[e],y:parseFloat(t.getAttribute("y")),Bf:Qx[o]}}),scale:Kh(Cy)}),lS=Vh(Xx,{LinearRing:Wh(Ey)}),hS=Vh(Xx,{color:Kh(Sy),scale:Kh(Cy)}),uS=Vh(Xx,{color:Kh(Sy),width:Kh(Lf)}),cS=Vh(Xx,{LineString:Xh(ky),LinearRing:Xh(Ay),MultiGeometry:Xh(Ry),Point:Xh(Ly),Polygon:Xh(Ny)}),fS=Vh($x,{Track:Xh(Py)}),yS=Vh(Xx,{ExtendedData:Dy,Link:function(t,e){tu(dS,t,e)},address:Kh(Df),description:Kh(Df),name:Kh(Df),open:Kh(kf),phoneNumber:Kh(Df),visibility:Kh(kf)}),dS=Vh(Xx,{href:Kh(My)}),gS=Vh(Xx,{LinearRing:Wh(Ey)}),vS=Vh(Xx,{Style:Kh(jy),key:Kh(Df),styleUrl:Kh(function(t){var e=cm(kh(t,!1));return null!=t.baseURI?hy(t.baseURI,e).toString():e})}),mS=Vh(Xx,{ExtendedData:Dy,MultiGeometry:Kh(Ry,"geometry"),LineString:Kh(ky,"geometry"),LinearRing:Kh(Ay,"geometry"),Point:Kh(Ly,"geometry"),Polygon:Kh(Ny,"geometry"),Style:Kh(jy),StyleMap:function(e,o){var i=eu(void 0,SS,e,o);if(t(i)){var n=o[o.length-1];s(i)?n.Style=i:p(i)&&(n.styleUrl=i)}},address:Kh(Df),description:Kh(Df),name:Kh(Df),open:Kh(kf),phoneNumber:Kh(Df),styleUrl:Kh(My),visibility:Kh(kf)},Vh($x,{MultiTrack:Kh(function(e,o){var i=eu([],fS,e,o);if(t(i)){var n=new xl(null);return Ml(n,i),n}},"geometry"),Track:Kh(Py,"geometry")})),bS=Vh(Xx,{color:Kh(Sy),fill:Kh(kf),outline:Kh(kf)}),wS=Vh(Xx,{SimpleData:function(t,e){var o=t.getAttribute("name");if(null!==o){var i=Df(t);e[e.length-1][o]=i}}}),xS=Vh(Xx,{IconStyle:function(e,o){var i=eu({},pS,e,o);if(t(i)){var n,r=o[o.length-1],s=ot(i,"Icon",{});n=s.href,n=t(n)?n:"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png";var a,p,l,h=i.hotSpot;t(h)?(a=[h.x,h.y],p=h.Af,l=h.Bf):"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"===n?(a=Kx,l=p="pixels"):/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(n)&&(a=[.5,0],l=p="fraction");var u,h=s.x,c=s.y;t(h)&&t(c)&&(u=[h,c]);var f,h=s.w,s=s.h;t(h)&&t(s)&&(f=[h,s]);var y,s=i.heading;t(s)&&(y=ct(s)),i=i.scale,"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"==n&&(f=Vx),a=new us({anchor:a,anchorOrigin:"bottom-left",anchorXUnits:p,anchorYUnits:l,crossOrigin:"anonymous",offset:u,offsetOrigin:"bottom-left",rotation:y,scale:i,size:f,src:n}),r.imageStyle=a}},LabelStyle:function(e,o){var i=eu({},hS,e,o);t(i)&&(o[o.length-1].textStyle=new wy({fill:new ep({color:ot(i,"color",Wx)}),scale:i.scale}))},LineStyle:function(e,o){var i=eu({},uS,e,o);t(i)&&(o[o.length-1].strokeStyle=new tp({color:ot(i,"color",Wx),width:ot(i,"width",1)}))},PolyStyle:function(e,o){var i=eu({},bS,e,o);if(t(i)){var n=o[o.length-1];n.fillStyle=new ep({color:ot(i,"color",Wx)});var r=i.fill;t(r)&&(n.fill=r),i=i.outline,t(i)&&(n.outline=i)}}}),SS=Vh(Xx,{Pair:function(e,o){var i=eu({},vS,e,o);if(t(i)){var n=i.key;t(n)&&"normal"==n&&(n=i.styleUrl,t(n)&&(o[o.length-1]=n),i=i.Style,t(i)&&(o[o.length-1]=i))}}});em=xy.prototype,em.eh=function(e,o){Gw(e);var i=Vh(Xx,{Folder:$h(this.eh,this),Placemark:Xh(this.rf,this),Style:d(this.Jn,this),StyleMap:d(this.In,this)}),i=eu([],i,e,o,this);if(t(i))return i},em.rf=function(e,o){var i=eu({geometry:null},mS,e,o);if(t(i)){var n=new af,r=e.getAttribute("id");return null===r||n.Qb(r),r=o[0],null!=i.geometry&&ff(i.geometry,!1,r),n.t(i),this.c&&n.cf(this.d),n}},em.Jn=function(e,o){var i=e.getAttribute("id");if(null!==i){var n=jy(e,o);t(n)&&(i=null!=e.baseURI?hy(e.baseURI,"#"+i).toString():"#"+i,this.b[i]=n)}},em.In=function(e,o){var i=e.getAttribute("id");if(null!==i){var n=eu(void 0,SS,e,o);t(n)&&(i=null!=e.baseURI?hy(e.baseURI,"#"+i).toString():"#"+i,this.b[i]=n)}},em.fh=function(e,o){if(!N(Xx,e.namespaceURI))return null;var i=this.rf(e,[uf(this,e,o)]);return t(i)?i:null},em.Ob=function(e,o){if(!N(Xx,e.namespaceURI))return[];var i;if(i=Gw(e),"Document"==i||"Folder"==i)return i=this.eh(e,[uf(this,e,o)]),t(i)?i:[];if("Placemark"==i)return i=this.rf(e,[uf(this,e,o)]),t(i)?[i]:[];if("kml"==i){i=[];var n;for(n=e.firstElementChild;null!==n;n=n.nextElementSibling){var r=this.Ob(n,o);t(r)&&F(i,r)}return i}return[]},em.Dn=function(t){return Hw(t)?Fy(this,t):qw(t)?Oy(this,t):p(t)?(t=qh(t),Fy(this,t)):void 0},em.En=function(t){var e=[];return Hw(t)?F(e,By(this,t)):qw(t)?F(e,Uy(this,t)):p(t)&&(t=qh(t),F(e,By(this,t))),e};var TS=Qh(Xx,["Document","Placemark"]),MS=Qh(Xx,{Document:Yh(function(t,e,o){iu({P:t},CS,Ky,e,o)}),Placemark:Yh(qy)}),CS=Qh(Xx,{Placemark:Yh(qy)}),ES={Point:"Point",LineString:"LineString",LinearRing:"LinearRing",Polygon:"Polygon",MultiPoint:"MultiGeometry",MultiLineString:"MultiGeometry",MultiPolygon:"MultiGeometry"},PS=Qh(Xx,["href"],Qh($x,["x","y","w","h"])),kS=Qh(Xx,{href:Yh(Uf)},Qh($x,{x:Yh(Of),y:Yh(Of),w:Yh(Of),h:Yh(Of)})),AS=Qh(Xx,["scale","heading","Icon","hotSpot"]),RS=Qh(Xx,{Icon:Yh(function(t,e,o){t={P:t};var i=PS[o[o.length-1].P.namespaceURI],n=Jh(e,i);iu(t,kS,zw,n,o,i),i=PS[$x[0]],n=Jh(e,i),iu(t,kS,zy,n,o,i)}),heading:Yh(Of),hotSpot:Yh(function(t,e){t.setAttribute("x",e.x),t.setAttribute("y",e.y),t.setAttribute("xunits",e.Af),t.setAttribute("yunits",e.Bf)}),scale:Yh(Wy)}),LS=Qh(Xx,["color","scale"]),NS=Qh(Xx,{color:Yh(Gy),scale:Yh(Wy)}),jS=Qh(Xx,["color","width"]),IS=Qh(Xx,{color:Yh(Gy),width:Yh(Of)}),DS=Qh(Xx,{LinearRing:Yh($y)}),FS=Qh(Xx,{LineString:Yh($y),Point:Yh($y),Polygon:Yh(Xy)}),OS=Qh(Xx,"name open visibility address phoneNumber description styleUrl Style".split(" ")),BS=Qh(Xx,{MultiGeometry:Yh(function(t,e,o){t={P:t};var i,n,r=e.M();"MultiPoint"==r?(i=e.ce(),n=KS):"MultiLineString"==r?(i=e.ad(),n=VS):"MultiPolygon"==r&&(i=e.Id(),n=ZS),iu(t,FS,n,i,o)}),LineString:Yh($y),LinearRing:Yh($y),Point:Yh($y),Polygon:Yh(Xy),Style:Yh(function(t,e,o){t={P:t};var i={},n=e.e,r=e.c,s=e.f;e=e.a,null===s||(i.IconStyle=s),null===e||(i.LabelStyle=e),null===r||(i.LineStyle=r),null===n||(i.PolyStyle=n),e=qS[o[o.length-1].P.namespaceURI],i=Jh(i,e),iu(t,$S,zw,i,o,e)}),address:Yh(Uf),description:Yh(Uf),name:Yh(Uf),open:Yh(Ff),phoneNumber:Yh(Uf),styleUrl:Yh(Uf),visibility:Yh(Ff)}),US=Qh(Xx,{coordinates:Yh(function(t,e,o){o=o[o.length-1];var i=o.layout;o=o.stride;var n;"XY"==i||"XYM"==i?n=2:("XYZ"==i||"XYZM"==i)&&(n=3);var r,s=e.length,a="";if(0<s){for(a+=e[0],i=1;i<n;++i)a+=","+e[i];for(r=o;r<s;r+=o)for(a+=" "+e[r],i=1;i<n;++i)a+=","+e[r+i]}Uf(t,a)})}),GS=Qh(Xx,{outerBoundaryIs:Yh(Hy),innerBoundaryIs:Yh(Hy)}),HS=Qh(Xx,{color:Yh(Gy)}),qS=Qh(Xx,["IconStyle","LabelStyle","LineStyle","PolyStyle"]),$S=Qh(Xx,{IconStyle:Yh(function(t,e,o){t={P:t};var i={},n=e.Xa(),r=e.Dd(),s={href:e.b.f};if(null!==n){s.w=n[0],s.h=n[1];var a=e.mb(),p=e.rb();null!==p&&null!==r&&0!==p[0]&&p[1]!==n[1]&&(s.x=p[0],s.y=r[1]-(p[1]+n[1])),null===a||0===a[0]||a[1]===n[1]||(i.hotSpot={x:a[0],Af:"pixels",y:n[1]-a[1],Bf:"pixels"})}i.Icon=s,n=e.l,1!==n&&(i.scale=n),e=e.q,0!==e&&(i.heading=e),e=AS[o[o.length-1].P.namespaceURI],i=Jh(i,e),iu(t,RS,zw,i,o,e)}),LabelStyle:Yh(function(e,o,i){e={P:e};var n={},r=o.b;null===r||(n.color=r.b),o=o.a,t(o)&&1!==o&&(n.scale=o),o=LS[i[i.length-1].P.namespaceURI],n=Jh(n,o),iu(e,NS,zw,n,i,o)}),LineStyle:Yh(function(t,e,o){t={P:t};var i=jS[o[o.length-1].P.namespaceURI];e=Jh({color:e.b,width:e.a},i),iu(t,IS,zw,e,o,i)}),PolyStyle:Yh(function(t,e,o){iu({P:t},HS,XS,[e.b],o)})}),XS=_h("color"),WS=_h("coordinates"),zS=_h("innerBoundaryIs"),KS=_h("Point"),VS=_h("LineString"),YS=_h("LinearRing"),ZS=_h("Polygon"),_S=_h("outerBoundaryIs");xy.prototype.a=function(t,e){e=cf(this,e);var o=Uw(Xx[4],"kml");Ww(o,"http://www.w3.org/2000/xmlns/","xmlns:gx",$x[0]),Ww(o,"http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"),Ww(o,"http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");var i={P:o},n={};1<t.length?n.Document=t:1==t.length&&(n.Placemark=t[0]);var r=TS[o.namespaceURI],n=Jh(n,r);return iu(i,MS,zw,n,[e],r),o},v(Yy,Mf);var JS=[null],QS=Vh(JS,{nd:function(t,e){e[e.length-1].Ac.push(t.getAttribute("ref"))},tag:Zy}),tT=Vh(JS,{node:function(t,e){var o=e[0],i=e[e.length-1],n=t.getAttribute("id"),r=[parseFloat(t.getAttribute("lon")),parseFloat(t.getAttribute("lat"))];i.ng[n]=r;var s=eu({od:{}},eT,t,e);Q(s.od)||(r=new Ta(r),ff(r,!1,o),o=new af(r),o.Qb(n),o.t(s.od),i.features.push(o))},way:function(t,e){for(var o=e[0],i=t.getAttribute("id"),n=eu({Ac:[],od:{}},QS,t,e),r=e[e.length-1],s=[],a=0,p=n.Ac.length;a<p;a++)F(s,r.ng[n.Ac[a]]);n.Ac[0]==n.Ac[n.Ac.length-1]?(a=new Fa(null),Ua(a,"XY",s,[s.length])):(a=new ml(null),wl(a,"XY",s)),ff(a,!1,o),o=new af(a),o.Qb(i),o.t(n.od),r.features.push(o)}}),eT=Vh(JS,{tag:Zy});Yy.prototype.Ob=function(e,o){var i=uf(this,e,o);return"osm"==e.localName&&(i=eu({ng:{},features:[]},tT,e,[i]),t(i.features))?i.features:[]},Jy.prototype.c=function(t){return Hw(t)?this.a(t):qw(t)?this.b(t):p(t)?(t=qh(t),this.a(t)):null},v(Qy,Jy),Qy.prototype.a=function(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return this.b(t);return null},Qy.prototype.b=function(e){return e=eu({},iT,e,[]),t(e)?e:null};var oT=[null,"http://www.opengis.net/ows/1.1"],iT=Vh(oT,{ServiceIdentification:Kh(function(t,e){return eu({},dT,t,e)}),ServiceProvider:Kh(function(t,e){return eu({},gT,t,e)}),OperationsMetadata:Kh(function(t,e){return eu({},uT,t,e)})}),nT=Vh(oT,{DeliveryPoint:Kh(Df),City:Kh(Df),AdministrativeArea:Kh(Df),PostalCode:Kh(Df),Country:Kh(Df),ElectronicMailAddress:Kh(Df)}),rT=Vh(oT,{Value:zh(function(t){return Df(t)})}),sT=Vh(oT,{AllowedValues:Kh(function(t,e){return eu({},rT,t,e)})}),aT=Vh(oT,{Phone:Kh(function(t,e){return eu({},cT,t,e)}),Address:Kh(function(t,e){return eu({},nT,t,e)})}),pT=Vh(oT,{HTTP:Kh(function(t,e){return eu({},lT,t,e)})}),lT=Vh(oT,{Get:zh(function(e,o){var i=_y(e);return t(i)?eu({href:i},fT,e,o):void 0}),Post:void 0}),hT=Vh(oT,{DCP:Kh(function(t,e){return eu({},pT,t,e)})}),uT=Vh(oT,{Operation:function(e,o){var i=e.getAttribute("name"),n=eu({},hT,e,o);t(n)&&(o[o.length-1][i]=n)}}),cT=Vh(oT,{Voice:Kh(Df),Facsimile:Kh(Df)}),fT=Vh(oT,{Constraint:zh(function(e,o){var i=e.getAttribute("name");return t(i)?eu({name:i},sT,e,o):void 0})}),yT=Vh(oT,{IndividualName:Kh(Df),PositionName:Kh(Df),ContactInfo:Kh(function(t,e){return eu({},aT,t,e)})}),dT=Vh(oT,{Title:Kh(Df),ServiceTypeVersion:Kh(Df),ServiceType:Kh(Df)}),gT=Vh(oT,{ProviderName:Kh(Df),ProviderSite:Kh(_y),ServiceContact:Kh(function(t,e){return eu({},yT,t,e)})});v(ed,iy),em=ed.prototype,em.hd=function(t,e){var o=this.kd(t,e);return new af(o)},em.pf=function(t,e){return[this.hd(t,e)]},em.kd=function(t,e){var o=oa(this.a),i=id(t,o,this.b);return td(i,i.length,o,i),o=va(i,0,i.length,o),ff(new ml(o,this.a),!1,cf(this,e))},em.ye=function(t,e){var o=t.Q();return null!=o?this.rd(o,e):""},em.Mh=function(t,e){return this.ye(t[0],e)},em.rd=function(t,e){t=ff(t,!0,cf(this,e));var o=t.j,i=t.s;return td(o,o.length,i,o),od(o,i,this.b)},v(sd,yf),sd.prototype.of=function(e,o){if("Topology"==e.type){var i,n=null,r=null;t(e.transform)&&(i=e.transform,n=i.scale,r=i.translate);var s=e.arcs;if(t(i)){i=n;var a,p,l=r;for(a=0,p=s.length;a<p;++a)for(var h=s[a],u=i,c=l,f=0,y=0,d=void 0,g=void 0,v=void 0,g=0,v=h.length;g<v;++g)d=h[g],f+=d[0],y+=d[1],d[0]=f,d[1]=y,hd(d,u,c)}for(i=[],l=V(e.objects),a=0,p=l.length;a<p;++a)"GeometryCollection"===l[a].type?(h=l[a],i.push.apply(i,pd(h,s,n,r,o))):(h=l[a],i.push(ld(h,s,n,r,o)));return i}return[]},sd.prototype.za=function(){return this.defaultDataProjection};var vT={Point:function(t,e,o){return t=t.coordinates,null===e||null===o||hd(t,e,o),new Ta(t)},LineString:function(t,e){var o=ad(t.arcs,e);return new ml(o)},Polygon:function(t,e){var o,i,n=[];for(o=0,i=t.arcs.length;o<i;++o)n[o]=ad(t.arcs[o],e);return new Fa(n)},MultiPoint:function(t,e,o){t=t.coordinates;var i,n;if(null!==e&&null!==o)for(i=0,n=t.length;i<n;++i)hd(t[i],e,o);return new Cl(t)},MultiLineString:function(t,e){var o,i,n=[];for(o=0,i=t.arcs.length;o<i;++o)n[o]=ad(t.arcs[o],e);return new xl(n)},MultiPolygon:function(t,e){var o,i,n,r,s,a,p=[];for(s=0,a=t.arcs.length;s<a;++s){for(o=t.arcs[s],i=[],n=0,r=o.length;n<r;++n)i[n]=ad(o[n],e);p[s]=i}return new El(p)}};v(ud,Mf),ud.prototype.Ob=function(e,o){var i={featureType:this.e,featureNS:this.c};return rt(i,uf(this,e,t(o)?o:{})),i=[i],this.b.b["http://www.opengis.net/gml"].featureMember=Xh(Pf.prototype.jd),i=eu([],this.b.b,e,i,this.b),t(i)||(i=[]),i},ud.prototype.g=function(t){return Hw(t)?yd(t):qw(t)?eu({},ST,t,[]):p(t)?(t=qh(t),yd(t)):void 0},ud.prototype.f=function(t){return Hw(t)?cd(this,t):qw(t)?fd(this,t):p(t)?(t=qh(t),cd(this,t)):void 0};var mT={"http://www.opengis.net/gml":{boundedBy:Kh(Pf.prototype.qe,"bounds")}},bT={"http://www.opengis.net/wfs":{totalInserted:Kh(jf),totalUpdated:Kh(jf),totalDeleted:Kh(jf)}},wT={"http://www.opengis.net/ogc":{FeatureId:Xh(function(t){return t.getAttribute("fid")})}},xT={"http://www.opengis.net/wfs":{Feature:function(t,e){tu(wT,t,e)}}},ST={"http://www.opengis.net/wfs":{TransactionSummary:Kh(function(t,e){return eu({},bT,t,e)},"transactionSummary"),InsertResults:Kh(function(t,e){return eu([],xT,t,e)},"insertIds")}},TT={"http://www.opengis.net/wfs":{PropertyName:Yh(Uf)}},MT={"http://www.opengis.net/wfs":{Insert:Yh(function(t,e,o){var i=o[o.length-1],i=Uw(i.featureNS,i.featureType);t.appendChild(i),Gf.prototype.Lh(i,e,o)}),Update:Yh(function(e,o,i){var n=i[i.length-1],r=n.featureType,s=n.featurePrefix,s=t(s)?s:"feature",a=n.featureNS;if(e.setAttribute("typeName",s+":"+r),Ww(e,"http://www.w3.org/2000/xmlns/","xmlns:"+s,a),r=o.$,t(r)){for(var s=o.C(),a=[],p=0,l=s.length;p<l;p++){var h=o.get(s[p]);t(h)&&a.push({name:s[p],value:h})}iu({P:e,srsName:n.srsName},MT,_h("Property"),a,i),dd(e,r)}}),Delete:Yh(function(e,o,i){var n=i[i.length-1];i=n.featureType;var r=n.featurePrefix,r=t(r)?r:"feature",n=n.featureNS;e.setAttribute("typeName",r+":"+i),Ww(e,"http://www.w3.org/2000/xmlns/","xmlns:"+r,n),o=o.$,t(o)&&dd(e,o)}),Property:Yh(function(t,e,o){var i=Uw("http://www.opengis.net/wfs","Name");t.appendChild(i),Uf(i,e.name),null!=e.value&&(i=Uw("http://www.opengis.net/wfs","Value"),t.appendChild(i),e.value instanceof Qs?Gf.prototype.Ae(i,e.value,o):Uf(i,e.value))}),Native:Yh(function(e,o){t(o.vo)&&e.setAttribute("vendorId",o.vo),t(o.Tn)&&e.setAttribute("safeToIgnore",o.Tn),t(o.value)&&Uf(e,o.value)})}},CT={"http://www.opengis.net/wfs":{Query:Yh(function(e,o,i){var n=i[i.length-1],r=n.featurePrefix,s=n.featureNS,a=n.propertyNames,p=n.srsName;e.setAttribute("typeName",(t(r)?r+":":"")+o),t(p)&&e.setAttribute("srsName",p),t(s)&&Ww(e,"http://www.w3.org/2000/xmlns/","xmlns:"+r,s),o=nt(n),o.P=e,iu(o,TT,_h("PropertyName"),a,i),n=n.bbox,t(n)&&(a=Uw("http://www.opengis.net/ogc","Filter"),o=i[i.length-1].geometryName,r=Uw("http://www.opengis.net/ogc","BBOX"),a.appendChild(r),s=Uw("http://www.opengis.net/ogc","PropertyName"),Uf(s,o),r.appendChild(s),Gf.prototype.Ae(r,n,i),e.appendChild(a))})}};ud.prototype.i=function(e){var o=Uw("http://www.opengis.net/wfs","GetFeature");o.setAttribute("service","WFS"),o.setAttribute("version","1.1.0"),t(e)&&(t(e.handle)&&o.setAttribute("handle",e.handle),t(e.outputFormat)&&o.setAttribute("outputFormat",e.outputFormat),t(e.maxFeatures)&&o.setAttribute("maxFeatures",e.maxFeatures),t(e.resultType)&&o.setAttribute("resultType",e.resultType),t(e.oo)&&o.setAttribute("startIndex",e.oo),t(e.count)&&o.setAttribute("count",e.count)),Ww(o,"http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.d);var i=e.featureTypes;e=[{P:o,srsName:e.srsName,featureNS:t(e.featureNS)?e.featureNS:this.c,featurePrefix:e.featurePrefix,geometryName:e.geometryName,bbox:e.bbox,bh:t(e.bh)?e.bh:[]}];var n=nt(e[e.length-1]);return n.P=o,iu(n,CT,_h("Query"),i,e),o},ud.prototype.o=function(e,o,i,n){var r=[],s=Uw("http://www.opengis.net/wfs","Transaction");s.setAttribute("service","WFS"),s.setAttribute("version","1.1.0");var a,p;return t(n)&&(a=t(n.gmlOptions)?n.gmlOptions:{},t(n.handle)&&s.setAttribute("handle",n.handle)),Ww(s,"http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.d),null!=e&&(p={P:s,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:n.featurePrefix},rt(p,a),iu(p,MT,_h("Insert"),e,r)),null!=o&&(p={P:s,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:n.featurePrefix},rt(p,a),iu(p,MT,_h("Update"),o,r)),null!=i&&iu({P:s,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:n.featurePrefix},MT,_h("Delete"),i,r),t(n.nativeElements)&&iu({P:s,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:n.featurePrefix},MT,_h("Native"),n.nativeElements,r),s},ud.prototype.sf=function(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return this.te(t);return null},ud.prototype.te=function(t){if(null!=t.firstElementChild&&null!=t.firstElementChild.firstElementChild)for(t=t.firstElementChild.firstElementChild,t=t.firstElementChild;null!==t;t=t.nextElementSibling)if(0!==t.childNodes.length&&(1!==t.childNodes.length||3!==t.firstChild.nodeType)){var e=[{}];return this.b.qe(t,e),xo(e.pop().srsName)}return null},v(gd,iy);var ET={Point:vd,LineString:md,Polygon:bd,MultiPoint:function(t){var e=[];t=t.ce();for(var o=0,i=t.length;o<i;++o)e.push("("+vd(t[o])+")");return e.join(",")},MultiLineString:function(t){var e=[];t=t.ad();for(var o=0,i=t.length;o<i;++o)e.push("("+md(t[o])+")");return e.join(",")},MultiPolygon:function(t){var e=[];t=t.Id();for(var o=0,i=t.length;o<i;++o)e.push("("+bd(t[o])+")");return e.join(",")},GeometryCollection:function(t){var e=[];t=t.Vf();for(var o=0,i=t.length;o<i;++o)e.push(wd(t[o]));return e.join(",")}};em=gd.prototype,em.hd=function(e,o){var i=this.kd(e,o);if(t(i)){var n=new af;return n.La(i),n}return null},em.pf=function(t,e){var o=[],i=this.kd(t,e);o=this.b&&"GeometryCollection"==i.M()?i.d:[i];for(var n=[],r=0,s=o.length;r<s;++r)i=new af,i.La(o[r]),n.push(i);return n},em.kd=function(e,o){var i;return i=new Md(new xd(e)),i.b=Td(i.a),i=Cd(i),t(i)?ff(i,!1,o):null},em.ye=function(e,o){var i=e.Q();return t(i)?this.rd(i,o):""},em.Mh=function(t,e){if(1==t.length)return this.ye(t[0],e);for(var o=[],i=0,n=t.length;i<n;++i)o.push(t[i].Q());return o=new ul(o),this.rd(o,e)},em.rd=function(t,e){return wd(ff(t,!0,e))},em=Md.prototype,em.match=function(t){return(t=this.b.type==t)&&(this.b=Td(this.a)),t},em.lf=function(){if(this.match(2)){var t=Ed(this);if(this.match(3))return t}else if(Ad(this))return null;throw Error(Rd(this))},em.kf=function(){if(this.match(2)){var t=Pd(this);if(this.match(3))return t}else if(Ad(this))return[];
+throw Error(Rd(this))},em.mf=function(){if(this.match(2)){var t=kd(this);if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this))},em.kn=function(){if(this.match(2)){var t;if(2==this.b.type)for(t=[this.lf()];this.match(5);)t.push(this.lf());else t=Pd(this);if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this))},em.jn=function(){if(this.match(2)){var t=kd(this);if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this))},em.ln=function(){if(this.match(2)){for(var t=[this.mf()];this.match(5);)t.push(this.mf());if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this))};var PT={POINT:Ta,LINESTRING:ml,POLYGON:Fa,MULTIPOINT:Cl,MULTILINESTRING:xl,MULTIPOLYGON:El},kT={POINT:Md.prototype.lf,LINESTRING:Md.prototype.kf,POLYGON:Md.prototype.mf,MULTIPOINT:Md.prototype.kn,MULTILINESTRING:Md.prototype.jn,MULTIPOLYGON:Md.prototype.ln};v(Ld,Jy),Ld.prototype.a=function(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return this.b(t);return null},Ld.prototype.b=function(e){return this.version=cm(e.getAttribute("version")),e=eu({version:this.version},RT,e,[]),t(e)?e:null};var AT=[null,"http://www.opengis.net/wms"],RT=Vh(AT,{Service:Kh(function(t,e){return eu({},NT,t,e)}),Capability:Kh(function(t,e){return eu({},LT,t,e)})}),LT=Vh(AT,{Request:Kh(function(t,e){return eu({},GT,t,e)}),Exception:Kh(function(t,e){return eu([],FT,t,e)}),Layer:Kh(function(t,e){return eu({},OT,t,e)})}),NT=Vh(AT,{Name:Kh(Df),Title:Kh(Df),Abstract:Kh(Df),KeywordList:Kh(Dd),OnlineResource:Kh(_y),ContactInformation:Kh(function(t,e){return eu({},jT,t,e)}),Fees:Kh(Df),AccessConstraints:Kh(Df),LayerLimit:Kh(jf),MaxWidth:Kh(jf),MaxHeight:Kh(jf)}),jT=Vh(AT,{ContactPersonPrimary:Kh(function(t,e){return eu({},IT,t,e)}),ContactPosition:Kh(Df),ContactAddress:Kh(function(t,e){return eu({},DT,t,e)}),ContactVoiceTelephone:Kh(Df),ContactFacsimileTelephone:Kh(Df),ContactElectronicMailAddress:Kh(Df)}),IT=Vh(AT,{ContactPerson:Kh(Df),ContactOrganization:Kh(Df)}),DT=Vh(AT,{AddressType:Kh(Df),Address:Kh(Df),City:Kh(Df),StateOrProvince:Kh(Df),PostCode:Kh(Df),Country:Kh(Df)}),FT=Vh(AT,{Format:Xh(Df)}),OT=Vh(AT,{Name:Kh(Df),Title:Kh(Df),Abstract:Kh(Df),KeywordList:Kh(Dd),CRS:zh(Df),EX_GeographicBoundingBox:Kh(function(e,o){var i=eu({},UT,e,o);if(t(i)){var n=i.westBoundLongitude,r=i.southBoundLatitude,s=i.eastBoundLongitude,i=i.northBoundLatitude;return t(n)&&t(r)&&t(s)&&t(i)?[n,r,s,i]:void 0}}),BoundingBox:zh(function(t){var e=[Nf(t.getAttribute("minx")),Nf(t.getAttribute("miny")),Nf(t.getAttribute("maxx")),Nf(t.getAttribute("maxy"))],o=[Nf(t.getAttribute("resx")),Nf(t.getAttribute("resy"))];return{crs:t.getAttribute("CRS"),extent:e,res:o}}),Dimension:zh(function(t){return{name:t.getAttribute("name"),units:t.getAttribute("units"),unitSymbol:t.getAttribute("unitSymbol"),"default":t.getAttribute("default"),multipleValues:Af(t.getAttribute("multipleValues")),nearestValue:Af(t.getAttribute("nearestValue")),current:Af(t.getAttribute("current")),values:Df(t)}}),Attribution:Kh(function(t,e){return eu({},BT,t,e)}),AuthorityURL:zh(function(e,o){var i=Nd(e,o);if(t(i))return i.name=e.getAttribute("name"),i}),Identifier:zh(Df),MetadataURL:zh(function(e,o){var i=Nd(e,o);if(t(i))return i.type=e.getAttribute("type"),i}),DataURL:zh(Nd),FeatureListURL:zh(Nd),Style:zh(function(t,e){return eu({},XT,t,e)}),MinScaleDenominator:Kh(Lf),MaxScaleDenominator:Kh(Lf),Layer:zh(function(e,o){var i=o[o.length-1],n=eu({},OT,e,o);if(t(n)){var r=Af(e.getAttribute("queryable"));return t(r)||(r=i.queryable),n.queryable=!!t(r)&&r,r=If(e.getAttribute("cascaded")),t(r)||(r=i.cascaded),n.cascaded=r,r=Af(e.getAttribute("opaque")),t(r)||(r=i.opaque),n.opaque=!!t(r)&&r,r=Af(e.getAttribute("noSubsets")),t(r)||(r=i.noSubsets),n.noSubsets=!!t(r)&&r,r=Nf(e.getAttribute("fixedWidth")),t(r)||(r=i.fixedWidth),n.fixedWidth=r,r=Nf(e.getAttribute("fixedHeight")),t(r)||(r=i.fixedHeight),n.fixedHeight=r,E(["Style","CRS","AuthorityURL"],function(e){var o=i[e];if(t(o)){var r=it(n,e),r=r.concat(o);n[e]=r}}),E("EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" "),function(e){t(n[e])||(n[e]=i[e])}),n}})}),BT=Vh(AT,{Title:Kh(Df),OnlineResource:Kh(_y),LogoURL:Kh(Id)}),UT=Vh(AT,{westBoundLongitude:Kh(Lf),eastBoundLongitude:Kh(Lf),southBoundLatitude:Kh(Lf),northBoundLatitude:Kh(Lf)}),GT=Vh(AT,{GetCapabilities:Kh(jd),GetMap:Kh(jd),GetFeatureInfo:Kh(jd)}),HT=Vh(AT,{Format:zh(Df),DCPType:zh(function(t,e){return eu({},qT,t,e)})}),qT=Vh(AT,{HTTP:Kh(function(t,e){return eu({},$T,t,e)})}),$T=Vh(AT,{Get:Kh(Nd),Post:Kh(Nd)}),XT=Vh(AT,{Name:Kh(Df),Title:Kh(Df),Abstract:Kh(Df),LegendURL:zh(Id),StyleSheetURL:Kh(Nd),StyleURL:Kh(Nd)}),WT=Vh(AT,{Format:Kh(Df),OnlineResource:Kh(_y)}),zT=Vh(AT,{Keyword:Xh(Df)});v(Fd,Mf),Fd.prototype.Ob=function(e,o){var i={featureType:this.featureType,featureNS:this.featureNS};return t(o)&&rt(i,uf(this,e,o)),Od(this,e,[i])},v(Bd,Jy),Bd.prototype.a=function(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return this.b(t);return null},Bd.prototype.b=function(e){this.version=cm(e.getAttribute("version"));var o=this.d.b(e);return t(o)?(o.version=this.version,o=eu(o,YT,e,[]),t(o)?o:null):null};var KT=[null,"http://www.opengis.net/wmts/1.0"],VT=[null,"http://www.opengis.net/ows/1.1"],YT=Vh(KT,{Contents:Kh(function(t,e){return eu({},ZT,t,e)})}),ZT=Vh(KT,{Layer:zh(function(t,e){return eu({},_T,t,e)}),TileMatrixSet:zh(function(t,e){return eu({},eM,t,e)})}),_T=Vh(KT,{Style:zh(function(e,o){var i=eu({},JT,e,o);if(t(i)){var n="true"===e.getAttribute("isDefault");return i.isDefault=n,i}}),Format:zh(Df),TileMatrixSetLink:zh(function(t,e){return eu({},QT,t,e)}),ResourceURL:zh(function(e){var o=e.getAttribute("format"),i=e.getAttribute("template");e=e.getAttribute("resourceType");var n={};return t(o)&&(n.format=o),t(i)&&(n.template=i),t(e)&&(n.resourceType=e),n})},Vh(VT,{Title:Kh(Df),Abstract:Kh(Df),WGS84BoundingBox:Kh(function(t,e){var o=eu([],tM,t,e);return 2!=o.length?void 0:je(o)}),Identifier:Kh(Df)})),JT=Vh(KT,{LegendURL:zh(function(t){var e={};return e.format=t.getAttribute("format"),e.href=_y(t),e})},Vh(VT,{Title:Kh(Df),Identifier:Kh(Df)})),QT=Vh(KT,{TileMatrixSet:Kh(Df)}),tM=Vh(VT,{LowerCorner:Xh(Ud),UpperCorner:Xh(Ud)}),eM=Vh(KT,{WellKnownScaleSet:Kh(Df),TileMatrix:zh(function(t,e){return eu({},oM,t,e)})},Vh(VT,{SupportedCRS:Kh(Df),Identifier:Kh(Df)})),oM=Vh(KT,{TopLeftCorner:Kh(Ud),ScaleDenominator:Kh(Lf),TileWidth:Kh(jf),TileHeight:Kh(jf),MatrixWidth:Kh(jf),MatrixHeight:Kh(jf)},Vh(VT,{Identifier:Kh(Df)})),iM=new lo(6378137);v(Gd,re),em=Gd.prototype,em.O=function(){this.Zd(!1),Gd.S.O.call(this)},em.Vk=function(){var t=this.sg();null!=t&&(this.d=Mo(xo("EPSG:4326"),t),null===this.a||this.set("position",this.d(this.a)))},em.Wk=function(){if(Rb){var e=this.tg();e&&!t(this.c)?this.c=sm.navigator.geolocation.watchPosition(d(this.tn,this),d(this.vn,this),this.bg()):!e&&t(this.c)&&(sm.navigator.geolocation.clearWatch(this.c),this.c=void 0)}},em.tn=function(t){t=t.coords,this.set("accuracy",t.accuracy),this.set("altitude",null===t.altitude?void 0:t.altitude),this.set("altitudeAccuracy",null===t.altitudeAccuracy?void 0:t.altitudeAccuracy),this.set("heading",null===t.heading?void 0:ct(t.heading)),null===this.a?this.a=[t.longitude,t.latitude]:(this.a[0]=t.longitude,this.a[1]=t.latitude);var e=this.d(this.a);this.set("position",e),this.set("speed",null===t.speed?void 0:t.speed),t=Ga(iM,this.a,t.accuracy),t.qa(this.d),this.set("accuracyGeometry",t),this.k()},em.vn=function(t){t.type="error",this.Zd(!1),this.dispatchEvent(t)},em.Ki=function(){return this.get("accuracy")},em.Li=function(){return this.get("accuracyGeometry")||null},em.Ni=function(){return this.get("altitude")},em.Oi=function(){return this.get("altitudeAccuracy")},em.Tk=function(){return this.get("heading")},em.Uk=function(){return this.get("position")},em.sg=function(){return this.get("projection")},em.vj=function(){return this.get("speed")},em.tg=function(){return this.get("tracking")},em.bg=function(){return this.get("trackingOptions")},em.ug=function(t){this.set("projection",t)},em.Zd=function(t){this.set("tracking",t)},em.Dh=function(t){this.set("trackingOptions",t)};var nM=new tp({color:"rgba(0,0,0,0.2)"}),rM=[90,45,30,20,10,5,2,1,.5,.2,.1,.05,.01,.005,.002,.001];em=Xd.prototype,em.Xk=function(){return this.g},em.kj=function(){return this.b},em.pj=function(){return this.a},em.gg=function(t){var e=t.vectorContext,o=t.frameState;t=o.extent;var i=o.viewState,n=i.center,r=i.projection,i=i.resolution,o=o.pixelRatio,o=i*i/(4*o*o);if(null===this.i||!So(this.i,r)){var s=r.G(),a=r.g,p=a[2],l=a[1],h=a[0];this.c=a[3],this.d=p,this.e=l,this.f=h,a=xo("EPSG:4326"),this.q=To(a,r),this.o=To(r,a),this.l=this.o(_e(s)),this.i=r}for(var u,r=this.l[0],s=this.l[1],a=-1,l=Math.pow(this.n*i,2),h=[],c=[],i=0,p=rM.length;i<p&&(u=rM[i]/2,h[0]=r-u,h[1]=s-u,c[0]=r+u,c[1]=s+u,this.q(h,h),this.q(c,c),u=Math.pow(c[0]-h[0],2)+Math.pow(c[1]-h[1],2),!(u<=l));++i)a=rM[i];if(i=a,-1==i)this.b.length=this.a.length=0;else{for(r=this.o(n),n=r[0],r=r[1],s=this.U,n=Math.floor(n/i)*i,l=lt(n,this.f,this.d),p=Wd(this,l,o,t,0),a=0;l!=this.f&&a++<s;)l=Math.max(l-i,this.f),p=Wd(this,l,o,t,p);for(l=lt(n,this.f,this.d),a=0;l!=this.d&&a++<s;)l=Math.min(l+i,this.d),p=Wd(this,l,o,t,p);for(this.b.length=p,r=Math.floor(r/i)*i,n=lt(r,this.e,this.c),p=zd(this,n,o,t,0),a=0;n!=this.e&&a++<s;)n=Math.max(n-i,this.e),p=zd(this,n,o,t,p);for(n=lt(r,this.e,this.c),a=0;n!=this.c&&a++<s;)n=Math.min(n+i,this.c),p=zd(this,n,o,t,p);this.a.length=p}for(e.Aa(null,this.V),t=0,o=this.b.length;t<o;++t)n=this.b[t],e.zb(n,null);for(t=0,o=this.a.length;t<o;++t)n=this.a[t],e.zb(n,null)},em.setMap=function(t){null!==this.g&&(this.g.u("postcompose",this.gg,this),this.g.render()),null!==t&&(t.r("postcompose",this.gg,this),t.render()),this.g=t},v(Kd,_r),Kd.prototype.b=function(e){if(t(e)){var o=c(e);return o in this.d?this.d[o]:(e=Q(this.d)?this.a:this.a.cloneNode(!1),this.d[o]=e)}return this.a},Kd.prototype.q=function(){this.state=3,E(this.c,zt),this.c=null,this.dispatchEvent("change")},Kd.prototype.l=function(){t(this.resolution)||(this.resolution=to(this.extent)/this.a.height),this.state=2,E(this.c,zt),this.c=null,this.dispatchEvent("change")},Kd.prototype.load=function(){0==this.state&&(this.state=1,this.dispatchEvent("change"),this.c=[Xt(this.a,"error",this.q,!1,this),Xt(this.a,"load",this.l,!1,this)],this.g(this,this.i))},v(Vd,nn),em=Vd.prototype,em.O=function(){1==this.state&&Yd(this),Vd.S.O.call(this)},em.Ma=function(e){if(t(e)){var o=c(e);return o in this.c?this.c[o]:(e=Q(this.c)?this.a:this.a.cloneNode(!1),this.c[o]=e)}return this.a},em.gb=function(){return this.g},em.Yk=function(){this.state=3,Yd(this),rn(this)},em.Zk=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4,Yd(this),rn(this)},em.load=function(){0==this.state&&(this.state=1,rn(this),this.e=[Xt(this.a,"error",this.Yk,!1,this),Xt(this.a,"load",this.Zk,!1,this)],this.i(this,this.g))},v(Jd,Qt),em=Jd.prototype,em.Zc=!1,em.O=function(){Jd.S.O.call(this),this.b.Yc()},em.$m=function(t){var e=t.b.dataTransfer;(this.Zc=!(!e||!(e.types&&(N(e.types,"Files")||N(e.types,"public.file-url"))||e.files&&0<e.files.length)))&&t.preventDefault()},em.an=function(t){this.Zc&&(t.preventDefault(),t.b.dataTransfer.dropEffect="none")},em.bn=function(t){this.Zc&&(t.preventDefault(),t.fb(),t=t.b.dataTransfer,t.effectAllowed="all",t.dropEffect="copy")},em.cn=function(t){this.Zc&&(t.preventDefault(),t.fb(),t=new Rt(t.b),t.type="drop",this.dispatchEvent(t))},Qd.prototype.cancel=function(t){if(this.b)this.c instanceof Qd&&this.c.cancel();else{if(this.a){var e=this.a;delete this.a,t?e.cancel(t):(e.i--,0>=e.i&&e.cancel())}this.U?this.U.call(this.o,this):this.q=!0,this.b||(t=new sg,eg(this),tg(this,!1,t))}},Qd.prototype.l=function(t,e){this.g=!1,tg(this,t,e)},Qd.prototype.then=function(t,e,o){var i,n,r=new zl(function(t,e){i=t,n=e});return og(this,i,function(t){t instanceof sg?r.cancel():n(t)}),r.then(t,e,o)},Gl(Qd),v(rg,m),rg.prototype.message="Deferred has already fired",rg.prototype.name="AlreadyCalledError",v(sg,m),sg.prototype.message="Deferred was canceled",sg.prototype.name="CanceledError",ag.prototype.a=function(){throw delete sM[this.$],this.b};var sM={};v(pg,m);var aM={AbortError:3,EncodingError:5,InvalidModificationError:9,InvalidStateError:7,NotFoundError:1,NotReadableError:4,NoModificationAllowedError:6,PathExistsError:12,QuotaExceededError:10,SecurityError:2,SyntaxError:8,TypeMismatchError:11};v(hg,Et),v(ug,Qt),ug.prototype.getError=function(){return this.Ya.error&&new pg(this.Ya.error,"reading file")},ug.prototype.b=function(t){this.dispatchEvent(new hg(t,this))},ug.prototype.O=function(){ug.S.O.call(this),delete this.Ya},v(fg,As),fg.prototype.O=function(){t(this.a)&&zt(this.a),fg.S.O.call(this)},fg.prototype.g=function(t){t=t.b.dataTransfer.files;var e,o,i;for(e=0,o=t.length;e<o;++e){var n=i=t[e],r=new ug,s=cg(r);r.Ya.readAsText(n,""),og(s,g(this.i,i),null,this)}},fg.prototype.i=function(t,e){var o=this.l,i=this.o;null===i&&(i=o.R().e);var n,r,o=this.f,s=[];for(n=0,r=o.length;n<r;++n){var a,p=new o[n];try{a=p.ja(e)}catch(l){a=null}if(null!==a){var h,u,p=p.za(e),p=To(p,i);for(h=0,u=a.length;h<u;++h){var c=a[h],f=c.Q();null!=f&&f.qa(p),s.push(c)}}}this.dispatchEvent(new yg(pM,this,t,s,i))},fg.prototype.setMap=function(e){t(this.a)&&(zt(this.a),this.a=void 0),null!==this.e&&(Ct(this.e),this.e=null),fg.S.setMap.call(this,e),null!==e&&(this.e=new Jd(e.a),this.a=Ht(this.e,"drop",this.g,!1,this))};var pM="addfeatures";v(yg,Et),v(dg,pi),dg.prototype.clone=function(){return new dg(this.x,this.y)},dg.prototype.scale=pi.prototype.scale,dg.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},dg.prototype.rotate=function(t){var e=Math.cos(t);t=Math.sin(t);var o=this.y*e+this.x*t;return this.x=this.x*e-this.y*t,this.y=o,this},v(gg,qs),v(wg,Et),v(xg,qs),xg.prototype.setMap=function(t){xg.S.setMap.call(this,t),this.Ra()},xg.prototype.X=function(){var t,e=Rg(this),o=e.Q();this.a===lM?t=o.K():this.a===hM?(t=o.K(),t.pop(),o.W(t)):this.a===uM&&(this.f[0].pop(),this.f[0].push(this.f[0][0]),o.W(this.f),t=o.K()),"MultiPoint"===this.L?e.La(new Cl([t])):"MultiLineString"===this.L?e.La(new xl([t])):"MultiPolygon"===this.L&&e.La(new El([t])),this.dispatchEvent(new wg("drawend",e)),null===this.oa||this.oa.push(e),null===this.Ga||this.Ga.jf(e)},xg.prototype.nc=pb,xg.prototype.Ra=function(){var t=this.l,e=this.c();null!==t&&e||Rg(this),this.T.setMap(e?t:null)};var lM="Point",hM="LineString",uM="Polygon",cM="Circle";v(Ng,qs),em=Ng.prototype,em.Cg=function(e){var o=e.Q();t(this.H[o.M()])&&this.H[o.M()].call(this,e,o),e=this.l,null===e||Ug(this,this.L,e)},em.setMap=function(t){this.n.setMap(t),Ng.S.setMap.call(this,t)},em.vl=function(t){this.Cg(t.element)},em.wl=function(t){var e=t.element;t=this.a;var o,i=[];for(hu(t,e.Q().G(),function(t){e===t.feature&&i.push(t)}),o=i.length-1;0<=o;--o)t.remove(i[o]);null!==this.f&&0===this.p.Ib()&&(this.n.Yd(this.f),this.f=null)},em.Bl=function(t,e){var o=e.K(),o={feature:t,geometry:e,aa:[o,o]};this.a.ha(e.G(),o)},em.zl=function(t,e){var o,i,n,r=e.K();for(i=0,n=r.length;i<n;++i)o=r[i],o={feature:t,geometry:e,depth:[i],index:i,aa:[o,o]},this.a.ha(e.G(),o)},em.Dg=function(t,e){var o,i,n,r,s=e.K();for(o=0,i=s.length-1;o<i;++o)n=s.slice(o,o+2),r={feature:t,geometry:e,index:o,aa:n},this.a.ha(je(n),r)},em.yl=function(t,e){var o,i,n,r,s,a,p,l=e.K();for(r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)a=o.slice(i,i+2),p={feature:t,geometry:e,depth:[r],index:i,aa:a},this.a.ha(je(a),p)},em.Cl=function(t,e){var o,i,n,r,s,a,p,l=e.K();for(r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)a=o.slice(i,i+2),p={feature:t,geometry:e,depth:[r],index:i,aa:a},this.a.ha(je(a),p)},em.Al=function(t,e){var o,i,n,r,s,a,p,l,h,u,c=e.K();for(a=0,p=c.length;a<p;++a)for(l=c[a],r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)h=o.slice(i,i+2),u={feature:t,geometry:e,depth:[r,a],index:i,aa:h},this.a.ha(je(h),u)},em.xl=function(t,e){var o,i=e.d;for(o=0;o<i.length;++o)this.H[i[o].M()].call(this,t,i[o])},em.qk=function(t,e){for(var o,i=t.aa,n=t.feature,r=t.geometry,s=t.depth,a=t.index;e.length<r.s;)e.push(0);switch(r.M()){case"MultiLineString":o=r.K(),o[s[0]].splice(a+1,0,e);break;case"Polygon":o=r.K(),o[s[0]].splice(a+1,0,e);break;case"MultiPolygon":o=r.K(),o[s[1]][s[0]].splice(a+1,0,e);break;case"LineString":o=r.K(),o.splice(a+1,0,e);break;default:return}r.W(o),o=this.a,o.remove(t),Gg(this,r,a,s,1);var p={aa:[i[0],e],feature:n,geometry:r,depth:s,index:a};o.ha(je(p.aa),p),this.g.push([p,1]),i={aa:[e,i[1]],feature:n,geometry:r,depth:s,index:a+1},o.ha(je(i.aa),i),this.g.push([i,0])},v(qg,Et),v($g,As),$g.prototype.p=function(){return this.a.b},$g.prototype.setMap=function(t){var e=this.l,o=this.a.b;null===e||o.forEach(e.Ih,e),$g.S.setMap.call(this,t),this.a.setMap(t),null===t||o.forEach(t.Eh,t)},$g.prototype.n=function(t){t=t.element;var e=this.l;null===e||e.Eh(t)},$g.prototype.J=function(t){t=t.element;var e=this.l;null===e||e.Ih(t)},v(zg,qs),em=zg.prototype,em.ed=function(e,o){var i=!t(o)||o,n=e.Q(),r=this.T[n.M()];if(t(r)){var s=c(e);this.N[s]=n.G(He()),r.call(this,e,n),i&&(this.H[s]=n.r("change",d(this.Oj,this,e),this),this.p[s]=e.r(se(e.a),this.Dl,this))}},em.Hi=function(t){this.ed(t)},em.Ii=function(t){this.fd(t)},em.Eg=function(t){var e;t instanceof mu?e=t.feature:t instanceof ti&&(e=t.element),this.ed(e)},em.Fg=function(t){var e;t instanceof mu?e=t.feature:t instanceof ti&&(e=t.element),this.fd(e)},em.Dl=function(t){t=t.c,this.fd(t,!0),this.ed(t,!0)},em.Oj=function(t){if(this.o){var e=c(t);e in this.n||(this.n[e]=t)}else this.Jh(t)},em.fd=function(e,o){var i=!t(o)||o,n=c(e),r=this.N[n];if(r){var s=this.a,a=[];for(hu(s,r,function(t){e===t.feature&&a.push(t)}),r=a.length-1;0<=r;--r)s.remove(a[r]);i&&(zt(this.H[n]),delete this.H[n],zt(this.p[n]),delete this.p[n])}},em.setMap=function(t){var e,o=this.l,i=this.X;null===this.g?null===this.i||(e=this.i.Dc()):e=this.g,o&&(E(i,ie),i.length=0,e.forEach(this.Ii,this)),zg.S.setMap.call(this,t),t&&(null!==this.g?(i.push(this.g.r("add",this.Eg,this)),i.push(this.g.r("remove",this.Fg,this))):null!==this.i&&(i.push(this.i.r("addfeature",this.Eg,this)),i.push(this.i.r("removefeature",this.Fg,this))),e.forEach(this.Hi,this))},em.nc=pb,em.Jh=function(t){this.fd(t,!1),this.ed(t,!1)},em.El=function(t,e){var o,i=e.d;for(o=0;o<i.length;++o)this.T[i[o].M()].call(this,t,i[o])},em.Gg=function(t,e){var o,i,n,r,s=e.K();for(o=0,i=s.length-1;o<i;++o)n=s.slice(o,o+2),r={feature:t,aa:n},this.a.ha(je(n),r)},em.Fl=function(t,e){var o,i,n,r,s,a,p,l=e.K();for(r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)a=o.slice(i,i+2),p={feature:t,aa:a},this.a.ha(je(a),p)},em.Gl=function(t,e){var o,i,n,r=e.K();for(i=0,n=r.length;i<n;++i)o=r[i],o={feature:t,aa:[o,o]},this.a.ha(e.G(),o)},em.Hl=function(t,e){var o,i,n,r,s,a,p,l,h,u,c=e.K();for(a=0,p=c.length;a<p;++a)for(l=c[a],r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)h=o.slice(i,i+2),u={feature:t,aa:h},this.a.ha(je(h),u)},em.Il=function(t,e){var o=e.K(),o={feature:t,aa:[o,o]};this.a.ha(e.G(),o)},em.Jl=function(t,e){var o,i,n,r,s,a,p,l=e.K();for(r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)a=o.slice(i,i+2),p={feature:t,aa:a},this.a.ha(je(a),p)},v(Zg,Np);var fM=["#00f","#0ff","#0f0","#ff0","#f00"];em=Zg.prototype,em.Sf=function(){return this.get("blur")},em.Wf=function(){return this.get("gradient")},em.Hg=function(){return this.get("radius")},em.Pj=function(){for(var t=this.Wf(),e=mr(1,256),o=e.createLinearGradient(0,0,1,256),i=1/(t.length-1),n=0,r=t.length;n<r;++n)o.addColorStop(n*i,t[n]);e.fillStyle=o,e.fillRect(0,0,1,256),this.d=e.getImageData(0,0,1,256).data},em.hg=function(){var t=this.Hg(),e=this.Sf(),o=t+e+1,i=2*o,i=mr(i,i);i.shadowOffsetX=i.shadowOffsetY=this.L,i.shadowBlur=e,i.shadowColor="#000",i.beginPath(),e=o-this.L,i.arc(e,e,t,0,2*Math.PI,!0),i.fill(),this.p=i.canvas.toDataURL(),this.l=Array(256),this.k()},em.hk=function(t){t=t.context;var e,o,i,n=t.canvas,n=t.getImageData(0,0,n.width,n.height),r=n.data;for(e=0,o=r.length;e<o;e+=4)(i=4*r[e+3])&&(r[e]=this.d[i],r[e+1]=this.d[i+1],r[e+2]=this.d[i+2]);t.putImageData(n,0,0)},em.th=function(t){this.set("blur",t)},em.yh=function(t){this.set("gradient",t)},em.Ig=function(t){this.set("radius",t)};var yM=0,dM=1;v(ev,m);var gM=0;ov.prototype.send=function(t,e,o,i){t=t||null,i=i||"_"+(gM++).toString(36)+lm().toString(36),sm._callbacks_||(sm._callbacks_={});var n=this.a.clone();if(t)for(var r in t)if(!t.hasOwnProperty||t.hasOwnProperty(r)){var a=n,p=r,l=t[r];s(l)||(l=[String(l)]),vy(a.b,p,l)}return e&&(sm._callbacks_[i]=nv(i,e),e=this.b,r="_callbacks_."+i,s(r)||(r=[String(r)]),vy(n.b,e,r)),e=_g(n.toString(),{timeout:this.oc,Bi:!0}),og(e,null,iv(i,t,o),void 0),{$:i,Of:e}},ov.prototype.cancel=function(t){t&&(t.Of&&t.Of.cancel(),t.$&&rv(t.$,!1))},v(cv,En),em=cv.prototype,em.Vb=function(e,o,i,n,r){var s=this.bb(e,o,i);if(tn(this.a,s))return this.a.get(s);e=[e,o,i],o=t(r)?r:this.f,i=kn(this,o);var a,p=this.H;if(a=t(p)){a=e[0];var l=xn(i,a);if(t(l)){var h=Tn(o),u=o.G();a=he(i.na(a),i.a)[0]*l==h.na(a)*_o(gn(h,u,a))}else a=o.e}return a?p?(p=e[0],a=e[1],o=wn(i,p,o),a<o.b||a>o.d?(a=ht(a,_o(o)),o=[p,a,e[2]]):o=e):(p=e[1],o=wn(i,e[0],o),o=p<o.b||p>o.d?null:e):o=e,n=null===o?void 0:this.tileUrlFunction(o,n,r),n=new this.tileClass(e,t(n)?0:4,t(n)?n:"",this.crossOrigin,this.tileLoadFunction),Ht(n,"change",this.nm,!1,this),this.a.set(s,n),n},em.Ua=function(){return this.tileLoadFunction},em.Va=function(){return this.tileUrlFunction},em.nm=function(t){switch(t=t.target,t.state){case 1:this.dispatchEvent(new An("tileloadstart",t));break;case 2:this.dispatchEvent(new An("tileloadend",t));break;case 3:this.dispatchEvent(new An("tileloaderror",t))}},em.$a=function(t){this.a.clear(),this.tileLoadFunction=t,this.k()},em.pa=function(t){this.a.clear(),this.tileUrlFunction=t,this.k()},em.yf=function(t,e,o){t=this.bb(t,e,o),tn(this.a,t)&&this.a.get(t)},v(yv,yn),yv.prototype.yb=function(e){e=t(e)?e:{};var o=this.minZoom,i=this.maxZoom,n=null;if(t(e.extent)){var r,n=Array(i+1);for(r=0;r<=i;++r)n[r]=r<o?null:gn(this,e.extent,r)}return function(t,e,r){if(e=t[0],e<o||i<e)return null;var s=t[1];return t=t[2],t<-Math.pow(2,e)||-1<t||null!==n&&!Yo(n[e],s,t)?null:$o(e,s,-t-1,r)}},yv.prototype.Ld=function(t,e){if(t[0]<this.maxZoom){var o=2*t[1],i=2*t[2];return Vo(o,o+1,i,i+1,e)}return null},yv.prototype.Ad=function(t,e,o,i){for(i=Vo(0,t[1],0,t[2],i),t=t[0]-1;t>=this.minZoom;--t)if(i.b=i.d>>=1,i.c=i.a>>=1,e.call(o,t,i))return!0;return!1},v(dv,cv);var vM=new Qo({html:'<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'});dv.prototype.i=function(t){if(200!=t.statusCode||"OK"!=t.statusDescription||"ValidCredentials"!=t.authenticationResultCode||1!=t.resourceSets.length||1!=t.resourceSets[0].resources.length)pn(this,"error");else{var e=t.brandLogoUri;-1==e.indexOf("https")&&(e=e.replace("http","https"));var o=t.resourceSets[0].resources[0],i=-1==this.e?o.zoomMax:this.e,n=new yv({extent:Cn(this.f),minZoom:o.zoomMin,maxZoom:i,tileSize:o.imageWidth==o.imageHeight?o.imageWidth:[o.imageWidth,o.imageHeight]});this.tileGrid=n;var r=this.g;if(this.tileUrlFunction=hv(n.yb(),pv(k(o.imageUrlSubdomains,function(t){var e=o.imageUrl.replace("{subdomain}",t).replace("{culture}",r);return function(t){return null===t?void 0:e.replace("{quadkey}",Wo(t))}}))),o.imageryProviders){var s=Mo(xo("EPSG:4326"),this.f);t=k(o.imageryProviders,function(t){var e=t.attribution,o={};return E(t.coverageAreas,function(t){var e=t.zoomMin,r=Math.min(t.zoomMax,i);t=t.bbox,t=po([t[1],t[0],t[3],t[2]],s);var a,p;for(a=e;a<=r;++a)p=a.toString(),e=gn(n,t,a),p in o?o[p].push(e):o[p]=[e]}),new Qo({html:e,tileRanges:o})}),t.push(vM),this.d=t}this.L=e,pn(this,"ready")}},v(gv,cu),gv.prototype.X=function(){return this.l},gv.prototype.ac=function(t,e,o){e!==this.p&&(this.clear(),this.p=e,this.l.ac(t,e,o),vv(this),this.Oc(this.n))},gv.prototype.ba=function(){this.clear(),vv(this),this.Oc(this.n),this.k()},v(bv,Dl),em=bv.prototype,em.Tl=function(){return this.e},em.Cc=function(e,o,i,n){o=Fl(this,o),i=this.X?i:1;var r=this.c;return null!==r&&this.p==this.b&&r.resolution==o&&r.e==i&&Be(r.G(),e)?r:(1!=this.n&&(e=e.slice(),ao(e,this.n)),n=this.J(e,[no(e)/o*i,to(e)/o*i],n),t(n)?(r=new Kd(e,o,i,this.d,n,this.T,this.a),Ht(r,"change",this.i,!1,this)):r=null,this.c=r,this.p=this.b,r)},em.Sl=function(){return this.a},em.Wl=function(t){rt(this.e,t),this.k()},em.Ul=function(t,e,o,i){var n;n=this.N;var r=no(o),s=to(o),a=i[0],p=i[1],l=.0254/this.g;return n=p*r>a*s?r*n/(a*l):s*n/(p*l),o=_e(o),i={OPERATION:this.ba?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.g,SETDISPLAYWIDTH:Math.round(i[0]),SETDISPLAYHEIGHT:Math.round(i[1]),SETVIEWSCALE:n,SETVIEWCENTERX:o[0],SETVIEWCENTERY:o[1]},rt(i,e),hh(ch([t],i))},em.Vl=function(t){this.c=null,this.a=t,this.k()},v(wv,Dl),wv.prototype.Cc=function(t){return ro(t,this.a.G())?this.a:null},v(xv,Dl);var mM=[101,101];em=xv.prototype,em.bm=function(e,o,i,n){if(t(this.e)){var r=Qe(e,o,0,mM),s={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.c.LAYERS};return rt(s,this.c,n),n=Math.floor((r[3]-e[1])/o),s[this.g?"I":"X"]=Math.floor((e[0]-r[0])/o),s[this.g?"J":"Y"]=n,Sv(this,r,mM,1,xo(i),s)}},em.dm=function(){return this.c},em.Cc=function(e,o,i,n){if(!t(this.e))return null;o=Fl(this,o),1==i||this.ba&&t(this.T)||(i=1);var r=this.a;if(null!==r&&this.N==this.b&&r.resolution==o&&r.e==i&&Be(r.G(),e))return r;r={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0},rt(r,this.c),e=e.slice();var s=(e[0]+e[2])/2,a=(e[1]+e[3])/2;if(1!=this.J){var p=this.J*no(e)/2,l=this.J*to(e)/2;e[0]=s-p,e[1]=a-l,e[2]=s+p,e[3]=a+l}var p=o/i,l=Math.ceil(no(e)/p),h=Math.ceil(to(e)/p);return e[0]=s-p*l/2,e[2]=s+p*l/2,e[1]=a-p*h/2,e[3]=a+p*h/2,this.p[0]=l,this.p[1]=h,n=Sv(this,e,this.p,i,n,r),this.a=new Kd(e,o,i,this.d,n,this.X,this.n),this.N=this.b,Ht(this.a,"change",this.i,!1,this),this.a},em.cm=function(){return this.n},em.em=function(){return this.e},em.fm=function(t){this.a=null,this.n=t,this.k()},em.gm=function(t){t!=this.e&&(this.e=t,this.a=null,this.k())},em.hm=function(t){rt(this.c,t),Tv(this),this.a=null,this.k()},v(Mv,cv),Mv.prototype.pa=function(t){Mv.S.pa.call(this,hv(this.l,t))},Mv.prototype.e=function(t){this.pa(av(uv(t)))},v(Cv,Mv);var bM=new Qo({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});v(Ev,Mv);var wM=new Qo({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),xM={osm:{maxZoom:19,attributions:[wM,bM]},sat:{maxZoom:18,attributions:[wM,new Qo({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,attributions:[wM,bM]}};Ev.prototype.i=function(){return this.g};var SM={terrain:{Ta:"jpg",opaque:!0},"terrain-background":{Ta:"jpg",opaque:!0},"terrain-labels":{Ta:"png",opaque:!1},"terrain-lines":{Ta:"png",opaque:!1},"toner-background":{Ta:"png",opaque:!0},toner:{Ta:"png",opaque:!0},"toner-hybrid":{Ta:"png",opaque:!1},"toner-labels":{Ta:"png",opaque:!1},"toner-lines":{Ta:"png",opaque:!1},"toner-lite":{Ta:"png",opaque:!0},watercolor:{Ta:"jpg",opaque:!0}},TM={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:3,maxZoom:16}};v(Pv,Mv);var MM=[new Qo({html:'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'}),bM];return v(kv,cv),em=kv.prototype,em.im=function(){return this.e},em.Xb=function(t,e,o){return t=kv.S.Xb.call(this,t,e,o),1==e?t:le(t,e,this.c)},em.jm=function(){return this.g},em.km=function(e){e=t(e)?uv(e):null,this.Ng(e)},em.Ng=function(t){this.g=null!=t?t:[],this.k()},em.lm=function(t,e,o){var i=this.tileGrid;if(null===i&&(i=kn(this,o)),!(i.b.length<=t[0])){var n=mn(i,t,this.i),r=he(i.na(t[0]),this.c);1!=e&&(r=le(r,e,this.c)),i={F:"image",FORMAT:"PNG32",TRANSPARENT:!0},rt(i,this.e);var s=this.g;return 0==s.length?t=void 0:(o=o.b.split(":").pop(),i.SIZE=r[0]+","+r[1],i.BBOX=n.join(","),i.BBOXSR=o,i.IMAGESR=o,i.DPI=90*e,t=1==s.length?s[0]:s[ht((t[1]<<t[0])+t[2],s.length)],b(t,"/")||(t+="/"),b(t,"MapServer/")?t+="export":b(t,"ImageServer/")&&(t+="exportImage"),t=hh(ch([t],i))),t}},em.mm=function(t){rt(this.e,t),this.k()},v(Av,nn),Av.prototype.Ma=function(e){if(e=t(e)?c(e):-1,e in this.a)return this.a[e];var o=this.c,i=mr(o[0],o[1]);return i.strokeStyle="black",i.strokeRect(.5,.5,o[0]+.5,o[1]+.5),i.fillStyle="black",i.textAlign="center",i.textBaseline="middle",i.font="24px sans-serif",i.fillText(zo(this.b),o[0]/2,o[1]/2),this.a[e]=i.canvas},v(Rv,En),Rv.prototype.Vb=function(t,e,o){var i=this.bb(t,e,o);return tn(this.a,i)?this.a.get(i):(t=new Av([t,e,o],this.tileGrid),this.a.set(i,t),t)},v(Lv,cv),Lv.prototype.e=function(e){var o,i=xo("EPSG:4326"),n=this.f;t(e.bounds)&&(o=po(e.bounds,Mo(i,n)));var r=e.minzoom||0,s=e.maxzoom||22;if(this.tileGrid=n=new yv({extent:Cn(n),maxZoom:s,minZoom:r}),this.tileUrlFunction=hv(n.yb({extent:o}),av(e.tiles)),t(e.attribution)&&null===this.d){i=t(o)?o:i.G(),o={};for(var a;r<=s;++r)a=r.toString(),o[a]=[gn(n,i,r)];this.d=[new Qo({html:e.attribution,tileRanges:o})]}pn(this,"ready")},v(Nv,En),em=Nv.prototype,em.wj=function(){return this.g},em.Gi=function(t,e,o,i,n){null===this.tileGrid?!0===n?Yn(function(){o.call(i,null)}):o.call(i,null):(e=this.tileGrid.Wb(t,e),Dv(this.Vb(e[0],e[1],e[2],1,this.f),t,o,i,n))},em.om=function(e){var o,i=xo("EPSG:4326"),n=this.f;t(e.bounds)&&(o=po(e.bounds,Mo(i,n)));var r=e.minzoom||0,s=e.maxzoom||22;this.tileGrid=n=new yv({extent:Cn(n),maxZoom:s,minZoom:r}),this.g=e.template;var a=e.grids;if(null!=a){if(this.e=hv(n.yb({extent:o}),av(a)),t(e.attribution)){for(i=t(o)?o:i.G(),o={};r<=s;++r)a=r.toString(),o[a]=[gn(n,i,r)];this.d=[new Qo({html:e.attribution,tileRanges:o})]}pn(this,"ready")}else pn(this,"error")},em.Vb=function(e,o,i,n,r){var s=this.bb(e,o,i);return tn(this.a,s)?this.a.get(s):(e=[e,o,i],n=this.e(e,n,r),n=new jv(e,t(n)?0:4,t(n)?n:"",mn(this.tileGrid,e),this.i),this.a.set(s,n),n)},em.yf=function(t,e,o){t=this.bb(t,e,o),tn(this.a,t)&&this.a.get(t)},v(jv,nn),em=jv.prototype,em.Ma=function(){return null},em.gb=function(){return this.g},em.Lj=function(){this.state=3,rn(this)},em.Xj=function(t){this.c=t.grid,this.e=t.keys,this.d=t.data,this.state=4,rn(this)},em.load=function(){this.i&&Fv(this)},v(Ov,cu),em=Ov.prototype,em.clear=function(){tt(this.l)},em.Ab=function(e,o,i,n){var r=this.n,s=this.l;o=Sn(r,o),e=gn(r,e,o);for(var a,r=e.b;r<=e.d;++r)for(a=e.c;a<=e.a;++a){var p=s[o+"/"+r+"/"+a];if(t(p)){var l,h;for(l=0,h=p.length;l<h;++l){var u=i.call(n,p[l]);if(u)return u}}}},em.Dc=function(){var t,e=this.l,o=[];for(t in e)F(o,e[t]);return o},em.Vi=function(t,e){var o=[];return Bv(this,t,e,function(t){o.push(t)}),o},em.ac=function(e,o,i){function n(t,e){h[t]=e,this.k()}var r,s,a=this.X,p=this.n,l=this.p,h=this.l,u=Sn(p,o),p=gn(p,e,u),c=[u,0,0];for(r=p.b;r<=p.d;++r)for(s=p.c;s<=p.a;++s){var f=u+"/"+r+"/"+s;if(!(f in h)){c[0]=u,c[1]=r,c[2]=s,a(c,i,c);var y=l(c,1,i);t(y)&&(h[f]=[],nu(y,this.T,g(n,f)).call(this,e,o,i))}}},v(Uv,cv),em=Uv.prototype,em.pm=function(t,e,o,i){o=xo(o);var n=this.tileGrid;if(null===n&&(n=kn(this,o)),e=n.Wb(t,e),!(n.b.length<=e[0])){var r=n.ma(e[0]),s=mn(n,e,this.N),n=he(n.na(e[0]),this.c),a=this.l;return 0!==a&&(n=pe(n,a,this.c),s=De(s,r*a,s)),a={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.e.LAYERS},rt(a,this.e,i),i=Math.floor((s[3]-t[1])/r),a[this.i?"I":"X"]=Math.floor((t[0]-s[0])/r),a[this.i?"J":"Y"]=i,Gv(this,e,n,s,1,o,a)}},em.Cd=function(){return this.l},em.bb=function(t,e,o){return this.p+Uv.S.bb.call(this,t,e,o)},em.qm=function(){return this.e},em.Xb=function(e,o,i){return e=Uv.S.Xb.call(this,e,o,i),1!=o&&this.J&&t(this.n)?le(e,o,this.c):e;
+},em.rm=function(){return this.g},em.sm=function(e){e=t(e)?uv(e):null,this.Og(e)},em.Og=function(t){this.g=null!=t?t:[],Hv(this),this.k()},em.tm=function(e,o,i){var n=this.tileGrid;if(null===n&&(n=kn(this,i)),!(n.b.length<=e[0])){1==o||this.J&&t(this.n)||(o=1);var r=n.ma(e[0]),s=mn(n,e,this.N),n=he(n.na(e[0]),this.c),a=this.l;return 0!==a&&(n=pe(n,a,this.c),s=De(s,r*a,s)),1!=o&&(n=le(n,o,this.c)),r={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0},rt(r,this.e),Gv(this,e,n,s,o,i,r)}},em.um=function(t){rt(this.e,t),Hv(this),qv(this),this.k()},v($v,yn),$v.prototype.q=function(){return this.e},v(Wv,cv),em=Wv.prototype,em.Ti=function(){return this.e},em.Xi=function(){return this.n},em.bb=function(t,e,o){return this.l+Wv.S.bb.call(this,t,e,o)},em.vm=function(){return this.p},em.jj=function(){return this.i},em.uj=function(){return this.T},em.wm=function(){return this.J},em.xm=function(){return this.g},em.Aj=function(){return this.N},em.uo=function(t){rt(this.e,t),zv(this),this.k()},v(Kv,yn),Kv.prototype.yb=function(e){e=t(e)?e:{};var o=this.minZoom,i=this.maxZoom,n=null;if(t(e.extent)){var r,n=Array(i+1);for(r=0;r<=i;++r)n[r]=r<o?null:gn(this,e.extent,r)}return function(t,e,r){if(e=t[0],e<o||i<e)return null;var s=Math.pow(2,e),a=t[1];return 0>a||s<=a?null:(t=t[2],t<-s||-1<t||null!==n&&!Yo(n[e],a,-t-1)?null:$o(e,a,-t-1,r))}},v(Vv,cv),v(Yv,Vd),Yv.prototype.Ma=function(e){var o=t(e)?c(e).toString():"";if(o in this.d)return this.d[o];if(e=Yv.S.Ma.call(this,e),2==this.state){if(256==e.width&&256==e.height)return this.d[o]=e;var i=mr(256,256);return i.drawImage(e,0,0),this.d[o]=i.canvas}return e},Zv.prototype.add=function(e,o,i,n,r,s){return o+this.b>this.c||i+this.b>this.c?null:(n=_v(this,!1,e,o,i,n,s),null===n?null:(e=_v(this,!0,e,o,i,t(r)?r:hb,s),{offsetX:n.offsetX,offsetY:n.offsetY,image:n.image,ig:e.image}))},Jv.prototype.get=function(t){return ot(this.d,t,null)},Jv.prototype.add=function(t,e,o,i,n){var r,s,a;for(s=0,a=this.a.length;s<a;++s)if(r=this.a[s],r.width>=e+this.b&&r.height>=o+this.b)return a={offsetX:r.x+this.b,offsetY:r.y+this.b,image:this.c},this.d[t]=a,i.call(n,this.e,r.x+this.b,r.y+this.b),t=s,e+=this.b,o+=this.b,n=i=void 0,r.width-e>r.height-o?(i={x:r.x+e,y:r.y,width:r.width-e,height:r.height},n={x:r.x,y:r.y+o,width:e,height:r.height-o},Qv(this,t,i,n)):(i={x:r.x+e,y:r.y,width:r.width-e,height:o},n={x:r.x,y:r.y+o,width:r.width,height:r.height-o},Qv(this,t,i,n)),a;return null},v(tm,hs),em=tm.prototype,em.mb=function(){return this.p},em.Cm=function(){return this.g},em.Dm=function(){return this.i},em.he=function(){return this.o},em.Lb=function(){return this.d},em.Dd=function(){return this.H},em.gd=function(){return 2},em.rb=function(){return this.J},em.Em=function(){return this.b},em.Fm=function(){return this.c},em.tj=function(){return this.f},em.Xa=function(){return this.L},em.Gm=function(){return this.a},em.$e=o,em.load=o,em.xf=o,em.Ug=function(t,e,o,i){var n;for(e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),this.f!==this.c&&(this.b*=2),o=0;o<=this.b;o++)i=2*o*Math.PI/this.b-Math.PI/2+this.g,n=0===o%2?this.c:this.f,e.lineTo(t.size/2+n*Math.cos(i),t.size/2+n*Math.sin(i));null!==this.i&&(e.fillStyle=ni(this.i.b),e.fill()),null!==this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.md,null===t.lineDash||e.setLineDash(t.lineDash),e.lineCap=t.lineCap,e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke()),e.closePath()},em.Tg=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),this.f!==this.c&&(this.b*=2);var n;for(o=0;o<=this.b;o++)n=2*o*Math.PI/this.b-Math.PI/2+this.g,i=0===o%2?this.c:this.f,e.lineTo(t.size/2+i*Math.cos(n),t.size/2+i*Math.sin(n));e.fillStyle=ow,e.fill(),null!==this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.md,null===t.lineDash||e.setLineDash(t.lineDash),e.stroke()),e.closePath()},em.nb=function(){var e=null===this.a?"-":this.a.nb(),o=null===this.i?"-":this.i.nb();return null!==this.e&&e==this.e[1]&&o==this.e[2]&&this.c==this.e[3]&&this.f==this.e[4]&&this.g==this.e[5]&&this.b==this.e[6]||(this.e=["r"+e+o+(t(this.c)?this.c.toString():"-")+(t(this.f)?this.f.toString():"-")+(t(this.g)?this.g.toString():"-")+(t(this.b)?this.b.toString():"-"),e,o,this.c,this.f,this.g,this.b]),this.e[0]},e("ol.animation.bounce",function(e){var o=e.resolution,i=t(e.start)?e.start:lm(),n=t(e.duration)?e.duration:1e3,r=t(e.easing)?e.easing:Uo;return function(t,e){if(e.time<i)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<i+n){var s=r((e.time-i)/n),a=o-e.viewState.resolution;return e.animate=!0,e.viewState.resolution+=s*a,e.viewHints[0]+=1,!0}return!1}},nm),e("ol.animation.pan",Go,nm),e("ol.animation.rotate",Ho,nm),e("ol.animation.zoom",qo,nm),e("ol.Attribution",Qo,nm),Qo.prototype.getHTML=Qo.prototype.c,ti.prototype.element=ti.prototype.element,e("ol.Collection",ei,nm),ei.prototype.clear=ei.prototype.clear,ei.prototype.extend=ei.prototype.af,ei.prototype.forEach=ei.prototype.forEach,ei.prototype.getArray=ei.prototype.Hk,ei.prototype.item=ei.prototype.item,ei.prototype.getLength=ei.prototype.Ib,ei.prototype.insertAt=ei.prototype.Td,ei.prototype.pop=ei.prototype.pop,ei.prototype.push=ei.prototype.push,ei.prototype.remove=ei.prototype.remove,ei.prototype.removeAt=ei.prototype.tf,ei.prototype.setAt=ei.prototype.Un,e("ol.coordinate.add",ue,nm),e("ol.coordinate.createStringXY",function(t){return function(e){return be(e,t)}},nm),e("ol.coordinate.format",ye,nm),e("ol.coordinate.rotate",ge,nm),e("ol.coordinate.toStringHDMS",function(e){return t(e)?fe(e[1],"NS")+" "+fe(e[0],"EW"):""},nm),e("ol.coordinate.toStringXY",be,nm),e("ol.DeviceOrientation",sf,nm),sf.prototype.getAlpha=sf.prototype.Mi,sf.prototype.getBeta=sf.prototype.Pi,sf.prototype.getGamma=sf.prototype.Yi,sf.prototype.getHeading=sf.prototype.Ik,sf.prototype.getTracking=sf.prototype.og,sf.prototype.setTracking=sf.prototype.bf,e("ol.easing.easeIn",function(t){return Math.pow(t,3)},nm),e("ol.easing.easeOut",Fo,nm),e("ol.easing.inAndOut",Oo,nm),e("ol.easing.linear",Bo,nm),e("ol.easing.upAndDown",Uo,nm),e("ol.extent.boundingExtent",je,nm),e("ol.extent.buffer",De,nm),e("ol.extent.containsCoordinate",function(t,e){return Ue(t,e[0],e[1])},nm),e("ol.extent.containsExtent",Be,nm),e("ol.extent.containsXY",Ue,nm),e("ol.extent.createEmpty",He,nm),e("ol.extent.equals",Xe,nm),e("ol.extent.extend",We,nm),e("ol.extent.getBottomLeft",Ye,nm),e("ol.extent.getBottomRight",Ze,nm),e("ol.extent.getCenter",_e,nm),e("ol.extent.getHeight",to,nm),e("ol.extent.getIntersection",eo,nm),e("ol.extent.getSize",function(t){return[t[2]-t[0],t[3]-t[1]]},nm),e("ol.extent.getTopLeft",oo,nm),e("ol.extent.getTopRight",io,nm),e("ol.extent.getWidth",no,nm),e("ol.extent.intersects",ro,nm),e("ol.extent.isEmpty",so,nm),e("ol.extent.applyTransform",po,nm),e("ol.Feature",af,nm),af.prototype.clone=af.prototype.clone,af.prototype.getGeometry=af.prototype.Q,af.prototype.getId=af.prototype.aj,af.prototype.getGeometryName=af.prototype.$i,af.prototype.getStyle=af.prototype.Qk,af.prototype.getStyleFunction=af.prototype.Rk,af.prototype.setGeometry=af.prototype.La,af.prototype.setStyle=af.prototype.cf,af.prototype.setId=af.prototype.Qb,af.prototype.setGeometryName=af.prototype.Ic,e("ol.featureloader.xhr",ru,nm),e("ol.FeatureOverlay",pf,nm),pf.prototype.addFeature=pf.prototype.pg,pf.prototype.getFeatures=pf.prototype.Kk,pf.prototype.getMap=pf.prototype.Lk,pf.prototype.removeFeature=pf.prototype.Yd,pf.prototype.setFeatures=pf.prototype.ld,pf.prototype.setMap=pf.prototype.setMap,pf.prototype.setStyle=pf.prototype.rg,pf.prototype.getStyle=pf.prototype.Mk,pf.prototype.getStyleFunction=pf.prototype.Nk,e("ol.Geolocation",Gd,nm),Gd.prototype.getAccuracy=Gd.prototype.Ki,Gd.prototype.getAccuracyGeometry=Gd.prototype.Li,Gd.prototype.getAltitude=Gd.prototype.Ni,Gd.prototype.getAltitudeAccuracy=Gd.prototype.Oi,Gd.prototype.getHeading=Gd.prototype.Tk,Gd.prototype.getPosition=Gd.prototype.Uk,Gd.prototype.getProjection=Gd.prototype.sg,Gd.prototype.getSpeed=Gd.prototype.vj,Gd.prototype.getTracking=Gd.prototype.tg,Gd.prototype.getTrackingOptions=Gd.prototype.bg,Gd.prototype.setProjection=Gd.prototype.ug,Gd.prototype.setTracking=Gd.prototype.Zd,Gd.prototype.setTrackingOptions=Gd.prototype.Dh,e("ol.Graticule",Xd,nm),Xd.prototype.getMap=Xd.prototype.Xk,Xd.prototype.getMeridians=Xd.prototype.kj,Xd.prototype.getParallels=Xd.prototype.pj,Xd.prototype.setMap=Xd.prototype.setMap,e("ol.has.DEVICE_PIXEL_RATIO",Eb,nm),e("ol.has.CANVAS",kb,nm),e("ol.has.DEVICE_ORIENTATION",Ab,nm),e("ol.has.GEOLOCATION",Rb,nm),e("ol.has.TOUCH",Lb,nm),e("ol.has.WEBGL",xb,nm),Kd.prototype.getImage=Kd.prototype.b,Vd.prototype.getImage=Vd.prototype.Ma,e("ol.Kinetic",Es,nm),e("ol.loadingstrategy.all",su,nm),e("ol.loadingstrategy.bbox",function(t){return[t]},nm),e("ol.loadingstrategy.tile",function(t){return function(e,o){var i=Sn(t,o),n=gn(t,e,i),r=[],i=[i,0,0];for(i[1]=n.b;i[1]<=n.d;++i[1])for(i[2]=n.c;i[2]<=n.a;++i[2])r.push(mn(t,i));return r}},nm),e("ol.Map",Nc,nm),Nc.prototype.addControl=Nc.prototype.si,Nc.prototype.addInteraction=Nc.prototype.ti,Nc.prototype.addLayer=Nc.prototype.Jf,Nc.prototype.addOverlay=Nc.prototype.Kf,Nc.prototype.beforeRender=Nc.prototype.Ha,Nc.prototype.forEachFeatureAtPixel=Nc.prototype.Ne,Nc.prototype.forEachLayerAtPixel=Nc.prototype.al,Nc.prototype.hasFeatureAtPixel=Nc.prototype.ok,Nc.prototype.getEventCoordinate=Nc.prototype.Ui,Nc.prototype.getEventPixel=Nc.prototype.Bd,Nc.prototype.getTarget=Nc.prototype.df,Nc.prototype.getTargetElement=Nc.prototype.bd,Nc.prototype.getCoordinateFromPixel=Nc.prototype.ka,Nc.prototype.getControls=Nc.prototype.Si,Nc.prototype.getOverlays=Nc.prototype.oj,Nc.prototype.getInteractions=Nc.prototype.bj,Nc.prototype.getLayerGroup=Nc.prototype.Ub,Nc.prototype.getLayers=Nc.prototype.vg,Nc.prototype.getPixelFromCoordinate=Nc.prototype.ta,Nc.prototype.getSize=Nc.prototype.xa,Nc.prototype.getView=Nc.prototype.R,Nc.prototype.getViewport=Nc.prototype.Bj,Nc.prototype.renderSync=Nc.prototype.Rn,Nc.prototype.render=Nc.prototype.render,Nc.prototype.removeControl=Nc.prototype.Ln,Nc.prototype.removeInteraction=Nc.prototype.Mn,Nc.prototype.removeLayer=Nc.prototype.Nn,Nc.prototype.removeOverlay=Nc.prototype.On,Nc.prototype.setLayerGroup=Nc.prototype.zh,Nc.prototype.setSize=Nc.prototype.vf,Nc.prototype.setTarget=Nc.prototype.cl,Nc.prototype.setView=Nc.prototype.jo,Nc.prototype.updateSize=Nc.prototype.Kc,qr.prototype.originalEvent=qr.prototype.originalEvent,qr.prototype.pixel=qr.prototype.pixel,qr.prototype.coordinate=qr.prototype.coordinate,qr.prototype.dragging=qr.prototype.dragging,qr.prototype.preventDefault=qr.prototype.preventDefault,qr.prototype.stopPropagation=qr.prototype.fb,_i.prototype.map=_i.prototype.map,_i.prototype.frameState=_i.prototype.frameState,ne.prototype.key=ne.prototype.key,ne.prototype.oldValue=ne.prototype.oldValue,e("ol.Object",re,nm),re.prototype.get=re.prototype.get,re.prototype.getKeys=re.prototype.C,re.prototype.getProperties=re.prototype.D,re.prototype.set=re.prototype.set,re.prototype.setProperties=re.prototype.t,re.prototype.unset=re.prototype.I,e("ol.Observable",oe,nm),e("ol.Observable.unByKey",ie,nm),oe.prototype.changed=oe.prototype.k,oe.prototype.getRevision=oe.prototype.v,oe.prototype.on=oe.prototype.r,oe.prototype.once=oe.prototype.A,oe.prototype.un=oe.prototype.u,oe.prototype.unByKey=oe.prototype.B,e("ol.inherits",v,nm),e("ol.Overlay",Ic,nm),Ic.prototype.getElement=Ic.prototype.$d,Ic.prototype.getMap=Ic.prototype.ae,Ic.prototype.getOffset=Ic.prototype.Yf,Ic.prototype.getPosition=Ic.prototype.wg,Ic.prototype.getPositioning=Ic.prototype.ag,Ic.prototype.setElement=Ic.prototype.wh,Ic.prototype.setMap=Ic.prototype.setMap,Ic.prototype.setOffset=Ic.prototype.Bh,Ic.prototype.setPosition=Ic.prototype.uf,Ic.prototype.setPositioning=Ic.prototype.Ch,e("ol.size.toSize",he,nm),nn.prototype.getTileCoord=nn.prototype.f,e("ol.View",Ao,nm),Ao.prototype.constrainCenter=Ao.prototype.xd,Ao.prototype.constrainResolution=Ao.prototype.constrainResolution,Ao.prototype.constrainRotation=Ao.prototype.constrainRotation,Ao.prototype.getCenter=Ao.prototype.Ca,Ao.prototype.calculateExtent=Ao.prototype.Pc,Ao.prototype.getProjection=Ao.prototype.dl,Ao.prototype.getResolution=Ao.prototype.ya,Ao.prototype.getRotation=Ao.prototype.Da,Ao.prototype.getZoom=Ao.prototype.Ej,Ao.prototype.fitExtent=Ao.prototype.Me,Ao.prototype.fitGeometry=Ao.prototype.Fi,Ao.prototype.centerOn=Ao.prototype.Ai,Ao.prototype.rotate=Ao.prototype.rotate,Ao.prototype.setCenter=Ao.prototype.Na,Ao.prototype.setResolution=Ao.prototype.tb,Ao.prototype.setRotation=Ao.prototype.be,Ao.prototype.setZoom=Ao.prototype.no,e("ol.xml.getAllTextContent",kh,nm),e("ol.xml.parse",qh,nm),e("ol.webgl.Context",Xu,nm),Xu.prototype.getGL=Xu.prototype.Xm,Xu.prototype.getHitDetectionFramebuffer=Xu.prototype.Te,Xu.prototype.useProgram=Xu.prototype.oe,e("ol.tilegrid.TileGrid",yn,nm),yn.prototype.getMaxZoom=yn.prototype.Fd,yn.prototype.getMinZoom=yn.prototype.Hd,yn.prototype.getOrigin=yn.prototype.Mb,yn.prototype.getResolution=yn.prototype.ma,yn.prototype.getResolutions=yn.prototype.ne,yn.prototype.getTileCoordForCoordAndResolution=yn.prototype.Wb,yn.prototype.getTileCoordForCoordAndZ=yn.prototype.cd,yn.prototype.getTileSize=yn.prototype.na,e("ol.tilegrid.WMTS",$v,nm),$v.prototype.getMatrixIds=$v.prototype.q,e("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet",Xv,nm),e("ol.tilegrid.XYZ",yv,nm),e("ol.tilegrid.Zoomify",Kv,nm),e("ol.style.AtlasManager",Zv,nm),e("ol.style.Circle",op,nm),op.prototype.getAnchor=op.prototype.mb,op.prototype.getFill=op.prototype.ym,op.prototype.getImage=op.prototype.Lb,op.prototype.getOrigin=op.prototype.rb,op.prototype.getRadius=op.prototype.zm,op.prototype.getSize=op.prototype.Xa,op.prototype.getStroke=op.prototype.Am,e("ol.style.Fill",ep,nm),ep.prototype.getColor=ep.prototype.c,ep.prototype.setColor=ep.prototype.d,e("ol.style.Icon",us,nm),us.prototype.getAnchor=us.prototype.mb,us.prototype.getImage=us.prototype.Lb,us.prototype.getOrigin=us.prototype.rb,us.prototype.getSrc=us.prototype.Bm,us.prototype.getSize=us.prototype.Xa,e("ol.style.Image",hs,nm),hs.prototype.getOpacity=hs.prototype.ie,hs.prototype.getRotateWithView=hs.prototype.Jd,hs.prototype.getRotation=hs.prototype.je,hs.prototype.getScale=hs.prototype.ke,hs.prototype.getSnapToPixel=hs.prototype.Kd,hs.prototype.setRotation=hs.prototype.le,hs.prototype.setScale=hs.prototype.me,e("ol.style.RegularShape",tm,nm),tm.prototype.getAnchor=tm.prototype.mb,tm.prototype.getAngle=tm.prototype.Cm,tm.prototype.getFill=tm.prototype.Dm,tm.prototype.getImage=tm.prototype.Lb,tm.prototype.getOrigin=tm.prototype.rb,tm.prototype.getPoints=tm.prototype.Em,tm.prototype.getRadius=tm.prototype.Fm,tm.prototype.getRadius2=tm.prototype.tj,tm.prototype.getSize=tm.prototype.Xa,tm.prototype.getStroke=tm.prototype.Gm,e("ol.style.Stroke",tp,nm),tp.prototype.getColor=tp.prototype.Hm,tp.prototype.getLineCap=tp.prototype.ej,tp.prototype.getLineDash=tp.prototype.Im,tp.prototype.getLineJoin=tp.prototype.fj,tp.prototype.getMiterLimit=tp.prototype.lj,tp.prototype.getWidth=tp.prototype.Jm,tp.prototype.setColor=tp.prototype.Km,tp.prototype.setLineCap=tp.prototype.Zn,tp.prototype.setLineDash=tp.prototype.Lm,tp.prototype.setLineJoin=tp.prototype.$n,tp.prototype.setMiterLimit=tp.prototype.ao,tp.prototype.setWidth=tp.prototype.ko,e("ol.style.Style",ip,nm),ip.prototype.getGeometry=ip.prototype.Q,ip.prototype.getGeometryFunction=ip.prototype.Zi,ip.prototype.getFill=ip.prototype.Mm,ip.prototype.getImage=ip.prototype.Nm,ip.prototype.getStroke=ip.prototype.Om,ip.prototype.getText=ip.prototype.Pm,ip.prototype.getZIndex=ip.prototype.Dj,ip.prototype.setGeometry=ip.prototype.Vg,ip.prototype.setZIndex=ip.prototype.mo,e("ol.style.Text",wy,nm),wy.prototype.getFont=wy.prototype.Wi,wy.prototype.getOffsetX=wy.prototype.mj,wy.prototype.getOffsetY=wy.prototype.nj,wy.prototype.getFill=wy.prototype.Qm,wy.prototype.getRotation=wy.prototype.Rm,wy.prototype.getScale=wy.prototype.Sm,wy.prototype.getStroke=wy.prototype.Tm,wy.prototype.getText=wy.prototype.Um,wy.prototype.getTextAlign=wy.prototype.xj,wy.prototype.getTextBaseline=wy.prototype.yj,wy.prototype.setFont=wy.prototype.Wn,wy.prototype.setFill=wy.prototype.Vn,wy.prototype.setRotation=wy.prototype.Vm,wy.prototype.setScale=wy.prototype.Wm,wy.prototype.setStroke=wy.prototype.eo,wy.prototype.setText=wy.prototype.fo,wy.prototype.setTextAlign=wy.prototype.ho,wy.prototype.setTextBaseline=wy.prototype.io,e("ol.Sphere",lo,nm),lo.prototype.geodesicArea=lo.prototype.a,lo.prototype.haversineDistance=lo.prototype.b,e("ol.source.BingMaps",dv,nm),e("ol.source.BingMaps.TOS_ATTRIBUTION",vM,nm),e("ol.source.Cluster",gv,nm),gv.prototype.getSource=gv.prototype.X,e("ol.source.ImageCanvas",Ul,nm),e("ol.source.ImageMapGuide",bv,nm),bv.prototype.getParams=bv.prototype.Tl,bv.prototype.getImageLoadFunction=bv.prototype.Sl,bv.prototype.updateParams=bv.prototype.Wl,bv.prototype.setImageLoadFunction=bv.prototype.Vl,e("ol.source.Image",Dl,nm),Bl.prototype.image=Bl.prototype.image,e("ol.source.ImageStatic",wv,nm),e("ol.source.ImageVector",bu,nm),bu.prototype.getSource=bu.prototype.Xl,bu.prototype.getStyle=bu.prototype.Yl,bu.prototype.getStyleFunction=bu.prototype.Zl,bu.prototype.setStyle=bu.prototype.Mg,e("ol.source.ImageWMS",xv,nm),xv.prototype.getGetFeatureInfoUrl=xv.prototype.bm,xv.prototype.getParams=xv.prototype.dm,xv.prototype.getImageLoadFunction=xv.prototype.cm,xv.prototype.getUrl=xv.prototype.em,xv.prototype.setImageLoadFunction=xv.prototype.fm,xv.prototype.setUrl=xv.prototype.gm,xv.prototype.updateParams=xv.prototype.hm,e("ol.source.MapQuest",Ev,nm),Ev.prototype.getLayer=Ev.prototype.i,e("ol.source.OSM",Cv,nm),e("ol.source.OSM.ATTRIBUTION",bM,nm),e("ol.source.Source",sn,nm),sn.prototype.getAttributions=sn.prototype.ea,sn.prototype.getLogo=sn.prototype.ca,sn.prototype.getProjection=sn.prototype.fa,sn.prototype.getState=sn.prototype.ga,e("ol.source.Stamen",Pv,nm),e("ol.source.TileArcGISRest",kv,nm),kv.prototype.getParams=kv.prototype.im,kv.prototype.getUrls=kv.prototype.jm,kv.prototype.setUrl=kv.prototype.km,kv.prototype.setUrls=kv.prototype.Ng,kv.prototype.updateParams=kv.prototype.mm,e("ol.source.TileDebug",Rv,nm),e("ol.source.TileImage",cv,nm),cv.prototype.getTileLoadFunction=cv.prototype.Ua,cv.prototype.getTileUrlFunction=cv.prototype.Va,cv.prototype.setTileLoadFunction=cv.prototype.$a,cv.prototype.setTileUrlFunction=cv.prototype.pa,e("ol.source.TileJSON",Lv,nm),e("ol.source.Tile",En,nm),En.prototype.getTileGrid=En.prototype.ua,An.prototype.tile=An.prototype.tile,e("ol.source.TileUTFGrid",Nv,nm),Nv.prototype.getTemplate=Nv.prototype.wj,Nv.prototype.forDataAtCoordinateAndResolution=Nv.prototype.Gi,e("ol.source.TileVector",Ov,nm),Ov.prototype.getFeatures=Ov.prototype.Dc,Ov.prototype.getFeaturesAtCoordinateAndResolution=Ov.prototype.Vi,e("ol.source.TileWMS",Uv,nm),Uv.prototype.getGetFeatureInfoUrl=Uv.prototype.pm,Uv.prototype.getParams=Uv.prototype.qm,Uv.prototype.getUrls=Uv.prototype.rm,Uv.prototype.setUrl=Uv.prototype.sm,Uv.prototype.setUrls=Uv.prototype.Og,Uv.prototype.updateParams=Uv.prototype.um,e("ol.source.Vector",cu,nm),cu.prototype.addFeature=cu.prototype.jf,cu.prototype.addFeatures=cu.prototype.Oc,cu.prototype.clear=cu.prototype.clear,cu.prototype.forEachFeature=cu.prototype.Rf,cu.prototype.forEachFeatureInExtent=cu.prototype.$c,cu.prototype.forEachFeatureIntersectingExtent=cu.prototype.Oe,cu.prototype.getFeatures=cu.prototype.Dc,cu.prototype.getFeaturesAtCoordinate=cu.prototype.Re,cu.prototype.getFeaturesInExtent=cu.prototype.Se,cu.prototype.getClosestFeatureToCoordinate=cu.prototype.Tf,cu.prototype.getExtent=cu.prototype.G,cu.prototype.getFeatureById=cu.prototype.Qe,cu.prototype.removeFeature=cu.prototype.Qg,mu.prototype.feature=mu.prototype.feature,e("ol.source.WMTS",Wv,nm),Wv.prototype.getDimensions=Wv.prototype.Ti,Wv.prototype.getFormat=Wv.prototype.Xi,Wv.prototype.getLayer=Wv.prototype.vm,Wv.prototype.getMatrixSet=Wv.prototype.jj,Wv.prototype.getRequestEncoding=Wv.prototype.uj,Wv.prototype.getStyle=Wv.prototype.wm,Wv.prototype.getUrls=Wv.prototype.xm,Wv.prototype.getVersion=Wv.prototype.Aj,Wv.prototype.updateDimensions=Wv.prototype.uo,e("ol.source.WMTS.optionsFromCapabilities",function(e,o){var i,n,r,s=R(e.Contents.Layer,function(t){return t.Identifier==o.layer});i=1<s.TileMatrixSetLink.length?L(s.TileMatrixSetLink,function(t){return t.TileMatrixSet==o.matrixSet}):t(o.projection)?L(s.TileMatrixSetLink,function(t){return t.TileMatrixSet.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")==o.projection}):0,0>i&&(i=0),n=s.TileMatrixSetLink[i].TileMatrixSet,i=s.WGS84BoundingBox,t(i)&&(r=xo("EPSG:4326").G(),r=i[0]==r[0]&&i[2]==r[2]);var a=s.Format[0];t(o.format)&&(a=o.format),i=L(s.Style,function(e){return t(o.style)?e.Title==o.style:e.isDefault}),0>i&&(i=0),i=s.Style[i].Identifier;var p={};t(s.Dimension)&&E(s.Dimension,function(e){var o=e.Identifier,i=e["default"];t(i)||(i=e.values[0]),p[o]=i});var l=R(e.Contents.TileMatrixSet,function(t){return t.Identifier==n}),h=Xv(l),l=xo(t(o.projection)?o.projection:l.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")),u=[],c=o.requestEncoding,c=t(c)?c:"";if(e.OperationsMetadata.hasOwnProperty("GetTile")&&0!=c.lastIndexOf("REST",0))for(var s=e.OperationsMetadata.GetTile.DCP.HTTP.Get,f=0,y=s.length;f<y;++f){var d=R(s[f].Constraint,function(t){return"GetEncoding"==t.name}).AllowedValues.Value;0<d.length&&N(d,"KVP")&&(c="KVP",u.push(s[f].href))}else c="REST",E(s.ResourceURL,function(t){"tile"==t.resourceType&&(a=t.format,u.push(t.template))});return{urls:u,layer:o.layer,matrixSet:n,format:a,projection:l,requestEncoding:c,tileGrid:h,style:i,dimensions:p,wrapX:r}},nm),e("ol.source.XYZ",Mv,nm),Mv.prototype.setTileUrlFunction=Mv.prototype.pa,Mv.prototype.setUrl=Mv.prototype.e,e("ol.source.Zoomify",Vv,nm),qa.prototype.vectorContext=qa.prototype.vectorContext,qa.prototype.frameState=qa.prototype.frameState,qa.prototype.context=qa.prototype.context,qa.prototype.glContext=qa.prototype.glContext,e("ol.render.VectorContext",Ha,nm),hc.prototype.drawAsync=hc.prototype.tc,hc.prototype.drawCircleGeometry=hc.prototype.uc,hc.prototype.drawFeature=hc.prototype.Le,hc.prototype.drawGeometryCollectionGeometry=hc.prototype.zd,hc.prototype.drawPointGeometry=hc.prototype.kb,hc.prototype.drawLineStringGeometry=hc.prototype.zb,hc.prototype.drawMultiLineStringGeometry=hc.prototype.vc,hc.prototype.drawMultiPointGeometry=hc.prototype.jb,hc.prototype.drawMultiPolygonGeometry=hc.prototype.wc,hc.prototype.drawPolygonGeometry=hc.prototype.Rb,hc.prototype.drawText=hc.prototype.lb,hc.prototype.setFillStrokeStyle=hc.prototype.Aa,hc.prototype.setImageStyle=hc.prototype.Za,hc.prototype.setTextStyle=hc.prototype.Ba,jp.prototype.drawAsync=jp.prototype.tc,jp.prototype.drawCircleGeometry=jp.prototype.uc,jp.prototype.drawFeature=jp.prototype.Le,jp.prototype.drawPointGeometry=jp.prototype.kb,jp.prototype.drawMultiPointGeometry=jp.prototype.jb,jp.prototype.drawLineStringGeometry=jp.prototype.zb,jp.prototype.drawMultiLineStringGeometry=jp.prototype.vc,jp.prototype.drawPolygonGeometry=jp.prototype.Rb,jp.prototype.drawMultiPolygonGeometry=jp.prototype.wc,jp.prototype.setFillStrokeStyle=jp.prototype.Aa,jp.prototype.setImageStyle=jp.prototype.Za,jp.prototype.setTextStyle=jp.prototype.Ba,e("ol.proj.common.add",Ap,nm),e("ol.proj.METERS_PER_UNIT",Jm,nm),e("ol.proj.Projection",ho,nm),ho.prototype.getCode=ho.prototype.Ri,ho.prototype.getExtent=ho.prototype.G,ho.prototype.getUnits=ho.prototype.Ll,ho.prototype.getMetersPerUnit=ho.prototype.Gd,ho.prototype.getWorldExtent=ho.prototype.Cj,ho.prototype.isGlobal=ho.prototype.Ml,ho.prototype.setGlobal=ho.prototype.Yn,ho.prototype.setExtent=ho.prototype.Nl,ho.prototype.setWorldExtent=ho.prototype.lo,ho.prototype.setGetPointResolution=ho.prototype.Xn,ho.prototype.getPointResolution=ho.prototype.getPointResolution,e("ol.proj.addEquivalentProjections",co,nm),e("ol.proj.addProjection",yo,nm),e("ol.proj.addCoordinateTransforms",bo,nm),e("ol.proj.fromLonLat",function(e,o){return Po(e,"EPSG:4326",t(o)?o:"EPSG:3857")},nm),e("ol.proj.toLonLat",function(e,o){return Po(e,t(o)?o:"EPSG:3857","EPSG:4326")},nm),e("ol.proj.get",xo,nm),e("ol.proj.getTransform",To,nm),e("ol.proj.transform",Po,nm),e("ol.proj.transformExtent",ko,nm),e("ol.layer.Heatmap",Zg,nm),Zg.prototype.getBlur=Zg.prototype.Sf,Zg.prototype.getGradient=Zg.prototype.Wf,Zg.prototype.getRadius=Zg.prototype.Hg,Zg.prototype.setBlur=Zg.prototype.th,Zg.prototype.setGradient=Zg.prototype.yh,Zg.prototype.setRadius=Zg.prototype.Ig,e("ol.layer.Image",Rp,nm),Rp.prototype.getSource=Rp.prototype.da,e("ol.layer.Layer",Yr,nm),Yr.prototype.getSource=Yr.prototype.da,Yr.prototype.setSource=Yr.prototype.Jc,e("ol.layer.Base",Kr,nm),Kr.prototype.getBrightness=Kr.prototype.Bb,Kr.prototype.getContrast=Kr.prototype.Cb,Kr.prototype.getHue=Kr.prototype.Db,Kr.prototype.getExtent=Kr.prototype.G,Kr.prototype.getMaxResolution=Kr.prototype.Eb,Kr.prototype.getMinResolution=Kr.prototype.Fb,Kr.prototype.getOpacity=Kr.prototype.Kb,Kr.prototype.getSaturation=Kr.prototype.Gb,Kr.prototype.getVisible=Kr.prototype.eb,Kr.prototype.setBrightness=Kr.prototype.gc,Kr.prototype.setContrast=Kr.prototype.hc,Kr.prototype.setHue=Kr.prototype.ic,Kr.prototype.setExtent=Kr.prototype.bc,Kr.prototype.setMaxResolution=Kr.prototype.jc,Kr.prototype.setMinResolution=Kr.prototype.kc,Kr.prototype.setOpacity=Kr.prototype.cc,Kr.prototype.setSaturation=Kr.prototype.lc,Kr.prototype.setVisible=Kr.prototype.mc,e("ol.layer.Group",Mp,nm),Mp.prototype.getLayers=Mp.prototype.Bc,Mp.prototype.setLayers=Mp.prototype.Ah,e("ol.layer.Tile",Lp,nm),Lp.prototype.getPreload=Lp.prototype.a,Lp.prototype.getSource=Lp.prototype.da,Lp.prototype.setPreload=Lp.prototype.d,Lp.prototype.getUseInterimTilesOnError=Lp.prototype.c,Lp.prototype.setUseInterimTilesOnError=Lp.prototype.e,e("ol.layer.Vector",Np,nm),Np.prototype.getSource=Np.prototype.da,Np.prototype.getStyle=Np.prototype.H,Np.prototype.getStyleFunction=Np.prototype.J,Np.prototype.setStyle=Np.prototype.e,e("ol.interaction.DoubleClickZoom",js,nm),e("ol.interaction.DoubleClickZoom.handleEvent",Is,nm),e("ol.interaction.DragAndDrop",fg,nm),e("ol.interaction.DragAndDrop.handleEvent",lb,nm),yg.prototype.features=yg.prototype.features,yg.prototype.file=yg.prototype.file,yg.prototype.projection=yg.prototype.projection,za.prototype.coordinate=za.prototype.coordinate,e("ol.interaction.DragBox",Ka,nm),Ka.prototype.getGeometry=Ka.prototype.Q,e("ol.interaction.DragPan",Ws,nm),e("ol.interaction.DragRotateAndZoom",gg,nm),e("ol.interaction.DragRotate",Ys,nm),e("ol.interaction.DragZoom",pp,nm),wg.prototype.feature=wg.prototype.feature,e("ol.interaction.Draw",xg,nm),e("ol.interaction.Draw.handleEvent",Tg,nm),xg.prototype.finishDrawing=xg.prototype.X,e("ol.interaction.Interaction",As,nm),As.prototype.getActive=As.prototype.c,As.prototype.setActive=As.prototype.d,e("ol.interaction.defaults",Tp,nm),e("ol.interaction.KeyboardPan",lp,nm),e("ol.interaction.KeyboardPan.handleEvent",hp,nm),e("ol.interaction.KeyboardZoom",up,nm),e("ol.interaction.KeyboardZoom.handleEvent",cp,nm),e("ol.interaction.Modify",Ng,nm),e("ol.interaction.Modify.handleEvent",Bg,nm),e("ol.interaction.MouseWheelZoom",fp,nm),e("ol.interaction.MouseWheelZoom.handleEvent",yp,nm),e("ol.interaction.PinchRotate",dp,nm),e("ol.interaction.PinchZoom",bp,nm),e("ol.interaction.Pointer",qs,nm),e("ol.interaction.Pointer.handleEvent",Xs,nm),qg.prototype.selected=qg.prototype.selected,qg.prototype.deselected=qg.prototype.deselected,e("ol.interaction.Select",$g,nm),$g.prototype.getFeatures=$g.prototype.p,e("ol.interaction.Select.handleEvent",Xg,nm),$g.prototype.setMap=$g.prototype.setMap,e("ol.interaction.Snap",zg,nm),zg.prototype.addFeature=zg.prototype.ed,zg.prototype.removeFeature=zg.prototype.fd,e("ol.geom.Circle",ll,nm),ll.prototype.clone=ll.prototype.clone,ll.prototype.getCenter=ll.prototype.dd,ll.prototype.getRadius=ll.prototype.zg,ll.prototype.getType=ll.prototype.M,ll.prototype.setCenter=ll.prototype.pl,ll.prototype.setCenterAndRadius=ll.prototype.uh,ll.prototype.setRadius=ll.prototype.Ag,ll.prototype.transform=ll.prototype.transform,e("ol.geom.Geometry",Qs,nm),Qs.prototype.getClosestPoint=Qs.prototype.e,Qs.prototype.getExtent=Qs.prototype.G,e("ol.geom.GeometryCollection",ul,nm),ul.prototype.clone=ul.prototype.clone,ul.prototype.getGeometries=ul.prototype.Vf,ul.prototype.getType=ul.prototype.M,ul.prototype.intersectsExtent=ul.prototype.ra,ul.prototype.setGeometries=ul.prototype.xh,ul.prototype.applyTransform=ul.prototype.qa,ul.prototype.translate=ul.prototype.Oa,e("ol.geom.LinearRing",xa,nm),xa.prototype.clone=xa.prototype.clone,xa.prototype.getArea=xa.prototype.rl,xa.prototype.getCoordinates=xa.prototype.K,xa.prototype.getType=xa.prototype.M,xa.prototype.setCoordinates=xa.prototype.W,e("ol.geom.LineString",ml,nm),ml.prototype.appendCoordinate=ml.prototype.ui,ml.prototype.clone=ml.prototype.clone,ml.prototype.forEachSegment=ml.prototype.Ji,ml.prototype.getCoordinateAtM=ml.prototype.ql,ml.prototype.getCoordinates=ml.prototype.K,ml.prototype.getLength=ml.prototype.Bg,ml.prototype.getType=ml.prototype.M,ml.prototype.intersectsExtent=ml.prototype.ra,ml.prototype.setCoordinates=ml.prototype.W,e("ol.geom.MultiLineString",xl,nm),xl.prototype.appendLineString=xl.prototype.vi,xl.prototype.clone=xl.prototype.clone,xl.prototype.getCoordinateAtM=xl.prototype.sl,xl.prototype.getCoordinates=xl.prototype.K,xl.prototype.getLineString=xl.prototype.gj,xl.prototype.getLineStrings=xl.prototype.ad,xl.prototype.getType=xl.prototype.M,xl.prototype.intersectsExtent=xl.prototype.ra,xl.prototype.setCoordinates=xl.prototype.W,e("ol.geom.MultiPoint",Cl,nm),Cl.prototype.appendPoint=Cl.prototype.xi,Cl.prototype.clone=Cl.prototype.clone,Cl.prototype.getCoordinates=Cl.prototype.K,Cl.prototype.getPoint=Cl.prototype.qj,Cl.prototype.getPoints=Cl.prototype.ce,Cl.prototype.getType=Cl.prototype.M,Cl.prototype.intersectsExtent=Cl.prototype.ra,Cl.prototype.setCoordinates=Cl.prototype.W,e("ol.geom.MultiPolygon",El,nm),El.prototype.appendPolygon=El.prototype.yi,El.prototype.clone=El.prototype.clone,El.prototype.getArea=El.prototype.tl,El.prototype.getCoordinates=El.prototype.K,El.prototype.getInteriorPoints=El.prototype.dj,El.prototype.getPolygon=El.prototype.sj,El.prototype.getPolygons=El.prototype.Id,El.prototype.getType=El.prototype.M,El.prototype.intersectsExtent=El.prototype.ra,El.prototype.setCoordinates=El.prototype.W,e("ol.geom.Point",Ta,nm),Ta.prototype.clone=Ta.prototype.clone,Ta.prototype.getCoordinates=Ta.prototype.K,Ta.prototype.getType=Ta.prototype.M,Ta.prototype.intersectsExtent=Ta.prototype.ra,Ta.prototype.setCoordinates=Ta.prototype.W,e("ol.geom.Polygon",Fa,nm),Fa.prototype.appendLinearRing=Fa.prototype.wi,Fa.prototype.clone=Fa.prototype.clone,Fa.prototype.getArea=Fa.prototype.ul,Fa.prototype.getCoordinates=Fa.prototype.K,Fa.prototype.getInteriorPoint=Fa.prototype.cj,Fa.prototype.getLinearRingCount=Fa.prototype.ij,Fa.prototype.getLinearRing=Fa.prototype.hj,Fa.prototype.getLinearRings=Fa.prototype.Ed,Fa.prototype.getType=Fa.prototype.M,Fa.prototype.intersectsExtent=Fa.prototype.ra,Fa.prototype.setCoordinates=Fa.prototype.W,e("ol.geom.Polygon.circular",Ga,nm),e("ol.geom.Polygon.fromExtent",function(t){var e=t[0],o=t[1],i=t[2];return t=t[3],e=[e,o,e,t,i,t,i,o,e,o],o=new Fa(null),Ua(o,"XY",e,[e.length]),o},nm),e("ol.geom.SimpleGeometry",ea,nm),ea.prototype.getFirstCoordinate=ea.prototype.ob,ea.prototype.getLastCoordinate=ea.prototype.pb,ea.prototype.getLayout=ea.prototype.qb,ea.prototype.applyTransform=ea.prototype.qa,ea.prototype.translate=ea.prototype.Oa,e("ol.format.EsriJSON",gf,nm),gf.prototype.readFeature=gf.prototype.sb,gf.prototype.readFeatures=gf.prototype.ja,gf.prototype.readGeometry=gf.prototype.Gc,gf.prototype.readProjection=gf.prototype.za,gf.prototype.writeGeometry=gf.prototype.Mc,gf.prototype.writeGeometryObject=gf.prototype.Be,gf.prototype.writeFeature=gf.prototype.qd,gf.prototype.writeFeatureObject=gf.prototype.Lc,gf.prototype.writeFeatures=gf.prototype.ub,gf.prototype.writeFeaturesObject=gf.prototype.ze,e("ol.format.Feature",hf,nm),
+e("ol.format.GeoJSON",xf,nm),xf.prototype.readFeature=xf.prototype.sb,xf.prototype.readFeatures=xf.prototype.ja,xf.prototype.readGeometry=xf.prototype.Gc,xf.prototype.readProjection=xf.prototype.za,xf.prototype.writeFeature=xf.prototype.qd,xf.prototype.writeFeatureObject=xf.prototype.Lc,xf.prototype.writeFeatures=xf.prototype.ub,xf.prototype.writeFeaturesObject=xf.prototype.ze,xf.prototype.writeGeometry=xf.prototype.Mc,xf.prototype.writeGeometryObject=xf.prototype.Be,e("ol.format.GPX",$f,nm),$f.prototype.readFeature=$f.prototype.sb,$f.prototype.readFeatures=$f.prototype.ja,$f.prototype.readProjection=$f.prototype.za,$f.prototype.writeFeatures=$f.prototype.ub,$f.prototype.writeFeaturesNode=$f.prototype.a,e("ol.format.IGC",ny,nm),ny.prototype.readFeature=ny.prototype.sb,ny.prototype.readFeatures=ny.prototype.ja,ny.prototype.readProjection=ny.prototype.za,e("ol.format.KML",xy,nm),xy.prototype.readFeature=xy.prototype.sb,xy.prototype.readFeatures=xy.prototype.ja,xy.prototype.readName=xy.prototype.Dn,xy.prototype.readNetworkLinks=xy.prototype.En,xy.prototype.readProjection=xy.prototype.za,xy.prototype.writeFeatures=xy.prototype.ub,xy.prototype.writeFeaturesNode=xy.prototype.a,e("ol.format.OSMXML",Yy,nm),Yy.prototype.readFeatures=Yy.prototype.ja,Yy.prototype.readProjection=Yy.prototype.za,e("ol.format.Polyline",ed,nm),e("ol.format.Polyline.encodeDeltas",od,nm),e("ol.format.Polyline.decodeDeltas",id,nm),e("ol.format.Polyline.encodeFloats",nd,nm),e("ol.format.Polyline.decodeFloats",rd,nm),ed.prototype.readFeature=ed.prototype.sb,ed.prototype.readFeatures=ed.prototype.ja,ed.prototype.readGeometry=ed.prototype.Gc,ed.prototype.readProjection=ed.prototype.za,ed.prototype.writeGeometry=ed.prototype.Mc,e("ol.format.TopoJSON",sd,nm),sd.prototype.readFeatures=sd.prototype.ja,sd.prototype.readProjection=sd.prototype.za,e("ol.format.WFS",ud,nm),ud.prototype.readFeatures=ud.prototype.ja,ud.prototype.readTransactionResponse=ud.prototype.g,ud.prototype.readFeatureCollectionMetadata=ud.prototype.f,ud.prototype.writeGetFeature=ud.prototype.i,ud.prototype.writeTransaction=ud.prototype.o,ud.prototype.readProjection=ud.prototype.za,e("ol.format.WKT",gd,nm),gd.prototype.readFeature=gd.prototype.sb,gd.prototype.readFeatures=gd.prototype.ja,gd.prototype.readGeometry=gd.prototype.Gc,gd.prototype.writeFeature=gd.prototype.qd,gd.prototype.writeFeatures=gd.prototype.ub,gd.prototype.writeGeometry=gd.prototype.Mc,e("ol.format.WMSCapabilities",Ld,nm),Ld.prototype.read=Ld.prototype.c,e("ol.format.WMSGetFeatureInfo",Fd,nm),Fd.prototype.readFeatures=Fd.prototype.ja,e("ol.format.WMTSCapabilities",Bd,nm),Bd.prototype.read=Bd.prototype.c,e("ol.format.GML2",qf,nm),e("ol.format.GML3",Gf,nm),Gf.prototype.writeGeometryNode=Gf.prototype.q,Gf.prototype.writeFeatures=Gf.prototype.ub,Gf.prototype.writeFeaturesNode=Gf.prototype.a,e("ol.format.GML",Gf,nm),Gf.prototype.writeFeatures=Gf.prototype.ub,Gf.prototype.writeFeaturesNode=Gf.prototype.a,Pf.prototype.readFeatures=Pf.prototype.ja,e("ol.events.condition.altKeyOnly",function(t){return t=t.b,t.a&&!t.g&&!t.d},nm),e("ol.events.condition.altShiftKeysOnly",Ds,nm),e("ol.events.condition.always",lb,nm),e("ol.events.condition.click",function(t){return t.type==Vb},nm),e("ol.events.condition.never",pb,nm),e("ol.events.condition.pointerMove",Fs,nm),e("ol.events.condition.singleClick",Os,nm),e("ol.events.condition.noModifierKeys",Bs,nm),e("ol.events.condition.platformModifierKeyOnly",function(t){return t=t.b,!t.a&&t.g&&!t.d},nm),e("ol.events.condition.shiftKeyOnly",Us,nm),e("ol.events.condition.targetNotEditable",Gs,nm),e("ol.events.condition.mouseOnly",Hs,nm),e("ol.control.Attribution",Rn,nm),e("ol.control.Attribution.render",Ln,nm),Rn.prototype.getCollapsible=Rn.prototype.fl,Rn.prototype.setCollapsible=Rn.prototype.il,Rn.prototype.setCollapsed=Rn.prototype.hl,Rn.prototype.getCollapsed=Rn.prototype.el,e("ol.control.Control",Ji,nm),Ji.prototype.getMap=Ji.prototype.e,Ji.prototype.setMap=Ji.prototype.setMap,Ji.prototype.setTarget=Ji.prototype.c,e("ol.control.defaults",Fn,nm),e("ol.control.FullScreen",Gn,nm),e("ol.control.MousePosition",Hn,nm),e("ol.control.MousePosition.render",qn,nm),Hn.prototype.getCoordinateFormat=Hn.prototype.Uf,Hn.prototype.getProjection=Hn.prototype.xg,Hn.prototype.setMap=Hn.prototype.setMap,Hn.prototype.setCoordinateFormat=Hn.prototype.vh,Hn.prototype.setProjection=Hn.prototype.yg,e("ol.control.OverviewMap",Oc,nm),Oc.prototype.setMap=Oc.prototype.setMap,e("ol.control.OverviewMap.render",Bc,nm),Oc.prototype.getCollapsible=Oc.prototype.ll,Oc.prototype.setCollapsible=Oc.prototype.ol,Oc.prototype.setCollapsed=Oc.prototype.nl,Oc.prototype.getCollapsed=Oc.prototype.kl,e("ol.control.Rotate",jn,nm),e("ol.control.Rotate.render",In,nm),e("ol.control.ScaleLine",qc,nm),qc.prototype.getUnits=qc.prototype.p,e("ol.control.ScaleLine.render",$c,nm),qc.prototype.setUnits=qc.prototype.J,e("ol.control.Zoom",Dn,nm),e("ol.control.ZoomSlider",tf,nm),e("ol.control.ZoomSlider.render",ef,nm),e("ol.control.ZoomToExtent",rf,nm),e("ol.color.asArray",ii,nm),e("ol.color.asString",ni,nm),re.prototype.changed=re.prototype.k,re.prototype.getRevision=re.prototype.v,re.prototype.on=re.prototype.r,re.prototype.once=re.prototype.A,re.prototype.un=re.prototype.u,re.prototype.unByKey=re.prototype.B,ei.prototype.get=ei.prototype.get,ei.prototype.getKeys=ei.prototype.C,ei.prototype.getProperties=ei.prototype.D,ei.prototype.set=ei.prototype.set,ei.prototype.setProperties=ei.prototype.t,ei.prototype.unset=ei.prototype.I,ei.prototype.changed=ei.prototype.k,ei.prototype.getRevision=ei.prototype.v,ei.prototype.on=ei.prototype.r,ei.prototype.once=ei.prototype.A,ei.prototype.un=ei.prototype.u,ei.prototype.unByKey=ei.prototype.B,sf.prototype.get=sf.prototype.get,sf.prototype.getKeys=sf.prototype.C,sf.prototype.getProperties=sf.prototype.D,sf.prototype.set=sf.prototype.set,sf.prototype.setProperties=sf.prototype.t,sf.prototype.unset=sf.prototype.I,sf.prototype.changed=sf.prototype.k,sf.prototype.getRevision=sf.prototype.v,sf.prototype.on=sf.prototype.r,sf.prototype.once=sf.prototype.A,sf.prototype.un=sf.prototype.u,sf.prototype.unByKey=sf.prototype.B,af.prototype.get=af.prototype.get,af.prototype.getKeys=af.prototype.C,af.prototype.getProperties=af.prototype.D,af.prototype.set=af.prototype.set,af.prototype.setProperties=af.prototype.t,af.prototype.unset=af.prototype.I,af.prototype.changed=af.prototype.k,af.prototype.getRevision=af.prototype.v,af.prototype.on=af.prototype.r,af.prototype.once=af.prototype.A,af.prototype.un=af.prototype.u,af.prototype.unByKey=af.prototype.B,Gd.prototype.get=Gd.prototype.get,Gd.prototype.getKeys=Gd.prototype.C,Gd.prototype.getProperties=Gd.prototype.D,Gd.prototype.set=Gd.prototype.set,Gd.prototype.setProperties=Gd.prototype.t,Gd.prototype.unset=Gd.prototype.I,Gd.prototype.changed=Gd.prototype.k,Gd.prototype.getRevision=Gd.prototype.v,Gd.prototype.on=Gd.prototype.r,Gd.prototype.once=Gd.prototype.A,Gd.prototype.un=Gd.prototype.u,Gd.prototype.unByKey=Gd.prototype.B,Vd.prototype.getTileCoord=Vd.prototype.f,Nc.prototype.get=Nc.prototype.get,Nc.prototype.getKeys=Nc.prototype.C,Nc.prototype.getProperties=Nc.prototype.D,Nc.prototype.set=Nc.prototype.set,Nc.prototype.setProperties=Nc.prototype.t,Nc.prototype.unset=Nc.prototype.I,Nc.prototype.changed=Nc.prototype.k,Nc.prototype.getRevision=Nc.prototype.v,Nc.prototype.on=Nc.prototype.r,Nc.prototype.once=Nc.prototype.A,Nc.prototype.un=Nc.prototype.u,Nc.prototype.unByKey=Nc.prototype.B,qr.prototype.map=qr.prototype.map,qr.prototype.frameState=qr.prototype.frameState,$r.prototype.originalEvent=$r.prototype.originalEvent,$r.prototype.pixel=$r.prototype.pixel,$r.prototype.coordinate=$r.prototype.coordinate,$r.prototype.dragging=$r.prototype.dragging,$r.prototype.preventDefault=$r.prototype.preventDefault,$r.prototype.stopPropagation=$r.prototype.fb,$r.prototype.map=$r.prototype.map,$r.prototype.frameState=$r.prototype.frameState,Ic.prototype.get=Ic.prototype.get,Ic.prototype.getKeys=Ic.prototype.C,Ic.prototype.getProperties=Ic.prototype.D,Ic.prototype.set=Ic.prototype.set,Ic.prototype.setProperties=Ic.prototype.t,Ic.prototype.unset=Ic.prototype.I,Ic.prototype.changed=Ic.prototype.k,Ic.prototype.getRevision=Ic.prototype.v,Ic.prototype.on=Ic.prototype.r,Ic.prototype.once=Ic.prototype.A,Ic.prototype.un=Ic.prototype.u,Ic.prototype.unByKey=Ic.prototype.B,Ao.prototype.get=Ao.prototype.get,Ao.prototype.getKeys=Ao.prototype.C,Ao.prototype.getProperties=Ao.prototype.D,Ao.prototype.set=Ao.prototype.set,Ao.prototype.setProperties=Ao.prototype.t,Ao.prototype.unset=Ao.prototype.I,Ao.prototype.changed=Ao.prototype.k,Ao.prototype.getRevision=Ao.prototype.v,Ao.prototype.on=Ao.prototype.r,Ao.prototype.once=Ao.prototype.A,Ao.prototype.un=Ao.prototype.u,Ao.prototype.unByKey=Ao.prototype.B,$v.prototype.getMaxZoom=$v.prototype.Fd,$v.prototype.getMinZoom=$v.prototype.Hd,$v.prototype.getOrigin=$v.prototype.Mb,$v.prototype.getResolution=$v.prototype.ma,$v.prototype.getResolutions=$v.prototype.ne,$v.prototype.getTileCoordForCoordAndResolution=$v.prototype.Wb,$v.prototype.getTileCoordForCoordAndZ=$v.prototype.cd,$v.prototype.getTileSize=$v.prototype.na,yv.prototype.getMaxZoom=yv.prototype.Fd,yv.prototype.getMinZoom=yv.prototype.Hd,yv.prototype.getOrigin=yv.prototype.Mb,yv.prototype.getResolution=yv.prototype.ma,yv.prototype.getResolutions=yv.prototype.ne,yv.prototype.getTileCoordForCoordAndResolution=yv.prototype.Wb,yv.prototype.getTileCoordForCoordAndZ=yv.prototype.cd,yv.prototype.getTileSize=yv.prototype.na,Kv.prototype.getMaxZoom=Kv.prototype.Fd,Kv.prototype.getMinZoom=Kv.prototype.Hd,Kv.prototype.getOrigin=Kv.prototype.Mb,Kv.prototype.getResolution=Kv.prototype.ma,Kv.prototype.getResolutions=Kv.prototype.ne,Kv.prototype.getTileCoordForCoordAndResolution=Kv.prototype.Wb,Kv.prototype.getTileCoordForCoordAndZ=Kv.prototype.cd,Kv.prototype.getTileSize=Kv.prototype.na,op.prototype.getOpacity=op.prototype.ie,op.prototype.getRotateWithView=op.prototype.Jd,op.prototype.getRotation=op.prototype.je,op.prototype.getScale=op.prototype.ke,op.prototype.getSnapToPixel=op.prototype.Kd,op.prototype.setRotation=op.prototype.le,op.prototype.setScale=op.prototype.me,us.prototype.getOpacity=us.prototype.ie,us.prototype.getRotateWithView=us.prototype.Jd,us.prototype.getRotation=us.prototype.je,us.prototype.getScale=us.prototype.ke,us.prototype.getSnapToPixel=us.prototype.Kd,us.prototype.setRotation=us.prototype.le,us.prototype.setScale=us.prototype.me,tm.prototype.getOpacity=tm.prototype.ie,tm.prototype.getRotateWithView=tm.prototype.Jd,tm.prototype.getRotation=tm.prototype.je,tm.prototype.getScale=tm.prototype.ke,tm.prototype.getSnapToPixel=tm.prototype.Kd,tm.prototype.setRotation=tm.prototype.le,tm.prototype.setScale=tm.prototype.me,sn.prototype.get=sn.prototype.get,sn.prototype.getKeys=sn.prototype.C,sn.prototype.getProperties=sn.prototype.D,sn.prototype.set=sn.prototype.set,sn.prototype.setProperties=sn.prototype.t,sn.prototype.unset=sn.prototype.I,sn.prototype.changed=sn.prototype.k,sn.prototype.getRevision=sn.prototype.v,sn.prototype.on=sn.prototype.r,sn.prototype.once=sn.prototype.A,sn.prototype.un=sn.prototype.u,sn.prototype.unByKey=sn.prototype.B,En.prototype.getAttributions=En.prototype.ea,En.prototype.getLogo=En.prototype.ca,En.prototype.getProjection=En.prototype.fa,En.prototype.getState=En.prototype.ga,En.prototype.get=En.prototype.get,En.prototype.getKeys=En.prototype.C,En.prototype.getProperties=En.prototype.D,En.prototype.set=En.prototype.set,En.prototype.setProperties=En.prototype.t,En.prototype.unset=En.prototype.I,En.prototype.changed=En.prototype.k,En.prototype.getRevision=En.prototype.v,En.prototype.on=En.prototype.r,En.prototype.once=En.prototype.A,En.prototype.un=En.prototype.u,En.prototype.unByKey=En.prototype.B,cv.prototype.getTileGrid=cv.prototype.ua,cv.prototype.getAttributions=cv.prototype.ea,cv.prototype.getLogo=cv.prototype.ca,cv.prototype.getProjection=cv.prototype.fa,cv.prototype.getState=cv.prototype.ga,cv.prototype.get=cv.prototype.get,cv.prototype.getKeys=cv.prototype.C,cv.prototype.getProperties=cv.prototype.D,cv.prototype.set=cv.prototype.set,cv.prototype.setProperties=cv.prototype.t,cv.prototype.unset=cv.prototype.I,cv.prototype.changed=cv.prototype.k,cv.prototype.getRevision=cv.prototype.v,cv.prototype.on=cv.prototype.r,cv.prototype.once=cv.prototype.A,cv.prototype.un=cv.prototype.u,cv.prototype.unByKey=cv.prototype.B,dv.prototype.getTileLoadFunction=dv.prototype.Ua,dv.prototype.getTileUrlFunction=dv.prototype.Va,dv.prototype.setTileLoadFunction=dv.prototype.$a,dv.prototype.setTileUrlFunction=dv.prototype.pa,dv.prototype.getTileGrid=dv.prototype.ua,dv.prototype.getAttributions=dv.prototype.ea,dv.prototype.getLogo=dv.prototype.ca,dv.prototype.getProjection=dv.prototype.fa,dv.prototype.getState=dv.prototype.ga,dv.prototype.get=dv.prototype.get,dv.prototype.getKeys=dv.prototype.C,dv.prototype.getProperties=dv.prototype.D,dv.prototype.set=dv.prototype.set,dv.prototype.setProperties=dv.prototype.t,dv.prototype.unset=dv.prototype.I,dv.prototype.changed=dv.prototype.k,dv.prototype.getRevision=dv.prototype.v,dv.prototype.on=dv.prototype.r,dv.prototype.once=dv.prototype.A,dv.prototype.un=dv.prototype.u,dv.prototype.unByKey=dv.prototype.B,cu.prototype.getAttributions=cu.prototype.ea,cu.prototype.getLogo=cu.prototype.ca,cu.prototype.getProjection=cu.prototype.fa,cu.prototype.getState=cu.prototype.ga,cu.prototype.get=cu.prototype.get,cu.prototype.getKeys=cu.prototype.C,cu.prototype.getProperties=cu.prototype.D,cu.prototype.set=cu.prototype.set,cu.prototype.setProperties=cu.prototype.t,cu.prototype.unset=cu.prototype.I,cu.prototype.changed=cu.prototype.k,cu.prototype.getRevision=cu.prototype.v,cu.prototype.on=cu.prototype.r,cu.prototype.once=cu.prototype.A,cu.prototype.un=cu.prototype.u,cu.prototype.unByKey=cu.prototype.B,gv.prototype.addFeature=gv.prototype.jf,gv.prototype.addFeatures=gv.prototype.Oc,gv.prototype.clear=gv.prototype.clear,gv.prototype.forEachFeature=gv.prototype.Rf,gv.prototype.forEachFeatureInExtent=gv.prototype.$c,gv.prototype.forEachFeatureIntersectingExtent=gv.prototype.Oe,gv.prototype.getFeatures=gv.prototype.Dc,gv.prototype.getFeaturesAtCoordinate=gv.prototype.Re,gv.prototype.getFeaturesInExtent=gv.prototype.Se,gv.prototype.getClosestFeatureToCoordinate=gv.prototype.Tf,gv.prototype.getExtent=gv.prototype.G,gv.prototype.getFeatureById=gv.prototype.Qe,gv.prototype.removeFeature=gv.prototype.Qg,gv.prototype.getAttributions=gv.prototype.ea,gv.prototype.getLogo=gv.prototype.ca,gv.prototype.getProjection=gv.prototype.fa,gv.prototype.getState=gv.prototype.ga,gv.prototype.get=gv.prototype.get,gv.prototype.getKeys=gv.prototype.C,gv.prototype.getProperties=gv.prototype.D,gv.prototype.set=gv.prototype.set,gv.prototype.setProperties=gv.prototype.t,gv.prototype.unset=gv.prototype.I,gv.prototype.changed=gv.prototype.k,gv.prototype.getRevision=gv.prototype.v,gv.prototype.on=gv.prototype.r,gv.prototype.once=gv.prototype.A,gv.prototype.un=gv.prototype.u,gv.prototype.unByKey=gv.prototype.B,Dl.prototype.getAttributions=Dl.prototype.ea,Dl.prototype.getLogo=Dl.prototype.ca,Dl.prototype.getProjection=Dl.prototype.fa,Dl.prototype.getState=Dl.prototype.ga,Dl.prototype.get=Dl.prototype.get,Dl.prototype.getKeys=Dl.prototype.C,Dl.prototype.getProperties=Dl.prototype.D,Dl.prototype.set=Dl.prototype.set,Dl.prototype.setProperties=Dl.prototype.t,Dl.prototype.unset=Dl.prototype.I,Dl.prototype.changed=Dl.prototype.k,Dl.prototype.getRevision=Dl.prototype.v,Dl.prototype.on=Dl.prototype.r,Dl.prototype.once=Dl.prototype.A,Dl.prototype.un=Dl.prototype.u,Dl.prototype.unByKey=Dl.prototype.B,Ul.prototype.getAttributions=Ul.prototype.ea,Ul.prototype.getLogo=Ul.prototype.ca,Ul.prototype.getProjection=Ul.prototype.fa,Ul.prototype.getState=Ul.prototype.ga,Ul.prototype.get=Ul.prototype.get,Ul.prototype.getKeys=Ul.prototype.C,Ul.prototype.getProperties=Ul.prototype.D,Ul.prototype.set=Ul.prototype.set,Ul.prototype.setProperties=Ul.prototype.t,Ul.prototype.unset=Ul.prototype.I,Ul.prototype.changed=Ul.prototype.k,Ul.prototype.getRevision=Ul.prototype.v,Ul.prototype.on=Ul.prototype.r,Ul.prototype.once=Ul.prototype.A,Ul.prototype.un=Ul.prototype.u,Ul.prototype.unByKey=Ul.prototype.B,bv.prototype.getAttributions=bv.prototype.ea,bv.prototype.getLogo=bv.prototype.ca,bv.prototype.getProjection=bv.prototype.fa,bv.prototype.getState=bv.prototype.ga,bv.prototype.get=bv.prototype.get,bv.prototype.getKeys=bv.prototype.C,bv.prototype.getProperties=bv.prototype.D,bv.prototype.set=bv.prototype.set,bv.prototype.setProperties=bv.prototype.t,bv.prototype.unset=bv.prototype.I,bv.prototype.changed=bv.prototype.k,bv.prototype.getRevision=bv.prototype.v,bv.prototype.on=bv.prototype.r,bv.prototype.once=bv.prototype.A,bv.prototype.un=bv.prototype.u,bv.prototype.unByKey=bv.prototype.B,wv.prototype.getAttributions=wv.prototype.ea,wv.prototype.getLogo=wv.prototype.ca,wv.prototype.getProjection=wv.prototype.fa,wv.prototype.getState=wv.prototype.ga,wv.prototype.get=wv.prototype.get,wv.prototype.getKeys=wv.prototype.C,wv.prototype.getProperties=wv.prototype.D,wv.prototype.set=wv.prototype.set,wv.prototype.setProperties=wv.prototype.t,wv.prototype.unset=wv.prototype.I,wv.prototype.changed=wv.prototype.k,wv.prototype.getRevision=wv.prototype.v,wv.prototype.on=wv.prototype.r,wv.prototype.once=wv.prototype.A,wv.prototype.un=wv.prototype.u,wv.prototype.unByKey=wv.prototype.B,bu.prototype.getAttributions=bu.prototype.ea,bu.prototype.getLogo=bu.prototype.ca,bu.prototype.getProjection=bu.prototype.fa,bu.prototype.getState=bu.prototype.ga,bu.prototype.get=bu.prototype.get,bu.prototype.getKeys=bu.prototype.C,bu.prototype.getProperties=bu.prototype.D,bu.prototype.set=bu.prototype.set,bu.prototype.setProperties=bu.prototype.t,bu.prototype.unset=bu.prototype.I,bu.prototype.changed=bu.prototype.k,bu.prototype.getRevision=bu.prototype.v,bu.prototype.on=bu.prototype.r,bu.prototype.once=bu.prototype.A,bu.prototype.un=bu.prototype.u,bu.prototype.unByKey=bu.prototype.B,xv.prototype.getAttributions=xv.prototype.ea,xv.prototype.getLogo=xv.prototype.ca,xv.prototype.getProjection=xv.prototype.fa,xv.prototype.getState=xv.prototype.ga,xv.prototype.get=xv.prototype.get,xv.prototype.getKeys=xv.prototype.C,xv.prototype.getProperties=xv.prototype.D,xv.prototype.set=xv.prototype.set,xv.prototype.setProperties=xv.prototype.t,xv.prototype.unset=xv.prototype.I,xv.prototype.changed=xv.prototype.k,xv.prototype.getRevision=xv.prototype.v,xv.prototype.on=xv.prototype.r,xv.prototype.once=xv.prototype.A,xv.prototype.un=xv.prototype.u,xv.prototype.unByKey=xv.prototype.B,Mv.prototype.getTileLoadFunction=Mv.prototype.Ua,Mv.prototype.getTileUrlFunction=Mv.prototype.Va,Mv.prototype.setTileLoadFunction=Mv.prototype.$a,Mv.prototype.getTileGrid=Mv.prototype.ua,Mv.prototype.getAttributions=Mv.prototype.ea,Mv.prototype.getLogo=Mv.prototype.ca,Mv.prototype.getProjection=Mv.prototype.fa,Mv.prototype.getState=Mv.prototype.ga,Mv.prototype.get=Mv.prototype.get,Mv.prototype.getKeys=Mv.prototype.C,Mv.prototype.getProperties=Mv.prototype.D,Mv.prototype.set=Mv.prototype.set,Mv.prototype.setProperties=Mv.prototype.t,Mv.prototype.unset=Mv.prototype.I,Mv.prototype.changed=Mv.prototype.k,Mv.prototype.getRevision=Mv.prototype.v,Mv.prototype.on=Mv.prototype.r,Mv.prototype.once=Mv.prototype.A,Mv.prototype.un=Mv.prototype.u,Mv.prototype.unByKey=Mv.prototype.B,Ev.prototype.setTileUrlFunction=Ev.prototype.pa,Ev.prototype.setUrl=Ev.prototype.e,Ev.prototype.getTileLoadFunction=Ev.prototype.Ua,Ev.prototype.getTileUrlFunction=Ev.prototype.Va,Ev.prototype.setTileLoadFunction=Ev.prototype.$a,Ev.prototype.getTileGrid=Ev.prototype.ua,Ev.prototype.getAttributions=Ev.prototype.ea,Ev.prototype.getLogo=Ev.prototype.ca,Ev.prototype.getProjection=Ev.prototype.fa,Ev.prototype.getState=Ev.prototype.ga,Ev.prototype.get=Ev.prototype.get,Ev.prototype.getKeys=Ev.prototype.C,Ev.prototype.getProperties=Ev.prototype.D,Ev.prototype.set=Ev.prototype.set,Ev.prototype.setProperties=Ev.prototype.t,Ev.prototype.unset=Ev.prototype.I,Ev.prototype.changed=Ev.prototype.k,Ev.prototype.getRevision=Ev.prototype.v,Ev.prototype.on=Ev.prototype.r,Ev.prototype.once=Ev.prototype.A,Ev.prototype.un=Ev.prototype.u,Ev.prototype.unByKey=Ev.prototype.B,Cv.prototype.setTileUrlFunction=Cv.prototype.pa,Cv.prototype.setUrl=Cv.prototype.e,Cv.prototype.getTileLoadFunction=Cv.prototype.Ua,Cv.prototype.getTileUrlFunction=Cv.prototype.Va,Cv.prototype.setTileLoadFunction=Cv.prototype.$a,Cv.prototype.getTileGrid=Cv.prototype.ua,Cv.prototype.getAttributions=Cv.prototype.ea,Cv.prototype.getLogo=Cv.prototype.ca,Cv.prototype.getProjection=Cv.prototype.fa,Cv.prototype.getState=Cv.prototype.ga,Cv.prototype.get=Cv.prototype.get,Cv.prototype.getKeys=Cv.prototype.C,Cv.prototype.getProperties=Cv.prototype.D,Cv.prototype.set=Cv.prototype.set,Cv.prototype.setProperties=Cv.prototype.t,Cv.prototype.unset=Cv.prototype.I,Cv.prototype.changed=Cv.prototype.k,Cv.prototype.getRevision=Cv.prototype.v,Cv.prototype.on=Cv.prototype.r,Cv.prototype.once=Cv.prototype.A,Cv.prototype.un=Cv.prototype.u,Cv.prototype.unByKey=Cv.prototype.B,Pv.prototype.setTileUrlFunction=Pv.prototype.pa,Pv.prototype.setUrl=Pv.prototype.e,Pv.prototype.getTileLoadFunction=Pv.prototype.Ua,Pv.prototype.getTileUrlFunction=Pv.prototype.Va,Pv.prototype.setTileLoadFunction=Pv.prototype.$a,Pv.prototype.getTileGrid=Pv.prototype.ua,Pv.prototype.getAttributions=Pv.prototype.ea,Pv.prototype.getLogo=Pv.prototype.ca,Pv.prototype.getProjection=Pv.prototype.fa,Pv.prototype.getState=Pv.prototype.ga,Pv.prototype.get=Pv.prototype.get,Pv.prototype.getKeys=Pv.prototype.C,Pv.prototype.getProperties=Pv.prototype.D,Pv.prototype.set=Pv.prototype.set,Pv.prototype.setProperties=Pv.prototype.t,Pv.prototype.unset=Pv.prototype.I,Pv.prototype.changed=Pv.prototype.k,Pv.prototype.getRevision=Pv.prototype.v,Pv.prototype.on=Pv.prototype.r,Pv.prototype.once=Pv.prototype.A,Pv.prototype.un=Pv.prototype.u,Pv.prototype.unByKey=Pv.prototype.B,kv.prototype.getTileLoadFunction=kv.prototype.Ua,kv.prototype.getTileUrlFunction=kv.prototype.Va,kv.prototype.setTileLoadFunction=kv.prototype.$a,kv.prototype.setTileUrlFunction=kv.prototype.pa,kv.prototype.getTileGrid=kv.prototype.ua,kv.prototype.getAttributions=kv.prototype.ea,kv.prototype.getLogo=kv.prototype.ca,kv.prototype.getProjection=kv.prototype.fa,kv.prototype.getState=kv.prototype.ga,kv.prototype.get=kv.prototype.get,kv.prototype.getKeys=kv.prototype.C,kv.prototype.getProperties=kv.prototype.D,kv.prototype.set=kv.prototype.set,kv.prototype.setProperties=kv.prototype.t,kv.prototype.unset=kv.prototype.I,kv.prototype.changed=kv.prototype.k,kv.prototype.getRevision=kv.prototype.v,kv.prototype.on=kv.prototype.r,kv.prototype.once=kv.prototype.A,kv.prototype.un=kv.prototype.u,kv.prototype.unByKey=kv.prototype.B,Rv.prototype.getTileGrid=Rv.prototype.ua,Rv.prototype.getAttributions=Rv.prototype.ea,Rv.prototype.getLogo=Rv.prototype.ca,Rv.prototype.getProjection=Rv.prototype.fa,Rv.prototype.getState=Rv.prototype.ga,Rv.prototype.get=Rv.prototype.get,Rv.prototype.getKeys=Rv.prototype.C,Rv.prototype.getProperties=Rv.prototype.D,Rv.prototype.set=Rv.prototype.set,Rv.prototype.setProperties=Rv.prototype.t,Rv.prototype.unset=Rv.prototype.I,Rv.prototype.changed=Rv.prototype.k,Rv.prototype.getRevision=Rv.prototype.v,Rv.prototype.on=Rv.prototype.r,Rv.prototype.once=Rv.prototype.A,Rv.prototype.un=Rv.prototype.u,Rv.prototype.unByKey=Rv.prototype.B,Lv.prototype.getTileLoadFunction=Lv.prototype.Ua,Lv.prototype.getTileUrlFunction=Lv.prototype.Va,Lv.prototype.setTileLoadFunction=Lv.prototype.$a,Lv.prototype.setTileUrlFunction=Lv.prototype.pa,Lv.prototype.getTileGrid=Lv.prototype.ua,Lv.prototype.getAttributions=Lv.prototype.ea,Lv.prototype.getLogo=Lv.prototype.ca,Lv.prototype.getProjection=Lv.prototype.fa,Lv.prototype.getState=Lv.prototype.ga,Lv.prototype.get=Lv.prototype.get,Lv.prototype.getKeys=Lv.prototype.C,Lv.prototype.getProperties=Lv.prototype.D,Lv.prototype.set=Lv.prototype.set,Lv.prototype.setProperties=Lv.prototype.t,Lv.prototype.unset=Lv.prototype.I,Lv.prototype.changed=Lv.prototype.k,Lv.prototype.getRevision=Lv.prototype.v,Lv.prototype.on=Lv.prototype.r,Lv.prototype.once=Lv.prototype.A,Lv.prototype.un=Lv.prototype.u,Lv.prototype.unByKey=Lv.prototype.B,Nv.prototype.getTileGrid=Nv.prototype.ua,Nv.prototype.getAttributions=Nv.prototype.ea,Nv.prototype.getLogo=Nv.prototype.ca,Nv.prototype.getProjection=Nv.prototype.fa,Nv.prototype.getState=Nv.prototype.ga,Nv.prototype.get=Nv.prototype.get,Nv.prototype.getKeys=Nv.prototype.C,Nv.prototype.getProperties=Nv.prototype.D,Nv.prototype.set=Nv.prototype.set,Nv.prototype.setProperties=Nv.prototype.t,Nv.prototype.unset=Nv.prototype.I,Nv.prototype.changed=Nv.prototype.k,Nv.prototype.getRevision=Nv.prototype.v,Nv.prototype.on=Nv.prototype.r,Nv.prototype.once=Nv.prototype.A,Nv.prototype.un=Nv.prototype.u,Nv.prototype.unByKey=Nv.prototype.B,Ov.prototype.forEachFeatureIntersectingExtent=Ov.prototype.Oe,Ov.prototype.getFeaturesAtCoordinate=Ov.prototype.Re,Ov.prototype.getFeatureById=Ov.prototype.Qe,Ov.prototype.getAttributions=Ov.prototype.ea,Ov.prototype.getLogo=Ov.prototype.ca,Ov.prototype.getProjection=Ov.prototype.fa,Ov.prototype.getState=Ov.prototype.ga,Ov.prototype.get=Ov.prototype.get,Ov.prototype.getKeys=Ov.prototype.C,Ov.prototype.getProperties=Ov.prototype.D,Ov.prototype.set=Ov.prototype.set,Ov.prototype.setProperties=Ov.prototype.t,Ov.prototype.unset=Ov.prototype.I,Ov.prototype.changed=Ov.prototype.k,Ov.prototype.getRevision=Ov.prototype.v,Ov.prototype.on=Ov.prototype.r,Ov.prototype.once=Ov.prototype.A,Ov.prototype.un=Ov.prototype.u,Ov.prototype.unByKey=Ov.prototype.B,Uv.prototype.getTileLoadFunction=Uv.prototype.Ua,Uv.prototype.getTileUrlFunction=Uv.prototype.Va,Uv.prototype.setTileLoadFunction=Uv.prototype.$a,Uv.prototype.setTileUrlFunction=Uv.prototype.pa,Uv.prototype.getTileGrid=Uv.prototype.ua,Uv.prototype.getAttributions=Uv.prototype.ea,Uv.prototype.getLogo=Uv.prototype.ca,Uv.prototype.getProjection=Uv.prototype.fa,Uv.prototype.getState=Uv.prototype.ga,Uv.prototype.get=Uv.prototype.get,Uv.prototype.getKeys=Uv.prototype.C,Uv.prototype.getProperties=Uv.prototype.D,Uv.prototype.set=Uv.prototype.set,Uv.prototype.setProperties=Uv.prototype.t,Uv.prototype.unset=Uv.prototype.I,Uv.prototype.changed=Uv.prototype.k,Uv.prototype.getRevision=Uv.prototype.v,Uv.prototype.on=Uv.prototype.r,Uv.prototype.once=Uv.prototype.A,Uv.prototype.un=Uv.prototype.u,Uv.prototype.unByKey=Uv.prototype.B,Wv.prototype.getTileLoadFunction=Wv.prototype.Ua,Wv.prototype.getTileUrlFunction=Wv.prototype.Va,Wv.prototype.setTileLoadFunction=Wv.prototype.$a,Wv.prototype.setTileUrlFunction=Wv.prototype.pa,Wv.prototype.getTileGrid=Wv.prototype.ua,Wv.prototype.getAttributions=Wv.prototype.ea,Wv.prototype.getLogo=Wv.prototype.ca,Wv.prototype.getProjection=Wv.prototype.fa,Wv.prototype.getState=Wv.prototype.ga,Wv.prototype.get=Wv.prototype.get,Wv.prototype.getKeys=Wv.prototype.C,Wv.prototype.getProperties=Wv.prototype.D,Wv.prototype.set=Wv.prototype.set,Wv.prototype.setProperties=Wv.prototype.t,Wv.prototype.unset=Wv.prototype.I,Wv.prototype.changed=Wv.prototype.k,Wv.prototype.getRevision=Wv.prototype.v,Wv.prototype.on=Wv.prototype.r,Wv.prototype.once=Wv.prototype.A,Wv.prototype.un=Wv.prototype.u,Wv.prototype.unByKey=Wv.prototype.B,Vv.prototype.getTileLoadFunction=Vv.prototype.Ua,Vv.prototype.getTileUrlFunction=Vv.prototype.Va,Vv.prototype.setTileLoadFunction=Vv.prototype.$a,Vv.prototype.setTileUrlFunction=Vv.prototype.pa,Vv.prototype.getTileGrid=Vv.prototype.ua,Vv.prototype.getAttributions=Vv.prototype.ea,Vv.prototype.getLogo=Vv.prototype.ca,Vv.prototype.getProjection=Vv.prototype.fa,Vv.prototype.getState=Vv.prototype.ga,Vv.prototype.get=Vv.prototype.get,Vv.prototype.getKeys=Vv.prototype.C,Vv.prototype.getProperties=Vv.prototype.D,Vv.prototype.set=Vv.prototype.set,Vv.prototype.setProperties=Vv.prototype.t,Vv.prototype.unset=Vv.prototype.I,Vv.prototype.changed=Vv.prototype.k,Vv.prototype.getRevision=Vv.prototype.v,Vv.prototype.on=Vv.prototype.r,Vv.prototype.once=Vv.prototype.A,Vv.prototype.un=Vv.prototype.u,Vv.prototype.unByKey=Vv.prototype.B,es.prototype.changed=es.prototype.k,es.prototype.getRevision=es.prototype.v,es.prototype.on=es.prototype.r,es.prototype.once=es.prototype.A,es.prototype.un=es.prototype.u,es.prototype.unByKey=es.prototype.B,vc.prototype.changed=vc.prototype.k,vc.prototype.getRevision=vc.prototype.v,vc.prototype.on=vc.prototype.r,vc.prototype.once=vc.prototype.A,vc.prototype.un=vc.prototype.u,vc.prototype.unByKey=vc.prototype.B,wc.prototype.changed=wc.prototype.k,wc.prototype.getRevision=wc.prototype.v,wc.prototype.on=wc.prototype.r,wc.prototype.once=wc.prototype.A,wc.prototype.un=wc.prototype.u,wc.prototype.unByKey=wc.prototype.B,Ec.prototype.changed=Ec.prototype.k,Ec.prototype.getRevision=Ec.prototype.v,Ec.prototype.on=Ec.prototype.r,Ec.prototype.once=Ec.prototype.A,Ec.prototype.un=Ec.prototype.u,Ec.prototype.unByKey=Ec.prototype.B,Pc.prototype.changed=Pc.prototype.k,Pc.prototype.getRevision=Pc.prototype.v,Pc.prototype.on=Pc.prototype.r,Pc.prototype.once=Pc.prototype.A,Pc.prototype.un=Pc.prototype.u,Pc.prototype.unByKey=Pc.prototype.B,Eu.prototype.changed=Eu.prototype.k,Eu.prototype.getRevision=Eu.prototype.v,Eu.prototype.on=Eu.prototype.r,Eu.prototype.once=Eu.prototype.A,Eu.prototype.un=Eu.prototype.u,Eu.prototype.unByKey=Eu.prototype.B,Pu.prototype.changed=Pu.prototype.k,Pu.prototype.getRevision=Pu.prototype.v,Pu.prototype.on=Pu.prototype.r,Pu.prototype.once=Pu.prototype.A,Pu.prototype.un=Pu.prototype.u,Pu.prototype.unByKey=Pu.prototype.B,ku.prototype.changed=ku.prototype.k,ku.prototype.getRevision=ku.prototype.v,ku.prototype.on=ku.prototype.r,ku.prototype.once=ku.prototype.A,ku.prototype.un=ku.prototype.u,ku.prototype.unByKey=ku.prototype.B,Ru.prototype.changed=Ru.prototype.k,Ru.prototype.getRevision=Ru.prototype.v,Ru.prototype.on=Ru.prototype.r,Ru.prototype.once=Ru.prototype.A,Ru.prototype.un=Ru.prototype.u,Ru.prototype.unByKey=Ru.prototype.B,rl.prototype.changed=rl.prototype.k,rl.prototype.getRevision=rl.prototype.v,rl.prototype.on=rl.prototype.r,rl.prototype.once=rl.prototype.A,rl.prototype.un=rl.prototype.u,rl.prototype.unByKey=rl.prototype.B,xu.prototype.changed=xu.prototype.k,xu.prototype.getRevision=xu.prototype.v,xu.prototype.on=xu.prototype.r,xu.prototype.once=xu.prototype.A,xu.prototype.un=xu.prototype.u,xu.prototype.unByKey=xu.prototype.B,Su.prototype.changed=Su.prototype.k,Su.prototype.getRevision=Su.prototype.v,Su.prototype.on=Su.prototype.r,Su.prototype.once=Su.prototype.A,Su.prototype.un=Su.prototype.u,Su.prototype.unByKey=Su.prototype.B,Tu.prototype.changed=Tu.prototype.k,Tu.prototype.getRevision=Tu.prototype.v,Tu.prototype.on=Tu.prototype.r,Tu.prototype.once=Tu.prototype.A,Tu.prototype.un=Tu.prototype.u,Tu.prototype.unByKey=Tu.prototype.B,Kr.prototype.get=Kr.prototype.get,Kr.prototype.getKeys=Kr.prototype.C,Kr.prototype.getProperties=Kr.prototype.D,Kr.prototype.set=Kr.prototype.set,Kr.prototype.setProperties=Kr.prototype.t,Kr.prototype.unset=Kr.prototype.I,Kr.prototype.changed=Kr.prototype.k,Kr.prototype.getRevision=Kr.prototype.v,Kr.prototype.on=Kr.prototype.r,Kr.prototype.once=Kr.prototype.A,Kr.prototype.un=Kr.prototype.u,Kr.prototype.unByKey=Kr.prototype.B,Yr.prototype.getBrightness=Yr.prototype.Bb,Yr.prototype.getContrast=Yr.prototype.Cb,Yr.prototype.getHue=Yr.prototype.Db,Yr.prototype.getExtent=Yr.prototype.G,Yr.prototype.getMaxResolution=Yr.prototype.Eb,Yr.prototype.getMinResolution=Yr.prototype.Fb,Yr.prototype.getOpacity=Yr.prototype.Kb,Yr.prototype.getSaturation=Yr.prototype.Gb,Yr.prototype.getVisible=Yr.prototype.eb,Yr.prototype.setBrightness=Yr.prototype.gc,Yr.prototype.setContrast=Yr.prototype.hc,Yr.prototype.setHue=Yr.prototype.ic,Yr.prototype.setExtent=Yr.prototype.bc,Yr.prototype.setMaxResolution=Yr.prototype.jc,Yr.prototype.setMinResolution=Yr.prototype.kc,Yr.prototype.setOpacity=Yr.prototype.cc,Yr.prototype.setSaturation=Yr.prototype.lc,Yr.prototype.setVisible=Yr.prototype.mc,Yr.prototype.get=Yr.prototype.get,Yr.prototype.getKeys=Yr.prototype.C,Yr.prototype.getProperties=Yr.prototype.D,
+Yr.prototype.set=Yr.prototype.set,Yr.prototype.setProperties=Yr.prototype.t,Yr.prototype.unset=Yr.prototype.I,Yr.prototype.changed=Yr.prototype.k,Yr.prototype.getRevision=Yr.prototype.v,Yr.prototype.on=Yr.prototype.r,Yr.prototype.once=Yr.prototype.A,Yr.prototype.un=Yr.prototype.u,Yr.prototype.unByKey=Yr.prototype.B,Np.prototype.setSource=Np.prototype.Jc,Np.prototype.getBrightness=Np.prototype.Bb,Np.prototype.getContrast=Np.prototype.Cb,Np.prototype.getHue=Np.prototype.Db,Np.prototype.getExtent=Np.prototype.G,Np.prototype.getMaxResolution=Np.prototype.Eb,Np.prototype.getMinResolution=Np.prototype.Fb,Np.prototype.getOpacity=Np.prototype.Kb,Np.prototype.getSaturation=Np.prototype.Gb,Np.prototype.getVisible=Np.prototype.eb,Np.prototype.setBrightness=Np.prototype.gc,Np.prototype.setContrast=Np.prototype.hc,Np.prototype.setHue=Np.prototype.ic,Np.prototype.setExtent=Np.prototype.bc,Np.prototype.setMaxResolution=Np.prototype.jc,Np.prototype.setMinResolution=Np.prototype.kc,Np.prototype.setOpacity=Np.prototype.cc,Np.prototype.setSaturation=Np.prototype.lc,Np.prototype.setVisible=Np.prototype.mc,Np.prototype.get=Np.prototype.get,Np.prototype.getKeys=Np.prototype.C,Np.prototype.getProperties=Np.prototype.D,Np.prototype.set=Np.prototype.set,Np.prototype.setProperties=Np.prototype.t,Np.prototype.unset=Np.prototype.I,Np.prototype.changed=Np.prototype.k,Np.prototype.getRevision=Np.prototype.v,Np.prototype.on=Np.prototype.r,Np.prototype.once=Np.prototype.A,Np.prototype.un=Np.prototype.u,Np.prototype.unByKey=Np.prototype.B,Zg.prototype.getSource=Zg.prototype.da,Zg.prototype.getStyle=Zg.prototype.H,Zg.prototype.getStyleFunction=Zg.prototype.J,Zg.prototype.setStyle=Zg.prototype.e,Zg.prototype.setSource=Zg.prototype.Jc,Zg.prototype.getBrightness=Zg.prototype.Bb,Zg.prototype.getContrast=Zg.prototype.Cb,Zg.prototype.getHue=Zg.prototype.Db,Zg.prototype.getExtent=Zg.prototype.G,Zg.prototype.getMaxResolution=Zg.prototype.Eb,Zg.prototype.getMinResolution=Zg.prototype.Fb,Zg.prototype.getOpacity=Zg.prototype.Kb,Zg.prototype.getSaturation=Zg.prototype.Gb,Zg.prototype.getVisible=Zg.prototype.eb,Zg.prototype.setBrightness=Zg.prototype.gc,Zg.prototype.setContrast=Zg.prototype.hc,Zg.prototype.setHue=Zg.prototype.ic,Zg.prototype.setExtent=Zg.prototype.bc,Zg.prototype.setMaxResolution=Zg.prototype.jc,Zg.prototype.setMinResolution=Zg.prototype.kc,Zg.prototype.setOpacity=Zg.prototype.cc,Zg.prototype.setSaturation=Zg.prototype.lc,Zg.prototype.setVisible=Zg.prototype.mc,Zg.prototype.get=Zg.prototype.get,Zg.prototype.getKeys=Zg.prototype.C,Zg.prototype.getProperties=Zg.prototype.D,Zg.prototype.set=Zg.prototype.set,Zg.prototype.setProperties=Zg.prototype.t,Zg.prototype.unset=Zg.prototype.I,Zg.prototype.changed=Zg.prototype.k,Zg.prototype.getRevision=Zg.prototype.v,Zg.prototype.on=Zg.prototype.r,Zg.prototype.once=Zg.prototype.A,Zg.prototype.un=Zg.prototype.u,Zg.prototype.unByKey=Zg.prototype.B,Rp.prototype.setSource=Rp.prototype.Jc,Rp.prototype.getBrightness=Rp.prototype.Bb,Rp.prototype.getContrast=Rp.prototype.Cb,Rp.prototype.getHue=Rp.prototype.Db,Rp.prototype.getExtent=Rp.prototype.G,Rp.prototype.getMaxResolution=Rp.prototype.Eb,Rp.prototype.getMinResolution=Rp.prototype.Fb,Rp.prototype.getOpacity=Rp.prototype.Kb,Rp.prototype.getSaturation=Rp.prototype.Gb,Rp.prototype.getVisible=Rp.prototype.eb,Rp.prototype.setBrightness=Rp.prototype.gc,Rp.prototype.setContrast=Rp.prototype.hc,Rp.prototype.setHue=Rp.prototype.ic,Rp.prototype.setExtent=Rp.prototype.bc,Rp.prototype.setMaxResolution=Rp.prototype.jc,Rp.prototype.setMinResolution=Rp.prototype.kc,Rp.prototype.setOpacity=Rp.prototype.cc,Rp.prototype.setSaturation=Rp.prototype.lc,Rp.prototype.setVisible=Rp.prototype.mc,Rp.prototype.get=Rp.prototype.get,Rp.prototype.getKeys=Rp.prototype.C,Rp.prototype.getProperties=Rp.prototype.D,Rp.prototype.set=Rp.prototype.set,Rp.prototype.setProperties=Rp.prototype.t,Rp.prototype.unset=Rp.prototype.I,Rp.prototype.changed=Rp.prototype.k,Rp.prototype.getRevision=Rp.prototype.v,Rp.prototype.on=Rp.prototype.r,Rp.prototype.once=Rp.prototype.A,Rp.prototype.un=Rp.prototype.u,Rp.prototype.unByKey=Rp.prototype.B,Mp.prototype.getBrightness=Mp.prototype.Bb,Mp.prototype.getContrast=Mp.prototype.Cb,Mp.prototype.getHue=Mp.prototype.Db,Mp.prototype.getExtent=Mp.prototype.G,Mp.prototype.getMaxResolution=Mp.prototype.Eb,Mp.prototype.getMinResolution=Mp.prototype.Fb,Mp.prototype.getOpacity=Mp.prototype.Kb,Mp.prototype.getSaturation=Mp.prototype.Gb,Mp.prototype.getVisible=Mp.prototype.eb,Mp.prototype.setBrightness=Mp.prototype.gc,Mp.prototype.setContrast=Mp.prototype.hc,Mp.prototype.setHue=Mp.prototype.ic,Mp.prototype.setExtent=Mp.prototype.bc,Mp.prototype.setMaxResolution=Mp.prototype.jc,Mp.prototype.setMinResolution=Mp.prototype.kc,Mp.prototype.setOpacity=Mp.prototype.cc,Mp.prototype.setSaturation=Mp.prototype.lc,Mp.prototype.setVisible=Mp.prototype.mc,Mp.prototype.get=Mp.prototype.get,Mp.prototype.getKeys=Mp.prototype.C,Mp.prototype.getProperties=Mp.prototype.D,Mp.prototype.set=Mp.prototype.set,Mp.prototype.setProperties=Mp.prototype.t,Mp.prototype.unset=Mp.prototype.I,Mp.prototype.changed=Mp.prototype.k,Mp.prototype.getRevision=Mp.prototype.v,Mp.prototype.on=Mp.prototype.r,Mp.prototype.once=Mp.prototype.A,Mp.prototype.un=Mp.prototype.u,Mp.prototype.unByKey=Mp.prototype.B,Lp.prototype.setSource=Lp.prototype.Jc,Lp.prototype.getBrightness=Lp.prototype.Bb,Lp.prototype.getContrast=Lp.prototype.Cb,Lp.prototype.getHue=Lp.prototype.Db,Lp.prototype.getExtent=Lp.prototype.G,Lp.prototype.getMaxResolution=Lp.prototype.Eb,Lp.prototype.getMinResolution=Lp.prototype.Fb,Lp.prototype.getOpacity=Lp.prototype.Kb,Lp.prototype.getSaturation=Lp.prototype.Gb,Lp.prototype.getVisible=Lp.prototype.eb,Lp.prototype.setBrightness=Lp.prototype.gc,Lp.prototype.setContrast=Lp.prototype.hc,Lp.prototype.setHue=Lp.prototype.ic,Lp.prototype.setExtent=Lp.prototype.bc,Lp.prototype.setMaxResolution=Lp.prototype.jc,Lp.prototype.setMinResolution=Lp.prototype.kc,Lp.prototype.setOpacity=Lp.prototype.cc,Lp.prototype.setSaturation=Lp.prototype.lc,Lp.prototype.setVisible=Lp.prototype.mc,Lp.prototype.get=Lp.prototype.get,Lp.prototype.getKeys=Lp.prototype.C,Lp.prototype.getProperties=Lp.prototype.D,Lp.prototype.set=Lp.prototype.set,Lp.prototype.setProperties=Lp.prototype.t,Lp.prototype.unset=Lp.prototype.I,Lp.prototype.changed=Lp.prototype.k,Lp.prototype.getRevision=Lp.prototype.v,Lp.prototype.on=Lp.prototype.r,Lp.prototype.once=Lp.prototype.A,Lp.prototype.un=Lp.prototype.u,Lp.prototype.unByKey=Lp.prototype.B,As.prototype.get=As.prototype.get,As.prototype.getKeys=As.prototype.C,As.prototype.getProperties=As.prototype.D,As.prototype.set=As.prototype.set,As.prototype.setProperties=As.prototype.t,As.prototype.unset=As.prototype.I,As.prototype.changed=As.prototype.k,As.prototype.getRevision=As.prototype.v,As.prototype.on=As.prototype.r,As.prototype.once=As.prototype.A,As.prototype.un=As.prototype.u,As.prototype.unByKey=As.prototype.B,js.prototype.getActive=js.prototype.c,js.prototype.setActive=js.prototype.d,js.prototype.get=js.prototype.get,js.prototype.getKeys=js.prototype.C,js.prototype.getProperties=js.prototype.D,js.prototype.set=js.prototype.set,js.prototype.setProperties=js.prototype.t,js.prototype.unset=js.prototype.I,js.prototype.changed=js.prototype.k,js.prototype.getRevision=js.prototype.v,js.prototype.on=js.prototype.r,js.prototype.once=js.prototype.A,js.prototype.un=js.prototype.u,js.prototype.unByKey=js.prototype.B,fg.prototype.getActive=fg.prototype.c,fg.prototype.setActive=fg.prototype.d,fg.prototype.get=fg.prototype.get,fg.prototype.getKeys=fg.prototype.C,fg.prototype.getProperties=fg.prototype.D,fg.prototype.set=fg.prototype.set,fg.prototype.setProperties=fg.prototype.t,fg.prototype.unset=fg.prototype.I,fg.prototype.changed=fg.prototype.k,fg.prototype.getRevision=fg.prototype.v,fg.prototype.on=fg.prototype.r,fg.prototype.once=fg.prototype.A,fg.prototype.un=fg.prototype.u,fg.prototype.unByKey=fg.prototype.B,qs.prototype.getActive=qs.prototype.c,qs.prototype.setActive=qs.prototype.d,qs.prototype.get=qs.prototype.get,qs.prototype.getKeys=qs.prototype.C,qs.prototype.getProperties=qs.prototype.D,qs.prototype.set=qs.prototype.set,qs.prototype.setProperties=qs.prototype.t,qs.prototype.unset=qs.prototype.I,qs.prototype.changed=qs.prototype.k,qs.prototype.getRevision=qs.prototype.v,qs.prototype.on=qs.prototype.r,qs.prototype.once=qs.prototype.A,qs.prototype.un=qs.prototype.u,qs.prototype.unByKey=qs.prototype.B,Ka.prototype.getActive=Ka.prototype.c,Ka.prototype.setActive=Ka.prototype.d,Ka.prototype.get=Ka.prototype.get,Ka.prototype.getKeys=Ka.prototype.C,Ka.prototype.getProperties=Ka.prototype.D,Ka.prototype.set=Ka.prototype.set,Ka.prototype.setProperties=Ka.prototype.t,Ka.prototype.unset=Ka.prototype.I,Ka.prototype.changed=Ka.prototype.k,Ka.prototype.getRevision=Ka.prototype.v,Ka.prototype.on=Ka.prototype.r,Ka.prototype.once=Ka.prototype.A,Ka.prototype.un=Ka.prototype.u,Ka.prototype.unByKey=Ka.prototype.B,Ws.prototype.getActive=Ws.prototype.c,Ws.prototype.setActive=Ws.prototype.d,Ws.prototype.get=Ws.prototype.get,Ws.prototype.getKeys=Ws.prototype.C,Ws.prototype.getProperties=Ws.prototype.D,Ws.prototype.set=Ws.prototype.set,Ws.prototype.setProperties=Ws.prototype.t,Ws.prototype.unset=Ws.prototype.I,Ws.prototype.changed=Ws.prototype.k,Ws.prototype.getRevision=Ws.prototype.v,Ws.prototype.on=Ws.prototype.r,Ws.prototype.once=Ws.prototype.A,Ws.prototype.un=Ws.prototype.u,Ws.prototype.unByKey=Ws.prototype.B,gg.prototype.getActive=gg.prototype.c,gg.prototype.setActive=gg.prototype.d,gg.prototype.get=gg.prototype.get,gg.prototype.getKeys=gg.prototype.C,gg.prototype.getProperties=gg.prototype.D,gg.prototype.set=gg.prototype.set,gg.prototype.setProperties=gg.prototype.t,gg.prototype.unset=gg.prototype.I,gg.prototype.changed=gg.prototype.k,gg.prototype.getRevision=gg.prototype.v,gg.prototype.on=gg.prototype.r,gg.prototype.once=gg.prototype.A,gg.prototype.un=gg.prototype.u,gg.prototype.unByKey=gg.prototype.B,Ys.prototype.getActive=Ys.prototype.c,Ys.prototype.setActive=Ys.prototype.d,Ys.prototype.get=Ys.prototype.get,Ys.prototype.getKeys=Ys.prototype.C,Ys.prototype.getProperties=Ys.prototype.D,Ys.prototype.set=Ys.prototype.set,Ys.prototype.setProperties=Ys.prototype.t,Ys.prototype.unset=Ys.prototype.I,Ys.prototype.changed=Ys.prototype.k,Ys.prototype.getRevision=Ys.prototype.v,Ys.prototype.on=Ys.prototype.r,Ys.prototype.once=Ys.prototype.A,Ys.prototype.un=Ys.prototype.u,Ys.prototype.unByKey=Ys.prototype.B,pp.prototype.getGeometry=pp.prototype.Q,pp.prototype.getActive=pp.prototype.c,pp.prototype.setActive=pp.prototype.d,pp.prototype.get=pp.prototype.get,pp.prototype.getKeys=pp.prototype.C,pp.prototype.getProperties=pp.prototype.D,pp.prototype.set=pp.prototype.set,pp.prototype.setProperties=pp.prototype.t,pp.prototype.unset=pp.prototype.I,pp.prototype.changed=pp.prototype.k,pp.prototype.getRevision=pp.prototype.v,pp.prototype.on=pp.prototype.r,pp.prototype.once=pp.prototype.A,pp.prototype.un=pp.prototype.u,pp.prototype.unByKey=pp.prototype.B,xg.prototype.getActive=xg.prototype.c,xg.prototype.setActive=xg.prototype.d,xg.prototype.get=xg.prototype.get,xg.prototype.getKeys=xg.prototype.C,xg.prototype.getProperties=xg.prototype.D,xg.prototype.set=xg.prototype.set,xg.prototype.setProperties=xg.prototype.t,xg.prototype.unset=xg.prototype.I,xg.prototype.changed=xg.prototype.k,xg.prototype.getRevision=xg.prototype.v,xg.prototype.on=xg.prototype.r,xg.prototype.once=xg.prototype.A,xg.prototype.un=xg.prototype.u,xg.prototype.unByKey=xg.prototype.B,lp.prototype.getActive=lp.prototype.c,lp.prototype.setActive=lp.prototype.d,lp.prototype.get=lp.prototype.get,lp.prototype.getKeys=lp.prototype.C,lp.prototype.getProperties=lp.prototype.D,lp.prototype.set=lp.prototype.set,lp.prototype.setProperties=lp.prototype.t,lp.prototype.unset=lp.prototype.I,lp.prototype.changed=lp.prototype.k,lp.prototype.getRevision=lp.prototype.v,lp.prototype.on=lp.prototype.r,lp.prototype.once=lp.prototype.A,lp.prototype.un=lp.prototype.u,lp.prototype.unByKey=lp.prototype.B,up.prototype.getActive=up.prototype.c,up.prototype.setActive=up.prototype.d,up.prototype.get=up.prototype.get,up.prototype.getKeys=up.prototype.C,up.prototype.getProperties=up.prototype.D,up.prototype.set=up.prototype.set,up.prototype.setProperties=up.prototype.t,up.prototype.unset=up.prototype.I,up.prototype.changed=up.prototype.k,up.prototype.getRevision=up.prototype.v,up.prototype.on=up.prototype.r,up.prototype.once=up.prototype.A,up.prototype.un=up.prototype.u,up.prototype.unByKey=up.prototype.B,Ng.prototype.getActive=Ng.prototype.c,Ng.prototype.setActive=Ng.prototype.d,Ng.prototype.get=Ng.prototype.get,Ng.prototype.getKeys=Ng.prototype.C,Ng.prototype.getProperties=Ng.prototype.D,Ng.prototype.set=Ng.prototype.set,Ng.prototype.setProperties=Ng.prototype.t,Ng.prototype.unset=Ng.prototype.I,Ng.prototype.changed=Ng.prototype.k,Ng.prototype.getRevision=Ng.prototype.v,Ng.prototype.on=Ng.prototype.r,Ng.prototype.once=Ng.prototype.A,Ng.prototype.un=Ng.prototype.u,Ng.prototype.unByKey=Ng.prototype.B,fp.prototype.getActive=fp.prototype.c,fp.prototype.setActive=fp.prototype.d,fp.prototype.get=fp.prototype.get,fp.prototype.getKeys=fp.prototype.C,fp.prototype.getProperties=fp.prototype.D,fp.prototype.set=fp.prototype.set,fp.prototype.setProperties=fp.prototype.t,fp.prototype.unset=fp.prototype.I,fp.prototype.changed=fp.prototype.k,fp.prototype.getRevision=fp.prototype.v,fp.prototype.on=fp.prototype.r,fp.prototype.once=fp.prototype.A,fp.prototype.un=fp.prototype.u,fp.prototype.unByKey=fp.prototype.B,dp.prototype.getActive=dp.prototype.c,dp.prototype.setActive=dp.prototype.d,dp.prototype.get=dp.prototype.get,dp.prototype.getKeys=dp.prototype.C,dp.prototype.getProperties=dp.prototype.D,dp.prototype.set=dp.prototype.set,dp.prototype.setProperties=dp.prototype.t,dp.prototype.unset=dp.prototype.I,dp.prototype.changed=dp.prototype.k,dp.prototype.getRevision=dp.prototype.v,dp.prototype.on=dp.prototype.r,dp.prototype.once=dp.prototype.A,dp.prototype.un=dp.prototype.u,dp.prototype.unByKey=dp.prototype.B,bp.prototype.getActive=bp.prototype.c,bp.prototype.setActive=bp.prototype.d,bp.prototype.get=bp.prototype.get,bp.prototype.getKeys=bp.prototype.C,bp.prototype.getProperties=bp.prototype.D,bp.prototype.set=bp.prototype.set,bp.prototype.setProperties=bp.prototype.t,bp.prototype.unset=bp.prototype.I,bp.prototype.changed=bp.prototype.k,bp.prototype.getRevision=bp.prototype.v,bp.prototype.on=bp.prototype.r,bp.prototype.once=bp.prototype.A,bp.prototype.un=bp.prototype.u,bp.prototype.unByKey=bp.prototype.B,$g.prototype.getActive=$g.prototype.c,$g.prototype.setActive=$g.prototype.d,$g.prototype.get=$g.prototype.get,$g.prototype.getKeys=$g.prototype.C,$g.prototype.getProperties=$g.prototype.D,$g.prototype.set=$g.prototype.set,$g.prototype.setProperties=$g.prototype.t,$g.prototype.unset=$g.prototype.I,$g.prototype.changed=$g.prototype.k,$g.prototype.getRevision=$g.prototype.v,$g.prototype.on=$g.prototype.r,$g.prototype.once=$g.prototype.A,$g.prototype.un=$g.prototype.u,$g.prototype.unByKey=$g.prototype.B,zg.prototype.getActive=zg.prototype.c,zg.prototype.setActive=zg.prototype.d,zg.prototype.get=zg.prototype.get,zg.prototype.getKeys=zg.prototype.C,zg.prototype.getProperties=zg.prototype.D,zg.prototype.set=zg.prototype.set,zg.prototype.setProperties=zg.prototype.t,zg.prototype.unset=zg.prototype.I,zg.prototype.changed=zg.prototype.k,zg.prototype.getRevision=zg.prototype.v,zg.prototype.on=zg.prototype.r,zg.prototype.once=zg.prototype.A,zg.prototype.un=zg.prototype.u,zg.prototype.unByKey=zg.prototype.B,Qs.prototype.get=Qs.prototype.get,Qs.prototype.getKeys=Qs.prototype.C,Qs.prototype.getProperties=Qs.prototype.D,Qs.prototype.set=Qs.prototype.set,Qs.prototype.setProperties=Qs.prototype.t,Qs.prototype.unset=Qs.prototype.I,Qs.prototype.changed=Qs.prototype.k,Qs.prototype.getRevision=Qs.prototype.v,Qs.prototype.on=Qs.prototype.r,Qs.prototype.once=Qs.prototype.A,Qs.prototype.un=Qs.prototype.u,Qs.prototype.unByKey=Qs.prototype.B,ea.prototype.getClosestPoint=ea.prototype.e,ea.prototype.getExtent=ea.prototype.G,ea.prototype.get=ea.prototype.get,ea.prototype.getKeys=ea.prototype.C,ea.prototype.getProperties=ea.prototype.D,ea.prototype.set=ea.prototype.set,ea.prototype.setProperties=ea.prototype.t,ea.prototype.unset=ea.prototype.I,ea.prototype.changed=ea.prototype.k,ea.prototype.getRevision=ea.prototype.v,ea.prototype.on=ea.prototype.r,ea.prototype.once=ea.prototype.A,ea.prototype.un=ea.prototype.u,ea.prototype.unByKey=ea.prototype.B,ll.prototype.getFirstCoordinate=ll.prototype.ob,ll.prototype.getLastCoordinate=ll.prototype.pb,ll.prototype.getLayout=ll.prototype.qb,ll.prototype.applyTransform=ll.prototype.qa,ll.prototype.translate=ll.prototype.Oa,ll.prototype.getClosestPoint=ll.prototype.e,ll.prototype.getExtent=ll.prototype.G,ll.prototype.get=ll.prototype.get,ll.prototype.getKeys=ll.prototype.C,ll.prototype.getProperties=ll.prototype.D,ll.prototype.set=ll.prototype.set,ll.prototype.setProperties=ll.prototype.t,ll.prototype.unset=ll.prototype.I,ll.prototype.changed=ll.prototype.k,ll.prototype.getRevision=ll.prototype.v,ll.prototype.on=ll.prototype.r,ll.prototype.once=ll.prototype.A,ll.prototype.un=ll.prototype.u,ll.prototype.unByKey=ll.prototype.B,ul.prototype.getClosestPoint=ul.prototype.e,ul.prototype.getExtent=ul.prototype.G,ul.prototype.get=ul.prototype.get,ul.prototype.getKeys=ul.prototype.C,ul.prototype.getProperties=ul.prototype.D,ul.prototype.set=ul.prototype.set,ul.prototype.setProperties=ul.prototype.t,ul.prototype.unset=ul.prototype.I,ul.prototype.changed=ul.prototype.k,ul.prototype.getRevision=ul.prototype.v,ul.prototype.on=ul.prototype.r,ul.prototype.once=ul.prototype.A,ul.prototype.un=ul.prototype.u,ul.prototype.unByKey=ul.prototype.B,xa.prototype.getFirstCoordinate=xa.prototype.ob,xa.prototype.getLastCoordinate=xa.prototype.pb,xa.prototype.getLayout=xa.prototype.qb,xa.prototype.applyTransform=xa.prototype.qa,xa.prototype.translate=xa.prototype.Oa,xa.prototype.getClosestPoint=xa.prototype.e,xa.prototype.getExtent=xa.prototype.G,xa.prototype.get=xa.prototype.get,xa.prototype.getKeys=xa.prototype.C,xa.prototype.getProperties=xa.prototype.D,xa.prototype.set=xa.prototype.set,xa.prototype.setProperties=xa.prototype.t,xa.prototype.unset=xa.prototype.I,xa.prototype.changed=xa.prototype.k,xa.prototype.getRevision=xa.prototype.v,xa.prototype.on=xa.prototype.r,xa.prototype.once=xa.prototype.A,xa.prototype.un=xa.prototype.u,xa.prototype.unByKey=xa.prototype.B,ml.prototype.getFirstCoordinate=ml.prototype.ob,ml.prototype.getLastCoordinate=ml.prototype.pb,ml.prototype.getLayout=ml.prototype.qb,ml.prototype.applyTransform=ml.prototype.qa,ml.prototype.translate=ml.prototype.Oa,ml.prototype.getClosestPoint=ml.prototype.e,ml.prototype.getExtent=ml.prototype.G,ml.prototype.get=ml.prototype.get,ml.prototype.getKeys=ml.prototype.C,ml.prototype.getProperties=ml.prototype.D,ml.prototype.set=ml.prototype.set,ml.prototype.setProperties=ml.prototype.t,ml.prototype.unset=ml.prototype.I,ml.prototype.changed=ml.prototype.k,ml.prototype.getRevision=ml.prototype.v,ml.prototype.on=ml.prototype.r,ml.prototype.once=ml.prototype.A,ml.prototype.un=ml.prototype.u,ml.prototype.unByKey=ml.prototype.B,xl.prototype.getFirstCoordinate=xl.prototype.ob,xl.prototype.getLastCoordinate=xl.prototype.pb,xl.prototype.getLayout=xl.prototype.qb,xl.prototype.applyTransform=xl.prototype.qa,xl.prototype.translate=xl.prototype.Oa,xl.prototype.getClosestPoint=xl.prototype.e,xl.prototype.getExtent=xl.prototype.G,xl.prototype.get=xl.prototype.get,xl.prototype.getKeys=xl.prototype.C,xl.prototype.getProperties=xl.prototype.D,xl.prototype.set=xl.prototype.set,xl.prototype.setProperties=xl.prototype.t,xl.prototype.unset=xl.prototype.I,xl.prototype.changed=xl.prototype.k,xl.prototype.getRevision=xl.prototype.v,xl.prototype.on=xl.prototype.r,xl.prototype.once=xl.prototype.A,xl.prototype.un=xl.prototype.u,xl.prototype.unByKey=xl.prototype.B,Cl.prototype.getFirstCoordinate=Cl.prototype.ob,Cl.prototype.getLastCoordinate=Cl.prototype.pb,Cl.prototype.getLayout=Cl.prototype.qb,Cl.prototype.applyTransform=Cl.prototype.qa,Cl.prototype.translate=Cl.prototype.Oa,Cl.prototype.getClosestPoint=Cl.prototype.e,Cl.prototype.getExtent=Cl.prototype.G,Cl.prototype.get=Cl.prototype.get,Cl.prototype.getKeys=Cl.prototype.C,Cl.prototype.getProperties=Cl.prototype.D,Cl.prototype.set=Cl.prototype.set,Cl.prototype.setProperties=Cl.prototype.t,Cl.prototype.unset=Cl.prototype.I,Cl.prototype.changed=Cl.prototype.k,Cl.prototype.getRevision=Cl.prototype.v,Cl.prototype.on=Cl.prototype.r,Cl.prototype.once=Cl.prototype.A,Cl.prototype.un=Cl.prototype.u,Cl.prototype.unByKey=Cl.prototype.B,El.prototype.getFirstCoordinate=El.prototype.ob,El.prototype.getLastCoordinate=El.prototype.pb,El.prototype.getLayout=El.prototype.qb,El.prototype.applyTransform=El.prototype.qa,El.prototype.translate=El.prototype.Oa,El.prototype.getClosestPoint=El.prototype.e,El.prototype.getExtent=El.prototype.G,El.prototype.get=El.prototype.get,El.prototype.getKeys=El.prototype.C,El.prototype.getProperties=El.prototype.D,El.prototype.set=El.prototype.set,El.prototype.setProperties=El.prototype.t,El.prototype.unset=El.prototype.I,El.prototype.changed=El.prototype.k,El.prototype.getRevision=El.prototype.v,El.prototype.on=El.prototype.r,El.prototype.once=El.prototype.A,El.prototype.un=El.prototype.u,El.prototype.unByKey=El.prototype.B,Ta.prototype.getFirstCoordinate=Ta.prototype.ob,Ta.prototype.getLastCoordinate=Ta.prototype.pb,Ta.prototype.getLayout=Ta.prototype.qb,Ta.prototype.applyTransform=Ta.prototype.qa,Ta.prototype.translate=Ta.prototype.Oa,Ta.prototype.getClosestPoint=Ta.prototype.e,Ta.prototype.getExtent=Ta.prototype.G,Ta.prototype.get=Ta.prototype.get,Ta.prototype.getKeys=Ta.prototype.C,Ta.prototype.getProperties=Ta.prototype.D,Ta.prototype.set=Ta.prototype.set,Ta.prototype.setProperties=Ta.prototype.t,Ta.prototype.unset=Ta.prototype.I,Ta.prototype.changed=Ta.prototype.k,Ta.prototype.getRevision=Ta.prototype.v,Ta.prototype.on=Ta.prototype.r,Ta.prototype.once=Ta.prototype.A,Ta.prototype.un=Ta.prototype.u,Ta.prototype.unByKey=Ta.prototype.B,Fa.prototype.getFirstCoordinate=Fa.prototype.ob,Fa.prototype.getLastCoordinate=Fa.prototype.pb,Fa.prototype.getLayout=Fa.prototype.qb,Fa.prototype.applyTransform=Fa.prototype.qa,Fa.prototype.translate=Fa.prototype.Oa,Fa.prototype.getClosestPoint=Fa.prototype.e,Fa.prototype.getExtent=Fa.prototype.G,Fa.prototype.get=Fa.prototype.get,Fa.prototype.getKeys=Fa.prototype.C,Fa.prototype.getProperties=Fa.prototype.D,Fa.prototype.set=Fa.prototype.set,Fa.prototype.setProperties=Fa.prototype.t,Fa.prototype.unset=Fa.prototype.I,Fa.prototype.changed=Fa.prototype.k,Fa.prototype.getRevision=Fa.prototype.v,Fa.prototype.on=Fa.prototype.r,Fa.prototype.once=Fa.prototype.A,Fa.prototype.un=Fa.prototype.u,Fa.prototype.unByKey=Fa.prototype.B,qf.prototype.readFeatures=qf.prototype.ja,Gf.prototype.readFeatures=Gf.prototype.ja,Gf.prototype.readFeatures=Gf.prototype.ja,Ji.prototype.get=Ji.prototype.get,Ji.prototype.getKeys=Ji.prototype.C,Ji.prototype.getProperties=Ji.prototype.D,Ji.prototype.set=Ji.prototype.set,Ji.prototype.setProperties=Ji.prototype.t,Ji.prototype.unset=Ji.prototype.I,Ji.prototype.changed=Ji.prototype.k,Ji.prototype.getRevision=Ji.prototype.v,Ji.prototype.on=Ji.prototype.r,Ji.prototype.once=Ji.prototype.A,Ji.prototype.un=Ji.prototype.u,Ji.prototype.unByKey=Ji.prototype.B,Rn.prototype.getMap=Rn.prototype.e,Rn.prototype.setMap=Rn.prototype.setMap,Rn.prototype.setTarget=Rn.prototype.c,Rn.prototype.get=Rn.prototype.get,Rn.prototype.getKeys=Rn.prototype.C,Rn.prototype.getProperties=Rn.prototype.D,Rn.prototype.set=Rn.prototype.set,Rn.prototype.setProperties=Rn.prototype.t,Rn.prototype.unset=Rn.prototype.I,Rn.prototype.changed=Rn.prototype.k,Rn.prototype.getRevision=Rn.prototype.v,Rn.prototype.on=Rn.prototype.r,Rn.prototype.once=Rn.prototype.A,Rn.prototype.un=Rn.prototype.u,Rn.prototype.unByKey=Rn.prototype.B,Gn.prototype.getMap=Gn.prototype.e,Gn.prototype.setMap=Gn.prototype.setMap,Gn.prototype.setTarget=Gn.prototype.c,Gn.prototype.get=Gn.prototype.get,Gn.prototype.getKeys=Gn.prototype.C,Gn.prototype.getProperties=Gn.prototype.D,Gn.prototype.set=Gn.prototype.set,Gn.prototype.setProperties=Gn.prototype.t,Gn.prototype.unset=Gn.prototype.I,Gn.prototype.changed=Gn.prototype.k,Gn.prototype.getRevision=Gn.prototype.v,Gn.prototype.on=Gn.prototype.r,Gn.prototype.once=Gn.prototype.A,Gn.prototype.un=Gn.prototype.u,Gn.prototype.unByKey=Gn.prototype.B,Hn.prototype.getMap=Hn.prototype.e,Hn.prototype.setTarget=Hn.prototype.c,Hn.prototype.get=Hn.prototype.get,Hn.prototype.getKeys=Hn.prototype.C,Hn.prototype.getProperties=Hn.prototype.D,Hn.prototype.set=Hn.prototype.set,Hn.prototype.setProperties=Hn.prototype.t,Hn.prototype.unset=Hn.prototype.I,Hn.prototype.changed=Hn.prototype.k,Hn.prototype.getRevision=Hn.prototype.v,Hn.prototype.on=Hn.prototype.r,Hn.prototype.once=Hn.prototype.A,Hn.prototype.un=Hn.prototype.u,Hn.prototype.unByKey=Hn.prototype.B,Oc.prototype.getMap=Oc.prototype.e,Oc.prototype.setTarget=Oc.prototype.c,Oc.prototype.get=Oc.prototype.get,Oc.prototype.getKeys=Oc.prototype.C,Oc.prototype.getProperties=Oc.prototype.D,Oc.prototype.set=Oc.prototype.set,Oc.prototype.setProperties=Oc.prototype.t,Oc.prototype.unset=Oc.prototype.I,Oc.prototype.changed=Oc.prototype.k,Oc.prototype.getRevision=Oc.prototype.v,Oc.prototype.on=Oc.prototype.r,Oc.prototype.once=Oc.prototype.A,Oc.prototype.un=Oc.prototype.u,Oc.prototype.unByKey=Oc.prototype.B,jn.prototype.getMap=jn.prototype.e,jn.prototype.setMap=jn.prototype.setMap,jn.prototype.setTarget=jn.prototype.c,jn.prototype.get=jn.prototype.get,jn.prototype.getKeys=jn.prototype.C,jn.prototype.getProperties=jn.prototype.D,jn.prototype.set=jn.prototype.set,jn.prototype.setProperties=jn.prototype.t,jn.prototype.unset=jn.prototype.I,jn.prototype.changed=jn.prototype.k,jn.prototype.getRevision=jn.prototype.v,jn.prototype.on=jn.prototype.r,jn.prototype.once=jn.prototype.A,jn.prototype.un=jn.prototype.u,jn.prototype.unByKey=jn.prototype.B,qc.prototype.getMap=qc.prototype.e,qc.prototype.setMap=qc.prototype.setMap,qc.prototype.setTarget=qc.prototype.c,qc.prototype.get=qc.prototype.get,qc.prototype.getKeys=qc.prototype.C,qc.prototype.getProperties=qc.prototype.D,qc.prototype.set=qc.prototype.set,qc.prototype.setProperties=qc.prototype.t,qc.prototype.unset=qc.prototype.I,qc.prototype.changed=qc.prototype.k,qc.prototype.getRevision=qc.prototype.v,qc.prototype.on=qc.prototype.r,qc.prototype.once=qc.prototype.A,qc.prototype.un=qc.prototype.u,qc.prototype.unByKey=qc.prototype.B,Dn.prototype.getMap=Dn.prototype.e,Dn.prototype.setMap=Dn.prototype.setMap,Dn.prototype.setTarget=Dn.prototype.c,Dn.prototype.get=Dn.prototype.get,Dn.prototype.getKeys=Dn.prototype.C,Dn.prototype.getProperties=Dn.prototype.D,Dn.prototype.set=Dn.prototype.set,Dn.prototype.setProperties=Dn.prototype.t,Dn.prototype.unset=Dn.prototype.I,Dn.prototype.changed=Dn.prototype.k,Dn.prototype.getRevision=Dn.prototype.v,Dn.prototype.on=Dn.prototype.r,Dn.prototype.once=Dn.prototype.A,Dn.prototype.un=Dn.prototype.u,Dn.prototype.unByKey=Dn.prototype.B,tf.prototype.getMap=tf.prototype.e,tf.prototype.setTarget=tf.prototype.c,tf.prototype.get=tf.prototype.get,tf.prototype.getKeys=tf.prototype.C,tf.prototype.getProperties=tf.prototype.D,tf.prototype.set=tf.prototype.set,tf.prototype.setProperties=tf.prototype.t,tf.prototype.unset=tf.prototype.I,tf.prototype.changed=tf.prototype.k,tf.prototype.getRevision=tf.prototype.v,tf.prototype.on=tf.prototype.r,tf.prototype.once=tf.prototype.A,tf.prototype.un=tf.prototype.u,tf.prototype.unByKey=tf.prototype.B,rf.prototype.getMap=rf.prototype.e,rf.prototype.setMap=rf.prototype.setMap,rf.prototype.setTarget=rf.prototype.c,rf.prototype.get=rf.prototype.get,rf.prototype.getKeys=rf.prototype.C,rf.prototype.getProperties=rf.prototype.D,rf.prototype.set=rf.prototype.set,rf.prototype.setProperties=rf.prototype.t,rf.prototype.unset=rf.prototype.I,rf.prototype.changed=rf.prototype.k,rf.prototype.getRevision=rf.prototype.v,rf.prototype.on=rf.prototype.r,rf.prototype.once=rf.prototype.A,rf.prototype.un=rf.prototype.u,rf.prototype.unByKey=rf.prototype.B,nm.ol});var map,extent,overlays=[],vectorSource=new ol.source.Vector,lastClick,popupOverlay,vectorLayer;$(document).ready(function(){initMap(),$("#closer").click(function(){toggleResults()}),map.on("singleclick",function(t){var e=t.coordinate;lastClick=e}),$(window).resize(function(){updateResultsPosition(),updateCloserPosition()})});var options={enableHighAccuracy:!0,timeout:5e3,maximumAge:0};!function(t,e){"use strict";function o(e,o,i){"addEventListener"in t?e.addEventListener(o,i,!1):"attachEvent"in t&&e.attachEvent("on"+o,i)}function i(e,o,i){"removeEventListener"in t?e.removeEventListener(o,i,!1):"detachEvent"in t&&e.detachEvent("on"+o,i)}function n(t){return t.charAt(0).toUpperCase()+t.slice(1)}function r(t){var e,o,i,n=null,r=0,s=function(){r=Nt(),n=null,i=t.apply(e,o),n||(e=o=null)};return function(){var a=Nt();r||(r=a);var p=Tt-(a-r);return e=this,o=arguments,0>=p||p>Tt?(n&&(clearTimeout(n),n=null),r=a,i=t.apply(e,o),n||(e=o=null)):n||(n=setTimeout(s,p)),i}}function s(e){ut&&"object"==typeof t.console&&void 0}function a(e){"object"==typeof t.console&&void 0}function p(){l(),s("Initialising iFrame ("+location.href+")"),h(),f(),c("background",V),c("padding",J),E(),m(),b(),y(),k(),w(),pt=P(),U("init","Init message from host page"),At()}function l(){function t(t){return"true"===t}var o=at.substr(ft).split(":");yt=o[0],Y=e!==o[1]?Number(o[1]):Y,Q=e!==o[2]?t(o[2]):Q,ut=e!==o[3]?t(o[3]):ut,lt=e!==o[4]?Number(o[4]):lt,z=e!==o[6]?t(o[6]):z,Z=o[7],rt=e!==o[8]?o[8]:rt,V=o[9],J=o[10],wt=e!==o[11]?Number(o[11]):wt,pt.enable=e!==o[12]&&t(o[12]),gt=e!==o[13]?o[13]:gt,Et=e!==o[14]?o[14]:Et}function h(){function e(){var e=t.iFrameResizer;s("Reading data from page: "+JSON.stringify(e)),kt="messageCallback"in e?e.messageCallback:kt,At="readyCallback"in e?e.readyCallback:At,bt="targetOrigin"in e?e.targetOrigin:bt,rt="heightCalculationMethod"in e?e.heightCalculationMethod:rt,Et="widthCalculationMethod"in e?e.widthCalculationMethod:Et}function o(t,e){return"function"==typeof t&&(s("Setup custom "+e+"CalcMethod"),Lt[e]=t,t="custom"),t}"iFrameResizer"in t&&Object===t.iFrameResizer.constructor&&(e(),rt=o(rt,"height"),Et=o(Et,"width")),s("TargetOrigin for parent set to: "+bt)}function u(t,e){return-1!==e.indexOf("-")&&(a("Negative CSS value ignored for "+t),e=""),e}function c(t,o){e!==o&&""!==o&&"null"!==o&&(document.body.style[t]=o,s("Body "+t+' set to "'+o+'"'))}function f(){e===Z&&(Z=Y+"px"),c("margin",u("margin",Z))}function y(){document.documentElement.style.height="",document.body.style.height="",s('HTML & body height set to "auto"')}function d(e){function r(){U(e.eventName,e.eventType)}var a={add:function(e){o(t,e,r)},remove:function(e){i(t,e,r)}};e.eventNames&&Array.prototype.map?(e.eventName=e.eventNames[0],e.eventNames.map(a[e.method])):a[e.method](e.eventName),s(n(e.method)+" event listener: "+e.eventType)}function g(t){d({method:t,eventType:"Animation Start",eventNames:["animationstart","webkitAnimationStart"]}),d({method:t,eventType:"Animation Iteration",eventNames:["animationiteration","webkitAnimationIteration"]}),d({method:t,eventType:"Animation End",eventNames:["animationend","webkitAnimationEnd"]}),d({method:t,eventType:"Input",eventName:"input"}),d({method:t,eventType:"Mouse Up",eventName:"mouseup"}),d({method:t,eventType:"Mouse Down",eventName:"mousedown"}),d({method:t,eventType:"Orientation Change",eventName:"orientationchange"}),d({method:t,eventType:"Print",eventName:["afterprint","beforeprint"]}),d({method:t,eventType:"Ready State Change",eventName:"readystatechange"}),d({method:t,eventType:"Touch Start",eventName:"touchstart"}),d({method:t,eventType:"Touch End",eventName:"touchend"}),d({method:t,eventType:"Touch Cancel",eventName:"touchcancel"}),d({method:t,eventType:"Transition Start",eventNames:["transitionstart","webkitTransitionStart","MSTransitionStart","oTransitionStart","otransitionstart"]
+}),d({method:t,eventType:"Transition Iteration",eventNames:["transitioniteration","webkitTransitionIteration","MSTransitionIteration","oTransitionIteration","otransitioniteration"]}),d({method:t,eventType:"Transition End",eventNames:["transitionend","webkitTransitionEnd","MSTransitionEnd","oTransitionEnd","otransitionend"]}),"child"===gt&&d({method:t,eventType:"IFrame Resized",eventName:"resize"})}function v(t,e,o,i){return e!==t&&(t in o||(a(t+" is not a valid option for "+i+"CalculationMethod."),t=e),s(i+' calculation method set to "'+t+'"')),t}function m(){rt=v(rt,nt,jt,"height")}function b(){Et=v(Et,Ct,It,"width")}function w(){!0===z?(g("add"),L()):s("Auto Resize disabled")}function x(){s("Disable outgoing messages"),vt=!1}function S(){s("Remove event listener: Message"),i(t,"message",X)}function T(){null!==_&&_.disconnect()}function M(){g("remove"),T(),clearInterval(ht)}function C(){x(),S(),!0===z&&M()}function E(){var t=document.createElement("div");t.style.clear="both",t.style.display="block",document.body.appendChild(t)}function P(){function i(){return{x:t.pageXOffset!==e?t.pageXOffset:document.documentElement.scrollLeft,y:t.pageYOffset!==e?t.pageYOffset:document.documentElement.scrollTop}}function n(t){var e=t.getBoundingClientRect(),o=i();return{x:parseInt(e.left,10)+parseInt(o.x,10),y:parseInt(e.top,10)+parseInt(o.y,10)}}function r(t){function o(t){var e=n(t);s("Moving to in page link (#"+i+") at x: "+e.x+" y: "+e.y),$(e.y,e.x,"scrollToOffset")}var i=t.split("#")[1]||t,r=decodeURIComponent(i),a=document.getElementById(r)||document.getElementsByName(r)[0];e!==a?o(a):(s("In page link (#"+i+") not found in iFrame, so sending to parent"),$(0,0,"inPageLink","#"+i))}function p(){""!==location.hash&&"#"!==location.hash&&r(location.href)}function l(){function t(t){function e(t){t.preventDefault(),r(this.getAttribute("href"))}"#"!==t.getAttribute("href")&&o(t,"click",e)}Array.prototype.forEach.call(document.querySelectorAll('a[href^="#"]'),t)}function h(){o(t,"hashchange",p)}function u(){setTimeout(p,et)}function c(){Array.prototype.forEach&&document.querySelectorAll?(s("Setting up location.hash handlers"),l(),h(),u()):a("In page linking not fully supported in this browser! (See README.md for IE8 workaround)")}return pt.enable?c():s("In page linking not enabled"),{findTarget:r}}function k(){s("Enable public methods"),Pt.parentIFrame={autoResize:function(t){return!0===t&&!1===z?(z=!0,w()):!1===t&&!0===z&&(z=!1,M()),z},close:function(){$(0,0,"close"),C()},getId:function(){return yt},getPageInfo:function(t){"function"==typeof t?(Rt=t,$(0,0,"pageInfo")):(Rt=function(){},$(0,0,"pageInfoStop"))},moveToAnchor:function(t){pt.findTarget(t)},reset:function(){q("parentIFrame.reset")},scrollTo:function(t,e){$(e,t,"scrollTo")},scrollToOffset:function(t,e){$(e,t,"scrollToOffset")},sendMessage:function(t,e){$(0,0,"message",JSON.stringify(t),e)},setHeightCalculationMethod:function(t){rt=t,m()},setWidthCalculationMethod:function(t){Et=t,b()},setTargetOrigin:function(t){s("Set targetOrigin: "+t),bt=t},size:function(t,e){var o=""+(t?t:"")+(e?","+e:"");U("size","parentIFrame.size("+o+")",t,e)}}}function A(){0!==lt&&(s("setInterval: "+lt+"ms"),ht=setInterval(function(){U("interval","setInterval: "+lt)},Math.abs(lt)))}function R(){function o(t){function e(t){!1===t.complete&&(s("Attach listeners to "+t.src),t.addEventListener("load",a,!1),t.addEventListener("error",p,!1),u.push(t))}"attributes"===t.type&&"src"===t.attributeName?e(t.target):"childList"===t.type&&Array.prototype.forEach.call(t.target.querySelectorAll("img"),e)}function i(t){u.splice(u.indexOf(t),1)}function n(t){s("Remove listeners from "+t.src),t.removeEventListener("load",a,!1),t.removeEventListener("error",p,!1),i(t)}function r(t,o,i){n(t.target),U(o,i+": "+t.target.src,e,e)}function a(t){r(t,"imageLoad","Image loaded")}function p(t){r(t,"imageLoadFailed","Image load failed")}function l(t){U("mutationObserver","mutationObserver: "+t[0].target+" "+t[0].type),t.forEach(o)}function h(){var t=document.querySelector("body"),e={attributes:!0,attributeOldValue:!1,characterData:!0,characterDataOldValue:!1,childList:!0,subtree:!0};return f=new c(l),s("Create body MutationObserver"),f.observe(t,e),f}var u=[],c=t.MutationObserver||t.WebKitMutationObserver,f=h();return{disconnect:function(){"disconnect"in f&&(s("Disconnect body MutationObserver"),f.disconnect(),u.forEach(n))}}}function L(){var e=0>lt;t.MutationObserver||t.WebKitMutationObserver?e?A():_=R():(s("MutationObserver not supported in this browser!"),A())}function N(t,e){function o(t){var o=/^\d+(px)?$/i;if(o.test(t))return parseInt(t,K);var i=e.style.left,n=e.runtimeStyle.left;return e.runtimeStyle.left=e.currentStyle.left,e.style.left=t||0,t=e.style.pixelLeft,e.style.left=i,e.runtimeStyle.left=n,t}var i=0;return e=e||document.body,"defaultView"in document&&"getComputedStyle"in document.defaultView?(i=document.defaultView.getComputedStyle(e,null),i=null!==i?i[t]:0):i=o(e.currentStyle[t]),parseInt(i,K)}function j(t){t>Tt/2&&(Tt=2*t,s("Event throttle increased to "+Tt+"ms"))}function I(t,e){for(var o=e.length,i=0,r=0,a=n(t),p=Nt(),l=0;o>l;l++)i=e[l].getBoundingClientRect()[t]+N("margin"+a,e[l]),i>r&&(r=i);return p=Nt()-p,s("Parsed "+o+" HTML elements"),s("Element position calculated in "+p+"ms"),j(p),r}function D(t){return[t.bodyOffset(),t.bodyScroll(),t.documentElementOffset(),t.documentElementScroll()]}function F(t,e){function o(){return a("No tagged elements ("+e+") found on page"),it}var i=document.querySelectorAll("["+e+"]");return 0===i.length?o():I(t,i)}function O(){return document.querySelectorAll("body *")}function B(t,o,i,n){function r(){it=c,Mt=f,$(it,Mt,t)}function a(){function t(t,e){var o=Math.abs(t-e)<=wt;return!o}return c=e!==i?i:jt[rt](),f=e!==n?n:It[Et](),t(it,c)||Q&&t(Mt,f)}function p(){return!(t in{init:1,interval:1,size:1})}function l(){return rt in dt||Q&&Et in dt}function h(){s("No change in size detected")}function u(){p()&&l()?q(o):t in{interval:1}||h()}var c,f;a()||"init"===t?(G(),r()):u()}function U(t,e,o,i){function n(){t in{reset:1,resetPage:1,init:1}||s("Trigger event: "+e)}function r(){return xt&&t in tt}r()?s("Trigger event cancelled: "+t):(n(),Dt(t,e,o,i))}function G(){xt||(xt=!0,s("Trigger event lock on")),clearTimeout(St),St=setTimeout(function(){xt=!1,s("Trigger event lock off"),s("--")},et)}function H(t){it=jt[rt](),Mt=It[Et](),$(it,Mt,t)}function q(t){var e=rt;rt=nt,s("Reset trigger event: "+t),G(),H("reset"),rt=e}function $(t,o,i,n,r){function a(){e===r?r=bt:s("Message targetOrigin: "+r)}function p(){var a=t+":"+o,p=yt+":"+a+":"+i+(e!==n?":"+n:"");s("Sending message to host page ("+p+")"),mt.postMessage(ct+p,r)}!0===vt&&(a(),p())}function X(e){function i(){return ct===(""+e.data).substr(0,ft)}function n(){function i(){at=e.data,mt=e.source,p(),ot=!1,setTimeout(function(){st=!1},et)}document.body?i():(s("Waiting for page ready"),o(t,"readystatechange",n))}function r(){st?s("Page reset ignored by init"):(s("Page size reset by host page"),H("resetPage"))}function l(){U("resizeParent","Parent window requested size check")}function h(){var t=c();pt.findTarget(t)}function u(){return e.data.split("]")[1].split(":")[0]}function c(){return e.data.substr(e.data.indexOf(":")+1)}function f(){return"iFrameResize"in t}function y(){var t=c();s("MessageCallback called from parent: "+t),kt(JSON.parse(t)),s(" --")}function d(){var t=c();s("PageInfoFromParent called from parent: "+t),Rt(JSON.parse(t)),s(" --")}function g(){return e.data.split(":")[2]in{"true":1,"false":1}}function v(){switch(u()){case"reset":r();break;case"resize":l();break;case"inPageLink":case"moveToAnchor":h();break;case"message":y();break;case"pageInfo":d();break;default:f()||g()||a("Unexpected message ("+e.data+")")}}function m(){!1===ot?v():g()?n():s('Ignored message of type "'+u()+'". Received before initialization.')}i()&&m()}function W(){"loading"!==document.readyState&&t.parent.postMessage("[iFrameResizerChild]Ready","*")}var z=!0,K=10,V="",Y=0,Z="",_=null,J="",Q=!1,tt={resize:1,click:1},et=128,ot=!0,it=1,nt="bodyOffset",rt=nt,st=!0,at="",pt={},lt=32,ht=null,ut=!1,ct="[iFrameSizer]",ft=ct.length,yt="",dt={max:1,min:1,bodyScroll:1,documentElementScroll:1},gt="child",vt=!0,mt=t.parent,bt="*",wt=0,xt=!1,St=null,Tt=16,Mt=1,Ct="scroll",Et=Ct,Pt=t,kt=function(){a("MessageCallback function not defined")},At=function(){},Rt=function(){},Lt={height:function(){return a("Custom height calculation function not defined"),document.documentElement.offsetHeight},width:function(){return a("Custom width calculation function not defined"),document.body.scrollWidth}},Nt=Date.now||function(){return(new Date).getTime()},jt={bodyOffset:function(){return document.body.offsetHeight+N("marginTop")+N("marginBottom")},offset:function(){return jt.bodyOffset()},bodyScroll:function(){return document.body.scrollHeight},custom:function(){return Lt.height()},documentElementOffset:function(){return document.documentElement.offsetHeight},documentElementScroll:function(){return document.documentElement.scrollHeight},max:function(){return Math.max.apply(null,D(jt))},min:function(){return Math.min.apply(null,D(jt))},grow:function(){return jt.max()},lowestElement:function(){return Math.max(jt.bodyOffset(),I("bottom",O()))},taggedElement:function(){return F("bottom","data-iframe-height")}},It={bodyScroll:function(){return document.body.scrollWidth},bodyOffset:function(){return document.body.offsetWidth},custom:function(){return Lt.width()},documentElementScroll:function(){return document.documentElement.scrollWidth},documentElementOffset:function(){return document.documentElement.offsetWidth},scroll:function(){return Math.max(It.bodyScroll(),It.documentElementScroll())},max:function(){return Math.max.apply(null,D(It))},min:function(){return Math.min.apply(null,D(It))},rightMostElement:function(){return I("right",O())},taggedElement:function(){return F("right","data-iframe-width")}},Dt=r(B);o(t,"message",X),W()}(window||{});
\ No newline at end of file
diff --git a/public/js/mapSearch.js b/public/js/mapSearch.js
index b7830fec79d49515860e5ec3e51065c73078c7e2..fd1628e965bbae26dca08757d043e246750aa123 100644
--- a/public/js/mapSearch.js
+++ b/public/js/mapSearch.js
@@ -1,20 +1,19 @@
-function success(t){var e=t.coords;map.getView().setCenter(ol.proj.transform([e.longitude,e.latitude],"EPSG:4326","EPSG:3857")),map.getView().setZoom(12),updateMapExtent()}function error(t){}function receiveLocation(){navigator.geolocation.getCurrentPosition(success,error,options)}function updateMapExtent(){var t=map.getView().calculateExtent([$("#map").width(),$("#map").height()]);extent=ol.proj.transform([t[0],t[1]],"EPSG:3857","EPSG:4326").concat(ol.proj.transform([t[2],t[3]],"EPSG:3857","EPSG:4326"))}function numberWithPoints(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,".")}function toggleResults(){"in"===$("#results").attr("data-status")?($("#closer").html("<"),$("#results").attr("data-status","out"),$("#closer").attr("title","Ergebnisse ausklappen"),updateResultsPosition(),updateCloserPosition()):($("#closer").html(">"),$("#results").attr("data-status","in"),$("#closer").attr("title","Ergebnisse einklappen"),updateResultsPosition(),updateCloserPosition())}function updateResultsPosition(){if("out"===$("#results").attr("data-status")){var t=$("#results").outerWidth()*-1;$("#results").css("right",t+"px")}else $("#results").css("right",0)}function updateCloserPosition(){if("out"===$("#results").attr("data-status"))$("#closer").css("right","0px");else{var t=$(window).width(),e=$("#results").width()-1,o=$("#closer").width();t>e+o?$("#closer").css("right",e+"px"):$("#closer").css("right",e-o+"px")}}function adjustView(t){if(!(t.length<=0)){for(var e=[],o=[],i=0;i<t.length&&(("undefined"==typeof e[0]||e[0]>parseFloat(t[i].lon))&&(e[0]=parseFloat(t[i].lon)),("undefined"==typeof e[0]||"undefined"!=typeof t[i].boundingbox&&e[0]>parseFloat(t[i].boundingbox[2]))&&(e[0]=parseFloat(t[i].boundingbox[2])),("undefined"==typeof e[1]||e[1]>parseFloat(t[i].lat))&&(e[1]=parseFloat(t[i].lat)),("undefined"==typeof e[1]||"undefined"!=typeof t[i].boundingbox&&e[1]>parseFloat(t[i].boundingbox[0]))&&(e[1]=parseFloat(t[i].boundingbox[0])),("undefined"==typeof o[0]||o[0]<parseFloat(t[i].lon))&&(o[0]=parseFloat(t[i].lon)),("undefined"==typeof o[0]||"undefined"!=typeof t[i].boundingbox&&o[0]<parseFloat(t[i].boundingbox[3]))&&(o[0]=parseFloat(t[i].boundingbox[3])),("undefined"==typeof o[1]||o[1]<parseFloat(t[i].lat))&&(o[1]=parseFloat(t[i].lat)),("undefined"==typeof o[1]||"undefined"!=typeof t[i].boundingbox&&o[1]<parseFloat(t[i].boundingbox[1]))&&(o[1]=parseFloat(t[i].boundingbox[1])),"undefined"==typeof t[i].type||"city"!==t[i].type&&"administrative"!==t[i].type&&"river"!==t[i].type);i++);e=ol.proj.transform(e,"EPSG:4326","EPSG:3857"),o=ol.proj.transform(o,"EPSG:4326","EPSG:3857"),map.getView().fitExtent([e[0],e[1],o[0],o[1]],map.getSize())}}function clearPOIS(){$.each(overlays,function(t,e){map.removeOverlay(e)}),map.removeLayer(vectorLayer),vectorSource=new ol.source.Vector,$("#results > .result").remove(),$("#results > h4").remove(),overlays=[]}function addMarker(t,e){var o=new ol.Overlay({position:e,element:t,offset:[-12,-45],stopEvent:!1});map.addOverlay(o),overlays.push(o)}function initMap(){popupOverlay=new ol.Overlay({element:$("#popup"),autoPan:!0,autoPanAnimation:{duration:250}}),map=new ol.Map({layers:[new ol.layer.Tile({preload:1/0,source:new ol.source.OSM({attributions:[new ol.Attribution({html:'All search results &copy; <a href="http://nominatim.openstreetmap.org/">Nominatim</a>'}),ol.source.OSM.ATTRIBUTION],url:"https://maps.metager.de/osm_tiles/{z}/{x}/{y}.png"})})],target:"map",controls:ol.control.defaults({attributionOptions:{collapsible:!0}}),overlays:[popupOverlay],view:new ol.View({maxZoom:18,minZoom:6,center:ol.proj.transform([10.06897,51.37247],"EPSG:4326","EPSG:3857"),zoom:6}),loadTilesWhileAnimating:!0,loadTilesWhileInteracting:!0}),map.addControl(new ol.control.ZoomSlider),$("#popup-closer").click(function(){return popupOverlay.setPosition(void 0),$(this).blur(),!1})}if(!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function o(t){var e=t.length,o=rt.type(t);return"function"!==o&&!rt.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===o||0===e||"number"==typeof e&&e>0&&e-1 in t))}function i(t,e,o){if(rt.isFunction(e))return rt.grep(t,function(t,i){return!!e.call(t,i,t)!==o});if(e.nodeType)return rt.grep(t,function(t){return t===e!==o});if("string"==typeof e){if(ct.test(e))return rt.filter(e,t,o);e=rt.filter(e,t)}return rt.grep(t,function(t){return rt.inArray(t,e)>=0!==o})}function r(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function n(t){var e=wt[t]={};return rt.each(t.match(bt)||[],function(t,o){e[o]=!0}),e}function s(){yt.addEventListener?(yt.removeEventListener("DOMContentLoaded",p,!1),t.removeEventListener("load",p,!1)):(yt.detachEvent("onreadystatechange",p),t.detachEvent("onload",p))}function p(){(yt.addEventListener||"load"===event.type||"complete"===yt.readyState)&&(s(),rt.ready())}function a(t,e,o){if(void 0===o&&1===t.nodeType){var i="data-"+e.replace(Mt,"-$1").toLowerCase();if(o=t.getAttribute(i),"string"==typeof o){try{o="true"===o||"false"!==o&&("null"===o?null:+o+""===o?+o:Et.test(o)?rt.parseJSON(o):o)}catch(r){}rt.data(t,e,o)}else o=void 0}return o}function h(t){var e;for(e in t)if(("data"!==e||!rt.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function l(t,e,o,i){if(rt.acceptData(t)){var r,n,s=rt.expando,p=t.nodeType,a=p?rt.cache:t,h=p?t[s]:t[s]&&s;if(h&&a[h]&&(i||a[h].data)||void 0!==o||"string"!=typeof e)return h||(h=p?t[s]=V.pop()||rt.guid++:s),a[h]||(a[h]=p?{}:{toJSON:rt.noop}),("object"==typeof e||"function"==typeof e)&&(i?a[h]=rt.extend(a[h],e):a[h].data=rt.extend(a[h].data,e)),n=a[h],i||(n.data||(n.data={}),n=n.data),void 0!==o&&(n[rt.camelCase(e)]=o),"string"==typeof e?(r=n[e],null==r&&(r=n[rt.camelCase(e)])):r=n,r}}function u(t,e,o){if(rt.acceptData(t)){var i,r,n=t.nodeType,s=n?rt.cache:t,p=n?t[rt.expando]:rt.expando;if(s[p]){if(e&&(i=o?s[p]:s[p].data)){rt.isArray(e)?e=e.concat(rt.map(e,rt.camelCase)):e in i?e=[e]:(e=rt.camelCase(e),e=e in i?[e]:e.split(" ")),r=e.length;for(;r--;)delete i[e[r]];if(o?!h(i):!rt.isEmptyObject(i))return}(o||(delete s[p].data,h(s[p])))&&(n?rt.cleanData([t],!0):ot.deleteExpando||s!=s.window?delete s[p]:s[p]=null)}}}function c(){return!0}function f(){return!1}function y(){try{return yt.activeElement}catch(t){}}function d(t){var e=Ft.split("|"),o=t.createDocumentFragment();if(o.createElement)for(;e.length;)o.createElement(e.pop());return o}function g(t,e){var o,i,r=0,n=typeof t.getElementsByTagName!==Tt?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==Tt?t.querySelectorAll(e||"*"):void 0;if(!n)for(n=[],o=t.childNodes||t;null!=(i=o[r]);r++)!e||rt.nodeName(i,e)?n.push(i):rt.merge(n,g(i,e));return void 0===e||e&&rt.nodeName(t,e)?rt.merge([t],n):n}function v(t){Nt.test(t.type)&&(t.defaultChecked=t.checked)}function m(t,e){return rt.nodeName(t,"table")&&rt.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function b(t){return t.type=(null!==rt.find.attr(t,"type"))+"/"+t.type,t}function w(t){var e=qt.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function x(t,e){for(var o,i=0;null!=(o=t[i]);i++)rt._data(o,"globalEval",!e||rt._data(e[i],"globalEval"))}function S(t,e){if(1===e.nodeType&&rt.hasData(t)){var o,i,r,n=rt._data(t),s=rt._data(e,n),p=n.events;if(p){delete s.handle,s.events={};for(o in p)for(i=0,r=p[o].length;r>i;i++)rt.event.add(e,o,p[o][i])}s.data&&(s.data=rt.extend({},s.data))}}function T(t,e){var o,i,r;if(1===e.nodeType){if(o=e.nodeName.toLowerCase(),!ot.noCloneEvent&&e[rt.expando]){r=rt._data(e);for(i in r.events)rt.removeEvent(e,i,r.handle);e.removeAttribute(rt.expando)}"script"===o&&e.text!==t.text?(b(e).text=t.text,w(e)):"object"===o?(e.parentNode&&(e.outerHTML=t.outerHTML),ot.html5Clone&&t.innerHTML&&!rt.trim(e.innerHTML)&&(e.innerHTML=t.innerHTML)):"input"===o&&Nt.test(t.type)?(e.defaultChecked=e.checked=t.checked,e.value!==t.value&&(e.value=t.value)):"option"===o?e.defaultSelected=e.selected=t.defaultSelected:("input"===o||"textarea"===o)&&(e.defaultValue=t.defaultValue)}}function E(e,o){var i,r=rt(o.createElement(e)).appendTo(o.body),n=t.getDefaultComputedStyle&&(i=t.getDefaultComputedStyle(r[0]))?i.display:rt.css(r[0],"display");return r.detach(),n}function M(t){var e=yt,o=Qt[t];return o||(o=E(t,e),"none"!==o&&o||(_t=(_t||rt("<iframe frameborder='0' width='0' height='0'/>")).appendTo(e.documentElement),e=(_t[0].contentWindow||_t[0].contentDocument).document,e.write(),e.close(),o=E(t,e),_t.detach()),Qt[t]=o),o}function C(t,e){return{get:function(){var o=t();if(null!=o)return o?void delete this.get:(this.get=e).apply(this,arguments)}}}function P(t,e){if(e in t)return e;for(var o=e.charAt(0).toUpperCase()+e.slice(1),i=e,r=ce.length;r--;)if(e=ce[r]+o,e in t)return e;return i}function A(t,e){for(var o,i,r,n=[],s=0,p=t.length;p>s;s++)i=t[s],i.style&&(n[s]=rt._data(i,"olddisplay"),o=i.style.display,e?(n[s]||"none"!==o||(i.style.display=""),""===i.style.display&&At(i)&&(n[s]=rt._data(i,"olddisplay",M(i.nodeName)))):(r=At(i),(o&&"none"!==o||!r)&&rt._data(i,"olddisplay",r?o:rt.css(i,"display"))));for(s=0;p>s;s++)i=t[s],i.style&&(e&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=e?n[s]||"":"none"));return t}function j(t,e,o){var i=ae.exec(e);return i?Math.max(0,i[1]-(o||0))+(i[2]||"px"):e}function N(t,e,o,i,r){for(var n=o===(i?"border":"content")?4:"width"===e?1:0,s=0;4>n;n+=2)"margin"===o&&(s+=rt.css(t,o+Pt[n],!0,r)),i?("content"===o&&(s-=rt.css(t,"padding"+Pt[n],!0,r)),"margin"!==o&&(s-=rt.css(t,"border"+Pt[n]+"Width",!0,r))):(s+=rt.css(t,"padding"+Pt[n],!0,r),"padding"!==o&&(s+=rt.css(t,"border"+Pt[n]+"Width",!0,r)));return s}function L(t,e,o){var i=!0,r="width"===e?t.offsetWidth:t.offsetHeight,n=te(t),s=ot.boxSizing&&"border-box"===rt.css(t,"boxSizing",!1,n);if(0>=r||null==r){if(r=ee(t,e,n),(0>r||null==r)&&(r=t.style[e]),ie.test(r))return r;i=s&&(ot.boxSizingReliable()||r===t.style[e]),r=parseFloat(r)||0}return r+N(t,e,o||(s?"border":"content"),i,n)+"px"}function R(t,e,o,i,r){return new R.prototype.init(t,e,o,i,r)}function k(){return setTimeout(function(){fe=void 0}),fe=rt.now()}function I(t,e){var o,i={height:t},r=0;for(e=e?1:0;4>r;r+=2-e)o=Pt[r],i["margin"+o]=i["padding"+o]=t;return e&&(i.opacity=i.width=t),i}function D(t,e,o){for(var i,r=(be[e]||[]).concat(be["*"]),n=0,s=r.length;s>n;n++)if(i=r[n].call(o,e,t))return i}function F(t,e,o){var i,r,n,s,p,a,h,l,u=this,c={},f=t.style,y=t.nodeType&&At(t),d=rt._data(t,"fxshow");o.queue||(p=rt._queueHooks(t,"fx"),null==p.unqueued&&(p.unqueued=0,a=p.empty.fire,p.empty.fire=function(){p.unqueued||a()}),p.unqueued++,u.always(function(){u.always(function(){p.unqueued--,rt.queue(t,"fx").length||p.empty.fire()})})),1===t.nodeType&&("height"in e||"width"in e)&&(o.overflow=[f.overflow,f.overflowX,f.overflowY],h=rt.css(t,"display"),l="none"===h?rt._data(t,"olddisplay")||M(t.nodeName):h,"inline"===l&&"none"===rt.css(t,"float")&&(ot.inlineBlockNeedsLayout&&"inline"!==M(t.nodeName)?f.zoom=1:f.display="inline-block")),o.overflow&&(f.overflow="hidden",ot.shrinkWrapBlocks()||u.always(function(){f.overflow=o.overflow[0],f.overflowX=o.overflow[1],f.overflowY=o.overflow[2]}));for(i in e)if(r=e[i],de.exec(r)){if(delete e[i],n=n||"toggle"===r,r===(y?"hide":"show")){if("show"!==r||!d||void 0===d[i])continue;y=!0}c[i]=d&&d[i]||rt.style(t,i)}else h=void 0;if(rt.isEmptyObject(c))"inline"===("none"===h?M(t.nodeName):h)&&(f.display=h);else{d?"hidden"in d&&(y=d.hidden):d=rt._data(t,"fxshow",{}),n&&(d.hidden=!y),y?rt(t).show():u.done(function(){rt(t).hide()}),u.done(function(){var e;rt._removeData(t,"fxshow");for(e in c)rt.style(t,e,c[e])});for(i in c)s=D(y?d[i]:0,i,u),i in d||(d[i]=s.start,y&&(s.end=s.start,s.start="width"===i||"height"===i?1:0))}}function O(t,e){var o,i,r,n,s;for(o in t)if(i=rt.camelCase(o),r=e[i],n=t[o],rt.isArray(n)&&(r=n[1],n=t[o]=n[0]),o!==i&&(t[i]=n,delete t[o]),s=rt.cssHooks[i],s&&"expand"in s){n=s.expand(n),delete t[i];for(o in n)o in t||(t[o]=n[o],e[o]=r)}else e[i]=r}function B(t,e,o){var i,r,n=0,s=me.length,p=rt.Deferred().always(function(){delete a.elem}),a=function(){if(r)return!1;for(var e=fe||k(),o=Math.max(0,h.startTime+h.duration-e),i=o/h.duration||0,n=1-i,s=0,a=h.tweens.length;a>s;s++)h.tweens[s].run(n);return p.notifyWith(t,[h,n,o]),1>n&&a?o:(p.resolveWith(t,[h]),!1)},h=p.promise({elem:t,props:rt.extend({},e),opts:rt.extend(!0,{specialEasing:{}},o),originalProperties:e,originalOptions:o,startTime:fe||k(),duration:o.duration,tweens:[],createTween:function(e,o){var i=rt.Tween(t,h.opts,e,o,h.opts.specialEasing[e]||h.opts.easing);return h.tweens.push(i),i},stop:function(e){var o=0,i=e?h.tweens.length:0;if(r)return this;for(r=!0;i>o;o++)h.tweens[o].run(1);return e?p.resolveWith(t,[h,e]):p.rejectWith(t,[h,e]),this}}),l=h.props;for(O(l,h.opts.specialEasing);s>n;n++)if(i=me[n].call(h,t,l,h.opts))return i;return rt.map(l,D,h),rt.isFunction(h.opts.start)&&h.opts.start.call(t,h),rt.fx.timer(rt.extend(a,{elem:t,anim:h,queue:h.opts.queue})),h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always)}function U(t){return function(e,o){"string"!=typeof e&&(o=e,e="*");var i,r=0,n=e.toLowerCase().match(bt)||[];if(rt.isFunction(o))for(;i=n[r++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(o)):(t[i]=t[i]||[]).push(o)}}function G(t,e,o,i){function r(p){var a;return n[p]=!0,rt.each(t[p]||[],function(t,p){var h=p(e,o,i);return"string"!=typeof h||s||n[h]?s?!(a=h):void 0:(e.dataTypes.unshift(h),r(h),!1)}),a}var n={},s=t===Xe;return r(e.dataTypes[0])||!n["*"]&&r("*")}function $(t,e){var o,i,r=rt.ajaxSettings.flatOptions||{};for(i in e)void 0!==e[i]&&((r[i]?t:o||(o={}))[i]=e[i]);return o&&rt.extend(!0,t,o),t}function H(t,e,o){for(var i,r,n,s,p=t.contents,a=t.dataTypes;"*"===a[0];)a.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader("Content-Type"));if(r)for(s in p)if(p[s]&&p[s].test(r)){a.unshift(s);break}if(a[0]in o)n=a[0];else{for(s in o){if(!a[0]||t.converters[s+" "+a[0]]){n=s;break}i||(i=s)}n=n||i}return n?(n!==a[0]&&a.unshift(n),o[n]):void 0}function X(t,e,o,i){var r,n,s,p,a,h={},l=t.dataTypes.slice();if(l[1])for(s in t.converters)h[s.toLowerCase()]=t.converters[s];for(n=l.shift();n;)if(t.responseFields[n]&&(o[t.responseFields[n]]=e),!a&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),a=n,n=l.shift())if("*"===n)n=a;else if("*"!==a&&a!==n){if(s=h[a+" "+n]||h["* "+n],!s)for(r in h)if(p=r.split(" "),p[1]===n&&(s=h[a+" "+p[0]]||h["* "+p[0]])){s===!0?s=h[r]:h[r]!==!0&&(n=p[0],l.unshift(p[1]));break}if(s!==!0)if(s&&t["throws"])e=s(e);else try{e=s(e)}catch(u){return{state:"parsererror",error:s?u:"No conversion from "+a+" to "+n}}}return{state:"success",data:e}}function K(t,e,o,i){var r;if(rt.isArray(e))rt.each(e,function(e,r){o||qe.test(t)?i(t,r):K(t+"["+("object"==typeof r?e:"")+"]",r,o,i)});else if(o||"object"!==rt.type(e))i(t,e);else for(r in e)K(t+"["+r+"]",e[r],o,i)}function W(){try{return new t.XMLHttpRequest}catch(e){}}function z(){try{return new t.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function q(t){return rt.isWindow(t)?t:9===t.nodeType&&(t.defaultView||t.parentWindow)}var V=[],Y=V.slice,Z=V.concat,J=V.push,_=V.indexOf,Q={},tt=Q.toString,et=Q.hasOwnProperty,ot={},it="1.11.2",rt=function(t,e){return new rt.fn.init(t,e)},nt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,st=/^-ms-/,pt=/-([\da-z])/gi,at=function(t,e){return e.toUpperCase()};rt.fn=rt.prototype={jquery:it,constructor:rt,selector:"",length:0,toArray:function(){return Y.call(this)},get:function(t){return null!=t?0>t?this[t+this.length]:this[t]:Y.call(this)},pushStack:function(t){var e=rt.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return rt.each(this,t,e)},map:function(t){return this.pushStack(rt.map(this,function(e,o){return t.call(e,o,e)}))},slice:function(){return this.pushStack(Y.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,o=+t+(0>t?e:0);return this.pushStack(o>=0&&e>o?[this[o]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:J,sort:V.sort,splice:V.splice},rt.extend=rt.fn.extend=function(){var t,e,o,i,r,n,s=arguments[0]||{},p=1,a=arguments.length,h=!1;for("boolean"==typeof s&&(h=s,s=arguments[p]||{},p++),"object"==typeof s||rt.isFunction(s)||(s={}),p===a&&(s=this,p--);a>p;p++)if(null!=(r=arguments[p]))for(i in r)t=s[i],o=r[i],s!==o&&(h&&o&&(rt.isPlainObject(o)||(e=rt.isArray(o)))?(e?(e=!1,n=t&&rt.isArray(t)?t:[]):n=t&&rt.isPlainObject(t)?t:{},s[i]=rt.extend(h,n,o)):void 0!==o&&(s[i]=o));return s},rt.extend({expando:"jQuery"+(it+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return"function"===rt.type(t)},isArray:Array.isArray||function(t){return"array"===rt.type(t)},isWindow:function(t){return null!=t&&t==t.window},isNumeric:function(t){return!rt.isArray(t)&&t-parseFloat(t)+1>=0},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},isPlainObject:function(t){var e;if(!t||"object"!==rt.type(t)||t.nodeType||rt.isWindow(t))return!1;try{if(t.constructor&&!et.call(t,"constructor")&&!et.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(o){return!1}if(ot.ownLast)for(e in t)return et.call(t,e);for(e in t);return void 0===e||et.call(t,e)},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?Q[tt.call(t)]||"object":typeof t},globalEval:function(e){e&&rt.trim(e)&&(t.execScript||function(e){t.eval.call(t,e)})(e)},camelCase:function(t){return t.replace(st,"ms-").replace(pt,at)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var r,n=0,s=t.length,p=o(t);if(i){if(p)for(;s>n&&(r=e.apply(t[n],i),r!==!1);n++);else for(n in t)if(r=e.apply(t[n],i),r===!1)break}else if(p)for(;s>n&&(r=e.call(t[n],n,t[n]),r!==!1);n++);else for(n in t)if(r=e.call(t[n],n,t[n]),r===!1)break;return t},trim:function(t){return null==t?"":(t+"").replace(nt,"")},makeArray:function(t,e){var i=e||[];return null!=t&&(o(Object(t))?rt.merge(i,"string"==typeof t?[t]:t):J.call(i,t)),i},inArray:function(t,e,o){var i;if(e){if(_)return _.call(e,t,o);for(i=e.length,o=o?0>o?Math.max(0,i+o):o:0;i>o;o++)if(o in e&&e[o]===t)return o}return-1},merge:function(t,e){for(var o=+e.length,i=0,r=t.length;o>i;)t[r++]=e[i++];if(o!==o)for(;void 0!==e[i];)t[r++]=e[i++];return t.length=r,t},grep:function(t,e,o){for(var i,r=[],n=0,s=t.length,p=!o;s>n;n++)i=!e(t[n],n),i!==p&&r.push(t[n]);return r},map:function(t,e,i){var r,n=0,s=t.length,p=o(t),a=[];if(p)for(;s>n;n++)r=e(t[n],n,i),null!=r&&a.push(r);else for(n in t)r=e(t[n],n,i),null!=r&&a.push(r);return Z.apply([],a)},guid:1,proxy:function(t,e){var o,i,r;return"string"==typeof e&&(r=t[e],e=t,t=r),rt.isFunction(t)?(o=Y.call(arguments,2),i=function(){return t.apply(e||this,o.concat(Y.call(arguments)))},i.guid=t.guid=t.guid||rt.guid++,i):void 0},now:function(){return+new Date},support:ot}),rt.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){Q["[object "+e+"]"]=e.toLowerCase()});var ht=function(t){function e(t,e,o,i){var r,n,s,p,a,h,u,f,y,d;if((e?e.ownerDocument||e:G)!==R&&L(e),e=e||R,o=o||[],p=e.nodeType,"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return o;if(!i&&I){if(11!==p&&(r=mt.exec(t)))if(s=r[1]){if(9===p){if(n=e.getElementById(s),!n||!n.parentNode)return o;if(n.id===s)return o.push(n),o}else if(e.ownerDocument&&(n=e.ownerDocument.getElementById(s))&&B(e,n)&&n.id===s)return o.push(n),o}else{if(r[2])return _.apply(o,e.getElementsByTagName(t)),o;if((s=r[3])&&x.getElementsByClassName)return _.apply(o,e.getElementsByClassName(s)),o}if(x.qsa&&(!D||!D.test(t))){if(f=u=U,y=e,d=1!==p&&t,1===p&&"object"!==e.nodeName.toLowerCase()){for(h=M(t),(u=e.getAttribute("id"))?f=u.replace(wt,"\\$&"):e.setAttribute("id",f),f="[id='"+f+"'] ",a=h.length;a--;)h[a]=f+c(h[a]);y=bt.test(t)&&l(e.parentNode)||e,d=h.join(",")}if(d)try{return _.apply(o,y.querySelectorAll(d)),o}catch(g){}finally{u||e.removeAttribute("id")}}}return P(t.replace(at,"$1"),e,o,i)}function o(){function t(o,i){return e.push(o+" ")>S.cacheLength&&delete t[e.shift()],t[o+" "]=i}var e=[];return t}function i(t){return t[U]=!0,t}function r(t){var e=R.createElement("div");try{return!!t(e)}catch(o){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function n(t,e){for(var o=t.split("|"),i=t.length;i--;)S.attrHandle[o[i]]=e}function s(t,e){var o=e&&t,i=o&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||q)-(~t.sourceIndex||q);if(i)return i;if(o)for(;o=o.nextSibling;)if(o===e)return-1;return t?1:-1}function p(t){return function(e){var o=e.nodeName.toLowerCase();return"input"===o&&e.type===t}}function a(t){return function(e){var o=e.nodeName.toLowerCase();return("input"===o||"button"===o)&&e.type===t}}function h(t){return i(function(e){return e=+e,i(function(o,i){for(var r,n=t([],o.length,e),s=n.length;s--;)o[r=n[s]]&&(o[r]=!(i[r]=o[r]))})})}function l(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function u(){}function c(t){for(var e=0,o=t.length,i="";o>e;e++)i+=t[e].value;return i}function f(t,e,o){var i=e.dir,r=o&&"parentNode"===i,n=H++;return e.first?function(e,o,n){for(;e=e[i];)if(1===e.nodeType||r)return t(e,o,n)}:function(e,o,s){var p,a,h=[$,n];if(s){for(;e=e[i];)if((1===e.nodeType||r)&&t(e,o,s))return!0}else for(;e=e[i];)if(1===e.nodeType||r){if(a=e[U]||(e[U]={}),(p=a[i])&&p[0]===$&&p[1]===n)return h[2]=p[2];if(a[i]=h,h[2]=t(e,o,s))return!0}}}function y(t){return t.length>1?function(e,o,i){for(var r=t.length;r--;)if(!t[r](e,o,i))return!1;return!0}:t[0]}function d(t,o,i){for(var r=0,n=o.length;n>r;r++)e(t,o[r],i);return i}function g(t,e,o,i,r){for(var n,s=[],p=0,a=t.length,h=null!=e;a>p;p++)(n=t[p])&&(!o||o(n,i,r))&&(s.push(n),h&&e.push(p));return s}function v(t,e,o,r,n,s){return r&&!r[U]&&(r=v(r)),n&&!n[U]&&(n=v(n,s)),i(function(i,s,p,a){var h,l,u,c=[],f=[],y=s.length,v=i||d(e||"*",p.nodeType?[p]:p,[]),m=!t||!i&&e?v:g(v,c,t,p,a),b=o?n||(i?t:y||r)?[]:s:m;if(o&&o(m,b,p,a),r)for(h=g(b,f),r(h,[],p,a),l=h.length;l--;)(u=h[l])&&(b[f[l]]=!(m[f[l]]=u));if(i){if(n||t){if(n){for(h=[],l=b.length;l--;)(u=b[l])&&h.push(m[l]=u);n(null,b=[],h,a)}for(l=b.length;l--;)(u=b[l])&&(h=n?tt(i,u):c[l])>-1&&(i[h]=!(s[h]=u))}}else b=g(b===s?b.splice(y,b.length):b),n?n(null,s,b,a):_.apply(s,b)})}function m(t){for(var e,o,i,r=t.length,n=S.relative[t[0].type],s=n||S.relative[" "],p=n?1:0,a=f(function(t){return t===e},s,!0),h=f(function(t){return tt(e,t)>-1},s,!0),l=[function(t,o,i){var r=!n&&(i||o!==A)||((e=o).nodeType?a(t,o,i):h(t,o,i));return e=null,r}];r>p;p++)if(o=S.relative[t[p].type])l=[f(y(l),o)];else{if(o=S.filter[t[p].type].apply(null,t[p].matches),o[U]){for(i=++p;r>i&&!S.relative[t[i].type];i++);return v(p>1&&y(l),p>1&&c(t.slice(0,p-1).concat({value:" "===t[p-2].type?"*":""})).replace(at,"$1"),o,i>p&&m(t.slice(p,i)),r>i&&m(t=t.slice(i)),r>i&&c(t))}l.push(o)}return y(l)}function b(t,o){var r=o.length>0,n=t.length>0,s=function(i,s,p,a,h){var l,u,c,f=0,y="0",d=i&&[],v=[],m=A,b=i||n&&S.find.TAG("*",h),w=$+=null==m?1:Math.random()||.1,x=b.length;for(h&&(A=s!==R&&s);y!==x&&null!=(l=b[y]);y++){if(n&&l){for(u=0;c=t[u++];)if(c(l,s,p)){a.push(l);break}h&&($=w)}r&&((l=!c&&l)&&f--,i&&d.push(l))}if(f+=y,r&&y!==f){for(u=0;c=o[u++];)c(d,v,s,p);if(i){if(f>0)for(;y--;)d[y]||v[y]||(v[y]=Z.call(a));v=g(v)}_.apply(a,v),h&&!i&&v.length>0&&f+o.length>1&&e.uniqueSort(a)}return h&&($=w,A=m),d};return r?i(s):s}var w,x,S,T,E,M,C,P,A,j,N,L,R,k,I,D,F,O,B,U="sizzle"+1*new Date,G=t.document,$=0,H=0,X=o(),K=o(),W=o(),z=function(t,e){return t===e&&(N=!0),0},q=1<<31,V={}.hasOwnProperty,Y=[],Z=Y.pop,J=Y.push,_=Y.push,Q=Y.slice,tt=function(t,e){for(var o=0,i=t.length;i>o;o++)if(t[o]===e)return o;return-1},et="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ot="[\\x20\\t\\r\\n\\f]",it="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",rt=it.replace("w","w#"),nt="\\["+ot+"*("+it+")(?:"+ot+"*([*^$|!~]?=)"+ot+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+rt+"))|)"+ot+"*\\]",st=":("+it+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+nt+")*)|.*)\\)|)",pt=new RegExp(ot+"+","g"),at=new RegExp("^"+ot+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ot+"+$","g"),ht=new RegExp("^"+ot+"*,"+ot+"*"),lt=new RegExp("^"+ot+"*([>+~]|"+ot+")"+ot+"*"),ut=new RegExp("="+ot+"*([^\\]'\"]*?)"+ot+"*\\]","g"),ct=new RegExp(st),ft=new RegExp("^"+rt+"$"),yt={ID:new RegExp("^#("+it+")"),CLASS:new RegExp("^\\.("+it+")"),TAG:new RegExp("^("+it.replace("w","w*")+")"),ATTR:new RegExp("^"+nt),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ot+"*(even|odd|(([+-]|)(\\d*)n|)"+ot+"*(?:([+-]|)"+ot+"*(\\d+)|))"+ot+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+ot+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ot+"*((?:-\\d)?\\d*)"+ot+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,gt=/^h\d$/i,vt=/^[^{]+\{\s*\[native \w/,mt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,bt=/[+~]/,wt=/'|\\/g,xt=new RegExp("\\\\([\\da-f]{1,6}"+ot+"?|("+ot+")|.)","ig"),St=function(t,e,o){var i="0x"+e-65536;return i!==i||o?e:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Tt=function(){L()};try{_.apply(Y=Q.call(G.childNodes),G.childNodes),Y[G.childNodes.length].nodeType}catch(Et){_={apply:Y.length?function(t,e){J.apply(t,Q.call(e))}:function(t,e){for(var o=t.length,i=0;t[o++]=e[i++];);t.length=o-1}}}x=e.support={},E=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},L=e.setDocument=function(t){var e,o,i=t?t.ownerDocument||t:G;return i!==R&&9===i.nodeType&&i.documentElement?(R=i,k=i.documentElement,o=i.defaultView,o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",Tt,!1):o.attachEvent&&o.attachEvent("onunload",Tt)),I=!E(i),x.attributes=r(function(t){return t.className="i",!t.getAttribute("className")}),x.getElementsByTagName=r(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),x.getElementsByClassName=vt.test(i.getElementsByClassName),x.getById=r(function(t){return k.appendChild(t).id=U,!i.getElementsByName||!i.getElementsByName(U).length}),x.getById?(S.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&I){var o=e.getElementById(t);return o&&o.parentNode?[o]:[]}},S.filter.ID=function(t){var e=t.replace(xt,St);return function(t){return t.getAttribute("id")===e}}):(delete S.find.ID,S.filter.ID=function(t){var e=t.replace(xt,St);return function(t){var o="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return o&&o.value===e}}),S.find.TAG=x.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):x.qsa?e.querySelectorAll(t):void 0}:function(t,e){var o,i=[],r=0,n=e.getElementsByTagName(t);if("*"===t){for(;o=n[r++];)1===o.nodeType&&i.push(o);return i}return n},S.find.CLASS=x.getElementsByClassName&&function(t,e){return I?e.getElementsByClassName(t):void 0},F=[],D=[],(x.qsa=vt.test(i.querySelectorAll))&&(r(function(t){k.appendChild(t).innerHTML="<a id='"+U+"'></a><select id='"+U+"-\f]' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&D.push("[*^$]="+ot+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||D.push("\\["+ot+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+U+"-]").length||D.push("~="),t.querySelectorAll(":checked").length||D.push(":checked"),t.querySelectorAll("a#"+U+"+*").length||D.push(".#.+[+~]")}),r(function(t){var e=i.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&D.push("name"+ot+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||D.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),D.push(",.*:")})),(x.matchesSelector=vt.test(O=k.matches||k.webkitMatchesSelector||k.mozMatchesSelector||k.oMatchesSelector||k.msMatchesSelector))&&r(function(t){x.disconnectedMatch=O.call(t,"div"),O.call(t,"[s!='']:x"),F.push("!=",st)}),D=D.length&&new RegExp(D.join("|")),F=F.length&&new RegExp(F.join("|")),e=vt.test(k.compareDocumentPosition),B=e||vt.test(k.contains)?function(t,e){var o=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(o.contains?o.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},z=e?function(t,e){if(t===e)return N=!0,0;var o=!t.compareDocumentPosition-!e.compareDocumentPosition;return o?o:(o=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&o||!x.sortDetached&&e.compareDocumentPosition(t)===o?t===i||t.ownerDocument===G&&B(G,t)?-1:e===i||e.ownerDocument===G&&B(G,e)?1:j?tt(j,t)-tt(j,e):0:4&o?-1:1)}:function(t,e){if(t===e)return N=!0,0;var o,r=0,n=t.parentNode,p=e.parentNode,a=[t],h=[e];if(!n||!p)return t===i?-1:e===i?1:n?-1:p?1:j?tt(j,t)-tt(j,e):0;if(n===p)return s(t,e);for(o=t;o=o.parentNode;)a.unshift(o);for(o=e;o=o.parentNode;)h.unshift(o);for(;a[r]===h[r];)r++;return r?s(a[r],h[r]):a[r]===G?-1:h[r]===G?1:0},i):R},e.matches=function(t,o){return e(t,null,null,o)},e.matchesSelector=function(t,o){if((t.ownerDocument||t)!==R&&L(t),o=o.replace(ut,"='$1']"),!(!x.matchesSelector||!I||F&&F.test(o)||D&&D.test(o)))try{var i=O.call(t,o);if(i||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(r){}return e(o,R,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==R&&L(t),B(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==R&&L(t);var o=S.attrHandle[e.toLowerCase()],i=o&&V.call(S.attrHandle,e.toLowerCase())?o(t,e,!I):void 0;return void 0!==i?i:x.attributes||!I?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,o=[],i=0,r=0;if(N=!x.detectDuplicates,j=!x.sortStable&&t.slice(0),t.sort(z),N){for(;e=t[r++];)e===t[r]&&(i=o.push(r));for(;i--;)t.splice(o[i],1)}return j=null,t},T=e.getText=function(t){var e,o="",i=0,r=t.nodeType;if(r){if(1===r||9===r||11===r){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)o+=T(t)}else if(3===r||4===r)return t.nodeValue}else for(;e=t[i++];)o+=T(e);return o},S=e.selectors={cacheLength:50,createPseudo:i,match:yt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(xt,St),t[3]=(t[3]||t[4]||t[5]||"").replace(xt,St),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,o=!t[6]&&t[2];return yt.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":o&&ct.test(o)&&(e=M(o,!0))&&(e=o.indexOf(")",o.length-e)-o.length)&&(t[0]=t[0].slice(0,e),t[2]=o.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(xt,St).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=X[t+" "];return e||(e=new RegExp("(^|"+ot+")"+t+"("+ot+"|$)"))&&X(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,o,i){return function(r){var n=e.attr(r,t);return null==n?"!="===o:!o||(n+="","="===o?n===i:"!="===o?n!==i:"^="===o?i&&0===n.indexOf(i):"*="===o?i&&n.indexOf(i)>-1:"$="===o?i&&n.slice(-i.length)===i:"~="===o?(" "+n.replace(pt," ")+" ").indexOf(i)>-1:"|="===o&&(n===i||n.slice(0,i.length+1)===i+"-"));
-}},CHILD:function(t,e,o,i,r){var n="nth"!==t.slice(0,3),s="last"!==t.slice(-4),p="of-type"===e;return 1===i&&0===r?function(t){return!!t.parentNode}:function(e,o,a){var h,l,u,c,f,y,d=n!==s?"nextSibling":"previousSibling",g=e.parentNode,v=p&&e.nodeName.toLowerCase(),m=!a&&!p;if(g){if(n){for(;d;){for(u=e;u=u[d];)if(p?u.nodeName.toLowerCase()===v:1===u.nodeType)return!1;y=d="only"===t&&!y&&"nextSibling"}return!0}if(y=[s?g.firstChild:g.lastChild],s&&m){for(l=g[U]||(g[U]={}),h=l[t]||[],f=h[0]===$&&h[1],c=h[0]===$&&h[2],u=f&&g.childNodes[f];u=++f&&u&&u[d]||(c=f=0)||y.pop();)if(1===u.nodeType&&++c&&u===e){l[t]=[$,f,c];break}}else if(m&&(h=(e[U]||(e[U]={}))[t])&&h[0]===$)c=h[1];else for(;(u=++f&&u&&u[d]||(c=f=0)||y.pop())&&((p?u.nodeName.toLowerCase()!==v:1!==u.nodeType)||!++c||(m&&((u[U]||(u[U]={}))[t]=[$,c]),u!==e)););return c-=r,c===i||c%i===0&&c/i>=0}}},PSEUDO:function(t,o){var r,n=S.pseudos[t]||S.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return n[U]?n(o):n.length>1?(r=[t,t,"",o],S.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,r=n(t,o),s=r.length;s--;)i=tt(t,r[s]),t[i]=!(e[i]=r[s])}):function(t){return n(t,0,r)}):n}},pseudos:{not:i(function(t){var e=[],o=[],r=C(t.replace(at,"$1"));return r[U]?i(function(t,e,o,i){for(var n,s=r(t,null,i,[]),p=t.length;p--;)(n=s[p])&&(t[p]=!(e[p]=n))}):function(t,i,n){return e[0]=t,r(e,null,n,o),e[0]=null,!o.pop()}}),has:i(function(t){return function(o){return e(t,o).length>0}}),contains:i(function(t){return t=t.replace(xt,St),function(e){return(e.textContent||e.innerText||T(e)).indexOf(t)>-1}}),lang:i(function(t){return ft.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(xt,St).toLowerCase(),function(e){var o;do if(o=I?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return o=o.toLowerCase(),o===t||0===o.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var o=t.location&&t.location.hash;return o&&o.slice(1)===e.id},root:function(t){return t===k},focus:function(t){return t===R.activeElement&&(!R.hasFocus||R.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!S.pseudos.empty(t)},header:function(t){return gt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:h(function(){return[0]}),last:h(function(t,e){return[e-1]}),eq:h(function(t,e,o){return[0>o?o+e:o]}),even:h(function(t,e){for(var o=0;e>o;o+=2)t.push(o);return t}),odd:h(function(t,e){for(var o=1;e>o;o+=2)t.push(o);return t}),lt:h(function(t,e,o){for(var i=0>o?o+e:o;--i>=0;)t.push(i);return t}),gt:h(function(t,e,o){for(var i=0>o?o+e:o;++i<e;)t.push(i);return t})}},S.pseudos.nth=S.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})S.pseudos[w]=p(w);for(w in{submit:!0,reset:!0})S.pseudos[w]=a(w);return u.prototype=S.filters=S.pseudos,S.setFilters=new u,M=e.tokenize=function(t,o){var i,r,n,s,p,a,h,l=K[t+" "];if(l)return o?0:l.slice(0);for(p=t,a=[],h=S.preFilter;p;){(!i||(r=ht.exec(p)))&&(r&&(p=p.slice(r[0].length)||p),a.push(n=[])),i=!1,(r=lt.exec(p))&&(i=r.shift(),n.push({value:i,type:r[0].replace(at," ")}),p=p.slice(i.length));for(s in S.filter)!(r=yt[s].exec(p))||h[s]&&!(r=h[s](r))||(i=r.shift(),n.push({value:i,type:s,matches:r}),p=p.slice(i.length));if(!i)break}return o?p.length:p?e.error(t):K(t,a).slice(0)},C=e.compile=function(t,e){var o,i=[],r=[],n=W[t+" "];if(!n){for(e||(e=M(t)),o=e.length;o--;)n=m(e[o]),n[U]?i.push(n):r.push(n);n=W(t,b(r,i)),n.selector=t}return n},P=e.select=function(t,e,o,i){var r,n,s,p,a,h="function"==typeof t&&t,u=!i&&M(t=h.selector||t);if(o=o||[],1===u.length){if(n=u[0]=u[0].slice(0),n.length>2&&"ID"===(s=n[0]).type&&x.getById&&9===e.nodeType&&I&&S.relative[n[1].type]){if(e=(S.find.ID(s.matches[0].replace(xt,St),e)||[])[0],!e)return o;h&&(e=e.parentNode),t=t.slice(n.shift().value.length)}for(r=yt.needsContext.test(t)?0:n.length;r--&&(s=n[r],!S.relative[p=s.type]);)if((a=S.find[p])&&(i=a(s.matches[0].replace(xt,St),bt.test(n[0].type)&&l(e.parentNode)||e))){if(n.splice(r,1),t=i.length&&c(n),!t)return _.apply(o,i),o;break}}return(h||C(t,u))(i,e,!I,o,bt.test(t)&&l(e.parentNode)||e),o},x.sortStable=U.split("").sort(z).join("")===U,x.detectDuplicates=!!N,L(),x.sortDetached=r(function(t){return 1&t.compareDocumentPosition(R.createElement("div"))}),r(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||n("type|href|height|width",function(t,e,o){return o?void 0:t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),x.attributes&&r(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||n("value",function(t,e,o){return o||"input"!==t.nodeName.toLowerCase()?void 0:t.defaultValue}),r(function(t){return null==t.getAttribute("disabled")})||n(et,function(t,e,o){var i;return o?void 0:t[e]===!0?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),e}(t);rt.find=ht,rt.expr=ht.selectors,rt.expr[":"]=rt.expr.pseudos,rt.unique=ht.uniqueSort,rt.text=ht.getText,rt.isXMLDoc=ht.isXML,rt.contains=ht.contains;var lt=rt.expr.match.needsContext,ut=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ct=/^.[^:#\[\.,]*$/;rt.filter=function(t,e,o){var i=e[0];return o&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?rt.find.matchesSelector(i,t)?[i]:[]:rt.find.matches(t,rt.grep(e,function(t){return 1===t.nodeType}))},rt.fn.extend({find:function(t){var e,o=[],i=this,r=i.length;if("string"!=typeof t)return this.pushStack(rt(t).filter(function(){for(e=0;r>e;e++)if(rt.contains(i[e],this))return!0}));for(e=0;r>e;e++)rt.find(t,i[e],o);return o=this.pushStack(r>1?rt.unique(o):o),o.selector=this.selector?this.selector+" "+t:t,o},filter:function(t){return this.pushStack(i(this,t||[],!1))},not:function(t){return this.pushStack(i(this,t||[],!0))},is:function(t){return!!i(this,"string"==typeof t&&lt.test(t)?rt(t):t||[],!1).length}});var ft,yt=t.document,dt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,gt=rt.fn.init=function(t,e){var o,i;if(!t)return this;if("string"==typeof t){if(o="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3?[null,t,null]:dt.exec(t),!o||!o[1]&&e)return!e||e.jquery?(e||ft).find(t):this.constructor(e).find(t);if(o[1]){if(e=e instanceof rt?e[0]:e,rt.merge(this,rt.parseHTML(o[1],e&&e.nodeType?e.ownerDocument||e:yt,!0)),ut.test(o[1])&&rt.isPlainObject(e))for(o in e)rt.isFunction(this[o])?this[o](e[o]):this.attr(o,e[o]);return this}if(i=yt.getElementById(o[2]),i&&i.parentNode){if(i.id!==o[2])return ft.find(t);this.length=1,this[0]=i}return this.context=yt,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):rt.isFunction(t)?"undefined"!=typeof ft.ready?ft.ready(t):t(rt):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),rt.makeArray(t,this))};gt.prototype=rt.fn,ft=rt(yt);var vt=/^(?:parents|prev(?:Until|All))/,mt={children:!0,contents:!0,next:!0,prev:!0};rt.extend({dir:function(t,e,o){for(var i=[],r=t[e];r&&9!==r.nodeType&&(void 0===o||1!==r.nodeType||!rt(r).is(o));)1===r.nodeType&&i.push(r),r=r[e];return i},sibling:function(t,e){for(var o=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&o.push(t);return o}}),rt.fn.extend({has:function(t){var e,o=rt(t,this),i=o.length;return this.filter(function(){for(e=0;i>e;e++)if(rt.contains(this,o[e]))return!0})},closest:function(t,e){for(var o,i=0,r=this.length,n=[],s=lt.test(t)||"string"!=typeof t?rt(t,e||this.context):0;r>i;i++)for(o=this[i];o&&o!==e;o=o.parentNode)if(o.nodeType<11&&(s?s.index(o)>-1:1===o.nodeType&&rt.find.matchesSelector(o,t))){n.push(o);break}return this.pushStack(n.length>1?rt.unique(n):n)},index:function(t){return t?"string"==typeof t?rt.inArray(this[0],rt(t)):rt.inArray(t.jquery?t[0]:t,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(rt.unique(rt.merge(this.get(),rt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),rt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return rt.dir(t,"parentNode")},parentsUntil:function(t,e,o){return rt.dir(t,"parentNode",o)},next:function(t){return r(t,"nextSibling")},prev:function(t){return r(t,"previousSibling")},nextAll:function(t){return rt.dir(t,"nextSibling")},prevAll:function(t){return rt.dir(t,"previousSibling")},nextUntil:function(t,e,o){return rt.dir(t,"nextSibling",o)},prevUntil:function(t,e,o){return rt.dir(t,"previousSibling",o)},siblings:function(t){return rt.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return rt.sibling(t.firstChild)},contents:function(t){return rt.nodeName(t,"iframe")?t.contentDocument||t.contentWindow.document:rt.merge([],t.childNodes)}},function(t,e){rt.fn[t]=function(o,i){var r=rt.map(this,e,o);return"Until"!==t.slice(-5)&&(i=o),i&&"string"==typeof i&&(r=rt.filter(i,r)),this.length>1&&(mt[t]||(r=rt.unique(r)),vt.test(t)&&(r=r.reverse())),this.pushStack(r)}});var bt=/\S+/g,wt={};rt.Callbacks=function(t){t="string"==typeof t?wt[t]||n(t):rt.extend({},t);var e,o,i,r,s,p,a=[],h=!t.once&&[],l=function(n){for(o=t.memory&&n,i=!0,s=p||0,p=0,r=a.length,e=!0;a&&r>s;s++)if(a[s].apply(n[0],n[1])===!1&&t.stopOnFalse){o=!1;break}e=!1,a&&(h?h.length&&l(h.shift()):o?a=[]:u.disable())},u={add:function(){if(a){var i=a.length;!function n(e){rt.each(e,function(e,o){var i=rt.type(o);"function"===i?t.unique&&u.has(o)||a.push(o):o&&o.length&&"string"!==i&&n(o)})}(arguments),e?r=a.length:o&&(p=i,l(o))}return this},remove:function(){return a&&rt.each(arguments,function(t,o){for(var i;(i=rt.inArray(o,a,i))>-1;)a.splice(i,1),e&&(r>=i&&r--,s>=i&&s--)}),this},has:function(t){return t?rt.inArray(t,a)>-1:!(!a||!a.length)},empty:function(){return a=[],r=0,this},disable:function(){return a=h=o=void 0,this},disabled:function(){return!a},lock:function(){return h=void 0,o||u.disable(),this},locked:function(){return!h},fireWith:function(t,o){return!a||i&&!h||(o=o||[],o=[t,o.slice?o.slice():o],e?h.push(o):l(o)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},rt.extend({Deferred:function(t){var e=[["resolve","done",rt.Callbacks("once memory"),"resolved"],["reject","fail",rt.Callbacks("once memory"),"rejected"],["notify","progress",rt.Callbacks("memory")]],o="pending",i={state:function(){return o},always:function(){return r.done(arguments).fail(arguments),this},then:function(){var t=arguments;return rt.Deferred(function(o){rt.each(e,function(e,n){var s=rt.isFunction(t[e])&&t[e];r[n[1]](function(){var t=s&&s.apply(this,arguments);t&&rt.isFunction(t.promise)?t.promise().done(o.resolve).fail(o.reject).progress(o.notify):o[n[0]+"With"](this===i?o.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?rt.extend(t,i):i}},r={};return i.pipe=i.then,rt.each(e,function(t,n){var s=n[2],p=n[3];i[n[1]]=s.add,p&&s.add(function(){o=p},e[1^t][2].disable,e[2][2].lock),r[n[0]]=function(){return r[n[0]+"With"](this===r?i:this,arguments),this},r[n[0]+"With"]=s.fireWith}),i.promise(r),t&&t.call(r,r),r},when:function(t){var e,o,i,r=0,n=Y.call(arguments),s=n.length,p=1!==s||t&&rt.isFunction(t.promise)?s:0,a=1===p?t:rt.Deferred(),h=function(t,o,i){return function(r){o[t]=this,i[t]=arguments.length>1?Y.call(arguments):r,i===e?a.notifyWith(o,i):--p||a.resolveWith(o,i)}};if(s>1)for(e=new Array(s),o=new Array(s),i=new Array(s);s>r;r++)n[r]&&rt.isFunction(n[r].promise)?n[r].promise().done(h(r,i,n)).fail(a.reject).progress(h(r,o,e)):--p;return p||a.resolveWith(i,n),a.promise()}});var xt;rt.fn.ready=function(t){return rt.ready.promise().done(t),this},rt.extend({isReady:!1,readyWait:1,holdReady:function(t){t?rt.readyWait++:rt.ready(!0)},ready:function(t){if(t===!0?!--rt.readyWait:!rt.isReady){if(!yt.body)return setTimeout(rt.ready);rt.isReady=!0,t!==!0&&--rt.readyWait>0||(xt.resolveWith(yt,[rt]),rt.fn.triggerHandler&&(rt(yt).triggerHandler("ready"),rt(yt).off("ready")))}}}),rt.ready.promise=function(e){if(!xt)if(xt=rt.Deferred(),"complete"===yt.readyState)setTimeout(rt.ready);else if(yt.addEventListener)yt.addEventListener("DOMContentLoaded",p,!1),t.addEventListener("load",p,!1);else{yt.attachEvent("onreadystatechange",p),t.attachEvent("onload",p);var o=!1;try{o=null==t.frameElement&&yt.documentElement}catch(i){}o&&o.doScroll&&!function r(){if(!rt.isReady){try{o.doScroll("left")}catch(t){return setTimeout(r,50)}s(),rt.ready()}}()}return xt.promise(e)};var St,Tt="undefined";for(St in rt(ot))break;ot.ownLast="0"!==St,ot.inlineBlockNeedsLayout=!1,rt(function(){var t,e,o,i;o=yt.getElementsByTagName("body")[0],o&&o.style&&(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",ot.inlineBlockNeedsLayout=t=3===e.offsetWidth,t&&(o.style.zoom=1)),o.removeChild(i))}),function(){var t=yt.createElement("div");if(null==ot.deleteExpando){ot.deleteExpando=!0;try{delete t.test}catch(e){ot.deleteExpando=!1}}t=null}(),rt.acceptData=function(t){var e=rt.noData[(t.nodeName+" ").toLowerCase()],o=+t.nodeType||1;return(1===o||9===o)&&(!e||e!==!0&&t.getAttribute("classid")===e)};var Et=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Mt=/([A-Z])/g;rt.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(t){return t=t.nodeType?rt.cache[t[rt.expando]]:t[rt.expando],!!t&&!h(t)},data:function(t,e,o){return l(t,e,o)},removeData:function(t,e){return u(t,e)},_data:function(t,e,o){return l(t,e,o,!0)},_removeData:function(t,e){return u(t,e,!0)}}),rt.fn.extend({data:function(t,e){var o,i,r,n=this[0],s=n&&n.attributes;if(void 0===t){if(this.length&&(r=rt.data(n),1===n.nodeType&&!rt._data(n,"parsedAttrs"))){for(o=s.length;o--;)s[o]&&(i=s[o].name,0===i.indexOf("data-")&&(i=rt.camelCase(i.slice(5)),a(n,i,r[i])));rt._data(n,"parsedAttrs",!0)}return r}return"object"==typeof t?this.each(function(){rt.data(this,t)}):arguments.length>1?this.each(function(){rt.data(this,t,e)}):n?a(n,t,rt.data(n,t)):void 0},removeData:function(t){return this.each(function(){rt.removeData(this,t)})}}),rt.extend({queue:function(t,e,o){var i;return t?(e=(e||"fx")+"queue",i=rt._data(t,e),o&&(!i||rt.isArray(o)?i=rt._data(t,e,rt.makeArray(o)):i.push(o)),i||[]):void 0},dequeue:function(t,e){e=e||"fx";var o=rt.queue(t,e),i=o.length,r=o.shift(),n=rt._queueHooks(t,e),s=function(){rt.dequeue(t,e)};"inprogress"===r&&(r=o.shift(),i--),r&&("fx"===e&&o.unshift("inprogress"),delete n.stop,r.call(t,s,n)),!i&&n&&n.empty.fire()},_queueHooks:function(t,e){var o=e+"queueHooks";return rt._data(t,o)||rt._data(t,o,{empty:rt.Callbacks("once memory").add(function(){rt._removeData(t,e+"queue"),rt._removeData(t,o)})})}}),rt.fn.extend({queue:function(t,e){var o=2;return"string"!=typeof t&&(e=t,t="fx",o--),arguments.length<o?rt.queue(this[0],t):void 0===e?this:this.each(function(){var o=rt.queue(this,t,e);rt._queueHooks(this,t),"fx"===t&&"inprogress"!==o[0]&&rt.dequeue(this,t)})},dequeue:function(t){return this.each(function(){rt.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var o,i=1,r=rt.Deferred(),n=this,s=this.length,p=function(){--i||r.resolveWith(n,[n])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";s--;)o=rt._data(n[s],t+"queueHooks"),o&&o.empty&&(i++,o.empty.add(p));return p(),r.promise(e)}});var Ct=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Pt=["Top","Right","Bottom","Left"],At=function(t,e){return t=e||t,"none"===rt.css(t,"display")||!rt.contains(t.ownerDocument,t)},jt=rt.access=function(t,e,o,i,r,n,s){var p=0,a=t.length,h=null==o;if("object"===rt.type(o)){r=!0;for(p in o)rt.access(t,e,p,o[p],!0,n,s)}else if(void 0!==i&&(r=!0,rt.isFunction(i)||(s=!0),h&&(s?(e.call(t,i),e=null):(h=e,e=function(t,e,o){return h.call(rt(t),o)})),e))for(;a>p;p++)e(t[p],o,s?i:i.call(t[p],p,e(t[p],o)));return r?t:h?e.call(t):a?e(t[0],o):n},Nt=/^(?:checkbox|radio)$/i;!function(){var t=yt.createElement("input"),e=yt.createElement("div"),o=yt.createDocumentFragment();if(e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",ot.leadingWhitespace=3===e.firstChild.nodeType,ot.tbody=!e.getElementsByTagName("tbody").length,ot.htmlSerialize=!!e.getElementsByTagName("link").length,ot.html5Clone="<:nav></:nav>"!==yt.createElement("nav").cloneNode(!0).outerHTML,t.type="checkbox",t.checked=!0,o.appendChild(t),ot.appendChecked=t.checked,e.innerHTML="<textarea>x</textarea>",ot.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,o.appendChild(e),e.innerHTML="<input type='radio' checked='checked' name='t'/>",ot.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,ot.noCloneEvent=!0,e.attachEvent&&(e.attachEvent("onclick",function(){ot.noCloneEvent=!1}),e.cloneNode(!0).click()),null==ot.deleteExpando){ot.deleteExpando=!0;try{delete e.test}catch(i){ot.deleteExpando=!1}}}(),function(){var e,o,i=yt.createElement("div");for(e in{submit:!0,change:!0,focusin:!0})o="on"+e,(ot[e+"Bubbles"]=o in t)||(i.setAttribute(o,"t"),ot[e+"Bubbles"]=i.attributes[o].expando===!1);i=null}();var Lt=/^(?:input|select|textarea)$/i,Rt=/^key/,kt=/^(?:mouse|pointer|contextmenu)|click/,It=/^(?:focusinfocus|focusoutblur)$/,Dt=/^([^.]*)(?:\.(.+)|)$/;rt.event={global:{},add:function(t,e,o,i,r){var n,s,p,a,h,l,u,c,f,y,d,g=rt._data(t);if(g){for(o.handler&&(a=o,o=a.handler,r=a.selector),o.guid||(o.guid=rt.guid++),(s=g.events)||(s=g.events={}),(l=g.handle)||(l=g.handle=function(t){return typeof rt===Tt||t&&rt.event.triggered===t.type?void 0:rt.event.dispatch.apply(l.elem,arguments)},l.elem=t),e=(e||"").match(bt)||[""],p=e.length;p--;)n=Dt.exec(e[p])||[],f=d=n[1],y=(n[2]||"").split(".").sort(),f&&(h=rt.event.special[f]||{},f=(r?h.delegateType:h.bindType)||f,h=rt.event.special[f]||{},u=rt.extend({type:f,origType:d,data:i,handler:o,guid:o.guid,selector:r,needsContext:r&&rt.expr.match.needsContext.test(r),namespace:y.join(".")},a),(c=s[f])||(c=s[f]=[],c.delegateCount=0,h.setup&&h.setup.call(t,i,y,l)!==!1||(t.addEventListener?t.addEventListener(f,l,!1):t.attachEvent&&t.attachEvent("on"+f,l))),h.add&&(h.add.call(t,u),u.handler.guid||(u.handler.guid=o.guid)),r?c.splice(c.delegateCount++,0,u):c.push(u),rt.event.global[f]=!0);t=null}},remove:function(t,e,o,i,r){var n,s,p,a,h,l,u,c,f,y,d,g=rt.hasData(t)&&rt._data(t);if(g&&(l=g.events)){for(e=(e||"").match(bt)||[""],h=e.length;h--;)if(p=Dt.exec(e[h])||[],f=d=p[1],y=(p[2]||"").split(".").sort(),f){for(u=rt.event.special[f]||{},f=(i?u.delegateType:u.bindType)||f,c=l[f]||[],p=p[2]&&new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=n=c.length;n--;)s=c[n],!r&&d!==s.origType||o&&o.guid!==s.guid||p&&!p.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(c.splice(n,1),s.selector&&c.delegateCount--,u.remove&&u.remove.call(t,s));a&&!c.length&&(u.teardown&&u.teardown.call(t,y,g.handle)!==!1||rt.removeEvent(t,f,g.handle),delete l[f])}else for(f in l)rt.event.remove(t,f+e[h],o,i,!0);rt.isEmptyObject(l)&&(delete g.handle,rt._removeData(t,"events"))}},trigger:function(e,o,i,r){var n,s,p,a,h,l,u,c=[i||yt],f=et.call(e,"type")?e.type:e,y=et.call(e,"namespace")?e.namespace.split("."):[];if(p=l=i=i||yt,3!==i.nodeType&&8!==i.nodeType&&!It.test(f+rt.event.triggered)&&(f.indexOf(".")>=0&&(y=f.split("."),f=y.shift(),y.sort()),s=f.indexOf(":")<0&&"on"+f,e=e[rt.expando]?e:new rt.Event(f,"object"==typeof e&&e),e.isTrigger=r?2:3,e.namespace=y.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),o=null==o?[e]:rt.makeArray(o,[e]),h=rt.event.special[f]||{},r||!h.trigger||h.trigger.apply(i,o)!==!1)){if(!r&&!h.noBubble&&!rt.isWindow(i)){for(a=h.delegateType||f,It.test(a+f)||(p=p.parentNode);p;p=p.parentNode)c.push(p),l=p;l===(i.ownerDocument||yt)&&c.push(l.defaultView||l.parentWindow||t)}for(u=0;(p=c[u++])&&!e.isPropagationStopped();)e.type=u>1?a:h.bindType||f,n=(rt._data(p,"events")||{})[e.type]&&rt._data(p,"handle"),n&&n.apply(p,o),n=s&&p[s],n&&n.apply&&rt.acceptData(p)&&(e.result=n.apply(p,o),e.result===!1&&e.preventDefault());if(e.type=f,!r&&!e.isDefaultPrevented()&&(!h._default||h._default.apply(c.pop(),o)===!1)&&rt.acceptData(i)&&s&&i[f]&&!rt.isWindow(i)){l=i[s],l&&(i[s]=null),rt.event.triggered=f;try{i[f]()}catch(d){}rt.event.triggered=void 0,l&&(i[s]=l)}return e.result}},dispatch:function(t){t=rt.event.fix(t);var e,o,i,r,n,s=[],p=Y.call(arguments),a=(rt._data(this,"events")||{})[t.type]||[],h=rt.event.special[t.type]||{};if(p[0]=t,t.delegateTarget=this,!h.preDispatch||h.preDispatch.call(this,t)!==!1){for(s=rt.event.handlers.call(this,t,a),e=0;(r=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=r.elem,n=0;(i=r.handlers[n++])&&!t.isImmediatePropagationStopped();)(!t.namespace_re||t.namespace_re.test(i.namespace))&&(t.handleObj=i,t.data=i.data,o=((rt.event.special[i.origType]||{}).handle||i.handler).apply(r.elem,p),void 0!==o&&(t.result=o)===!1&&(t.preventDefault(),t.stopPropagation()));return h.postDispatch&&h.postDispatch.call(this,t),t.result}},handlers:function(t,e){var o,i,r,n,s=[],p=e.delegateCount,a=t.target;if(p&&a.nodeType&&(!t.button||"click"!==t.type))for(;a!=this;a=a.parentNode||this)if(1===a.nodeType&&(a.disabled!==!0||"click"!==t.type)){for(r=[],n=0;p>n;n++)i=e[n],o=i.selector+" ",void 0===r[o]&&(r[o]=i.needsContext?rt(o,this).index(a)>=0:rt.find(o,this,null,[a]).length),r[o]&&r.push(i);r.length&&s.push({elem:a,handlers:r})}return p<e.length&&s.push({elem:this,handlers:e.slice(p)}),s},fix:function(t){if(t[rt.expando])return t;var e,o,i,r=t.type,n=t,s=this.fixHooks[r];for(s||(this.fixHooks[r]=s=kt.test(r)?this.mouseHooks:Rt.test(r)?this.keyHooks:{}),i=s.props?this.props.concat(s.props):this.props,t=new rt.Event(n),e=i.length;e--;)o=i[e],t[o]=n[o];return t.target||(t.target=n.srcElement||yt),3===t.target.nodeType&&(t.target=t.target.parentNode),t.metaKey=!!t.metaKey,s.filter?s.filter(t,n):t},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(t,e){return null==t.which&&(t.which=null!=e.charCode?e.charCode:e.keyCode),t}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(t,e){var o,i,r,n=e.button,s=e.fromElement;return null==t.pageX&&null!=e.clientX&&(i=t.target.ownerDocument||yt,r=i.documentElement,o=i.body,t.pageX=e.clientX+(r&&r.scrollLeft||o&&o.scrollLeft||0)-(r&&r.clientLeft||o&&o.clientLeft||0),t.pageY=e.clientY+(r&&r.scrollTop||o&&o.scrollTop||0)-(r&&r.clientTop||o&&o.clientTop||0)),!t.relatedTarget&&s&&(t.relatedTarget=s===t.target?e.toElement:s),t.which||void 0===n||(t.which=1&n?1:2&n?3:4&n?2:0),t}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==y()&&this.focus)try{return this.focus(),!1}catch(t){}},delegateType:"focusin"},blur:{trigger:function(){return this===y()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return rt.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(t){return rt.nodeName(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}},simulate:function(t,e,o,i){var r=rt.extend(new rt.Event,o,{type:t,isSimulated:!0,originalEvent:{}});i?rt.event.trigger(r,null,e):rt.event.dispatch.call(e,r),r.isDefaultPrevented()&&o.preventDefault()}},rt.removeEvent=yt.removeEventListener?function(t,e,o){t.removeEventListener&&t.removeEventListener(e,o,!1)}:function(t,e,o){var i="on"+e;t.detachEvent&&(typeof t[i]===Tt&&(t[i]=null),t.detachEvent(i,o))},rt.Event=function(t,e){return this instanceof rt.Event?(t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&t.returnValue===!1?c:f):this.type=t,e&&rt.extend(this,e),this.timeStamp=t&&t.timeStamp||rt.now(),void(this[rt.expando]=!0)):new rt.Event(t,e)},rt.Event.prototype={isDefaultPrevented:f,isPropagationStopped:f,isImmediatePropagationStopped:f,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=c,t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=c,t&&(t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0)},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=c,t&&t.stopImmediatePropagation&&t.stopImmediatePropagation(),this.stopPropagation()}},rt.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){rt.event.special[t]={delegateType:e,bindType:e,handle:function(t){var o,i=this,r=t.relatedTarget,n=t.handleObj;return(!r||r!==i&&!rt.contains(i,r))&&(t.type=n.origType,o=n.handler.apply(this,arguments),t.type=e),o}}}),ot.submitBubbles||(rt.event.special.submit={setup:function(){return!rt.nodeName(this,"form")&&void rt.event.add(this,"click._submit keypress._submit",function(t){var e=t.target,o=rt.nodeName(e,"input")||rt.nodeName(e,"button")?e.form:void 0;o&&!rt._data(o,"submitBubbles")&&(rt.event.add(o,"submit._submit",function(t){t._submit_bubble=!0}),rt._data(o,"submitBubbles",!0))})},postDispatch:function(t){t._submit_bubble&&(delete t._submit_bubble,this.parentNode&&!t.isTrigger&&rt.event.simulate("submit",this.parentNode,t,!0))},teardown:function(){return!rt.nodeName(this,"form")&&void rt.event.remove(this,"._submit")}}),ot.changeBubbles||(rt.event.special.change={setup:function(){return Lt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(rt.event.add(this,"propertychange._change",function(t){"checked"===t.originalEvent.propertyName&&(this._just_changed=!0)}),rt.event.add(this,"click._change",function(t){this._just_changed&&!t.isTrigger&&(this._just_changed=!1),rt.event.simulate("change",this,t,!0)})),!1):void rt.event.add(this,"beforeactivate._change",function(t){var e=t.target;Lt.test(e.nodeName)&&!rt._data(e,"changeBubbles")&&(rt.event.add(e,"change._change",function(t){!this.parentNode||t.isSimulated||t.isTrigger||rt.event.simulate("change",this.parentNode,t,!0)}),rt._data(e,"changeBubbles",!0))})},handle:function(t){var e=t.target;return this!==e||t.isSimulated||t.isTrigger||"radio"!==e.type&&"checkbox"!==e.type?t.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return rt.event.remove(this,"._change"),!Lt.test(this.nodeName)}}),ot.focusinBubbles||rt.each({focus:"focusin",blur:"focusout"},function(t,e){var o=function(t){rt.event.simulate(e,t.target,rt.event.fix(t),!0)};rt.event.special[e]={setup:function(){var i=this.ownerDocument||this,r=rt._data(i,e);r||i.addEventListener(t,o,!0),rt._data(i,e,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this,r=rt._data(i,e)-1;r?rt._data(i,e,r):(i.removeEventListener(t,o,!0),rt._removeData(i,e))}}}),rt.fn.extend({on:function(t,e,o,i,r){var n,s;if("object"==typeof t){"string"!=typeof e&&(o=o||e,e=void 0);for(n in t)this.on(n,e,o,t[n],r);return this}if(null==o&&null==i?(i=e,o=e=void 0):null==i&&("string"==typeof e?(i=o,o=void 0):(i=o,o=e,e=void 0)),i===!1)i=f;else if(!i)return this;return 1===r&&(s=i,i=function(t){return rt().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=rt.guid++)),this.each(function(){rt.event.add(this,t,i,o,e)})},one:function(t,e,o,i){return this.on(t,e,o,i,1)},off:function(t,e,o){var i,r;if(t&&t.preventDefault&&t.handleObj)return i=t.handleObj,rt(t.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof t){for(r in t)this.off(r,e,t[r]);return this}return(e===!1||"function"==typeof e)&&(o=e,e=void 0),o===!1&&(o=f),this.each(function(){rt.event.remove(this,t,o,e)})},trigger:function(t,e){return this.each(function(){rt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var o=this[0];return o?rt.event.trigger(t,e,o,!0):void 0}});var Ft="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Ot=/ jQuery\d+="(?:null|\d+)"/g,Bt=new RegExp("<(?:"+Ft+")[\\s/>]","i"),Ut=/^\s+/,Gt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,$t=/<([\w:]+)/,Ht=/<tbody/i,Xt=/<|&#?\w+;/,Kt=/<(?:script|style|link)/i,Wt=/checked\s*(?:[^=]|=\s*.checked.)/i,zt=/^$|\/(?:java|ecma)script/i,qt=/^true\/(.*)/,Vt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Yt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:ot.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Zt=d(yt),Jt=Zt.appendChild(yt.createElement("div"));Yt.optgroup=Yt.option,Yt.tbody=Yt.tfoot=Yt.colgroup=Yt.caption=Yt.thead,Yt.th=Yt.td,rt.extend({clone:function(t,e,o){var i,r,n,s,p,a=rt.contains(t.ownerDocument,t);if(ot.html5Clone||rt.isXMLDoc(t)||!Bt.test("<"+t.nodeName+">")?n=t.cloneNode(!0):(Jt.innerHTML=t.outerHTML,Jt.removeChild(n=Jt.firstChild)),!(ot.noCloneEvent&&ot.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||rt.isXMLDoc(t)))for(i=g(n),p=g(t),s=0;null!=(r=p[s]);++s)i[s]&&T(r,i[s]);if(e)if(o)for(p=p||g(t),i=i||g(n),s=0;null!=(r=p[s]);s++)S(r,i[s]);else S(t,n);return i=g(n,"script"),i.length>0&&x(i,!a&&g(t,"script")),i=p=r=null,n},buildFragment:function(t,e,o,i){for(var r,n,s,p,a,h,l,u=t.length,c=d(e),f=[],y=0;u>y;y++)if(n=t[y],n||0===n)if("object"===rt.type(n))rt.merge(f,n.nodeType?[n]:n);else if(Xt.test(n)){for(p=p||c.appendChild(e.createElement("div")),a=($t.exec(n)||["",""])[1].toLowerCase(),l=Yt[a]||Yt._default,p.innerHTML=l[1]+n.replace(Gt,"<$1></$2>")+l[2],r=l[0];r--;)p=p.lastChild;if(!ot.leadingWhitespace&&Ut.test(n)&&f.push(e.createTextNode(Ut.exec(n)[0])),!ot.tbody)for(n="table"!==a||Ht.test(n)?"<table>"!==l[1]||Ht.test(n)?0:p:p.firstChild,r=n&&n.childNodes.length;r--;)rt.nodeName(h=n.childNodes[r],"tbody")&&!h.childNodes.length&&n.removeChild(h);for(rt.merge(f,p.childNodes),p.textContent="";p.firstChild;)p.removeChild(p.firstChild);p=c.lastChild}else f.push(e.createTextNode(n));for(p&&c.removeChild(p),ot.appendChecked||rt.grep(g(f,"input"),v),y=0;n=f[y++];)if((!i||-1===rt.inArray(n,i))&&(s=rt.contains(n.ownerDocument,n),p=g(c.appendChild(n),"script"),s&&x(p),o))for(r=0;n=p[r++];)zt.test(n.type||"")&&o.push(n);return p=null,c},cleanData:function(t,e){for(var o,i,r,n,s=0,p=rt.expando,a=rt.cache,h=ot.deleteExpando,l=rt.event.special;null!=(o=t[s]);s++)if((e||rt.acceptData(o))&&(r=o[p],n=r&&a[r])){if(n.events)for(i in n.events)l[i]?rt.event.remove(o,i):rt.removeEvent(o,i,n.handle);a[r]&&(delete a[r],h?delete o[p]:typeof o.removeAttribute!==Tt?o.removeAttribute(p):o[p]=null,V.push(r))}}}),rt.fn.extend({text:function(t){return jt(this,function(t){return void 0===t?rt.text(this):this.empty().append((this[0]&&this[0].ownerDocument||yt).createTextNode(t))},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.appendChild(t)}})},prepend:function(){
-return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var o,i=t?rt.filter(t,this):this,r=0;null!=(o=i[r]);r++)e||1!==o.nodeType||rt.cleanData(g(o)),o.parentNode&&(e&&rt.contains(o.ownerDocument,o)&&x(g(o,"script")),o.parentNode.removeChild(o));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&&rt.cleanData(g(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&&rt.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return rt.clone(this,t,e)})},html:function(t){return jt(this,function(t){var e=this[0]||{},o=0,i=this.length;if(void 0===t)return 1===e.nodeType?e.innerHTML.replace(Ot,""):void 0;if(!("string"!=typeof t||Kt.test(t)||!ot.htmlSerialize&&Bt.test(t)||!ot.leadingWhitespace&&Ut.test(t)||Yt[($t.exec(t)||["",""])[1].toLowerCase()])){t=t.replace(Gt,"<$1></$2>");try{for(;i>o;o++)e=this[o]||{},1===e.nodeType&&(rt.cleanData(g(e,!1)),e.innerHTML=t);e=0}catch(r){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=arguments[0];return this.domManip(arguments,function(e){t=this.parentNode,rt.cleanData(g(this)),t&&t.replaceChild(e,this)}),t&&(t.length||t.nodeType)?this:this.remove()},detach:function(t){return this.remove(t,!0)},domManip:function(t,e){t=Z.apply([],t);var o,i,r,n,s,p,a=0,h=this.length,l=this,u=h-1,c=t[0],f=rt.isFunction(c);if(f||h>1&&"string"==typeof c&&!ot.checkClone&&Wt.test(c))return this.each(function(o){var i=l.eq(o);f&&(t[0]=c.call(this,o,i.html())),i.domManip(t,e)});if(h&&(p=rt.buildFragment(t,this[0].ownerDocument,!1,this),o=p.firstChild,1===p.childNodes.length&&(p=o),o)){for(n=rt.map(g(p,"script"),b),r=n.length;h>a;a++)i=p,a!==u&&(i=rt.clone(i,!0,!0),r&&rt.merge(n,g(i,"script"))),e.call(this[a],i,a);if(r)for(s=n[n.length-1].ownerDocument,rt.map(n,w),a=0;r>a;a++)i=n[a],zt.test(i.type||"")&&!rt._data(i,"globalEval")&&rt.contains(s,i)&&(i.src?rt._evalUrl&&rt._evalUrl(i.src):rt.globalEval((i.text||i.textContent||i.innerHTML||"").replace(Vt,"")));p=o=null}return this}}),rt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){rt.fn[t]=function(t){for(var o,i=0,r=[],n=rt(t),s=n.length-1;s>=i;i++)o=i===s?this:this.clone(!0),rt(n[i])[e](o),J.apply(r,o.get());return this.pushStack(r)}});var _t,Qt={};!function(){var t;ot.shrinkWrapBlocks=function(){if(null!=t)return t;t=!1;var e,o,i;return o=yt.getElementsByTagName("body")[0],o&&o.style?(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",e.appendChild(yt.createElement("div")).style.width="5px",t=3!==e.offsetWidth),o.removeChild(i),t):void 0}}();var te,ee,oe=/^margin/,ie=new RegExp("^("+Ct+")(?!px)[a-z%]+$","i"),re=/^(top|right|bottom|left)$/;t.getComputedStyle?(te=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):t.getComputedStyle(e,null)},ee=function(t,e,o){var i,r,n,s,p=t.style;return o=o||te(t),s=o?o.getPropertyValue(e)||o[e]:void 0,o&&(""!==s||rt.contains(t.ownerDocument,t)||(s=rt.style(t,e)),ie.test(s)&&oe.test(e)&&(i=p.width,r=p.minWidth,n=p.maxWidth,p.minWidth=p.maxWidth=p.width=s,s=o.width,p.width=i,p.minWidth=r,p.maxWidth=n)),void 0===s?s:s+""}):yt.documentElement.currentStyle&&(te=function(t){return t.currentStyle},ee=function(t,e,o){var i,r,n,s,p=t.style;return o=o||te(t),s=o?o[e]:void 0,null==s&&p&&p[e]&&(s=p[e]),ie.test(s)&&!re.test(e)&&(i=p.left,r=t.runtimeStyle,n=r&&r.left,n&&(r.left=t.currentStyle.left),p.left="fontSize"===e?"1em":s,s=p.pixelLeft+"px",p.left=i,n&&(r.left=n)),void 0===s?s:s+""||"auto"}),!function(){function e(){var e,o,i,r;o=yt.getElementsByTagName("body")[0],o&&o.style&&(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",n=s=!1,a=!0,t.getComputedStyle&&(n="1%"!==(t.getComputedStyle(e,null)||{}).top,s="4px"===(t.getComputedStyle(e,null)||{width:"4px"}).width,r=e.appendChild(yt.createElement("div")),r.style.cssText=e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",r.style.marginRight=r.style.width="0",e.style.width="1px",a=!parseFloat((t.getComputedStyle(r,null)||{}).marginRight),e.removeChild(r)),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",r=e.getElementsByTagName("td"),r[0].style.cssText="margin:0;border:0;padding:0;display:none",p=0===r[0].offsetHeight,p&&(r[0].style.display="",r[1].style.display="none",p=0===r[0].offsetHeight),o.removeChild(i))}var o,i,r,n,s,p,a;o=yt.createElement("div"),o.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",r=o.getElementsByTagName("a")[0],(i=r&&r.style)&&(i.cssText="float:left;opacity:.5",ot.opacity="0.5"===i.opacity,ot.cssFloat=!!i.cssFloat,o.style.backgroundClip="content-box",o.cloneNode(!0).style.backgroundClip="",ot.clearCloneStyle="content-box"===o.style.backgroundClip,ot.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,rt.extend(ot,{reliableHiddenOffsets:function(){return null==p&&e(),p},boxSizingReliable:function(){return null==s&&e(),s},pixelPosition:function(){return null==n&&e(),n},reliableMarginRight:function(){return null==a&&e(),a}}))}(),rt.swap=function(t,e,o,i){var r,n,s={};for(n in e)s[n]=t.style[n],t.style[n]=e[n];r=o.apply(t,i||[]);for(n in e)t.style[n]=s[n];return r};var ne=/alpha\([^)]*\)/i,se=/opacity\s*=\s*([^)]*)/,pe=/^(none|table(?!-c[ea]).+)/,ae=new RegExp("^("+Ct+")(.*)$","i"),he=new RegExp("^([+-])=("+Ct+")","i"),le={position:"absolute",visibility:"hidden",display:"block"},ue={letterSpacing:"0",fontWeight:"400"},ce=["Webkit","O","Moz","ms"];rt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var o=ee(t,"opacity");return""===o?"1":o}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":ot.cssFloat?"cssFloat":"styleFloat"},style:function(t,e,o,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var r,n,s,p=rt.camelCase(e),a=t.style;if(e=rt.cssProps[p]||(rt.cssProps[p]=P(a,p)),s=rt.cssHooks[e]||rt.cssHooks[p],void 0===o)return s&&"get"in s&&void 0!==(r=s.get(t,!1,i))?r:a[e];if(n=typeof o,"string"===n&&(r=he.exec(o))&&(o=(r[1]+1)*r[2]+parseFloat(rt.css(t,e)),n="number"),null!=o&&o===o&&("number"!==n||rt.cssNumber[p]||(o+="px"),ot.clearCloneStyle||""!==o||0!==e.indexOf("background")||(a[e]="inherit"),!(s&&"set"in s&&void 0===(o=s.set(t,o,i)))))try{a[e]=o}catch(h){}}},css:function(t,e,o,i){var r,n,s,p=rt.camelCase(e);return e=rt.cssProps[p]||(rt.cssProps[p]=P(t.style,p)),s=rt.cssHooks[e]||rt.cssHooks[p],s&&"get"in s&&(n=s.get(t,!0,o)),void 0===n&&(n=ee(t,e,i)),"normal"===n&&e in ue&&(n=ue[e]),""===o||o?(r=parseFloat(n),o===!0||rt.isNumeric(r)?r||0:n):n}}),rt.each(["height","width"],function(t,e){rt.cssHooks[e]={get:function(t,o,i){return o?pe.test(rt.css(t,"display"))&&0===t.offsetWidth?rt.swap(t,le,function(){return L(t,e,i)}):L(t,e,i):void 0},set:function(t,o,i){var r=i&&te(t);return j(t,o,i?N(t,e,i,ot.boxSizing&&"border-box"===rt.css(t,"boxSizing",!1,r),r):0)}}}),ot.opacity||(rt.cssHooks.opacity={get:function(t,e){return se.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var o=t.style,i=t.currentStyle,r=rt.isNumeric(e)?"alpha(opacity="+100*e+")":"",n=i&&i.filter||o.filter||"";o.zoom=1,(e>=1||""===e)&&""===rt.trim(n.replace(ne,""))&&o.removeAttribute&&(o.removeAttribute("filter"),""===e||i&&!i.filter)||(o.filter=ne.test(n)?n.replace(ne,r):n+" "+r)}}),rt.cssHooks.marginRight=C(ot.reliableMarginRight,function(t,e){return e?rt.swap(t,{display:"inline-block"},ee,[t,"marginRight"]):void 0}),rt.each({margin:"",padding:"",border:"Width"},function(t,e){rt.cssHooks[t+e]={expand:function(o){for(var i=0,r={},n="string"==typeof o?o.split(" "):[o];4>i;i++)r[t+Pt[i]+e]=n[i]||n[i-2]||n[0];return r}},oe.test(t)||(rt.cssHooks[t+e].set=j)}),rt.fn.extend({css:function(t,e){return jt(this,function(t,e,o){var i,r,n={},s=0;if(rt.isArray(e)){for(i=te(t),r=e.length;r>s;s++)n[e[s]]=rt.css(t,e[s],!1,i);return n}return void 0!==o?rt.style(t,e,o):rt.css(t,e)},t,e,arguments.length>1)},show:function(){return A(this,!0)},hide:function(){return A(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){At(this)?rt(this).show():rt(this).hide()})}}),rt.Tween=R,R.prototype={constructor:R,init:function(t,e,o,i,r,n){this.elem=t,this.prop=o,this.easing=r||"swing",this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=n||(rt.cssNumber[o]?"":"px")},cur:function(){var t=R.propHooks[this.prop];return t&&t.get?t.get(this):R.propHooks._default.get(this)},run:function(t){var e,o=R.propHooks[this.prop];return this.pos=e=this.options.duration?rt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),o&&o.set?o.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(t){var e;return null==t.elem[t.prop]||t.elem.style&&null!=t.elem.style[t.prop]?(e=rt.css(t.elem,t.prop,""),e&&"auto"!==e?e:0):t.elem[t.prop]},set:function(t){rt.fx.step[t.prop]?rt.fx.step[t.prop](t):t.elem.style&&(null!=t.elem.style[rt.cssProps[t.prop]]||rt.cssHooks[t.prop])?rt.style(t.elem,t.prop,t.now+t.unit):t.elem[t.prop]=t.now}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},rt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2}},rt.fx=R.prototype.init,rt.fx.step={};var fe,ye,de=/^(?:toggle|show|hide)$/,ge=new RegExp("^(?:([+-])=|)("+Ct+")([a-z%]*)$","i"),ve=/queueHooks$/,me=[F],be={"*":[function(t,e){var o=this.createTween(t,e),i=o.cur(),r=ge.exec(e),n=r&&r[3]||(rt.cssNumber[t]?"":"px"),s=(rt.cssNumber[t]||"px"!==n&&+i)&&ge.exec(rt.css(o.elem,t)),p=1,a=20;if(s&&s[3]!==n){n=n||s[3],r=r||[],s=+i||1;do p=p||".5",s/=p,rt.style(o.elem,t,s+n);while(p!==(p=o.cur()/i)&&1!==p&&--a)}return r&&(s=o.start=+s||+i||0,o.unit=n,o.end=r[1]?s+(r[1]+1)*r[2]:+r[2]),o}]};rt.Animation=rt.extend(B,{tweener:function(t,e){rt.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var o,i=0,r=t.length;r>i;i++)o=t[i],be[o]=be[o]||[],be[o].unshift(e)},prefilter:function(t,e){e?me.unshift(t):me.push(t)}}),rt.speed=function(t,e,o){var i=t&&"object"==typeof t?rt.extend({},t):{complete:o||!o&&e||rt.isFunction(t)&&t,duration:t,easing:o&&e||e&&!rt.isFunction(e)&&e};return i.duration=rt.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in rt.fx.speeds?rt.fx.speeds[i.duration]:rt.fx.speeds._default,(null==i.queue||i.queue===!0)&&(i.queue="fx"),i.old=i.complete,i.complete=function(){rt.isFunction(i.old)&&i.old.call(this),i.queue&&rt.dequeue(this,i.queue)},i},rt.fn.extend({fadeTo:function(t,e,o,i){return this.filter(At).css("opacity",0).show().end().animate({opacity:e},t,o,i)},animate:function(t,e,o,i){var r=rt.isEmptyObject(t),n=rt.speed(e,o,i),s=function(){var e=B(this,rt.extend({},t),n);(r||rt._data(this,"finish"))&&e.stop(!0)};return s.finish=s,r||n.queue===!1?this.each(s):this.queue(n.queue,s)},stop:function(t,e,o){var i=function(t){var e=t.stop;delete t.stop,e(o)};return"string"!=typeof t&&(o=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,r=null!=t&&t+"queueHooks",n=rt.timers,s=rt._data(this);if(r)s[r]&&s[r].stop&&i(s[r]);else for(r in s)s[r]&&s[r].stop&&ve.test(r)&&i(s[r]);for(r=n.length;r--;)n[r].elem!==this||null!=t&&n[r].queue!==t||(n[r].anim.stop(o),e=!1,n.splice(r,1));(e||!o)&&rt.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,o=rt._data(this),i=o[t+"queue"],r=o[t+"queueHooks"],n=rt.timers,s=i?i.length:0;for(o.finish=!0,rt.queue(this,t,[]),r&&r.stop&&r.stop.call(this,!0),e=n.length;e--;)n[e].elem===this&&n[e].queue===t&&(n[e].anim.stop(!0),n.splice(e,1));for(e=0;s>e;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete o.finish})}}),rt.each(["toggle","show","hide"],function(t,e){var o=rt.fn[e];rt.fn[e]=function(t,i,r){return null==t||"boolean"==typeof t?o.apply(this,arguments):this.animate(I(e,!0),t,i,r)}}),rt.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){rt.fn[t]=function(t,o,i){return this.animate(e,t,o,i)}}),rt.timers=[],rt.fx.tick=function(){var t,e=rt.timers,o=0;for(fe=rt.now();o<e.length;o++)t=e[o],t()||e[o]!==t||e.splice(o--,1);e.length||rt.fx.stop(),fe=void 0},rt.fx.timer=function(t){rt.timers.push(t),t()?rt.fx.start():rt.timers.pop()},rt.fx.interval=13,rt.fx.start=function(){ye||(ye=setInterval(rt.fx.tick,rt.fx.interval))},rt.fx.stop=function(){clearInterval(ye),ye=null},rt.fx.speeds={slow:600,fast:200,_default:400},rt.fn.delay=function(t,e){return t=rt.fx?rt.fx.speeds[t]||t:t,e=e||"fx",this.queue(e,function(e,o){var i=setTimeout(e,t);o.stop=function(){clearTimeout(i)}})},function(){var t,e,o,i,r;e=yt.createElement("div"),e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",i=e.getElementsByTagName("a")[0],o=yt.createElement("select"),r=o.appendChild(yt.createElement("option")),t=e.getElementsByTagName("input")[0],i.style.cssText="top:1px",ot.getSetAttribute="t"!==e.className,ot.style=/top/.test(i.getAttribute("style")),ot.hrefNormalized="/a"===i.getAttribute("href"),ot.checkOn=!!t.value,ot.optSelected=r.selected,ot.enctype=!!yt.createElement("form").enctype,o.disabled=!0,ot.optDisabled=!r.disabled,t=yt.createElement("input"),t.setAttribute("value",""),ot.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),ot.radioValue="t"===t.value}();var we=/\r/g;rt.fn.extend({val:function(t){var e,o,i,r=this[0];return arguments.length?(i=rt.isFunction(t),this.each(function(o){var r;1===this.nodeType&&(r=i?t.call(this,o,rt(this).val()):t,null==r?r="":"number"==typeof r?r+="":rt.isArray(r)&&(r=rt.map(r,function(t){return null==t?"":t+""})),e=rt.valHooks[this.type]||rt.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,r,"value")||(this.value=r))})):r?(e=rt.valHooks[r.type]||rt.valHooks[r.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(o=e.get(r,"value"))?o:(o=r.value,"string"==typeof o?o.replace(we,""):null==o?"":o)):void 0}}),rt.extend({valHooks:{option:{get:function(t){var e=rt.find.attr(t,"value");return null!=e?e:rt.trim(rt.text(t))}},select:{get:function(t){for(var e,o,i=t.options,r=t.selectedIndex,n="select-one"===t.type||0>r,s=n?null:[],p=n?r+1:i.length,a=0>r?p:n?r:0;p>a;a++)if(o=i[a],!(!o.selected&&a!==r||(ot.optDisabled?o.disabled:null!==o.getAttribute("disabled"))||o.parentNode.disabled&&rt.nodeName(o.parentNode,"optgroup"))){if(e=rt(o).val(),n)return e;s.push(e)}return s},set:function(t,e){for(var o,i,r=t.options,n=rt.makeArray(e),s=r.length;s--;)if(i=r[s],rt.inArray(rt.valHooks.option.get(i),n)>=0)try{i.selected=o=!0}catch(p){i.scrollHeight}else i.selected=!1;return o||(t.selectedIndex=-1),r}}}}),rt.each(["radio","checkbox"],function(){rt.valHooks[this]={set:function(t,e){return rt.isArray(e)?t.checked=rt.inArray(rt(t).val(),e)>=0:void 0}},ot.checkOn||(rt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var xe,Se,Te=rt.expr.attrHandle,Ee=/^(?:checked|selected)$/i,Me=ot.getSetAttribute,Ce=ot.input;rt.fn.extend({attr:function(t,e){return jt(this,rt.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){rt.removeAttr(this,t)})}}),rt.extend({attr:function(t,e,o){var i,r,n=t.nodeType;if(t&&3!==n&&8!==n&&2!==n)return typeof t.getAttribute===Tt?rt.prop(t,e,o):(1===n&&rt.isXMLDoc(t)||(e=e.toLowerCase(),i=rt.attrHooks[e]||(rt.expr.match.bool.test(e)?Se:xe)),void 0===o?i&&"get"in i&&null!==(r=i.get(t,e))?r:(r=rt.find.attr(t,e),null==r?void 0:r):null!==o?i&&"set"in i&&void 0!==(r=i.set(t,o,e))?r:(t.setAttribute(e,o+""),o):void rt.removeAttr(t,e))},removeAttr:function(t,e){var o,i,r=0,n=e&&e.match(bt);if(n&&1===t.nodeType)for(;o=n[r++];)i=rt.propFix[o]||o,rt.expr.match.bool.test(o)?Ce&&Me||!Ee.test(o)?t[i]=!1:t[rt.camelCase("default-"+o)]=t[i]=!1:rt.attr(t,o,""),t.removeAttribute(Me?o:i)},attrHooks:{type:{set:function(t,e){if(!ot.radioValue&&"radio"===e&&rt.nodeName(t,"input")){var o=t.value;return t.setAttribute("type",e),o&&(t.value=o),e}}}}}),Se={set:function(t,e,o){return e===!1?rt.removeAttr(t,o):Ce&&Me||!Ee.test(o)?t.setAttribute(!Me&&rt.propFix[o]||o,o):t[rt.camelCase("default-"+o)]=t[o]=!0,o}},rt.each(rt.expr.match.bool.source.match(/\w+/g),function(t,e){var o=Te[e]||rt.find.attr;Te[e]=Ce&&Me||!Ee.test(e)?function(t,e,i){var r,n;return i||(n=Te[e],Te[e]=r,r=null!=o(t,e,i)?e.toLowerCase():null,Te[e]=n),r}:function(t,e,o){return o?void 0:t[rt.camelCase("default-"+e)]?e.toLowerCase():null}}),Ce&&Me||(rt.attrHooks.value={set:function(t,e,o){return rt.nodeName(t,"input")?void(t.defaultValue=e):xe&&xe.set(t,e,o)}}),Me||(xe={set:function(t,e,o){var i=t.getAttributeNode(o);return i||t.setAttributeNode(i=t.ownerDocument.createAttribute(o)),i.value=e+="","value"===o||e===t.getAttribute(o)?e:void 0}},Te.id=Te.name=Te.coords=function(t,e,o){var i;return o?void 0:(i=t.getAttributeNode(e))&&""!==i.value?i.value:null},rt.valHooks.button={get:function(t,e){var o=t.getAttributeNode(e);return o&&o.specified?o.value:void 0},set:xe.set},rt.attrHooks.contenteditable={set:function(t,e,o){xe.set(t,""!==e&&e,o)}},rt.each(["width","height"],function(t,e){rt.attrHooks[e]={set:function(t,o){return""===o?(t.setAttribute(e,"auto"),o):void 0}}})),ot.style||(rt.attrHooks.style={get:function(t){return t.style.cssText||void 0},set:function(t,e){return t.style.cssText=e+""}});var Pe=/^(?:input|select|textarea|button|object)$/i,Ae=/^(?:a|area)$/i;rt.fn.extend({prop:function(t,e){return jt(this,rt.prop,t,e,arguments.length>1)},removeProp:function(t){return t=rt.propFix[t]||t,this.each(function(){try{this[t]=void 0,delete this[t]}catch(e){}})}}),rt.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(t,e,o){var i,r,n,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return n=1!==s||!rt.isXMLDoc(t),n&&(e=rt.propFix[e]||e,r=rt.propHooks[e]),void 0!==o?r&&"set"in r&&void 0!==(i=r.set(t,o,e))?i:t[e]=o:r&&"get"in r&&null!==(i=r.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=rt.find.attr(t,"tabindex");return e?parseInt(e,10):Pe.test(t.nodeName)||Ae.test(t.nodeName)&&t.href?0:-1}}}}),ot.hrefNormalized||rt.each(["href","src"],function(t,e){rt.propHooks[e]={get:function(t){return t.getAttribute(e,4)}}}),ot.optSelected||(rt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex),null}}),rt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){rt.propFix[this.toLowerCase()]=this}),ot.enctype||(rt.propFix.enctype="encoding");var je=/[\t\r\n\f]/g;rt.fn.extend({addClass:function(t){var e,o,i,r,n,s,p=0,a=this.length,h="string"==typeof t&&t;if(rt.isFunction(t))return this.each(function(e){rt(this).addClass(t.call(this,e,this.className))});if(h)for(e=(t||"").match(bt)||[];a>p;p++)if(o=this[p],i=1===o.nodeType&&(o.className?(" "+o.className+" ").replace(je," "):" ")){for(n=0;r=e[n++];)i.indexOf(" "+r+" ")<0&&(i+=r+" ");s=rt.trim(i),o.className!==s&&(o.className=s)}return this},removeClass:function(t){var e,o,i,r,n,s,p=0,a=this.length,h=0===arguments.length||"string"==typeof t&&t;if(rt.isFunction(t))return this.each(function(e){rt(this).removeClass(t.call(this,e,this.className))});if(h)for(e=(t||"").match(bt)||[];a>p;p++)if(o=this[p],i=1===o.nodeType&&(o.className?(" "+o.className+" ").replace(je," "):"")){for(n=0;r=e[n++];)for(;i.indexOf(" "+r+" ")>=0;)i=i.replace(" "+r+" "," ");s=t?rt.trim(i):"",o.className!==s&&(o.className=s)}return this},toggleClass:function(t,e){var o=typeof t;return"boolean"==typeof e&&"string"===o?e?this.addClass(t):this.removeClass(t):this.each(rt.isFunction(t)?function(o){rt(this).toggleClass(t.call(this,o,this.className,e),e)}:function(){if("string"===o)for(var e,i=0,r=rt(this),n=t.match(bt)||[];e=n[i++];)r.hasClass(e)?r.removeClass(e):r.addClass(e);else(o===Tt||"boolean"===o)&&(this.className&&rt._data(this,"__className__",this.className),this.className=this.className||t===!1?"":rt._data(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",o=0,i=this.length;i>o;o++)if(1===this[o].nodeType&&(" "+this[o].className+" ").replace(je," ").indexOf(e)>=0)return!0;return!1}}),rt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){rt.fn[e]=function(t,o){return arguments.length>0?this.on(e,null,t,o):this.trigger(e)}}),rt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)},bind:function(t,e,o){return this.on(t,null,e,o)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,o,i){return this.on(e,t,o,i)},undelegate:function(t,e,o){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",o)}});var Ne=rt.now(),Le=/\?/,Re=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;rt.parseJSON=function(e){if(t.JSON&&t.JSON.parse)return t.JSON.parse(e+"");var o,i=null,r=rt.trim(e+"");return r&&!rt.trim(r.replace(Re,function(t,e,r,n){return o&&e&&(i=0),0===i?t:(o=r||e,i+=!n-!r,"")}))?Function("return "+r)():rt.error("Invalid JSON: "+e)},rt.parseXML=function(e){var o,i;if(!e||"string"!=typeof e)return null;try{t.DOMParser?(i=new DOMParser,o=i.parseFromString(e,"text/xml")):(o=new ActiveXObject("Microsoft.XMLDOM"),o.async="false",o.loadXML(e))}catch(r){o=void 0}return o&&o.documentElement&&!o.getElementsByTagName("parsererror").length||rt.error("Invalid XML: "+e),o};var ke,Ie,De=/#.*$/,Fe=/([?&])_=[^&]*/,Oe=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Be=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ue=/^(?:GET|HEAD)$/,Ge=/^\/\//,$e=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,He={},Xe={},Ke="*/".concat("*");try{Ie=location.href}catch(We){Ie=yt.createElement("a"),Ie.href="",Ie=Ie.href}ke=$e.exec(Ie.toLowerCase())||[],rt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ie,type:"GET",isLocal:Be.test(ke[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ke,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":rt.parseJSON,"text xml":rt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?$($(t,rt.ajaxSettings),e):$(rt.ajaxSettings,t)},ajaxPrefilter:U(He),ajaxTransport:U(Xe),ajax:function(t,e){function o(t,e,o,i){var r,l,v,m,w,S=e;2!==b&&(b=2,p&&clearTimeout(p),h=void 0,s=i||"",x.readyState=t>0?4:0,r=t>=200&&300>t||304===t,o&&(m=H(u,x,o)),m=X(u,m,x,r),r?(u.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(rt.lastModified[n]=w),w=x.getResponseHeader("etag"),w&&(rt.etag[n]=w)),204===t||"HEAD"===u.type?S="nocontent":304===t?S="notmodified":(S=m.state,l=m.data,v=m.error,r=!v)):(v=S,(t||!S)&&(S="error",0>t&&(t=0))),x.status=t,x.statusText=(e||S)+"",r?y.resolveWith(c,[l,S,x]):y.rejectWith(c,[x,S,v]),x.statusCode(g),g=void 0,a&&f.trigger(r?"ajaxSuccess":"ajaxError",[x,u,r?l:v]),d.fireWith(c,[x,S]),a&&(f.trigger("ajaxComplete",[x,u]),--rt.active||rt.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var i,r,n,s,p,a,h,l,u=rt.ajaxSetup({},e),c=u.context||u,f=u.context&&(c.nodeType||c.jquery)?rt(c):rt.event,y=rt.Deferred(),d=rt.Callbacks("once memory"),g=u.statusCode||{},v={},m={},b=0,w="canceled",x={readyState:0,getResponseHeader:function(t){var e;if(2===b){if(!l)for(l={};e=Oe.exec(s);)l[e[1].toLowerCase()]=e[2];e=l[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(t,e){var o=t.toLowerCase();return b||(t=m[o]=m[o]||t,v[t]=e),this},overrideMimeType:function(t){return b||(u.mimeType=t),this},statusCode:function(t){var e;if(t)if(2>b)for(e in t)g[e]=[g[e],t[e]];else x.always(t[x.status]);return this},abort:function(t){var e=t||w;return h&&h.abort(e),o(0,e),this}};if(y.promise(x).complete=d.add,x.success=x.done,x.error=x.fail,u.url=((t||u.url||Ie)+"").replace(De,"").replace(Ge,ke[1]+"//"),u.type=e.method||e.type||u.method||u.type,u.dataTypes=rt.trim(u.dataType||"*").toLowerCase().match(bt)||[""],null==u.crossDomain&&(i=$e.exec(u.url.toLowerCase()),u.crossDomain=!(!i||i[1]===ke[1]&&i[2]===ke[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(ke[3]||("http:"===ke[1]?"80":"443")))),u.data&&u.processData&&"string"!=typeof u.data&&(u.data=rt.param(u.data,u.traditional)),G(He,u,e,x),2===b)return x;a=rt.event&&u.global,a&&0===rt.active++&&rt.event.trigger("ajaxStart"),u.type=u.type.toUpperCase(),u.hasContent=!Ue.test(u.type),n=u.url,u.hasContent||(u.data&&(n=u.url+=(Le.test(n)?"&":"?")+u.data,delete u.data),u.cache===!1&&(u.url=Fe.test(n)?n.replace(Fe,"$1_="+Ne++):n+(Le.test(n)?"&":"?")+"_="+Ne++)),u.ifModified&&(rt.lastModified[n]&&x.setRequestHeader("If-Modified-Since",rt.lastModified[n]),rt.etag[n]&&x.setRequestHeader("If-None-Match",rt.etag[n])),(u.data&&u.hasContent&&u.contentType!==!1||e.contentType)&&x.setRequestHeader("Content-Type",u.contentType),x.setRequestHeader("Accept",u.dataTypes[0]&&u.accepts[u.dataTypes[0]]?u.accepts[u.dataTypes[0]]+("*"!==u.dataTypes[0]?", "+Ke+"; q=0.01":""):u.accepts["*"]);for(r in u.headers)x.setRequestHeader(r,u.headers[r]);if(u.beforeSend&&(u.beforeSend.call(c,x,u)===!1||2===b))return x.abort();w="abort";for(r in{success:1,error:1,complete:1})x[r](u[r]);if(h=G(Xe,u,e,x)){x.readyState=1,a&&f.trigger("ajaxSend",[x,u]),u.async&&u.timeout>0&&(p=setTimeout(function(){x.abort("timeout")},u.timeout));try{b=1,h.send(v,o)}catch(S){if(!(2>b))throw S;o(-1,S)}}else o(-1,"No Transport");return x},getJSON:function(t,e,o){return rt.get(t,e,o,"json")},getScript:function(t,e){return rt.get(t,void 0,e,"script")}}),rt.each(["get","post"],function(t,e){rt[e]=function(t,o,i,r){return rt.isFunction(o)&&(r=r||i,i=o,o=void 0),rt.ajax({url:t,type:e,dataType:r,data:o,success:i})}}),rt._evalUrl=function(t){return rt.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},rt.fn.extend({wrapAll:function(t){if(rt.isFunction(t))return this.each(function(e){rt(this).wrapAll(t.call(this,e))});if(this[0]){var e=rt(t,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstChild&&1===t.firstChild.nodeType;)t=t.firstChild;return t}).append(this)}return this},wrapInner:function(t){return this.each(rt.isFunction(t)?function(e){rt(this).wrapInner(t.call(this,e))}:function(){var e=rt(this),o=e.contents();o.length?o.wrapAll(t):e.append(t)})},wrap:function(t){var e=rt.isFunction(t);return this.each(function(o){rt(this).wrapAll(e?t.call(this,o):t)})},unwrap:function(){return this.parent().each(function(){rt.nodeName(this,"body")||rt(this).replaceWith(this.childNodes)}).end()}}),rt.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0||!ot.reliableHiddenOffsets()&&"none"===(t.style&&t.style.display||rt.css(t,"display"))},rt.expr.filters.visible=function(t){return!rt.expr.filters.hidden(t)};var ze=/%20/g,qe=/\[\]$/,Ve=/\r?\n/g,Ye=/^(?:submit|button|image|reset|file)$/i,Ze=/^(?:input|select|textarea|keygen)/i;rt.param=function(t,e){var o,i=[],r=function(t,e){e=rt.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=rt.ajaxSettings&&rt.ajaxSettings.traditional),rt.isArray(t)||t.jquery&&!rt.isPlainObject(t))rt.each(t,function(){r(this.name,this.value)});else for(o in t)K(o,t[o],e,r);return i.join("&").replace(ze,"+")},rt.fn.extend({serialize:function(){return rt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=rt.prop(this,"elements");return t?rt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!rt(this).is(":disabled")&&Ze.test(this.nodeName)&&!Ye.test(t)&&(this.checked||!Nt.test(t))}).map(function(t,e){var o=rt(this).val();return null==o?null:rt.isArray(o)?rt.map(o,function(t){return{name:e.name,value:t.replace(Ve,"\r\n")}}):{name:e.name,value:o.replace(Ve,"\r\n")}}).get()}}),rt.ajaxSettings.xhr=void 0!==t.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&W()||z()}:W;var Je=0,_e={},Qe=rt.ajaxSettings.xhr();t.attachEvent&&t.attachEvent("onunload",function(){for(var t in _e)_e[t](void 0,!0)}),ot.cors=!!Qe&&"withCredentials"in Qe,Qe=ot.ajax=!!Qe,Qe&&rt.ajaxTransport(function(t){if(!t.crossDomain||ot.cors){var e;return{send:function(o,i){var r,n=t.xhr(),s=++Je;if(n.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(r in t.xhrFields)n[r]=t.xhrFields[r];t.mimeType&&n.overrideMimeType&&n.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(r in o)void 0!==o[r]&&n.setRequestHeader(r,o[r]+"");n.send(t.hasContent&&t.data||null),e=function(o,r){var p,a,h;if(e&&(r||4===n.readyState))if(delete _e[s],e=void 0,n.onreadystatechange=rt.noop,r)4!==n.readyState&&n.abort();else{h={},p=n.status,"string"==typeof n.responseText&&(h.text=n.responseText);try{a=n.statusText}catch(l){a=""}p||!t.isLocal||t.crossDomain?1223===p&&(p=204):p=h.text?200:404}h&&i(p,a,h,n.getAllResponseHeaders())},t.async?4===n.readyState?setTimeout(e):n.onreadystatechange=_e[s]=e:e()},abort:function(){e&&e(void 0,!0)}}}}),rt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return rt.globalEval(t),t}}}),rt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET",t.global=!1)}),rt.ajaxTransport("script",function(t){if(t.crossDomain){var e,o=yt.head||rt("head")[0]||yt.documentElement;return{send:function(i,r){e=yt.createElement("script"),e.async=!0,t.scriptCharset&&(e.charset=t.scriptCharset),e.src=t.url,e.onload=e.onreadystatechange=function(t,o){(o||!e.readyState||/loaded|complete/.test(e.readyState))&&(e.onload=e.onreadystatechange=null,e.parentNode&&e.parentNode.removeChild(e),e=null,o||r(200,"success"))},o.insertBefore(e,o.firstChild)},abort:function(){e&&e.onload(void 0,!0)}}}});var to=[],eo=/(=)\?(?=&|$)|\?\?/;rt.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=to.pop()||rt.expando+"_"+Ne++;return this[t]=!0,t}}),rt.ajaxPrefilter("json jsonp",function(e,o,i){var r,n,s,p=e.jsonp!==!1&&(eo.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&eo.test(e.data)&&"data");
-return p||"jsonp"===e.dataTypes[0]?(r=e.jsonpCallback=rt.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,p?e[p]=e[p].replace(eo,"$1"+r):e.jsonp!==!1&&(e.url+=(Le.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return s||rt.error(r+" was not called"),s[0]},e.dataTypes[0]="json",n=t[r],t[r]=function(){s=arguments},i.always(function(){t[r]=n,e[r]&&(e.jsonpCallback=o.jsonpCallback,to.push(r)),s&&rt.isFunction(n)&&n(s[0]),s=n=void 0}),"script"):void 0}),rt.parseHTML=function(t,e,o){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(o=e,e=!1),e=e||yt;var i=ut.exec(t),r=!o&&[];return i?[e.createElement(i[1])]:(i=rt.buildFragment([t],e,r),r&&r.length&&rt(r).remove(),rt.merge([],i.childNodes))};var oo=rt.fn.load;rt.fn.load=function(t,e,o){if("string"!=typeof t&&oo)return oo.apply(this,arguments);var i,r,n,s=this,p=t.indexOf(" ");return p>=0&&(i=rt.trim(t.slice(p,t.length)),t=t.slice(0,p)),rt.isFunction(e)?(o=e,e=void 0):e&&"object"==typeof e&&(n="POST"),s.length>0&&rt.ajax({url:t,type:n,dataType:"html",data:e}).done(function(t){r=arguments,s.html(i?rt("<div>").append(rt.parseHTML(t)).find(i):t)}).complete(o&&function(t,e){s.each(o,r||[t.responseText,e,t])}),this},rt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){rt.fn[e]=function(t){return this.on(e,t)}}),rt.expr.filters.animated=function(t){return rt.grep(rt.timers,function(e){return t===e.elem}).length};var io=t.document.documentElement;rt.offset={setOffset:function(t,e,o){var i,r,n,s,p,a,h,l=rt.css(t,"position"),u=rt(t),c={};"static"===l&&(t.style.position="relative"),p=u.offset(),n=rt.css(t,"top"),a=rt.css(t,"left"),h=("absolute"===l||"fixed"===l)&&rt.inArray("auto",[n,a])>-1,h?(i=u.position(),s=i.top,r=i.left):(s=parseFloat(n)||0,r=parseFloat(a)||0),rt.isFunction(e)&&(e=e.call(t,o,p)),null!=e.top&&(c.top=e.top-p.top+s),null!=e.left&&(c.left=e.left-p.left+r),"using"in e?e.using.call(t,c):u.css(c)}},rt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){rt.offset.setOffset(this,t,e)});var e,o,i={top:0,left:0},r=this[0],n=r&&r.ownerDocument;return n?(e=n.documentElement,rt.contains(e,r)?(typeof r.getBoundingClientRect!==Tt&&(i=r.getBoundingClientRect()),o=q(n),{top:i.top+(o.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(o.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}):i):void 0},position:function(){if(this[0]){var t,e,o={top:0,left:0},i=this[0];return"fixed"===rt.css(i,"position")?e=i.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),rt.nodeName(t[0],"html")||(o=t.offset()),o.top+=rt.css(t[0],"borderTopWidth",!0),o.left+=rt.css(t[0],"borderLeftWidth",!0)),{top:e.top-o.top-rt.css(i,"marginTop",!0),left:e.left-o.left-rt.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||io;t&&!rt.nodeName(t,"html")&&"static"===rt.css(t,"position");)t=t.offsetParent;return t||io})}}),rt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var o=/Y/.test(e);rt.fn[t]=function(i){return jt(this,function(t,i,r){var n=q(t);return void 0===r?n?e in n?n[e]:n.document.documentElement[i]:t[i]:void(n?n.scrollTo(o?rt(n).scrollLeft():r,o?r:rt(n).scrollTop()):t[i]=r)},t,i,arguments.length,null)}}),rt.each(["top","left"],function(t,e){rt.cssHooks[e]=C(ot.pixelPosition,function(t,o){return o?(o=ee(t,e),ie.test(o)?rt(t).position()[e]+"px":o):void 0})}),rt.each({Height:"height",Width:"width"},function(t,e){rt.each({padding:"inner"+t,content:e,"":"outer"+t},function(o,i){rt.fn[i]=function(i,r){var n=arguments.length&&(o||"boolean"!=typeof i),s=o||(i===!0||r===!0?"margin":"border");return jt(this,function(e,o,i){var r;return rt.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+t],r["scroll"+t],e.body["offset"+t],r["offset"+t],r["client"+t])):void 0===i?rt.css(e,o,s):rt.style(e,o,i,s)},e,n?i:void 0,n,null)}})}),rt.fn.size=function(){return this.length},rt.fn.andSelf=rt.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return rt});var ro=t.jQuery,no=t.$;return rt.noConflict=function(e){return t.$===rt&&(t.$=no),e&&t.jQuery===rt&&(t.jQuery=ro),rt},typeof e===Tt&&(t.jQuery=t.$=rt),rt}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var o in e)if(void 0!==t.style[o])return{end:e[o]};return!1}t.fn.emulateTransitionEnd=function(e){var o=!1,i=this;t(this).one("bsTransitionEnd",function(){o=!0});var r=function(){o||t(i).trigger(t.support.transition.end)};return setTimeout(r,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),r=o.data("bs.alert");r||o.data("bs.alert",r=new i(this)),"string"==typeof e&&r[e].call(o)})}var o='[data-dismiss="alert"]',i=function(e){t(e).on("click",o,this.close)};i.VERSION="3.3.4",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function o(){s.detach().trigger("closed.bs.alert").remove()}var r=t(this),n=r.attr("data-target");n||(n=r.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,""));var s=t(n);e&&e.preventDefault(),s.length||(s=r.closest(".alert")),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o())};var r=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=r,this},t(document).on("click.bs.alert.data-api",o,i.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.button"),n="object"==typeof e&&e;r||i.data("bs.button",r=new o(this,n)),"toggle"==e?r.toggle():e&&r.setState(e)})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.isLoading=!1};o.VERSION="3.3.4",o.DEFAULTS={loadingText:"loading..."},o.prototype.setState=function(e){var o="disabled",i=this.$element,r=i.is("input")?"val":"html",n=i.data();e+="Text",null==n.resetText&&i.data("resetText",i[r]()),setTimeout(t.proxy(function(){i[r](null==n[e]?this.options[e]:n[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(o).attr(o,o)):this.isLoading&&(this.isLoading=!1,i.removeClass(o).removeAttr(o))},this),0)},o.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var o=this.$element.find("input");"radio"==o.prop("type")&&(o.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&o.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));t&&this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=o,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(o){var i=t(o.target);i.hasClass("btn")||(i=i.closest(".btn")),e.call(i,"toggle"),o.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.carousel"),n=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e),s="string"==typeof e?e:n.slide;r||i.data("bs.carousel",r=new o(this,n)),"number"==typeof e?r.to(e):s?r[s]():n.interval&&r.pause().cycle()})}var o=function(e,o){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=o,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};o.VERSION="3.3.4",o.TRANSITION_DURATION=600,o.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},o.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},o.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},o.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},o.prototype.getItemForDirection=function(t,e){var o=this.getItemIndex(e),i="prev"==t&&0===o||"next"==t&&o==this.$items.length-1;if(i&&!this.options.wrap)return e;var r="prev"==t?-1:1,n=(o+r)%this.$items.length;return this.$items.eq(n)},o.prototype.to=function(t){var e=this,o=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):o==t?this.pause().cycle():this.slide(t>o?"next":"prev",this.$items.eq(t))},o.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},o.prototype.next=function(){return this.sliding?void 0:this.slide("next")},o.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},o.prototype.slide=function(e,i){var r=this.$element.find(".item.active"),n=i||this.getItemForDirection(e,r),s=this.interval,p="next"==e?"left":"right",a=this;if(n.hasClass("active"))return this.sliding=!1;var h=n[0],l=t.Event("slide.bs.carousel",{relatedTarget:h,direction:p});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var u=t(this.$indicators.children()[this.getItemIndex(n)]);u&&u.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:p});return t.support.transition&&this.$element.hasClass("slide")?(n.addClass(e),n[0].offsetWidth,r.addClass(p),n.addClass(p),r.one("bsTransitionEnd",function(){n.removeClass([e,p].join(" ")).addClass("active"),r.removeClass(["active",p].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger(c)},0)}).emulateTransitionEnd(o.TRANSITION_DURATION)):(r.removeClass("active"),n.addClass("active"),this.sliding=!1,this.$element.trigger(c)),s&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=o,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var r=function(o){var i,r=t(this),n=t(r.attr("data-target")||(i=r.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(n.hasClass("carousel")){var s=t.extend({},n.data(),r.data()),p=r.attr("data-slide-to");p&&(s.interval=!1),e.call(n,s),p&&n.data("bs.carousel").to(p),o.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",r).on("click.bs.carousel.data-api","[data-slide-to]",r),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var o=t(this);e.call(o,o.data())})})}(jQuery),+function(t){"use strict";function e(e){var o,i=e.attr("data-target")||(o=e.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,"");return t(i)}function o(e){return this.each(function(){var o=t(this),r=o.data("bs.collapse"),n=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e);!r&&n.toggle&&/show|hide/.test(e)&&(n.toggle=!1),r||o.data("bs.collapse",r=new i(this,n)),"string"==typeof e&&r[e]()})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.4",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,r=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(r&&r.length&&(e=r.data("bs.collapse"),e&&e.transitioning))){var n=t.Event("show.bs.collapse");if(this.$element.trigger(n),!n.isDefaultPrevented()){r&&r.length&&(o.call(r,"hide"),e||r.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var p=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return p.call(this);var a=t.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",t.proxy(p,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[s](this.$element[0][a])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var o=this.dimension();this.$element[o](this.$element[o]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var r=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[o](0).one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(i.TRANSITION_DURATION):r.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(o,i){var r=t(i);this.addAriaAndCollapsedClass(e(r),r)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var o=t.hasClass("in");t.attr("aria-expanded",o),e.toggleClass("collapsed",!o).attr("aria-expanded",o)};var r=t.fn.collapse;t.fn.collapse=o,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=r,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var r=t(this);r.attr("data-target")||i.preventDefault();var n=e(r),s=n.data("bs.collapse"),p=s?"toggle":r.data();o.call(n,p)})}(jQuery),+function(t){"use strict";function e(e){e&&3===e.which||(t(r).remove(),t(n).each(function(){var i=t(this),r=o(i),n={relatedTarget:this};r.hasClass("open")&&(r.trigger(e=t.Event("hide.bs.dropdown",n)),e.isDefaultPrevented()||(i.attr("aria-expanded","false"),r.removeClass("open").trigger("hidden.bs.dropdown",n)))}))}function o(e){var o=e.attr("data-target");o||(o=e.attr("href"),o=o&&/#[A-Za-z]/.test(o)&&o.replace(/.*(?=#[^\s]*$)/,""));var i=o&&t(o);return i&&i.length?i:e.parent()}function i(e){return this.each(function(){var o=t(this),i=o.data("bs.dropdown");i||o.data("bs.dropdown",i=new s(this)),"string"==typeof e&&i[e].call(o)})}var r=".dropdown-backdrop",n='[data-toggle="dropdown"]',s=function(e){t(e).on("click.bs.dropdown",this.toggle)};s.VERSION="3.3.4",s.prototype.toggle=function(i){var r=t(this);if(!r.is(".disabled, :disabled")){var n=o(r),s=n.hasClass("open");if(e(),!s){"ontouchstart"in document.documentElement&&!n.closest(".navbar-nav").length&&t('<div class="dropdown-backdrop"/>').insertAfter(t(this)).on("click",e);var p={relatedTarget:this};if(n.trigger(i=t.Event("show.bs.dropdown",p)),i.isDefaultPrevented())return;r.trigger("focus").attr("aria-expanded","true"),n.toggleClass("open").trigger("shown.bs.dropdown",p)}return!1}},s.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var i=t(this);if(e.preventDefault(),e.stopPropagation(),!i.is(".disabled, :disabled")){var r=o(i),s=r.hasClass("open");if(!s&&27!=e.which||s&&27==e.which)return 27==e.which&&r.find(n).trigger("focus"),i.trigger("click");var p=" li:not(.disabled):visible a",a=r.find('[role="menu"]'+p+', [role="listbox"]'+p);if(a.length){var h=a.index(e.target);38==e.which&&h>0&&h--,40==e.which&&h<a.length-1&&h++,~h||(h=0),a.eq(h).trigger("focus")}}}};var p=t.fn.dropdown;t.fn.dropdown=i,t.fn.dropdown.Constructor=s,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=p,this},t(document).on("click.bs.dropdown.data-api",e).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",n,s.prototype.toggle).on("keydown.bs.dropdown.data-api",n,s.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',s.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',s.prototype.keydown)}(jQuery),+function(t){"use strict";function e(e,i){return this.each(function(){var r=t(this),n=r.data("bs.modal"),s=t.extend({},o.DEFAULTS,r.data(),"object"==typeof e&&e);n||r.data("bs.modal",n=new o(this,s)),"string"==typeof e?n[e](i):s.show&&n.show(i)})}var o=function(e,o){this.options=o,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};o.VERSION="3.3.4",o.TRANSITION_DURATION=300,o.BACKDROP_TRANSITION_DURATION=150,o.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},o.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},o.prototype.show=function(e){var i=this,r=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(r),this.isShown||r.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var r=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),r&&i.$element[0].offsetWidth,i.$element.addClass("in").attr("aria-hidden",!1),i.enforceFocus();var n=t.Event("shown.bs.modal",{relatedTarget:e});r?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(n)}).emulateTransitionEnd(o.TRANSITION_DURATION):i.$element.trigger("focus").trigger(n)}))},o.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(o.TRANSITION_DURATION):this.hideModal())},o.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},o.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},o.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},o.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},o.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},o.prototype.backdrop=function(e){var i=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var n=t.support.transition&&r;if(this.$backdrop=t('<div class="modal-backdrop '+r+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),n&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;n?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(o.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var s=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",s).emulateTransitionEnd(o.BACKDROP_TRANSITION_DURATION):s()}else e&&e()},o.prototype.handleUpdate=function(){this.adjustDialog()},o.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},o.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},o.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},o.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},o.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},o.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var i=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=o,t.fn.modal.noConflict=function(){return t.fn.modal=i,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(o){var i=t(this),r=i.attr("href"),n=t(i.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=n.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(r)&&r},n.data(),i.data());i.is("a")&&o.preventDefault(),n.one("show.bs.modal",function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),e.call(n,s,this)})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.tooltip"),n="object"==typeof e&&e;(r||!/destroy|hide/.test(e))&&(r||i.data("bs.tooltip",r=new o(this,n)),"string"==typeof e&&r[e]())})}var o=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",t,e)};o.VERSION="3.3.4",o.TRANSITION_DURATION=150,o.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},o.prototype.init=function(e,o,i){if(this.enabled=!0,this.type=e,this.$element=t(o),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var r=this.options.trigger.split(" "),n=r.length;n--;){var s=r[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=s){var p="hover"==s?"mouseenter":"focusin",a="hover"==s?"mouseleave":"focusout";this.$element.on(p+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},o.prototype.getDelegateOptions=function(){var e={},o=this.getDefaults();return this._options&&t.each(this._options,function(t,i){o[t]!=i&&(e[t]=i)}),e},o.prototype.enter=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o&&o.$tip&&o.$tip.is(":visible")?void(o.hoverState="in"):(o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="in",o.options.delay&&o.options.delay.show?void(o.timeout=setTimeout(function(){"in"==o.hoverState&&o.show()},o.options.delay.show)):o.show())},o.prototype.leave=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="out",o.options.delay&&o.options.delay.hide?void(o.timeout=setTimeout(function(){"out"==o.hoverState&&o.hide()},o.options.delay.hide)):o.hide()},o.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var r=this,n=this.tip(),s=this.getUID(this.type);this.setContent(),n.attr("id",s),this.$element.attr("aria-describedby",s),this.options.animation&&n.addClass("fade");var p="function"==typeof this.options.placement?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,h=a.test(p);h&&(p=p.replace(a,"")||"top"),n.detach().css({top:0,left:0,display:"block"}).addClass(p).data("bs."+this.type,this),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var l=this.getPosition(),u=n[0].offsetWidth,c=n[0].offsetHeight;if(h){var f=p,y=this.options.container?t(this.options.container):this.$element.parent(),d=this.getPosition(y);p="bottom"==p&&l.bottom+c>d.bottom?"top":"top"==p&&l.top-c<d.top?"bottom":"right"==p&&l.right+u>d.width?"left":"left"==p&&l.left-u<d.left?"right":p,n.removeClass(f).addClass(p)}var g=this.getCalculatedOffset(p,l,u,c);this.applyPlacement(g,p);var v=function(){var t=r.hoverState;r.$element.trigger("shown.bs."+r.type),r.hoverState=null,"out"==t&&r.leave(r)};t.support.transition&&this.$tip.hasClass("fade")?n.one("bsTransitionEnd",v).emulateTransitionEnd(o.TRANSITION_DURATION):v()}},o.prototype.applyPlacement=function(e,o){var i=this.tip(),r=i[0].offsetWidth,n=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),p=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(p)&&(p=0),e.top=e.top+s,e.left=e.left+p,t.offset.setOffset(i[0],t.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),i.addClass("in");var a=i[0].offsetWidth,h=i[0].offsetHeight;"top"==o&&h!=n&&(e.top=e.top+n-h);var l=this.getViewportAdjustedDelta(o,e,a,h);l.left?e.left+=l.left:e.top+=l.top;var u=/top|bottom/.test(o),c=u?2*l.left-r+a:2*l.top-n+h,f=u?"offsetWidth":"offsetHeight";i.offset(e),this.replaceArrow(c,i[0][f],u)},o.prototype.replaceArrow=function(t,e,o){this.arrow().css(o?"left":"top",50*(1-t/e)+"%").css(o?"top":"left","")},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},o.prototype.hide=function(e){function i(){"in"!=r.hoverState&&n.detach(),r.$element.removeAttr("aria-describedby").trigger("hidden.bs."+r.type),e&&e()}var r=this,n=t(this.$tip),s=t.Event("hide.bs."+this.type);return this.$element.trigger(s),s.isDefaultPrevented()?void 0:(n.removeClass("in"),t.support.transition&&n.hasClass("fade")?n.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i(),this.hoverState=null,this)},o.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},o.prototype.hasContent=function(){return this.getTitle()},o.prototype.getPosition=function(e){e=e||this.$element;var o=e[0],i="BODY"==o.tagName,r=o.getBoundingClientRect();null==r.width&&(r=t.extend({},r,{width:r.right-r.left,height:r.bottom-r.top}));var n=i?{top:0,left:0}:e.offset(),s={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},p=i?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},r,s,p,n)},o.prototype.getCalculatedOffset=function(t,e,o,i){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-o/2}:"top"==t?{top:e.top-i,left:e.left+e.width/2-o/2}:"left"==t?{top:e.top+e.height/2-i/2,left:e.left-o}:{top:e.top+e.height/2-i/2,left:e.left+e.width}},o.prototype.getViewportAdjustedDelta=function(t,e,o,i){var r={top:0,left:0};if(!this.$viewport)return r;var n=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(t)){var p=e.top-n-s.scroll,a=e.top+n-s.scroll+i;p<s.top?r.top=s.top-p:a>s.top+s.height&&(r.top=s.top+s.height-a)}else{var h=e.left-n,l=e.left+n+o;h<s.left?r.left=s.left-h:l>s.width&&(r.left=s.left+s.width-l)}return r},o.prototype.getTitle=function(){var t,e=this.$element,o=this.options;return t=e.attr("data-original-title")||("function"==typeof o.title?o.title.call(e[0]):o.title)},o.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},o.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},o.prototype.enable=function(){this.enabled=!0},o.prototype.disable=function(){this.enabled=!1},o.prototype.toggleEnabled=function(){this.enabled=!this.enabled},o.prototype.toggle=function(e){var o=this;e&&(o=t(e.currentTarget).data("bs."+this.type),o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o))),o.tip().hasClass("in")?o.leave(o):o.enter(o)},o.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type)})};var i=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=o,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.popover"),n="object"==typeof e&&e;(r||!/destroy|hide/.test(e))&&(r||i.data("bs.popover",r=new o(this,n)),
-"string"==typeof e&&r[e]())})}var o=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");o.VERSION="3.3.4",o.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),o.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),o.prototype.constructor=o,o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),o=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof o?"html":"append":"text"](o),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},o.prototype.hasContent=function(){return this.getTitle()||this.getContent()},o.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=o,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),+function(t){"use strict";function e(o,i){this.$body=t(document.body),this.$scrollElement=t(t(o).is(document.body)?window:o),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function o(o){return this.each(function(){var i=t(this),r=i.data("bs.scrollspy"),n="object"==typeof o&&o;r||i.data("bs.scrollspy",r=new e(this,n)),"string"==typeof o&&r[o]()})}e.VERSION="3.3.4",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,o="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(o="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),r=e.data("target")||e.attr("href"),n=/^#./.test(r)&&t(r);return n&&n.length&&n.is(":visible")&&[[n[o]().top+i,r]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,o=this.getScrollHeight(),i=this.options.offset+o-this.$scrollElement.height(),r=this.offsets,n=this.targets,s=this.activeTarget;if(this.scrollHeight!=o&&this.refresh(),e>=i)return s!=(t=n[n.length-1])&&this.activate(t);if(s&&e<r[0])return this.activeTarget=null,this.clear();for(t=r.length;t--;)s!=n[t]&&e>=r[t]&&(void 0===r[t+1]||e<r[t+1])&&this.activate(n[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var o=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',i=t(o).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=t.fn.scrollspy;t.fn.scrollspy=o,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);o.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.tab");r||i.data("bs.tab",r=new o(this)),"string"==typeof e&&r[e]()})}var o=function(e){this.element=t(e)};o.VERSION="3.3.4",o.TRANSITION_DURATION=150,o.prototype.show=function(){var e=this.element,o=e.closest("ul:not(.dropdown-menu)"),i=e.data("target");if(i||(i=e.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var r=o.find(".active:last a"),n=t.Event("hide.bs.tab",{relatedTarget:e[0]}),s=t.Event("show.bs.tab",{relatedTarget:r[0]});if(r.trigger(n),e.trigger(s),!s.isDefaultPrevented()&&!n.isDefaultPrevented()){var p=t(i);this.activate(e.closest("li"),o),this.activate(p,p.parent(),function(){r.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:r[0]})})}}},o.prototype.activate=function(e,i,r){function n(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),p?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),r&&r()}var s=i.find("> .active"),p=r&&t.support.transition&&(s.length&&s.hasClass("fade")||!!i.find("> .fade").length);s.length&&p?s.one("bsTransitionEnd",n).emulateTransitionEnd(o.TRANSITION_DURATION):n(),s.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=o,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var r=function(o){o.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',r).on("click.bs.tab.data-api",'[data-toggle="pill"]',r)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),r=i.data("bs.affix"),n="object"==typeof e&&e;r||i.data("bs.affix",r=new o(this,n)),"string"==typeof e&&r[e]()})}var o=function(e,i){this.options=t.extend({},o.DEFAULTS,i),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};o.VERSION="3.3.4",o.RESET="affix affix-top affix-bottom",o.DEFAULTS={offset:0,target:window},o.prototype.getState=function(t,e,o,i){var r=this.$target.scrollTop(),n=this.$element.offset(),s=this.$target.height();if(null!=o&&"top"==this.affixed)return o>r&&"top";if("bottom"==this.affixed)return null!=o?!(r+this.unpin<=n.top)&&"bottom":!(t-i>=r+s)&&"bottom";var p=null==this.affixed,a=p?r:n.top,h=p?s:e;return null!=o&&o>=r?"top":null!=i&&a+h>=t-i&&"bottom"},o.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(o.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},o.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},o.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,r=i.top,n=i.bottom,s=t(document.body).height();"object"!=typeof i&&(n=r=i),"function"==typeof r&&(r=i.top(this.$element)),"function"==typeof n&&(n=i.bottom(this.$element));var p=this.getState(s,e,r,n);if(this.affixed!=p){null!=this.unpin&&this.$element.css("top","");var a="affix"+(p?"-"+p:""),h=t.Event(a+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=p,this.unpin="bottom"==p?this.getPinnedOffset():null,this.$element.removeClass(o.RESET).addClass(a).trigger(a.replace("affix","affixed")+".bs.affix")}"bottom"==p&&this.$element.offset({top:s-e-n})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=o,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var o=t(this),i=o.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(o,i)})})}(jQuery),function(t,e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define([],e):t.ol=e()}(this,function(){function t(t,e){var o=t.split("."),i=nd||sd;o[0]in i||!i.execScript||i.execScript("var "+o[0]);for(var r;o.length&&(r=o.shift());)o.length||void 0===e?i=i[r]?i[r]:i[r]={}:i[r]=e}function e(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t}function o(){}function i(t){return t.On||(t.On=++pd)}function r(t){this.message="Assertion failed. See https://openlayers.org/en/v3.19.1/doc/errors/#"+t+" for details.",this.code=t,this.name="AssertionError"}function n(t,e){if(!t)throw new r(e)}function s(t,e,o){return Math.min(Math.max(t,e),o)}function p(t){return n(0<t,29),Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function a(t,e,o,i,r,n){var s=r-o,p=n-i;if(0!==s||0!==p){var a=((t-o)*s+(e-i)*p)/(s*s+p*p);1<a?(o=r,i=n):0<a&&(o+=s*a,i+=p*a)}return h(t,e,o,i)}function h(t,e,o,i){return t=o-t,e=i-e,t*t+e*e}function l(t){return t*Math.PI/180}function u(t,e){var o=t%e;return 0>o*e?o+e:o}function c(t,e,o){return t+o*(e-t)}function f(t){return function(e){if(e)return[s(e[0],t[0],t[2]),s(e[1],t[1],t[3])]}}function y(t){return t}function d(t,e,o){this.center=t,this.resolution=e,this.rotation=o}function g(t){for(var e in t)delete t[e]}function v(t){var e,o=[];for(e in t)o.push(t[e]);return o}function m(t){for(var e in t)return!1;return!e}function b(t){function e(e){var o=t.listener,i=t.jg||t.target;return t.lg&&P(t),o.call(i,e)}return t.kg=e}function w(t,e,o,i){for(var r,n=0,s=t.length;n<s;++n)if(r=t[n],r.listener===e&&r.jg===o)return i&&(r.deleteIndex=n),r}function x(t,e){var o=t.$a;return o?o[e]:void 0}function S(t){var e=t.$a;return e||(e=t.$a={}),e}function T(t,e){var o=x(t,e);if(o){for(var i=0,r=o.length;i<r;++i)t.removeEventListener(e,o[i].kg),g(o[i]);o.length=0,(o=t.$a)&&(delete o[e],0===Object.keys(o).length&&delete t.$a)}}function E(t,e,o,i,r){var n=S(t),s=n[e];return s||(s=n[e]=[]),(n=w(s,o,i,!1))?r||(n.lg=!1):(n={jg:i,lg:!!r,listener:o,target:t,type:e},t.addEventListener(e,b(n)),s.push(n)),n}function M(t,e,o,i){return E(t,e,o,i,!0)}function C(t,e,o,i){(t=x(t,e))&&(o=w(t,o,i,!0))&&P(o)}function P(t){if(t&&t.target){t.target.removeEventListener(t.type,t.kg);var e=x(t.target,t.type);if(e){var o="deleteIndex"in t?t.deleteIndex:e.indexOf(t);-1!==o&&e.splice(o,1),0===e.length&&T(t.target,t.type)}g(t)}}function A(t){var e,o=S(t);for(e in o)T(t,e)}function j(){}function N(t){t.Ib||(t.Ib=!0,t.la())}function L(t){this.type=t,this.target=null}function R(t){t.stopPropagation()}function k(){this.Qa={},this.za={},this.na={}}function I(t,e){return e?e in t.na:0<Object.keys(t.na).length}function D(){k.call(this),this.g=0}function F(t){if(Array.isArray(t))for(var e=0,o=t.length;e<o;++e)P(t[e]);else P(t)}function O(t,e,o){L.call(this,t),this.key=e,this.oldValue=o}function B(t){D.call(this),i(this),this.T={},void 0!==t&&this.H(t)}function U(t){return ld.hasOwnProperty(t)?ld[t]:ld[t]="change:"+t}function G(t,e,o){var i;i=U(e),t.b(new O(i,e,o)),t.b(new O("propertychange",e,o))}function $(t,e){return t>e?1:t<e?-1:0}function H(t,e){return 0<=t.indexOf(e)}function X(t,e,o){var i=t.length;if(t[0]<=e)return 0;if(!(e<=t[i-1]))if(0<o){for(o=1;o<i;++o)if(t[o]<e)return o-1}else if(0>o){for(o=1;o<i;++o)if(t[o]<=e)return o}else for(o=1;o<i;++o){if(t[o]==e)return o;if(t[o]<e)return t[o-1]-e<e-t[o]?o-1:o}return i-1}function K(t){return t.reduce(function(t,e){return Array.isArray(e)?t.concat(K(e)):t.concat(e)},[])}function W(t,e){var o,i=Array.isArray(e)?e:[e],r=i.length;for(o=0;o<r;o++)t[t.length]=i[o]}function z(t,e){var o=t.indexOf(e),i=-1<o;return i&&t.splice(o,1),i}function q(t,e){for(var o,i=t.length>>>0,r=0;r<i;r++)if(o=t[r],e(o,r,t))return o;return null}function V(t,e){var o=t.length;if(o!==e.length)return!1;for(var i=0;i<o;i++)if(t[i]!==e[i])return!1;return!0}function Y(t){var e,o=Sn,i=t.length,r=Array(t.length);for(e=0;e<i;e++)r[e]={index:e,value:t[e]};for(r.sort(function(t,e){return o(t.value,e.value)||t.index-e.index}),e=0;e<t.length;e++)t[e]=r[e].value}function Z(t,e){var o;return t.every(function(i,r){return o=r,!e(i,r,t)})?-1:o}function J(t,e){var o=e||$;return t.every(function(e,i){if(0===i)return!0;var r=o(t[i-1],e);return!(0<r||0===r)})}function _(t){return function(e,o,i){if(void 0!==e)return e=X(t,e,i),e=s(e+o,0,t.length-1),o=Math.floor(e),e!=o&&o<t.length-1?t[o]/Math.pow(t[o]/t[o+1],e-o):t[o]}}function Q(t,e,o){return function(i,r,n){if(void 0!==i)return i=Math.max(Math.floor(Math.log(e/i)/Math.log(t)+(-n/2+.5))+r,0),void 0!==o&&(i=Math.min(i,o)),e/Math.pow(t,i)}}function tt(t){if(void 0!==t)return 0}function et(t,e){if(void 0!==t)return t+e}function ot(t){var e=2*Math.PI/t;return function(t,o){if(void 0!==t)return t=Math.floor((t+o)/e+.5)*e}}function it(){var t=l(5);return function(e,o){if(void 0!==e)return Math.abs(e+o)<=t?0:e+o}}function rt(t,e){var o=void 0!==e?t.toFixed(e):""+t,i=o.indexOf("."),i=-1===i?o.length:i;return 2<i?o:Array(3-i).join("0")+o}function nt(t){t=(""+t).split(".");for(var e=["1","3"],o=0;o<Math.max(t.length,e.length);o++){var i=parseInt(t[o]||"0",10),r=parseInt(e[o]||"0",10);if(i>r)return 1;if(r>i)return-1}return 0}function st(t,e){return t[0]+=e[0],t[1]+=e[1],t}function pt(t,e){var o=t[0],i=t[1],r=e[0],n=e[1],s=r[0],r=r[1],p=n[0],n=n[1],a=p-s,h=n-r,o=0===a&&0===h?0:(a*(o-s)+h*(i-r))/(a*a+h*h||0);return 0>=o||(1<=o?(s=p,r=n):(s+=o*a,r+=o*h)),[s,r]}function at(t,e,o){t=u(t+180,360)-180;var i=Math.abs(3600*t);return Math.floor(i/3600)+"° "+rt(Math.floor(i/60%60))+"′ "+rt(i%60,o||0)+"″ "+e.charAt(0>t?1:0)}function ht(t,e,o){return t?e.replace("{x}",t[0].toFixed(o)).replace("{y}",t[1].toFixed(o)):""}function lt(t,e){for(var o=!0,i=t.length-1;0<=i;--i)if(t[i]!=e[i]){o=!1;break}return o}function ut(t,e){var o=Math.cos(e),i=Math.sin(e),r=t[1]*o+t[0]*i;return t[0]=t[0]*o-t[1]*i,t[1]=r,t}function ct(t,e){var o=t[0]-e[0],i=t[1]-e[1];return o*o+i*i}function ft(t,e){return ct(t,pt(t,e))}function yt(t,e){return ht(t,"{x}, {y}",e)}function dt(t){for(var e=Tt(),o=0,i=t.length;o<i;++o)jt(e,t[o]);return e}function gt(t,e,o){return o?(o[0]=t[0]-e,o[1]=t[1]-e,o[2]=t[2]+e,o[3]=t[3]+e,o):[t[0]-e,t[1]-e,t[2]+e,t[3]+e]}function vt(t,e){return e?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e):t.slice()}function mt(t,e,o){return e=e<t[0]?t[0]-e:t[2]<e?e-t[2]:0,t=o<t[1]?t[1]-o:t[3]<o?o-t[3]:0,e*e+t*t}function bt(t,e){return xt(t,e[0],e[1])}function wt(t,e){return t[0]<=e[0]&&e[2]<=t[2]&&t[1]<=e[1]&&e[3]<=t[3]}function xt(t,e,o){return t[0]<=e&&e<=t[2]&&t[1]<=o&&o<=t[3]}function St(t,e){var o=t[1],i=t[2],r=t[3],n=e[0],s=e[1],p=0;return n<t[0]?p|=16:n>i&&(p|=4),s<o?p|=8:s>r&&(p|=2),0===p&&(p=1),p}function Tt(){return[1/0,1/0,-(1/0),-(1/0)]}function Et(t,e,o,i,r){return r?(r[0]=t,r[1]=e,r[2]=o,r[3]=i,r):[t,e,o,i]}function Mt(t,e){var o=t[0],i=t[1];return Et(o,i,o,i,e)}function Ct(t,e,o,i,r){return r=Et(1/0,1/0,-(1/0),-(1/0),r),Nt(r,t,e,o,i)}function Pt(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function At(t,e){return e[0]<t[0]&&(t[0]=e[0]),e[2]>t[2]&&(t[2]=e[2]),e[1]<t[1]&&(t[1]=e[1]),e[3]>t[3]&&(t[3]=e[3]),t}function jt(t,e){e[0]<t[0]&&(t[0]=e[0]),e[0]>t[2]&&(t[2]=e[0]),e[1]<t[1]&&(t[1]=e[1]),e[1]>t[3]&&(t[3]=e[1])}function Nt(t,e,o,i,r){for(;o<i;o+=r){var n=t,s=e[o],p=e[o+1];n[0]=Math.min(n[0],s),n[1]=Math.min(n[1],p),n[2]=Math.max(n[2],s),n[3]=Math.max(n[3],p)}return t}function Lt(t,e,o){var i;return(i=e.call(o,kt(t)))||(i=e.call(o,It(t)))||(i=e.call(o,Gt(t)))?i:!!(i=e.call(o,Ut(t)))&&i}function Rt(t){var e=0;return Xt(t)||(e=$t(t)*Ot(t)),e}function kt(t){return[t[0],t[1]]}function It(t){return[t[2],t[1]]}function Dt(t){return[(t[0]+t[2])/2,(t[1]+t[3])/2]}function Ft(t,e,o,i,r){var n=e*i[0]/2;i=e*i[1]/2,e=Math.cos(o);var s=Math.sin(o);o=n*e,n*=s,e*=i;var p=i*s,a=t[0],h=t[1];t=a-o+p,i=a-o-p,s=a+o-p,o=a+o+p;var p=h-n-e,a=h-n+e,l=h+n+e,n=h+n-e;return Et(Math.min(t,i,s,o),Math.min(p,a,l,n),Math.max(t,i,s,o),Math.max(p,a,l,n),r)}function Ot(t){return t[3]-t[1]}function Bt(t,e,o){return o=o?o:Tt(),Ht(t,e)&&(o[0]=t[0]>e[0]?t[0]:e[0],o[1]=t[1]>e[1]?t[1]:e[1],o[2]=t[2]<e[2]?t[2]:e[2],o[3]=t[3]<e[3]?t[3]:e[3]),o}function Ut(t){return[t[0],t[3]]}function Gt(t){return[t[2],t[3]]}function $t(t){return t[2]-t[0]}function Ht(t,e){return t[0]<=e[2]&&t[2]>=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function Xt(t){return t[2]<t[0]||t[3]<t[1]}function Kt(t,e){var o=(t[2]-t[0])/2*(e-1),i=(t[3]-t[1])/2*(e-1);t[0]-=o,t[2]+=o,t[1]-=i,t[3]+=i}function Wt(t,e,o){t=[t[0],t[1],t[0],t[3],t[2],t[1],t[2],t[3]],e(t,t,2);var i=[t[0],t[2],t[4],t[6]],r=[t[1],t[3],t[5],t[7]];return e=Math.min.apply(null,i),t=Math.min.apply(null,r),i=Math.max.apply(null,i),r=Math.max.apply(null,r),Et(e,t,i,r,o)}function zt(){return!0}function qt(){return!1}function Vt(t){this.radius=t}function Yt(t){this.eb=t.code,this.c=t.units,this.f=void 0!==t.extent?t.extent:null,this.i=void 0!==t.worldExtent?t.worldExtent:null,this.b=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.g=void 0!==t.global&&t.global,this.a=!(!this.g||!this.f),this.l=void 0!==t.getPointResolution?t.getPointResolution:this.fk,this.j=null,this.o=t.metersPerUnit;var e=fd,o=t.code,i=dd||window.proj4;if("function"==typeof i&&void 0===e[o]){var r=i.defs(o);if(void 0!==r){void 0!==r.axis&&void 0===t.axisOrientation&&(this.b=r.axis),void 0===t.metersPerUnit&&(this.o=r.to_meter),void 0===t.units&&(this.c=r.units);for(var n in e)e=i.defs(n),void 0!==e&&(t=re(n),e===r?Zt([t,this]):(e=i(n,o),oe(t,this,e.forward,e.inverse)))}}}function Zt(t){Qt(t),t.forEach(function(e){t.forEach(function(t){e!==t&&ee(e,t,he)})})}function Jt(){var t=vg,e=Jr,o=_r;xg.forEach(function(i){t.forEach(function(t){ee(i,t,e),ee(t,i,o)})})}function _t(t){fd[t.eb]=t,ee(t,t,he)}function Qt(t){var e=[];t.forEach(function(t){e.push(_t(t))})}function te(t){return t?"string"==typeof t?re(t):t:re("EPSG:3857")}function ee(t,e,o){t=t.eb,e=e.eb,t in yd||(yd[t]={}),yd[t][e]=o}function oe(t,e,o,i){t=re(t),e=re(e),ee(t,e,ie(o)),ee(e,t,ie(i))}function ie(t){return function(e,o,i){var r=e.length;i=void 0!==i?i:2,o=void 0!==o?o:Array(r);var n,s;for(s=0;s<r;s+=i)for(n=t([e[s],e[s+1]]),o[s]=n[0],o[s+1]=n[1],n=i-1;2<=n;--n)o[s+n]=e[s+n];return o}}function re(t){var e;if(t instanceof Yt)e=t;else if("string"==typeof t){e=fd[t];var o=dd||window.proj4;void 0===e&&"function"==typeof o&&void 0!==o.defs(t)&&(e=new Yt({code:t}),_t(e))}return e||null}function ne(t,e){if(t===e)return!0;var o=t.yb()===e.yb();return t.eb===e.eb?o:pe(t,e)===he&&o}function se(t,e){var o=re(t),i=re(e);return pe(o,i)}function pe(t,e){var o,i=t.eb,r=e.eb;return i in yd&&r in yd[i]&&(o=yd[i][r]),void 0===o&&(o=ae),o}function ae(t,e){if(void 0!==e&&t!==e){for(var o=0,i=t.length;o<i;++o)e[o]=t[o];t=e}return t}function he(t,e){var o;if(void 0!==e){o=0;for(var i=t.length;o<i;++o)e[o]=t[o];o=e}else o=t.slice();return o}function le(t,e,o){return se(e,o)(t,void 0,t.length)}function ue(t,e,o){return e=se(e,o),Wt(t,e)}function ce(){B.call(this),this.s=Tt(),this.u=-1,this.i={},this.o=this.j=0}function fe(t,e,o,i,r,n){for(var s=n?n:[],p=0;e<o;e+=i){var a=t[e],h=t[e+1];s[p++]=r[0]*a+r[2]*h+r[4],s[p++]=r[1]*a+r[3]*h+r[5]}return n&&s.length!=p&&(s.length=p),s}function ye(){ce.call(this),this.ia="XY",this.a=2,this.A=null}function de(t){var e;return"XY"==t?e=2:"XYZ"==t||"XYM"==t?e=3:"XYZM"==t&&(e=4),e}function ge(t,e,o){t.a=de(e),t.ia=e,t.A=o}function ve(t,e,o,i){if(e)o=de(e);else{for(e=0;e<i;++e){if(0===o.length)return t.ia="XY",void(t.a=2);o=o[0]}o=o.length;var r;2==o?r="XY":3==o?r="XYZ":4==o&&(r="XYZM"),e=r}t.ia=e,t.a=o}function me(t,e,o,i){for(var r=0,n=t[o-i],s=t[o-i+1];e<o;e+=i)var p=t[e],a=t[e+1],r=r+(s*p-n*a),n=p,s=a;return r/2}function be(t,e,o,i){var r,n,s=0;for(r=0,n=o.length;r<n;++r){var p=o[r],s=s+me(t,e,p,i);e=p}return s}function we(t,e,o,i,r,n,s){var p=t[e],a=t[e+1],h=t[o]-p,l=t[o+1]-a;if(0!==h||0!==l)if(n=((r-p)*h+(n-a)*l)/(h*h+l*l),1<n)e=o;else if(0<n){for(r=0;r<i;++r)s[r]=c(t[e+r],t[o+r],n);return void(s.length=i)}for(r=0;r<i;++r)s[r]=t[e+r];s.length=i}function xe(t,e,o,i,r){var n=t[e],s=t[e+1];for(e+=i;e<o;e+=i){var p=t[e],a=t[e+1],n=h(n,s,p,a);n>r&&(r=n),n=p,s=a}return r}function Se(t,e,o,i,r){var n,s;for(n=0,s=o.length;n<s;++n){var p=o[n];r=xe(t,e,p,i,r),e=p}return r}function Te(t,e,o,i,r,n,s,p,a,l,u){if(e==o)return l;var c;if(0===r){if(c=h(s,p,t[e],t[e+1]),c<l){for(u=0;u<i;++u)a[u]=t[e+u];return a.length=i,c}return l}for(var f=u?u:[NaN,NaN],y=e+i;y<o;)if(we(t,y-i,y,i,s,p,f),c=h(s,p,f[0],f[1]),c<l){for(l=c,u=0;u<i;++u)a[u]=f[u];a.length=i,y+=i}else y+=i*Math.max((Math.sqrt(c)-Math.sqrt(l))/r|0,1);if(n&&(we(t,o-i,e,i,s,p,f),c=h(s,p,f[0],f[1]),c<l)){for(l=c,u=0;u<i;++u)a[u]=f[u];a.length=i}return l}function Ee(t,e,o,i,r,n,s,p,a,h,l){l=l?l:[NaN,NaN];var u,c;for(u=0,c=o.length;u<c;++u){var f=o[u];h=Te(t,e,f,i,r,n,s,p,a,h,l),e=f}return h}function Me(t,e){var o,i,r=0;for(o=0,i=e.length;o<i;++o)t[r++]=e[o];return r}function Ce(t,e,o,i){var r,n;for(r=0,n=o.length;r<n;++r){var s,p=o[r];for(s=0;s<i;++s)t[e++]=p[s]}return e}function Pe(t,e,o,i,r){r=r?r:[];var n,s,p=0;for(n=0,s=o.length;n<s;++n)e=Ce(t,e,o[n],i),r[p++]=e;return r.length=p,r}function Ae(t,e,o,i,r){r=void 0!==r?r:[];for(var n=0;e<o;e+=i)r[n++]=t.slice(e,e+i);return r.length=n,r}function je(t,e,o,i,r){r=void 0!==r?r:[];var n,s,p=0;for(n=0,s=o.length;n<s;++n){var a=o[n];r[p++]=Ae(t,e,a,i,r[p]),e=a}return r.length=p,r}function Ne(t,e,o,i,r,n,s){var p=(o-e)/i;if(3>p){for(;e<o;e+=i)n[s++]=t[e],n[s++]=t[e+1];return s}var h=Array(p);h[0]=1,h[p-1]=1,o=[e,o-i];for(var l,u=0;0<o.length;){var c=o.pop(),f=o.pop(),y=0,d=t[f],g=t[f+1],v=t[c],m=t[c+1];for(l=f+i;l<c;l+=i){var b=a(t[l],t[l+1],d,g,v,m);b>y&&(u=l,y=b)}y>r&&(h[(u-e)/i]=1,f+i<u&&o.push(f,u),u+i<c&&o.push(u,c))}for(l=0;l<p;++l)h[l]&&(n[s++]=t[e+l*i],n[s++]=t[e+l*i+1]);return s}function Le(t,e,o,i,r,n,s,p){var a,h;for(a=0,h=o.length;a<h;++a){var l=o[a];t:{var u=t,c=l,f=i,y=r,d=n;if(e!=c){var g=y*Math.round(u[e]/y),v=y*Math.round(u[e+1]/y);e+=f,d[s++]=g,d[s++]=v;var m,b;do if(m=y*Math.round(u[e]/y),b=y*Math.round(u[e+1]/y),e+=f,e==c){d[s++]=m,d[s++]=b;break t}while(m==g&&b==v);for(;e<c;){var w,x;if(w=y*Math.round(u[e]/y),x=y*Math.round(u[e+1]/y),e+=f,w!=m||x!=b){var S=m-g,T=b-v,E=w-g,M=x-v;S*M==T*E&&(0>S&&E<S||S==E||0<S&&E>S)&&(0>T&&M<T||T==M||0<T&&M>T)||(d[s++]=m,d[s++]=b,g=m,v=b),m=w,b=x}}d[s++]=m,d[s++]=b}}p.push(s),e=l}return s}function Re(t,e){ye.call(this),this.c=this.l=-1,this.ma(t,e)}function ke(t,e,o){ge(t,e,o),t.v()}function Ie(t,e){ye.call(this),this.ma(t,e)}function De(t,e,o,i,r){return!Lt(r,function(r){return!Fe(t,e,o,i,r[0],r[1])})}function Fe(t,e,o,i,r,n){for(var s=!1,p=t[o-i],a=t[o-i+1];e<o;e+=i){var h=t[e],l=t[e+1];a>n!=l>n&&r<(h-p)*(n-a)/(l-a)+p&&(s=!s),p=h,a=l}return s}function Oe(t,e,o,i,r,n){if(0===o.length||!Fe(t,e,o[0],i,r,n))return!1;var s;for(e=1,s=o.length;e<s;++e)if(Fe(t,o[e-1],o[e],i,r,n))return!1;return!0}function Be(t,e,o,i,r,n,s){var p,a,h,l,u,c=r[n+1],f=[],y=o[0];for(h=t[y-i],u=t[y-i+1],p=e;p<y;p+=i)l=t[p],a=t[p+1],(c<=u&&a<=c||u<=c&&c<=a)&&(h=(c-u)/(a-u)*(l-h)+h,f.push(h)),h=l,u=a;for(y=NaN,u=-(1/0),f.sort($),h=f[0],p=1,a=f.length;p<a;++p){l=f[p];var d=Math.abs(l-h);d>u&&(h=(h+l)/2,Oe(t,e,o,i,h,c)&&(y=h,u=d)),h=l}return isNaN(y)&&(y=r[n]),s?(s.push(y,c),s):[y,c]}function Ue(t,e,o,i,r,n){for(var s,p=[t[e],t[e+1]],a=[];e+i<o;e+=i){if(a[0]=t[e+i],a[1]=t[e+i+1],s=r.call(n,p,a))return s;p[0]=a[0],p[1]=a[1]}return!1}function Ge(t,e,o,i,r){var n=Nt(Tt(),t,e,o,i);return!!Ht(r,n)&&(!!(wt(r,n)||n[0]>=r[0]&&n[2]<=r[2]||n[1]>=r[1]&&n[3]<=r[3])||Ue(t,e,o,i,function(t,e){var o=!1,i=St(r,t),n=St(r,e);if(1===i||1===n)o=!0;else{var s=r[0],p=r[1],a=r[2],h=r[3],l=e[0],u=e[1],c=(u-t[1])/(l-t[0]);2&n&&!(2&i)&&(o=l-(u-h)/c,o=o>=s&&o<=a),o||!(4&n)||4&i||(o=u-(l-a)*c,o=o>=p&&o<=h),o||!(8&n)||8&i||(o=l-(u-p)/c,o=o>=s&&o<=a),o||!(16&n)||16&i||(o=u-(l-s)*c,o=o>=p&&o<=h)}return o}))}function $e(t,e,o,i,r){var n=o[0];if(!(Ge(t,e,n,i,r)||Fe(t,e,n,i,r[0],r[1])||Fe(t,e,n,i,r[0],r[3])||Fe(t,e,n,i,r[2],r[1])||Fe(t,e,n,i,r[2],r[3])))return!1;if(1===o.length)return!0;for(e=1,n=o.length;e<n;++e)if(De(t,o[e-1],o[e],i,r))return!1;return!0}function He(t,e,o,i){for(var r=0,n=t[o-i],s=t[o-i+1];e<o;e+=i)var p=t[e],a=t[e+1],r=r+(p-n)*(a+s),n=p,s=a;return 0<r}function Xe(t,e,o,i){var r=0;i=void 0!==i&&i;var n,s;for(n=0,s=e.length;n<s;++n){var p=e[n],r=He(t,r,p,o);if(0===n){if(i&&r||!i&&!r)return!1}else if(i&&!r||!i&&r)return!1;r=p}return!0}function Ke(t,e,o,i,r){r=void 0!==r&&r;var n,s;for(n=0,s=o.length;n<s;++n){var p=o[n],a=He(t,e,p,i);if(0===n?r&&a||!r&&!a:r&&!a||!r&&a)for(var a=t,h=p,l=i;e<h-l;){var u;for(u=0;u<l;++u){var c=a[e+u];a[e+u]=a[h-l+u],a[h-l+u]=c}e+=l,h-=l}e=p}return e}function We(t,e,o,i){var r,n,s=0;for(r=0,n=e.length;r<n;++r)s=Ke(t,s,e[r],o,i);return s}function ze(t,e){ye.call(this),this.c=[],this.C=-1,this.B=null,this.P=this.G=this.S=-1,this.l=null,this.ma(t,e)}function qe(t){if(t.C!=t.g){var e=Dt(t.D());t.B=Be(t.Ob(),0,t.c,t.a,e,0),t.C=t.g}return t.B}function Ve(t,e,o,i){var r=i?i:32;i=[];var n;for(n=0;n<r;++n)W(i,t.offset(e,o,2*Math.PI*n/r));return i.push(i[0],i[1]),t=new ze(null),t.aa("XY",i,[i.length]),t}function Ye(t){var e=t[0],o=t[1],i=t[2];return t=t[3],e=[e,o,e,t,i,t,i,o,e,o],o=new ze(null),o.aa("XY",e,[e.length]),o}function Ze(t,e,o){var i=e?e:32,r=t.sa();e=t.ia;for(var n=new ze(null,e),i=r*(i+1),r=Array(i),s=0;s<i;s++)r[s]=0;return n.aa(e,r,[r.length]),Je(n,t.td(),t.vf(),o),n}function Je(t,e,o,i){var r=t.ka(),n=t.ia,s=t.sa(),p=t.Eb(),a=r.length/s-1;i=i?i:0;for(var h,l,c=0;c<=a;++c)l=c*s,h=i+2*u(c,a)*Math.PI/a,r[l]=e[0]+o*Math.cos(h),r[l+1]=e[1]+o*Math.sin(h);t.aa(n,r,p)}function _e(t){B.call(this),t=t||{},this.c=[0,0];var e={};e[gd]=void 0!==t.center?t.center:null,this.l=te(t.projection);var o,i,r,n=void 0!==t.minZoom?t.minZoom:0;o=void 0!==t.maxZoom?t.maxZoom:28;var s=void 0!==t.zoomFactor?t.zoomFactor:2;if(void 0!==t.resolutions)o=t.resolutions,i=o[0],r=o[o.length-1],o=_(o);else{i=te(t.projection),r=i.D();var p=(r?Math.max($t(r),Ot(r)):360*cd.degrees/i.dc())/256/Math.pow(2,0),a=p/Math.pow(2,28);i=t.maxResolution,void 0!==i?n=0:i=p/Math.pow(s,n),r=t.minResolution,void 0===r&&(r=void 0!==t.maxZoom?void 0!==t.maxResolution?i/Math.pow(s,o):p/Math.pow(s,o):a),o=n+Math.floor(Math.log(i/r)/Math.log(s)),r=i/Math.pow(s,o-n),o=Q(s,i,o-n)}this.a=i,this.i=r,this.s=s,this.f=t.resolutions,this.j=n,n=void 0!==t.extent?f(t.extent):y,(void 0!==t.enableRotation?t.enableRotation:1)?(s=t.constrainRotation,s=void 0===s||!0===s?it():!1===s?et:"number"==typeof s?ot(s):et):s=tt,this.o=new d(n,o,s),void 0!==t.resolution?e[vd]=t.resolution:void 0!==t.zoom&&(e[vd]=this.constrainResolution(this.a,t.zoom-this.j)),e[md]=void 0!==t.rotation?t.rotation:0,this.H(e)}function Qe(t,e){return void 0!==e?(e[0]=t.c[0],e[1]=t.c[1],e):t.c.slice()}function to(t,e){return Math.max($t(t)/e[0],Ot(t)/e[1])}function eo(t){var e=t.a,o=Math.log(e/t.i)/Math.log(2);return function(t){return e/Math.pow(2,t*o)}}function oo(t){var e=t.a,o=Math.log(e/t.i)/Math.log(2);return function(t){return Math.log(e/t)/Math.log(2)/o}}function io(t){return!!t.bb()&&void 0!==t.Ma()}function ro(t,e){t.c[1]+=e}function no(t){return Math.pow(t,3)}function so(t){return 1-no(1-t)}function po(t){return 3*t*t-2*t*t*t}function ao(t){return t}function ho(t){return.5>t?po(2*t):1-po(2*(t-.5))}function lo(t){var e=t.source,o=t.start?t.start:Date.now(),i=e[0],r=e[1],n=void 0!==t.duration?t.duration:1e3,s=t.easing?t.easing:po;return function(t,e){if(e.time<o)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<o+n){var p=1-s((e.time-o)/n),a=i-e.viewState.center[0],h=r-e.viewState.center[1];return e.animate=!0,e.viewState.center[0]+=p*a,e.viewState.center[1]+=p*h,e.viewHints[0]+=1,!0}return!1}}function uo(t){var e=t.rotation?t.rotation:0,o=t.start?t.start:Date.now(),i=void 0!==t.duration?t.duration:1e3,r=t.easing?t.easing:po,n=t.anchor?t.anchor:null;return function(t,s){if(s.time<o)return s.animate=!0,s.viewHints[0]+=1,!0;if(s.time<o+i){var p=1-r((s.time-o)/i),p=(e-s.viewState.rotation)*p;if(s.animate=!0,s.viewState.rotation+=p,n){var a=s.viewState.center;a[0]-=n[0],a[1]-=n[1],ut(a,p),st(a,n)}return s.viewHints[0]+=1,!0}return!1}}function co(t){var e=t.resolution,o=t.start?t.start:Date.now(),i=void 0!==t.duration?t.duration:1e3,r=t.easing?t.easing:po;return function(t,n){if(n.time<o)return n.animate=!0,n.viewHints[0]+=1,!0;if(n.time<o+i){var s=1-r((n.time-o)/i),p=e-n.viewState.resolution;return n.animate=!0,n.viewState.resolution+=s*p,n.viewHints[0]+=1,!0}return!1}}function fo(t,e,o,i){this.ba=t,this.da=e,this.ea=o,this.ha=i}function yo(t,e,o){return t.ba<=e&&e<=t.da&&t.ea<=o&&o<=t.ha}function go(t,e){return t.ba==e.ba&&t.ea==e.ea&&t.da==e.da&&t.ha==e.ha}function vo(t,e){return t.ba<=e.da&&t.da>=e.ba&&t.ea<=e.ha&&t.ha>=e.ea}function mo(t,e,o){return void 0===o&&(o=[0,0]),o[0]=t[0]+2*e,o[1]=t[1]+2*e,o}function bo(t,e,o){return void 0===o&&(o=[0,0]),o[0]=t[0]*e+.5|0,o[1]=t[1]*e+.5|0,o}function wo(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:e[0]=e[1]=t,e)}function xo(t,e,o,i){return void 0!==i?(i[0]=t,i[1]=e,i[2]=o,i):[t,e,o]}function So(t){var e,o,i=t[0],r=Array(i),n=1<<i-1;for(e=0;e<i;++e)o=48,t[1]&n&&(o+=1),t[2]&n&&(o+=2),r[e]=String.fromCharCode(o),n>>=1;return r.join("")}function To(t){this.minZoom=void 0!==t.minZoom?t.minZoom:0,this.b=t.resolutions,n(J(this.b,function(t,e){return e-t}),17),this.maxZoom=this.b.length-1,this.g=void 0!==t.origin?t.origin:null,this.f=null,void 0!==t.origins&&(this.f=t.origins,n(this.f.length==this.b.length,20));var e=t.extent;void 0===e||this.g||this.f||(this.g=Ut(e)),n(!this.g&&this.f||this.g&&!this.f,18),this.c=null,void 0!==t.tileSizes&&(this.c=t.tileSizes,n(this.c.length==this.b.length,19)),this.i=void 0!==t.tileSize?t.tileSize:this.c?null:256,n(!this.i&&this.c||this.i&&!this.c,22),this.s=void 0!==e?e:null,this.a=null,this.j=[0,0],void 0!==t.sizes?this.a=t.sizes.map(function(t){return new fo(Math.min(0,t[0]),Math.max(t[0]-1,-1),Math.min(0,t[1]),Math.max(t[1]-1,-1))},this):e&&No(this,e)}function Eo(t,e,o,i,r){for(r=t.Ia(e,r),e=e[0]-1;e>=t.minZoom;){if(o.call(null,e,Po(t,r,e,i)))return!0;--e}return!1}function Mo(t,e,o,i){return e[0]<t.maxZoom?(i=t.Ia(e,i),Po(t,i,e[0]+1,o)):null}function Co(t,e,o,i){jo(t,e[0],e[1],o,!1,bd);var r=bd[1],n=bd[2];return jo(t,e[2],e[3],o,!0,bd),t=bd[1],e=bd[2],void 0!==i?(i.ba=r,i.da=t,i.ea=n,i.ha=e):i=new fo(r,t,n,e),i}function Po(t,e,o,i){return o=t.Ga(o),Co(t,e,o,i)}function Ao(t,e){var o=t.Tc(e[0]),i=t.Ga(e[0]),r=wo(t.Va(e[0]),t.j);return[o[0]+(e[1]+.5)*r[0]*i,o[1]+(e[2]+.5)*r[1]*i]}function jo(t,e,o,i,r,n){var s=t.wc(i),p=i/t.Ga(s),a=t.Tc(s);return t=wo(t.Va(s),t.j),e=p*Math.floor((e-a[0])/i+(r?.5:0))/t[0],o=p*Math.floor((o-a[1])/i+(r?0:.5))/t[1],r?(e=Math.ceil(e)-1,o=Math.ceil(o)-1):(e=Math.floor(e),o=Math.floor(o)),xo(s,e,o,n)}function No(t,e){for(var o=t.b.length,i=Array(o),r=t.minZoom;r<o;++r)i[r]=Po(t,e,r);t.a=i}function Lo(t){var e=t.j;if(!e){var e=Io(t),o=ko(e,void 0,void 0),e=new To({extent:e,origin:Ut(e),resolutions:o,tileSize:void 0});t.j=e}return e}function Ro(t){var e={};return hd(e,void 0!==t?t:{}),void 0===e.extent&&(e.extent=re("EPSG:3857").D()),e.resolutions=ko(e.extent,e.maxZoom,e.tileSize),delete e.maxZoom,new To(e)}function ko(t,e,o){e=void 0!==e?e:42;var i=Ot(t);for(t=$t(t),o=wo(void 0!==o?o:256),o=Math.max(t/o[0],i/o[1]),e+=1,i=Array(e),t=0;t<e;++t)i[t]=o/Math.pow(2,t);return i}function Io(t){t=re(t);var e=t.D();return e||(t=180*cd.degrees/t.dc(),e=Et(-t,-t,t,t)),e}function Do(t){this.a=t.html,this.b=t.tileRanges?t.tileRanges:null}function Fo(t){B.call(this),this.a=t?t:[],Oo(this)}function Oo(t){t.set(wd,t.a.length)}function Bo(t,e){L.call(this,t),this.element=e}function Uo(t){return Array.isArray(t)?t:Pd(t)}function Go(t){if("string"!=typeof t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var o=t[1];o!=(0|o)&&(o=o+.5|0);var i=t[2];i!=(0|i)&&(i=i+.5|0),t="rgba("+e+","+o+","+i+","+(void 0===t[3]?1:t[3])+")"}return t}function $o(t){var e=[];return e[0]=s(t[0]+.5|0,0,255),e[1]=s(t[1]+.5|0,0,255),e[2]=s(t[2]+.5|0,0,255),e[3]=s(t[3],0,1),e}function Ho(t){return"string"==typeof t||t instanceof CanvasPattern||t instanceof CanvasGradient?t:Go(t)}function Xo(t,e){var o=document.createElement("CANVAS");
-return t&&(o.width=t),e&&(o.height=e),o.getContext("2d")}function Ko(t,e){var o=e.parentNode;o&&o.replaceChild(t,e)}function Wo(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function zo(t,e,o){L.call(this,t),this.map=e,this.frameState=void 0!==o?o:null}function qo(t){B.call(this),this.element=t.element?t.element:null,this.a=this.P=null,this.s=[],this.render=t.render?t.render:o,t.target&&this.c(t.target)}function Vo(t){t=t?t:{},this.S=document.createElement("UL"),this.u=document.createElement("LI"),this.S.appendChild(this.u),this.u.style.display="none",this.f=void 0===t.collapsed||t.collapsed,this.l=void 0===t.collapsible||t.collapsible,this.l||(this.f=!1);var e=void 0!==t.className?t.className:"ol-attribution",o=void 0!==t.tipLabel?t.tipLabel:"Attributions",i=void 0!==t.collapseLabel?t.collapseLabel:"»";"string"==typeof i?(this.C=document.createElement("span"),this.C.textContent=i):this.C=i,i=void 0!==t.label?t.label:"i","string"==typeof i?(this.B=document.createElement("span"),this.B.textContent=i):this.B=i;var r=this.l&&!this.f?this.C:this.B,i=document.createElement("button");i.setAttribute("type","button"),i.title=o,i.appendChild(r),E(i,"click",this.Pl,this),o=document.createElement("div"),o.className=e+" ol-unselectable ol-control"+(this.f&&this.l?" ol-collapsed":"")+(this.l?"":" ol-uncollapsible"),o.appendChild(this.S),o.appendChild(i),qo.call(this,{element:o,render:t.render?t.render:Yo,target:t.target}),this.G=!0,this.o={},this.j={},this.W={}}function Yo(t){if(t=t.frameState){var e,o,r,n,s,p,a,h,l,c,f,y=t.layerStatesArray,d=hd({},t.attributions),g={},v=t.viewState.projection;for(o=0,e=y.length;o<e;o++)if((p=y[o].layer.ga())&&(c=i(p).toString(),l=p.j))for(r=0,n=l.length;r<n;r++)if(a=l[r],h=i(a).toString(),!(h in d)){if(s=t.usedTiles[c]){var b=p.pb(v);t:{f=a;var w=v;if(f.b){var x,S,T,E=void 0;for(E in s)if(E in f.b){T=s[E];var M;for(x=0,S=f.b[E].length;x<S;++x){if(M=f.b[E][x],vo(M,T)){f=!0;break t}var C=Po(b,Io(w),parseInt(E,10)),P=C.da-C.ba+1;if((T.ba<C.ba||T.da>C.da)&&(vo(M,new fo(u(T.ba,P),u(T.da,P),T.ea,T.ha))||T.da-T.ba+1>P&&vo(M,C))){f=!0;break t}}}f=!1}else f=!0}}else f=!1;f?(h in g&&delete g[h],d[h]=a):g[h]=a}e=[d,g],o=e[0],e=e[1];for(var A in this.o)A in o?(this.j[A]||(this.o[A].style.display="",this.j[A]=!0),delete o[A]):A in e?(this.j[A]&&(this.o[A].style.display="none",delete this.j[A]),delete e[A]):(Wo(this.o[A]),delete this.o[A],delete this.j[A]);for(A in o)r=document.createElement("LI"),r.innerHTML=o[A].a,this.S.appendChild(r),this.o[A]=r,this.j[A]=!0;for(A in e)r=document.createElement("LI"),r.innerHTML=e[A].a,r.style.display="none",this.S.appendChild(r),this.o[A]=r;A=!m(this.j)||!m(t.logos),this.G!=A&&(this.element.style.display=A?"":"none",this.G=A),A&&m(this.j)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var j;t=t.logos,A=this.W;for(j in A)j in t||(Wo(A[j]),delete A[j]);for(var N in t)e=t[N],e instanceof HTMLElement&&(this.u.appendChild(e),A[N]=e),N in A||(j=new Image,j.src=N,""===e?o=j:(o=document.createElement("a"),o.href=e,o.appendChild(j)),this.u.appendChild(o),A[N]=o);this.u.style.display=m(t)?"none":""}else this.G&&(this.element.style.display="none",this.G=!1)}function Zo(t){t.element.classList.toggle("ol-collapsed"),t.f?Ko(t.C,t.B):Ko(t.B,t.C),t.f=!t.f}function Jo(t){t=t?t:{},this.f=void 0!==t.className?t.className:"ol-full-screen";var e=void 0!==t.label?t.label:"⤢";this.l="string"==typeof e?document.createTextNode(e):e,e=void 0!==t.labelActive?t.labelActive:"×",this.o="string"==typeof e?document.createTextNode(e):e;var o=t.tipLabel?t.tipLabel:"Toggle full-screen",e=document.createElement("button");e.className=this.f+"-"+Qo(),e.setAttribute("type","button"),e.title=o,e.appendChild(this.l),E(e,"click",this.B,this),o=document.createElement("div"),o.className=this.f+" ol-unselectable ol-control "+(_o()?"":"ol-unsupported"),o.appendChild(e),qo.call(this,{element:o,target:t.target}),this.C=void 0!==t.keys&&t.keys,this.j=t.source}function _o(){var t=document.body;return!!(t.webkitRequestFullscreen||t.mozRequestFullScreen&&document.mozFullScreenEnabled||t.msRequestFullscreen&&document.msFullscreenEnabled||t.requestFullscreen&&document.fullscreenEnabled)}function Qo(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}function ti(t){t.requestFullscreen?t.requestFullscreen():t.msRequestFullscreen?t.msRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen()}function ei(t){t=t?t:{};var e=void 0!==t.className?t.className:"ol-rotate",o=void 0!==t.label?t.label:"⇧";this.f=null,"string"==typeof o?(this.f=document.createElement("span"),this.f.className="ol-compass",this.f.textContent=o):(this.f=o,this.f.classList.add("ol-compass"));var i=t.tipLabel?t.tipLabel:"Reset rotation",o=document.createElement("button");o.className=e+"-reset",o.setAttribute("type","button"),o.title=i,o.appendChild(this.f),E(o,"click",ei.prototype.C,this),i=document.createElement("div"),i.className=e+" ol-unselectable ol-control",i.appendChild(o),e=t.render?t.render:oi,this.l=t.resetNorth?t.resetNorth:void 0,qo.call(this,{element:i,render:e,target:t.target}),this.o=void 0!==t.duration?t.duration:250,this.j=void 0===t.autoHide||t.autoHide,this.u=void 0,this.j&&this.element.classList.add("ol-hidden")}function oi(t){if(t=t.frameState){if(t=t.viewState.rotation,t!=this.u){var e="rotate("+t+"rad)";if(this.j){var o=this.element.classList.contains("ol-hidden");o||0!==t?o&&0!==t&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.f.style.msTransform=e,this.f.style.webkitTransform=e,this.f.style.transform=e}this.u=t}}function ii(t){t=t?t:{};var e=void 0!==t.className?t.className:"ol-zoom",o=void 0!==t.delta?t.delta:1,i=void 0!==t.zoomInLabel?t.zoomInLabel:"+",r=void 0!==t.zoomOutLabel?t.zoomOutLabel:"−",n=void 0!==t.zoomInTipLabel?t.zoomInTipLabel:"Zoom in",s=void 0!==t.zoomOutTipLabel?t.zoomOutTipLabel:"Zoom out",p=document.createElement("button");p.className=e+"-in",p.setAttribute("type","button"),p.title=n,p.appendChild("string"==typeof i?document.createTextNode(i):i),E(p,"click",ii.prototype.j.bind(this,o)),i=document.createElement("button"),i.className=e+"-out",i.setAttribute("type","button"),i.title=s,i.appendChild("string"==typeof r?document.createTextNode(r):r),E(i,"click",ii.prototype.j.bind(this,-o)),o=document.createElement("div"),o.className=e+" ol-unselectable ol-control",o.appendChild(p),o.appendChild(i),qo.call(this,{element:o,target:t.target}),this.f=void 0!==t.duration?t.duration:250}function ri(t){t=t?t:{};var e=new Fo;return(void 0!==t.zoom?t.zoom:1)&&e.push(new ii(t.zoomOptions)),(void 0!==t.rotate?t.rotate:1)&&e.push(new ei(t.rotateOptions)),(void 0!==t.attribution?t.attribution:1)&&e.push(new Vo(t.attributionOptions)),e}function ni(t){t=t?t:{};var e=document.createElement("DIV");e.className=void 0!==t.className?t.className:"ol-mouse-position",qo.call(this,{element:e,render:t.render?t.render:si,target:t.target}),E(this,U(Ld),this.Sl,this),t.coordinateFormat&&this.Uh(t.coordinateFormat),t.projection&&this.$g(re(t.projection)),this.u=void 0!==t.undefinedHTML?t.undefinedHTML:"",this.o=e.innerHTML,this.l=this.j=this.f=null}function si(t){t=t.frameState,t?this.f!=t.viewState.projection&&(this.f=t.viewState.projection,this.j=null):this.f=null,pi(this,this.l)}function pi(t,e){var o=t.u;if(e&&t.f){if(!t.j){var i=t.Zg();t.j=i?pe(t.f,i):ae}(i=t.a.Ja(e))&&(t.j(i,i),o=(o=t.wg())?o(i):i.toString())}t.o&&o==t.o||(t.element.innerHTML=o,t.o=o)}function ai(t,e){var o,i,r=kd.length;for(i=0;i<r;++i)try{if(o=t.getContext(kd[i],e))return o}catch(n){}return null}function hi(t,e){this.b=t,this.c=e}function li(t){hi.call(this,t,{mousedown:this.dl,mousemove:this.el,mouseup:this.hl,mouseover:this.gl,mouseout:this.fl}),this.a=t.g,this.g=[]}function ui(t,e){for(var o,i=t.g,r=e.clientX,n=e.clientY,s=0,p=i.length;s<p&&(o=i[s]);s++){var a=Math.abs(n-o[1]);if(25>=Math.abs(r-o[0])&&25>=a)return!0}return!1}function ci(t){var e=Pi(t,t),o=e.preventDefault;return e.preventDefault=function(){t.preventDefault(),o()},e.pointerId=1,e.isPrimary=!0,e.pointerType="mouse",e}function fi(t){hi.call(this,t,{MSPointerDown:this.ml,MSPointerMove:this.nl,MSPointerUp:this.ql,MSPointerOut:this.ol,MSPointerOver:this.pl,MSPointerCancel:this.ll,MSGotPointerCapture:this.jl,MSLostPointerCapture:this.kl}),this.a=t.g,this.g=["","unavailable","touch","pen","mouse"]}function yi(t,e){var o=e;return"number"==typeof e.pointerType&&(o=Pi(e,e),o.pointerType=t.g[e.pointerType]),o}function di(t){hi.call(this,t,{pointerdown:this.Zn,pointermove:this.$n,pointerup:this.co,pointerout:this.ao,pointerover:this.bo,pointercancel:this.Yn,gotpointercapture:this.uk,lostpointercapture:this.cl})}function gi(t,e,o){L.call(this,t),this.b=e,t=o?o:{},this.buttons=vi(t),this.pressure=mi(t,this.buttons),this.bubbles="bubbles"in t&&t.bubbles,this.cancelable="cancelable"in t&&t.cancelable,this.view="view"in t?t.view:null,this.detail="detail"in t?t.detail:null,this.screenX="screenX"in t?t.screenX:0,this.screenY="screenY"in t?t.screenY:0,this.clientX="clientX"in t?t.clientX:0,this.clientY="clientY"in t?t.clientY:0,this.button="button"in t?t.button:0,this.relatedTarget="relatedTarget"in t?t.relatedTarget:null,this.pointerId="pointerId"in t?t.pointerId:0,this.width="width"in t?t.width:0,this.height="height"in t?t.height:0,this.pointerType="pointerType"in t?t.pointerType:"",this.isPrimary="isPrimary"in t&&t.isPrimary,e.preventDefault&&(this.preventDefault=function(){e.preventDefault()})}function vi(t){if(t.buttons||Jd)t=t.buttons;else switch(t.which){case 1:t=1;break;case 2:t=4;break;case 3:t=2;break;default:t=0}return t}function mi(t,e){var o=0;return o=t.pressure?t.pressure:e?.5:0}function bi(t,e){hi.call(this,t,{touchstart:this.ep,touchmove:this.cp,touchend:this.bp,touchcancel:this.ap}),this.a=t.g,this.j=e,this.g=void 0,this.i=0,this.f=void 0}function wi(t,e,o){return e=Pi(e,o),e.pointerId=o.identifier+2,e.bubbles=!0,e.cancelable=!0,e.detail=t.i,e.button=0,e.buttons=1,e.width=o.webkitRadiusX||o.radiusX||0,e.height=o.webkitRadiusY||o.radiusY||0,e.pressure=o.webkitForce||o.force||.5,e.isPrimary=t.g===o.identifier,e.pointerType="touch",e.clientX=o.clientX,e.clientY=o.clientY,e.screenX=o.screenX,e.screenY=o.screenY,e}function xi(t,e,o){function i(){e.preventDefault()}var r,n,s=Array.prototype.slice.call(e.changedTouches),p=s.length;for(r=0;r<p;++r)n=wi(t,e,s[r]),n.preventDefault=i,o.call(t,e,n)}function Si(t,e){var o=t.j.g,i=e.changedTouches[0];if(t.g===i.identifier){var r=[i.clientX,i.clientY];o.push(r),setTimeout(function(){z(o,r)},2500)}}function Ti(t){k.call(this),this.i=t,this.g={},this.c={},this.a=[],Wd?Ei(this,new di(this)):zd?Ei(this,new fi(this)):(t=new li(this),Ei(this,t),Kd&&Ei(this,new bi(this,t))),t=this.a.length;for(var e,o=0;o<t;o++)e=this.a[o],Mi(this,Object.keys(e.c))}function Ei(t,e){var o=Object.keys(e.c);o&&(o.forEach(function(t){var o=e.c[t];o&&(this.c[t]=o.bind(e))},t),t.a.push(e))}function Mi(t,e){e.forEach(function(t){E(this.i,t,this.f,this)},t)}function Ci(t,e){e.forEach(function(t){C(this.i,t,this.f,this)},t)}function Pi(t,e){for(var o,i={},r=0,n=_d.length;r<n;r++)o=_d[r][0],i[o]=t[o]||e[o]||_d[r][1];return i}function Ai(t,e,o){e.bubbles=!1,Li(t,"pointerleave",e,o)}function ji(t,e,o){t.out(e,o);var i=e.target,r=e.relatedTarget;i&&r&&i.contains(r)||Ai(t,e,o)}function Ni(t,e,o){e.bubbles=!0,Li(t,"pointerover",e,o);var i=e.target,r=e.relatedTarget;i&&r&&i.contains(r)||(e.bubbles=!1,Li(t,"pointerenter",e,o))}function Li(t,e,o,i){t.b(new gi(e,i,o))}function Ri(t,e){t.b(new gi(e.type,e,e))}function ki(t,e,o,i,r){zo.call(this,t,e,r),this.originalEvent=o,this.pixel=e.Ud(o),this.coordinate=e.Ja(this.pixel),this.dragging=void 0!==i&&i}function Ii(t,e,o,i,r){ki.call(this,t,e,o.b,i,r),this.b=o}function Di(t){k.call(this),this.f=t,this.j=0,this.l=!1,this.c=[],this.g=null,t=this.f.a,this.u=0,this.T={},this.i=new Ti(t),this.a=null,this.o=E(this.i,"pointerdown",this.Mk,this),this.s=E(this.i,"pointermove",this.Co,this)}function Fi(t,e){var o=new Ii(tg,t.f,e);t.b(o),0!==t.j?(clearTimeout(t.j),t.j=0,o=new Ii(eg,t.f,e),t.b(o)):t.j=setTimeout(function(){this.j=0;var t=new Ii(Qd,this.f,e);this.b(t)}.bind(t),250)}function Oi(t,e){e.type==ng||e.type==sg?delete t.T[e.pointerId]:e.type==rg&&(t.T[e.pointerId]=!0),t.u=Object.keys(t.T).length}function Bi(t,e){k.call(this),this.ya=t,this.state=e,this.a=null,this.key=""}function Ui(t){t.b("change")}function Gi(t){if(!t.a)return t;var e=t.a;do{if(e.U()==ag)return e;e=e.a}while(e);return t}function $i(t,e){this.o=t,this.f=e,this.b=[],this.g=[],this.a={}}function Hi(t){var e=t.b,o=t.g,i=e[0];return 1==e.length?(e.length=0,o.length=0):(e[0]=e.pop(),o[0]=o.pop(),Xi(t,0)),e=t.f(i),delete t.a[e],i}function Xi(t,e){for(var o=t.b,i=t.g,r=o.length,n=o[e],s=i[e],p=e;e<r>>1;){var a=2*e+1,h=2*e+2,a=h<r&&i[h]<i[a]?h:a;o[e]=o[a],i[e]=i[a],e=a}o[e]=n,i[e]=s,Ki(t,p,e)}function Ki(t,e,o){var i=t.b;t=t.g;for(var r=i[o],n=t[o];o>e;){var s=o-1>>1;if(!(t[s]>n))break;i[o]=i[s],t[o]=t[s],o=s}i[o]=r,t[o]=n}function Wi(t){var e,o,i,r=t.o,n=t.b,s=t.g,p=0,a=n.length;for(o=0;o<a;++o)e=n[o],i=r(e),1/0==i?delete t.a[t.f(e)]:(s[p]=i,n[p++]=e);for(n.length=p,s.length=p,r=(t.b.length>>1)-1;0<=r;r--)Xi(t,r)}function zi(t,e){$i.call(this,function(e){return t.apply(null,e)},function(t){return t[0].Xa()}),this.s=e,this.j=0,this.i={}}function qi(t,e,o){for(var i,r,n=0;t.j<e&&n<o&&0<t.b.length;)i=Hi(t)[0],r=i.Xa(),0!==i.U()||r in t.i||(t.i[r]=!0,++t.j,++n,i.load())}function Vi(t,e,o){this.f=t,this.g=e,this.i=o,this.b=[],this.a=this.c=0}function Yi(t,e){var o=t.f,i=t.a,r=t.g-i,n=Math.log(t.g/t.a)/t.f;return lo({source:e,duration:n,easing:function(t){return i*(Math.exp(o*t*n)-1)/r}})}function Zi(t){B.call(this),this.s=null,this.Ba(!0),this.handleEvent=t.handleEvent}function Ji(t,e,o,i,r){if(void 0!==o){var n=e.Pa(),s=e.bb();void 0!==n&&s&&r&&0<r&&(t.ab(uo({rotation:n,duration:r,easing:so})),i&&t.ab(lo({source:s,duration:r,easing:so}))),e.rotate(o,i)}}function _i(t,e,o,i,r){var n=e.Ma();o=e.constrainResolution(n,o,0),Qi(t,e,o,i,r)}function Qi(t,e,o,i,r){if(o){var n=e.Ma(),s=e.bb();if(void 0!==n&&s&&o!==n&&r&&0<r&&(t.ab(co({resolution:n,duration:r,easing:so})),i&&t.ab(lo({source:s,duration:r,easing:so}))),i){var p;t=e.bb(),r=e.Ma(),void 0!==t&&void 0!==r&&(p=[i[0]-o*(i[0]-t[0])/r,i[1]-o*(i[1]-t[1])/r]),e.rb(p)}e.Yb(o)}}function tr(t){t=t?t:{},this.a=t.delta?t.delta:1,Zi.call(this,{handleEvent:er}),this.i=void 0!==t.duration?t.duration:250}function er(t){var e=!1,o=t.originalEvent;if(t.type==eg){var e=t.map,i=t.coordinate,o=o.shiftKey?-this.a:this.a,r=e.$();_i(e,r,o,i,this.i),t.preventDefault(),e=!0}return!e}function or(t){return t=t.originalEvent,t.altKey&&!(t.metaKey||t.ctrlKey)&&t.shiftKey}function ir(t){return t=t.originalEvent,0==t.button&&!(Od&&Bd&&t.ctrlKey)}function rr(t){return"pointermove"==t.type}function nr(t){return t.type==Qd}function sr(t){return t=t.originalEvent,!t.altKey&&!(t.metaKey||t.ctrlKey)&&!t.shiftKey}function pr(t){return t=t.originalEvent,!t.altKey&&!(t.metaKey||t.ctrlKey)&&t.shiftKey}function ar(t){return t=t.originalEvent.target.tagName,"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}function hr(t){return n(t.b,56),"mouse"==t.b.pointerType}function lr(t){return t=t.b,t.isPrimary&&0===t.button}function ur(t){t=t?t:{},Zi.call(this,{handleEvent:t.handleEvent?t.handleEvent:fr}),this.Me=t.handleDownEvent?t.handleDownEvent:qt,this.Je=t.handleDragEvent?t.handleDragEvent:o,this.hj=t.handleMoveEvent?t.handleMoveEvent:o,this.pj=t.handleUpEvent?t.handleUpEvent:qt,this.C=!1,this.Z={},this.l=[]}function cr(t){for(var e=t.length,o=0,i=0,r=0;r<e;r++)o+=t[r].clientX,i+=t[r].clientY;return[o/e,i/e]}function fr(t){if(!(t instanceof Ii))return!0;var e=!1,o=t.type;return o!==rg&&o!==og&&o!==ng||(o=t.b,t.type==ng?delete this.Z[o.pointerId]:t.type==rg?this.Z[o.pointerId]=o:o.pointerId in this.Z&&(this.Z[o.pointerId]=o),this.l=v(this.Z)),this.C&&(t.type==og?this.Je(t):t.type==ng&&(this.C=this.pj(t))),t.type==rg?(this.C=t=this.Me(t),e=this.Fc(t)):t.type==ig&&this.hj(t),!e}function yr(t){ur.call(this,{handleDownEvent:vr,handleDragEvent:dr,handleUpEvent:gr}),t=t?t:{},this.a=t.kinetic,this.i=this.j=null,this.u=t.condition?t.condition:sr,this.o=!1}function dr(t){var e=cr(this.l);if(this.a&&this.a.b.push(e[0],e[1],Date.now()),this.i){var o=this.i[0]-e[0],i=e[1]-this.i[1];t=t.map.$();var r=t.U(),i=o=[o,i],n=r.resolution;i[0]*=n,i[1]*=n,ut(o,r.rotation),st(o,r.center),o=t.Qd(o),t.rb(o)}this.i=e}function gr(t){var e=t.map;if(t=e.$(),0===this.l.length){var o;if(o=!this.o&&this.a)if(o=this.a,6>o.b.length)o=!1;else{var i=Date.now()-o.i,r=o.b.length-3;if(o.b[r+2]<i)o=!1;else{for(var n=r-3;0<n&&o.b[n+2]>i;)n-=3;var i=o.b[r+2]-o.b[n+2],s=o.b[r]-o.b[n],r=o.b[r+1]-o.b[n+1];o.c=Math.atan2(r,s),o.a=Math.sqrt(s*s+r*r)/i,o=o.a>o.g}}return o?(o=this.a,o=(o.g-o.a)/o.f,r=this.a.c,n=t.bb(),this.j=Yi(this.a,n),e.ab(this.j),n=e.Ca(n),e=e.Ja([n[0]-o*Math.cos(r),n[1]-o*Math.sin(r)]),e=t.Qd(e),t.rb(e)):e.render(),ro(t,-1),!1}return this.i=null,!0}function vr(t){if(0<this.l.length&&this.u(t)){var e=t.map,o=e.$();return this.i=null,this.C||ro(o,1),this.j&&z(e.S,this.j)&&(o.rb(t.frameState.viewState.center),this.j=null),this.a&&(t=this.a,t.b.length=0,t.c=0,t.a=0),this.o=1<this.l.length,!0}return!1}function mr(t){t=t?t:{},ur.call(this,{handleDownEvent:xr,handleDragEvent:br,handleUpEvent:wr}),this.i=t.condition?t.condition:or,this.a=void 0,this.j=void 0!==t.duration?t.duration:250}function br(t){if(hr(t)){var e=t.map,o=e.kb();if(t=t.pixel,o=Math.atan2(o[1]/2-t[1],t[0]-o[0]/2),void 0!==this.a){t=o-this.a;var i=e.$(),r=i.Pa();Ji(e,i,r-t)}this.a=o}}function wr(t){if(!hr(t))return!0;t=t.map;var e=t.$();ro(e,-1);var o=e.Pa(),i=this.j,o=e.constrainRotation(o,0);return Ji(t,e,o,void 0,i),!1}function xr(t){return!!(hr(t)&&ir(t)&&this.i(t))&&(ro(t.map.$(),1),this.a=void 0,!0)}function Sr(t){this.f=null,this.a=document.createElement("div"),this.a.style.position="absolute",this.a.className="ol-box "+t,this.g=this.c=this.b=null}function Tr(t){var e=t.c,o=t.g;t=t.a.style,t.left=Math.min(e[0],o[0])+"px",t.top=Math.min(e[1],o[1])+"px",t.width=Math.abs(o[0]-e[0])+"px",t.height=Math.abs(o[1]-e[1])+"px"}function Er(t){var e=t.c,o=t.g,e=[e,[e[0],o[1]],o,[o[0],e[1]]].map(t.b.Ja,t.b);e[4]=e[0].slice(),t.f?t.f.ma([e]):t.f=new ze([e])}function Mr(t){ur.call(this,{handleDownEvent:jr,handleDragEvent:Pr,handleUpEvent:Ar}),t=t?t:{},this.a=new Sr(t.className||"ol-dragbox"),this.i=null,this.B=t.condition?t.condition:zt,this.u=t.boxEndCondition?t.boxEndCondition:Cr}function Cr(t,e,o){return t=o[0]-e[0],e=o[1]-e[1],64<=t*t+e*e}function Pr(t){if(hr(t)){var e=this.a,o=t.pixel;e.c=this.i,e.g=o,Er(e),Tr(e),this.b(new Nr(ug,t.coordinate,t))}}function Ar(t){return!hr(t)||(this.a.setMap(null),this.u(t,this.i,t.pixel)&&(this.o(t),this.b(new Nr(cg,t.coordinate,t))),!1)}function jr(t){if(hr(t)&&ir(t)&&this.B(t)){this.i=t.pixel,this.a.setMap(t.map);var e=this.a,o=this.i;return e.c=this.i,e.g=o,Er(e),Tr(e),this.b(new Nr(lg,t.coordinate,t)),!0}return!1}function Nr(t,e,o){L.call(this,t),this.coordinate=e,this.mapBrowserEvent=o}function Lr(t){t=t?t:{};var e=t.condition?t.condition:pr;this.j=void 0!==t.duration?t.duration:200,this.G=void 0!==t.out&&t.out,Mr.call(this,{condition:e,className:t.className||"ol-dragzoom"})}function Rr(t){Zi.call(this,{handleEvent:kr}),t=t||{},this.a=function(t){return sr(t)&&ar(t)},this.i=void 0!==t.condition?t.condition:this.a,this.j=void 0!==t.duration?t.duration:100,this.l=void 0!==t.pixelDelta?t.pixelDelta:128}function kr(t){var e=!1;if("keydown"==t.type){var o=t.originalEvent.keyCode;if(this.i(t)&&(40==o||37==o||39==o||38==o)){var i=t.map,e=i.$(),r=e.Ma()*this.l,n=0,s=0;40==o?s=-r:37==o?n=-r:39==o?n=r:s=r,o=[n,s],ut(o,e.Pa()),r=this.j,(n=e.bb())&&(r&&0<r&&i.ab(lo({source:n,duration:r,easing:ao})),i=e.Qd([n[0]+o[0],n[1]+o[1]]),e.rb(i)),t.preventDefault(),e=!0}}return!e}function Ir(t){Zi.call(this,{handleEvent:Dr}),t=t?t:{},this.i=t.condition?t.condition:ar,this.a=t.delta?t.delta:1,this.j=void 0!==t.duration?t.duration:100}function Dr(t){var e=!1;if("keydown"==t.type||"keypress"==t.type){var o=t.originalEvent.charCode;if(this.i(t)&&(43==o||45==o)){var e=t.map,o=43==o?this.a:-this.a,i=e.$();_i(e,i,o,void 0,this.j),t.preventDefault(),e=!0}}return!e}function Fr(t){Zi.call(this,{handleEvent:Or}),t=t||{},this.i=0,this.C=void 0!==t.duration?t.duration:250,this.G=void 0!==t.timeout?t.timeout:80,this.o=void 0===t.useAnchor||t.useAnchor,this.a=null,this.l=this.j=void 0}function Or(t){var e=!1;if("wheel"==t.type||"mousewheel"==t.type){var e=t.map,o=t.originalEvent;this.o&&(this.a=t.coordinate);var i;"wheel"==t.type?(i=o.deltaY,Dd&&o.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(i/=Ud),o.deltaMode===WheelEvent.DOM_DELTA_LINE&&(i*=40)):"mousewheel"==t.type&&(i=-o.wheelDeltaY,Fd&&(i/=3)),this.i+=i,void 0===this.j&&(this.j=Date.now()),i=Math.max(this.G-(Date.now()-this.j),0),clearTimeout(this.l),this.l=setTimeout(this.u.bind(this,e),i),t.preventDefault(),e=!0}return!e}function Br(t){ur.call(this,{handleDownEvent:$r,handleDragEvent:Ur,handleUpEvent:Gr}),t=t||{},this.i=null,this.j=void 0,this.a=!1,this.o=0,this.B=void 0!==t.threshold?t.threshold:.3,this.u=void 0!==t.duration?t.duration:250}function Ur(t){var e=0,o=this.l[0],i=this.l[1],o=Math.atan2(i.clientY-o.clientY,i.clientX-o.clientX);void 0!==this.j&&(e=o-this.j,this.o+=e,!this.a&&Math.abs(this.o)>this.B&&(this.a=!0)),this.j=o,t=t.map,o=t.a.getBoundingClientRect(),i=cr(this.l),i[0]-=o.left,i[1]-=o.top,this.i=t.Ja(i),this.a&&(o=t.$(),i=o.Pa(),t.render(),Ji(t,o,i+e,this.i))}function Gr(t){if(2>this.l.length){t=t.map;var e=t.$();if(ro(e,-1),this.a){var o=e.Pa(),i=this.i,r=this.u,o=e.constrainRotation(o,0);Ji(t,e,o,i,r)}return!1}return!0}function $r(t){return 2<=this.l.length&&(t=t.map,this.i=null,this.j=void 0,this.a=!1,this.o=0,this.C||ro(t.$(),1),t.render(),!0)}function Hr(t){ur.call(this,{handleDownEvent:Wr,handleDragEvent:Xr,handleUpEvent:Kr}),t=t?t:{},this.i=null,this.o=void 0!==t.duration?t.duration:400,this.a=void 0,this.j=1}function Xr(t){var e=1,o=this.l[0],i=this.l[1],r=o.clientX-i.clientX,o=o.clientY-i.clientY,r=Math.sqrt(r*r+o*o);void 0!==this.a&&(e=this.a/r),this.a=r,1!=e&&(this.j=e),t=t.map;var r=t.$(),o=r.Ma(),i=t.a.getBoundingClientRect(),n=cr(this.l);n[0]-=i.left,n[1]-=i.top,this.i=t.Ja(n),t.render(),Qi(t,r,o*e,this.i)}function Kr(t){if(2>this.l.length){t=t.map;var e=t.$();ro(e,-1);var o=e.Ma(),i=this.i,r=this.o,o=e.constrainResolution(o,0,this.j-1);return Qi(t,e,o,i,r),!1}return!0}function Wr(t){return 2<=this.l.length&&(t=t.map,this.i=null,this.a=void 0,this.j=1,this.C||ro(t.$(),1),t.render(),!0)}function zr(t){t=t?t:{};var e=new Fo,o=new Vi((-.005),.05,100);return(void 0!==t.altShiftDragRotate?t.altShiftDragRotate:1)&&e.push(new mr),(void 0!==t.doubleClickZoom?t.doubleClickZoom:1)&&e.push(new tr({delta:t.zoomDelta,duration:t.zoomDuration})),(void 0!==t.dragPan?t.dragPan:1)&&e.push(new yr({kinetic:o})),(void 0!==t.pinchRotate?t.pinchRotate:1)&&e.push(new Br),(void 0!==t.pinchZoom?t.pinchZoom:1)&&e.push(new Hr({duration:t.zoomDuration})),(void 0!==t.keyboard?t.keyboard:1)&&(e.push(new Rr),e.push(new Ir({delta:t.zoomDelta,duration:t.zoomDuration}))),(void 0!==t.mouseWheelZoom?t.mouseWheelZoom:1)&&e.push(new Fr({duration:t.zoomDuration})),(void 0!==t.shiftDragZoom?t.shiftDragZoom:1)&&e.push(new Lr({duration:t.zoomDuration})),e}function qr(t){B.call(this);var e=hd({},t);e.opacity=void 0!==t.opacity?t.opacity:1,e.visible=void 0===t.visible||t.visible,e.zIndex=void 0!==t.zIndex?t.zIndex:0,e.maxResolution=void 0!==t.maxResolution?t.maxResolution:1/0,e.minResolution=void 0!==t.minResolution?t.minResolution:0,this.H(e),this.a={layer:this,sd:!0}}function Vr(t){return t.a.opacity=s(t.Rb(),0,1),t.a.mi=t.hf(),t.a.visible=t.zb(),t.a.extent=t.D(),t.a.zIndex=t.Sb(),t.a.maxResolution=t.Pb(),t.a.minResolution=Math.max(t.Qb(),0),t.a}function Yr(t){var e=t||{};t=hd({},e),delete t.layers,e=e.layers,qr.call(this,t),this.c=[],this.f={},E(this,U(fg),this.Fk,this),e?Array.isArray(e)?e=new Fo(e.slice()):n(e instanceof Fo,43):e=new Fo,this.gh(e)}function Zr(t){Yt.call(this,{code:t,units:"m",extent:dg,global:!0,worldExtent:gg})}function Jr(t,e,o){var i=t.length;o=1<o?o:2,void 0===e&&(e=2<o?t.slice():Array(i));for(var r=0;r<i;r+=o){e[r]=yg*t[r]/180;var n=6378137*Math.log(Math.tan(Math.PI*(t[r+1]+90)/360));n>yg?n=yg:n<-yg&&(n=-yg),e[r+1]=n}return e}function _r(t,e,o){var i=t.length;o=1<o?o:2,void 0===e&&(e=2<o?t.slice():Array(i));for(var r=0;r<i;r+=o)e[r]=180*t[r]/yg,e[r+1]=360*Math.atan(Math.exp(t[r+1]/6378137))/Math.PI-90;return e}function Qr(t,e){Yt.call(this,{code:t,units:"degrees",extent:bg,axisOrientation:e,global:!0,metersPerUnit:wg,worldExtent:bg})}function tn(){Zt(vg),Zt(xg),Jt()}function en(t,e,o,i,r){L.call(this,t),this.vectorContext=e,this.frameState=o,this.context=i,this.glContext=r}function on(t){var e=hd({},t);delete e.source,qr.call(this,e),this.C=this.s=this.o=null,t.map&&this.setMap(t.map),E(this,U("source"),this.Sk,this),this.Ec(t.source?t.source:null)}function rn(t,e){return t.visible&&e>=t.minResolution&&e<t.maxResolution}function nn(){this.b={},this.a=0}function sn(){return[1,0,0,1,0,0]}function pn(t){return hn(t,1,0,0,1,0,0)}function an(t,e){var o=t[0],i=t[1],r=t[2],n=t[3],s=t[4],p=t[5],a=e[0],h=e[1],l=e[2],u=e[3],c=e[4],f=e[5];return t[0]=o*a+r*h,t[1]=i*a+n*h,t[2]=o*l+r*u,t[3]=i*l+n*u,t[4]=o*c+r*f+s,t[5]=i*c+n*f+p,t}function hn(t,e,o,i,r,n,s){return t[0]=e,t[1]=o,t[2]=i,t[3]=r,t[4]=n,t[5]=s,t}function ln(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t}function un(t,e){var o=e[0],i=e[1];return e[0]=t[0]*o+t[2]*i+t[4],e[1]=t[1]*o+t[3]*i+t[5],e}function cn(t,e){var o=Math.cos(e),i=Math.sin(e);an(t,hn(Tg,o,i,-i,o,0,0))}function fn(t,e,o){return an(t,hn(Tg,e,0,0,o,0,0))}function yn(t,e,o){an(t,hn(Tg,1,0,0,1,e,o))}function dn(t,e,o,i,r,n,s,p){var a=Math.sin(n);return n=Math.cos(n),t[0]=i*n,t[1]=r*a,t[2]=-i*a,t[3]=r*n,t[4]=s*i*n-p*i*a+e,t[5]=s*r*a+p*r*n+o,t}function gn(t){var e=t[0]*t[3]-t[1]*t[2];n(0!==e,32);var o=t[0],i=t[1],r=t[2],s=t[3],p=t[4],a=t[5];return t[0]=s/e,t[1]=-i/e,t[2]=-r/e,t[3]=o/e,t[4]=(r*a-s*p)/e,t[5]=-(o*a-i*p)/e,t}function vn(t,e){this.l=e,this.f={},this.s={}}function mn(t){var e=t.viewState,o=t.coordinateToPixelTransform,i=t.pixelToCoordinateTransform;dn(o,t.size[0]/2,t.size[1]/2,1/e.resolution,-1/e.resolution,-e.rotation,-e.center[0],-e.center[1]),gn(ln(i,o))}function bn(){if(32<Sg.a){var t,e,o=0;for(t in Sg.b)e=Sg.b[t],0!==(3&o++)||I(e)||(delete Sg.b[t],--Sg.a)}}function wn(t,e){var o=i(e).toString();if(o in t.f)return t.f[o];var r=t.ng(e);return t.f[o]=r,t.s[o]=E(r,"change",t.Dk,t),r}function xn(t,e){for(var o in t.f)if(!(o in e.layerStates)){e.postRenderFunctions.push(t.Io.bind(t));break}}function Sn(t,e){return t.zIndex-e.zIndex}function Tn(t){on.call(this,t?t:{})}function En(t){t=t?t:{};var e=hd({},t);delete e.preload,delete e.useInterimTilesOnError,on.call(this,e),this.l(void 0!==t.preload?t.preload:0),this.B(void 0===t.useInterimTilesOnError||t.useInterimTilesOnError)}function Mn(t,e,o,i,r){k.call(this),this.j=r,this.extent=t,this.f=o,this.resolution=e,this.state=i}function Cn(t){t.b("change")}function Pn(t,e,o,i,r,n,s){Mn.call(this,t,e,o,Cg,i),this.o=r,this.g=new Image,null!==n&&(this.g.crossOrigin=n),this.i={},this.c=null,this.state=Cg,this.l=s}function An(t,e,o,i){0!==e&&(t.translate(o,i),t.rotate(e),t.translate(-o,-i))}function jn(t){this.l=t.opacity,this.T=t.rotateWithView,this.o=t.rotation,this.c=t.scale,this.u=t.snapToPixel}function Nn(t){t=t||{},this.s=t.atlasManager,this.j=this.f=this.i=null,this.g=void 0!==t.fill?t.fill:null,this.b=void 0!==t.stroke?t.stroke:null,this.a=t.radius,this.S=[0,0],this.C=this.G=this.na=this.B=null,Ln(this,this.s),jn.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0===t.snapToPixel||t.snapToPixel})}function Ln(t,e){var o,i,r=null,n=0;t.b&&(i=Ho(t.b.a),n=t.b.f,void 0===n&&(n=1),r=t.b.g,Gd||(r=null));var s=2*(t.a+n)+1,r={strokeStyle:i,Dd:n,size:s,lineDash:r};if(void 0===e)i=Xo(s,s),t.f=i.canvas,o=s=t.f.width,t.wh(r,i,0,0),t.C=[r.size,r.size],t.g?t.j=t.f:(i=Xo(r.size,r.size),t.j=i.canvas,t.vh(r,i,0,0));else{s=Math.round(s),(i=!t.g)&&(o=t.vh.bind(t,r));var n=t.b?Dn(t.b):"-",p=t.g?kn(t.g):"-";t.i&&n==t.i[1]&&p==t.i[2]&&t.a==t.i[3]||(t.i=["c"+n+p+(void 0!==t.a?t.a.toString():"-"),n,p,t.a]),r=e.add(t.i[0],s,s,t.wh.bind(t,r),o),t.f=r.image,t.S=[r.offsetX,r.offsetY],o=r.image.width,i?(t.j=r.de,t.C=[r.de.width,r.de.height]):(t.j=t.f,t.C=[o,o])}t.B=[s/2,s/2],t.na=[s,s],t.G=[o,o]}function Rn(t){t=t||{},this.b=void 0!==t.color?t.color:null,this.a=void 0}function kn(t){return void 0===t.a&&(t.a=t.b instanceof CanvasPattern||t.b instanceof CanvasGradient?i(t.b).toString():"f"+(t.b?Go(t.b):"-")),t.a}function In(t){t=t||{},this.a=void 0!==t.color?t.color:null,this.c=t.lineCap,this.g=void 0!==t.lineDash?t.lineDash:null,this.i=t.lineJoin,this.j=t.miterLimit,this.f=t.width,this.b=void 0}function Dn(t){return void 0===t.b&&(t.b="s",t.b=t.a?"string"==typeof t.a?t.b+t.a:t.b+i(t.a).toString():t.b+"-",t.b+=","+(void 0!==t.c?t.c.toString():"-")+","+(t.g?t.g.toString():"-")+","+(void 0!==t.i?t.i:"-")+","+(void 0!==t.j?t.j.toString():"-")+","+(void 0!==t.f?t.f.toString():"-")),t.b}function Fn(t){t=t||{},this.i=null,this.c=Gn,void 0!==t.geometry&&this.zh(t.geometry),this.f=void 0!==t.fill?t.fill:null,this.a=void 0!==t.image?t.image:null,this.g=void 0!==t.stroke?t.stroke:null,this.j=void 0!==t.text?t.text:null,this.b=t.zIndex}function On(t){if("function"!=typeof t){var e;Array.isArray(t)?e=t:(n(t instanceof Fn,41),e=[t]),t=function(){return e}}return t}function Bn(){if(!kg){var t=new Rn({color:"rgba(255,255,255,0.4)"}),e=new In({color:"#3399CC",width:1.25});kg=[new Fn({image:new Nn({fill:t,stroke:e,radius:5}),fill:t,stroke:e})]}return kg}function Un(){var t={},e=[255,255,255,1],o=[0,153,255,1];return t.Polygon=[new Fn({fill:new Rn({color:[255,255,255,.5]})})],t.MultiPolygon=t.Polygon,t.LineString=[new Fn({stroke:new In({color:e,width:5})}),new Fn({stroke:new In({color:o,width:3})})],t.MultiLineString=t.LineString,t.Circle=t.Polygon.concat(t.LineString),t.Point=[new Fn({image:new Nn({radius:6,fill:new Rn({color:o}),stroke:new In({color:e,width:1.5})}),zIndex:1/0})],t.MultiPoint=t.Point,t.GeometryCollection=t.Polygon.concat(t.LineString,t.Point),t}function Gn(t){return t.V()}function $n(t){t=t?t:{};var e=hd({},t);delete e.style,delete e.renderBuffer,delete e.updateWhileAnimating,delete e.updateWhileInteracting,on.call(this,e),this.i=void 0!==t.renderBuffer?t.renderBuffer:100,this.B=null,this.j=void 0,this.l(t.style),this.Z=void 0!==t.updateWhileAnimating&&t.updateWhileAnimating,this.fa=void 0!==t.updateWhileInteracting&&t.updateWhileInteracting}function Hn(t){t=t?t:{};var e=hd({},t);delete e.preload,delete e.useInterimTilesOnError,$n.call(this,e),this.P(t.preload?t.preload:0),this.W(!t.useInterimTilesOnError||t.useInterimTilesOnError),n(void 0==t.renderMode||t.renderMode==Fg||t.renderMode==Og||t.renderMode==Bg,28),this.u=t.renderMode||Og}function Xn(){}function Kn(t,e,o,i,r){this.f=t,this.C=e,this.c=o,this.B=i,this.ac=r,this.i=this.b=this.a=this.Z=this.Qa=this.W=null,this.fa=this.$a=this.T=this.na=this.S=this.G=0,this.ra=!1,this.j=this.Ib=0,this.oa=!1,this.za=0,this.g="",this.Aa=this.Ka=0,this.La=!1,this.o=this.ub=0,this.P=this.s=this.l=null,this.u=[],this.Jb=sn()}function Wn(t,e,o){if(t.i){e=fe(e,0,o,2,t.B,t.u),o=t.f;var i=t.Jb,r=o.globalAlpha;1!=t.T&&(o.globalAlpha=r*t.T);var n=t.Ib;t.ra&&(n+=t.ac);var s,p;for(s=0,p=e.length;s<p;s+=2){var a=e[s]-t.G,h=e[s+1]-t.S;if(t.oa&&(a=Math.round(a),h=Math.round(h)),0!==n||1!=t.j){var l=a+t.G,u=h+t.S;dn(i,l,u,t.j,t.j,n,-l,-u),o.setTransform.apply(o,i)}o.drawImage(t.i,t.$a,t.fa,t.za,t.na,a,h,t.za,t.na)}0===n&&1==t.j||o.setTransform(1,0,0,1,0,0),1!=t.T&&(o.globalAlpha=r)}}function zn(t,e,o,i){var r=0;if(t.P&&""!==t.g){t.l&&Yn(t,t.l),t.s&&Zn(t,t.s);var n=t.P,s=t.f,p=t.Z;for(p?(p.font!=n.font&&(p.font=s.font=n.font),p.textAlign!=n.textAlign&&(p.textAlign=s.textAlign=n.textAlign),
-p.textBaseline!=n.textBaseline&&(p.textBaseline=s.textBaseline=n.textBaseline)):(s.font=n.font,s.textAlign=n.textAlign,s.textBaseline=n.textBaseline,t.Z={font:n.font,textAlign:n.textAlign,textBaseline:n.textBaseline}),e=fe(e,r,o,i,t.B,t.u),n=t.f,s=t.ub,t.La&&(s+=t.ac);r<o;r+=i){var p=e[r]+t.Ka,a=e[r+1]+t.Aa;if(0!==s||1!=t.o){var h=dn(t.Jb,p,a,t.o,t.o,s,-p,-a);n.setTransform.apply(n,h)}t.s&&n.strokeText(t.g,p,a),t.l&&n.fillText(t.g,p,a)}0===s&&1==t.o||n.setTransform(1,0,0,1,0,0)}}function qn(t,e,o,i,r,n){var s=t.f;for(t=fe(e,o,i,r,t.B,t.u),s.moveTo(t[0],t[1]),e=t.length,n&&(e-=2),o=2;o<e;o+=2)s.lineTo(t[o],t[o+1]);return n&&s.closePath(),i}function Vn(t,e,o,i,r){var n,s;for(n=0,s=i.length;n<s;++n)o=qn(t,e,o,i[n],r,!0);return o}function Yn(t,e){var o=t.f,i=t.W;i?i.fillStyle!=e.fillStyle&&(i.fillStyle=o.fillStyle=e.fillStyle):(o.fillStyle=e.fillStyle,t.W={fillStyle:e.fillStyle})}function Zn(t,e){var o=t.f,i=t.Qa;i?(i.lineCap!=e.lineCap&&(i.lineCap=o.lineCap=e.lineCap),Gd&&!V(i.lineDash,e.lineDash)&&o.setLineDash(i.lineDash=e.lineDash),i.lineJoin!=e.lineJoin&&(i.lineJoin=o.lineJoin=e.lineJoin),i.lineWidth!=e.lineWidth&&(i.lineWidth=o.lineWidth=e.lineWidth),i.miterLimit!=e.miterLimit&&(i.miterLimit=o.miterLimit=e.miterLimit),i.strokeStyle!=e.strokeStyle&&(i.strokeStyle=o.strokeStyle=e.strokeStyle)):(o.lineCap=e.lineCap,Gd&&o.setLineDash(e.lineDash),o.lineJoin=e.lineJoin,o.lineWidth=e.lineWidth,o.miterLimit=e.miterLimit,o.strokeStyle=e.strokeStyle,t.Qa={lineCap:e.lineCap,lineDash:e.lineDash,lineJoin:e.lineJoin,lineWidth:e.lineWidth,miterLimit:e.miterLimit,strokeStyle:e.strokeStyle})}function Jn(t){D.call(this),this.a=t}function _n(t,e){var o=e.U();return o!=Ag&&o!=jg&&E(e,"change",t.Cm,t),o==Cg&&(e.load(),o=e.U()),o==Ag}function Qn(t){var e=t.a;e.zb()&&"ready"==e.hf()&&t.v()}function ts(t,e){e.qh()&&t.postRenderFunctions.push(function(t,e,o){e=i(t).toString(),t.Kc(o.viewState.projection,o.usedTiles[e])}.bind(null,e))}function es(t,e){if(e){var o,r,n;for(r=0,n=e.length;r<n;++r)o=e[r],t[i(o).toString()]=o}}function os(t,e){var o=e.S;void 0!==o&&("string"==typeof o?t.logos[o]="":o&&(n("string"==typeof o.href,44),n("string"==typeof o.src,45),t.logos[o.src]=o.href))}function is(t,e,o,r){e=i(e).toString(),o=o.toString(),e in t?o in t[e]?(t=t[e][o],r.ba<t.ba&&(t.ba=r.ba),r.da>t.da&&(t.da=r.da),r.ea<t.ea&&(t.ea=r.ea),r.ha>t.ha&&(t.ha=r.ha)):t[e][o]=r:(t[e]={},t[e][o]=r)}function rs(t,e,o,r,n,s,p,a,h,l){var u=i(e).toString();u in t.wantedTiles||(t.wantedTiles[u]={});var c=t.wantedTiles[u];t=t.tileQueue;var f,y,d,g,v,m,b=o.minZoom;for(m=p;m>=b;--m)for(y=Po(o,s,m,y),d=o.Ga(m),g=y.ba;g<=y.da;++g)for(v=y.ea;v<=y.ha;++v)p-m<=a?(f=e.vc(m,g,v,r,n),0==f.U()&&(c[f.Xa()]=!0,f.Xa()in t.a||t.c([f,u,Ao(o,f.ya),d])),void 0!==h&&h.call(l,f)):e.Vf(m,g,v,n)}function ns(t){Jn.call(this,t),this.S=sn()}function ss(t,e,o){var i=e.pixelRatio,r=e.size[0]*i,n=e.size[1]*i,s=e.viewState.rotation,p=Ut(o),a=Gt(o),h=It(o);o=kt(o),un(e.coordinateToPixelTransform,p),un(e.coordinateToPixelTransform,a),un(e.coordinateToPixelTransform,h),un(e.coordinateToPixelTransform,o),t.save(),An(t,-s,r/2,n/2),t.beginPath(),t.moveTo(p[0]*i,p[1]*i),t.lineTo(a[0]*i,a[1]*i),t.lineTo(h[0]*i,h[1]*i),t.lineTo(o[0]*i,o[1]*i),t.clip(),An(t,s,r/2,n/2)}function ps(t,e,o,i,r){var n=t.a;if(I(n,e)){var s=i.size[0]*i.pixelRatio,p=i.size[1]*i.pixelRatio,a=i.viewState.rotation;An(o,-a,s/2,p/2),t=void 0!==r?r:hs(t,i,0),n.b(new en(e,new Kn(o,i.pixelRatio,i.extent,t,i.viewState.rotation),i,o,null)),An(o,a,s/2,p/2)}}function as(t,e,o,i){ps(t,"postcompose",e,o,i)}function hs(t,e,o){var i=e.viewState,r=e.pixelRatio,n=r/i.resolution;return dn(t.S,r*e.size[0]/2,r*e.size[1]/2,n,-n,-i.rotation,-i.center[0]+o,-i.center[1])}function ls(){}function us(t,e,o,i){this.ra=t,this.W=e,this.overlaps=i,this.f=0,this.resolution=o,this.na=this.S=null,this.a=[],this.coordinates=[],this.Qa=sn(),this.b=[],this.Z=[],this.fa=sn(),this.$a=sn()}function cs(t,e,o,i,r,n,s){var p=t.coordinates.length,a=t.af();s&&(o+=r),s=[e[o],e[o+1]];var h,l,u,c=[NaN,NaN],f=!0;for(h=o+r;h<i;h+=r)c[0]=e[h],c[1]=e[h+1],u=St(a,c),u!==l?(f&&(t.coordinates[p++]=s[0],t.coordinates[p++]=s[1]),t.coordinates[p++]=c[0],t.coordinates[p++]=c[1],f=!1):1===u?(t.coordinates[p++]=c[0],t.coordinates[p++]=c[1],f=!1):f=!0,s[0]=c[0],s[1]=c[1],l=u;return(n&&f||h===o+r)&&(t.coordinates[p++]=s[0],t.coordinates[p++]=s[1]),p}function fs(t,e){t.S=[0,e,0],t.a.push(t.S),t.na=[0,e,0],t.b.push(t.na)}function ys(t,e,o){if(t.P){var i=un(t.Qa,t.P.slice());e.translate(i[0],i[1]),e.rotate(o)}e.fill(),t.P&&e.setTransform.apply(e,t.$a)}function ds(t,e,o,r,n,s,p,a,h){var l;V(r,t.Qa)?l=t.Z:(l=fe(t.coordinates,0,t.coordinates.length,2,r,t.Z),ln(t.Qa,r)),r=!m(s);for(var u,c,f,y,d,g,v=0,b=p.length,w=t.fa,x=t.$a,S=0,T=0,E=t.a!=p||t.overlaps?0:200;v<b;){var M,C,P,A,j=p[v];switch(j[0]){case 0:u=j[1],r&&s[i(u).toString()]||!u.V()?v=j[2]:void 0===h||Ht(h,u.V().D())?++v:v=j[2]+1;break;case 1:S>E&&(ys(t,e,n),S=0),T>E&&(e.stroke(),T=0),S||T||e.beginPath(),++v;break;case 2:u=j[1],c=l[u],j=l[u+1],d=l[u+2]-c,u=l[u+3]-j,u=Math.sqrt(d*d+u*u),e.moveTo(c+u,j),e.arc(c,j,u,0,2*Math.PI,!0),++v;break;case 3:e.closePath(),++v;break;case 4:u=j[1],c=j[2],M=j[3],C=j[4]*o,P=j[5]*o;var N=j[6],L=j[7],R=j[8],k=j[9];A=j[10],d=j[11],g=j[12];var I=j[13],D=j[14];for(A&&(d+=n);u<c;u+=2){if(j=l[u]-C,A=l[u+1]-P,I&&(j=Math.round(j),A=Math.round(A)),1!=g||0!==d){var F=j+C,O=A+P;dn(w,F,O,g,g,d,-F,-O),e.setTransform.apply(e,w)}F=e.globalAlpha,1!=L&&(e.globalAlpha=F*L);var O=D+R>M.width?M.width-R:D,B=N+k>M.height?M.height-k:N;e.drawImage(M,R,k,O,B,j,A,O*o,B*o),1!=L&&(e.globalAlpha=F),1==g&&0===d||e.setTransform.apply(e,x)}++v;break;case 5:for(u=j[1],c=j[2],P=j[3],N=j[4]*o,L=j[5]*o,d=j[6],g=j[7]*o,M=j[8],C=j[9],(A=j[10])&&(d+=n);u<c;u+=2){for(j=l[u]+N,A=l[u+1]+L,1==g&&0===d||(dn(w,j,A,g,g,d,-j,-A),e.setTransform.apply(e,w)),R=P.split("\n"),k=R.length,1<k?(I=Math.round(1.5*e.measureText("M").width),A-=(k-1)/2*I):I=0,D=0;D<k;D++)F=R[D],C&&e.strokeText(F,j,A),M&&e.fillText(F,j,A),A+=I;1==g&&0===d||e.setTransform.apply(e,x)}++v;break;case 6:if(void 0!==a&&(u=j[1],u=a(u)))return u;++v;break;case 7:E?S++:ys(t,e,n),++v;break;case 8:for(u=j[1],c=j[2],j=l[u],A=l[u+1],d=j+.5|0,g=A+.5|0,d===f&&g===y||(e.moveTo(j,A),f=d,y=g),u+=2;u<c;u+=2)j=l[u],A=l[u+1],d=j+.5|0,g=A+.5|0,(u==c-2||d!==f||g!==y)&&(e.lineTo(j,A),f=d,y=g);++v;break;case 9:t.P=j[2],S&&(ys(t,e,n),S=0),e.fillStyle=j[1],++v;break;case 10:f=void 0===j[7]||j[7],y=j[2],T&&(e.stroke(),T=0),e.strokeStyle=j[1],e.lineWidth=f?y*o:y,e.lineCap=j[3],e.lineJoin=j[4],e.miterLimit=j[5],Gd&&e.setLineDash(j[6]),y=f=NaN,++v;break;case 11:e.font=j[1],e.textAlign=j[2],e.textBaseline=j[3],++v;break;case 12:E?T++:e.stroke(),++v;break;default:++v}}S&&ys(t,e,n),T&&e.stroke()}function gs(t){var e=t.b;e.reverse();var o,i,r,n=e.length,s=-1;for(o=0;o<n;++o)if(i=e[o],r=i[0],6==r)s=o;else if(0==r){for(i[2]=o,i=t.b,r=o;s<r;){var p=i[s];i[s]=i[r],i[r]=p,++s,--r}s=-1}}function vs(t,e){t.S[2]=t.a.length,t.S=null,t.na[2]=t.b.length,t.na=null;var o=[6,e];t.a.push(o),t.b.push(o)}function ms(t,e,o,i){us.call(this,t,e,o,i),this.j=this.za=null,this.G=this.B=this.C=this.u=this.T=this.s=this.o=this.l=this.i=this.c=this.g=void 0}function bs(t,e,o,i){us.call(this,t,e,o,i),this.c=null,this.g={hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,nf:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}function ws(t,e,o,i,r){var n=t.coordinates.length;return e=cs(t,e,o,i,r,!1,!1),n=[8,n,e],t.a.push(n),t.b.push(n),i}function xs(t){var e=t.g,o=e.strokeStyle,i=e.lineCap,r=e.lineDash,n=e.lineJoin,s=e.lineWidth,p=e.miterLimit;e.hd==o&&e.cd==i&&V(e.dd,r)&&e.ed==n&&e.fd==s&&e.gd==p||(e.nf!=t.coordinates.length&&(t.a.push([12]),e.nf=t.coordinates.length),t.a.push([10,o,s,i,n,p,r],[1]),e.hd=o,e.cd=i,e.dd=r,e.ed=n,e.fd=s,e.gd=p)}function Ss(t,e,o,i){us.call(this,t,e,o,i),this.c=null,this.g={og:void 0,hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}function Ts(t,e,o,i,r){var n=t.g,s=void 0!==n.fillStyle,n=void 0!=n.strokeStyle,p=i.length,a=[1];for(t.a.push(a),t.b.push(a),a=0;a<p;++a){var h=i[a],l=t.coordinates.length;o=cs(t,e,o,h,r,!0,!n),o=[8,l,o],t.a.push(o),t.b.push(o),n&&(o=[3],t.a.push(o),t.b.push(o)),o=h}return e=[7],t.b.push(e),s&&t.a.push(e),n&&(s=[12],t.a.push(s),t.b.push(s)),o}function Es(t,e){var o=t.g,i=o.fillStyle,r=o.strokeStyle,n=o.lineCap,s=o.lineDash,p=o.lineJoin,a=o.lineWidth,h=o.miterLimit;if(void 0!==i&&("string"!=typeof i||o.og!=i)){var l=[9,i];"string"!=typeof i&&(i=e.D(),l.push([i[0],i[3]])),t.a.push(l),o.og=o.fillStyle}void 0===r||o.hd==r&&o.cd==n&&o.dd==s&&o.ed==p&&o.fd==a&&o.gd==h||(t.a.push([10,r,a,n,p,h,s]),o.hd=r,o.cd=n,o.dd=s,o.ed=p,o.fd=a,o.gd=h)}function Ms(t,e,o,i){us.call(this,t,e,o,i),this.G=this.B=this.C=null,this.j="",this.o=this.l=0,this.s=void 0,this.u=this.T=0,this.i=this.c=this.g=null}function Cs(t,e,o,i,r){if(""!==t.j&&t.i&&(t.g||t.c)){if(t.g){var n=t.g,s=t.C;if(!s||s.fillStyle!=n.fillStyle){var p=[9,n.fillStyle];t.a.push(p),t.b.push(p),s?s.fillStyle=n.fillStyle:t.C={fillStyle:n.fillStyle}}}t.c&&(n=t.c,s=t.B,s&&s.lineCap==n.lineCap&&s.lineDash==n.lineDash&&s.lineJoin==n.lineJoin&&s.lineWidth==n.lineWidth&&s.miterLimit==n.miterLimit&&s.strokeStyle==n.strokeStyle||(p=[10,n.strokeStyle,n.lineWidth,n.lineCap,n.lineJoin,n.miterLimit,n.lineDash,!1],t.a.push(p),t.b.push(p),s?(s.lineCap=n.lineCap,s.lineDash=n.lineDash,s.lineJoin=n.lineJoin,s.lineWidth=n.lineWidth,s.miterLimit=n.miterLimit,s.strokeStyle=n.strokeStyle):t.B={lineCap:n.lineCap,lineDash:n.lineDash,lineJoin:n.lineJoin,lineWidth:n.lineWidth,miterLimit:n.miterLimit,strokeStyle:n.strokeStyle})),n=t.i,s=t.G,s&&s.font==n.font&&s.textAlign==n.textAlign&&s.textBaseline==n.textBaseline||(p=[11,n.font,n.textAlign,n.textBaseline],t.a.push(p),t.b.push(p),s?(s.font=n.font,s.textAlign=n.textAlign,s.textBaseline=n.textBaseline):t.G={font:n.font,textAlign:n.textAlign,textBaseline:n.textBaseline}),fs(t,r),n=t.coordinates.length,e=cs(t,e,0,o,i,!1,!1),e=[5,n,e,t.j,t.l,t.o,t.T,t.u,!!t.g,!!t.c,t.s],t.a.push(e),t.b.push(e),vs(t,r)}}function Ps(t,e,o,i,r){this.s=t,this.f=e,this.l=i,this.o=o,this.c=r,this.a={},this.i=Xo(1,1),this.j=sn()}function As(t){for(var e in t.a){var o,i=t.a[e];for(o in i)i[o].ke()}}function js(t,e,o,i,r,n,s){var p=Object.keys(t.a).map(Number);p.sort(function(t,e){return e-t});var a,h,l,u,c;for(a=0,h=p.length;a<h;++a)for(u=t.a[p[a].toString()],l=Ug.length-1;0<=l;--l)if(c=u[Ug[l]],void 0!==c&&(c=ds(c,e,1,o,i,r,c.b,n,s)))return c}function Ns(t,e){return i(t)-i(e)}function Ls(t,e){var o=.5*t/e;return o*o}function Rs(t,e,o,i,r,n){var s,p,a=!1;return(s=o.a)&&(p=s.vd(),p==Ag||p==jg?s.Uf(r,n):(p==Cg&&s.load(),s.pf(r,n),a=!0)),(r=(0,o.c)(e))&&(i=r.pd(i),(0,$g[i.X()])(t,i,o,e)),a}function ks(t,e,o,i,r,n){this.c=void 0!==n?n:null,Mn.call(this,t,e,o,void 0!==n?Cg:Ag,i),this.g=r}function Is(t,e,o,i){var r=le(o,e,t);return o=e.getPointResolution(i,o),e=e.dc(),void 0!==e&&(o*=e),e=t.dc(),void 0!==e&&(o/=e),t=t.getPointResolution(o,r)/o,isFinite(t)&&0<t&&(o/=t),o}function Ds(t,e,o,i){t=o-t,e=i-e;var r=Math.sqrt(t*t+e*e);return[Math.round(o+t/r),Math.round(i+e/r)]}function Fs(t,e,o,i,r,n,s,p,a,h,l){var u=Xo(Math.round(o*t),Math.round(o*e));if(0===a.length)return u.canvas;u.scale(o,o);var c=Tt();a.forEach(function(t){At(c,t.extent)});var f=Xo(Math.round(o*$t(c)/i),Math.round(o*Ot(c)/i)),y=o/i;a.forEach(function(t){f.drawImage(t.image,h,h,t.image.width-2*h,t.image.height-2*h,(t.extent[0]-c[0])*y,-(t.extent[3]-c[3])*y,$t(t.extent)*y,Ot(t.extent)*y)});var d=Ut(s);return p.f.forEach(function(t){var e=t.source,r=t.target,s=e[1][0],p=e[1][1],a=e[2][0],h=e[2][1];t=(r[0][0]-d[0])/n;var l=-(r[0][1]-d[1])/n,y=(r[1][0]-d[0])/n,g=-(r[1][1]-d[1])/n,v=(r[2][0]-d[0])/n,m=-(r[2][1]-d[1])/n,r=e[0][0],e=e[0][1],s=s-r,p=p-e,a=a-r,h=h-e;t:{for(s=[[s,p,0,0,y-t],[a,h,0,0,v-t],[0,0,s,p,g-l],[0,0,a,h,m-l]],p=s.length,a=0;a<p;a++){for(var h=a,b=Math.abs(s[a][a]),w=a+1;w<p;w++){var x=Math.abs(s[w][a]);x>b&&(b=x,h=w)}if(0===b){s=null;break t}for(b=s[h],s[h]=s[a],s[a]=b,h=a+1;h<p;h++)for(b=-s[h][a]/s[a][a],w=a;w<p+1;w++)s[h][w]=a==w?0:s[h][w]+b*s[a][w]}for(a=Array(p),h=p-1;0<=h;h--)for(a[h]=s[h][p]/s[h][h],b=h-1;0<=b;b--)s[b][p]-=s[b][h]*a[h];s=a}s&&(u.save(),u.beginPath(),Hg?(a=(t+y+v)/3,h=(l+g+m)/3,p=Ds(a,h,t,l),y=Ds(a,h,y,g),v=Ds(a,h,v,m),u.moveTo(y[0],y[1]),u.lineTo(p[0],p[1]),u.lineTo(v[0],v[1])):(u.moveTo(y,g),u.lineTo(t,l),u.lineTo(v,m)),u.clip(),u.transform(s[0],s[2],s[1],s[3],t,l),u.translate(c[0]-r,c[3]-e),u.scale(i/o,-i/o),u.drawImage(f.canvas,0,0),u.restore())}),l&&(u.save(),u.strokeStyle="black",u.lineWidth=1,p.f.forEach(function(t){var e=t.target;t=(e[0][0]-d[0])/n;var o=-(e[0][1]-d[1])/n,i=(e[1][0]-d[0])/n,r=-(e[1][1]-d[1])/n,s=(e[2][0]-d[0])/n,e=-(e[2][1]-d[1])/n;u.beginPath(),u.moveTo(i,r),u.lineTo(t,o),u.lineTo(s,e),u.closePath(),u.stroke()}),u.restore()),u.canvas}function Os(t,e,o,i,r){this.g=t,this.c=e;var n={},s=se(this.c,this.g);this.a=function(t){var e=t[0]+"/"+t[1];return n[e]||(n[e]=s(t)),n[e]},this.i=i,this.s=r*r,this.f=[],this.l=!1,this.o=this.g.a&&!!i&&!!this.g.D()&&$t(i)==$t(this.g.D()),this.b=this.g.D()?$t(this.g.D()):null,this.j=this.c.D()?$t(this.c.D()):null,t=Ut(o),e=Gt(o),i=It(o),o=kt(o),r=this.a(t);var p=this.a(e),a=this.a(i),h=this.a(o);if(Bs(this,t,e,i,o,r,p,a,h,10),this.l){var l=1/0;this.f.forEach(function(t){l=Math.min(l,t.source[0][0],t.source[1][0],t.source[2][0])}),this.f.forEach(function(t){if(Math.max(t.source[0][0],t.source[1][0],t.source[2][0])-l>this.b/2){var e=[[t.source[0][0],t.source[0][1]],[t.source[1][0],t.source[1][1]],[t.source[2][0],t.source[2][1]]];e[0][0]-l>this.b/2&&(e[0][0]-=this.b),e[1][0]-l>this.b/2&&(e[1][0]-=this.b),e[2][0]-l>this.b/2&&(e[2][0]-=this.b),Math.max(e[0][0],e[1][0],e[2][0])-Math.min(e[0][0],e[1][0],e[2][0])<this.b/2&&(t.source=e)}},this)}n={}}function Bs(t,e,o,i,r,n,s,p,a,h){var l=dt([n,s,p,a]),c=t.b?$t(l)/t.b:null,f=t.b,y=t.g.a&&.5<c&&1>c,d=!1;if(0<h){if(t.c.g&&t.j)var g=dt([e,o,i,r]),d=d|.25<$t(g)/t.j;!y&&t.g.g&&c&&(d|=.25<c)}if(d||!t.i||Ht(l,t.i)){if(!(d||isFinite(n[0])&&isFinite(n[1])&&isFinite(s[0])&&isFinite(s[1])&&isFinite(p[0])&&isFinite(p[1])&&isFinite(a[0])&&isFinite(a[1]))){if(!(0<h))return;d=!0}if(0<h&&(d||(l=t.a([(e[0]+i[0])/2,(e[1]+i[1])/2]),f=y?(u(n[0],f)+u(p[0],f))/2-u(l[0],f):(n[0]+p[0])/2-l[0],l=(n[1]+p[1])/2-l[1],d=f*f+l*l>t.s),d))return void(Math.abs(e[0]-i[0])<=Math.abs(e[1]-i[1])?(y=[(o[0]+i[0])/2,(o[1]+i[1])/2],f=t.a(y),l=[(r[0]+e[0])/2,(r[1]+e[1])/2],c=t.a(l),Bs(t,e,o,y,l,n,s,f,c,h-1),Bs(t,l,y,i,r,c,f,p,a,h-1)):(y=[(e[0]+o[0])/2,(e[1]+o[1])/2],f=t.a(y),l=[(i[0]+r[0])/2,(i[1]+r[1])/2],c=t.a(l),Bs(t,e,y,l,r,n,f,c,a,h-1),Bs(t,y,o,i,l,f,s,p,c,h-1)));if(y){if(!t.o)return;t.l=!0}t.f.push({source:[n,p,a],target:[e,i,r]}),t.f.push({source:[n,s,p],target:[e,o,i]})}}function Us(t){var e=Tt();return t.f.forEach(function(t){t=t.source,jt(e,t[0]),jt(e,t[1]),jt(e,t[2])}),e}function Gs(t,e,o,i,r,n){this.T=e,this.s=t.D();var s=e.D(),p=s?Bt(o,s):o,s=Is(t,e,Dt(p),i);this.l=new Os(t,e,p,this.s,.5*s),this.c=i,this.g=o,t=Us(this.l),this.o=(this.sb=n(t,s,r))?this.sb.f:1,this.Cd=this.i=null,r=Ag,n=[],this.sb&&(r=Cg,n=this.sb.j),Mn.call(this,o,i,this.o,r,n)}function $s(t){B.call(this),this.f=re(t.projection),this.j=Hs(t.attributions),this.S=t.logo,this.Ka=void 0!==t.state?t.state:"ready",this.G=void 0!==t.wrapX&&t.wrapX}function Hs(t){if("string"==typeof t)return[new Do({html:t})];if(t instanceof Do)return[t];if(Array.isArray(t)){for(var e=t.length,o=Array(e),i=0;i<e;i++){var r=t[i];o[i]="string"==typeof r?new Do({html:r}):r}return o}return null}function Xs(t,e){t.Ka=e,t.v()}function Ks(t){$s.call(this,{attributions:t.attributions,extent:t.extent,logo:t.logo,projection:t.projection,state:t.state}),this.C=void 0!==t.resolutions?t.resolutions:null,this.a=null,this.ra=0}function Ws(t,e){return t.C&&(e=t.C[X(t.C,e,0)]),e}function zs(t,e){t.a().src=e}function qs(t,e){L.call(this,t),this.image=e}function Vs(t){Ks.call(this,{attributions:t.attributions,logo:t.logo,projection:t.projection,resolutions:t.resolutions,state:t.state}),this.fa=t.canvasFunction,this.P=null,this.Z=0,this.oa=void 0!==t.ratio?t.ratio:1.5}function Ys(t){this.c=t.source,this.La=sn(),this.i=Xo(),this.l=[0,0],this.Aa=void 0==t.renderBuffer?100:t.renderBuffer,this.u=null,Vs.call(this,{attributions:t.attributions,canvasFunction:this.rj.bind(this),logo:t.logo,projection:t.projection,ratio:t.ratio,resolutions:t.resolutions,state:this.c.U()}),this.B=null,this.s=void 0,this.nh(t.style),E(this.c,"change",this.Tm,this)}function Zs(t,e,o,i,r){return o=i/o,dn(t.La,r[0]/2,r[1]/2,o,-o,0,-e[0],-e[1])}function Js(t){ns.call(this,t),this.f=null,this.s=sn(),this.c=this.l=null}function _s(t){ns.call(this,t),this.c=Xo(),this.l=[],this.o=Tt(),this.P=[0,0,0],this.G=sn(),this.B=0}function Qs(t,e,o,i){var r=t.l;if(0!==r.length){var n,s,p,a=o.pixelRatio,h=o.viewState,l=h.center,u=h.projection,c=h.rotation,f=o.size,y=Math.round(a*f[0]/2),f=Math.round(a*f[1]/2),h=a/h.resolution,d=t.a,g=d.ga(),v=g.gb(a)*g.df(u),m=g.pb(u),d=I(d,"render"),b=e,w=1;if(c||d){b=t.c,n=b.canvas;var w=g.gb(a)/a,x=e.canvas.width*w;s=e.canvas.height*w,p=Math.round(Math.sqrt(x*x+s*s)),n.width!=p?n.width=n.height=p:b.clearRect(0,0,p,p),n=(p-x)/2/w,s=(p-s)/2/w,h*=w,y=Math.round(w*(y+n)),f=Math.round(w*(f+s))}x=b.globalAlpha,b.globalAlpha=i.opacity;var S,T=g.gf(u)&&1==i.opacity;T||(r.reverse(),S=[]);var E=i.extent;if(i=void 0!==E){var M=Ut(E),C=Gt(E),P=It(E),E=kt(E);un(o.coordinateToPixelTransform,M),un(o.coordinateToPixelTransform,C),un(o.coordinateToPixelTransform,P),un(o.coordinateToPixelTransform,E);var A=n||0,j=s||0;b.save();var N=b.canvas.width/2,L=b.canvas.height/2;An(b,-c,N,L),b.beginPath(),b.moveTo(w*(M[0]*a+A),w*(M[1]*a+j)),b.lineTo(w*(C[0]*a+A),w*(C[1]*a+j)),b.lineTo(w*(P[0]*a+A),w*(P[1]*a+j)),b.lineTo(w*(E[0]*a+A),w*(E[1]*a+j)),b.clip(),An(b,c,N,L)}for(M=0,C=r.length;M<C;++M){var P=r[M],E=P.ya,L=m.Ia(E,t.o),N=E[0],R=kt(m.Ia(m.Zd(l,N,t.P))),E=Math.round($t(L)*h),A=Math.round(Ot(L)*h),j=Math.round((L[0]-R[0])*h/E)*E+y+Math.round((R[0]-l[0])*h),L=Math.round((R[1]-L[3])*h/A)*A+f+Math.round((l[1]-R[1])*h);if(!T){R=[j,L,j+E,L+A],b.save();for(var k=0,D=S.length;k<D;++k){var F=S[k];Ht(R,F)&&(b.beginPath(),b.moveTo(R[0],R[1]),b.lineTo(R[0],R[3]),b.lineTo(R[2],R[3]),b.lineTo(R[2],R[1]),b.moveTo(F[0],F[1]),b.lineTo(F[2],F[1]),b.lineTo(F[2],F[3]),b.lineTo(F[0],F[3]),b.closePath(),b.clip())}S.push(R)}N=g.kf(N,a,u),b.drawImage(P.qb(),v,v,N[0],N[1],j,L,E,A),T||b.restore()}i&&b.restore(),d&&(r=n-y/w+y,a=s-f/w+f,l=dn(t.G,p/2-r,p/2-a,h,-h,-c,-l[0]+r/h,-l[1]-a/h),ps(t,"render",b,o,l)),(c||d)&&e.drawImage(b.canvas,-Math.round(n),-Math.round(s),p/w,p/w),b.globalAlpha=x}}function tp(t){ns.call(this,t),this.c=!1,this.B=-1,this.C=NaN,this.T=Tt(),this.l=this.u=null,this.o=Xo()}function ep(t){_s.call(this,t),this.u=!1,this.T=sn(),this.B=t.u==Bg?1:0}function op(t,e,o){function i(t){var e,o=t.zc();if(o?e=o.call(t,d):(o=r.j)&&(e=o(t,d)),e){Array.isArray(e)||(e=[e]);var o=m,i=v;if(e){var n=!1;if(Array.isArray(e))for(var s=0,p=e.length;s<p;++s)n=Rs(i,t,e[s],o,this.C,this)||n;else n=Rs(i,t,e,o,this.C,this)||n;t=n}else t=!1;this.u=this.u||t,a.jd=a.jd||t}}var r=t.a,n=o.pixelRatio;o=o.viewState.projection;var s=r.g,p=r.get("renderOrder")||null,a=e.f;if(a.jd||a.Rh!=s||a.Qf!=p){a.Ad=null,a.jd=!1;var h,l=r.ga(),u=l.tileGrid,c=e.ya,f=e.l,y="tile-pixels"==f.yb(),d=u.Ga(c[0]);if(y)var g=y=l.gb(),u=wo(u.Va(c[0])),u=[0,0,u[0]*g,u[1]*g];else y=d,u=u.Ia(c),ne(o,f)||(h=!0,e.uf(o));a.jd=!1;var v=new Ps(0,u,y,l.i,r.i),m=Ls(y,n);for(e=e.c,p&&p!==a.Qf&&e.sort(p),l=0,y=e.length;l<y;++l)n=e[l],h&&n.V().lb(f,o),i.call(t,n);As(v),a.Rh=s,a.Qf=p,a.Ad=v,a.resolution=NaN}}function ip(t,e){vn.call(this,0,e),this.g=Xo(),this.b=this.g.canvas,this.b.style.width="100%",this.b.style.height="100%",this.b.className="ol-unselectable",t.insertBefore(this.b,t.childNodes[0]||null),this.a=!0,this.c=sn()}function rp(t,e,o){var i=t.l,r=t.g;if(I(i,e)){var n=o.extent,s=o.pixelRatio,p=o.viewState.rotation,a=o.viewState,h=o.pixelRatio/a.resolution;t=dn(t.c,t.b.width/2,t.b.height/2,h,-h,-a.rotation,-a.center[0],-a.center[1]),i.b(new en(e,new Kn(r,s,n,t,p),o,r,null))}}function np(t){this.b=t}function sp(t){this.b=t}function pp(t){this.b=t}function ap(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}function hp(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}function lp(t,e){this.l=t.getUniformLocation(e,"j"),this.o=t.getUniformLocation(e,"i"),this.i=t.getUniformLocation(e,"k"),this.j=t.getUniformLocation(e,"h"),this.b=t.getAttribLocation(e,"e"),this.a=t.getAttribLocation(e,"f"),this.f=t.getAttribLocation(e,"c"),this.g=t.getAttribLocation(e,"g"),this.c=t.getAttribLocation(e,"d")}function up(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function cp(t,e){return t[0]=e[0],t[1]=e[1],t[4]=e[2],t[5]=e[3],t[12]=e[4],t[13]=e[5],t}function fp(t){this.b=void 0!==t?t:[],this.a=_g}function yp(t,e){this.j=t,this.b=e,this.a={},this.c={},this.f={},this.o=this.s=this.i=this.l=null,(this.g=H(rd,"OES_element_index_uint"))&&e.getExtension("OES_element_index_uint"),E(this.j,"webglcontextlost",this.Qn,this),E(this.j,"webglcontextrestored",this.Rn,this)}function dp(t,e,o){var r=t.b,n=o.b,s=String(i(o));if(s in t.a)r.bindBuffer(e,t.a[s].buffer);else{var p=r.createBuffer();r.bindBuffer(e,p);var a;34962==e?a=new Float32Array(n):34963==e&&(a=t.g?new Uint32Array(n):new Uint16Array(n)),r.bufferData(e,a,o.a),t.a[s]={bc:o,buffer:p}}}function gp(t,e){var o=t.b,r=String(i(e)),n=t.a[r];o.isContextLost()||o.deleteBuffer(n.buffer),delete t.a[r]}function vp(t){if(!t.i){var e=t.b,o=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,o);var i=xp(e,1,1),r=e.createRenderbuffer();e.bindRenderbuffer(e.RENDERBUFFER,r),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,1,1),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,i,0),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,r),e.bindTexture(e.TEXTURE_2D,null),e.bindRenderbuffer(e.RENDERBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,null),t.i=o,t.s=i,t.o=r}return t.i}function mp(t,e){var o=String(i(e));if(o in t.c)return t.c[o];var r=t.b,n=r.createShader(e.X());return r.shaderSource(n,e.b),r.compileShader(n),t.c[o]=n}function bp(t,e,o){var r=i(e)+"/"+i(o);if(r in t.f)return t.f[r];var n=t.b,s=n.createProgram();return n.attachShader(s,mp(t,e)),n.attachShader(s,mp(t,o)),n.linkProgram(s),t.f[r]=s}function wp(t,e,o){var i=t.createTexture();return t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),void 0!==e&&t.texParameteri(3553,10242,e),void 0!==o&&t.texParameteri(3553,10243,o),i}function xp(t,e,o){var i=wp(t,void 0,void 0);return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,o,0,t.RGBA,t.UNSIGNED_BYTE,null),i}function Sp(t,e){var o=wp(t,33071,33071);return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e),o}function Tp(t,e){this.B=this.C=void 0,this.o=Dt(e),this.u=[],this.i=[],this.S=void 0,this.c=[],this.f=[],this.za=this.na=void 0,this.a=[],this.G=this.l=null,this.P=void 0,this.Ka=sn(),this.Aa=sn(),this.Qa=this.W=void 0,this.La=sn(),this.ra=up(),this.fa=this.$a=this.Z=void 0,this.oa=[],this.j=[],this.b=[],this.T=null,this.g=[],this.s=[],this.Ib=void 0}function Ep(t,e){var o=t.T,i=t.l,r=t.oa,n=t.j,s=e.b;return function(){if(!s.isContextLost()){var t,p;for(t=0,p=r.length;t<p;++t)s.deleteTexture(r[t]);for(t=0,p=n.length;t<p;++t)s.deleteTexture(n[t])}gp(e,o),gp(e,i)}}function Mp(t,e,o,i){var r,n,s,p,a,h,l=t.C,u=t.B,c=t.S,f=t.na,y=t.za,d=t.P,g=t.W,v=t.Qa,m=t.Z?1:0,b=t.$a,w=t.fa,x=t.Ib,S=Math.cos(b),b=Math.sin(b),T=t.a.length,E=t.b.length;for(r=0;r<o;r+=i)a=e[r]-t.o[0],h=e[r+1]-t.o[1],n=E/8,s=-w*l,p=-w*(c-u),t.b[E++]=a,t.b[E++]=h,t.b[E++]=s*S-p*b,t.b[E++]=s*b+p*S,t.b[E++]=g/y,t.b[E++]=(v+c)/f,t.b[E++]=d,t.b[E++]=m,s=w*(x-l),p=-w*(c-u),t.b[E++]=a,t.b[E++]=h,t.b[E++]=s*S-p*b,t.b[E++]=s*b+p*S,t.b[E++]=(g+x)/y,t.b[E++]=(v+c)/f,t.b[E++]=d,t.b[E++]=m,s=w*(x-l),p=w*u,t.b[E++]=a,t.b[E++]=h,t.b[E++]=s*S-p*b,t.b[E++]=s*b+p*S,t.b[E++]=(g+x)/y,t.b[E++]=v/f,t.b[E++]=d,t.b[E++]=m,s=-w*l,p=w*u,t.b[E++]=a,t.b[E++]=h,t.b[E++]=s*S-p*b,t.b[E++]=s*b+p*S,t.b[E++]=g/y,t.b[E++]=v/f,t.b[E++]=d,t.b[E++]=m,t.a[T++]=n,t.a[T++]=n+1,t.a[T++]=n+2,t.a[T++]=n,t.a[T++]=n+2,t.a[T++]=n+3}function Cp(t,e){var o=e.b;t.u.push(t.a.length),t.i.push(t.a.length),t.T=new fp(t.b),dp(e,34962,t.T),t.l=new fp(t.a),dp(e,34963,t.l);var i={};Pp(t.oa,t.c,i,o),Pp(t.j,t.f,i,o),t.C=void 0,t.B=void 0,t.S=void 0,t.c=null,t.f=null,t.na=void 0,t.za=void 0,t.a=null,t.P=void 0,t.W=void 0,t.Qa=void 0,t.Z=void 0,t.$a=void 0,t.fa=void 0,t.b=null,t.Ib=void 0}function Pp(t,e,o,r){var n,s,p,a=e.length;for(p=0;p<a;++p)n=e[p],s=i(n).toString(),s in o?n=o[s]:(n=Sp(r,n),o[s]=n),t[p]=n}function Ap(t,e,o,r,n,s){var p=o.g?5125:5123;if(o=o.g?4:2,m(r)){var a;for(t=0,r=n.length,a=0;t<r;++t){e.bindTexture(3553,n[t]);var h=s[t];e.drawElements(4,h-a,p,a*o),a=h}}else{a=0;var l,h=0;for(l=n.length;h<l;++h){e.bindTexture(3553,n[h]);for(var u=0<h?s[h-1]:0,c=s[h],f=u;a<t.g.length&&t.g[a]<=c;){var y=i(t.s[a]).toString();void 0!==r[y]?(f!==u&&e.drawElements(4,u-f,p,f*o),u=f=a===t.g.length-1?c:t.g[a+1]):u=a===t.g.length-1?c:t.g[a+1],a++}f!==u&&e.drawElements(4,u-f,p,f*o)}}}function jp(t,e,o){this.c=e,this.i=t,this.f=o,this.a={}}function Np(t,e){var o,i=[];for(o in t.a)i.push(Ep(t.a[o],e));return function(){for(var t,e=i.length,o=0;o<e;o++)t=i[o].apply(this,arguments);return t}}function Lp(t,e){for(var o in t.a)Cp(t.a[o],e)}function Rp(t,e,o,i,r,n,s,p,a,h,l){var u,c,f=tv;for(u=Ug.length-1;0<=u;--u)if(c=t.a[Ug[u]],void 0!==c&&(c=c.Za(e,o,i,r,f,n,s,p,a,h,l)))return c}function kp(t,e,o,i,r,n,s,p){var a=o.b;return a.bindFramebuffer(a.FRAMEBUFFER,vp(o)),void 0!==Rp(t,o,e,i,r,n,s,p,function(){var t=new Uint8Array(4);return a.readPixels(0,0,1,1,a.RGBA,a.UNSIGNED_BYTE,t),0<t[3]},!1)}function Ip(t,e,o,i,r,n,s){this.b=t,this.f=e,this.g=n,this.c=s,this.l=r,this.j=i,this.i=o,this.a=null}function Dp(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}function Fp(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}function Op(t,e){this.g=t.getUniformLocation(e,"f"),this.f=t.getUniformLocation(e,"e"),this.i=t.getUniformLocation(e,"d"),this.c=t.getUniformLocation(e,"g"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function Bp(t,e){Jn.call(this,e),this.f=t,this.W=new fp([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]),this.i=this.tb=null,this.j=void 0,this.s=sn(),this.u=sn(),this.B=up(),this.T=null}function Up(t,e,o){var i=t.f.g;if(void 0===t.j||t.j!=o){e.postRenderFunctions.push(function(t,e,o){t.isContextLost()||(t.deleteFramebuffer(e),t.deleteTexture(o))}.bind(null,i,t.i,t.tb)),e=xp(i,o,o);var r=i.createFramebuffer();i.bindFramebuffer(36160,r),i.framebufferTexture2D(36160,36064,3553,e,0),t.tb=e,t.i=r,t.j=o}else i.bindFramebuffer(36160,t.i)}function Gp(t,e,o,i){if(t=t.a,I(t,e)){var r=i.viewState;t.b(new en(e,new Ip(o,r.center,r.resolution,r.rotation,i.size,i.extent,i.pixelRatio),i,null,o))}}function $p(t,e){Bp.call(this,t,e),this.o=this.l=this.c=null}function Hp(t,e){var o=e.a();return Sp(t.f.g,o)}function Xp(t,e,o,i,r,n,s,p){e*=n,o*=n,t=t.u,pn(t),fn(t,2*i/e,2*i/o),cn(t,-s),yn(t,p[0]-r[0],p[1]-r[1]),fn(t,(p[2]-p[0])/2,(p[3]-p[1])/2),yn(t,1,1)}function Kp(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}function Wp(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}function zp(t,e){this.g=t.getUniformLocation(e,"e"),this.f=t.getUniformLocation(e,"d"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function qp(t,e){Bp.call(this,t,e),this.S=iv,this.Z=rv,this.c=null,this.G=new fp([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]),this.C=this.l=null,this.o=-1,this.P=[0,0]}function Vp(t,e){Bp.call(this,t,e),this.o=!1,this.P=-1,this.S=NaN,this.C=Tt(),this.l=this.c=this.G=null}function Yp(){this.f=0,this.b={},this.g=this.a=null}function Zp(t,e){vn.call(this,0,e),this.b=document.createElement("CANVAS"),this.b.style.width="100%",this.b.style.height="100%",this.b.className="ol-unselectable",t.insertBefore(this.b,t.childNodes[0]||null),this.u=this.C=0,this.B=Xo(),this.o=!0,this.g=ai(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0}),this.c=new yp(this.b,this.g),E(this.b,"webglcontextlost",this.Dm,this),E(this.b,"webglcontextrestored",this.Em,this),this.a=new Yp,this.T=null,this.j=new $i(function(t){var e=t[1];t=t[2];var o=e[0]-this.T[0],e=e[1]-this.T[1];return 65536*Math.log(t)+Math.sqrt(o*o+e*e)/t}.bind(this),function(t){return t[0].Xa()}),this.G=function(){if(0!==this.j.b.length){Wi(this.j);var t=Hi(this.j);Jp(this,t[0],t[3],t[4])}return!1}.bind(this),this.i=0,Qp(this)}function Jp(t,e,o,i){var r=t.g,n=e.Xa();if(t.a.b.hasOwnProperty(n))t=t.a.get(n),r.bindTexture(3553,t.tb),9729!=t.Og&&(r.texParameteri(3553,10240,9729),t.Og=9729),9729!=t.Qg&&(r.texParameteri(3553,10241,9729),t.Qg=9729);else{var s=r.createTexture();if(r.bindTexture(3553,s),0<i){var p=t.B.canvas,a=t.B;t.C!==o[0]||t.u!==o[1]?(p.width=o[0],p.height=o[1],t.C=o[0],t.u=o[1]):a.clearRect(0,0,o[0],o[1]),a.drawImage(e.qb(),i,i,o[0],o[1],0,0,o[0],o[1]),r.texImage2D(3553,0,6408,6408,5121,p)}else r.texImage2D(3553,0,6408,6408,5121,e.qb());r.texParameteri(3553,10240,9729),r.texParameteri(3553,10241,9729),r.texParameteri(3553,10242,33071),r.texParameteri(3553,10243,33071),t.a.set(n,{tb:s,Og:9729,Qg:9729})}}function _p(t,e,o){var i=t.l;if(I(i,e)){t=t.c;var r=o.viewState;i.b(new en(e,new Ip(t,r.center,r.resolution,r.rotation,o.size,o.extent,o.pixelRatio),o,null,t))}}function Qp(t){t=t.g,t.activeTexture(33984),t.blendFuncSeparate(770,771,1,771),t.disable(2884),t.disable(2929),t.disable(3089),t.disable(2960)}function ta(t){B.call(this);var e=ea(t);this.Jb=void 0!==t.loadTilesWhileAnimating&&t.loadTilesWhileAnimating,this.ac=void 0!==t.loadTilesWhileInteracting&&t.loadTilesWhileInteracting,this.Me=void 0!==t.pixelRatio?t.pixelRatio:Ud,this.Le=e.logos,this.Z=function(){this.i=void 0,this.Jo.call(this,Date.now())}.bind(this),this.La=sn(),this.Je=sn(),this.ub=0,this.f=null,this.Aa=Tt(),this.G=this.P=null,this.a=document.createElement("DIV"),this.a.className="ol-viewport"+(Kd?" ol-touch":""),this.a.style.position="relative",this.a.style.overflow="hidden",this.a.style.width="100%",this.a.style.height="100%",this.a.style.msTouchAction="none",this.a.style.touchAction="none",this.C=document.createElement("DIV"),this.C.className="ol-overlaycontainer",this.a.appendChild(this.C),this.u=document.createElement("DIV"),this.u.className="ol-overlaycontainer-stopevent",t=["click","dblclick","mousedown","touchstart","mspointerdown",rg,"mousewheel","wheel"];for(var o=0,i=t.length;o<i;++o)E(this.u,t[o],R);this.a.appendChild(this.u),this.ra=new Di(this);for(var r in pg)E(this.ra,pg[r],this.Jg,this);this.fa=e.keyboardEventTarget,this.s=null,E(this.a,"wheel",this.Nc,this),E(this.a,"mousewheel",this.Nc,this),this.l=e.controls,this.j=e.interactions,this.o=e.overlays,this.Af={},this.B=new e.Lo(this.a,this),this.W=null,this.S=[],this.Ka=[],this.oa=new zi(this.pk.bind(this),this.Uk.bind(this)),this.Ce={},E(this,U(sv),this.Ck,this),E(this,U(hv),this.Vk,this),E(this,U(pv),this.Rk,this),
-E(this,U(av),this.Tk,this),this.H(e.values),this.l.forEach(function(t){t.setMap(this)},this),E(this.l,xd,function(t){t.element.setMap(this)},this),E(this.l,Sd,function(t){t.element.setMap(null)},this),this.j.forEach(function(t){t.setMap(this)},this),E(this.j,xd,function(t){t.element.setMap(this)},this),E(this.j,Sd,function(t){t.element.setMap(null)},this),this.o.forEach(this.ig,this),E(this.o,xd,function(t){this.ig(t.element)},this),E(this.o,Sd,function(t){var e=t.element.j;void 0!==e&&delete this.Af[e.toString()],t.element.setMap(null)},this)}function ea(t){var e=null;void 0!==t.keyboardEventTarget&&(e="string"==typeof t.keyboardEventTarget?document.getElementById(t.keyboardEventTarget):t.keyboardEventTarget);var o={},r={};if(void 0===t.logo||"boolean"==typeof t.logo&&t.logo)r["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]="https://openlayers.org/";else{var s=t.logo;"string"==typeof s?r[s]="":s instanceof HTMLElement?r[i(s).toString()]=s:s&&(n("string"==typeof s.href,44),n("string"==typeof s.src,45),r[s.src]=s.href)}s=t.layers instanceof Yr?t.layers:new Yr({layers:t.layers}),o[sv]=s,o[av]=t.target,o[hv]=void 0!==t.view?t.view:new _e;var p,s=vn;void 0!==t.renderer?(Array.isArray(t.renderer)?p=t.renderer:"string"==typeof t.renderer?p=[t.renderer]:n(!1,46),0<=p.indexOf("dom")&&(p=p.concat(nv))):p=nv;var a,h;for(a=0,h=p.length;a<h;++a){var l=p[a];if("canvas"==l){if($d){s=ip;break}}else if("webgl"==l&&jd){s=Zp;break}}return void 0!==t.controls?Array.isArray(t.controls)?p=new Fo(t.controls.slice()):(n(t.controls instanceof Fo,47),p=t.controls):p=ri(),void 0!==t.interactions?Array.isArray(t.interactions)?a=new Fo(t.interactions.slice()):(n(t.interactions instanceof Fo,48),a=t.interactions):a=zr(),void 0!==t.overlays?Array.isArray(t.overlays)?t=new Fo(t.overlays.slice()):(n(t.overlays instanceof Fo,49),t=t.overlays):t=new Fo,{controls:p,interactions:a,keyboardEventTarget:e,logos:r,overlays:t,Lo:s,values:o}}function oa(t){B.call(this),this.j=t.id,this.o=void 0===t.insertFirst||t.insertFirst,this.s=void 0===t.stopEvent||t.stopEvent,this.f=document.createElement("DIV"),this.f.className="ol-overlay-container",this.f.style.position="absolute",this.autoPan=void 0!==t.autoPan&&t.autoPan,this.i=void 0!==t.autoPanAnimation?t.autoPanAnimation:{},this.l=void 0!==t.autoPanMargin?t.autoPanMargin:20,this.a={Od:"",fe:"",Be:"",De:"",visible:!0},this.c=null,E(this,U(bv),this.xk,this),E(this,U(wv),this.Hk,this),E(this,U(xv),this.Lk,this),E(this,U(Sv),this.Nk,this),E(this,U(Tv),this.Ok,this),void 0!==t.element&&this.Vh(t.element),this.ci(void 0!==t.offset?t.offset:[0,0]),this.fi(void 0!==t.positioning?t.positioning:gv),void 0!==t.position&&this.tf(t.position)}function ia(t,e){var o=t.getBoundingClientRect(),i=o.left+window.pageXOffset,o=o.top+window.pageYOffset;return[i,o,i+e[0],o+e[1]]}function ra(t,e){t.a.visible!==e&&(t.f.style.display=e?"":"none",t.a.visible=e)}function na(t){var e=t.he(),o=t.Yg();if(void 0!==e&&e.f&&void 0!==o){var o=e.Ca(o),i=e.kb(),e=t.f.style,r=t.Eg(),n=t.Fg(),s=r[0],r=r[1];n==cv||n==dv||n==mv?(""!==t.a.fe&&(t.a.fe=e.left=""),s=Math.round(i[0]-o[0]-s)+"px",t.a.Be!=s&&(t.a.Be=e.right=s)):(""!==t.a.Be&&(t.a.Be=e.right=""),n!=uv&&n!=yv&&n!=vv||(s-=t.f.offsetWidth/2),s=Math.round(o[0]+s)+"px",t.a.fe!=s&&(t.a.fe=e.left=s)),n==lv||n==uv||n==cv?(""!==t.a.De&&(t.a.De=e.top=""),o=Math.round(i[1]-o[1]-r)+"px",t.a.Od!=o&&(t.a.Od=e.bottom=o)):(""!==t.a.Od&&(t.a.Od=e.bottom=""),n!=fv&&n!=yv&&n!=dv||(r-=t.f.offsetHeight/2),o=Math.round(o[1]+r)+"px",t.a.De!=o&&(t.a.De=e.top=o)),ra(t,!0)}else ra(t,!1)}function sa(t){t=t?t:{},this.j=void 0===t.collapsed||t.collapsed,this.l=void 0===t.collapsible||t.collapsible,this.l||(this.j=!1);var e=void 0!==t.className?t.className:"ol-overviewmap",o=void 0!==t.tipLabel?t.tipLabel:"Overview map",i=void 0!==t.collapseLabel?t.collapseLabel:"«";"string"==typeof i?(this.o=document.createElement("span"),this.o.textContent=i):this.o=i,i=void 0!==t.label?t.label:"»","string"==typeof i?(this.u=document.createElement("span"),this.u.textContent=i):this.u=i;var r=this.l&&!this.j?this.o:this.u,i=document.createElement("button");i.setAttribute("type","button"),i.title=o,i.appendChild(r),E(i,"click",this.Vl,this),o=document.createElement("DIV"),o.className="ol-overviewmap-map";var n=this.f=new ta({controls:new Fo,interactions:new Fo,target:o,view:t.view});t.layers&&t.layers.forEach(function(t){n.gg(t)},this),r=document.createElement("DIV"),r.className="ol-overviewmap-box",r.style.boxSizing="border-box",this.C=new oa({position:[0,0],positioning:lv,element:r}),this.f.hg(this.C),r=document.createElement("div"),r.className=e+" ol-unselectable ol-control"+(this.j&&this.l?" ol-collapsed":"")+(this.l?"":" ol-uncollapsible"),r.appendChild(o),r.appendChild(i),qo.call(this,{element:r,render:t.render?t.render:pa,target:t.target})}function pa(){var t=this.a,e=this.f;if(t.f&&e.f){var o=t.kb(),t=t.$().Jc(o),i=e.kb(),o=e.$().Jc(i),r=e.Ca(Ut(t)),n=e.Ca(It(t)),e=Math.abs(r[0]-n[0]),r=Math.abs(r[1]-n[1]),n=i[0],i=i[1];e<.1*n||r<.1*i||e>.75*n||r>.75*i?aa(this):wt(o,t)||(t=this.f,o=this.a.$(),t.$().rb(o.bb()))}ha(this)}function aa(t){var e=t.a;t=t.f;var o=e.kb(),e=e.$().Jc(o),o=t.kb();t=t.$(),Kt(e,1/(.1*Math.pow(2,Math.log(7.5)/Math.LN2/2))),t.$e(e,o)}function ha(t){var e=t.a,o=t.f;if(e.f&&o.f){var i,r=e.kb(),n=e.$(),s=o.$(),o=n.Pa(),e=t.C,p=t.C.Td(),a=n.Jc(r),r=s.Ma(),n=kt(a),s=Gt(a);(t=t.a.$().bb())&&(i=[n[0]-t[0],n[1]-t[1]],ut(i,o),st(i,t)),e.tf(i),p&&(p.style.width=Math.abs((n[0]-s[0])/r)+"px",p.style.height=Math.abs((s[1]-n[1])/r)+"px")}}function la(t){t.element.classList.toggle("ol-collapsed"),t.j?Ko(t.o,t.u):Ko(t.u,t.o),t.j=!t.j;var e=t.f;t.j||e.f||(e.Yc(),aa(t),M(e,"postrender",function(){ha(this)},t))}function ua(t){t=t?t:{};var e=void 0!==t.className?t.className:"ol-scale-line";this.l=document.createElement("DIV"),this.l.className=e+"-inner",this.f=document.createElement("DIV"),this.f.className=e+" ol-unselectable",this.f.appendChild(this.l),this.u=null,this.o=void 0!==t.minWidth?t.minWidth:64,this.j=!1,this.B=void 0,this.C="",qo.call(this,{element:this.f,render:t.render?t.render:ca,target:t.target}),E(this,U(Mv),this.S,this),this.G(t.units||jv)}function ca(t){(t=t.frameState)?this.u=t.viewState:this.u=null,fa(this)}function fa(t){var e=t.u;if(e){var o=e.projection,i=o.dc(),e=o.getPointResolution(e.resolution,e.center)*i,i=t.o*e,o="",r=t.yb();r==Cv?(o=cd.degrees,e/=o,i<o/60?(o="″",e*=3600):i<o?(o="′",e*=60):o="°"):r==Pv?.9144>i?(o="in",e/=.0254):1609.344>i?(o="ft",e/=.3048):(o="mi",e/=1609.344):r==Av?(e/=1852,o="nm"):r==jv?1>i?(o="mm",e*=1e3):1e3>i?o="m":(o="km",e/=1e3):r==Nv?.9144>i?(o="in",e*=39.37):1609.344>i?(o="ft",e/=.30480061):(o="mi",e/=1609.3472):n(!1,33);for(var s,r=3*Math.floor(Math.log(t.o*e)/Math.log(10));;){if(s=Ev[(r%3+3)%3]*Math.pow(10,Math.floor(r/3)),i=Math.round(s/e),isNaN(i))return t.f.style.display="none",void(t.j=!1);if(i>=t.o)break;++r}e=s+" "+o,t.C!=e&&(t.l.innerHTML=e,t.C=e),t.B!=i&&(t.l.style.width=i+"px",t.B=i),t.j||(t.f.style.display="",t.j=!0)}else t.j&&(t.f.style.display="none",t.j=!1)}function ya(t){t=t?t:{},this.f=void 0,this.j=Lv,this.u=[],this.B=this.o=0,this.W=null,this.fa=!1,this.Z=void 0!==t.duration?t.duration:200;var e=void 0!==t.className?t.className:"ol-zoomslider",o=document.createElement("button");o.setAttribute("type","button"),o.className=e+"-thumb ol-unselectable";var i=document.createElement("div");i.className=e+" ol-unselectable ol-control",i.appendChild(o),this.l=new Ti(i),E(this.l,"pointerdown",this.wk,this),E(this.l,"pointermove",this.Hg,this),E(this.l,"pointerup",this.Ig,this),E(i,"click",this.vk,this),E(o,"click",R),qo.call(this,{element:i,render:t.render?t.render:da})}function da(t){if(t.frameState){if(!this.fa){var e=this.element,o=e.offsetWidth,i=e.offsetHeight,r=e.firstElementChild,n=getComputedStyle(r),e=r.offsetWidth+parseFloat(n.marginRight)+parseFloat(n.marginLeft),r=r.offsetHeight+parseFloat(n.marginTop)+parseFloat(n.marginBottom);this.W=[e,r],o>i?(this.j=1,this.B=o-e):(this.j=Lv,this.o=i-r),this.fa=!0}t=t.frameState.viewState.resolution,t!==this.f&&(this.f=t,ga(this,t))}}function ga(t,e){var o;o=1-oo(t.a.$())(e);var i=t.element.firstElementChild;1==t.j?i.style.left=t.B*o+"px":i.style.top=t.o*o+"px"}function va(t,e){return eo(t.a.$())(1-e)}function ma(t){t=t?t:{},this.f=t.extent?t.extent:null;var e=void 0!==t.className?t.className:"ol-zoom-extent",o=void 0!==t.label?t.label:"E",i=void 0!==t.tipLabel?t.tipLabel:"Fit to extent",r=document.createElement("button");r.setAttribute("type","button"),r.title=i,r.appendChild("string"==typeof o?document.createTextNode(o):o),E(r,"click",this.j,this),o=document.createElement("div"),o.className=e+" ol-unselectable ol-control",o.appendChild(r),qo.call(this,{element:o,target:t.target})}function ba(t){B.call(this),t=t?t:{},this.a=null,E(this,U(Fv),this.ul,this),this.rf(void 0!==t.tracking&&t.tracking)}function wa(t){B.call(this),this.a=void 0,this.f="geometry",this.i=null,this.j=void 0,this.c=null,E(this,U(this.f),this.ae,this),void 0!==t&&(t instanceof ce||!t?this.Oa(t):this.H(t))}function xa(t){if("function"!=typeof t){var e;Array.isArray(t)?e=t:(n(t instanceof Fn,41),e=[t]),t=function(){return e}}return t}function Sa(t,e){return Ov.createElementNS(t,e)}function Ta(t,e){return Ea(t,e,[]).join("")}function Ea(t,e,o){if(t.nodeType==Node.CDATA_SECTION_NODE||t.nodeType==Node.TEXT_NODE)e?o.push(String(t.nodeValue).replace(/(\r\n|\r|\n)/g,"")):o.push(t.nodeValue);else for(t=t.firstChild;t;t=t.nextSibling)Ea(t,e,o);return o}function Ma(t){return t instanceof Document}function Ca(t){return t instanceof Node}function Pa(t){return(new DOMParser).parseFromString(t,"application/xml")}function Aa(t,e){return function(o,i){var r=t.call(e,o,i);void 0!==r&&W(i[i.length-1],r)}}function ja(t,e){return function(o,i){var r=t.call(void 0!==e?e:this,o,i);void 0!==r&&i[i.length-1].push(r)}}function Na(t,e){return function(o,i){var r=t.call(void 0!==e?e:this,o,i);void 0!==r&&(i[i.length-1]=r)}}function La(t){return function(e,o){var i=t.call(this,e,o);if(void 0!==i){var r,n=o[o.length-1],s=e.localName;r=s in n?n[s]:n[s]=[],r.push(i)}}}function Ra(t,e){return function(o,i){var r=t.call(this,o,i);void 0!==r&&(i[i.length-1][void 0!==e?e:o.localName]=r)}}function ka(t,e){return function(o,i,r){t.call(void 0!==e?e:this,o,i,r),r[r.length-1].node.appendChild(o)}}function Ia(t){var e,o;return function(i,r,n){if(!e){e={};var s={};s[i.localName]=t,e[i.namespaceURI]=s,o=Da(i.localName)}Ga(e,o,r,n)}}function Da(t,e){return function(o,i,r){return o=i[i.length-1].node,i=t,void 0===i&&(i=r),r=e,void 0===e&&(r=o.namespaceURI),Sa(r,i)}}function Fa(t,e){for(var o=e.length,i=Array(o),r=0;r<o;++r)i[r]=t[e[r]];return i}function Oa(t,e,o){o=void 0!==o?o:{};var i,r;for(i=0,r=t.length;i<r;++i)o[t[i]]=e;return o}function Ba(t,e,o,i){for(e=e.firstElementChild;e;e=e.nextElementSibling){var r=t[e.namespaceURI];void 0!==r&&(r=r[e.localName])&&r.call(i,e,o)}}function Ua(t,e,o,i,r){return i.push(t),Ba(e,o,i,r),i.pop()}function Ga(t,e,o,i,r,n){for(var s,p,a=(void 0!==r?r:o).length,h=0;h<a;++h)s=o[h],void 0!==s&&(p=e.call(n,s,i,void 0!==r?r[h]:void 0),void 0!==p&&t[p.namespaceURI][p.localName].call(n,p,s,i))}function $a(t,e,o,i,r,n,s){r.push(t),Ga(e,o,i,r,n,s),r.pop()}function Ha(t,e,o,i){return function(r,n,s){var p=new XMLHttpRequest;p.open("GET","function"==typeof t?t(r,n,s):t,!0),"arraybuffer"==e.X()&&(p.responseType="arraybuffer"),p.onload=function(){if(!p.status||200<=p.status&&300>p.status){var t,r=e.X();"json"==r||"text"==r?t=p.responseText:"xml"==r?(t=p.responseXML)||(t=Pa(p.responseText)):"arraybuffer"==r&&(t=p.response),t?o.call(this,e.Ha(t,{featureProjection:s}),e.Sa(t)):i.call(this)}else i.call(this)}.bind(this),p.send()}}function Xa(t,e){return Ha(t,e,function(t,e){this.uf(e),this.Wh(t)},function(){this.state=3,Ui(this)})}function Ka(t,e){return Ha(t,e,function(t){this.Ic(t)},o)}function Wa(){this.j=this.defaultDataProjection=null}function za(t,e,o){var i;return o&&(i={dataProjection:o.dataProjection?o.dataProjection:t.Sa(e),featureProjection:o.featureProjection}),qa(t,i)}function qa(t,e){return hd({dataProjection:t.defaultDataProjection,featureProjection:t.j},e)}function Va(t,e,o){var i,r=o?re(o.featureProjection):null,n=o?re(o.dataProjection):null;if(i=r&&n&&!ne(r,n)?t instanceof ce?(e?t.clone():t).lb(e?r:n,e?n:r):ue(e?t.slice():t,e?r:n,e?n:r):t,e&&o&&o.decimals){var s=Math.pow(10,o.decimals);t=function(t){for(var e=0,o=t.length;e<o;++e)t[e]=Math.round(t[e]*s)/s;return t},Array.isArray(i)?t(i):i.oc(t)}return i}function Ya(){Wa.call(this)}function Za(t){return"string"==typeof t?(t=JSON.parse(t))?t:null:null!==t?t:null}function Ja(t,e,o,i,r,n){var s=NaN,p=NaN,a=(o-e)/i;if(0!==a)if(1==a)s=t[e],p=t[e+1];else if(2==a)s=(1-r)*t[e]+r*t[e+i],p=(1-r)*t[e+1]+r*t[e+i+1];else{var h,p=t[e],a=t[e+1],l=0,s=[0];for(h=e+i;h<o;h+=i){var u=t[h],f=t[h+1],l=l+Math.sqrt((u-p)*(u-p)+(f-a)*(f-a));s.push(l),p=u,a=f}for(o=r*l,a=0,l=s.length,h=!1;a<l;)r=a+(l-a>>1),p=+$(s[r],o),0>p?a=r+1:(l=r,h=!p);r=h?a:~a,0>r?(o=(o-s[-r-2])/(s[-r-1]-s[-r-2]),e+=(-r-2)*i,s=c(t[e],t[e+i],o),p=c(t[e+1],t[e+i+1],o)):(s=t[e+r*i],p=t[e+r*i+1])}return n?(n[0]=s,n[1]=p,n):[s,p]}function _a(t,e,o,i,r,n){if(o==e)return null;if(r<t[e+i-1])return n?(o=t.slice(e,e+i),o[i-1]=r,o):null;if(t[o-1]<r)return n?(o=t.slice(o-i,o),o[i-1]=r,o):null;if(r==t[e+i-1])return t.slice(e,e+i);for(e/=i,o/=i;e<o;)n=e+o>>1,r<t[(n+1)*i-1]?o=n:e=n+1;if(o=t[e*i-1],r==o)return t.slice((e-1)*i,(e-1)*i+i);n=(r-o)/(t[(e+1)*i-1]-o),o=[];var s;for(s=0;s<i-1;++s)o.push(c(t[(e-1)*i+s],t[e*i+s],n));return o.push(r),o}function Qa(t,e,o,i,r,n){var s=0;if(n)return _a(t,s,e[e.length-1],o,i,r);if(i<t[o-1])return r?(t=t.slice(0,o),t[o-1]=i,t):null;if(t[t.length-1]<i)return r?(t=t.slice(t.length-o),t[o-1]=i,t):null;for(r=0,n=e.length;r<n;++r){var p=e[r];if(s!=p){if(i<t[s+o-1])break;if(i<=t[p-1])return _a(t,s,p,o,i,!1);s=p}}return null}function th(t,e){ye.call(this),this.c=null,this.C=this.B=this.l=-1,this.ma(t,e)}function eh(t){return t.l!=t.g&&(t.c=t.vg(.5,t.c),t.l=t.g),t.c}function oh(t,e){ye.call(this),this.c=[],this.l=this.C=-1,this.ma(t,e)}function ih(t){var e=[],o=t.A,i=0,r=t.c;t=t.a;var n,s;for(n=0,s=r.length;n<s;++n){var p=r[n],i=Ja(o,i,p,t,.5);W(e,i),i=p}return e}function rh(t,e){var o,i,r=t.ia,n=[],s=[];for(o=0,i=e.length;o<i;++o){var p=e[o];0===o&&(r=p.ia),W(n,p.ka()),s.push(n.length)}t.aa(r,n,s)}function nh(t,e){ye.call(this),this.ma(t,e)}function sh(t,e){ye.call(this),this.c=[],this.C=-1,this.B=null,this.P=this.G=this.S=-1,this.l=null,this.ma(t,e)}function ph(t){if(t.C!=t.g){var e,o,i=t.A,r=t.c,n=t.a,s=0,p=[];for(e=0,o=r.length;e<o;++e){var a=r[e],s=Ct(i,s,a[0],n);p.push((s[0]+s[2])/2,(s[1]+s[3])/2),s=a[a.length-1]}for(i=ah(t),r=t.c,n=t.a,e=0,o=[],a=0,s=r.length;a<s;++a){var h=r[a];o=Be(i,e,h,n,p,2*a,o),e=h[h.length-1]}t.B=o,t.C=t.g}return t.B}function ah(t){if(t.P!=t.g){var e,o=t.A;t:{e=t.c;var i,r;for(i=0,r=e.length;i<r;++i)if(!Xe(o,e[i],t.a,void 0)){e=!1;break t}e=!0}e?t.l=o:(t.l=o.slice(),t.l.length=We(t.l,t.c,t.a)),t.P=t.g}return t.l}function hh(t,e,o,i){ge(t,e,o),t.c=i,t.v()}function lh(t,e){var o,i,r,n=t.ia,s=[],p=[];for(o=0,i=e.length;o<i;++o){var a=e[o];0===o&&(n=a.ia);var h=s.length;r=a.Eb();var l,u;for(l=0,u=r.length;l<u;++l)r[l]+=h;W(s,a.ka()),p.push(r)}hh(t,n,s,p)}function uh(t){t=t?t:{},Wa.call(this),this.b=t.geometryName}function ch(t,e){if(!t)return null;var o;if("number"==typeof t.x&&"number"==typeof t.y)o="Point";else if(t.points)o="MultiPoint";else if(t.paths)o=1===t.paths.length?"LineString":"MultiLineString";else if(t.rings){var i=t.rings,r=fh(t),n=[];o=[];var s,p;for(s=0,p=i.length;s<p;++s){var a=K(i[s]);He(a,0,a.length,r.length)?n.push([i[s]]):o.push(i[s])}for(;o.length;){for(i=o.shift(),r=!1,s=n.length-1;0<=s;s--)if(wt(new Re(n[s][0]).D(),new Re(i).D())){n[s].push(i),r=!0;break}r||n.push([i.reverse()])}t=hd({},t),1===n.length?(o="Polygon",t.rings=n[0]):(o="MultiPolygon",t.rings=n)}return Va((0,Uv[o])(t),!1,e)}function fh(t){var e="XY";return!0===t.hasZ&&!0===t.hasM?e="XYZM":!0===t.hasZ?e="XYZ":!0===t.hasM&&(e="XYM"),e}function yh(t){return t=t.ia,{hasZ:"XYZ"===t||"XYZM"===t,hasM:"XYM"===t||"XYZM"===t}}function dh(t,e){return(0,Gv[t.X()])(Va(t,!0,e),e)}function gh(t){this.Hb=t}function vh(t){this.Hb=t}function mh(t,e,o){this.Hb=t,this.b=e,this.a=o}function bh(t,e){mh.call(this,"And",t,e)}function wh(t,e,o){this.Hb="BBOX",this.geometryName=t,this.extent=e,this.srsName=o}function xh(t,e){this.Hb=t,this.b=e}function Sh(t,e,o,i){xh.call(this,t,e),this.g=o,this.a=i}function Th(t,e,o){Sh.call(this,"PropertyIsEqualTo",t,e,o)}function Eh(t,e){Sh.call(this,"PropertyIsGreaterThan",t,e)}function Mh(t,e){Sh.call(this,"PropertyIsGreaterThanOrEqualTo",t,e)}function Ch(t,e,o,i){this.Hb=t,this.geometryName=e||"the_geom",this.geometry=o,this.srsName=i}function Ph(t,e,o){Ch.call(this,"Intersects",t,e,o)}function Ah(t,e,o){xh.call(this,"PropertyIsBetween",t),this.a=e,this.g=o}function jh(t,e,o,i,r,n){xh.call(this,"PropertyIsLike",t),this.f=e,this.i=void 0!==o?o:"*",this.c=void 0!==i?i:".",this.g=void 0!==r?r:"!",this.a=n}function Nh(t){xh.call(this,"PropertyIsNull",t)}function Lh(t,e){Sh.call(this,"PropertyIsLessThan",t,e)}function Rh(t,e){Sh.call(this,"PropertyIsLessThanOrEqualTo",t,e)}function kh(t){this.Hb="Not",this.condition=t}function Ih(t,e,o){Sh.call(this,"PropertyIsNotEqualTo",t,e,o)}function Dh(t,e){mh.call(this,"Or",t,e)}function Fh(t,e,o){Ch.call(this,"Within",t,e,o)}function Oh(t,e){return new bh(t,e)}function Bh(t,e,o){return new wh(t,e,o)}function Uh(t){ce.call(this),this.f=t?t:null,Hh(this)}function Gh(t){var e,o,i=[];for(e=0,o=t.length;e<o;++e)i.push(t[e].clone());return i}function $h(t){var e,o;if(t.f)for(e=0,o=t.f.length;e<o;++e)C(t.f[e],"change",t.v,t)}function Hh(t){var e,o;if(t.f)for(e=0,o=t.f.length;e<o;++e)E(t.f[e],"change",t.v,t)}function Xh(t){t=t?t:{},Wa.call(this),this.defaultDataProjection=re(t.defaultDataProjection?t.defaultDataProjection:"EPSG:4326"),t.featureProjection&&(this.j=re(t.featureProjection)),this.b=t.geometryName}function Kh(t,e){return t?Va((0,$v[t.type])(t),!1,e):null}function Wh(t,e){return(0,Hv[t.X()])(Va(t,!0,e),e)}function zh(){this.f=new XMLSerializer,Wa.call(this)}function qh(t,e,o){return t=Vh(t,e,o),0<t.length?t[0]:null}function Vh(t,e,o){var i=[];for(e=e.firstChild;e;e=e.nextSibling)e.nodeType==Node.ELEMENT_NODE&&W(i,t.kc(e,o));return i}function Yh(t){t=t?t:{},this.featureType=t.featureType,this.featureNS=t.featureNS,this.srsName=t.srsName,this.schemaLocation="",this.b={},this.b["http://www.opengis.net/gml"]={featureMember:Na(Yh.prototype.xd),featureMembers:Na(Yh.prototype.xd)},zh.call(this)}function Zh(t){return t=Ta(t,!1),Jh(t)}function Jh(t){if(t=/^\s*(true|1)|(false|0)\s*$/.exec(t))return void 0!==t[1]||!1}function _h(t){return t=Ta(t,!1),t=Date.parse(t),isNaN(t)?void 0:t/1e3}function Qh(t){return t=Ta(t,!1),tl(t)}function tl(t){if(t=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(t))return parseFloat(t[1])}function el(t){return t=Ta(t,!1),ol(t)}function ol(t){if(t=/^\s*(\d+)\s*$/.exec(t))return parseInt(t[1],10)}function il(t){return Ta(t,!1).trim()}function rl(t,e){pl(t,e?"1":"0")}function nl(t,e){t.appendChild(Ov.createTextNode(e.toPrecision()))}function sl(t,e){t.appendChild(Ov.createTextNode(e.toString()))}function pl(t,e){t.appendChild(Ov.createTextNode(e))}function al(t){t=t?t:{},Yh.call(this,t),this.s=void 0!==t.surface&&t.surface,this.i=void 0!==t.curve&&t.curve,this.l=void 0===t.multiCurve||t.multiCurve,this.o=void 0===t.multiSurface||t.multiSurface,this.schemaLocation=t.schemaLocation?t.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"}function hl(t,e,o){o=o[o.length-1].srsName,e=e.Y();for(var i,r=e.length,n=Array(r),s=0;s<r;++s){i=e[s];var p=s,a="enu";o&&(a=re(o).b),n[p]="en"===a.substr(0,2)?i[0]+" "+i[1]:i[1]+" "+i[0]}pl(t,n.join(" "))}function ll(t){t=t?t:{},Yh.call(this,t),this.b["http://www.opengis.net/gml"].featureMember=ja(Yh.prototype.xd),this.schemaLocation=t.schemaLocation?t.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"}function ul(t){t=t?t:{},zh.call(this),this.defaultDataProjection=re("EPSG:4326"),this.b=t.readExtensions}function cl(t,e,o){return t.push(parseFloat(e.getAttribute("lon")),parseFloat(e.getAttribute("lat"))),"ele"in o?(t.push(o.ele),delete o.ele):t.push(0),"time"in o?(t.push(o.time),delete o.time):t.push(0),t}function fl(t,e){var o=e[e.length-1],i=t.getAttribute("href");null!==i&&(o.link=i),Ba(tm,t,e)}function yl(t,e){e[e.length-1].extensionsNode_=t}function dl(t,e){var o=e[0],i=Ua({flatCoordinates:[]},em,t,e);if(i){var r=i.flatCoordinates;delete i.flatCoordinates;var n=new th(null);return n.aa("XYZM",r),Va(n,!1,o),o=new wa(n),o.H(i),o}}function gl(t,e){var o=e[0],i=Ua({flatCoordinates:[],ends:[]},im,t,e);if(i){var r=i.flatCoordinates;delete i.flatCoordinates;var n=i.ends;delete i.ends;var s=new oh(null);return s.aa("XYZM",r,n),Va(s,!1,o),o=new wa(s),o.H(i),o}}function vl(t,e){var o=e[0],i=Ua({},sm,t,e);if(i){var r=cl([],t,i),r=new Ie(r,"XYZM");return Va(r,!1,o),o=new wa(r),o.H(i),o}}function ml(t,e){e||(e=[]);for(var o=0,i=e.length;o<i;++o){var r=e[o];if(t.b){var n=r.get("extensionsNode_")||null;t.b(r,n)}r.set("extensionsNode_",void 0)}}function bl(t,e,o){t.setAttribute("href",e),e=o[o.length-1].properties,$a({node:t},am,Bv,[e.linkText,e.linkType],o,pm)}function wl(t,e,o){var i=o[o.length-1],r=i.node.namespaceURI,n=i.properties;switch(t.setAttributeNS(null,"lat",e[1]),t.setAttributeNS(null,"lon",e[0]),i.geometryLayout){case"XYZM":0!==e[3]&&(n.time=e[3]);case"XYZ":0!==e[2]&&(n.ele=e[2]);break;case"XYM":0!==e[2]&&(n.time=e[2])}e="rtept"==t.nodeName?um[r]:gm[r],i=Fa(n,e),$a({node:t,properties:n},vm,Bv,i,o,e)}function xl(t,e){var o=t.V();if(o&&(o=mm[o.X()]))return Sa(e[e.length-1].node.namespaceURI,o)}function Sl(){Wa.call(this)}function Tl(t){return"string"==typeof t?t:""}function El(t){t=t?t:{},Wa.call(this),this.defaultDataProjection=re("EPSG:4326"),this.b=t.altitudeMode?t.altitudeMode:Cm}function Ml(t,e,o,i,r,n){k.call(this),this.l=null,this.a=t?t:new Image,null!==i&&(this.a.crossOrigin=i),this.c=n?document.createElement("CANVAS"):null,this.j=n,this.i=null,this.f=r,this.g=o,this.o=e,this.s=!1,this.f==Ag&&Cl(this)}function Cl(t){var e=Xo(1,1);try{e.drawImage(t.a,0,0),e.getImageData(0,0,1,1)}catch(o){t.s=!0}}function Pl(t){t=t||{},this.f=void 0!==t.anchor?t.anchor:[.5,.5],this.j=null,this.a=void 0!==t.anchorOrigin?t.anchorOrigin:Nm,this.B=void 0!==t.anchorXUnits?t.anchorXUnits:Pm,this.G=void 0!==t.anchorYUnits?t.anchorYUnits:Pm,this.na=void 0!==t.crossOrigin?t.crossOrigin:null;var e=void 0!==t.img?t.img:null,o=void 0!==t.imgSize?t.imgSize:null,r=t.src;n(!(void 0!==r&&e),4),n(!e||e&&o,5),void 0!==r&&0!==r.length||!e||(r=e.src||i(e).toString()),n(void 0!==r&&0<r.length,6);var s=void 0!==t.src?Cg:Ag;this.i=void 0!==t.color?Uo(t.color):null;var p=this.na,a=this.i,h=Sg.get(r,p,a);h||(h=new Ml(e,r,o,p,s,a),Sg.set(r,p,a,h)),this.b=h,this.S=void 0!==t.offset?t.offset:[0,0],this.g=void 0!==t.offsetOrigin?t.offsetOrigin:Nm,this.s=null,this.C=void 0!==t.size?t.size:null,jn.call(this,{opacity:void 0!==t.opacity?t.opacity:1,rotation:void 0!==t.rotation?t.rotation:0,scale:void 0!==t.scale?t.scale:1,snapToPixel:void 0===t.snapToPixel||t.snapToPixel,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView})}function Al(t){t=t||{},this.g=t.font,this.j=t.rotation,this.s=t.rotateWithView,this.a=t.scale,this.T=t.text,this.l=t.textAlign,this.o=t.textBaseline,this.b=void 0!==t.fill?t.fill:new Rn({color:"#333"}),this.f=void 0!==t.stroke?t.stroke:null,this.c=void 0!==t.offsetX?t.offsetX:0,this.i=void 0!==t.offsetY?t.offsetY:0}function jl(t){t=t?t:{},zh.call(this),this.defaultDataProjection=re("EPSG:4326");var e;t.defaultStyle?e=t.defaultStyle:(e=Rm)||(km=[255,255,255,1],Im=new Rn({color:km}),Dm=[20,2],Om=Fm="pixels",Bm=[64,64],Um="https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png",Gm=.5,$m=new Pl({anchor:Dm,anchorOrigin:Am,anchorXUnits:Fm,anchorYUnits:Om,crossOrigin:"anonymous",rotation:0,scale:Gm,size:Bm,src:Um}),Hm="NO_IMAGE",Xm=new In({color:km,width:1}),Km=new In({color:[51,51,51,1],width:2}),Wm=new Al({font:"bold 16px Helvetica",fill:Im,stroke:Km,scale:.8}),zm=new Fn({fill:Im,image:$m,text:Wm,stroke:Xm,zIndex:0}),e=Rm=[zm]),this.g=e,this.c=void 0===t.extractStyles||t.extractStyles,this.l=void 0===t.writeStyles||t.writeStyles,this.b={},this.i=void 0===t.showPointNames||t.showPointNames}function Nl(t,e){var o,i=[0,0],r="start";if(t.a){o=t.a.md(),null===o&&(o=Bm);var n=t.a.c;isNaN(n)&&(n=Gm),2==o.length&&(i[0]=n*o[0]/2,i[1]=-n*o[1]/2,r="left")}return null!==t.Fa()?(n=t.Fa(),o=n.clone(),o.Yh(n.g||Wm.g),o.Ah(n.a||Wm.a),o.Xh(n.b||Wm.b),o.gi(n.f||Km)):o=Wm.clone(),o.hi(e),o.di(i[0]),o.ei(i[1]),o.ii(r),new Fn({text:o})}function Ll(t,e,o,i,r){return function(){var n=r,s="";if(n&&this.V()&&(n="Point"===this.V().X()),n&&(s=this.get("name"),n=n&&s),t)return n?(n=Nl(t[0],s),t.concat(n)):t;if(e){var p=Rl(e,o,i);return n?(n=Nl(p[0],s),p.concat(n)):p}return n?(n=Nl(o[0],s),o.concat(n)):o}}function Rl(t,e,o){return Array.isArray(t)?t:"string"==typeof t?(!(t in o)&&"#"+t in o&&(t="#"+t),Rl(o[t],e,o)):e}function kl(t){if(t=Ta(t,!1),t=/^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(t))return t=t[1],[parseInt(t.substr(6,2),16),parseInt(t.substr(4,2),16),parseInt(t.substr(2,2),16),parseInt(t.substr(0,2),16)/255]}function Il(t){t=Ta(t,!1);for(var e,o=[],i=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i;e=i.exec(t);)o.push(parseFloat(e[1]),parseFloat(e[2]),e[3]?parseFloat(e[3]):0),t=t.substr(e[0].length);return""!==t?void 0:o}function Dl(t){var e=Ta(t,!1).trim();return t.baseURI?new URL(e,t.baseURI).href:e}function Fl(t){return Qh(t)}function Ol(t,e){return Ua(null,Qm,t,e)}function Bl(t,e){var o=Ua({A:[],si:[]},eb,t,e);if(o){var i,r,n=o.A,o=o.si;for(i=0,r=Math.min(n.length,o.length);i<r;++i)n[4*i+3]=o[i];return o=new th(null),o.aa("XYZM",n),o}}function Ul(t,e){var o=Ua({},_m,t,e),i=Ua(null,ob,t,e);if(i){var r=new th(null);return r.aa("XYZ",i),r.H(o),r}}function Gl(t,e){var o=Ua({},_m,t,e),i=Ua(null,ob,t,e);if(i){var r=new ze(null);return r.aa("XYZ",i,[i.length]),r.H(o),r}}function $l(t,e){var o=Ua([],ab,t,e);if(!o)return null;if(0===o.length)return new Uh(o);var i,r,s,p,a=!0,h=o[0].X();for(s=1,p=o.length;s<p;++s)if(r=o[s],r.X()!=h){a=!1;break}if(a)if("Point"==h){for(i=o[0],a=i.ia,h=i.ka(),s=1,p=o.length;s<p;++s)r=o[s],W(h,r.ka());i=new nh(null),i.aa(a,h),Wl(i,o)}else"LineString"==h?(i=new oh(null),rh(i,o),Wl(i,o)):"Polygon"==h?(i=new sh(null),lh(i,o),Wl(i,o)):"GeometryCollection"==h?i=new Uh(o):n(!1,37);else i=new Uh(o);return i}function Hl(t,e){var o=Ua({},_m,t,e),i=Ua(null,ob,t,e);if(i){var r=new Ie(null);return r.aa("XYZ",i),r.H(o),r}}function Xl(t,e){var o=Ua({},_m,t,e),i=Ua([null],tb,t,e);if(i&&i[0]){var r,n,s=new ze(null),p=i[0],a=[p.length];for(r=1,n=i.length;r<n;++r)W(p,i[r]),a.push(p.length);return s.aa("XYZ",p,a),s.H(o),s}}function Kl(t,e){var o=Ua({},vb,t,e);if(!o)return null;var i="fillStyle"in o?o.fillStyle:Im,r=o.fill;void 0===r||r||(i=null),r="imageStyle"in o?o.imageStyle:$m,r==Hm&&(r=void 0);var n="textStyle"in o?o.textStyle:Wm,s="strokeStyle"in o?o.strokeStyle:Xm,o=o.outline;return void 0===o||o||(s=null),[new Fn({fill:i,image:r,stroke:s,text:n,zIndex:void 0})]}function Wl(t,e){var o,i,r,n,s=e.length,p=Array(e.length),a=Array(e.length);for(r=n=!1,i=0;i<s;++i)o=e[i],p[i]=o.get("extrude"),a[i]=o.get("altitudeMode"),r=r||void 0!==p[i],n=n||a[i];r&&t.set("extrude",p),n&&t.set("altitudeMode",a)}function zl(t,e){Ba(Jm,t,e)}function ql(t,e){var o;for(o=e.firstChild;o;o=o.nextSibling)if(o.nodeType==Node.ELEMENT_NODE){var i=Vl(t,o);if(i)return i}}function Vl(t,e){var o;for(o=e.firstElementChild;o;o=o.nextElementSibling)if(H(Vm,o.namespaceURI)&&"name"==o.localName)return il(o);for(o=e.firstElementChild;o;o=o.nextElementSibling){var i=o.localName;if(H(Vm,o.namespaceURI)&&("Document"==i||"Folder"==i||"Placemark"==i||"kml"==i)&&(i=Vl(t,o)))return i}}function Yl(t,e){var o,i=[];for(o=e.firstChild;o;o=o.nextSibling)o.nodeType==Node.ELEMENT_NODE&&W(i,Zl(t,o));return i}function Zl(t,e){var o,i=[];for(o=e.firstElementChild;o;o=o.nextElementSibling)if(H(Vm,o.namespaceURI)&&"NetworkLink"==o.localName){var r=Ua({},lb,o,[]);i.push(r)}for(o=e.firstElementChild;o;o=o.nextElementSibling)r=o.localName,!H(Vm,o.namespaceURI)||"Document"!=r&&"Folder"!=r&&"kml"!=r||W(i,Zl(t,o));return i}function Jl(t,e){var o,i=Uo(e),i=[255*(4==i.length?i[3]:1),i[2],i[1],i[0]];for(o=0;4>o;++o){var r=parseInt(i[o],10).toString(16);i[o]=1==r.length?"0"+r:r}pl(t,i.join(""))}function _l(t,e,o){t={node:t};var i,r,s=e.X();"GeometryCollection"==s?(i=e.cf(),r=su):"MultiPoint"==s?(i=e.je(),r=Xb):"MultiLineString"==s?(i=e.od(),r=Kb):"MultiPolygon"==s?(i=e.Wd(),r=zb):n(!1,39),$a(t,Rb,r,i,o)}function Ql(t,e,o){$a({node:t},Lb,Wb,[e],o)}function tu(t,e,o){var i={node:t};e.a&&t.setAttribute("id",e.a),t=e.N();var r=e.zc();r&&(r=r.call(e,0))&&(r=Array.isArray(r)?r[0]:r,this.l&&(t.Style=r),(r=r.Fa())&&(t.name=r.Fa())),r=kb[o[o.length-1].node.namespaceURI],t=Fa(t,r),$a(i,Ib,Bv,t,o,r),t=o[0],(e=e.V())&&(e=Va(e,!0,t)),$a(i,Ib,su,[e],o)}function eu(t,e,o){var i=e.ka();t={node:t},t.layout=e.ia,t.stride=e.sa(),$a(t,Db,$b,[i],o)}function ou(t,e,o){e=e.Vd();var i=e.shift();t={node:t},$a(t,Fb,Hb,e,o),$a(t,Fb,qb,[i],o)}function iu(t,e){nl(t,Math.round(e*e*1e6)/1e6)}function ru(t,e,o){return Sa(qm[0],"gx:"+o)}function nu(t,e){return Sa(e[e.length-1].node.namespaceURI,"Placemark")}function su(t,e){if(t)return Sa(e[e.length-1].node.namespaceURI,Sb[t.X()])}function pu(t,e,o,i){this.g=t,this.b=e,this.c=o,this.f=i}function au(t){Wa.call(this),t=t?t:{},this.defaultDataProjection=new Yt({code:"",units:"tile-pixels"}),this.b=t.featureClass?t.featureClass:pu,this.g=t.geometryName?t.geometryName:"geometry",this.a=t.layerName?t.layerName:"layer",this.f=t.layers?t.layers:null}function hu(t,e,o){for(var i=0,r=0,n=t.length;r<n;++r){var s,p,a=t[r];for(s=0,p=a.length;s<p;++s){var h=a[s];e.push(h.x,h.y)}i+=2*s,o.push(i)}}function lu(){zh.call(this),this.defaultDataProjection=re("EPSG:4326")}function uu(t,e){e[e.length-1].Ed[t.getAttribute("k")]=t.getAttribute("v")}function cu(t){return t.getAttributeNS("http://www.w3.org/1999/xlink","href")}function fu(){}function yu(){}function du(t,e,o,i){var r;r=void 0!==i?i:[];for(var n=i=0;n<e;){var s=t[n++];for(r[i++]=t[n++],r[i++]=s,s=2;s<o;++s)r[i++]=t[n++]}r.length=i}function gu(t){t=t?t:{},Wa.call(this),this.defaultDataProjection=re("EPSG:4326"),this.b=t.factor?t.factor:1e5,
-this.a=t.geometryLayout?t.geometryLayout:"XY"}function vu(t,e,o){var i,r=Array(e);for(i=0;i<e;++i)r[i]=0;var n,s;for(n=0,s=t.length;n<s;)for(i=0;i<e;++i,++n){var p=t[n],a=p-r[i];r[i]=p,t[n]=a}return bu(t,o?o:1e5)}function mu(t,e,o){var i,r=Array(e);for(i=0;i<e;++i)r[i]=0;t=wu(t,o?o:1e5);var n;for(o=0,n=t.length;o<n;)for(i=0;i<e;++i,++o)r[i]+=t[o],t[o]=r[i];return t}function bu(t,e){var o,i,r=e?e:1e5;for(o=0,i=t.length;o<i;++o)t[o]=Math.round(t[o]*r);for(r=0,o=t.length;r<o;++r)i=t[r],t[r]=0>i?~(i<<1):i<<1;for(r="",o=0,i=t.length;o<i;++o){for(var n,s=t[o],p="";32<=s;)n=(32|31&s)+63,p+=String.fromCharCode(n),s>>=5;p+=String.fromCharCode(s+63),r+=p}return r}function wu(t,e){var o,i,r=e?e:1e5,n=[],s=0,p=0;for(o=0,i=t.length;o<i;++o){var a=t.charCodeAt(o)-63,s=s|(31&a)<<p;32>a?(n.push(s),p=s=0):p+=5}for(s=0,p=n.length;s<p;++s)o=n[s],n[s]=1&o?~(o>>1):o>>1;for(s=0,p=n.length;s<p;++s)n[s]/=r;return n}function xu(t){t=t?t:{},Wa.call(this),this.defaultDataProjection=re(t.defaultDataProjection?t.defaultDataProjection:"EPSG:4326")}function Su(t,e){var o,i,r,n,s=[];for(r=0,n=t.length;r<n;++r)o=t[r],0<r&&s.pop(),i=0<=o?e[o]:e[~o].slice().reverse(),s.push.apply(s,i);for(o=0,i=s.length;o<i;++o)s[o]=s[o].slice();return s}function Tu(t,e,o,i,r){t=t.geometries;var n,s,p=[];for(n=0,s=t.length;n<s;++n)p[n]=Eu(t[n],e,o,i,r);return p}function Eu(t,e,o,i,r){var n=t.type,s=vw[n];return e="Point"===n||"MultiPoint"===n?s(t,o,i):s(t,e),o=new wa,o.Oa(Va(e,!1,r)),void 0!==t.id&&o.Wb(t.id),t.properties&&o.H(t.properties),o}function Mu(t,e,o){t[0]=t[0]*e[0]+o[0],t[1]=t[1]*e[1]+o[1]}function Cu(t){t=t?t:{},this.i=t.featureType,this.g=t.featureNS,this.b=t.gmlFormat?t.gmlFormat:new al,this.c=t.schemaLocation?t.schemaLocation:"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd",zh.call(this)}function Pu(t,e){for(var o=e.firstChild;o;o=o.nextSibling)if(o.nodeType==Node.ELEMENT_NODE)return Au(t,o)}function Au(t,e){var o={},i=ol(e.getAttribute("numberOfFeatures"));return o.numberOfFeatures=i,Ua(o,mw,e,[],t.b)}function ju(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return Ua({},Sw,t,[])}function Nu(t,e){var o=Sa("http://www.opengis.net/ogc","Filter"),i=Sa("http://www.opengis.net/ogc","FeatureId");o.appendChild(i),i.setAttribute("fid",e),t.appendChild(o)}function Lu(t,e,o){t={node:t};var i=e.b;$a(t,Mw,Da(i.Hb),[i],o),e=e.a,$a(t,Mw,Da(e.Hb),[e],o)}function Ru(t,e){void 0!==e.a&&t.setAttribute("matchCase",e.a.toString()),Iu(t,e.b),Du(t,""+e.g)}function ku(t,e,o){t=Sa("http://www.opengis.net/ogc",t),pl(t,o),e.appendChild(t)}function Iu(t,e){ku("PropertyName",t,e)}function Du(t,e){ku("Literal",t,e)}function Fu(t){t=t?t:{},Wa.call(this),this.b=void 0!==t.splitCollection&&t.splitCollection}function Ou(t){return t=t.Y(),0===t.length?"":t[0]+" "+t[1]}function Bu(t){t=t.Y();for(var e=[],o=0,i=t.length;o<i;++o)e.push(t[o][0]+" "+t[o][1]);return e.join(",")}function Uu(t){var e=[];t=t.Vd();for(var o=0,i=t.length;o<i;++o)e.push("("+Bu(t[o])+")");return e.join(",")}function Gu(t){var e=t.X();return t=(0,Cw[e])(t),e=e.toUpperCase(),0===t.length?e+" EMPTY":e+"("+t+")"}function $u(t){this.a=t,this.b=-1}function Hu(t){var e=t.a.charAt(++t.b),o={position:t.b,value:e};if("("==e)o.type=2;else if(","==e)o.type=5;else if(")"==e)o.type=3;else if("0"<=e&&"9">=e||"."==e||"-"==e){o.type=4;var i,e=t.b,r=!1,n=!1;do"."==i?r=!0:"e"!=i&&"E"!=i||(n=!0),i=t.a.charAt(++t.b);while("0"<=i&&"9">=i||"."==i&&(void 0===r||!r)||!n&&("e"==i||"E"==i)||n&&("-"==i||"+"==i));t=parseFloat(t.a.substring(e,t.b--)),o.value=t}else if("a"<=e&&"z">=e||"A"<=e&&"Z">=e){o.type=1,e=t.b;do i=t.a.charAt(++t.b);while("a"<=i&&"z">=i||"A"<=i&&"Z">=i);t=t.a.substring(e,t.b--).toUpperCase(),o.value=t}else{if(" "==e||"\t"==e||"\r"==e||"\n"==e)return Hu(t);if(""!==e)throw Error("Unexpected character: "+e);o.type=6}return o}function Xu(t){this.a=t}function Ku(t,e){var o=t.b.type==e;return o&&(t.b=Hu(t.a)),o}function Wu(t){var e=t.b;if(Ku(t,1)){var o=e.value;if("GEOMETRYCOLLECTION"==o){t:{if(Ku(t,2)){e=[];do e.push(Wu(t));while(Ku(t,5));if(Ku(t,3)){t=e;break t}}else if(Yu(t)){t=[];break t}throw Error(Zu(t))}return new Uh(t)}var i=Aw[o],e=Pw[o];if(!i||!e)throw Error("Invalid geometry type: "+o);return t=i.call(t),new e(t)}throw Error(Zu(t))}function zu(t){for(var e=[],o=0;2>o;++o){var i=t.b;if(!Ku(t,4))break;e.push(i.value)}if(2==e.length)return e;throw Error(Zu(t))}function qu(t){for(var e=[zu(t)];Ku(t,5);)e.push(zu(t));return e}function Vu(t){for(var e=[t.Bf()];Ku(t,5);)e.push(t.Bf());return e}function Yu(t){var e=1==t.b.type&&"EMPTY"==t.b.value;return e&&(t.b=Hu(t.a)),e}function Zu(t){return"Unexpected `"+t.b.value+"` at position "+t.b.position+" in `"+t.a.a+"`"}function Ju(){this.version=void 0}function _u(t,e){return Ua({},Ww,t,e)}function Qu(t,e){return Ua({},$w,t,e)}function tc(t,e){var o=_u(t,e);if(o){var i=[ol(t.getAttribute("width")),ol(t.getAttribute("height"))];return o.size=i,o}}function ec(t,e){return Ua([],zw,t,e)}function oc(t){t=t?t:{},this.g="http://mapserver.gis.umn.edu/mapserver",this.b=new ll,this.c=t.layers?t.layers:null,zh.call(this)}function ic(){this.g=new yu}function rc(t){var e=il(t).split(" ");if(e&&2==e.length)return t=+e[0],e=+e[1],isNaN(t)||isNaN(e)?void 0:[t,e]}function nc(t){B.call(this),t=t||{},this.a=null,this.c=ae,this.f=void 0,E(this,U(lx),this.Al,this),E(this,U(cx),this.Bl,this),void 0!==t.projection&&this.Vg(re(t.projection)),void 0!==t.trackingOptions&&this.ji(t.trackingOptions),this.ge(void 0!==t.tracking&&t.tracking)}function sc(t,e,o){ye.call(this),this.Sf(t,e?e:0,o)}function pc(t){var e=t.A[t.a]-t.A[0];return t=t.A[t.a+1]-t.A[1],e*e+t*t}function ac(t,e,o){for(var i,r,n,s,p,h=[],l=t(0),u=t(1),c=e(l),f=e(u),y=[u,l],d=[f,c],g=[1,0],v={},m=1e5;0<--m&&0<g.length;)n=g.pop(),l=y.pop(),c=d.pop(),u=n.toString(),u in v||(h.push(c[0],c[1]),v[u]=!0),s=g.pop(),u=y.pop(),f=d.pop(),p=(n+s)/2,i=t(p),r=e(i),a(r[0],r[1],c[0],c[1],f[0],f[1])<o?(h.push(f[0],f[1]),u=s.toString(),v[u]=!0):(g.push(s,p,p,n),d.push(f,r,r,c),y.push(u,i,i,l));return h}function hc(t,e,o,i,r){var n=re("EPSG:4326");return ac(function(i){return[t,e+(o-e)*i]},se(n,i),r)}function lc(t,e,o,i,r){var n=re("EPSG:4326");return ac(function(i){return[e+(o-e)*i,t]},se(n,i),r)}function uc(t){t=t||{},this.c=this.l=null,this.g=this.i=1/0,this.f=this.j=-(1/0),this.C=this.u=1/0,this.G=this.B=-(1/0),this.za=void 0!==t.targetSize?t.targetSize:100,this.S=void 0!==t.maxLines?t.maxLines:100,this.b=[],this.a=[],this.na=void 0!==t.strokeStyle?t.strokeStyle:yx,this.T=this.o=void 0,this.s=null,this.setMap(void 0!==t.map?t.map:null)}function cc(t,e,o,i,r,n,s){var p=s;return e=hc(e,o,i,t.c,r),p=void 0!==t.b[p]?t.b[p]:new th(null),p.aa("XY",e),Ht(p.D(),n)&&(t.b[s++]=p),s}function fc(t,e,o,i,r){var n=r;return e=lc(e,t.f,t.g,t.c,o),n=void 0!==t.a[n]?t.a[n]:new th(null),n.aa("XY",e),Ht(n.D(),i)&&(t.a[r++]=n),r}function yc(t,e,o,i,r){Bi.call(this,t,e),this.o=o,this.g=new Image,null!==i&&(this.g.crossOrigin=i),this.j=null,this.s=r}function dc(t){t.j.forEach(P),t.j=null}function gc(t){t=t?t:{},Zi.call(this,{handleEvent:zt}),this.i=t.formatConstructors?t.formatConstructors:[],this.l=t.projection?re(t.projection):null,this.a=null,this.target=t.target?t.target:null}function vc(t){t=t.dataTransfer.files;var e,o,i;for(e=0,o=t.length;e<o;++e){i=t.item(e);var r=new FileReader;r.addEventListener("load",this.j.bind(this,i)),r.readAsText(i)}}function mc(t){t.stopPropagation(),t.preventDefault(),t.dataTransfer.dropEffect="copy"}function bc(t,e,o,i){L.call(this,t),this.features=o,this.file=e,this.projection=i}function wc(t){t=t?t:{},ur.call(this,{handleDownEvent:Tc,handleDragEvent:xc,handleUpEvent:Sc}),this.o=t.condition?t.condition:pr,this.a=this.i=void 0,this.j=0,this.u=void 0!==t.duration?t.duration:400}function xc(t){if(hr(t)){var e=t.map,o=e.kb(),i=t.pixel;if(t=i[0]-o[0]/2,i=o[1]/2-i[1],o=Math.atan2(i,t),t=Math.sqrt(t*t+i*i),i=e.$(),void 0!==this.i){var r=o-this.i;Ji(e,i,i.Pa()-r)}this.i=o,void 0!==this.a&&(o=this.a*(i.Ma()/t),Qi(e,i,o)),void 0!==this.a&&(this.j=this.a/t),this.a=t}}function Sc(t){if(!hr(t))return!0;t=t.map;var e=t.$();ro(e,-1);var o=this.j-1,i=e.Pa(),i=e.constrainRotation(i,0);Ji(t,e,i,void 0,void 0);var i=e.Ma(),r=this.u,i=e.constrainResolution(i,0,o);return Qi(t,e,i,void 0,r),this.j=0,!1}function Tc(t){return!(!hr(t)||!this.o(t))&&(ro(t.map.$(),1),this.a=this.i=void 0,!0)}function Ec(){return[[-(1/0),-(1/0),1/0,1/0]]}function Mc(t){this.b=Zb(t),this.a={}}function Cc(t,e,o){var r=t.a[i(o)];Pt([r.ba,r.ea,r.da,r.ha],e)||(t.remove(o),t.Da(e,o))}function Pc(t){return t.b.all().map(function(t){return t.value})}function Ac(t,e){return t.b.search({ba:e[0],ea:e[1],da:e[2],ha:e[3]}).map(function(t){return t.value})}function jc(t,e,o,i){return Nc(Ac(t,e),o,i)}function Nc(t,e,o){for(var i,r=0,n=t.length;r<n&&!(i=e.call(o,t[r]));r++);return i}function Lc(t){t=t||{},$s.call(this,{attributions:t.attributions,logo:t.logo,projection:void 0,state:"ready",wrapX:void 0===t.wrapX||t.wrapX}),this.W=o,this.P=t.format,this.Aa=void 0==t.overlaps||t.overlaps,this.Z=t.url,void 0!==t.loader?this.W=t.loader:void 0!==this.Z&&(n(this.P,7),this.W=Ka(this.Z,this.P)),this.ac=void 0!==t.strategy?t.strategy:Ec;var e=void 0===t.useSpatialIndex||t.useSpatialIndex;this.a=e?new Mc:null,this.ra=new Mc,this.i={},this.l={},this.o={},this.s={},this.c=null;var i,r;t.features instanceof Fo?(i=t.features,r=i.a):Array.isArray(t.features)&&(r=t.features),e||void 0!==i||(i=new Fo(r)),void 0!==r&&Ic(this,r),void 0!==i&&Dc(this,i)}function Rc(t,e,o){t.s[e]=[E(o,"change",t.uh,t),E(o,"propertychange",t.uh,t)]}function kc(t,e,o){var i=!0,r=o.a;return void 0!==r?r.toString()in t.l?i=!1:t.l[r.toString()]=o:(n(!(e in t.o),30),t.o[e]=o),i}function Ic(t,e){var o,r,n,s,p=[],a=[],h=[];for(r=0,n=e.length;r<n;r++)s=e[r],o=i(s).toString(),kc(t,o,s)&&a.push(s);for(r=0,n=a.length;r<n;r++){s=a[r],o=i(s).toString(),Rc(t,o,s);var l=s.V();l?(o=l.D(),p.push(o),h.push(s)):t.i[o]=s}for(t.a&&t.a.load(p,h),r=0,n=a.length;r<n;r++)t.b(new Bc(vx,a[r]))}function Dc(t,e){var o=!1;E(t,vx,function(t){o||(o=!0,e.push(t.feature),o=!1)}),E(t,wx,function(t){o||(o=!0,e.remove(t.feature),o=!1)}),E(e,xd,function(t){o||(o=!0,this.cb(t.element),o=!1)},t),E(e,Sd,function(t){o||(o=!0,this.mb(t.element),o=!1)},t),t.c=e}function Fc(t,e,o){t.Kb([e[0],e[1],e[0],e[1]],function(t){if(t.V().jb(e))return o.call(void 0,t)})}function Oc(t,e){for(var o in t.l)if(t.l[o]===e){delete t.l[o];break}}function Bc(t,e){L.call(this,t),this.feature=e}function Uc(t){ur.call(this,{handleDownEvent:Hc,handleEvent:$c,handleUpEvent:Xc}),this.fa=null,this.u=!1,this.ub=t.source?t.source:null,this.Aa=t.features?t.features:null,this.tj=t.snapTolerance?t.snapTolerance:12,this.W=t.type,this.i=Zc(this.W),this.Ka=t.minPoints?t.minPoints:this.i===Tx?3:2,this.oa=t.maxPoints?t.maxPoints:1/0,this.ac=t.finishCondition?t.finishCondition:zt;var e=t.geometryFunction;if(!e)if("Circle"===this.W)e=function(t,e){var o=e?e:new sc([NaN,NaN]);return o.Sf(t[0],Math.sqrt(ct(t[0],t[1]))),o};else{var o,i=this.i;i===xx?o=Ie:i===Sx?o=th:i===Tx&&(o=ze),e=function(t,e){var r=e;return r?i===Tx?r.ma([t[0].concat([t[0][0]])]):r.ma(t):r=new o(t),r}}this.G=e,this.P=this.B=this.a=this.S=this.j=this.o=null,this.Jb=t.clickTolerance?t.clickTolerance*t.clickTolerance:36,this.ra=new $n({source:new Lc({useSpatialIndex:!1,wrapX:!!t.wrapX&&t.wrapX}),style:t.style?t.style:Gc()}),this.La=t.geometryName,this.qj=t.condition?t.condition:sr,this.Le=t.freehand?zt:t.freehandCondition?t.freehandCondition:pr,E(this,U(hg),this.ri,this)}function Gc(){var t=Un();return function(e){return t[e.V().X()]}}function $c(t){this.u=this.i!==xx&&this.Le(t);var e=!this.u;return this.u&&t.type===og&&null!==this.j?(qc(this,t),e=!1):t.type===ig?e=Kc(this,t):t.type===eg&&(e=!1),fr.call(this,t)&&e}function Hc(t){return this.u?(this.fa=t.pixel,this.o||zc(this,t),!0):!!this.qj(t)&&(this.fa=t.pixel,!0)}function Xc(t){var e=this.fa,o=t.pixel,i=e[0]-o[0],e=e[1]-o[1],i=i*i+e*e,e=!0;return(this.u?i>this.Jb:i<=this.Jb)&&(Kc(this,t),this.o?this.u||this.i===Ex?this.ld():Wc(this,t)?this.ac(t)&&this.ld():qc(this,t):(zc(this,t),this.i===xx&&this.ld()),e=!1),e}function Kc(t,e){if(t.o){var o,i=e.coordinate,r=t.j.V();t.i===xx?o=t.a:t.i===Tx?(o=t.a[0],o=o[o.length-1],Wc(t,e)&&(i=t.o.slice())):(o=t.a,o=o[o.length-1]),o[0]=i[0],o[1]=i[1],t.G(t.a,r),t.S&&t.S.V().ma(i),r instanceof ze&&t.i!==Tx?(t.B||(t.B=new wa(new th(null))),r=r.Bg(0),i=t.B.V(),i.aa(r.ia,r.ka())):t.P&&(i=t.B.V(),i.ma(t.P)),Yc(t)}else i=e.coordinate.slice(),t.S?t.S.V().ma(i):(t.S=new wa(new Ie(i)),Yc(t));return!0}function Wc(t,e){var o=!1;if(t.j){var i=!1,r=[t.o];if(t.i===Sx?i=t.a.length>t.Ka:t.i===Tx&&(i=t.a[0].length>t.Ka,r=[t.a[0][0],t.a[0][t.a[0].length-2]]),i)for(var i=e.map,n=0,s=r.length;n<s;n++){var p=r[n],a=i.Ca(p),h=e.pixel,o=h[0]-a[0],a=h[1]-a[1];if(o=Math.sqrt(o*o+a*a)<=(t.u?1:t.tj)){t.o=p;break}}}return o}function zc(t,e){var o=e.coordinate;t.o=o,t.i===xx?t.a=o.slice():t.i===Tx?(t.a=[[o.slice(),o.slice()]],t.P=t.a[0]):(t.a=[o.slice(),o.slice()],t.i===Ex&&(t.P=t.a)),t.P&&(t.B=new wa(new th(t.P))),o=t.G(t.a),t.j=new wa,t.La&&t.j.Dc(t.La),t.j.Oa(o),Yc(t),t.b(new Jc(Mx,t.j))}function qc(t,e){var o,i,r=e.coordinate,n=t.j.V();t.i===Sx?(t.o=r.slice(),i=t.a,i.length>=t.oa&&(t.u?i.pop():o=!0),i.push(r.slice()),t.G(i,n)):t.i===Tx&&(i=t.a[0],i.length>=t.oa&&(t.u?i.pop():o=!0),i.push(r.slice()),o&&(t.o=i[0]),t.G(t.a,n)),Yc(t),o&&t.ld()}function Vc(t){t.o=null;var e=t.j;return e&&(t.j=null,t.S=null,t.B=null,t.ra.ga().clear(!0)),e}function Yc(t){var e=[];t.j&&e.push(t.j),t.B&&e.push(t.B),t.S&&e.push(t.S),t=t.ra.ga(),t.clear(!0),t.Ic(e)}function Zc(t){var e;return"Point"===t||"MultiPoint"===t?e=xx:"LineString"===t||"MultiLineString"===t?e=Sx:"Polygon"===t||"MultiPolygon"===t?e=Tx:"Circle"===t&&(e=Ex),e}function Jc(t,e){L.call(this,t),this.feature=e}function _c(t){this.a=this.j=null,this.B=!1,this.G=this.o=null,t||(t={}),t.extent&&this.i(t.extent),ur.call(this,{handleDownEvent:tf,handleDragEvent:ef,handleEvent:Qc,handleUpEvent:of}),this.u=new $n({source:new Lc({useSpatialIndex:!1,wrapX:!!t.wrapX}),style:t.boxStyle?t.boxStyle:rf(),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.S=new $n({source:new Lc({useSpatialIndex:!1,wrapX:!!t.wrapX}),style:t.pointerStyle?t.pointerStyle:nf(),updateWhileAnimating:!0,updateWhileInteracting:!0})}function Qc(t){if(!(t instanceof Ii))return!0;if(t.type==ig&&!this.C){var e=t.pixel,o=t.map,i=af(this,e,o);i||(i=o.Ja(e)),hf(this,i)}return fr.call(this,t),!1}function tf(t){function e(t){var e=null,o=null;return t[0]==r[0]?e=r[2]:t[0]==r[2]&&(e=r[0]),t[1]==r[1]?o=r[3]:t[1]==r[3]&&(o=r[1]),null!==e&&null!==o?[e,o]:null}var o=t.pixel,i=t.map,r=this.D();return(t=af(this,o,i))&&r?(o=t[0]==r[0]||t[0]==r[2]?t[0]:null,i=t[1]==r[1]||t[1]==r[3]?t[1]:null,null!==o&&null!==i?this.a=sf(e(t)):null!==o?this.a=pf(e([o,r[1]]),e([o,r[3]])):null!==i&&(this.a=pf(e([r[0],i]),e([r[2],i])))):(t=i.Ja(o),this.i([t[0],t[1],t[0],t[1]]),this.a=sf(t)),!0}function ef(t){return this.a&&(t=t.coordinate,this.i(this.a(t)),hf(this,t)),!0}function of(){this.a=null;var t=this.D();return t&&0!==Rt(t)||this.i(null),!1}function rf(){var t=Un();return function(){return t.Polygon}}function nf(){var t=Un();return function(){return t.Point}}function sf(t){return function(e){return dt([t,e])}}function pf(t,e){return t[0]==e[0]?function(o){return dt([t,[o[0],e[1]]])}:t[1]==e[1]?function(o){return dt([t,[e[0],o[1]]])}:null}function af(t,e,o){function i(t,e){return ft(r,t)-ft(r,e)}var r=o.Ja(e),n=t.D();if(n){n=[[[n[0],n[1]],[n[0],n[3]]],[[n[0],n[3]],[n[2],n[3]]],[[n[2],n[3]],[n[2],n[1]]],[[n[2],n[1]],[n[0],n[1]]]],n.sort(i);var n=n[0],s=pt(r,n),p=o.Ca(s);if(10>=Math.sqrt(ct(e,p)))return e=o.Ca(n[0]),o=o.Ca(n[1]),e=ct(p,e),o=ct(p,o),t.B=10>=Math.sqrt(Math.min(e,o)),t.B&&(s=e>o?n[1]:n[0]),s}return null}function hf(t,e){var o=t.G;o?o.V().ma(e):(o=new wa(new Ie(e)),t.G=o,t.S.ga().cb(o))}function lf(t){L.call(this,Px),this.b=t}function uf(t){ur.call(this,{handleDownEvent:vf,handleDragEvent:mf,handleEvent:wf,handleUpEvent:bf}),this.ub=t.condition?t.condition:lr,this.Aa=function(t){return sr(t)&&nr(t)},this.La=t.deleteCondition?t.deleteCondition:this.Aa,this.Ka=this.a=null,this.ra=[0,0],this.B=this.P=!1,this.i=new Mc,this.S=void 0!==t.pixelTolerance?t.pixelTolerance:10,this.o=this.oa=!1,this.j=[],this.G=new $n({source:new Lc({useSpatialIndex:!1,wrapX:!!t.wrapX}),style:t.style?t.style:Tf(),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.fa={Point:this.mm,LineString:this.bh,LinearRing:this.bh,Polygon:this.nm,MultiPoint:this.km,MultiLineString:this.jm,MultiPolygon:this.lm,GeometryCollection:this.im},this.u=t.features,this.u.forEach(this.wf,this),E(this.u,xd,this.gm,this),E(this.u,Sd,this.hm,this),this.W=null}function cf(t,e){t.B||(t.B=!0,t.b(new Ef(Ax,t.u,e)))}function ff(t,e){yf(t,e),t.a&&0===t.u.yc()&&(t.G.ga().mb(t.a),t.a=null),C(e,"change",t.ah,t)}function yf(t,e){var o=t.i,i=[];o.forEach(function(t){e===t.feature&&i.push(t)});for(var r=i.length-1;0<=r;--r)o.remove(i[r])}function df(t,e){var o=t.a;o?o.V().ma(e):(o=new wa(new Ie(e)),t.a=o,t.G.ga().cb(o))}function gf(t,e){return t.index-e.index}function vf(t){if(!this.ub(t))return!1;xf(this,t.pixel,t.map),this.j.length=0,this.B=!1;var e=this.a;if(e){var o=[],e=e.V().Y(),r=dt([e]),r=Ac(this.i,r),n={};r.sort(gf);for(var s=0,p=r.length;s<p;++s){var a=r[s],h=a.pa,l=i(a.feature),u=a.depth;u&&(l+="-"+u.join("-")),n[l]||(n[l]=Array(2)),lt(h[0],e)&&!n[l][0]?(this.j.push([a,0]),n[l][0]=a):lt(h[1],e)&&!n[l][1]?("LineString"!==a.geometry.X()&&"MultiLineString"!==a.geometry.X()||!n[l][0]||0!==n[l][0].index)&&(this.j.push([a,1]),n[l][1]=a):i(h)in this.Ka&&!n[l][0]&&!n[l][1]&&o.push([a,e])}for(o.length&&cf(this,t),t=o.length-1;0<=t;--t)this.$k.apply(this,o[t])}return!!this.a}function mf(t){this.P=!1,cf(this,t),t=t.coordinate;for(var e=0,o=this.j.length;e<o;++e){for(var i=this.j[e],r=i[0],n=r.depth,s=r.geometry,p=s.Y(),a=r.pa,i=i[1];t.length<s.sa();)t.push(0);switch(s.X()){case"Point":p=t,a[0]=a[1]=t;break;case"MultiPoint":p[r.index]=t,a[0]=a[1]=t;break;case"LineString":p[r.index+i]=t,a[i]=t;break;case"MultiLineString":p[n[0]][r.index+i]=t,a[i]=t;break;case"Polygon":p[n[0]][r.index+i]=t,a[i]=t;break;case"MultiPolygon":p[n[1]][n[0]][r.index+i]=t,a[i]=t}r=s,this.o=!0,r.ma(p),this.o=!1}df(this,t)}function bf(t){for(var e,o=this.j.length-1;0<=o;--o)e=this.j[o][0],Cc(this.i,dt(e.pa),e);return this.B&&(this.b(new Ef(jx,this.u,t)),this.B=!1),!1}function wf(t){if(!(t instanceof Ii))return!0;this.W=t;var e;return Qe(t.map.$())[1]||t.type!=ig||this.C||(this.ra=t.pixel,xf(this,t.pixel,t.map)),this.a&&this.La(t)&&(e=!(t.type!=Qd||!this.P)||this.Qh()),t.type==Qd&&(this.P=!1),fr.call(this,t)&&!e}function xf(t,e,o){function r(t,e){return ft(n,t.pa)-ft(n,e.pa)}var n=o.Ja(e),s=o.Ja([e[0]-t.S,e[1]+t.S]),p=o.Ja([e[0]+t.S,e[1]-t.S]),s=dt([s,p]),s=Ac(t.i,s);if(0<s.length){s.sort(r);var p=s[0].pa,a=pt(n,p),h=o.Ca(a);if(Math.sqrt(ct(e,h))<=t.S){for(e=o.Ca(p[0]),o=o.Ca(p[1]),e=ct(h,e),o=ct(h,o),t.oa=Math.sqrt(Math.min(e,o))<=t.S,t.oa&&(a=e>o?p[1]:p[0]),df(t,a),o={},o[i(p)]=!0,e=1,h=s.length;e<h&&(a=s[e].pa,lt(p[0],a[0])&&lt(p[1],a[1])||lt(p[0],a[1])&&lt(p[1],a[0]));++e)o[i(a)]=!0;return void(t.Ka=o)}}t.a&&(t.G.ga().mb(t.a),t.a=null)}function Sf(t,e,o,i,r){jc(t.i,e.D(),function(t){t.geometry===e&&(void 0===i||void 0===t.depth||V(t.depth,i))&&t.index>o&&(t.index+=r)})}function Tf(){var t=Un();return function(){return t.Point}}function Ef(t,e,o){L.call(this,t),this.features=e,this.mapBrowserEvent=o}function Mf(t){if(Zi.call(this,{handleEvent:Cf}),t=t?t:{},this.C=t.condition?t.condition:nr,this.u=t.addCondition?t.addCondition:qt,this.B=t.removeCondition?t.removeCondition:qt,this.G=t.toggleCondition?t.toggleCondition:pr,this.l=!!t.multi&&t.multi,this.j=t.filter?t.filter:zt,this.i=new $n({source:new Lc({useSpatialIndex:!1,features:t.features,wrapX:t.wrapX}),style:t.style?t.style:Pf(),updateWhileAnimating:!0,updateWhileInteracting:!0}),t.layers)if("function"==typeof t.layers)t=t.layers;else{var e=t.layers;t=function(t){return H(e,t)}}else t=zt;this.o=t,this.a={},t=this.i.ga().c,E(t,xd,this.om,this),E(t,Sd,this.rm,this)}function Cf(t){if(!this.C(t))return!0;var e=this.u(t),o=this.B(t),r=this.G(t),n=!e&&!o&&!r,s=t.map,p=this.i.ga().c,a=[],h=[];if(n){for(g(this.a),s.Sd(t.pixel,function(t,e){if(this.j(t,e)){h.push(t);var o=i(t);return this.a[o]=e,!this.l}},this,this.o),n=p.yc()-1;0<=n;--n){var s=p.item(n),l=h.indexOf(s);-1<l?h.splice(l,1):(p.remove(s),a.push(s))}0!==h.length&&p.qf(h)}else{for(s.Sd(t.pixel,function(t,n){if(this.j(t,n)){if(!e&&!r||H(p.a,t))(o||r)&&H(p.a,t)&&(a.push(t),s=i(t),delete this.a[s]);else{h.push(t);var s=i(t);this.a[s]=n}return!this.l}},this,this.o),n=a.length-1;0<=n;--n)p.remove(a[n]);p.qf(h)}return(0<h.length||0<a.length)&&this.b(new Af(Nx,h,a,t)),rr(t)}function Pf(){var t=Un();return W(t.Polygon,t.LineString),W(t.GeometryCollection,t.LineString),function(e){return e.V()?t[e.V().X()]:null}}function Af(t,e,o,i){L.call(this,t),this.selected=e,this.deselected=o,this.mapBrowserEvent=i}function jf(t){ur.call(this,{handleEvent:Nf,handleDownEvent:zt,handleUpEvent:Lf}),t=t?t:{},this.o=t.source?t.source:null,this.ra=void 0===t.vertex||t.vertex,this.P=void 0===t.edge||t.edge,this.j=t.features?t.features:null,this.oa=[],this.B={},this.G={},this.W={},this.u={},this.S=null,this.i=void 0!==t.pixelTolerance?t.pixelTolerance:10,this.Ka=Rf.bind(this),this.a=new Mc,this.fa={Point:this.xm,LineString:this.fh,LinearRing:this.fh,Polygon:this.ym,MultiPoint:this.vm,MultiLineString:this.um,MultiPolygon:this.wm,GeometryCollection:this.tm}}function Nf(t){var e,o,i=t.pixel,r=t.coordinate;e=t.map;var n=e.Ja([i[0]-this.i,i[1]+this.i]);o=e.Ja([i[0]+this.i,i[1]-this.i]);var s,n=dt([n,o]),p=Ac(this.a,n),n=!1,a=null;return o=null,0<p.length&&(this.S=r,p.sort(this.Ka),p=p[0].pa,this.ra&&!this.P?(r=e.Ca(p[0]),s=e.Ca(p[1]),r=ct(i,r),i=ct(i,s),s=Math.sqrt(Math.min(r,i)),(s=s<=this.i)&&(n=!0,a=r>i?p[1]:p[0],o=e.Ca(a))):this.P&&(a=pt(r,p),o=e.Ca(a),Math.sqrt(ct(i,o))<=this.i&&(n=!0,this.ra&&(r=e.Ca(p[0]),s=e.Ca(p[1]),r=ct(o,r),i=ct(o,s),s=Math.sqrt(Math.min(r,i)),s=s<=this.i)))&&(a=r>i?p[1]:p[0],o=e.Ca(a)),n&&(o=[Math.round(o[0]),Math.round(o[1])])),e=a,n&&(t.coordinate=e.slice(0,2),t.pixel=o),fr.call(this,t)}function Lf(){var t=v(this.u);return t.length&&(t.forEach(this.pi,this),this.u={}),!1}function Rf(t,e){return ft(this.S,t.pa)-ft(this.S,e.pa)}function kf(t){if(ur.call(this,{handleDownEvent:If,handleDragEvent:Ff,handleMoveEvent:Of,handleUpEvent:Df}),this.o=void 0,this.a=null,this.i=void 0!==t.features?t.features:null,t.layers)if("function"==typeof t.layers)t=t.layers;else{var e=t.layers;t=function(t){return H(e,t)}}else t=zt;this.u=t,this.j=null}function If(t){return this.j=Bf(this,t.pixel,t.map),!(this.a||!this.j)&&(this.a=t.coordinate,Of.call(this,t),this.b(new Uf(Lx,this.i,t.coordinate)),!0)}function Df(t){return!!this.a&&(this.a=null,Of.call(this,t),this.b(new Uf(kx,this.i,t.coordinate)),!0)}function Ff(t){if(this.a){t=t.coordinate;var e=t[0]-this.a[0],o=t[1]-this.a[1];if(this.i)this.i.forEach(function(t){var i=t.V();i.Pc(e,o),t.Oa(i)});else if(this.j){var i=this.j.V();i.Pc(e,o),this.j.Oa(i)}this.a=t,this.b(new Uf(Rx,this.i,t))}}function Of(t){var e=t.map.uc();Bf(this,t.pixel,t.map)?(this.o=e.style.cursor,e.style.cursor=this.a?"-webkit-grabbing":"-webkit-grab",e.style.cursor=this.a?"grabbing":"grab"):(e.style.cursor=void 0!==this.o?this.o:"",this.o=void 0)}function Bf(t,e,o){var i=null;return e=o.Sd(e,function(t){return t},t,t.u),t.i&&H(t.i.a,e)&&(i=e),i}function Uf(t,e,o){L.call(this,t),this.features=e,this.coordinate=o}function Gf(t){t=t?t:{};var e=hd({},t);delete e.gradient,delete e.radius,delete e.blur,delete e.shadow,delete e.weight,$n.call(this,e),this.f=null,this.W=void 0!==t.shadow?t.shadow:250,this.P=void 0,this.c=null,E(this,U(Fx),this.zk,this),this.$h(t.gradient?t.gradient:Ix),this.Th(void 0!==t.blur?t.blur:15),this.ih(void 0!==t.radius?t.radius:8),E(this,U(Dx),this.lf,this),E(this,U(Ox),this.lf,this),this.lf();var o,i=t.weight?t.weight:"weight";o="string"==typeof i?function(t){return t.get(i)}:i,this.l(function(t){t=o(t),t=void 0!==t?s(t,0,1):1;var e=255*t|0,i=this.c[e];return i||(i=[new Fn({image:new Pl({opacity:t,src:this.P})})],this.c[e]=i),i}.bind(this)),this.set("renderOrder",null),E(this,"render",this.Qk,this)}function $f(t,e,o,r){function n(){delete window[p],s.parentNode.removeChild(s)}var s=document.createElement("script"),p="olc_"+i(e);s.async=!0,s.src=t+(-1==t.indexOf("?")?"?":"&")+(r||"callback")+"="+p;var a=setTimeout(function(){n(),o&&o()},1e4);window[p]=function(t){clearTimeout(a),n(),e(t)},document.getElementsByTagName("head")[0].appendChild(s)}function Hf(t,e,o,i,r,n,p,a,h,l,u){if(Bi.call(this,r,0),this.G=void 0!==u&&u,this.B=p,this.C=a,this.u=null,this.c=e,this.o=i,this.s=n?n:r,this.g=[],this.Xc=null,this.j=0,n=i.Ia(this.s),a=this.o.D(),r=this.c.D(),n=a?Bt(n,a):n,0===Rt(n))this.state=4;else if((a=t.D())&&(r=r?Bt(r,a):a),i=i.Ga(this.s[0]),i=Is(t,o,Dt(n),i),!isFinite(i)||0>=i)this.state=4;else if(this.T=new Os(t,o,n,r,i*(void 0!==l?l:.5)),0===this.T.f.length)this.state=4;else if(this.j=e.wc(i),o=Us(this.T),r&&(t.a?(o[1]=s(o[1],r[1],r[3]),o[3]=s(o[3],r[1],r[3])):o=Bt(o,r)),Rt(o)){for(t=Po(e,o,this.j),e=t.ba;e<=t.da;e++)for(o=t.ea;o<=t.ha;o++)(l=h(this.j,e,o,p))&&this.g.push(l);0===this.g.length&&(this.state=4)}else this.state=4}function Xf(t,e){var o=/\{z\}/g,i=/\{x\}/g,r=/\{y\}/g,s=/\{-y\}/g;return function(p){if(p)return t.replace(o,p[0].toString()).replace(i,p[1].toString()).replace(r,function(){return(-p[2]-1).toString()}).replace(s,function(){var t=e.a?e.a[p[0]]:null;return n(t,55),(t.ha-t.ea+1+p[2]).toString()})}}function Kf(t,e){for(var o=t.length,i=Array(o),r=0;r<o;++r)i[r]=Xf(t[r],e);return Wf(i)}function Wf(t){return 1===t.length?t[0]:function(e,o,i){if(e)return t[u((e[1]<<e[0])+e[2],t.length)](e,o,i)}}function zf(){}function qf(t){var e=[],o=/\{([a-z])-([a-z])\}/.exec(t);if(o){var i,r=o[2].charCodeAt(0);for(i=o[1].charCodeAt(0);i<=r;++i)e.push(t.replace(o[0],String.fromCharCode(i)));return e}if(o=o=/\{(\d+)-(\d+)\}/.exec(t)){for(r=parseInt(o[2],10),i=parseInt(o[1],10);i<=r;i++)e.push(t.replace(o[0],i.toString()));return e}return e.push(t),e}function Vf(t){Yp.call(this),this.c=void 0!==t?t:2048}function Yf(t){return t.f>t.c}function Zf(t){$s.call(this,{attributions:t.attributions,extent:t.extent,logo:t.logo,projection:t.projection,state:t.state,wrapX:t.wrapX}),this.fa=void 0!==t.opaque&&t.opaque,this.oa=void 0!==t.tilePixelRatio?t.tilePixelRatio:1,this.tileGrid=void 0!==t.tileGrid?t.tileGrid:null,this.a=new Vf(t.cacheSize),this.l=[0,0],this.ec=""}function Jf(t,e,o,i,r){if(e=t.qd(e),!e)return!1;for(var n,s,p=!0,a=i.ba;a<=i.da;++a)for(var h=i.ea;h<=i.ha;++h)n=t.Fb(o,a,h),s=!1,e.b.hasOwnProperty(n)&&(n=e.get(n),(s=n.U()===ag)&&(s=!1!==r(n))),s||(p=!1);return p}function _f(t,e){t.ec!==e&&(t.ec=e,t.v())}function Qf(t,e,o){var i=void 0!==o?o:t.f;if(o=t.pb(i),t.G&&i.g){var r=e;e=r[0],t=Ao(o,r),i=Io(i),bt(i,t)?e=r:(r=$t(i),t[0]+=r*Math.ceil((i[0]-t[0])/r),e=o.Zd(t,e))}if(r=e[0],i=e[1],t=e[2],o.minZoom>r||r>o.maxZoom)o=!1;else{var n=o.D();o=!(o=n?Po(o,n,r):o.a?o.a[r]:null)||yo(o,i,t)}return o?e:null}function ty(t,e){L.call(this,t),this.tile=e}function ey(t){Zf.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,extent:t.extent,logo:t.logo,opaque:t.opaque,projection:t.projection,state:t.state,tileGrid:t.tileGrid,tilePixelRatio:t.tilePixelRatio,wrapX:t.wrapX}),this.tileLoadFunction=t.tileLoadFunction,this.tileUrlFunction=this.sc?this.sc.bind(this):zf,this.urls=null,t.urls?this.Ua(t.urls):t.url&&this.Ya(t.url),t.tileUrlFunction&&this.Ta(t.tileUrlFunction)}function oy(t){ey.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,extent:t.extent,logo:t.logo,opaque:t.opaque,projection:t.projection,state:t.state,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction?t.tileLoadFunction:ny,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:t.wrapX}),this.crossOrigin=void 0!==t.crossOrigin?t.crossOrigin:null,this.tileClass=void 0!==t.tileClass?t.tileClass:yc,this.i={},this.s={},this.ra=t.reprojectionErrorThreshold,this.B=!1}function iy(t,e,o,i,r,n,s){return e=[e,o,i],r=(o=Qf(t,e,n))?t.tileUrlFunction(o,r,n):void 0,r=new t.tileClass(e,void 0!==r?0:4,void 0!==r?r:"",t.crossOrigin,t.tileLoadFunction),r.key=s,E(r,"change",t.rh,t),r}function ry(t,e,o,i,r,n){var s,p=t.Fb(e,o,i),a=t.ec;if(t.a.b.hasOwnProperty(p)){if(s=t.a.get(p),s.key!=a){var h=s;if(s=iy(t,e,o,i,r,n,a),0==h.U()?s.a=h.a:s.a=h,s.a){e=s.a,o=s;do{if(e.U()==ag){e.a=null;break}1==e.U()?o=e:0==e.U()?o.a=e.a:o=e,e=o.a}while(e)}t.a.replace(p,s)}}else s=iy(t,e,o,i,r,n,a),t.a.set(p,s);return s}function ny(t,e){t.qb().src=e}function sy(t){oy.call(this,{cacheSize:t.cacheSize,crossOrigin:"anonymous",opaque:!0,projection:re("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX}),this.C=void 0!==t.culture?t.culture:"en-us",this.u=void 0!==t.maxZoom?t.maxZoom:-1,this.c=t.key,this.o=t.imagerySet,$f("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+this.o+"?uriScheme=https&include=ImageryProviders&key="+this.c,this.Z.bind(this),void 0,"jsonp")}function py(t){t=t||{};var e=void 0!==t.projection?t.projection:"EPSG:3857",o=void 0!==t.tileGrid?t.tileGrid:Ro({extent:Io(e),maxZoom:t.maxZoom,minZoom:t.minZoom,tileSize:t.tileSize});oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,opaque:t.opaque,projection:e,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:o,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:t.tileUrlFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX})}function ay(t){this.u=t.account,this.C=t.map||"",this.c=t.config||{},this.o={},py.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,maxZoom:void 0!==t.maxZoom?t.maxZoom:18,minZoom:t.minZoom,projection:t.projection,state:"loading",wrapX:t.wrapX}),hy(this)}function hy(t){var e=JSON.stringify(t.c);if(t.o[e])ly(t,t.o[e]);else{var o="https://"+t.u+".cartodb.com/api/v1/map";t.C&&(o+="/named/"+t.C);var i=new XMLHttpRequest;i.addEventListener("load",t.Bk.bind(t,e)),i.addEventListener("error",t.Ak.bind(t)),i.open("POST",o),i.setRequestHeader("Content-type","application/json"),i.send(JSON.stringify(t.c))}}function ly(t,e){t.Ya("https://"+e.cdn_url.https+"/"+t.u+"/api/v1/map/"+e.layergroupid+"/{z}/{x}/{y}.png")}function uy(t){Lc.call(this,{attributions:t.attributions,extent:t.extent,logo:t.logo,projection:t.projection,wrapX:t.wrapX}),this.B=void 0,this.fa=void 0!==t.distance?t.distance:20,this.C=[],this.oa=t.geometryFunction||function(t){return t=t.V(),n(t instanceof Ie,10),t},this.u=t.source,this.u.I("change",uy.prototype.La,this)}function cy(t){if(void 0!==t.B){t.C.length=0;for(var e=Tt(),o=t.fa*t.B,r=t.u.oe(),n={},s=0,p=r.length;s<p;s++){var a=r[s];i(a).toString()in n||!(a=t.oa(a))||(a=a.Y(),Mt(a,e),gt(e,o,e),a=t.u.bf(e),a=a.filter(function(t){return t=i(t).toString(),!(t in n)&&(n[t]=!0)}),t.C.push(fy(t,a)))}}}function fy(t,e){for(var o=[0,0],i=e.length-1;0<=i;--i){var r=t.oa(e[i]);r?st(o,r.Y()):e.splice(i,1)}return i=1/e.length,o[0]*=i,o[1]*=i,o=new wa(new Ie(o)),o.set("features",e),o}function yy(t,e){var o=[];Object.keys(e).forEach(function(t){null!==e[t]&&void 0!==e[t]&&o.push(t+"="+encodeURIComponent(e[t]))});var i=o.join("&");return t=t.replace(/[?&]$/,""),t=-1===t.indexOf("?")?t+"?":t+"&",t+i}function dy(t){t=t||{},Ks.call(this,{attributions:t.attributions,logo:t.logo,projection:t.projection,resolutions:t.resolutions}),this.Z=void 0!==t.crossOrigin?t.crossOrigin:null,this.i=t.url,this.l=void 0!==t.imageLoadFunction?t.imageLoadFunction:zs,this.u=t.params||{},this.c=null,this.s=[0,0],this.P=0,this.B=void 0!==t.ratio?t.ratio:1.5}function gy(t){Ks.call(this,{projection:t.projection,resolutions:t.resolutions}),this.Z=void 0!==t.crossOrigin?t.crossOrigin:null,this.s=void 0!==t.displayDpi?t.displayDpi:96,
-this.l=t.params||{},this.P=t.url,this.c=void 0!==t.imageLoadFunction?t.imageLoadFunction:zs,this.fa=void 0===t.hidpi||t.hidpi,this.oa=void 0!==t.metersPerUnit?t.metersPerUnit:1,this.u=void 0!==t.ratio?t.ratio:1,this.Aa=void 0!==t.useOverlay&&t.useOverlay,this.i=null,this.B=0}function vy(t){var e=t.imageExtent,o=void 0!==t.crossOrigin?t.crossOrigin:null,i=void 0!==t.imageLoadFunction?t.imageLoadFunction:zs;Ks.call(this,{attributions:t.attributions,logo:t.logo,projection:re(t.projection)}),this.c=new Pn(e,(void 0),1,this.j,t.url,o,i),this.i=t.imageSize?t.imageSize:null,E(this.c,"change",this.o,this)}function my(t){t=t||{},Ks.call(this,{attributions:t.attributions,logo:t.logo,projection:t.projection,resolutions:t.resolutions}),this.oa=void 0!==t.crossOrigin?t.crossOrigin:null,this.l=t.url,this.B=void 0!==t.imageLoadFunction?t.imageLoadFunction:zs,this.i=t.params||{},this.u=!0,wy(this),this.fa=t.serverType,this.Aa=void 0===t.hidpi||t.hidpi,this.c=null,this.P=[0,0],this.Z=0,this.s=void 0!==t.ratio?t.ratio:1.5}function by(t,e,o,i,r,s){if(n(void 0!==t.l,9),s[t.u?"CRS":"SRS"]=r.eb,"STYLES"in t.i||(s.STYLES=""),1!=i)switch(t.fa){case"geoserver":i=90*i+.5|0,s.FORMAT_OPTIONS="FORMAT_OPTIONS"in s?s.FORMAT_OPTIONS+(";dpi:"+i):"dpi:"+i;break;case"mapserver":s.MAP_RESOLUTION=90*i;break;case"carmentaserver":case"qgis":s.DPI=90*i;break;default:n(!1,8)}s.WIDTH=o[0],s.HEIGHT=o[1],o=r.b;var p;return p=t.u&&"ne"==o.substr(0,2)?[e[1],e[0],e[3],e[2]]:e,s.BBOX=p.join(","),yy(t.l,s)}function wy(t){t.u=0<=nt(t.i.VERSION||"1.3.0")}function xy(t){t=t||{};var e;e=void 0!==t.attributions?t.attributions:[Gx],py.call(this,{attributions:e,cacheSize:t.cacheSize,crossOrigin:void 0!==t.crossOrigin?t.crossOrigin:"anonymous",opaque:void 0===t.opaque||t.opaque,maxZoom:void 0!==t.maxZoom?t.maxZoom:19,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileLoadFunction:t.tileLoadFunction,url:void 0!==t.url?t.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:t.wrapX})}function Sy(t){this.B=null,this.Aa=void 0!==t.operationType?t.operationType:"pixel",this.La=void 0!==t.threads?t.threads:1,this.c=My(t.sources);for(var e=0,o=this.c.length;e<o;++e)E(this.c[e],"change",this.v,this);this.i=Xo(),this.fa=new zi(function(){return 1},this.v.bind(this));for(var e=Ey(this.c),o={},r=0,n=e.length;r<n;++r)o[i(e[r].layer)]=e[r];this.l=this.s=null,this.Z={animate:!1,attributions:{},coordinateToPixelTransform:sn(),extent:null,focus:null,index:0,layerStates:o,layerStatesArray:e,logos:{},pixelRatio:1,pixelToCoordinateTransform:sn(),postRenderFunctions:[],size:[0,0],skippedFeatureUids:{},tileQueue:this.fa,time:Date.now(),usedTiles:{},viewState:{rotation:0},viewHints:[],wantedTiles:{}},Ks.call(this,{}),void 0!==t.operation&&this.u(t.operation,t.lib)}function Ty(t,e,o){var i=t.s;return!i||t.g!==i.Mo||o!==i.resolution||!Pt(e,i.extent)}function Ey(t){return t.map(function(t){return Vr(t.a)})}function My(t){for(var e=t.length,o=Array(e),i=0;i<e;++i){var r=i,n=t[i],s=null;n instanceof Zf?(n=new En({source:n}),s=new _s(n)):n instanceof Ks&&(n=new Tn({source:n}),s=new Js(n)),o[r]=s}return o}function Cy(t,e,o){L.call(this,t),this.extent=e.extent,this.resolution=e.viewState.resolution/e.pixelRatio,this.data=o}function Py(t){var e=t.layer.indexOf("-"),e=zx[-1==e?t.layer:t.layer.slice(0,e)],o=Wx[t.layer];py.call(this,{attributions:Kx,cacheSize:t.cacheSize,crossOrigin:"anonymous",maxZoom:void 0!=t.maxZoom?t.maxZoom:e.maxZoom,minZoom:void 0!=t.minZoom?t.minZoom:e.minZoom,opaque:o.opaque,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileLoadFunction:t.tileLoadFunction,url:void 0!==t.url?t.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+t.layer+"/{z}/{x}/{y}."+o.wb})}function Ay(t){t=t||{},oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX}),this.c=t.params||{},this.o=Tt(),_f(this,jy(this))}function jy(t){var e,o=0,i=[];for(e in t.c)i[o++]=e+"-"+t.c[e];return i.join("/")}function Ny(t){Zf.call(this,{opaque:!1,projection:t.projection,tileGrid:t.tileGrid,wrapX:void 0===t.wrapX||t.wrapX})}function Ly(t,e,o){Bi.call(this,t,ag),this.j=e,this.c=o,this.g=null}function Ry(t){if(this.c=null,oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,projection:re("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX}),t.jsonp)$f(t.url,this.oh.bind(this),this.me.bind(this));else{var e=new XMLHttpRequest;e.addEventListener("load",this.bn.bind(this)),e.addEventListener("error",this.an.bind(this)),e.open("GET",t.url),e.send()}}function ky(t){if(Zf.call(this,{projection:re("EPSG:3857"),state:"loading"}),this.s=void 0===t.preemptive||t.preemptive,this.o=zf,this.i=void 0,this.c=t.jsonp||!1,t.url)if(this.c)$f(t.url,this.zf.bind(this),this.ne.bind(this));else{var e=new XMLHttpRequest;e.addEventListener("load",this.fn.bind(this)),e.addEventListener("error",this.en.bind(this)),e.open("GET",t.url),e.send()}else t.tileJSON?this.zf(t.tileJSON):n(!1,51)}function Iy(t,e,o,i,r,n){Bi.call(this,t,e),this.s=o,this.g=i,this.u=r,this.c=this.o=this.j=null,this.T=n}function Dy(t,e,o,i,r){0==t.state&&!0===r?(M(t,"change",function(){o.call(i,this.getData(e))},t),Fy(t)):!0===r?setTimeout(function(){o.call(i,this.getData(e))}.bind(t),0):o.call(i,t.getData(e))}function Fy(t){if(0==t.state)if(t.state=1,t.T)$f(t.s,t.ph.bind(t),t.$d.bind(t));else{var e=new XMLHttpRequest;e.addEventListener("load",t.dn.bind(t)),e.addEventListener("error",t.cn.bind(t)),e.open("GET",t.s),e.send()}}function Oy(t){t=t||{};var e=t.params||{};oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,opaque:!("TRANSPARENT"in e?e.TRANSPARENT:1),projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX}),this.u=void 0!==t.gutter?t.gutter:0,this.c=e,this.o=!0,this.C=t.serverType,this.W=void 0===t.hidpi||t.hidpi,this.P="",Uy(this),this.Z=Tt(),$y(this),_f(this,Gy(this))}function By(t,e,o,i,r,s,p){var a=t.urls;if(a){if(p.WIDTH=o[0],p.HEIGHT=o[1],p[t.o?"CRS":"SRS"]=s.eb,"STYLES"in t.c||(p.STYLES=""),1!=r)switch(t.C){case"geoserver":o=90*r+.5|0,p.FORMAT_OPTIONS="FORMAT_OPTIONS"in p?p.FORMAT_OPTIONS+(";dpi:"+o):"dpi:"+o;break;case"mapserver":p.MAP_RESOLUTION=90*r;break;case"carmentaserver":case"qgis":p.DPI=90*r;break;default:n(!1,52)}return s=s.b,t.o&&"ne"==s.substr(0,2)&&(t=i[0],i[0]=i[1],i[1]=t,t=i[2],i[2]=i[3],i[3]=t),p.BBOX=i.join(","),yy(1==a.length?a[0]:a[u((e[1]<<e[0])+e[2],a.length)],p)}}function Uy(t){var e=0,o=[];if(t.urls){var i,r;for(i=0,r=t.urls.length;i<r;++i)o[e++]=t.urls[i]}t.P=o.join("#")}function Gy(t){var e,o=0,i=[];for(e in t.c)i[o++]=e+"-"+t.c[e];return i.join("/")}function $y(t){t.o=0<=nt(t.c.VERSION||"1.3.0")}function Hy(t,e,o,i,r){Bi.call(this,t,e),this.g=Xo(),this.j=i,this.c=null,this.f={jd:!1,Qf:null,Rh:-1,Rf:-1,Ad:null,li:[]},this.T=r,this.o=o}function Xy(t){ey.call(this,{attributions:t.attributions,cacheSize:void 0!==t.cacheSize?t.cacheSize:128,extent:t.extent,logo:t.logo,opaque:!1,projection:t.projection,state:t.state,tileGrid:t.tileGrid,tileLoadFunction:t.tileLoadFunction?t.tileLoadFunction:Ky,tileUrlFunction:t.tileUrlFunction,tilePixelRatio:t.tilePixelRatio,url:t.url,urls:t.urls,wrapX:void 0===t.wrapX||t.wrapX}),this.c=t.format?t.format:null,this.i=void 0==t.overlaps||t.overlaps,this.tileClass=t.tileClass?t.tileClass:Hy}function Ky(t,e){t.bi(Xa(e,t.j))}function Wy(t){this.l=t.matrixIds,To.call(this,{extent:t.extent,origin:t.origin,origins:t.origins,resolutions:t.resolutions,tileSize:t.tileSize,tileSizes:t.tileSizes,sizes:t.sizes})}function zy(t,e){var o,i=[],r=[],n=[],s=[],p=[];o=re(t.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var a=o.dc(),h="ne"==o.b.substr(0,2);return t.TileMatrix.sort(function(t,e){return e.ScaleDenominator-t.ScaleDenominator}),t.TileMatrix.forEach(function(t){r.push(t.Identifier);var e=28e-5*t.ScaleDenominator/a,o=t.TileWidth,l=t.TileHeight;h?n.push([t.TopLeftCorner[1],t.TopLeftCorner[0]]):n.push(t.TopLeftCorner),i.push(e),s.push(o==l?o:[o,l]),p.push([t.MatrixWidth,-t.MatrixHeight])}),new Wy({extent:e,origins:n,resolutions:i,matrixIds:r,tileSizes:s,sizes:p})}function qy(t){function e(t){return t=i==qx?yy(t,n):t.replace(/\{(\w+?)\}/g,function(t,e){return e.toLowerCase()in n?n[e.toLowerCase()]:t}),function(e){if(e){var o={TileMatrix:r.l[e[0]],TileCol:e[1],TileRow:-e[2]-1};return hd(o,s),e=t,e=i==qx?yy(e,o):e.replace(/\{(\w+?)\}/g,function(t,e){return o[e]})}}}this.Z=void 0!==t.version?t.version:"1.0.0",this.u=void 0!==t.format?t.format:"image/jpeg",this.c=void 0!==t.dimensions?t.dimensions:{},this.C=t.layer,this.o=t.matrixSet,this.P=t.style;var o=t.urls;void 0===o&&void 0!==t.url&&(o=qf(t.url));var i=this.W=void 0!==t.requestEncoding?t.requestEncoding:qx,r=t.tileGrid,n={layer:this.C,style:this.P,tilematrixset:this.o};i==qx&&hd(n,{Service:"WMTS",Request:"GetTile",Version:this.Z,Format:this.u});var s=this.c,p=o&&0<o.length?Wf(o.map(e)):zf;oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,projection:t.projection,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:t.tileClass,tileGrid:r,tileLoadFunction:t.tileLoadFunction,tilePixelRatio:t.tilePixelRatio,tileUrlFunction:p,urls:o,wrapX:void 0!==t.wrapX&&t.wrapX}),_f(this,Vy(this))}function Vy(t){var e,o=0,i=[];for(e in t.c)i[o++]=e+"-"+t.c[e];return i.join("/")}function Yy(t){t=t||{};var e=t.size,o=e[0],i=e[1],r=[],s=256;switch(void 0!==t.tierSizeCalculation?t.tierSizeCalculation:Vx){case Vx:for(;o>s||i>s;)r.push([Math.ceil(o/s),Math.ceil(i/s)]),s+=s;break;case Yx:for(;o>s||i>s;)r.push([Math.ceil(o/s),Math.ceil(i/s)]),o>>=1,i>>=1;break;default:n(!1,53)}r.push([1,1]),r.reverse();for(var s=[1],p=[0],i=1,o=r.length;i<o;i++)s.push(1<<i),p.push(r[i-1][0]*r[i-1][1]+p[i-1]);s.reverse();var e=[0,-e[1],e[0],0],e=new To({extent:e,origin:Ut(e),resolutions:s}),a=t.url;oy.call(this,{attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,logo:t.logo,reprojectionErrorThreshold:t.reprojectionErrorThreshold,tileClass:Zy,tileGrid:e,tileUrlFunction:function(t){if(t){var e=t[0],o=t[1];return t=-t[2]-1,a+"TileGroup"+((o+t*r[e][0]+p[e])/256|0)+"/"+e+"-"+o+"-"+t+".jpg"}}})}function Zy(t,e,o,i,r){yc.call(this,t,e,o,i,r),this.c=null}function Jy(t,e){this.b=e,this.a=[{x:0,y:0,width:t,height:t}],this.f={},this.g=Xo(t,t),this.c=this.g.canvas}function _y(t,e,o,i){e=[e,1],0<o.width&&0<o.height&&e.push(o),0<i.width&&0<i.height&&e.push(i),t.a.splice.apply(t.a,e)}function Qy(t){t=t||{},this.a=void 0!==t.initialSize?t.initialSize:256,this.g=void 0!==t.maxSize?t.maxSize:void 0!==id?id:2048,this.b=void 0!==t.space?t.space:1,this.c=[new Jy(this.a,this.b)],this.f=this.a,this.i=[new Jy(this.f,this.b)]}function td(t,e,o,i,r,n,s){var p,a,h,l=e?t.i:t.c;for(a=0,h=l.length;a<h;++a){if(p=l[a],p=p.add(o,i,r,n,s))return p;p||a!==h-1||(e?(p=Math.min(2*t.f,t.g),t.f=p):(p=Math.min(2*t.a,t.g),t.a=p),p=new Jy(p,t.b),l.push(p),++h)}return null}function ed(t){this.B=this.C=this.i=null,this.j=void 0!==t.fill?t.fill:null,this.za=[0,0],this.b=t.points,this.g=void 0!==t.radius?t.radius:t.radius1,this.f=void 0!==t.radius2?t.radius2:this.g,this.s=void 0!==t.angle?t.angle:0,this.a=void 0!==t.stroke?t.stroke:null,this.na=this.P=this.G=null;var e,o=this.S=t.atlasManager,i="",r="",n=0,s=null,p=0;this.a&&(e=Ho(this.a.a),p=this.a.f,void 0===p&&(p=1),s=this.a.g,Gd||(s=null),r=this.a.i,void 0===r&&(r="round"),i=this.a.c,void 0===i&&(i="round"),n=this.a.j,void 0===n&&(n=10));var a=2*(this.g+p)+1,i={strokeStyle:e,Dd:p,size:a,lineCap:i,lineDash:s,lineJoin:r,miterLimit:n};if(void 0===o){var h=Xo(a,a);this.C=h.canvas,o=a=this.C.width,this.yh(i,h,0,0),this.j?this.B=this.C:(h=Xo(i.size,i.size),this.B=h.canvas,this.xh(i,h,0,0))}else a=Math.round(a),(r=!this.j)&&(h=this.xh.bind(this,i)),n=this.a?Dn(this.a):"-",s=this.j?kn(this.j):"-",this.i&&n==this.i[1]&&s==this.i[2]&&this.g==this.i[3]&&this.f==this.i[4]&&this.s==this.i[5]&&this.b==this.i[6]||(this.i=["r"+n+s+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.f?this.f.toString():"-")+(void 0!==this.s?this.s.toString():"-")+(void 0!==this.b?this.b.toString():"-"),n,s,this.g,this.f,this.s,this.b]),h=o.add(this.i[0],a,a,this.yh.bind(this,i),h),this.C=h.image,this.za=[h.offsetX,h.offsetY],o=h.image.width,this.B=r?h.de:this.C;this.G=[a/2,a/2],this.P=[a,a],this.na=[o,o],jn.call(this,{opacity:1,rotateWithView:void 0!==t.rotateWithView&&t.rotateWithView,rotation:void 0!==t.rotation?t.rotation:0,scale:1,snapToPixel:void 0===t.snapToPixel||t.snapToPixel})}var od,id,rd,nd={},sd=this,pd=0;e(r,Error);var ad=function(){var t;return t="cosh"in Math?Math.cosh:function(t){return t=Math.exp(t),(t+1/t)/2}}(),hd="function"==typeof Object.assign?Object.assign:function(t,e){if(!t||!t)throw new TypeError("Cannot convert undefined or null to object");for(var o=Object(t),i=1,r=arguments.length;i<r;++i){var n=arguments[i];if(void 0!==n&&null!==n)for(var s in n)n.hasOwnProperty(s)&&(o[s]=n[s])}return o};j.prototype.Ib=!1,j.prototype.la=o,L.prototype.preventDefault=L.prototype.stopPropagation=function(){this.io=!0},e(k,j),k.prototype.addEventListener=function(t,e){var o=this.na[t];o||(o=this.na[t]=[]),-1===o.indexOf(e)&&o.push(e)},k.prototype.b=function(t){var e="string"==typeof t?new L(t):t;t=e.type,e.target=this;var i,r=this.na[t];if(r){t in this.za||(this.za[t]=0,this.Qa[t]=0),++this.za[t];for(var n=0,s=r.length;n<s;++n)if(!1===r[n].call(this,e)||e.io){i=!1;break}if(--this.za[t],0===this.za[t]){for(e=this.Qa[t],delete this.Qa[t];e--;)this.removeEventListener(t,o);delete this.za[t]}return i}},k.prototype.la=function(){A(this)},k.prototype.removeEventListener=function(t,e){var i=this.na[t];if(i){var r=i.indexOf(e);t in this.Qa?(i[r]=o,++this.Qa[t]):(i.splice(r,1),0===i.length&&delete this.na[t])}},e(D,k),od=D.prototype,od.v=function(){++this.g,this.b("change")},od.K=function(){return this.g},od.I=function(t,e,o){if(Array.isArray(t)){for(var i=t.length,r=Array(i),n=0;n<i;++n)r[n]=E(this,t[n],e,o);return r}return E(this,t,e,o)},od.L=function(t,e,o){if(Array.isArray(t)){for(var i=t.length,r=Array(i),n=0;n<i;++n)r[n]=M(this,t[n],e,o);return r}return M(this,t,e,o)},od.J=function(t,e,o){if(Array.isArray(t))for(var i=0,r=t.length;i<r;++i)C(this,t[i],e,o);else C(this,t,e,o)},od.M=F,e(O,L),e(B,D);var ld={};od=B.prototype,od.get=function(t){var e;return this.T.hasOwnProperty(t)&&(e=this.T[t]),e},od.O=function(){return Object.keys(this.T)},od.N=function(){return hd({},this.T)},od.set=function(t,e,o){o?this.T[t]=e:(o=this.T[t],this.T[t]=e,o!==e&&G(this,t,o))},od.H=function(t,e){for(var o in t)this.set(o,t[o],e)},od.R=function(t,e){if(t in this.T){var o=this.T[t];delete this.T[t],e||G(this,t,o)}},Vt.prototype.a=function(t){for(var e=0,o=t.length,i=t[o-1][0],r=t[o-1][1],n=0;n<o;n++)var s=t[n][0],p=t[n][1],e=e+l(s-i)*(2+Math.sin(l(r))+Math.sin(l(p))),i=s,r=p;return e*this.radius*this.radius/2},Vt.prototype.b=function(t,e){var o=l(t[1]),i=l(e[1]),r=(i-o)/2,n=l(e[0]-t[0])/2,o=Math.sin(r)*Math.sin(r)+Math.sin(n)*Math.sin(n)*Math.cos(o)*Math.cos(i);return 2*this.radius*Math.atan2(Math.sqrt(o),Math.sqrt(1-o))},Vt.prototype.offset=function(t,e,o){var i=l(t[1]);e/=this.radius;var r=Math.asin(Math.sin(i)*Math.cos(e)+Math.cos(i)*Math.sin(e)*Math.cos(o));return[180*(l(t[0])+Math.atan2(Math.sin(o)*Math.sin(e)*Math.cos(i),Math.cos(e)-Math.sin(i)*Math.sin(r)))/Math.PI,180*r/Math.PI]};var ud=new Vt(6370997),cd={};cd.degrees=2*Math.PI*ud.radius/360,cd.ft=.3048,cd.m=1,cd["us-ft"]=1200/3937,od=Yt.prototype,od.Gj=function(){return this.eb},od.D=function(){return this.f},od.yb=function(){return this.c},od.dc=function(){return this.o||cd[this.c]},od.sk=function(){return this.i},od.bl=function(){return this.g},od.Ro=function(t){this.g=t,this.a=!(!t||!this.f)},od.Am=function(t){this.f=t,this.a=!(!this.g||!t)},od.Yo=function(t){this.i=t},od.Qo=function(t){this.l=t},od.fk=function(t,e){if("degrees"==this.yb())return t;var o=pe(this,re("EPSG:4326")),i=[e[0]-t/2,e[1],e[0]+t/2,e[1],e[0],e[1]-t/2,e[0],e[1]+t/2],i=o(i,i,2),o=(ud.b(i.slice(0,2),i.slice(2,4))+ud.b(i.slice(4,6),i.slice(6,8)))/2,i=this.dc();return void 0!==i&&(o/=i),o},od.getPointResolution=function(t,e){return this.l(t,e)};var fd={},yd={},dd=null;e(ce,B),od=ce.prototype,od.xb=function(t,e){var o=e?e:[NaN,NaN];return this.vb(t[0],t[1],o,1/0),o},od.jb=function(t){return this.Ac(t[0],t[1])},od.Ac=qt,od.D=function(t){this.u!=this.g&&(this.s=this.Pd(this.s),this.u=this.g);var e=this.s;return t?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3]):t=e,t},od.Db=function(t){return this.pd(t*t)},od.lb=function(t,e){return this.oc(se(t,e)),this},e(ye,ce),od=ye.prototype,od.Ac=qt,od.Pd=function(t){return Ct(this.A,0,this.A.length,this.a,t)},od.Lb=function(){return this.A.slice(0,this.a)},od.ka=function(){return this.A},od.Mb=function(){return this.A.slice(this.A.length-this.a)},od.Nb=function(){return this.ia},od.pd=function(t){if(this.o!=this.g&&(g(this.i),this.j=0,this.o=this.g),0>t||0!==this.j&&t<=this.j)return this;var e=t.toString();if(this.i.hasOwnProperty(e))return this.i[e];var o=this.Mc(t);return o.ka().length<this.A.length?this.i[e]=o:(this.j=t,this)},od.Mc=function(){return this},od.sa=function(){return this.a},od.oc=function(t){this.A&&(t(this.A,this.A,this.a),this.v())},od.rotate=function(t,e){var o=this.ka();if(o){for(var i=o.length,r=this.sa(),n=o?o:[],s=Math.cos(t),p=Math.sin(t),a=e[0],h=e[1],l=0,u=0;u<i;u+=r){var c=o[u]-a,f=o[u+1]-h;for(n[l++]=a+c*s-f*p,n[l++]=h+c*p+f*s,c=u+2;c<u+r;++c)n[l++]=o[c]}o&&n.length!=l&&(n.length=l),this.v()}},od.scale=function(t,e,o){var i=e;void 0===i&&(i=t);var r=o;if(r||(r=Dt(this.D())),o=this.ka()){e=o.length;for(var n=this.sa(),s=o?o:[],p=r[0],r=r[1],a=0,h=0;h<e;h+=n){var l=o[h]-p,u=o[h+1]-r;for(s[a++]=p+t*l,s[a++]=r+i*u,l=h+2;l<h+n;++l)s[a++]=o[l]}o&&s.length!=a&&(s.length=a),this.v()}},od.Pc=function(t,e){var o=this.ka();if(o){var i,r,n=o.length,s=this.sa(),p=o?o:[],a=0;for(i=0;i<n;i+=s)for(p[a++]=o[i]+t,p[a++]=o[i+1]+e,r=i+2;r<i+s;++r)p[a++]=o[r];o&&p.length!=a&&(p.length=a),this.v()}},e(Re,ye),od=Re.prototype,od.clone=function(){var t=new Re(null);return ke(t,this.ia,this.A.slice()),t},od.vb=function(t,e,o,i){return i<mt(this.D(),t,e)?i:(this.c!=this.g&&(this.l=Math.sqrt(xe(this.A,0,this.A.length,this.a,0)),this.c=this.g),Te(this.A,0,this.A.length,this.a,this.l,!0,t,e,o,i))},od.bm=function(){return me(this.A,0,this.A.length,this.a)},od.Y=function(){return Ae(this.A,0,this.A.length,this.a)},od.Mc=function(t){var e=[];return e.length=Ne(this.A,0,this.A.length,this.a,t,e,0),t=new Re(null),ke(t,"XY",e),t},od.X=function(){return"LinearRing"},od.ma=function(t,e){t?(ve(this,e,t,1),this.A||(this.A=[]),this.A.length=Ce(this.A,0,t,this.a),this.v()):ke(this,"XY",null)},e(Ie,ye),od=Ie.prototype,od.clone=function(){var t=new Ie(null);return t.aa(this.ia,this.A.slice()),t},od.vb=function(t,e,o,i){var r=this.A;if(t=h(t,e,r[0],r[1]),t<i){for(i=this.a,e=0;e<i;++e)o[e]=r[e];return o.length=i,t}return i},od.Y=function(){return this.A?this.A.slice():[]},od.Pd=function(t){return Mt(this.A,t)},od.X=function(){return"Point"},od.Na=function(t){return xt(t,this.A[0],this.A[1])},od.ma=function(t,e){t?(ve(this,e,t,0),this.A||(this.A=[]),this.A.length=Me(this.A,t),this.v()):this.aa("XY",null)},od.aa=function(t,e){ge(this,t,e),this.v()},e(ze,ye),od=ze.prototype,od.mj=function(t){this.A?W(this.A,t.ka()):this.A=t.ka().slice(),this.c.push(this.A.length),this.v()},od.clone=function(){var t=new ze(null);return t.aa(this.ia,this.A.slice(),this.c.slice()),t},od.vb=function(t,e,o,i){return i<mt(this.D(),t,e)?i:(this.G!=this.g&&(this.S=Math.sqrt(Se(this.A,0,this.c,this.a,0)),this.G=this.g),Ee(this.A,0,this.c,this.a,this.S,!0,t,e,o,i))},od.Ac=function(t,e){return Oe(this.Ob(),0,this.c,this.a,t,e)},od.em=function(){return be(this.Ob(),0,this.c,this.a)},od.Y=function(t){var e;return void 0!==t?(e=this.Ob().slice(),Ke(e,0,this.c,this.a,t)):e=this.A,je(e,0,this.c,this.a)},od.Eb=function(){return this.c},od.Qj=function(){return new Ie(qe(this))},od.Vj=function(){return this.c.length},od.Bg=function(t){if(0>t||this.c.length<=t)return null;var e=new Re(null);return ke(e,this.ia,this.A.slice(0===t?0:this.c[t-1],this.c[t])),e},od.Vd=function(){var t,e,o=this.ia,i=this.A,r=this.c,n=[],s=0;for(t=0,e=r.length;t<e;++t){var p=r[t],a=new Re(null);ke(a,o,i.slice(s,p)),n.push(a),s=p}return n},od.Ob=function(){if(this.P!=this.g){var t=this.A;Xe(t,this.c,this.a)?this.l=t:(this.l=t.slice(),this.l.length=Ke(this.l,0,this.c,this.a)),this.P=this.g}return this.l},od.Mc=function(t){var e=[],o=[];return e.length=Le(this.A,0,this.c,this.a,Math.sqrt(t),e,0,o),t=new ze(null),t.aa("XY",e,o),t},od.X=function(){return"Polygon"},od.Na=function(t){return $e(this.Ob(),0,this.c,this.a,t)},od.ma=function(t,e){if(t){ve(this,e,t,2),this.A||(this.A=[]);var o=Pe(this.A,0,t,this.a,this.c);this.A.length=0===o.length?0:o[o.length-1],this.v()}else this.aa("XY",null,this.c)},od.aa=function(t,e,o){ge(this,t,e),this.c=o,this.v()},e(_e,B),od=_e.prototype,od.Qd=function(t){return this.o.center(t)},od.constrainResolution=function(t,e,o){return this.o.resolution(t,e||0,o||0)},od.constrainRotation=function(t,e){return this.o.rotation(t,e||0)},od.bb=function(){return this.get(gd)},od.Jc=function(t){var e=this.bb();n(e,1);var o=this.Ma();n(void 0!==o,2);var i=this.Pa();return n(void 0!==i,3),Ft(e,o,i,t)},od.Jl=function(){return this.a},od.Kl=function(){return this.i},od.Ll=function(){return this.l},od.Ma=function(){return this.get(vd)},od.Ml=function(){return this.f},od.Pa=function(){return this.get(md)},od.U=function(){var t=this.bb(),e=this.l,o=this.Ma(),i=this.Pa();return{center:t.slice(),projection:void 0!==e?e:null,resolution:o,rotation:i}},od.tk=function(){var t,e=this.Ma();if(void 0!==e&&e>=this.i&&e<=this.a){t=this.j||0;var o,i;if(this.f){if(i=X(this.f,e,1),t+=i,i==this.f.length-1)return t;o=this.f[i],i=o/this.f[i+1]}else o=this.a,i=this.s;t+=Math.log(o/e)/Math.log(i)}return t},od.$e=function(t,e,o){t instanceof ye||(n(Array.isArray(t),24),n(!Xt(t),25),t=Ye(t));var i=o||{};o=void 0!==i.padding?i.padding:[0,0,0,0];var r,s=void 0===i.constrainResolution||i.constrainResolution,p=void 0!==i.nearest&&i.nearest;r=void 0!==i.minResolution?i.minResolution:void 0!==i.maxZoom?this.constrainResolution(this.a,i.maxZoom-this.j,0):0;var a=t.ka(),h=this.Pa(),i=Math.cos(-h),h=Math.sin(-h),l=1/0,u=1/0,c=-(1/0),f=-(1/0);t=t.sa();for(var y=0,d=a.length;y<d;y+=t)var g=a[y]*i-a[y+1]*h,v=a[y]*h+a[y+1]*i,l=Math.min(l,g),u=Math.min(u,v),c=Math.max(c,g),f=Math.max(f,v);e=to([l,u,c,f],[e[0]-o[1]-o[3],e[1]-o[0]-o[2]]),e=isNaN(e)?r:Math.max(e,r),s&&(r=this.constrainResolution(e,0,0),!p&&r<e&&(r=this.constrainResolution(r,-1,0)),e=r),this.Yb(e),h=-h,p=(l+c)/2+(o[1]-o[3])/2*e,o=(u+f)/2+(o[0]-o[2])/2*e,this.rb([p*i-o*h,o*i+p*h])},od.sj=function(t,e,o){var i=this.Pa(),r=Math.cos(-i),i=Math.sin(-i),n=t[0]*r-t[1]*i;t=t[1]*r+t[0]*i;var s=this.Ma(),n=n+(e[0]/2-o[0])*s;t+=(o[1]-e[1]/2)*s,i=-i,this.rb([n*r-t*i,t*r+n*i])},od.rotate=function(t,e){if(void 0!==e){var o,i=this.bb();void 0!==i&&(o=[i[0]-e[0],i[1]-e[1]],ut(o,t-this.Pa()),st(o,e)),this.rb(o)}this.ie(t)},od.rb=function(t){this.set(gd,t)},od.Yb=function(t){this.set(vd,t)},od.ie=function(t){this.set(md,t)},od.Zo=function(t){t=this.constrainResolution(this.a,t-this.j,0),this.Yb(t)};var gd="center",vd="resolution",md="rotation",bd=[0,0,0];od=To.prototype,od.sg=function(t,e,o){t=Po(this,t,e);for(var i=t.ba,r=t.da;i<=r;++i)for(var n=t.ea,s=t.ha;n<=s;++n)o([e,i,n])},od.D=function(){return this.s},od.Cg=function(){return this.maxZoom},od.Dg=function(){return this.minZoom},od.Tc=function(t){return this.g?this.g:this.f[t]},od.Ga=function(t){return this.b[t]},od.Bh=function(){return this.b},od.Ia=function(t,e){var o=this.Tc(t[0]),i=this.Ga(t[0]),r=wo(this.Va(t[0]),this.j),n=o[0]+t[1]*r[0]*i,o=o[1]+t[2]*r[1]*i;return Et(n,o,n+r[0]*i,o+r[1]*i,e)},od.Yd=function(t,e,o){return jo(this,t[0],t[1],e,!1,o)},od.Zd=function(t,e,o){return e=this.Ga(e),jo(this,t[0],t[1],e,!1,o)},od.Va=function(t){return this.i?this.i:this.c[t]},od.wc=function(t,e){return s(X(this.b,t,e||0),this.minZoom,this.maxZoom)},Do.prototype.g=function(){return this.a},e(Fo,B),od=Fo.prototype,od.clear=function(){for(;0<this.yc();)this.pop()},od.qf=function(t){var e,o;for(e=0,o=t.length;e<o;++e)this.push(t[e]);return this},od.forEach=function(t,e){this.a.forEach(t,e)},od.sl=function(){return this.a},od.item=function(t){return this.a[t]},od.yc=function(){return this.get(wd)},od.ee=function(t,e){this.a.splice(t,0,e),Oo(this),this.b(new Bo(xd,e))},od.pop=function(){return this.Nf(this.yc()-1)},od.push=function(t){var e=this.a.length;return this.ee(e,t),e},od.remove=function(t){var e,o,i=this.a;for(e=0,o=i.length;e<o;++e)if(i[e]===t)return this.Nf(e)},od.Nf=function(t){var e=this.a[t];return this.a.splice(t,1),Oo(this),this.b(new Bo(Sd,e)),e},od.Oo=function(t,e){var o=this.yc();if(t<o)o=this.a[t],this.a[t]=e,this.b(new Bo(Sd,o)),this.b(new Bo(xd,e));else{for(;o<t;++o)this.ee(o,void 0);this.ee(t,e)}};var wd="length",xd="add",Sd="remove";e(Bo,L);var Td=/^#(?:[0-9a-f]{3}){1,2}$/i,Ed=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,Md=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i,Cd=/^([a-z]*)$/i,Pd=function(){var t={},e=0;return function(o){var i;if(t.hasOwnProperty(o))i=t[o];else{if(1024<=e){i=0;for(var r in t)0===(3&i++)&&(delete t[r],--e)}i=o;var s,p;Cd.exec(i)&&(r=document.createElement("div"),r.style.color=i,document.body.appendChild(r),i=getComputedStyle(r).color,document.body.removeChild(r)),Td.exec(i)?(s=i.length-1,n(3==s||6==s,54),p=3==s?1:2,s=parseInt(i.substr(1+0*p,p),16),r=parseInt(i.substr(1+1*p,p),16),i=parseInt(i.substr(1+2*p,p),16),1==p&&(s=(s<<4)+s,r=(r<<4)+r,i=(i<<4)+i),s=[s,r,i,1]):(p=Md.exec(i))?(s=Number(p[1]),r=Number(p[2]),i=Number(p[3]),p=Number(p[4]),s=$o([s,r,i,p])):(p=Ed.exec(i))?(s=Number(p[1]),r=Number(p[2]),i=Number(p[3]),s=$o([s,r,i,1])):n(!1,14),i=s,t[o]=i,++e}return i}}();e(zo,L),e(qo,B),qo.prototype.la=function(){Wo(this.element),B.prototype.la.call(this)},qo.prototype.i=function(){return this.a},qo.prototype.setMap=function(t){this.a&&Wo(this.element);for(var e=0,i=this.s.length;e<i;++e)P(this.s[e]);this.s.length=0,(this.a=t)&&((this.P?this.P:t.u).appendChild(this.element),this.render!==o&&this.s.push(E(t,"postrender",this.render,this)),t.render())},qo.prototype.c=function(t){this.P="string"==typeof t?document.getElementById(t):t},e(Vo,qo),od=Vo.prototype,od.Pl=function(t){t.preventDefault(),Zo(this)},od.Ol=function(){return this.l},od.Rl=function(t){this.l!==t&&(this.l=t,this.element.classList.toggle("ol-uncollapsible"),!t&&this.f&&Zo(this))},od.Ql=function(t){this.l&&this.f!==t&&Zo(this)},od.Nl=function(){return this.f},e(Jo,qo),Jo.prototype.B=function(t){t.preventDefault(),_o()&&(t=this.a)&&(Qo()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(t=this.j?"string"==typeof this.j?document.getElementById(this.j):this.j:t.uc(),this.C?t.mozRequestFullScreenWithKeys?t.mozRequestFullScreenWithKeys():t.webkitRequestFullscreen?t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):ti(t):ti(t)))},Jo.prototype.u=function(){var t=this.element.firstElementChild,e=this.a;Qo()?(t.className=this.f+"-true",Ko(this.o,this.l)):(t.className=this.f+"-false",Ko(this.l,this.o)),e&&e.Yc()},Jo.prototype.setMap=function(t){qo.prototype.setMap.call(this,t),t&&this.s.push(E(document,Ad(),this.u,this))};var Ad=function(){var t;return function(){if(!t){var e=document.body;e.webkitRequestFullscreen?t="webkitfullscreenchange":e.mozRequestFullScreen?t="mozfullscreenchange":e.msRequestFullscreen?t="MSFullscreenChange":e.requestFullscreen&&(t="fullscreenchange")}return t}}();e(ei,qo),ei.prototype.C=function(t){if(t.preventDefault(),void 0!==this.l)this.l();else{t=this.a;var e=t.$();if(e){var o=e.Pa();void 0!==o&&(0<this.o&&(o%=2*Math.PI,o<-Math.PI&&(o+=2*Math.PI),o>Math.PI&&(o-=2*Math.PI),t.ab(uo({rotation:o,duration:this.o,easing:so}))),e.ie(0))}}},e(ii,qo),ii.prototype.j=function(t,e){e.preventDefault();var o=this.a,i=o.$();if(i){var r=i.Ma();r&&(0<this.f&&o.ab(co({resolution:r,duration:this.f,easing:so})),o=i.constrainResolution(r,t),i.Yb(o))}},e(ni,qo),od=ni.prototype,od.Sl=function(){this.j=null},od.wg=function(){return this.get(Rd)},od.Zg=function(){return this.get(Ld)},od.Jk=function(t){this.l=this.a.Ud(t),pi(this,this.l)},od.Kk=function(){pi(this,null),this.l=null},od.setMap=function(t){qo.prototype.setMap.call(this,t),t&&(t=t.a,this.s.push(E(t,"mousemove",this.Jk,this),E(t,"mouseout",this.Kk,this)))},od.Uh=function(t){this.set(Rd,t)},od.$g=function(t){this.set(Ld,t)};var jd,Nd,Ld="projection",Rd="coordinateFormat",kd=["experimental-webgl","webgl","webkit-3d","moz-webgl"],Id="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",Dd=-1!==Id.indexOf("firefox"),Fd=-1!==Id.indexOf("safari")&&-1==Id.indexOf("chrom"),Od=-1!==Id.indexOf("webkit")&&-1==Id.indexOf("edge"),Bd=-1!==Id.indexOf("macintosh"),Ud=window.devicePixelRatio||1,Gd=!1,$d=function(){if(!("HTMLCanvasElement"in window))return!1;try{var t=document.createElement("CANVAS").getContext("2d");return!!t&&(void 0!==t.setLineDash&&(Gd=!0),!0)}catch(e){return!1}}(),Hd="DeviceOrientationEvent"in window,Xd="geolocation"in navigator,Kd="ontouchstart"in window,Wd="PointerEvent"in window,zd=!!navigator.msPointerEnabled,qd=!1,Vd=[];if("WebGLRenderingContext"in window)try{var Yd=ai(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});Yd&&(qd=!0,Nd=Yd.getParameter(Yd.MAX_TEXTURE_SIZE),Vd=Yd.getSupportedExtensions())}catch(Zd){}jd=qd,rd=Vd,id=Nd,e(li,hi),od=li.prototype,od.dl=function(t){if(!ui(this,t)){if(1..toString()in this.a){var e=ci(t);Li(this.b,"pointercancel",e,t),delete this.a[1..toString()]}e=ci(t),this.a[1..toString()]=t,Li(this.b,"pointerdown",e,t)}},od.el=function(t){if(!ui(this,t)){var e=ci(t);Li(this.b,"pointermove",e,t)}},od.hl=function(t){if(!ui(this,t)){var e=this.a[1..toString()];e&&e.button===t.button&&(e=ci(t),Li(this.b,"pointerup",e,t),delete this.a[1..toString()])}},od.gl=function(t){if(!ui(this,t)){var e=ci(t);Ni(this.b,e,t)}},od.fl=function(t){if(!ui(this,t)){var e=ci(t);ji(this.b,e,t)}},e(fi,hi),od=fi.prototype,od.ml=function(t){this.a[t.pointerId.toString()]=t;var e=yi(this,t);Li(this.b,"pointerdown",e,t)},od.nl=function(t){var e=yi(this,t);Li(this.b,"pointermove",e,t)},od.ql=function(t){var e=yi(this,t);Li(this.b,"pointerup",e,t),delete this.a[t.pointerId.toString()]},od.ol=function(t){var e=yi(this,t);ji(this.b,e,t)},od.pl=function(t){var e=yi(this,t);Ni(this.b,e,t)},od.ll=function(t){var e=yi(this,t);Li(this.b,"pointercancel",e,t),delete this.a[t.pointerId.toString()]},od.kl=function(t){this.b.b(new gi("lostpointercapture",t,t))},od.jl=function(t){this.b.b(new gi("gotpointercapture",t,t))},e(di,hi),od=di.prototype,od.Zn=function(t){Ri(this.b,t)},od.$n=function(t){Ri(this.b,t)},od.co=function(t){Ri(this.b,t)},od.ao=function(t){Ri(this.b,t)},od.bo=function(t){Ri(this.b,t)},od.Yn=function(t){Ri(this.b,t)},od.cl=function(t){Ri(this.b,t)},od.uk=function(t){Ri(this.b,t)},e(gi,L);var Jd=!1;try{Jd=1===new MouseEvent("click",{buttons:1}).buttons}catch(Zd){}e(bi,hi),od=bi.prototype,od.Sh=function(){this.i=0,this.f=void 0},od.ep=function(t){var e=t.touches,o=Object.keys(this.a),i=o.length;if(i>=e.length){var r,n,s,p=[];for(r=0;r<i;++r){n=o[r],s=this.a[n];var a;if(!(a=1==n))t:{a=e.length;for(var h,l=0;l<a;l++)if(h=e[l],h.identifier===n-2){a=!0;break t}a=!1}a||p.push(s.out)}for(r=0;r<p.length;++r)this.Re(t,p[r])}e=t.changedTouches[0],
-o=Object.keys(this.a).length,(0===o||1===o&&1..toString()in this.a)&&(this.g=e.identifier,void 0!==this.f&&clearTimeout(this.f)),Si(this,t),this.i++,xi(this,t,this.Un)},od.Un=function(t,e){this.a[e.pointerId]={target:e.target,out:e,Ch:e.target};var o=this.b;e.bubbles=!0,Li(o,"pointerover",e,t),o=this.b,e.bubbles=!1,Li(o,"pointerenter",e,t),Li(this.b,"pointerdown",e,t)},od.cp=function(t){t.preventDefault(),xi(this,t,this.il)},od.il=function(t,e){var o=this.a[e.pointerId];if(o){var i=o.out,r=o.Ch;Li(this.b,"pointermove",e,t),i&&r!==e.target&&(i.relatedTarget=e.target,e.relatedTarget=r,i.target=r,e.target?(ji(this.b,i,t),Ni(this.b,e,t)):(e.target=r,e.relatedTarget=null,this.Re(t,e))),o.out=e,o.Ch=e.target}},od.bp=function(t){Si(this,t),xi(this,t,this.fp)},od.fp=function(t,e){Li(this.b,"pointerup",e,t),this.b.out(e,t),Ai(this.b,e,t),delete this.a[e.pointerId],e.isPrimary&&(this.g=void 0,this.f=setTimeout(this.Sh.bind(this),200))},od.ap=function(t){xi(this,t,this.Re)},od.Re=function(t,e){Li(this.b,"pointercancel",e,t),this.b.out(e,t),Ai(this.b,e,t),delete this.a[e.pointerId],e.isPrimary&&(this.g=void 0,this.f=setTimeout(this.Sh.bind(this),200))},e(Ti,k),Ti.prototype.f=function(t){var e=this.c[t.type];e&&e(t)},Ti.prototype.out=function(t,e){t.bubbles=!0,Li(this,"pointerout",t,e)},Ti.prototype.la=function(){for(var t,e=this.a.length,o=0;o<e;o++)t=this.a[o],Ci(this,Object.keys(t.c));k.prototype.la.call(this)};var _d=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",!1],["type",""],["target",null],["currentTarget",null],["which",0]];e(ki,zo),ki.prototype.preventDefault=function(){zo.prototype.preventDefault.call(this),this.originalEvent.preventDefault()},ki.prototype.stopPropagation=function(){zo.prototype.stopPropagation.call(this),this.originalEvent.stopPropagation()},e(Ii,ki),e(Di,k),od=Di.prototype,od.Kg=function(t){Oi(this,t);var e=new Ii(ng,this.f,t);this.b(e),!this.l&&0===t.button&&Fi(this,this.g),0===this.u&&(this.c.forEach(P),this.c.length=0,this.l=!1,this.g=null,N(this.a),this.a=null)},od.Mk=function(t){Oi(this,t);var e=new Ii(rg,this.f,t);this.b(e),this.g=t,0===this.c.length&&(this.a=new Ti(document),this.c.push(E(this.a,ig,this.Fl,this),E(this.a,ng,this.Kg,this),E(this.i,sg,this.Kg,this)))},od.Fl=function(t){if(t.clientX!=this.g.clientX||t.clientY!=this.g.clientY){this.l=!0;var e=new Ii(og,this.f,t,this.l);this.b(e)}t.preventDefault()},od.Co=function(t){this.b(new Ii(t.type,this.f,t,(!(!this.g||t.clientX==this.g.clientX&&t.clientY==this.g.clientY))))},od.la=function(){this.s&&(P(this.s),this.s=null),this.o&&(P(this.o),this.o=null),this.c.forEach(P),this.c.length=0,this.a&&(N(this.a),this.a=null),this.i&&(N(this.i),this.i=null),k.prototype.la.call(this)};var Qd="singleclick",tg="click",eg="dblclick",og="pointerdrag",ig="pointermove",rg="pointerdown",ng="pointerup",sg="pointercancel",pg={xp:Qd,mp:tg,np:eg,qp:og,tp:ig,pp:rg,wp:ng,vp:"pointerover",up:"pointerout",rp:"pointerenter",sp:"pointerleave",op:sg};e(Bi,k),Bi.prototype.Xa=function(){return this.key+"/"+this.ya},Bi.prototype.i=function(){return this.ya},Bi.prototype.U=function(){return this.state};var ag=2;$i.prototype.clear=function(){this.b.length=0,this.g.length=0,g(this.a)},$i.prototype.c=function(t){n(!(this.f(t)in this.a),31);var e=this.o(t);return 1/0!=e&&(this.b.push(t),this.g.push(e),this.a[this.f(t)]=!0,Ki(this,0,this.b.length-1),!0)},e(zi,$i),zi.prototype.c=function(t){var e=$i.prototype.c.call(this,t);return e&&E(t[0],"change",this.l,this),e},zi.prototype.l=function(t){t=t.target;var e=t.U();e!==ag&&3!==e&&4!==e&&5!==e||(C(t,"change",this.l,this),t=t.Xa(),t in this.i&&(delete this.i[t],--this.j),this.s())},e(Zi,B),Zi.prototype.f=function(){return this.get(hg)},Zi.prototype.c=function(){return this.s},Zi.prototype.Ba=function(t){this.set(hg,t)},Zi.prototype.setMap=function(t){this.s=t};var hg="active";e(tr,Zi),e(ur,Zi),ur.prototype.Fc=function(t){return t},e(yr,ur),yr.prototype.Fc=qt,e(mr,ur),mr.prototype.Fc=qt,e(Sr,j),Sr.prototype.la=function(){this.setMap(null)},Sr.prototype.setMap=function(t){if(this.b){this.b.C.removeChild(this.a);var e=this.a.style;e.left=e.top=e.width=e.height="inherit"}(this.b=t)&&this.b.C.appendChild(this.a)},Sr.prototype.V=function(){return this.f},e(Mr,ur),Mr.prototype.V=function(){return this.a.V()},Mr.prototype.o=o;var lg="boxstart",ug="boxdrag",cg="boxend";e(Nr,L),e(Lr,Mr),Lr.prototype.o=function(){var t=this.s,e=t.$(),o=t.kb(),i=this.V().D();if(this.G){var r,n,s=e.Jc(o),i=[t.Ca(kt(i)),t.Ca(Gt(i))],p=Et(1/0,1/0,-(1/0),-(1/0),void 0);for(r=0,n=i.length;r<n;++r)jt(p,i[r]);Kt(s,1/to(p,o)),i=s}o=e.constrainResolution(to(i,o)),s=e.Ma(),p=e.bb(),t.ab(co({resolution:s,duration:this.j,easing:so})),t.ab(lo({source:p,duration:this.j,easing:so})),e.rb(Dt(i)),e.Yb(o)},e(Rr,Zi),e(Ir,Zi),e(Fr,Zi),Fr.prototype.u=function(t){var e=s(this.i,-1,1),o=t.$();_i(t,o,-e,this.a,this.C),this.i=0,this.a=null,this.l=this.j=void 0},Fr.prototype.B=function(t){this.o=t,t||(this.a=null)},e(Br,ur),Br.prototype.Fc=qt,e(Hr,ur),Hr.prototype.Fc=qt,e(qr,B),od=qr.prototype,od.D=function(){return this.get("extent")},od.Pb=function(){return this.get("maxResolution")},od.Qb=function(){return this.get("minResolution")},od.Rb=function(){return this.get("opacity")},od.zb=function(){return this.get("visible")},od.Sb=function(){return this.get("zIndex")},od.fc=function(t){this.set("extent",t)},od.lc=function(t){this.set("maxResolution",t)},od.mc=function(t){this.set("minResolution",t)},od.gc=function(t){this.set("opacity",t)},od.hc=function(t){this.set("visible",t)},od.ic=function(t){this.set("zIndex",t)},e(Yr,qr),od=Yr.prototype,od.be=function(){this.zb()&&this.v()},od.Fk=function(){this.c.forEach(P),this.c.length=0;var t=this.Qc();this.c.push(E(t,xd,this.Ek,this),E(t,Sd,this.Gk,this));for(var e in this.f)this.f[e].forEach(P);g(this.f);var o,r,t=t.a;for(e=0,o=t.length;e<o;e++)r=t[e],this.f[i(r).toString()]=[E(r,"propertychange",this.be,this),E(r,"change",this.be,this)];this.v()},od.Ek=function(t){t=t.element;var e=i(t).toString();this.f[e]=[E(t,"propertychange",this.be,this),E(t,"change",this.be,this)],this.v()},od.Gk=function(t){t=i(t.element).toString(),this.f[t].forEach(P),delete this.f[t],this.v()},od.Qc=function(){return this.get(fg)},od.gh=function(t){this.set(fg,t)},od.ff=function(t){var e=void 0!==t?t:[],o=e.length;this.Qc().forEach(function(t){t.ff(e)}),t=Vr(this);var i,r;for(i=e.length;o<i;o++)r=e[o],r.opacity*=t.opacity,r.visible=r.visible&&t.visible,r.maxResolution=Math.min(r.maxResolution,t.maxResolution),r.minResolution=Math.max(r.minResolution,t.minResolution),void 0!==t.extent&&(r.extent=void 0!==r.extent?Bt(r.extent,t.extent):t.extent);return e},od.hf=function(){return"ready"};var fg="layers";e(Zr,Yt),Zr.prototype.getPointResolution=function(t,e){return t/ad(e[1]/6378137)};var yg=6378137*Math.PI,dg=[-yg,-yg,yg,yg],gg=[-180,-85,180,85],vg="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(t){return new Zr(t)}),mg=new Vt(6378137);e(Qr,Yt),Qr.prototype.getPointResolution=function(t){return t};var bg=[-180,-90,180,90],wg=Math.PI*mg.radius/180,xg=[new Qr("CRS:84"),new Qr("EPSG:4326","neu"),new Qr("urn:ogc:def:crs:EPSG::4326","neu"),new Qr("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new Qr("urn:ogc:def:crs:OGC:1.3:CRS84"),new Qr("urn:ogc:def:crs:OGC:2:84"),new Qr("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new Qr("urn:x-ogc:def:crs:EPSG:4326","neu")];e(en,L),e(on,qr),od=on.prototype,od.ff=function(t){return t=t?t:[],t.push(Vr(this)),t},od.ga=function(){return this.get("source")||null},od.hf=function(){var t=this.ga();return t?t.U():"undefined"},od.zm=function(){this.v()},od.Sk=function(){this.C&&(P(this.C),this.C=null);var t=this.ga();t&&(this.C=E(t,"change",this.zm,this)),this.v()},od.setMap=function(t){this.o&&(P(this.o),this.o=null),t||this.v(),this.s&&(P(this.s),this.s=null),t&&(this.o=E(t,"precompose",function(t){var e=Vr(this);e.sd=!1,e.zIndex=1/0,t.frameState.layerStatesArray.push(e),t.frameState.layerStates[i(this)]=e},this),this.s=E(this,"change",t.render,t),this.v())},od.Ec=function(t){this.set("source",t)},nn.prototype.clear=function(){this.b={},this.a=0},nn.prototype.get=function(t,e,o){return t=e+":"+t+":"+(o?Go(o):"null"),t in this.b?this.b[t]:null},nn.prototype.set=function(t,e,o,i){this.b[e+":"+t+":"+(o?Go(o):"null")]=i,++this.a};var Sg=new nn,Tg=Array(6);e(vn,j),od=vn.prototype,od.la=function(){for(var t in this.f)N(this.f[t])},od.xa=function(t,e,o,r,n,s){function p(t,n){var s=i(t).toString(),p=e.layerStates[i(n)].sd;if(!(s in e.skippedFeatureUids)||p)return o.call(r,t,p?n:null)}var a,h=e.viewState,l=h.resolution,u=h.projection,h=t;if(u.a){var u=u.D(),c=$t(u),f=t[0];(f<u[0]||f>u[2])&&(h=[f+c*Math.ceil((u[0]-f)/c),t[1]])}for(u=e.layerStatesArray,c=u.length-1;0<=c;--c){var y=u[c],f=y.layer;if(rn(y,l)&&n.call(s,f)&&(y=wn(this,f),f.ga()&&(a=y.xa(f.ga().G?h:t,e,p,r)),a))return a}},od.jh=function(t,e,o,i,r,n){var s,p,a=e.viewState.resolution,h=e.layerStatesArray;for(p=h.length-1;0<=p;--p){s=h[p];var l=s.layer;if(rn(s,a)&&r.call(n,l)&&(s=wn(this,l).Bc(t,e,o,i)))return s}},od.kh=function(t,e,o,i){return void 0!==this.xa(t,e,zt,this,o,i)},od.Dk=function(){this.l.render()},od.Pf=o,od.Io=function(t,e){for(var o in this.f)if(!(e&&o in e.layerStates)){var i=o,r=this.f[i];delete this.f[i],P(this.s[i]),delete this.s[i],N(r)}},e(Tn,on),e(En,on),En.prototype.f=function(){return this.get(Eg)},En.prototype.l=function(t){this.set(Eg,t)},En.prototype.c=function(){return this.get(Mg)},En.prototype.B=function(t){this.set(Mg,t)};var Eg="preload",Mg="useInterimTilesOnError";e(Mn,k),Mn.prototype.D=function(){return this.extent},Mn.prototype.U=function(){return this.state},e(Pn,Mn),Pn.prototype.a=function(t){if(void 0!==t){var e;return t=i(t),t in this.i?this.i[t]:(e=m(this.i)?this.g:this.g.cloneNode(!1),this.i[t]=e)}return this.g},Pn.prototype.s=function(){this.state=jg,this.c.forEach(P),this.c=null,Cn(this)},Pn.prototype.T=function(){void 0===this.resolution&&(this.resolution=Ot(this.extent)/this.g.height),this.state=Ag,this.c.forEach(P),this.c=null,Cn(this)},Pn.prototype.load=function(){this.state!=Cg&&this.state!=jg||(this.state=Pg,Cn(this),this.c=[M(this.g,"error",this.s,this),M(this.g,"load",this.T,this)],this.l(this,this.o))};var Cg=0,Pg=1,Ag=2,jg=3,Ng=[0,0,0,1],Lg=[],Rg=[0,0,0,1];od=jn.prototype,od.qe=function(){return this.l},od.re=function(){return this.T},od.se=function(){return this.o},od.te=function(){return this.c},od.Xd=function(){return this.u},od.Rc=function(t){this.l=t},od.ue=function(t){this.o=t},od.Sc=function(t){this.c=t},e(Nn,jn),od=Nn.prototype,od.clone=function(){var t=new Nn({fill:this.g?this.g.clone():void 0,stroke:this.b?this.b.clone():void 0,radius:this.a,snapToPixel:this.u,atlasManager:this.s});return t.Rc(this.l),t.Sc(this.c),t},od.cc=function(){return this.B},od.nn=function(){return this.g},od.pe=function(){return this.j},od.Tb=function(){return this.f},od.vd=function(){return Ag},od.md=function(){return this.G},od.jc=function(){return this.S},od.pn=function(){return this.a},od.Gb=function(){return this.na},od.qn=function(){return this.b},od.rn=function(t){this.a=t,Ln(this,this.s)},od.pf=o,od.load=o,od.Uf=o,od.wh=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),e.arc(t.size/2,t.size/2,this.a,0,2*Math.PI,!0),this.g&&(e.fillStyle=Ho(this.g.b),e.fill()),this.b&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.Dd,t.lineDash&&e.setLineDash(t.lineDash),e.stroke()),e.closePath()},od.vh=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),e.arc(t.size/2,t.size/2,this.a,0,2*Math.PI,!0),e.fillStyle=Go(Ng),e.fill(),this.b&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.Dd,t.lineDash&&e.setLineDash(t.lineDash),e.stroke()),e.closePath()},Rn.prototype.clone=function(){var t=this.b;return new Rn({color:t&&t.slice?t.slice():t||void 0})},Rn.prototype.g=function(){return this.b},Rn.prototype.f=function(t){this.b=t,this.a=void 0},od=In.prototype,od.clone=function(){var t=this.a;return new In({color:t&&t.slice?t.slice():t||void 0,lineCap:this.c,lineDash:this.g?this.g.slice():void 0,lineJoin:this.i,miterLimit:this.j,width:this.f})},od.zn=function(){return this.a},od.Sj=function(){return this.c},od.An=function(){return this.g},od.Tj=function(){return this.i},od.Yj=function(){return this.j},od.Bn=function(){return this.f},od.Cn=function(t){this.a=t,this.b=void 0},od.So=function(t){this.c=t,this.b=void 0},od.setLineDash=function(t){this.g=t,this.b=void 0},od.To=function(t){this.i=t,this.b=void 0},od.Uo=function(t){this.j=t,this.b=void 0},od.Xo=function(t){this.f=t,this.b=void 0},od=Fn.prototype,od.clone=function(){var t=this.V();return t&&t.clone&&(t=t.clone()),new Fn({geometry:t,fill:this.f?this.f.clone():void 0,image:this.a?this.a.clone():void 0,stroke:this.g?this.g.clone():void 0,text:this.Fa()?this.Fa().clone():void 0,zIndex:this.b})},od.V=function(){return this.i},od.Nj=function(){return this.c},od.Dn=function(){return this.f},od.En=function(){return this.a},od.Fn=function(){return this.g},od.Fa=function(){return this.j},od.Gn=function(){return this.b},od.zh=function(t){"function"==typeof t?this.c=t:"string"==typeof t?this.c=function(e){return e.get(t)}:t?t&&(this.c=function(){return t}):this.c=Gn,this.i=t},od.Hn=function(t){this.b=t};var kg=null;e($n,on),$n.prototype.G=function(){return this.B},$n.prototype.S=function(){return this.j},$n.prototype.l=function(t){this.B=void 0!==t?t:Bn,this.j=null===t?void 0:On(this.B),this.v()},e(Hn,$n),Hn.prototype.f=function(){return this.get(Ig)},Hn.prototype.c=function(){return this.get(Dg)},Hn.prototype.P=function(t){this.set(Eg,t)},Hn.prototype.W=function(t){this.set(Mg,t)};var Ig="preload",Dg="useInterimTilesOnError",Fg="image",Og="hybrid",Bg="vector";e(Kn,Xn),od=Kn.prototype,od.Rd=function(t){if(Ht(this.c,t.D())){if(this.a||this.b){this.a&&Yn(this,this.a),this.b&&Zn(this,this.b);var e;e=this.B;var o=this.u,i=t.ka();e=i?fe(i,0,i.length,t.sa(),e,o):null,o=e[2]-e[0],i=e[3]-e[1],o=Math.sqrt(o*o+i*i),i=this.f,i.beginPath(),i.arc(e[0],e[1],o,0,2*Math.PI),this.a&&i.fill(),this.b&&i.stroke()}""!==this.g&&zn(this,t.td(),2,2)}},od.ud=function(t){this.Vb(t.f,t.g),this.Xb(t.a),this.Zb(t.Fa())},od.pc=function(t){switch(t.X()){case"Point":this.rc(t);break;case"LineString":this.kd(t);break;case"Polygon":this.Ze(t);break;case"MultiPoint":this.qc(t);break;case"MultiLineString":this.Xe(t);break;case"MultiPolygon":this.Ye(t);break;case"GeometryCollection":this.We(t);break;case"Circle":this.Rd(t)}},od.Ve=function(t,e){var o=(0,e.c)(t);o&&Ht(this.c,o.D())&&(this.ud(e),this.pc(o))},od.We=function(t){t=t.f;var e,o;for(e=0,o=t.length;e<o;++e)this.pc(t[e])},od.rc=function(t){var e=t.ka();t=t.sa(),this.i&&Wn(this,e,e.length),""!==this.g&&zn(this,e,e.length,t)},od.qc=function(t){var e=t.ka();t=t.sa(),this.i&&Wn(this,e,e.length),""!==this.g&&zn(this,e,e.length,t)},od.kd=function(t){if(Ht(this.c,t.D())){if(this.b){Zn(this,this.b);var e=this.f,o=t.ka();e.beginPath(),qn(this,o,0,o.length,t.sa(),!1),e.stroke()}""!==this.g&&(t=eh(t),zn(this,t,2,2))}},od.Xe=function(t){var e=t.D();if(Ht(this.c,e)){if(this.b){Zn(this,this.b);var e=this.f,o=t.ka(),i=0,r=t.Eb(),n=t.sa();e.beginPath();var s,p;for(s=0,p=r.length;s<p;++s)i=qn(this,o,i,r[s],n,!1);e.stroke()}""!==this.g&&(t=ih(t),zn(this,t,t.length,2))}},od.Ze=function(t){if(Ht(this.c,t.D())){if(this.b||this.a){this.a&&Yn(this,this.a),this.b&&Zn(this,this.b);var e=this.f;e.beginPath(),Vn(this,t.Ob(),0,t.Eb(),t.sa()),this.a&&e.fill(),this.b&&e.stroke()}""!==this.g&&(t=qe(t),zn(this,t,2,2))}},od.Ye=function(t){if(Ht(this.c,t.D())){if(this.b||this.a){this.a&&Yn(this,this.a),this.b&&Zn(this,this.b);var e,o,i=this.f,r=ah(t),n=0,s=t.c,p=t.sa();for(i.beginPath(),e=0,o=s.length;e<o;++e)n=Vn(this,r,n,s[e],p);this.a&&i.fill(),this.b&&i.stroke()}""!==this.g&&(t=ph(t),zn(this,t,t.length,2))}},od.Vb=function(t,e){if(t){var o=t.b;this.a={fillStyle:Ho(o?o:Ng)}}else this.a=null;if(e){var o=e.a,i=e.c,r=e.g,n=e.i,s=e.f,p=e.j;this.b={lineCap:void 0!==i?i:"round",lineDash:r?r:Lg,lineJoin:void 0!==n?n:"round",lineWidth:this.C*(void 0!==s?s:1),miterLimit:void 0!==p?p:10,strokeStyle:Ho(o?o:Rg)}}else this.b=null},od.Xb=function(t){if(t){var e=t.cc(),o=t.Tb(1),i=t.jc(),r=t.Gb();this.G=e[0],this.S=e[1],this.na=r[1],this.i=o,this.T=t.l,this.$a=i[0],this.fa=i[1],this.ra=t.T,this.Ib=t.o,this.j=t.c,this.oa=t.u,this.za=r[0]}else this.i=null},od.Zb=function(t){if(t){var e=t.b;e?(e=e.b,this.l={fillStyle:Ho(e?e:Ng)}):this.l=null;var o=t.f;if(o){var e=o.a,i=o.c,r=o.g,n=o.i,s=o.f,o=o.j;this.s={lineCap:void 0!==i?i:"round",lineDash:r?r:Lg,lineJoin:void 0!==n?n:"round",lineWidth:void 0!==s?s:1,miterLimit:void 0!==o?o:10,strokeStyle:Ho(e?e:Rg)}}else this.s=null;var e=t.g,i=t.c,r=t.i,n=t.s,s=t.j,o=t.a,p=t.Fa(),a=t.l;t=t.o,this.P={font:void 0!==e?e:"10px sans-serif",textAlign:void 0!==a?a:"center",textBaseline:void 0!==t?t:"middle"},this.g=void 0!==p?p:"",this.Ka=void 0!==i?this.C*i:0,this.Aa=void 0!==r?this.C*r:0,this.La=void 0!==n&&n,this.ub=void 0!==s?s:0,this.o=this.C*(void 0!==o?o:1)}else this.g=""},e(Jn,D),od=Jn.prototype,od.xa=o,od.Bc=function(t,e,o,i){if(t=un(e.pixelToCoordinateTransform,t.slice()),this.xa(t,e,zt,this))return o.call(i,this.a,null)},od.le=qt,od.Ue=function(t,e,o){return function(i,r){return Jf(t,e,i,r,function(t){o[i]||(o[i]={}),o[i][t.ya.toString()]=t})}},od.Cm=function(t){t.target.U()===Ag&&Qn(this)},e(ns,Jn),ns.prototype.i=function(t,e,o){ps(this,"precompose",o,t,void 0);var i=this.f?this.f.a():null;if(i){var r=e.extent,n=void 0!==r;n&&ss(o,t,r);var r=this.s,s=o.globalAlpha;o.globalAlpha=e.opacity,o.drawImage(i,0,0,+i.width,+i.height,Math.round(r[4]),Math.round(r[5]),Math.round(i.width*r[0]),Math.round(i.height*r[3])),o.globalAlpha=s,n&&o.restore()}as(this,o,t)},e(us,Xn),us.prototype.Za=function(t,e,o,i,r){ds(this,t,e,o,i,r,this.a,void 0,void 0)},us.prototype.ke=o,us.prototype.af=function(){return this.W},e(ms,us),ms.prototype.rc=function(t,e){if(this.j){fs(this,e);var o=t.ka(),i=this.coordinates.length,o=cs(this,o,0,o.length,t.sa(),!1,!1);this.a.push([4,i,o,this.j,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]),this.b.push([4,i,o,this.za,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]),vs(this,e)}},ms.prototype.qc=function(t,e){if(this.j){fs(this,e);var o=t.ka(),i=this.coordinates.length,o=cs(this,o,0,o.length,t.sa(),!1,!1);this.a.push([4,i,o,this.j,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]),this.b.push([4,i,o,this.za,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]),vs(this,e)}},ms.prototype.ke=function(){gs(this),this.c=this.g=void 0,this.j=this.za=null,this.G=this.B=this.u=this.T=this.s=this.o=this.l=this.C=this.i=void 0},ms.prototype.Xb=function(t){var e=t.cc(),o=t.Gb(),i=t.pe(1),r=t.Tb(1),n=t.jc();this.g=e[0],this.c=e[1],this.za=i,this.j=r,this.i=o[1],this.l=t.l,this.o=n[0],this.s=n[1],this.T=t.T,this.u=t.o,this.C=t.c,this.B=t.u,this.G=o[0]},e(bs,us),od=bs.prototype,od.af=function(){return this.c||(this.c=vt(this.W),0<this.f&&gt(this.c,this.resolution*(this.f+1)/2,this.c)),this.c},od.kd=function(t,e){var o=this.g,i=o.lineWidth;void 0!==o.strokeStyle&&void 0!==i&&(xs(this),fs(this,e),this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash],[1]),o=t.ka(),ws(this,o,0,o.length,t.sa()),this.b.push([12]),vs(this,e))},od.Xe=function(t,e){var o=this.g,i=o.lineWidth;if(void 0!==o.strokeStyle&&void 0!==i){xs(this),fs(this,e),this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash],[1]);var r,n,o=t.Eb(),i=t.ka(),s=t.sa(),p=0;for(r=0,n=o.length;r<n;++r)p=ws(this,i,p,o[r],s);this.b.push([12]),vs(this,e)}},od.ke=function(){this.g.nf!=this.coordinates.length&&this.a.push([12]),gs(this),this.g=null},od.Vb=function(t,e){var o=e.a;this.g.strokeStyle=Ho(o?o:Rg),o=e.c,this.g.lineCap=void 0!==o?o:"round",o=e.g,this.g.lineDash=o?o:Lg,o=e.i,this.g.lineJoin=void 0!==o?o:"round",o=e.f,this.g.lineWidth=void 0!==o?o:1,o=e.j,this.g.miterLimit=void 0!==o?o:10,this.g.lineWidth>this.f&&(this.f=this.g.lineWidth,this.c=null)},e(Ss,us),od=Ss.prototype,od.Rd=function(t,e){var o=this.g,i=o.strokeStyle;if(void 0!==o.fillStyle||void 0!==i){Es(this,t),fs(this,e),this.b.push([9,Go(Ng)]),void 0!==o.strokeStyle&&this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash]);var r=t.ka(),i=this.coordinates.length;cs(this,r,0,r.length,t.sa(),!1,!1),r=[1],i=[2,i],this.a.push(r,i),this.b.push(r,i),i=[7],this.b.push(i),void 0!==o.fillStyle&&this.a.push(i),void 0!==o.strokeStyle&&(o=[12],this.a.push(o),this.b.push(o)),vs(this,e)}},od.Ze=function(t,e){var o=this.g;Es(this,t),fs(this,e),this.b.push([9,Go(Ng)]),void 0!==o.strokeStyle&&this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash]);var o=t.Eb(),i=t.Ob();Ts(this,i,0,o,t.sa()),vs(this,e)},od.Ye=function(t,e){var o=this.g,i=o.strokeStyle;if(void 0!==o.fillStyle||void 0!==i){Es(this,t),fs(this,e),this.b.push([9,Go(Ng)]),void 0!==o.strokeStyle&&this.b.push([10,o.strokeStyle,o.lineWidth,o.lineCap,o.lineJoin,o.miterLimit,o.lineDash]);var r,n,o=t.c,i=ah(t),s=t.sa(),p=0;for(r=0,n=o.length;r<n;++r)p=Ts(this,i,p,o[r],s);vs(this,e)}},od.ke=function(){gs(this),this.g=null;var t=this.ra;if(0!==t){var e,o,i=this.coordinates;for(e=0,o=i.length;e<o;++e)i[e]=t*Math.round(i[e]/t)}},od.af=function(){return this.c||(this.c=vt(this.W),0<this.f&&gt(this.c,this.resolution*(this.f+1)/2,this.c)),this.c},od.Vb=function(t,e){var o=this.g;if(t){var i=t.b;o.fillStyle=Ho(i?i:Ng)}else o.fillStyle=void 0;e?(i=e.a,o.strokeStyle=Ho(i?i:Rg),i=e.c,o.lineCap=void 0!==i?i:"round",i=e.g,o.lineDash=i?i.slice():Lg,i=e.i,o.lineJoin=void 0!==i?i:"round",i=e.f,o.lineWidth=void 0!==i?i:1,i=e.j,o.miterLimit=void 0!==i?i:10,o.lineWidth>this.f&&(this.f=o.lineWidth,this.c=null)):(o.strokeStyle=void 0,o.lineCap=void 0,o.lineDash=null,o.lineJoin=void 0,o.lineWidth=void 0,o.miterLimit=void 0)},e(Ms,us),Ms.prototype.Zb=function(t){if(t){var e=t.b;e?(e=e.b,e=Ho(e?e:Ng),this.g?this.g.fillStyle=e:this.g={fillStyle:e}):this.g=null;var o=t.f;if(o){var e=o.a,i=o.c,r=o.g,n=o.i,s=o.f,o=o.j,i=void 0!==i?i:"round",r=r?r.slice():Lg,n=void 0!==n?n:"round",s=void 0!==s?s:1,o=void 0!==o?o:10,e=Ho(e?e:Rg);if(this.c){var p=this.c;p.lineCap=i,p.lineDash=r,p.lineJoin=n,p.lineWidth=s,p.miterLimit=o,p.strokeStyle=e}else this.c={lineCap:i,lineDash:r,lineJoin:n,lineWidth:s,miterLimit:o,strokeStyle:e}}else this.c=null;var a=t.g,e=t.c,i=t.i,r=t.s,s=t.j,o=t.a,n=t.Fa(),p=t.l,h=t.o;t=void 0!==a?a:"10px sans-serif",p=void 0!==p?p:"center",h=void 0!==h?h:"middle",this.i?(a=this.i,a.font=t,a.textAlign=p,a.textBaseline=h):this.i={font:t,textAlign:p,textBaseline:h},this.j=void 0!==n?n:"",this.l=void 0!==e?e:0,this.o=void 0!==i?i:0,this.s=void 0!==r&&r,this.T=void 0!==s?s:0,this.u=void 0!==o?o:1}else this.j=""};var Ug=["Polygon","LineString","Image","Text"];e(Ps,ls),Ps.prototype.xa=function(t,e,o,i,r){var n=dn(this.j,.5,.5,1/e,-1/e,-o,-t[0],-t[1]),s=this.i;s.clearRect(0,0,1,1);var p;return void 0!==this.c&&(p=Tt(),jt(p,t),gt(p,e*this.c,p)),js(this,s,n,o,i,function(t){if(0<s.getImageData(0,0,1,1).data[3]){if(t=r(t))return t;s.clearRect(0,0,1,1)}},p)},Ps.prototype.b=function(t,e){var o=void 0!==t?t.toString():"0",i=this.a[o];return void 0===i&&(i={},this.a[o]=i),o=i[e],void 0===o&&(o=new Gg[e](this.s,this.f,this.o,this.l),i[e]=o),o},Ps.prototype.g=function(){return m(this.a)},Ps.prototype.Za=function(t,e,o,i,r,n){var s=Object.keys(this.a).map(Number);s.sort($);var p=this.f,a=p[0],h=p[1],l=p[2],p=p[3],a=[a,h,a,p,l,p,l,h];fe(a,0,8,2,o,a),t.save(),t.beginPath(),t.moveTo(a[0],a[1]),t.lineTo(a[2],a[3]),t.lineTo(a[4],a[5]),t.lineTo(a[6],a[7]),t.clip(),n=n?n:Ug;for(var u,c,a=0,h=s.length;a<h;++a)for(u=this.a[s[a].toString()],l=0,p=n.length;l<p;++l)c=u[n[l]],void 0!==c&&c.Za(t,e,o,i,r);t.restore()};var Gg={Image:ms,LineString:bs,Polygon:Ss,Text:Ms},$g={Point:function(t,e,o,i){var r=o.a;if(r){if(r.vd()!=Ag)return;var n=t.b(o.b,"Image");n.Xb(r),n.rc(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),Cs(t,e.ka(),2,2,i))},LineString:function(t,e,o,i){var r=o.g;if(r){var n=t.b(o.b,"LineString");n.Vb(null,r),n.kd(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),Cs(t,eh(e),2,2,i))},Polygon:function(t,e,o,i){var r=o.f,n=o.g;if(r||n){var s=t.b(o.b,"Polygon");s.Vb(r,n),s.Ze(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),Cs(t,qe(e),2,2,i))},MultiPoint:function(t,e,o,i){var r=o.a;if(r){if(r.vd()!=Ag)return;var n=t.b(o.b,"Image");n.Xb(r),n.qc(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),o=e.ka(),Cs(t,o,o.length,e.sa(),i))},MultiLineString:function(t,e,o,i){var r=o.g;if(r){var n=t.b(o.b,"LineString");n.Vb(null,r),n.Xe(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),e=ih(e),Cs(t,e,e.length,2,i))},MultiPolygon:function(t,e,o,i){var r=o.f,n=o.g;if(n||r){var s=t.b(o.b,"Polygon");s.Vb(r,n),s.Ye(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),e=ph(e),Cs(t,e,e.length,2,i))},GeometryCollection:function(t,e,o,i){e=e.f;var r,n;for(r=0,n=e.length;r<n;++r)(0,$g[e[r].X()])(t,e[r],o,i)},Circle:function(t,e,o,i){var r=o.f,n=o.g;if(r||n){var s=t.b(o.b,"Polygon");s.Vb(r,n),s.Rd(e,i)}(r=o.Fa())&&(t=t.b(o.b,"Text"),t.Zb(r),Cs(t,e.td(),2,2,i))}};e(ks,Mn),ks.prototype.i=function(t){this.state=t?jg:Ag,Cn(this)},ks.prototype.load=function(){this.state==Cg&&(this.state=Pg,Cn(this),this.c(this.i.bind(this)))},ks.prototype.a=function(){return this.g};var Hg,Xg=-1<navigator.userAgent.indexOf("OPR"),Kg=-1<navigator.userAgent.indexOf("Edge");Hg=!(!navigator.userAgent.match("CriOS")&&"chrome"in window&&"Google Inc."===navigator.vendor&&0==Xg&&0==Kg),e(Gs,Mn),Gs.prototype.la=function(){this.state==Pg&&(P(this.Cd),this.Cd=null),Mn.prototype.la.call(this)},Gs.prototype.a=function(){return this.i},Gs.prototype.Bd=function(){var t=this.sb.U();t==Ag&&(this.i=Fs($t(this.g)/this.c,Ot(this.g)/this.c,this.o,this.sb.resolution,0,this.c,this.g,this.l,[{extent:this.sb.D(),image:this.sb.a()}],0)),this.state=t,Cn(this)},Gs.prototype.load=function(){if(this.state==Cg){this.state=Pg,Cn(this);var t=this.sb.U();t==Ag||t==jg?this.Bd():(this.Cd=E(this.sb,"change",function(){var t=this.sb.U();t!=Ag&&t!=jg||(P(this.Cd),this.Cd=null,this.Bd())},this),this.sb.load())}},e($s,B),od=$s.prototype,od.xa=o,od.va=function(){return this.j},od.ua=function(){return this.S},od.wa=function(){return this.f},od.U=function(){return this.Ka},od.ta=function(){this.v()},od.qa=function(t){this.j=Hs(t),this.v()},e(Ks,$s),Ks.prototype.W=function(t,e,o,i){var r=this.f;if(r&&i&&!ne(r,i)){if(this.a){if(this.ra==this.g&&ne(this.a.T,i)&&this.a.resolution==e&&this.a.f==o&&Pt(this.a.D(),t))return this.a;N(this.a),this.a=null}return this.a=new Gs(r,i,t,e,o,function(t,e,o){return this.Lc(t,e,o,r)}.bind(this)),this.ra=this.g,this.a}return r&&(i=r),this.Lc(t,e,o,i)},Ks.prototype.o=function(t){switch(t=t.target,t.U()){case Pg:this.b(new qs(Wg,t));break;case Ag:this.b(new qs(zg,t));break;case jg:this.b(new qs(qg,t))}},e(qs,L);var Wg="imageloadstart",zg="imageloadend",qg="imageloaderror";e(Vs,Ks),Vs.prototype.Lc=function(t,e,o,i){e=Ws(this,e);var r=this.P;return r&&this.Z==this.g&&r.resolution==e&&r.f==o&&wt(r.D(),t)?r:(t=t.slice(),Kt(t,this.oa),(i=this.fa(t,e,o,[$t(t)/e*o,Ot(t)/e*o],i))&&(r=new ks(t,e,o,this.j,i)),this.P=r,this.Z=this.g,r)},e(Ys,Vs),od=Ys.prototype,od.rj=function(t,e,o,i,r){var n=new Ps(.5*e/o,t,e,this.c.Aa,this.Aa);this.c.rd(t,e,r);var s=!1;return this.c.Kb(t,function(t){var i;if(!(i=s)){var r;if((i=t.zc())?r=i.call(t,e):this.s&&(r=this.s(t,e)),r){var p,a=!1;for(Array.isArray(r)||(r=[r]),i=0,p=r.length;i<p;++i)a=Rs(n,t,r[i],Ls(e,o),this.Sm,this)||a;i=a}else i=!1}s=i},this),As(n),s?null:(this.l[0]!=i[0]||this.l[1]!=i[1]?(this.i.canvas.width=i[0],this.i.canvas.height=i[1],this.l[0]=i[0],this.l[1]=i[1]):this.i.clearRect(0,0,i[0],i[1]),t=Zs(this,Dt(t),e,o,i),n.Za(this.i,o,t,0,{}),this.u=n,this.i.canvas)},od.xa=function(t,e,o,r,n){if(this.u){var s={};return this.u.xa(t,e,0,r,function(t){var e=i(t).toString();if(!(e in s))return s[e]=!0,n(t)})}},od.Pm=function(){return this.c},od.Qm=function(){return this.B},od.Rm=function(){return this.s},od.Sm=function(){this.v()},od.Tm=function(){Xs(this,this.c.U())},od.nh=function(t){this.B=void 0!==t?t:Bn,this.s=t?On(this.B):void 0,this.v()},e(Js,ns),Js.prototype.xa=function(t,e,o,i){var r=this.a;return r.ga().xa(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,r)})},Js.prototype.Bc=function(t,e,o,i){if(this.f&&this.f.a())if(this.a.ga()instanceof Ys){if(t=un(e.pixelToCoordinateTransform,t.slice()),this.xa(t,e,zt,this))return o.call(i,this.a,null)}else if(this.l||(this.l=gn(this.s.slice())),e=un(this.l,t.slice()),this.c||(this.c=Xo(1,1)),this.c.clearRect(0,0,1,1),this.c.drawImage(this.f?this.f.a():null,e[0],e[1],1,1,0,0,1,1),e=this.c.getImageData(0,0,1,1).data,0<e[3])return o.call(i,this.a,e)},Js.prototype.j=function(t,e){var o=t.pixelRatio,i=t.viewState,r=i.center,n=i.resolution,s=this.a.ga(),p=t.viewHints,a=t.extent;if(void 0!==e.extent&&(a=Bt(a,e.extent)),p[0]||p[1]||Xt(a)||(i=s.W(a,n,o,i.projection))&&_n(this,i)&&(this.f=i),this.f){var i=this.f,p=i.D(),a=i.resolution,h=i.f,n=o*a/(n*h),l=pn(this.s);yn(l,o*t.size[0]/2,o*t.size[1]/2),fn(l,n,n),yn(l,h*(p[0]-r[0])/a,h*(r[1]-p[3])/a),this.l=null,es(t.attributions,i.j),os(t,s)}return!!this.f},e(_s,ns),_s.prototype.i=function(t,e,o){var i=hs(this,t,0);ps(this,"precompose",o,t,i),Qs(this,o,t,e),as(this,o,t,i)},_s.prototype.j=function(t,e){function o(t){return t=t.U(),t==ag||4==t||3==t&&!v}var i=t.pixelRatio,r=t.viewState,n=r.projection,s=this.a,p=s.ga(),a=p.pb(n),r=a.wc(r.resolution,this.B),h=a.Ga(r),l=t.extent;if(void 0!==e.extent&&(l=Bt(l,e.extent)),Xt(l))return!1;var h=Co(a,l,h),u={};u[r]={};var c,f,y,d,g=this.Ue(p,n,u),v=s.c(),m=this.o,b=new fo(0,0,0,0);for(y=h.ba;y<=h.da;++y)for(d=h.ea;d<=h.ha;++d)c=p.vc(r,y,d,i,n),o(c)||(c=Gi(c)),o(c)?u[r][c.ya.toString()]=c:(f=Eo(a,c.ya,g,b,m),f||(c=Mo(a,c.ya,b,m))&&g(r+1,c));g=Object.keys(u).map(Number),g.sort($),m=this.l,m.length=0;var w,b=0;for(y=g.length;b<y;++b)for(w in c=g[b],d=u[c])c=d[w],c.U()==ag&&m.push(c);return is(t.usedTiles,p,r,h),rs(t,p,a,i,n,l,r,s.f()),ts(t,p),os(t,p),!0},_s.prototype.Bc=function(t,e,o,i){var r=this.c.canvas,n=e.size,s=e.pixelRatio;if(r.width=n[0]*s,r.height=n[1]*s,this.i(e,Vr(this.a),this.c),t=this.c.getImageData(t[0],t[1],1,1).data,0<t[3])return o.call(i,this.a,t)},e(tp,ns),tp.prototype.i=function(t,e,o){var i=t.extent,r=t.pixelRatio,n=e.sd?t.skippedFeatureUids:{},s=t.viewState,p=s.projection,s=s.rotation,a=p.D(),h=this.a.ga(),l=hs(this,t,0);ps(this,"precompose",o,t,l);var u=e.extent,c=void 0!==u;if(c&&ss(o,t,u),(u=this.l)&&!u.g()){var f,y=0,d=0;if(I(this.a,"render")){f=o.canvas.width;var g=o.canvas.height;if(s){var v=Math.round(Math.sqrt(f*f+g*g)),y=(v-f)/2,d=(v-g)/2;f=g=v}this.o.canvas.width=f,this.o.canvas.height=g,f=this.o}else f=o;if(g=f.globalAlpha,f.globalAlpha=e.opacity,f!=o&&f.translate(y,d),e=t.size[0]*r,v=t.size[1]*r,An(f,-s,e/2,v/2),u.Za(f,r,l,s,n),h.G&&p.a&&!wt(a,i)){for(var p=i[0],h=$t(a),m=0;p<a[0];)--m,l=h*m,l=hs(this,t,l),u.Za(f,r,l,s,n),p+=h;for(m=0,p=i[2];p>a[2];)++m,l=h*m,l=hs(this,t,l),u.Za(f,r,l,s,n),p-=h;l=hs(this,t,0)}An(f,s,e/2,v/2),f!=o&&(ps(this,"render",f,t,l),o.drawImage(f.canvas,-y,-d),f.translate(-y,-d)),f.globalAlpha=g}c&&o.restore(),as(this,o,t,l)},tp.prototype.xa=function(t,e,o,r){if(this.l){var n=this.a,s={};return this.l.xa(t,e.viewState.resolution,e.viewState.rotation,{},function(t){var e=i(t).toString();if(!(e in s))return s[e]=!0,o.call(r,t,n)})}},tp.prototype.G=function(){Qn(this)},tp.prototype.j=function(t){function e(t){var e,i=t.zc();if(i?e=i.call(t,h):(i=o.j)&&(e=i(t,h)),e){if(e){if(i=!1,Array.isArray(e))for(var r=0,n=e.length;r<n;++r)i=Rs(c,t,e[r],Ls(h,l),this.G,this)||i;else i=Rs(c,t,e,Ls(h,l),this.G,this)||i;
-t=i}else t=!1;this.c=this.c||t}}var o=this.a,i=o.ga();es(t.attributions,i.j),os(t,i);var r=t.viewHints[0],n=t.viewHints[1],s=o.Z,p=o.fa;if(!this.c&&!s&&r||!p&&n)return!0;var a=t.extent,p=t.viewState,r=p.projection,h=p.resolution,l=t.pixelRatio,n=o.g,u=o.i,s=o.get("renderOrder");if(void 0===s&&(s=Ns),a=gt(a,u*h),u=p.projection.D(),i.G&&p.projection.a&&!wt(u,t.extent)&&(t=Math.max($t(a)/2,$t(u)),a[0]=u[0]-t,a[2]=u[2]+t),!this.c&&this.C==h&&this.B==n&&this.u==s&&wt(this.T,a))return!0;this.l=null,this.c=!1;var c=new Ps(.5*h/l,a,h,i.Aa,o.i);if(i.rd(a,h,r),s){var f=[];i.Kb(a,function(t){f.push(t)},this),f.sort(s),f.forEach(e,this)}else i.Kb(a,e,this);return As(c),this.C=h,this.B=n,this.u=s,this.T=a,this.l=c,!0},e(ep,_s);var Vg={image:Ug,hybrid:["Polygon","LineString"]},Yg={hybrid:["Image","Text"],vector:Ug};ep.prototype.i=function(t,e,o){var i=hs(this,t,0);ps(this,"precompose",o,t,i);var r=e.extent,n=void 0!==r;if(n&&ss(o,t,r),r=this.a.u,r!==Bg&&Qs(this,o,t,e),r!==Fg){var s=this.a,r=Yg[s.u],p=t.pixelRatio,a=e.sd?t.skippedFeatureUids:{},h=t.viewState,l=h.center,u=h.rotation,c=t.size,h=p/h.resolution,f=s.ga(),y=f.gb(),d=hs(this,t,0);I(s,"render")?(this.c.canvas.width=o.canvas.width,this.c.canvas.height=o.canvas.height,s=this.c):s=o;var g=s.globalAlpha;s.globalAlpha=e.opacity,e=this.l;var v,m,b,w,x,S,T,E,f=f.tileGrid;for(m=0,b=e.length;m<b;++m)w=e[m],T=w.f,x=f.Ia(w.ya,this.o),v=w.ya[0],S="tile-pixels"==w.l.yb(),v=f.Ga(v),E=v/y,v=Math.round(p*c[0]/2),w=Math.round(p*c[1]/2),S?(x=Ut(x),pn(this.T),x=dn(this.T,v,w,h*E,h*E,u,(x[0]-l[0])/E,(l[1]-x[1])/E)):x=d,An(s,-u,v,w),T.Ad.Za(s,p,x,u,a,r),An(s,u,v,w);s!=o&&(ps(this,"render",s,t,d),o.drawImage(s.canvas,0,0)),s.globalAlpha=g}n&&o.restore(),as(this,o,t,i)},ep.prototype.xa=function(t,e,o,r){var n=e.viewState.resolution;e=e.viewState.rotation;var s,p,a,h,l,u,c=this.a,f={},y=this.l,d=c.ga(),g=d.tileGrid;for(a=0,h=y.length;a<h;++a)u=y[a],p=u.ya,l=d.tileGrid.Ia(p,this.o),bt(l,t)&&("tile-pixels"===u.l.yb()?(l=Ut(l),n=d.gb(),p=g.Ga(p[0])/n,p=[(t[0]-l[0])/p,(l[1]-t[1])/p]):p=t,u=u.f.Ad,s=s||u.xa(p,n,e,{},function(t){var e=i(t).toString();if(!(e in f))return f[e]=!0,o.call(r,t,c)}));return s},ep.prototype.C=function(){Qn(this)},ep.prototype.j=function(t,e){var o=_s.prototype.j.call(this,t,e);if(o)for(var i=Object.keys(t.Ce||{}),r=0,n=this.l.length;r<n;++r){var s=this.l[r];op(this,s,t);var p=s,s=t,a=this.a,h=Vg[a.u];if(h){var l=s.pixelRatio,u=p.f,c=a.g;if(!V(u.li,i)||u.Rf!==c){u.li=i,u.Rf=c;var c=p.g,f=a.ga(),y=f.tileGrid,d=p.ya[0],g=y.Ga(d),a=wo(y.Va(d)),d=y.Ga(d),v=d/g,m=a[0]*l*v,b=a[1]*l*v;c.canvas.width=m/v+.5,c.canvas.height=b/v+.5,c.scale(1/v,1/v),c.translate(m/2,b/2),v="tile-pixels"==p.l.yb(),g=l/g,f=f.gb(),d/=f,y=y.Ia(p.ya,this.o),p=pn(this.T),v?(fn(p,g*d,g*d),yn(p,-a[0]*f/2,-a[1]*f/2)):(a=Dt(y),fn(p,g,-g),yn(p,-a[0],-a[1])),u.Ad.Za(c,l,p,0,s.skippedFeatureUids||{},h)}}}return o},e(ip,vn),ip.prototype.ng=function(t){return t instanceof Tn?new Js(t):t instanceof En?new _s(t):t instanceof Hn?new ep(t):t instanceof $n?new tp(t):null},ip.prototype.X=function(){return"canvas"},ip.prototype.Pf=function(t){if(t){var e=this.g,o=t.pixelRatio,i=Math.round(t.size[0]*o),o=Math.round(t.size[1]*o);this.b.width!=i||this.b.height!=o?(this.b.width=i,this.b.height=o):e.clearRect(0,0,i,o);var r=t.viewState.rotation;mn(t),rp(this,"precompose",t);var n=t.layerStatesArray;Y(n),An(e,r,i/2,o/2);var s,p,a,h,l=t.viewState.resolution;for(s=0,p=n.length;s<p;++s)h=n[s],a=h.layer,a=wn(this,a),rn(h,l)&&"ready"==h.mi&&a.j(t,h)&&a.i(t,h,e);An(e,-r,i/2,o/2),rp(this,"postcompose",t),this.a||(this.b.style.display="",this.a=!0),xn(this,t),t.postRenderFunctions.push(bn)}else this.a&&(this.b.style.display="none",this.a=!1)},e(sp,np),sp.prototype.X=function(){return 35632},e(pp,np),pp.prototype.X=function(){return 35633},e(ap,sp);var Zg=new ap;e(hp,pp);var Jg=new hp,_g=35044;e(yp,j),od=yp.prototype,od.la=function(){A(this.j);var t=this.b;if(!t.isContextLost()){for(var e in this.a)t.deleteBuffer(this.a[e].buffer);for(e in this.f)t.deleteProgram(this.f[e]);for(e in this.c)t.deleteShader(this.c[e]);t.deleteFramebuffer(this.i),t.deleteRenderbuffer(this.o),t.deleteTexture(this.s)}},od.Pn=function(){return this.b},od.Qn=function(){g(this.a),g(this.c),g(this.f),this.o=this.s=this.i=this.l=null},od.Rn=function(){},od.ve=function(t){return t!=this.l&&(this.b.useProgram(t),this.l=t,!0)},e(Tp,Xn),Tp.prototype.qc=function(t,e){this.g.push(this.a.length),this.s.push(e);var o=t.ka();Mp(this,o,o.length,t.sa())},Tp.prototype.rc=function(t,e){this.g.push(this.a.length),this.s.push(e);var o=t.ka();Mp(this,o,o.length,t.sa())},Tp.prototype.Za=function(t,e,o,r,n,s,p,a,h,l,u){s=t.b,dp(t,34962,this.T),dp(t,34963,this.l);var c,f=bp(t,Zg,Jg);this.G?c=this.G:this.G=c=new lp(s,f),t.ve(f),s.enableVertexAttribArray(c.f),s.vertexAttribPointer(c.f,2,5126,!1,32,0),s.enableVertexAttribArray(c.b),s.vertexAttribPointer(c.b,2,5126,!1,32,8),s.enableVertexAttribArray(c.c),s.vertexAttribPointer(c.c,2,5126,!1,32,16),s.enableVertexAttribArray(c.a),s.vertexAttribPointer(c.a,1,5126,!1,32,24),s.enableVertexAttribArray(c.g),s.vertexAttribPointer(c.g,1,5126,!1,32,28),f=pn(this.La),fn(f,2/(o*n[0]),2/(o*n[1])),cn(f,-r),yn(f,-(e[0]-this.o[0]),-(e[1]-this.o[1])),e=pn(this.Aa),fn(e,2/n[0],2/n[1]),n=pn(this.Ka),0!==r&&cn(n,-r),s.uniformMatrix4fv(c.j,!1,cp(this.ra,f)),s.uniformMatrix4fv(c.o,!1,cp(this.ra,e)),s.uniformMatrix4fv(c.l,!1,cp(this.ra,n)),s.uniform1f(c.i,p);var y;if(void 0===h)Ap(this,s,t,a,this.oa,this.u);else{if(l)t:{for(r=t.g?5125:5123,t=t.g?4:2,n=this.g.length-1,p=this.j.length-1;0<=p;--p)for(s.bindTexture(3553,this.j[p]),l=0<p?this.i[p-1]:0,e=this.i[p];0<=n&&this.g[n]>=l;){if(y=this.g[n],o=this.s[n],f=i(o).toString(),void 0===a[f]&&o.V()&&(void 0===u||Ht(u,o.V().D()))&&(s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),s.drawElements(4,e-y,r,y*t),e=h(o))){a=e;break t}e=y,n--}a=void 0}else s.clear(s.COLOR_BUFFER_BIT|s.DEPTH_BUFFER_BIT),Ap(this,s,t,a,this.j,this.i),a=(a=h(null))?a:void 0;y=a}return s.disableVertexAttribArray(c.f),s.disableVertexAttribArray(c.b),s.disableVertexAttribArray(c.c),s.disableVertexAttribArray(c.a),s.disableVertexAttribArray(c.g),y},Tp.prototype.Xb=function(t){var e=t.cc(),o=t.Tb(1),r=t.md(),n=t.pe(1),s=t.l,p=t.jc(),a=t.T,h=t.o,l=t.Gb();t=t.c;var u;0===this.c.length?this.c.push(o):(u=this.c[this.c.length-1],i(u)!=i(o)&&(this.u.push(this.a.length),this.c.push(o))),0===this.f.length?this.f.push(n):(u=this.f[this.f.length-1],i(u)!=i(n)&&(this.i.push(this.a.length),this.f.push(n))),this.C=e[0],this.B=e[1],this.S=l[1],this.na=r[1],this.za=r[0],this.P=s,this.W=p[0],this.Qa=p[1],this.$a=h,this.Z=a,this.fa=t,this.Ib=l[0]},e(jp,ls),jp.prototype.b=function(t,e){var o=this.a[e];return void 0===o&&(o=new Qg[e](this.i,this.c),this.a[e]=o),o},jp.prototype.g=function(){return m(this.a)},jp.prototype.Za=function(t,e,o,i,r,n,s,p){var a,h,l;for(a=0,h=Ug.length;a<h;++a)l=this.a[Ug[a]],void 0!==l&&l.Za(t,e,o,i,r,n,s,p,void 0,!1)},jp.prototype.xa=function(t,e,o,i,r,n,s,p,a,h){var l=e.b;l.bindFramebuffer(l.FRAMEBUFFER,vp(e));var u;return void 0!==this.f&&(u=gt(Mt(t),i*this.f)),Rp(this,e,t,i,r,s,p,a,function(t){var e=new Uint8Array(4);if(l.readPixels(0,0,1,1,l.RGBA,l.UNSIGNED_BYTE,e),0<e[3]&&(t=h(t)))return t},!0,u)};var Qg={Image:Tp},tv=[1,1];e(Ip,Xn),od=Ip.prototype,od.ud=function(t){this.Xb(t.a)},od.pc=function(t){switch(t.X()){case"Point":this.rc(t,null);break;case"MultiPoint":this.qc(t,null);break;case"GeometryCollection":this.We(t,null)}},od.Ve=function(t,e){var o=(0,e.c)(t);o&&Ht(this.g,o.D())&&(this.ud(e),this.pc(o))},od.We=function(t){t=t.f;var e,o;for(e=0,o=t.length;e<o;++e)this.pc(t[e])},od.rc=function(t,e){var o=this.b,i=new jp(1,this.g).b(0,"Image");i.Xb(this.a),i.rc(t,e),Cp(i,o),i.Za(this.b,this.f,this.i,this.j,this.l,this.c,1,{},void 0,!1),Ep(i,o)()},od.qc=function(t,e){var o=this.b,i=new jp(1,this.g).b(0,"Image");i.Xb(this.a),i.qc(t,e),Cp(i,o),i.Za(this.b,this.f,this.i,this.j,this.l,this.c,1,{},void 0,!1),Ep(i,o)()},od.Xb=function(t){this.a=t},e(Dp,sp);var ev=new Dp;e(Fp,pp);var ov=new Fp;e(Bp,Jn),Bp.prototype.lh=function(t,e,o){Gp(this,"precompose",o,t),dp(o,34962,this.W);var i,r=o.b,n=bp(o,ev,ov);this.T?i=this.T:this.T=i=new Op(r,n),o.ve(n)&&(r.enableVertexAttribArray(i.b),r.vertexAttribPointer(i.b,2,5126,!1,16,0),r.enableVertexAttribArray(i.a),r.vertexAttribPointer(i.a,2,5126,!1,16,8),r.uniform1i(i.c,0)),r.uniformMatrix4fv(i.i,!1,cp(this.B,this.s)),r.uniformMatrix4fv(i.f,!1,cp(this.B,this.u)),r.uniform1f(i.g,e.opacity),r.bindTexture(3553,this.tb),r.drawArrays(5,0,4),Gp(this,"postcompose",o,t)},Bp.prototype.xf=function(){this.i=this.tb=null,this.j=void 0},e($p,Bp),$p.prototype.xa=function(t,e,o,i){var r=this.a;return r.ga().xa(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,r)})},$p.prototype.yf=function(t,e){var o=this.f.g,i=t.pixelRatio,r=t.viewState,n=r.center,s=r.resolution,p=r.rotation,a=this.c,h=this.tb,l=this.a.ga(),u=t.viewHints,c=t.extent;return void 0!==e.extent&&(c=Bt(c,e.extent)),u[0]||u[1]||Xt(c)||(r=l.W(c,s,i,r.projection))&&_n(this,r)&&(a=r,h=Hp(this,r),this.tb&&t.postRenderFunctions.push(function(t,e){t.isContextLost()||t.deleteTexture(e)}.bind(null,o,this.tb))),a&&(o=this.f.c.j,Xp(this,o.width,o.height,i,n,s,p,a.D()),this.o=null,i=this.s,pn(i),fn(i,1,-1),yn(i,0,-1),this.c=a,this.tb=h,es(t.attributions,a.j),os(t,l)),!0},$p.prototype.le=function(t,e){return void 0!==this.xa(t,e,zt,this)},$p.prototype.Bc=function(t,e,o,i){if(this.c&&this.c.a())if(this.a.ga()instanceof Ys){var r=un(e.pixelToCoordinateTransform,t.slice());if(this.xa(r,e,zt,this))return o.call(i,this.a,null)}else{if(r=[this.c.a().width,this.c.a().height],!this.o){var n=e.size;e=sn(),yn(e,-1,-1),fn(e,2/n[0],2/n[1]),yn(e,0,n[1]),fn(e,1,-1);var n=gn(this.u.slice()),s=sn();yn(s,0,r[1]),fn(s,1,-1),fn(s,r[0]/2,r[1]/2),yn(s,1,1),an(s,n),an(s,e),this.o=s}if(t=un(this.o,t.slice()),!(0>t[0]||t[0]>r[0]||0>t[1]||t[1]>r[1])&&(this.l||(this.l=Xo(1,1)),this.l.clearRect(0,0,1,1),this.l.drawImage(this.c.a(),t[0],t[1],1,1,0,0,1,1),r=this.l.getImageData(0,0,1,1).data,0<r[3]))return o.call(i,this.a,r)}},e(Kp,sp);var iv=new Kp;e(Wp,pp);var rv=new Wp;e(qp,Bp),od=qp.prototype,od.la=function(){gp(this.f.c,this.G),Bp.prototype.la.call(this)},od.Ue=function(t,e,o){var i=this.f;return function(r,n){return Jf(t,e,r,n,function(t){var e=i.a.b.hasOwnProperty(t.Xa());return e&&(o[r]||(o[r]={}),o[r][t.ya.toString()]=t),e})}},od.xf=function(){Bp.prototype.xf.call(this),this.c=null},od.yf=function(t,e,o){var i=this.f,r=o.b,n=t.viewState,s=n.projection,a=this.a,h=a.ga(),l=h.pb(s),u=l.wc(n.resolution),c=l.Ga(u),f=h.kf(u,t.pixelRatio,s),y=f[0]/wo(l.Va(u),this.P)[0],d=c/y,g=h.gb(y)*h.df(s),v=n.center,m=t.extent,b=Co(l,m,c);if(this.l&&go(this.l,b)&&this.o==h.g)d=this.C;else{var w=[b.da-b.ba+1,b.ha-b.ea+1],x=p(Math.max(w[0]*f[0],w[1]*f[1])),w=d*x,S=l.Tc(u),T=S[0]+b.ba*f[0]*d,d=S[1]+b.ea*f[1]*d,d=[T,d,T+w,d+w];Up(this,t,x),r.viewport(0,0,x,x),r.clearColor(0,0,0,0),r.clear(16384),r.disable(3042),x=bp(o,this.S,this.Z),o.ve(x),this.c||(this.c=new zp(r,x)),dp(o,34962,this.G),r.enableVertexAttribArray(this.c.b),r.vertexAttribPointer(this.c.b,2,5126,!1,16,0),r.enableVertexAttribArray(this.c.a),r.vertexAttribPointer(this.c.a,2,5126,!1,16,8),r.uniform1i(this.c.g,0),o={},o[u]={};var E,M,C,P=this.Ue(h,s,o),A=a.c(),x=!0,T=Tt(),j=new fo(0,0,0,0);for(M=b.ba;M<=b.da;++M)for(C=b.ea;C<=b.ha;++C)if(S=h.vc(u,M,C,y,s),void 0===e.extent||(E=l.Ia(S.ya,T),Ht(E,e.extent))){if(E=S.U(),(E=E==ag||4==E||3==E&&!A)||(S=Gi(S)),E=S.U(),E==ag){if(i.a.b.hasOwnProperty(S.Xa())){o[u][S.ya.toString()]=S;continue}}else if(4==E||3==E&&!A)continue;x=!1,E=Eo(l,S.ya,P,j,T),E||(S=Mo(l,S.ya,j,T))&&P(u+1,S)}e=Object.keys(o).map(Number),e.sort($);for(var N,P=new Float32Array(4),A=0,j=e.length;A<j;++A)for(N in M=o[e[A]])S=M[N],E=l.Ia(S.ya,T),P[0]=2*(E[2]-E[0])/w,P[1]=2*(E[3]-E[1])/w,P[2]=2*(E[0]-d[0])/w-1,P[3]=2*(E[1]-d[1])/w-1,r.uniform4fv(this.c.f,P),Jp(i,S,f,g*y),r.drawArrays(5,0,4);x?(this.l=b,this.C=d,this.o=h.g):(this.C=this.l=null,this.o=-1,t.animate=!0)}is(t.usedTiles,h,u,b);var L=i.j;return rs(t,h,l,y,s,m,u,a.f(),function(t){t.U()!=ag||i.a.b.hasOwnProperty(t.Xa())||t.Xa()in L.a||L.c([t,Ao(l,t.ya),l.Ga(t.ya[0]),f,g*y])},this),ts(t,h),os(t,h),r=this.s,pn(r),yn(r,(Math.round(v[0]/c)*c-d[0])/(d[2]-d[0]),(Math.round(v[1]/c)*c-d[1])/(d[3]-d[1])),0!==n.rotation&&cn(r,n.rotation),fn(r,t.size[0]*n.resolution/(d[2]-d[0]),t.size[1]*n.resolution/(d[3]-d[1])),yn(r,-.5,-.5),!0},od.Bc=function(t,e,o,i){if(this.i){t=un(this.s,[t[0]/e.size[0],(e.size[1]-t[1])/e.size[1]].slice()),t=[t[0]*this.j,t[1]*this.j],e=this.f.c.b,e.bindFramebuffer(e.FRAMEBUFFER,this.i);var r=new Uint8Array(4);if(e.readPixels(t[0],t[1],1,1,e.RGBA,e.UNSIGNED_BYTE,r),0<r[3])return o.call(i,this.a,r)}},e(Vp,Bp),od=Vp.prototype,od.lh=function(t,e,o){this.l=e;var i=t.viewState,r=this.c;r&&!r.g()&&r.Za(o,i.center,i.resolution,i.rotation,t.size,t.pixelRatio,e.opacity,e.sd?t.skippedFeatureUids:{})},od.la=function(){var t=this.c;t&&(Np(t,this.f.c)(),this.c=null),Bp.prototype.la.call(this)},od.xa=function(t,e,o,r){if(this.c&&this.l){var n=e.viewState,s=this.a,p={};return this.c.xa(t,this.f.c,n.center,n.resolution,n.rotation,e.size,e.pixelRatio,this.l.opacity,{},function(t){var e=i(t).toString();if(!(e in p))return p[e]=!0,o.call(r,t,s)})}},od.le=function(t,e){if(this.c&&this.l){var o=e.viewState;return kp(this.c,t,this.f.c,o.resolution,o.rotation,e.pixelRatio,this.l.opacity,e.skippedFeatureUids)}return!1},od.Bc=function(t,e,o,i){if(t=un(e.pixelToCoordinateTransform,t.slice()),this.le(t,e))return o.call(i,this.a,null)},od.mh=function(){Qn(this)},od.yf=function(t,e,o){function i(t){var e,o=t.zc();if(o?e=o.call(t,h):(o=r.j)&&(e=o(t,h)),e){if(e){if(o=!1,Array.isArray(e))for(var i=0,n=e.length;i<n;++i)o=Rs(c,t,e[i],Ls(h,l),this.mh,this)||o;else o=Rs(c,t,e,Ls(h,l),this.mh,this)||o;t=o}else t=!1;this.o=this.o||t}}var r=this.a;e=r.ga(),es(t.attributions,e.j),os(t,e);var n=t.viewHints[0],s=t.viewHints[1],p=r.Z,a=r.fa;if(!this.o&&!p&&n||!a&&s)return!0;var s=t.extent,p=t.viewState,n=p.projection,h=p.resolution,l=t.pixelRatio,p=r.g,u=r.i,a=r.get("renderOrder");if(void 0===a&&(a=Ns),s=gt(s,u*h),!this.o&&this.S==h&&this.P==p&&this.G==a&&wt(this.C,s))return!0;this.c&&t.postRenderFunctions.push(Np(this.c,o)),this.o=!1;var c=new jp(.5*h/l,s,r.i);if(e.rd(s,h,n),a){var f=[];e.Kb(s,function(t){f.push(t)},this),f.sort(a),f.forEach(i,this)}else e.Kb(s,i,this);return Lp(c,o),this.S=h,this.P=p,this.G=a,this.C=s,this.c=c,!0},od=Yp.prototype,od.clear=function(){this.f=0,this.b={},this.g=this.a=null},od.forEach=function(t,e){for(var o=this.a;o;)t.call(e,o.Gc,o.ec,this),o=o.Ab},od.get=function(t){return t=this.b[t],n(void 0!==t,15),t===this.g?t.Gc:(t===this.a?(this.a=this.a.Ab,this.a.Uc=null):(t.Ab.Uc=t.Uc,t.Uc.Ab=t.Ab),t.Ab=null,t.Uc=this.g,this.g=this.g.Ab=t,t.Gc)},od.pop=function(){var t=this.a;return delete this.b[t.ec],t.Ab&&(t.Ab.Uc=null),this.a=t.Ab,this.a||(this.g=null),--this.f,t.Gc},od.replace=function(t,e){this.get(t),this.b[t].Gc=e},od.set=function(t,e){n(!(t in this.b),16);var o={ec:t,Ab:null,Uc:this.g,Gc:e};this.g?this.g.Ab=o:this.a=o,this.g=o,this.b[t]=o,++this.f},e(Zp,vn),od=Zp.prototype,od.ng=function(t){return t instanceof Tn?new $p(this,t):t instanceof En?new qp(this,t):t instanceof $n?new Vp(this,t):null},od.la=function(){var t=this.g;t.isContextLost()||this.a.forEach(function(e){e&&t.deleteTexture(e.tb)}),N(this.c),vn.prototype.la.call(this)},od.uj=function(t,e){for(var o,i=this.g;1024<this.a.f-this.i;){if(o=this.a.a.Gc)i.deleteTexture(o.tb);else{if(+this.a.a.ec==e.index)break;--this.i}this.a.pop()}},od.X=function(){return"webgl"},od.Dm=function(t){t.preventDefault(),this.a.clear(),this.i=0,t=this.f;for(var e in t)t[e].xf()},od.Em=function(){Qp(this),this.l.render()},od.Pf=function(t){var e=this.c,o=this.g;if(o.isContextLost())return!1;if(!t)return this.o&&(this.b.style.display="none",this.o=!1),!1;this.T=t.focus,this.a.set((-t.index).toString(),null),++this.i,_p(this,"precompose",t);var i=[],r=t.layerStatesArray;Y(r);var n,s,p,a,h=t.viewState.resolution;for(n=0,s=r.length;n<s;++n)a=r[n],rn(a,h)&&"ready"==a.mi&&(p=wn(this,a.layer),p.yf(t,a,e)&&i.push(a));for(r=t.size[0]*t.pixelRatio,h=t.size[1]*t.pixelRatio,this.b.width==r&&this.b.height==h||(this.b.width=r,this.b.height=h),o.bindFramebuffer(36160,null),o.clearColor(0,0,0,0),o.clear(16384),o.enable(3042),o.viewport(0,0,this.b.width,this.b.height),n=0,s=i.length;n<s;++n)a=i[n],p=wn(this,a.layer),p.lh(t,a,e);this.o||(this.b.style.display="",this.o=!0),mn(t),1024<this.a.f-this.i&&t.postRenderFunctions.push(this.uj.bind(this)),0!==this.j.b.length&&(t.postRenderFunctions.push(this.G),t.animate=!0),_p(this,"postcompose",t),xn(this,t),t.postRenderFunctions.push(bn)},od.xa=function(t,e,o,i,r,n){var s;if(this.g.isContextLost())return!1;var p,a=e.viewState,h=e.layerStatesArray;for(p=h.length-1;0<=p;--p){s=h[p];var l=s.layer;if(rn(s,a.resolution)&&r.call(n,l)&&(s=wn(this,l).xa(t,e,o,i)))return s}},od.kh=function(t,e,o,i){var r=!1;if(this.g.isContextLost())return!1;var n,s=e.viewState,p=e.layerStatesArray;for(n=p.length-1;0<=n;--n){var a=p[n],h=a.layer;if(rn(a,s.resolution)&&o.call(i,h)&&(r=wn(this,h).le(t,e)))return!0}return r},od.jh=function(t,e,o,i,r){if(this.g.isContextLost())return!1;var n,s,p=e.viewState,a=e.layerStatesArray;for(s=a.length-1;0<=s;--s){n=a[s];var h=n.layer;if(rn(n,p.resolution)&&r.call(i,h)&&(n=wn(this,h).Bc(t,e,o,i)))return n}};var nv=["canvas","webgl"];e(ta,B),od=ta.prototype,od.ij=function(t){this.l.push(t)},od.jj=function(t){this.j.push(t)},od.gg=function(t){this.tc().Qc().push(t)},od.hg=function(t){this.o.push(t)},od.ig=function(t){var e=t.j;void 0!==e&&(this.Af[e.toString()]=t),t.setMap(this)},od.ab=function(t){this.render(),Array.prototype.push.apply(this.S,arguments)},od.la=function(){N(this.ra),N(this.B),C(this.a,"wheel",this.Nc,this),C(this.a,"mousewheel",this.Nc,this),void 0!==this.c&&(window.removeEventListener("resize",this.c,!1),this.c=void 0),this.i&&(cancelAnimationFrame(this.i),this.i=void 0),this.Xg(null),B.prototype.la.call(this)},od.Sd=function(t,e,o,i,r){if(this.f)return t=this.Ja(t),this.B.xa(t,this.f,e,void 0!==o?o:null,void 0!==i?i:zt,void 0!==r?r:null)},od.Gl=function(t,e,o,i,r){if(this.f)return this.B.jh(t,this.f,e,void 0!==o?o:null,void 0!==i?i:zt,void 0!==r?r:null)},od.Xk=function(t,e,o){return!!this.f&&(t=this.Ja(t),this.B.kh(t,this.f,void 0!==e?e:zt,void 0!==o?o:null))},od.Kj=function(t){return this.Ja(this.Ud(t))},od.Ud=function(t){var e=this.a.getBoundingClientRect();return t=t.changedTouches?t.changedTouches[0]:t,[t.clientX-e.left,t.clientY-e.top]},od.jf=function(){return this.get(av)},od.uc=function(){var t=this.jf();return void 0!==t?"string"==typeof t?document.getElementById(t):t:null},od.Ja=function(t){var e=this.f;return e?un(e.pixelToCoordinateTransform,t.slice()):null},od.Ij=function(){return this.l},od.bk=function(){return this.o},od.ak=function(t){return t=this.Af[t.toString()],void 0!==t?t:null},od.Pj=function(){return this.j},od.tc=function(){return this.get(sv)},od.Wg=function(){return this.tc().Qc()},od.Ca=function(t){var e=this.f;return e?un(e.coordinateToPixelTransform,t.slice(0,2)):null},od.kb=function(){return this.get(pv)},od.$=function(){return this.get(hv)},od.rk=function(){return this.a},od.pk=function(t,e,o,i){var r=this.f;return r&&e in r.wantedTiles&&r.wantedTiles[e][t.Xa()]?(t=o[0]-r.focus[0],o=o[1]-r.focus[1],65536*Math.log(i)+Math.sqrt(t*t+o*o)/i):1/0},od.Nc=function(t,e){var o=new ki(e||t.type,this,t);this.Jg(o)},od.Jg=function(t){if(this.f){this.W=t.coordinate,t.frameState=this.f;var e,o=this.j.a;if(!1!==this.b(t))for(e=o.length-1;0<=e;e--){var i=o[e];if(i.f()&&!i.handleEvent(t))break}}},od.Pk=function(){var t=this.f,e=this.oa;if(0!==e.b.length){var o=16,i=o;if(t){var r=t.viewHints;r[0]&&(o=this.Jb?8:0,i=2),r[1]&&(o=this.ac?8:0,i=2)}e.j<o&&(Wi(e),qi(e,o,i))}for(e=this.Ka,o=0,i=e.length;o<i;++o)e[o](this,t);e.length=0},od.Rk=function(){this.render()},od.Tk=function(){var t;if(this.jf()&&(t=this.uc()),this.s){for(var e=0,o=this.s.length;e<o;++e)P(this.s[e]);this.s=null}t?(t.appendChild(this.a),t=this.fa?this.fa:t,this.s=[E(t,"keydown",this.Nc,this),E(t,"keypress",this.Nc,this)],this.c||(this.c=this.Yc.bind(this),window.addEventListener("resize",this.c,!1))):(Wo(this.a),void 0!==this.c&&(window.removeEventListener("resize",this.c,!1),this.c=void 0)),this.Yc()},od.Uk=function(){this.render()},od.Wk=function(){this.render()},od.Vk=function(){this.P&&(P(this.P),this.P=null);var t=this.$();t&&(this.P=E(t,"propertychange",this.Wk,this)),this.render()},od.Ck=function(){this.G&&(this.G.forEach(P),this.G=null);var t=this.tc();t&&(this.G=[E(t,"propertychange",this.render,this),E(t,"change",this.render,this)]),this.render()},od.Ko=function(){this.i&&cancelAnimationFrame(this.i),this.Z()},od.render=function(){void 0===this.i&&(this.i=requestAnimationFrame(this.Z))},od.Do=function(t){return this.l.remove(t)},od.Eo=function(t){return this.j.remove(t)},od.Go=function(t){return this.tc().Qc().remove(t)},od.Ho=function(t){return this.o.remove(t)},od.Jo=function(t){var e,o,r,n=this.kb(),s=this.$(),p=Tt(),a=null;if(void 0!==n&&0<n[0]&&0<n[1]&&s&&io(s)){var a=Qe(s,this.f?this.f.viewHints:void 0),h=this.tc().ff(),l={};for(e=0,o=h.length;e<o;++e)l[i(h[e].layer)]=h[e];r=s.U(),a={animate:!1,attributions:{},coordinateToPixelTransform:this.La,extent:p,focus:this.W?this.W:r.center,index:this.ub++,layerStates:l,layerStatesArray:h,logos:hd({},this.Le),pixelRatio:this.Me,pixelToCoordinateTransform:this.Je,postRenderFunctions:[],size:n,skippedFeatureUids:this.Ce,tileQueue:this.oa,time:t,usedTiles:{},viewState:r,viewHints:a,wantedTiles:{}}}if(a){for(t=this.S,e=n=0,o=t.length;e<o;++e)s=t[e],s(this,a)&&(t[n++]=s);t.length=n,a.extent=Ft(r.center,r.resolution,r.rotation,a.size,p)}this.f=a,this.B.Pf(a),a&&(a.animate&&this.render(),Array.prototype.push.apply(this.Ka,a.postRenderFunctions),0!==this.S.length||a.viewHints[0]||a.viewHints[1]||Pt(a.extent,this.Aa)||(this.b(new zo("moveend",this,a)),vt(a.extent,this.Aa))),this.b(new zo("postrender",this,a)),setTimeout(this.Pk.bind(this),0)},od.ai=function(t){this.set(sv,t)},od.Tf=function(t){this.set(pv,t)},od.Xg=function(t){this.set(av,t)},od.Wo=function(t){this.set(hv,t)},od.ki=function(t){t=i(t).toString(),this.Ce[t]=!0,this.render()},od.Yc=function(){var t=this.uc();if(t){var e=getComputedStyle(t);this.Tf([t.offsetWidth-parseFloat(e.borderLeftWidth)-parseFloat(e.paddingLeft)-parseFloat(e.paddingRight)-parseFloat(e.borderRightWidth),t.offsetHeight-parseFloat(e.borderTopWidth)-parseFloat(e.paddingTop)-parseFloat(e.paddingBottom)-parseFloat(e.borderBottomWidth)])}else this.Tf(void 0)},od.oi=function(t){t=i(t).toString(),delete this.Ce[t],this.render()};var sv="layergroup",pv="size",av="target",hv="view";tn(),e(oa,B),od=oa.prototype,od.Td=function(){return this.get(bv)},od.Hl=function(){return this.j},od.he=function(){return this.get(wv)},od.Eg=function(){return this.get(xv)},od.Yg=function(){return this.get(Sv)},od.Fg=function(){return this.get(Tv)},od.xk=function(){for(var t=this.f;t.lastChild;)t.removeChild(t.lastChild);(t=this.Td())&&this.f.appendChild(t)},od.Hk=function(){this.c&&(Wo(this.f),P(this.c),this.c=null);var t=this.he();t&&(this.c=E(t,"postrender",this.render,this),na(this),t=this.s?t.u:t.C,this.o?t.insertBefore(this.f,t.childNodes[0]||null):t.appendChild(this.f))},od.render=function(){na(this)},od.Lk=function(){na(this)},od.Nk=function(){if(na(this),void 0!==this.get(Sv)&&this.autoPan){var t=this.he();if(void 0!==t&&t.uc()){var e=ia(t.uc(),t.kb()),o=this.Td(),i=o.offsetWidth,r=o.currentStyle||getComputedStyle(o),i=i+(parseInt(r.marginLeft,10)+parseInt(r.marginRight,10)),r=o.offsetHeight,n=o.currentStyle||getComputedStyle(o),r=r+(parseInt(n.marginTop,10)+parseInt(n.marginBottom,10)),s=ia(o,[i,r]),o=this.l;wt(e,s)||(i=s[0]-e[0],r=e[2]-s[2],n=s[1]-e[1],s=e[3]-s[3],e=[0,0],0>i?e[0]=i-o:0>r&&(e[0]=Math.abs(r)+o),0>n?e[1]=n-o:0>s&&(e[1]=Math.abs(s)+o),0===e[0]&&0===e[1])||(o=t.$().bb(),i=t.Ca(o),e=[i[0]+e[0],i[1]+e[1]],this.i&&(this.i.source=o,t.ab(lo(this.i))),t.$().rb(t.Ja(e)))}}},od.Ok=function(){na(this)},od.Vh=function(t){this.set(bv,t)},od.setMap=function(t){this.set(wv,t)},od.ci=function(t){this.set(xv,t)},od.tf=function(t){this.set(Sv,t)},od.fi=function(t){this.set(Tv,t)};var lv="bottom-left",uv="bottom-center",cv="bottom-right",fv="center-left",yv="center-center",dv="center-right",gv="top-left",vv="top-center",mv="top-right",bv="element",wv="map",xv="offset",Sv="position",Tv="positioning";e(sa,qo),od=sa.prototype,od.setMap=function(t){var e=this.a;t!==e&&(e&&(e=e.$())&&C(e,U(md),this.ce,this),qo.prototype.setMap.call(this,t),t&&(this.s.push(E(t,"propertychange",this.Ik,this)),0===this.f.Wg().yc()&&this.f.ai(t.tc()),t=t.$()))&&(E(t,U(md),this.ce,this),io(t)&&(this.f.Yc(),aa(this)))},od.Ik=function(t){t.key===hv&&((t=t.oldValue)&&C(t,U(md),this.ce,this),t=this.a.$(),E(t,U(md),this.ce,this))},od.ce=function(){this.f.$().ie(this.a.$().Pa())},od.Vl=function(t){t.preventDefault(),la(this)},od.Ul=function(){return this.l},od.Xl=function(t){this.l!==t&&(this.l=t,this.element.classList.toggle("ol-uncollapsible"),!t&&this.j&&la(this))},od.Wl=function(t){this.l&&this.j!==t&&la(this)},od.Tl=function(){return this.j},od.ck=function(){return this.f},e(ua,qo);var Ev=[1,2,5];ua.prototype.yb=function(){return this.get(Mv)},ua.prototype.S=function(){fa(this)},ua.prototype.G=function(t){this.set(Mv,t)};var Mv="units",Cv="degrees",Pv="imperial",Av="nautical",jv="metric",Nv="us";e(ya,qo),ya.prototype.la=function(){N(this.l),qo.prototype.la.call(this)};var Lv=0;od=ya.prototype,od.setMap=function(t){qo.prototype.setMap.call(this,t),t&&t.render()},od.vk=function(t){var e=this.a,o=e.$(),i=o.Ma();e.ab(co({resolution:i,duration:this.Z,easing:so})),t=va(this,s(1===this.j?(t.offsetX-this.W[0]/2)/this.B:(t.offsetY-this.W[1]/2)/this.o,0,1)),o.Yb(o.constrainResolution(t))},od.wk=function(t){if(!this.C&&t.b.target===this.element.firstElementChild&&(ro(this.a.$(),1),this.G=t.clientX,this.S=t.clientY,this.C=!0,0===this.u.length)){t=this.Hg;var e=this.Ig;this.u.push(E(document,"mousemove",t,this),E(document,"touchmove",t,this),E(document,"pointermove",t,this),E(document,"mouseup",e,this),E(document,"touchend",e,this),E(document,"pointerup",e,this))}},od.Hg=function(t){if(this.C){var e=this.element.firstElementChild;this.f=va(this,s(1===this.j?(t.clientX-this.G+parseInt(e.style.left,10))/this.B:(t.clientY-this.S+parseInt(e.style.top,10))/this.o,0,1)),this.a.$().Yb(this.f),ga(this,this.f),this.G=t.clientX,this.S=t.clientY}},od.Ig=function(){if(this.C){var t=this.a,e=t.$();ro(e,-1),t.ab(co({resolution:this.f,duration:this.Z,easing:so})),t=e.constrainResolution(this.f),e.Yb(t),this.C=!1,this.S=this.G=void 0,this.u.forEach(P),this.u.length=0}},e(ma,qo),ma.prototype.j=function(t){t.preventDefault();var e=this.a;t=e.$();var o=this.f?this.f:t.l.D(),e=e.kb();t.$e(o,e)},e(ba,B),od=ba.prototype,od.la=function(){this.rf(!1),B.prototype.la.call(this)},od.Sn=function(t){if(null!==t.alpha){var e=l(t.alpha);this.set(Rv,e),"boolean"==typeof t.absolute&&t.absolute?this.set(Dv,e):"number"==typeof t.webkitCompassHeading&&-1!=t.webkitCompassAccuracy&&this.set(Dv,l(t.webkitCompassHeading))}null!==t.beta&&this.set(kv,l(t.beta)),null!==t.gamma&&this.set(Iv,l(t.gamma)),this.v()},od.Cj=function(){return this.get(Rv)},od.Fj=function(){return this.get(kv)},od.Mj=function(){return this.get(Iv)},od.tl=function(){return this.get(Dv)},od.Sg=function(){return this.get(Fv)},od.ul=function(){if(Hd){var t=this.Sg();t&&!this.a?this.a=E(window,"deviceorientation",this.Sn,this):t||null===this.a||(P(this.a),this.a=null)}},od.rf=function(t){this.set(Fv,t)};var Rv="alpha",kv="beta",Iv="gamma",Dv="heading",Fv="tracking";e(wa,B),od=wa.prototype,od.clone=function(){var t=new wa(this.N());t.Dc(this.f);var e=this.V();return e&&t.Oa(e.clone()),(e=this.i)&&t.sf(e),t},od.V=function(){return this.get(this.f)},od.vl=function(){return this.a},od.Oj=function(){return this.f},od.wl=function(){return this.i},od.zc=function(){return this.j},od.xl=function(){this.v()},od.ae=function(){this.c&&(P(this.c),this.c=null);var t=this.V();t&&(this.c=E(t,"change",this.xl,this)),this.v()},od.Oa=function(t){this.set(this.f,t)},od.sf=function(t){this.j=(this.i=t)?xa(t):void 0,this.v()},od.Wb=function(t){this.a=t,this.v()},od.Dc=function(t){C(this,U(this.f),this.ae,this),this.f=t,E(this,U(this.f),this.ae,this),this.ae()};var Ov=document.implementation.createDocument("","",null),Bv=Da();e(Ya,Wa),od=Ya.prototype,od.X=function(){return"json"},od.Ub=function(t,e){return this.Vc(Za(t),za(this,t,e))},od.Ha=function(t,e){return this.Gf(Za(t),za(this,t,e))},od.Wc=function(t,e){return this.Ih(Za(t),za(this,t,e))},od.Sa=function(t){return this.Oh(Za(t))},od.Fd=function(t,e){return JSON.stringify(this.Zc(t,e))},od.$b=function(t,e){return JSON.stringify(this.Ge(t,e))},od.$c=function(t,e){return JSON.stringify(this.He(t,e))},e(th,ye),od=th.prototype,od.kj=function(t){this.A?W(this.A,t):this.A=t.slice(),this.v()},od.clone=function(){var t=new th(null);return t.aa(this.ia,this.A.slice()),t},od.vb=function(t,e,o,i){return i<mt(this.D(),t,e)?i:(this.C!=this.g&&(this.B=Math.sqrt(xe(this.A,0,this.A.length,this.a,0)),this.C=this.g),Te(this.A,0,this.A.length,this.a,this.B,!1,t,e,o,i))},od.zj=function(t,e){return Ue(this.A,0,this.A.length,this.a,t,e)},od.$l=function(t,e){return"XYM"!=this.ia&&"XYZM"!=this.ia?null:_a(this.A,0,this.A.length,this.a,t,void 0!==e&&e)},od.Y=function(){return Ae(this.A,0,this.A.length,this.a)},od.vg=function(t,e){return Ja(this.A,0,this.A.length,this.a,t,e)},od.am=function(){var t,e=this.A,o=this.a,i=e[0],r=e[1],n=0;for(t=0+o;t<this.A.length;t+=o)var s=e[t],p=e[t+1],n=n+Math.sqrt((s-i)*(s-i)+(p-r)*(p-r)),i=s,r=p;return n},od.Mc=function(t){var e=[];return e.length=Ne(this.A,0,this.A.length,this.a,t,e,0),t=new th(null),t.aa("XY",e),t},od.X=function(){return"LineString"},od.Na=function(t){return Ge(this.A,0,this.A.length,this.a,t)},od.ma=function(t,e){t?(ve(this,e,t,1),this.A||(this.A=[]),this.A.length=Ce(this.A,0,t,this.a),this.v()):this.aa("XY",null)},od.aa=function(t,e){ge(this,t,e),this.v()},e(oh,ye),od=oh.prototype,od.lj=function(t){this.A?W(this.A,t.ka().slice()):this.A=t.ka().slice(),this.c.push(this.A.length),this.v()},od.clone=function(){var t=new oh(null);return t.aa(this.ia,this.A.slice(),this.c.slice()),t},od.vb=function(t,e,o,i){return i<mt(this.D(),t,e)?i:(this.l!=this.g&&(this.C=Math.sqrt(Se(this.A,0,this.c,this.a,0)),this.l=this.g),Ee(this.A,0,this.c,this.a,this.C,!1,t,e,o,i))},od.cm=function(t,e,o){return"XYM"!=this.ia&&"XYZM"!=this.ia||0===this.A.length?null:Qa(this.A,this.c,this.a,t,void 0!==e&&e,void 0!==o&&o)},od.Y=function(){return je(this.A,0,this.c,this.a)},od.Eb=function(){return this.c},od.Uj=function(t){if(0>t||this.c.length<=t)return null;var e=new th(null);return e.aa(this.ia,this.A.slice(0===t?0:this.c[t-1],this.c[t])),e},od.od=function(){var t,e,o=this.A,i=this.c,r=this.ia,n=[],s=0;for(t=0,e=i.length;t<e;++t){var p=i[t],a=new th(null);a.aa(r,o.slice(s,p)),n.push(a),s=p}return n},od.Mc=function(t){var e,o,i=[],r=[],n=this.A,s=this.c,p=this.a,a=0,h=0;for(e=0,o=s.length;e<o;++e){var l=s[e],h=Ne(n,a,l,p,t,i,h);r.push(h),a=l}return i.length=h,t=new oh(null),t.aa("XY",i,r),t},od.X=function(){return"MultiLineString"},od.Na=function(t){t:{var e,o,i=this.A,r=this.c,n=this.a,s=0;for(e=0,o=r.length;e<o;++e){if(Ge(i,s,r[e],n,t)){t=!0;break t}s=r[e]}t=!1}return t},od.ma=function(t,e){if(t){ve(this,e,t,2),this.A||(this.A=[]);var o=Pe(this.A,0,t,this.a,this.c);this.A.length=0===o.length?0:o[o.length-1],this.v()}else this.aa("XY",null,this.c)},od.aa=function(t,e,o){ge(this,t,e),this.c=o,this.v()},e(nh,ye),od=nh.prototype,od.nj=function(t){this.A?W(this.A,t.ka()):this.A=t.ka().slice(),this.v()},od.clone=function(){var t=new nh(null);return t.aa(this.ia,this.A.slice()),t},od.vb=function(t,e,o,i){if(i<mt(this.D(),t,e))return i;var r,n,s,p=this.A,a=this.a;for(r=0,n=p.length;r<n;r+=a)if(s=h(t,e,p[r],p[r+1]),s<i){for(i=s,s=0;s<a;++s)o[s]=p[r+s];o.length=a}return i},od.Y=function(){
-return Ae(this.A,0,this.A.length,this.a)},od.ek=function(t){var e=this.A?this.A.length/this.a:0;return 0>t||e<=t?null:(e=new Ie(null),e.aa(this.ia,this.A.slice(t*this.a,(t+1)*this.a)),e)},od.je=function(){var t,e,o=this.A,i=this.ia,r=this.a,n=[];for(t=0,e=o.length;t<e;t+=r){var s=new Ie(null);s.aa(i,o.slice(t,t+r)),n.push(s)}return n},od.X=function(){return"MultiPoint"},od.Na=function(t){var e,o,i,r,n=this.A,s=this.a;for(e=0,o=n.length;e<o;e+=s)if(i=n[e],r=n[e+1],xt(t,i,r))return!0;return!1},od.ma=function(t,e){t?(ve(this,e,t,1),this.A||(this.A=[]),this.A.length=Ce(this.A,0,t,this.a),this.v()):this.aa("XY",null)},od.aa=function(t,e){ge(this,t,e),this.v()},e(sh,ye),od=sh.prototype,od.oj=function(t){if(this.A){var e=this.A.length;W(this.A,t.ka()),t=t.Eb().slice();var o,i;for(o=0,i=t.length;o<i;++o)t[o]+=e}else this.A=t.ka().slice(),t=t.Eb().slice(),this.c.push();this.c.push(t),this.v()},od.clone=function(){for(var t=new sh(null),e=this.c.length,o=Array(e),i=0;i<e;++i)o[i]=this.c[i].slice();return hh(t,this.ia,this.A.slice(),o),t},od.vb=function(t,e,o,i){if(i<mt(this.D(),t,e))return i;if(this.G!=this.g){var r,n,s=this.c,p=0,a=0;for(r=0,n=s.length;r<n;++r)var h=s[r],a=Se(this.A,p,h,this.a,a),p=h[h.length-1];this.S=Math.sqrt(a),this.G=this.g}s=ah(this),p=this.c,a=this.a,r=this.S,n=0;var l,u,h=[NaN,NaN];for(l=0,u=p.length;l<u;++l){var c=p[l];i=Ee(s,n,c,a,r,!0,t,e,o,i,h),n=c[c.length-1]}return i},od.Ac=function(t,e){var o;t:{o=ah(this);var i=this.c,r=this.a,n=0;if(0!==i.length){var s,p;for(s=0,p=i.length;s<p;++s){var a=i[s];if(Oe(o,n,a,r,t,e)){o=!0;break t}n=a[a.length-1]}}o=!1}return o},od.dm=function(){var t,e,o=ah(this),i=this.c,r=0,n=0;for(t=0,e=i.length;t<e;++t)var s=i[t],n=n+be(o,r,s,this.a),r=s[s.length-1];return n},od.Y=function(t){var e;void 0!==t?(e=ah(this).slice(),We(e,this.c,this.a,t)):e=this.A,t=e,e=this.c;var o,i,r=this.a,n=0,s=[],p=0;for(o=0,i=e.length;o<i;++o){var a=e[o];s[p++]=je(t,n,a,r,s[p]),n=a[a.length-1]}return s.length=p,s},od.Rj=function(){var t=new nh(null);return t.aa("XY",ph(this).slice()),t},od.Mc=function(t){var e=[],o=[],i=this.A,r=this.c,n=this.a;t=Math.sqrt(t);var s,p,a=0,h=0;for(s=0,p=r.length;s<p;++s){var l=r[s],u=[],h=Le(i,a,l,n,t,e,h,u);o.push(u),a=l[l.length-1]}return e.length=h,i=new sh(null),hh(i,"XY",e,o),i},od.gk=function(t){if(0>t||this.c.length<=t)return null;var e;0===t?e=0:(e=this.c[t-1],e=e[e.length-1]),t=this.c[t].slice();var o=t[t.length-1];if(0!==e){var i,r;for(i=0,r=t.length;i<r;++i)t[i]-=e}return i=new ze(null),i.aa(this.ia,this.A.slice(e,o),t),i},od.Wd=function(){var t,e,o,i,r=this.ia,n=this.A,s=this.c,p=[],a=0;for(t=0,e=s.length;t<e;++t){var h=s[t].slice(),l=h[h.length-1];if(0!==a)for(o=0,i=h.length;o<i;++o)h[o]-=a;o=new ze(null),o.aa(r,n.slice(a,l),h),p.push(o),a=l}return p},od.X=function(){return"MultiPolygon"},od.Na=function(t){t:{var e,o,i=ah(this),r=this.c,n=this.a,s=0;for(e=0,o=r.length;e<o;++e){var p=r[e];if($e(i,s,p,n,t)){t=!0;break t}s=p[p.length-1]}t=!1}return t},od.ma=function(t,e){if(t){ve(this,e,t,3),this.A||(this.A=[]);var o,i,r=this.A,n=this.a,s=this.c,p=0,s=s?s:[],a=0;for(o=0,i=t.length;o<i;++o)p=Pe(r,p,t[o],n,s[a]),s[a++]=p,p=p[p.length-1];s.length=a,0===s.length?this.A.length=0:(r=s[s.length-1],this.A.length=0===r.length?0:r[r.length-1]),this.v()}else hh(this,"XY",null,this.c)},e(uh,Ya);var Uv={Point:function(t){return void 0!==t.m&&void 0!==t.z?new Ie([t.x,t.y,t.z,t.m],"XYZM"):void 0!==t.z?new Ie([t.x,t.y,t.z],"XYZ"):void 0!==t.m?new Ie([t.x,t.y,t.m],"XYM"):new Ie([t.x,t.y])},LineString:function(t){return new th(t.paths[0],fh(t))},Polygon:function(t){return new ze(t.rings,fh(t))},MultiPoint:function(t){return new nh(t.points,fh(t))},MultiLineString:function(t){return new oh(t.paths,fh(t))},MultiPolygon:function(t){return new sh(t.rings,fh(t))}},Gv={Point:function(t){var e,o=t.Y();return t=t.ia,"XYZ"===t?e={x:o[0],y:o[1],z:o[2]}:"XYM"===t?e={x:o[0],y:o[1],m:o[2]}:"XYZM"===t?e={x:o[0],y:o[1],z:o[2],m:o[3]}:"XY"===t?e={x:o[0],y:o[1]}:n(!1,34),e},LineString:function(t){var e=yh(t);return{hasZ:e.hasZ,hasM:e.hasM,paths:[t.Y()]}},Polygon:function(t){var e=yh(t);return{hasZ:e.hasZ,hasM:e.hasM,rings:t.Y(!1)}},MultiPoint:function(t){var e=yh(t);return{hasZ:e.hasZ,hasM:e.hasM,points:t.Y()}},MultiLineString:function(t){var e=yh(t);return{hasZ:e.hasZ,hasM:e.hasM,paths:t.Y()}},MultiPolygon:function(t){var e=yh(t);t=t.Y(!1);for(var o=[],i=0;i<t.length;i++)for(var r=t[i].length-1;0<=r;r--)o.push(t[i][r]);return{hasZ:e.hasZ,hasM:e.hasM,rings:o}}};od=uh.prototype,od.Vc=function(t,e){var o=ch(t.geometry,e),i=new wa;return this.b&&i.Dc(this.b),i.Oa(o),e&&e.mf&&t.attributes[e.mf]&&i.Wb(t.attributes[e.mf]),t.attributes&&i.H(t.attributes),i},od.Gf=function(t,e){var o=e?e:{};if(t.features){var i,r,n=[],s=t.features;for(o.mf=t.objectIdFieldName,i=0,r=s.length;i<r;++i)n.push(this.Vc(s[i],o));return n}return[this.Vc(t,o)]},od.Ih=function(t,e){return ch(t,e)},od.Oh=function(t){return t.spatialReference&&t.spatialReference.wkid?re("EPSG:"+t.spatialReference.wkid):null},od.He=function(t,e){return dh(t,qa(this,e))},od.Zc=function(t,e){e=qa(this,e);var o={},i=t.V();return i&&(o.geometry=dh(i,e)),i=t.N(),delete i[t.f],o.attributes=m(i)?{}:i,e&&e.featureProjection&&(o.spatialReference={wkid:re(e.featureProjection).eb.split(":").pop()}),o},od.Ge=function(t,e){e=qa(this,e);var o,i,r=[];for(o=0,i=t.length;o<i;++o)r.push(this.Zc(t[o],e));return{features:r}},e(vh,gh),e(mh,vh),e(bh,mh),e(wh,gh),e(xh,gh),e(Sh,xh),e(Th,Sh),e(Eh,Sh),e(Mh,Sh),e(Ch,gh),e(Ph,Ch),e(Ah,xh),e(jh,xh),e(Nh,xh),e(Lh,Sh),e(Rh,Sh),e(kh,vh),e(Ih,Sh),e(Dh,mh),e(Fh,Ch),e(Uh,ce),od=Uh.prototype,od.clone=function(){var t=new Uh(null);return t.Zh(this.f),t},od.vb=function(t,e,o,i){if(i<mt(this.D(),t,e))return i;var r,n,s=this.f;for(r=0,n=s.length;r<n;++r)i=s[r].vb(t,e,o,i);return i},od.Ac=function(t,e){var o,i,r=this.f;for(o=0,i=r.length;o<i;++o)if(r[o].Ac(t,e))return!0;return!1},od.Pd=function(t){Et(1/0,1/0,-(1/0),-(1/0),t);for(var e=this.f,o=0,i=e.length;o<i;++o)At(t,e[o].D());return t},od.cf=function(){return Gh(this.f)},od.pd=function(t){if(this.o!=this.g&&(g(this.i),this.j=0,this.o=this.g),0>t||0!==this.j&&t<this.j)return this;var e=t.toString();if(this.i.hasOwnProperty(e))return this.i[e];var o,i,r=[],n=this.f,s=!1;for(o=0,i=n.length;o<i;++o){var p=n[o],a=p.pd(t);r.push(a),a!==p&&(s=!0)}return s?(t=new Uh(null),$h(t),t.f=r,Hh(t),t.v(),this.i[e]=t):(this.j=t,this)},od.X=function(){return"GeometryCollection"},od.Na=function(t){var e,o,i=this.f;for(e=0,o=i.length;e<o;++e)if(i[e].Na(t))return!0;return!1},od.rotate=function(t,e){for(var o=this.f,i=0,r=o.length;i<r;++i)o[i].rotate(t,e);this.v()},od.scale=function(t,e,o){o||(o=Dt(this.D()));for(var i=this.f,r=0,n=i.length;r<n;++r)i[r].scale(t,e,o);this.v()},od.Zh=function(t){t=Gh(t),$h(this),this.f=t,Hh(this),this.v()},od.oc=function(t){var e,o,i=this.f;for(e=0,o=i.length;e<o;++e)i[e].oc(t);this.v()},od.Pc=function(t,e){var o,i,r=this.f;for(o=0,i=r.length;o<i;++o)r[o].Pc(t,e);this.v()},od.la=function(){$h(this),ce.prototype.la.call(this)},e(Xh,Ya);var $v={Point:function(t){return new Ie(t.coordinates)},LineString:function(t){return new th(t.coordinates)},Polygon:function(t){return new ze(t.coordinates)},MultiPoint:function(t){return new nh(t.coordinates)},MultiLineString:function(t){return new oh(t.coordinates)},MultiPolygon:function(t){return new sh(t.coordinates)},GeometryCollection:function(t,e){var o=t.geometries.map(function(t){return Kh(t,e)});return new Uh(o)}},Hv={Point:function(t){return{type:"Point",coordinates:t.Y()}},LineString:function(t){return{type:"LineString",coordinates:t.Y()}},Polygon:function(t,e){var o;return e&&(o=e.rightHanded),{type:"Polygon",coordinates:t.Y(o)}},MultiPoint:function(t){return{type:"MultiPoint",coordinates:t.Y()}},MultiLineString:function(t){return{type:"MultiLineString",coordinates:t.Y()}},MultiPolygon:function(t,e){var o;return e&&(o=e.rightHanded),{type:"MultiPolygon",coordinates:t.Y(o)}},GeometryCollection:function(t,e){return{type:"GeometryCollection",geometries:t.f.map(function(t){var o=hd({},e);return delete o.featureProjection,Wh(t,o)})}},Circle:function(){return{type:"GeometryCollection",geometries:[]}}};od=Xh.prototype,od.Vc=function(t,e){var o;o="Feature"===t.type?t:{type:"Feature",geometry:t};var i=Kh(o.geometry,e),r=new wa;return this.b&&r.Dc(this.b),r.Oa(i),void 0!==o.id&&r.Wb(o.id),o.properties&&r.H(o.properties),r},od.Gf=function(t,e){var o;if("FeatureCollection"===t.type){o=[];var i,r,n=t.features;for(i=0,r=n.length;i<r;++i)o.push(this.Vc(n[i],e))}else o=[this.Vc(t,e)];return o},od.Ih=function(t,e){return Kh(t,e)},od.Oh=function(t){t=t.crs;var e;return t?"name"==t.type?e=re(t.properties.name):"EPSG"==t.type?e=re("EPSG:"+t.properties.code):n(!1,36):e=this.defaultDataProjection,e},od.Zc=function(t,e){e=qa(this,e);var o={type:"Feature"},i=t.a;return void 0!==i&&(o.id=i),(i=t.V())?o.geometry=Wh(i,e):o.geometry=null,i=t.N(),delete i[t.f],m(i)?o.properties=null:o.properties=i,o},od.Ge=function(t,e){e=qa(this,e);var o,i,r=[];for(o=0,i=t.length;o<i;++o)r.push(this.Zc(t[o],e));return{type:"FeatureCollection",features:r}},od.He=function(t,e){return Wh(t,qa(this,e))},e(zh,Wa),od=zh.prototype,od.X=function(){return"xml"},od.Ub=function(t,e){if(Ma(t))return qh(this,t,e);if(Ca(t))return this.Gh(t,e);if("string"==typeof t){var o=Pa(t);return qh(this,o,e)}return null},od.Ha=function(t,e){if(Ma(t))return Vh(this,t,e);if(Ca(t))return this.kc(t,e);if("string"==typeof t){var o=Pa(t);return Vh(this,o,e)}return[]},od.Wc=function(t,e){if(Ma(t))return this.u(t,e);if(Ca(t)){var o=this.xe(t,[za(this,t,e?e:{})]);return o?o:null}return"string"==typeof t?(o=Pa(t),this.u(o,e)):null},od.Sa=function(t){return Ma(t)?this.Lf(t):Ca(t)?this.Ae(t):"string"==typeof t?(t=Pa(t),this.Lf(t)):null},od.Lf=function(){return this.defaultDataProjection},od.Ae=function(){return this.defaultDataProjection},od.Fd=function(t,e){var o=this.B(t,e);return this.f.serializeToString(o)},od.$b=function(t,e){var o=this.a(t,e);return this.f.serializeToString(o)},od.$c=function(t,e){var o=this.T(t,e);return this.f.serializeToString(o)},e(Yh,zh);var Xv=/^[\s\xa0]*$/;od=Yh.prototype,od.xd=function(t,e){var o=t.localName,i=null;if("FeatureCollection"==o)i="http://www.opengis.net/wfs"===t.namespaceURI?Ua([],this.b,t,e,this):Ua(null,this.b,t,e,this);else if("featureMembers"==o||"featureMember"==o){var r,n,s=e[0],p=s.featureType,a=s.featureNS;if(!p&&t.childNodes){for(p=[],a={},r=0,n=t.childNodes.length;r<n;++r){var h=t.childNodes[r];if(1===h.nodeType){var l=h.nodeName.split(":").pop();if(-1===p.indexOf(l)){var u,c="",f=0,h=h.namespaceURI;for(u in a){if(a[u]===h){c=u;break}++f}c||(c="p"+f,a[c]=h),p.push(c+":"+l)}}}"featureMember"!=o&&(s.featureType=p,s.featureNS=a)}"string"==typeof a&&(r=a,a={},a.p0=r);var y,s={},p=Array.isArray(p)?p:[p];for(y in a){for(l={},r=0,n=p.length;r<n;++r)(-1===p[r].indexOf(":")?"p0":p[r].split(":")[0])===y&&(l[p[r].split(":").pop()]="featureMembers"==o?ja(this.Ff,this):Na(this.Ff,this));s[a[y]]=l}i="featureMember"==o?Ua(void 0,s,t,e):Ua([],s,t,e)}return null===i&&(i=[]),i},od.xe=function(t,e){var o=e[0];o.srsName=t.firstElementChild.getAttribute("srsName");var i=Ua(null,this.Yf,t,e,this);if(i)return Va(i,!1,o)},od.Ff=function(t,e){var o,i;(i=t.getAttribute("fid"))||(i=t.getAttributeNS("http://www.opengis.net/gml","id")||"");var r,n={};for(o=t.firstElementChild;o;o=o.nextElementSibling){var s=o.localName;if(0===o.childNodes.length||1===o.childNodes.length&&(3===o.firstChild.nodeType||4===o.firstChild.nodeType)){var p=Ta(o,!1);Xv.test(p)&&(p=void 0),n[s]=p}else"boundedBy"!==s&&(r=s),n[s]=this.xe(o,e)}return o=new wa(n),r&&o.Dc(r),i&&o.Wb(i),o},od.Nh=function(t,e){var o=this.we(t,e);if(o){var i=new Ie(null);return i.aa("XYZ",o),i}},od.Lh=function(t,e){var o=Ua([],this.Ji,t,e,this);if(o)return new nh(o)},od.Kh=function(t,e){var o=Ua([],this.Ii,t,e,this);if(o){var i=new oh(null);return rh(i,o),i}},od.Mh=function(t,e){var o=Ua([],this.Ki,t,e,this);if(o){var i=new sh(null);return lh(i,o),i}},od.Dh=function(t,e){Ba(this.Ni,t,e,this)},od.Mg=function(t,e){Ba(this.Gi,t,e,this)},od.Eh=function(t,e){Ba(this.Oi,t,e,this)},od.ye=function(t,e){var o=this.we(t,e);if(o){var i=new th(null);return i.aa("XYZ",o),i}},od.oo=function(t,e){var o=Ua(null,this.Hd,t,e,this);if(o)return o},od.Jh=function(t,e){var o=this.we(t,e);if(o){var i=new Re(null);return ke(i,"XYZ",o),i}},od.ze=function(t,e){var o=Ua([null],this.Ke,t,e,this);if(o&&o[0]){var i,r,n=new ze(null),s=o[0],p=[s.length];for(i=1,r=o.length;i<r;++i)W(s,o[i]),p.push(s.length);return n.aa("XYZ",s,p),n}},od.we=function(t,e){return Ua(null,this.Hd,t,e,this)},od.Ji={"http://www.opengis.net/gml":{pointMember:ja(Yh.prototype.Dh),pointMembers:ja(Yh.prototype.Dh)}},od.Ii={"http://www.opengis.net/gml":{lineStringMember:ja(Yh.prototype.Mg),lineStringMembers:ja(Yh.prototype.Mg)}},od.Ki={"http://www.opengis.net/gml":{polygonMember:ja(Yh.prototype.Eh),polygonMembers:ja(Yh.prototype.Eh)}},od.Ni={"http://www.opengis.net/gml":{Point:ja(Yh.prototype.we)}},od.Gi={"http://www.opengis.net/gml":{LineString:ja(Yh.prototype.ye)}},od.Oi={"http://www.opengis.net/gml":{Polygon:ja(Yh.prototype.ze)}},od.Id={"http://www.opengis.net/gml":{LinearRing:Na(Yh.prototype.oo)}},od.kc=function(t,e){var o={featureType:this.featureType,featureNS:this.featureNS};return e&&hd(o,za(this,t,e)),this.xd(t,[o])||[]},od.Ae=function(t){return re(this.srsName?this.srsName:t.firstElementChild.getAttribute("srsName"))},e(al,Yh),od=al.prototype,od.so=function(t,e){var o=Ua([],this.Hi,t,e,this);if(o){var i=new oh(null);return rh(i,o),i}},od.to=function(t,e){var o=Ua([],this.Li,t,e,this);if(o){var i=new sh(null);return lh(i,o),i}},od.pg=function(t,e){Ba(this.Di,t,e,this)},od.ni=function(t,e){Ba(this.Si,t,e,this)},od.wo=function(t,e){return Ua([null],this.Mi,t,e,this)},od.yo=function(t,e){return Ua([null],this.Ri,t,e,this)},od.xo=function(t,e){return Ua([null],this.Ke,t,e,this)},od.ro=function(t,e){return Ua([null],this.Hd,t,e,this)},od.al=function(t,e){var o=Ua(void 0,this.Id,t,e,this);o&&e[e.length-1].push(o)},od.vj=function(t,e){var o=Ua(void 0,this.Id,t,e,this);o&&(e[e.length-1][0]=o)},od.Ph=function(t,e){var o=Ua([null],this.Ti,t,e,this);if(o&&o[0]){var i,r,n=new ze(null),s=o[0],p=[s.length];for(i=1,r=o.length;i<r;++i)W(s,o[i]),p.push(s.length);return n.aa("XYZ",s,p),n}},od.Fh=function(t,e){var o=Ua([null],this.Ei,t,e,this);if(o){var i=new th(null);return i.aa("XYZ",o),i}},od.no=function(t,e){var o=Ua([null],this.Fi,t,e,this);return Et(o[1][0],o[1][1],o[2][0],o[2][1])},od.po=function(t,e){for(var o,i=Ta(t,!1),r=/^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/,n=[];o=r.exec(i);)n.push(parseFloat(o[1])),i=i.substr(o[0].length);if(""===i){if(i=e[0].srsName,r="enu",i&&(r=re(i).b),"neu"===r)for(i=0,r=n.length;i<r;i+=3)o=n[i],n[i]=n[i+1],n[i+1]=o;return i=n.length,2==i&&n.push(0),0===i?void 0:n}},od.Jf=function(t,e){var o=Ta(t,!1).replace(/^\s*|\s*$/g,""),i=e[0].srsName,r=t.parentNode.getAttribute("srsDimension"),n="enu";i&&(n=re(i).b),o=o.split(/\s+/),i=2,t.getAttribute("srsDimension")?i=ol(t.getAttribute("srsDimension")):t.getAttribute("dimension")?i=ol(t.getAttribute("dimension")):r&&(i=ol(r));for(var s,p,a=[],h=0,l=o.length;h<l;h+=i)r=parseFloat(o[h]),s=parseFloat(o[h+1]),p=3===i?parseFloat(o[h+2]):0,"en"===n.substr(0,2)?a.push(r,s,p):a.push(s,r,p);return a},od.Hd={"http://www.opengis.net/gml":{pos:Na(al.prototype.po),posList:Na(al.prototype.Jf)}},od.Ke={"http://www.opengis.net/gml":{interior:al.prototype.al,exterior:al.prototype.vj}},od.Yf={"http://www.opengis.net/gml":{Point:Na(Yh.prototype.Nh),MultiPoint:Na(Yh.prototype.Lh),LineString:Na(Yh.prototype.ye),MultiLineString:Na(Yh.prototype.Kh),LinearRing:Na(Yh.prototype.Jh),Polygon:Na(Yh.prototype.ze),MultiPolygon:Na(Yh.prototype.Mh),Surface:Na(al.prototype.Ph),MultiSurface:Na(al.prototype.to),Curve:Na(al.prototype.Fh),MultiCurve:Na(al.prototype.so),Envelope:Na(al.prototype.no)}},od.Hi={"http://www.opengis.net/gml":{curveMember:ja(al.prototype.pg),curveMembers:ja(al.prototype.pg)}},od.Li={"http://www.opengis.net/gml":{surfaceMember:ja(al.prototype.ni),surfaceMembers:ja(al.prototype.ni)}},od.Di={"http://www.opengis.net/gml":{LineString:ja(Yh.prototype.ye),Curve:ja(al.prototype.Fh)}},od.Si={"http://www.opengis.net/gml":{Polygon:ja(Yh.prototype.ze),Surface:ja(al.prototype.Ph)}},od.Ti={"http://www.opengis.net/gml":{patches:Na(al.prototype.wo)}},od.Ei={"http://www.opengis.net/gml":{segments:Na(al.prototype.yo)}},od.Fi={"http://www.opengis.net/gml":{lowerCorner:ja(al.prototype.Jf),upperCorner:ja(al.prototype.Jf)}},od.Mi={"http://www.opengis.net/gml":{PolygonPatch:Na(al.prototype.xo)}},od.Ri={"http://www.opengis.net/gml":{LineStringSegment:Na(al.prototype.ro)}},od.zi=function(t,e,o){var i=o[o.length-1].srsName;i&&t.setAttribute("srsName",i),i=Sa(t.namespaceURI,"pos"),t.appendChild(i),o=o[o.length-1].srsName,t="enu",o&&(t=re(o).b),e=e.Y(),pl(i,"en"===t.substr(0,2)?e[0]+" "+e[1]:e[1]+" "+e[0])};var Kv={"http://www.opengis.net/gml":{lowerCorner:ka(pl),upperCorner:ka(pl)}};od=al.prototype,od.jp=function(t,e,o){var i=o[o.length-1].srsName;i&&t.setAttribute("srsName",i),$a({node:t},Kv,Bv,[e[0]+" "+e[1],e[2]+" "+e[3]],o,["lowerCorner","upperCorner"],this)},od.wi=function(t,e,o){var i=o[o.length-1].srsName;i&&t.setAttribute("srsName",i),i=Sa(t.namespaceURI,"posList"),t.appendChild(i),hl(i,e,o)},od.Qi=function(t,e){var o=e[e.length-1],i=o.node,r=o.exteriorWritten;return void 0===r&&(o.exteriorWritten=!0),Sa(i.namespaceURI,void 0!==r?"interior":"exterior")},od.Ie=function(t,e,o){var i=o[o.length-1].srsName;"PolygonPatch"!==t.nodeName&&i&&t.setAttribute("srsName",i),"Polygon"===t.nodeName||"PolygonPatch"===t.nodeName?(e=e.Vd(),$a({node:t,srsName:i},Vv,this.Qi,e,o,void 0,this)):"Surface"===t.nodeName&&(i=Sa(t.namespaceURI,"patches"),t.appendChild(i),t=Sa(i.namespaceURI,"PolygonPatch"),i.appendChild(t),this.Ie(t,e,o))},od.Ee=function(t,e,o){var i=o[o.length-1].srsName;"LineStringSegment"!==t.nodeName&&i&&t.setAttribute("srsName",i),"LineString"===t.nodeName||"LineStringSegment"===t.nodeName?(i=Sa(t.namespaceURI,"posList"),t.appendChild(i),hl(i,e,o)):"Curve"===t.nodeName&&(i=Sa(t.namespaceURI,"segments"),t.appendChild(i),t=Sa(i.namespaceURI,"LineStringSegment"),i.appendChild(t),this.Ee(t,e,o))},od.yi=function(t,e,o){var i=o[o.length-1],r=i.srsName,i=i.surface;r&&t.setAttribute("srsName",r),e=e.Wd(),$a({node:t,srsName:r,surface:i},Wv,this.c,e,o,void 0,this)},od.kp=function(t,e,o){var i=o[o.length-1].srsName;i&&t.setAttribute("srsName",i),e=e.je(),$a({node:t,srsName:i},zv,Da("pointMember"),e,o,void 0,this)},od.xi=function(t,e,o){var i=o[o.length-1],r=i.srsName,i=i.curve;r&&t.setAttribute("srsName",r),e=e.od(),$a({node:t,srsName:r,curve:i},qv,this.c,e,o,void 0,this)},od.Ai=function(t,e,o){var i=Sa(t.namespaceURI,"LinearRing");t.appendChild(i),this.wi(i,e,o)},od.Bi=function(t,e,o){var i=this.g(e,o);i&&(t.appendChild(i),this.Ie(i,e,o))},od.lp=function(t,e,o){var i=Sa(t.namespaceURI,"Point");t.appendChild(i),this.zi(i,e,o)},od.vi=function(t,e,o){var i=this.g(e,o);i&&(t.appendChild(i),this.Ee(i,e,o))},od.ad=function(t,e,o){var i=o[o.length-1],r=hd({},i);r.node=t;var n;n=Array.isArray(e)?i.dataProjection?ue(e,i.featureProjection,i.dataProjection):e:Va(e,!0,i),$a(r,Yv,this.g,[n],o,void 0,this)},od.ti=function(t,e,o){var i=e.a;i&&t.setAttribute("fid",i);var i=o[o.length-1],r=i.featureNS,n=e.f;i.Cc||(i.Cc={},i.Cc[r]={});var s=e.N();e=[];var p,a=[];for(p in s){var h=s[p];null!==h&&(e.push(p),a.push(h),p==n||h instanceof ce?p in i.Cc[r]||(i.Cc[r][p]=ka(this.ad,this)):p in i.Cc[r]||(i.Cc[r][p]=ka(pl)))}p=hd({},i),p.node=t,$a(p,i.Cc,Da(void 0,r),a,o,e)};var Wv={"http://www.opengis.net/gml":{surfaceMember:ka(al.prototype.Bi),polygonMember:ka(al.prototype.Bi)}},zv={"http://www.opengis.net/gml":{pointMember:ka(al.prototype.lp)}},qv={"http://www.opengis.net/gml":{lineStringMember:ka(al.prototype.vi),curveMember:ka(al.prototype.vi)}},Vv={"http://www.opengis.net/gml":{exterior:ka(al.prototype.Ai),interior:ka(al.prototype.Ai)}},Yv={"http://www.opengis.net/gml":{Curve:ka(al.prototype.Ee),MultiCurve:ka(al.prototype.xi),Point:ka(al.prototype.zi),MultiPoint:ka(al.prototype.kp),LineString:ka(al.prototype.Ee),MultiLineString:ka(al.prototype.xi),LinearRing:ka(al.prototype.wi),Polygon:ka(al.prototype.Ie),MultiPolygon:ka(al.prototype.yi),Surface:ka(al.prototype.Ie),MultiSurface:ka(al.prototype.yi),Envelope:ka(al.prototype.jp)}},Zv={MultiLineString:"lineStringMember",MultiCurve:"curveMember",MultiPolygon:"polygonMember",MultiSurface:"surfaceMember"};al.prototype.c=function(t,e){return Sa("http://www.opengis.net/gml",Zv[e[e.length-1].node.nodeName])},al.prototype.g=function(t,e){var o,i=e[e.length-1],r=i.multiSurface,n=i.surface,s=i.curve,i=i.multiCurve;return Array.isArray(t)?o="Envelope":(o=t.X(),"MultiPolygon"===o&&!0===r?o="MultiSurface":"Polygon"===o&&!0===n?o="Surface":"LineString"===o&&!0===s?o="Curve":"MultiLineString"===o&&!0===i&&(o="MultiCurve")),Sa("http://www.opengis.net/gml",o)},al.prototype.T=function(t,e){e=qa(this,e);var o=Sa("http://www.opengis.net/gml","geom"),i={node:o,srsName:this.srsName,curve:this.i,surface:this.s,multiSurface:this.o,multiCurve:this.l};return e&&hd(i,e),this.ad(o,t,[i]),o},al.prototype.a=function(t,e){e=qa(this,e);var o=Sa("http://www.opengis.net/gml","featureMembers");o.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.schemaLocation);var i={srsName:this.srsName,curve:this.i,surface:this.s,multiSurface:this.o,multiCurve:this.l,featureNS:this.featureNS,featureType:this.featureType};e&&hd(i,e);var i=[i],r=i[i.length-1],n=r.featureType,s=r.featureNS,p={};return p[s]={},p[s][n]=ka(this.ti,this),r=hd({},r),r.node=o,$a(r,p,Da(n,s),t,i),o},e(ll,Yh),od=ll.prototype,od.Hh=function(t,e){var o=Ta(t,!1).replace(/^\s*|\s*$/g,""),i=e[0].srsName,r=t.parentNode.getAttribute("srsDimension"),n="enu";i&&(i=re(i))&&(n=i.b),o=o.split(/[\s,]+/),i=2,t.getAttribute("srsDimension")?i=ol(t.getAttribute("srsDimension")):t.getAttribute("dimension")?i=ol(t.getAttribute("dimension")):r&&(i=ol(r));for(var s,p,a=[],h=0,l=o.length;h<l;h+=i)r=parseFloat(o[h]),s=parseFloat(o[h+1]),p=3===i?parseFloat(o[h+2]):0,"en"===n.substr(0,2)?a.push(r,s,p):a.push(s,r,p);return a},od.lo=function(t,e){var o=Ua([null],this.Ci,t,e,this);return Et(o[1][0],o[1][1],o[1][3],o[1][4])},od.Zk=function(t,e){var o=Ua(void 0,this.Id,t,e,this);o&&e[e.length-1].push(o)},od.Tn=function(t,e){var o=Ua(void 0,this.Id,t,e,this);o&&(e[e.length-1][0]=o)},od.Hd={"http://www.opengis.net/gml":{coordinates:Na(ll.prototype.Hh)}},od.Ke={"http://www.opengis.net/gml":{innerBoundaryIs:ll.prototype.Zk,outerBoundaryIs:ll.prototype.Tn}},od.Ci={"http://www.opengis.net/gml":{coordinates:ja(ll.prototype.Hh)}},od.Yf={"http://www.opengis.net/gml":{Point:Na(Yh.prototype.Nh),MultiPoint:Na(Yh.prototype.Lh),LineString:Na(Yh.prototype.ye),MultiLineString:Na(Yh.prototype.Kh),LinearRing:Na(Yh.prototype.Jh),Polygon:Na(Yh.prototype.ze),MultiPolygon:Na(Yh.prototype.Mh),Box:Na(ll.prototype.lo)}},e(ul,zh);var Jv=[null,"http://www.topografix.com/GPX/1/0","http://www.topografix.com/GPX/1/1"],_v={rte:dl,trk:gl,wpt:vl},Qv=Oa(Jv,{rte:ja(dl),trk:ja(gl),wpt:ja(vl)}),tm=Oa(Jv,{text:Ra(il,"linkText"),type:Ra(il,"linkType")}),em=Oa(Jv,{name:Ra(il),cmt:Ra(il),desc:Ra(il),src:Ra(il),link:fl,number:Ra(el),extensions:yl,type:Ra(il),rtept:function(t,e){var o=Ua({},om,t,e);o&&cl(e[e.length-1].flatCoordinates,t,o)}}),om=Oa(Jv,{ele:Ra(Qh),time:Ra(_h)}),im=Oa(Jv,{name:Ra(il),cmt:Ra(il),desc:Ra(il),src:Ra(il),link:fl,number:Ra(el),type:Ra(il),extensions:yl,trkseg:function(t,e){var o=e[e.length-1];Ba(rm,t,e),o.ends.push(o.flatCoordinates.length)}}),rm=Oa(Jv,{trkpt:function(t,e){var o=Ua({},nm,t,e);o&&cl(e[e.length-1].flatCoordinates,t,o)}}),nm=Oa(Jv,{ele:Ra(Qh),time:Ra(_h)}),sm=Oa(Jv,{ele:Ra(Qh),time:Ra(_h),magvar:Ra(Qh),geoidheight:Ra(Qh),name:Ra(il),cmt:Ra(il),desc:Ra(il),src:Ra(il),link:fl,sym:Ra(il),type:Ra(il),fix:Ra(il),sat:Ra(el),hdop:Ra(Qh),vdop:Ra(Qh),pdop:Ra(Qh),ageofdgpsdata:Ra(Qh),dgpsid:Ra(el),extensions:yl});ul.prototype.Gh=function(t,e){if(!H(Jv,t.namespaceURI))return null;var o=_v[t.localName];return o&&(o=o(t,[za(this,t,e)]))?(ml(this,[o]),o):null},ul.prototype.kc=function(t,e){if(!H(Jv,t.namespaceURI))return[];if("gpx"==t.localName){var o=Ua([],Qv,t,[za(this,t,e)]);if(o)return ml(this,o),o}return[]};var pm=["text","type"],am=Oa(Jv,{text:ka(pl),type:ka(pl)}),hm=Oa(Jv,"name cmt desc src link number type rtept".split(" ")),lm=Oa(Jv,{name:ka(pl),cmt:ka(pl),desc:ka(pl),src:ka(pl),link:ka(bl),number:ka(sl),type:ka(pl),rtept:Ia(ka(wl))}),um=Oa(Jv,["ele","time"]),cm=Oa(Jv,"name cmt desc src link number type trkseg".split(" ")),fm=Oa(Jv,{name:ka(pl),cmt:ka(pl),desc:ka(pl),src:ka(pl),link:ka(bl),number:ka(sl),type:ka(pl),trkseg:Ia(ka(function(t,e,o){$a({node:t,geometryLayout:e.ia,properties:{}},dm,ym,e.Y(),o)}))}),ym=Da("trkpt"),dm=Oa(Jv,{trkpt:ka(wl)}),gm=Oa(Jv,"ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),vm=Oa(Jv,{ele:ka(nl),time:ka(function(t,e){var o=new Date(1e3*e);t.appendChild(Ov.createTextNode(o.getUTCFullYear()+"-"+rt(o.getUTCMonth()+1)+"-"+rt(o.getUTCDate())+"T"+rt(o.getUTCHours())+":"+rt(o.getUTCMinutes())+":"+rt(o.getUTCSeconds())+"Z"))}),magvar:ka(nl),geoidheight:ka(nl),name:ka(pl),cmt:ka(pl),desc:ka(pl),src:ka(pl),link:ka(bl),sym:ka(pl),type:ka(pl),fix:ka(pl),sat:ka(sl),hdop:ka(nl),vdop:ka(nl),pdop:ka(nl),ageofdgpsdata:ka(nl),dgpsid:ka(sl)}),mm={Point:"wpt",LineString:"rte",MultiLineString:"trk"},bm=Oa(Jv,{rte:ka(function(t,e,o){var i=o[0],r=e.N();t={node:t,properties:r},(e=e.V())&&(e=Va(e,!0,i),t.geometryLayout=e.ia,r.rtept=e.Y()),i=hm[o[o.length-1].node.namespaceURI],r=Fa(r,i),$a(t,lm,Bv,r,o,i)}),trk:ka(function(t,e,o){var i=o[0],r=e.N();t={node:t,properties:r},(e=e.V())&&(e=Va(e,!0,i),r.trkseg=e.od()),i=cm[o[o.length-1].node.namespaceURI],r=Fa(r,i),$a(t,fm,Bv,r,o,i)}),wpt:ka(function(t,e,o){var i=o[0],r=o[o.length-1];r.properties=e.N(),(e=e.V())&&(e=Va(e,!0,i),r.geometryLayout=e.ia,wl(t,e.Y(),o))})});ul.prototype.a=function(t,e){e=qa(this,e);var o=Sa("http://www.topografix.com/GPX/1/1","gpx");return o.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"),o.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"),o.setAttribute("version","1.1"),o.setAttribute("creator","OpenLayers 3"),$a({node:o},bm,xl,t,[e]),o},e(Sl,Wa),od=Sl.prototype,od.X=function(){return"text"},od.Ub=function(t,e){return this.wd(Tl(t),qa(this,e))},od.Ha=function(t,e){return this.Hf(Tl(t),qa(this,e))},od.Wc=function(t,e){return this.yd(Tl(t),qa(this,e))},od.Sa=function(){return this.defaultDataProjection},od.Fd=function(t,e){return this.Fe(t,qa(this,e))},od.$b=function(t,e){return this.ui(t,qa(this,e))},od.$c=function(t,e){return this.Gd(t,qa(this,e))},e(El,Sl);var wm=/^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,xm=/^H.([A-Z]{3}).*?:(.*)/,Sm=/^HFDTE(\d{2})(\d{2})(\d{2})/,Tm=/\r\n|\r|\n/;El.prototype.wd=function(t,e){var o,i,r=this.b,n=t.split(Tm),s={},p=[],a=2e3,h=0,l=1,u=-1;for(o=0,i=n.length;o<i;++o){var c,f=n[o];if("B"==f.charAt(0)){if(c=wm.exec(f)){var f=parseInt(c[1],10),y=parseInt(c[2],10),d=parseInt(c[3],10),g=parseInt(c[4],10)+parseInt(c[5],10)/6e4;"S"==c[6]&&(g=-g);var v=parseInt(c[7],10)+parseInt(c[8],10)/6e4;"W"==c[9]&&(v=-v),p.push(v,g),r!=Cm&&p.push(r==Mm?parseInt(c[11],10):r==Em?parseInt(c[12],10):0),c=Date.UTC(a,h,l,f,y,d),c<u&&(c=Date.UTC(a,h,l+1,f,y,d)),p.push(c/1e3),u=c}}else"H"==f.charAt(0)&&((c=Sm.exec(f))?(l=parseInt(c[1],10),h=parseInt(c[2],10)-1,a=2e3+parseInt(c[3],10)):(c=xm.exec(f))&&(s[c[1]]=c[2].trim()))}return 0===p.length?null:(n=new th(null),n.aa(r==Cm?"XYM":"XYZM",p),r=new wa(Va(n,!1,e)),r.H(s),r)},El.prototype.Hf=function(t,e){var o=this.wd(t,e);return o?[o]:[]};var Em="barometric",Mm="gps",Cm="none";e(Ml,k),Ml.prototype.T=function(){this.f=jg,this.i.forEach(P),this.i=null,this.b("change")},Ml.prototype.u=function(){if(this.f=Ag,this.g&&(this.a.width=this.g[0],this.a.height=this.g[1]),this.g=[this.a.width,this.a.height],this.i.forEach(P),this.i=null,Cl(this),!this.s&&null!==this.j){this.c.width=this.a.width,this.c.height=this.a.height;var t=this.c.getContext("2d");t.drawImage(this.a,0,0);for(var e=t.getImageData(0,0,this.a.width,this.a.height),o=e.data,i=this.j[0]/255,r=this.j[1]/255,n=this.j[2]/255,s=0,p=o.length;s<p;s+=4)o[s]*=i,o[s+1]*=r,o[s+2]*=n;t.putImageData(e,0,0)}this.b("change")},Ml.prototype.load=function(){if(this.f==Cg){this.f=Pg,this.i=[M(this.a,"error",this.T,this),M(this.a,"load",this.u,this)];try{this.a.src=this.o}catch(t){this.T()}}},e(Pl,jn),od=Pl.prototype,od.clone=function(){var t,e=this.Tb(1);if(this.b.f===Ag)if("IMG"===e.tagName.toUpperCase())t=e.cloneNode(!0);else{t=document.createElement("canvas");var o=t.getContext("2d");t.width=e.width,t.height=e.height,o.drawImage(e,0,0)}return new Pl({anchor:this.f.slice(),anchorOrigin:this.a,anchorXUnits:this.B,anchorYUnits:this.G,crossOrigin:this.na,color:this.i&&this.i.slice?this.i.slice():this.i||void 0,img:t?t:void 0,imgSize:t?this.b.g.slice():void 0,src:t?void 0:this.b.o,offset:this.S.slice(),offsetOrigin:this.g,size:null!==this.C?this.C.slice():void 0,opacity:this.l,scale:this.c,snapToPixel:this.u,rotation:this.o,rotateWithView:this.T})},od.cc=function(){if(this.j)return this.j;var t=this.f,e=this.Gb();if(this.B==Pm||this.G==Pm){if(!e)return null;t=this.f.slice(),this.B==Pm&&(t[0]*=e[0]),this.G==Pm&&(t[1]*=e[1])}if(this.a!=Nm){if(!e)return null;t===this.f&&(t=this.f.slice()),this.a!=Lm&&this.a!=jm||(t[0]=-t[0]+e[0]),this.a!=Am&&this.a!=jm||(t[1]=-t[1]+e[1])}return this.j=t},od.Tb=function(){var t=this.b;return t.c?t.c:t.a},od.md=function(){return this.b.g},od.vd=function(){return this.b.f},od.pe=function(){var t=this.b;if(!t.l)if(t.s){var e=t.g[0],o=t.g[1],i=Xo(e,o);i.fillRect(0,0,e,o),t.l=i.canvas}else t.l=t.a;return t.l},od.jc=function(){if(this.s)return this.s;var t=this.S;if(this.g!=Nm){var e=this.Gb(),o=this.b.g;if(!e||!o)return null;t=t.slice(),this.g!=Lm&&this.g!=jm||(t[0]=o[0]-e[0]-t[0]),this.g!=Am&&this.g!=jm||(t[1]=o[1]-e[1]-t[1])}return this.s=t},od.sn=function(){return this.b.o},od.Gb=function(){return this.C?this.C:this.b.g},od.pf=function(t,e){return E(this.b,"change",t,e)},od.load=function(){this.b.load()},od.Uf=function(t,e){C(this.b,"change",t,e)};var Pm="fraction",Am="bottom-left",jm="bottom-right",Nm="top-left",Lm="top-right";od=Al.prototype,od.clone=function(){return new Al({font:this.g,rotation:this.j,rotateWithView:this.s,scale:this.a,text:this.Fa(),textAlign:this.l,textBaseline:this.o,fill:this.b?this.b.clone():void 0,stroke:this.f?this.f.clone():void 0,offsetX:this.c,offsetY:this.i})},od.Lj=function(){return this.g},od.Zj=function(){return this.c},od.$j=function(){return this.i},od.In=function(){return this.b},od.Jn=function(){return this.s},od.Kn=function(){return this.j},od.Ln=function(){return this.a},od.Mn=function(){return this.f},od.Fa=function(){return this.T},od.lk=function(){return this.l},od.mk=function(){return this.o},od.Yh=function(t){this.g=t},od.di=function(t){this.c=t},od.ei=function(t){this.i=t},od.Xh=function(t){this.b=t},od.Nn=function(t){this.j=t},od.Ah=function(t){this.a=t},od.gi=function(t){this.f=t},od.hi=function(t){this.T=t},od.ii=function(t){this.l=t},od.Vo=function(t){this.o=t};var Rm,km,Im,Dm,Fm,Om,Bm,Um,Gm,$m,Hm,Xm,Km,Wm,zm;e(jl,zh);var qm=["http://www.google.com/kml/ext/2.2"],Vm=[null,"http://earth.google.com/kml/2.0","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.2","http://www.opengis.net/kml/2.2"],Ym={fraction:Pm,pixels:"pixels"},Zm=Oa(Vm,{value:Na(il)}),Jm=Oa(Vm,{Data:function(t,e){var o=t.getAttribute("name");if(null!==o){var i=Ua(void 0,Zm,t,e);i&&(e[e.length-1][o]=i)}},SchemaData:function(t,e){Ba(gb,t,e)}}),_m=Oa(Vm,{extrude:Ra(Zh),altitudeMode:Ra(il)}),Qm=Oa(Vm,{coordinates:Na(Il)}),tb=Oa(Vm,{innerBoundaryIs:function(t,e){var o=Ua(void 0,nb,t,e);o&&e[e.length-1].push(o);
-},outerBoundaryIs:function(t,e){var o=Ua(void 0,cb,t,e);o&&(e[e.length-1][0]=o)}}),eb=Oa(Vm,{when:function(t,e){var o=e[e.length-1].si,i=Ta(t,!1),i=Date.parse(i);o.push(isNaN(i)?0:i)}},Oa(qm,{coord:function(t,e){var o=e[e.length-1].A,i=Ta(t,!1);(i=/^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(i))?o.push(parseFloat(i[1]),parseFloat(i[2]),parseFloat(i[3]),0):o.push(0,0,0,0)}})),ob=Oa(Vm,{coordinates:Na(Il)}),ib=Oa(Vm,{href:Ra(Dl)},Oa(qm,{x:Ra(Qh),y:Ra(Qh),w:Ra(Qh),h:Ra(Qh)})),rb=Oa(Vm,{Icon:Ra(function(t,e){var o=Ua({},ib,t,e);return o?o:null}),heading:Ra(Qh),hotSpot:Ra(function(t){var e=t.getAttribute("xunits"),o=t.getAttribute("yunits");return{x:parseFloat(t.getAttribute("x")),Wf:Ym[e],y:parseFloat(t.getAttribute("y")),Xf:Ym[o]}}),scale:Ra(Fl)}),nb=Oa(Vm,{LinearRing:Na(Ol)}),sb=Oa(Vm,{color:Ra(kl),scale:Ra(Fl)}),pb=Oa(Vm,{color:Ra(kl),width:Ra(Qh)}),ab=Oa(Vm,{LineString:ja(Ul),LinearRing:ja(Gl),MultiGeometry:ja($l),Point:ja(Hl),Polygon:ja(Xl)}),hb=Oa(qm,{Track:ja(Bl)}),lb=Oa(Vm,{ExtendedData:zl,Link:function(t,e){Ba(ub,t,e)},address:Ra(il),description:Ra(il),name:Ra(il),open:Ra(Zh),phoneNumber:Ra(il),visibility:Ra(Zh)}),ub=Oa(Vm,{href:Ra(Dl)}),cb=Oa(Vm,{LinearRing:Na(Ol)}),fb=Oa(Vm,{Style:Ra(Kl),key:Ra(il),styleUrl:Ra(Dl)}),yb=Oa(Vm,{ExtendedData:zl,MultiGeometry:Ra($l,"geometry"),LineString:Ra(Ul,"geometry"),LinearRing:Ra(Gl,"geometry"),Point:Ra(Hl,"geometry"),Polygon:Ra(Xl,"geometry"),Style:Ra(Kl),StyleMap:function(t,e){var o=Ua(void 0,mb,t,e);if(o){var i=e[e.length-1];Array.isArray(o)?i.Style=o:"string"==typeof o?i.styleUrl=o:n(!1,38)}},address:Ra(il),description:Ra(il),name:Ra(il),open:Ra(Zh),phoneNumber:Ra(il),styleUrl:Ra(Dl),visibility:Ra(Zh)},Oa(qm,{MultiTrack:Ra(function(t,e){var o=Ua([],hb,t,e);if(o){var i=new oh(null);return rh(i,o),i}},"geometry"),Track:Ra(Bl,"geometry")})),db=Oa(Vm,{color:Ra(kl),fill:Ra(Zh),outline:Ra(Zh)}),gb=Oa(Vm,{SimpleData:function(t,e){var o=t.getAttribute("name");if(null!==o){var i=il(t);e[e.length-1][o]=i}}}),vb=Oa(Vm,{IconStyle:function(t,e){var o=Ua({},rb,t,e);if(o){var i,r=e[e.length-1],n="Icon"in o?o.Icon:{},s=!("Icon"in o)||0<Object.keys(n).length,p=n.href;p?i=p:s&&(i=Um);var a,h,u;(p=o.hotSpot)?(a=[p.x,p.y],h=p.Wf,u=p.Xf):i===Um?(a=Dm,h=Fm,u=Om):/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(i)&&(a=[.5,0],u=h=Pm);var c,p=n.x,f=n.y;void 0!==p&&void 0!==f&&(c=[p,f]);var y,p=n.w,n=n.h;void 0!==p&&void 0!==n&&(y=[p,n]);var d,n=o.heading;void 0!==n&&(d=l(n)),o=o.scale,o=isNaN(o)||void 0===o?Gm:o*Gm,s?(i==Um&&(y=Bm,void 0===o&&(o=Gm)),s=new Pl({anchor:a,anchorOrigin:Am,anchorXUnits:h,anchorYUnits:u,crossOrigin:"anonymous",offset:c,offsetOrigin:Am,rotation:d,scale:o,size:y,src:i}),r.imageStyle=s):r.imageStyle=Hm}},LabelStyle:function(t,e){var o=Ua({},sb,t,e);o&&(e[e.length-1].textStyle=new Al({fill:new Rn({color:"color"in o?o.color:km}),scale:o.scale}))},LineStyle:function(t,e){var o=Ua({},pb,t,e);o&&(e[e.length-1].strokeStyle=new In({color:"color"in o?o.color:km,width:"width"in o?o.width:1}))},PolyStyle:function(t,e){var o=Ua({},db,t,e);if(o){var i=e[e.length-1];i.fillStyle=new Rn({color:"color"in o?o.color:km});var r=o.fill;void 0!==r&&(i.fill=r),o=o.outline,void 0!==o&&(i.outline=o)}}}),mb=Oa(Vm,{Pair:function(t,e){var o=Ua({},fb,t,e);if(o){var i=o.key;i&&"normal"==i&&((i=o.styleUrl)&&(e[e.length-1]=i),(o=o.Style)&&(e[e.length-1]=o))}}});od=jl.prototype,od.Ef=function(t,e){var o=Oa(Vm,{Document:Aa(this.Ef,this),Folder:Aa(this.Ef,this),Placemark:ja(this.Kf,this),Style:this.Ao.bind(this),StyleMap:this.zo.bind(this)});if(o=Ua([],o,t,e,this))return o},od.Kf=function(t,e){var o=Ua({geometry:null},yb,t,e);if(o){var i=new wa,r=t.getAttribute("id");null!==r&&i.Wb(r);var r=e[0],n=o.geometry;return n&&Va(n,!1,r),i.Oa(n),delete o.geometry,this.c&&i.sf(Ll(o.Style,o.styleUrl,this.g,this.b,this.i)),delete o.Style,i.H(o),i}},od.Ao=function(t,e){var o=t.getAttribute("id");if(null!==o){var i=Kl(t,e);i&&(o=t.baseURI?new URL("#"+o,t.baseURI).href:"#"+o,this.b[o]=i)}},od.zo=function(t,e){var o=t.getAttribute("id");if(null!==o){var i=Ua(void 0,mb,t,e);i&&(o=t.baseURI?new URL("#"+o,t.baseURI).href:"#"+o,this.b[o]=i)}},od.Gh=function(t,e){if(!H(Vm,t.namespaceURI))return null;var o=this.Kf(t,[za(this,t,e)]);return o?o:null},od.kc=function(t,e){if(!H(Vm,t.namespaceURI))return[];var o;if(o=t.localName,"Document"==o||"Folder"==o)return(o=this.Ef(t,[za(this,t,e)]))?o:[];if("Placemark"==o)return(o=this.Kf(t,[za(this,t,e)]))?[o]:[];if("kml"==o){o=[];var i;for(i=t.firstElementChild;i;i=i.nextElementSibling){var r=this.kc(i,e);r&&W(o,r)}return o}return[]},od.uo=function(t){return Ma(t)?ql(this,t):Ca(t)?Vl(this,t):"string"==typeof t?(t=Pa(t),ql(this,t)):void 0},od.vo=function(t){var e=[];return Ma(t)?W(e,Yl(this,t)):Ca(t)?W(e,Zl(this,t)):"string"==typeof t&&(t=Pa(t),W(e,Yl(this,t))),e};var bb=Oa(Vm,["Document","Placemark"]),wb=Oa(Vm,{Document:ka(function(t,e,o){$a({node:t},xb,nu,e,o,void 0,this)}),Placemark:ka(tu)}),xb=Oa(Vm,{Placemark:ka(tu)}),Sb={Point:"Point",LineString:"LineString",LinearRing:"LinearRing",Polygon:"Polygon",MultiPoint:"MultiGeometry",MultiLineString:"MultiGeometry",MultiPolygon:"MultiGeometry",GeometryCollection:"MultiGeometry"},Tb=Oa(Vm,["href"],Oa(qm,["x","y","w","h"])),Eb=Oa(Vm,{href:ka(pl)},Oa(qm,{x:ka(nl),y:ka(nl),w:ka(nl),h:ka(nl)})),Mb=Oa(Vm,["scale","heading","Icon","hotSpot"]),Cb=Oa(Vm,{Icon:ka(function(t,e,o){t={node:t};var i=Tb[o[o.length-1].node.namespaceURI],r=Fa(e,i);$a(t,Eb,Bv,r,o,i),i=Tb[qm[0]],r=Fa(e,i),$a(t,Eb,ru,r,o,i)}),heading:ka(nl),hotSpot:ka(function(t,e){t.setAttribute("x",e.x),t.setAttribute("y",e.y),t.setAttribute("xunits",e.Wf),t.setAttribute("yunits",e.Xf)}),scale:ka(iu)}),Pb=Oa(Vm,["color","scale"]),Ab=Oa(Vm,{color:ka(Jl),scale:ka(iu)}),jb=Oa(Vm,["color","width"]),Nb=Oa(Vm,{color:ka(Jl),width:ka(nl)}),Lb=Oa(Vm,{LinearRing:ka(eu)}),Rb=Oa(Vm,{LineString:ka(eu),Point:ka(eu),Polygon:ka(ou),GeometryCollection:ka(_l)}),kb=Oa(Vm,"name open visibility address phoneNumber description styleUrl Style".split(" ")),Ib=Oa(Vm,{MultiGeometry:ka(_l),LineString:ka(eu),LinearRing:ka(eu),Point:ka(eu),Polygon:ka(ou),Style:ka(function(t,e,o){t={node:t};var i={},r=e.f,n=e.g,s=e.a;e=e.Fa(),s instanceof Pl&&(i.IconStyle=s),e&&(i.LabelStyle=e),n&&(i.LineStyle=n),r&&(i.PolyStyle=r),e=Bb[o[o.length-1].node.namespaceURI],i=Fa(i,e),$a(t,Ub,Bv,i,o,e)}),address:ka(pl),description:ka(pl),name:ka(pl),open:ka(rl),phoneNumber:ka(pl),styleUrl:ka(pl),visibility:ka(rl)}),Db=Oa(Vm,{coordinates:ka(function(t,e,o){o=o[o.length-1];var i=o.layout;o=o.stride;var r;"XY"==i||"XYM"==i?r=2:"XYZ"==i||"XYZM"==i?r=3:n(!1,34);var s,p=e.length,a="";if(0<p){for(a+=e[0],i=1;i<r;++i)a+=","+e[i];for(s=o;s<p;s+=o)for(a+=" "+e[s],i=1;i<r;++i)a+=","+e[s+i]}pl(t,a)})}),Fb=Oa(Vm,{outerBoundaryIs:ka(Ql),innerBoundaryIs:ka(Ql)}),Ob=Oa(Vm,{color:ka(Jl)}),Bb=Oa(Vm,["IconStyle","LabelStyle","LineStyle","PolyStyle"]),Ub=Oa(Vm,{IconStyle:ka(function(t,e,o){t={node:t};var i={},r=e.Gb(),n=e.md(),s={href:e.b.o};if(r){s.w=r[0],s.h=r[1];var p=e.cc(),a=e.jc();a&&n&&0!==a[0]&&a[1]!==r[1]&&(s.x=a[0],s.y=n[1]-(a[1]+r[1])),p&&0!==p[0]&&p[1]!==r[1]&&(i.hotSpot={x:p[0],Wf:"pixels",y:r[1]-p[1],Xf:"pixels"})}i.Icon=s,r=e.c,1!==r&&(i.scale=r),e=e.o,0!==e&&(i.heading=e),e=Mb[o[o.length-1].node.namespaceURI],i=Fa(i,e),$a(t,Cb,Bv,i,o,e)}),LabelStyle:ka(function(t,e,o){t={node:t};var i={},r=e.b;r&&(i.color=r.b),(e=e.a)&&1!==e&&(i.scale=e),e=Pb[o[o.length-1].node.namespaceURI],i=Fa(i,e),$a(t,Ab,Bv,i,o,e)}),LineStyle:ka(function(t,e,o){t={node:t};var i=jb[o[o.length-1].node.namespaceURI];e=Fa({color:e.a,width:e.f},i),$a(t,Nb,Bv,e,o,i)}),PolyStyle:ka(function(t,e,o){$a({node:t},Ob,Gb,[e.b],o)})}),Gb=Da("color"),$b=Da("coordinates"),Hb=Da("innerBoundaryIs"),Xb=Da("Point"),Kb=Da("LineString"),Wb=Da("LinearRing"),zb=Da("Polygon"),qb=Da("outerBoundaryIs");jl.prototype.a=function(t,e){e=qa(this,e);var o=Sa(Vm[4],"kml");o.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:gx",qm[0]),o.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"),o.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");var i={node:o},r={};1<t.length?r.Document=t:1==t.length&&(r.Placemark=t[0]);var n=bb[o.namespaceURI],r=Fa(r,n);return $a(i,wb,Bv,r,[e],n,this),o};var Vb,Yb,Zb,Jb;!function(){var t={},e={ja:t};!function(o){if("object"==typeof t&&"undefined"!=typeof e)e.ja=o();else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,i.Bp=o()}}(function(){return function t(e,o,i){function r(s,p){if(!o[s]){if(!e[s]){var a="function"==typeof require&&require;if(!p&&a)return a(s,!0);if(n)return n(s,!0);throw a=Error("Cannot find module '"+s+"'"),a.code="MODULE_NOT_FOUND",a}a=o[s]={ja:{}},e[s][0].call(a.ja,function(t){var o=e[s][1][t];return r(o?o:t)},a,a.ja,t,e,o,i)}return o[s].ja}for(var n="function"==typeof require&&require,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e,o){o.read=function(t,e,o,i,r){var n;n=8*r-i-1;var s=(1<<n)-1,p=s>>1,a=-7;r=o?r-1:0;var h=o?-1:1,l=t[e+r];for(r+=h,o=l&(1<<-a)-1,l>>=-a,a+=n;0<a;o=256*o+t[e+r],r+=h,a-=8);for(n=o&(1<<-a)-1,o>>=-a,a+=i;0<a;n=256*n+t[e+r],r+=h,a-=8);if(0===o)o=1-p;else{if(o===s)return n?NaN:1/0*(l?-1:1);n+=Math.pow(2,i),o-=p}return(l?-1:1)*n*Math.pow(2,o-i)},o.write=function(t,e,o,i,r,n){var s,p=8*n-r-1,a=(1<<p)-1,h=a>>1,l=23===r?Math.pow(2,-24)-Math.pow(2,-77):0;n=i?0:n-1;var u=i?1:-1,c=0>e||0===e&&0>1/e?1:0;for(e=Math.abs(e),isNaN(e)||1/0===e?(e=isNaN(e)?1:0,i=a):(i=Math.floor(Math.log(e)/Math.LN2),1>e*(s=Math.pow(2,-i))&&(i--,s*=2),e=1<=i+h?e+l/s:e+l*Math.pow(2,1-h),2<=e*s&&(i++,s/=2),i+h>=a?(e=0,i=a):1<=i+h?(e=(e*s-1)*Math.pow(2,r),i+=h):(e=e*Math.pow(2,h-1)*Math.pow(2,r),i=0));8<=r;t[o+n]=255&e,n+=u,e/=256,r-=8);for(i=i<<r|e,p+=r;0<p;t[o+n]=255&i,n+=u,i/=256,p-=8);t[o+n-u]|=128*c}},{}],2:[function(t,e){function o(t){this.bc=ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.type=this.ca=0,this.length=this.bc.length}function i(t,e,o){var i,n,s=o.bc;if(n=s[o.ca++],i=(112&n)>>4,128>n)return r(t,i,e);if(n=s[o.ca++],i|=(127&n)<<3,128>n)return r(t,i,e);if(n=s[o.ca++],i|=(127&n)<<10,128>n)return r(t,i,e);if(n=s[o.ca++],i|=(127&n)<<17,128>n)return r(t,i,e);if(n=s[o.ca++],i|=(127&n)<<24,128>n)return r(t,i,e);if(n=s[o.ca++],128>n)return r(t,i|(1&n)<<31,e);throw Error("Expected varint not more than 10 bytes")}function r(t,e,o){return o?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}e.ja=o;var n=t("ieee754");o.f=0,o.g=1,o.b=2,o.a=5,o.prototype={If:function(t,e,o){for(o=o||this.length;this.ca<o;){var i=this.Ea(),r=i>>3,n=this.ca;this.type=7&i,t(r,e,this),this.ca===n&&this.$o(i)}return e},qo:function(){var t=n.read(this.bc,this.ca,!0,23,4);return this.ca+=4,t},mo:function(){var t=n.read(this.bc,this.ca,!0,52,8);return this.ca+=8,t},Ea:function(t){var e,o,r=this.bc;return o=r[this.ca++],e=127&o,128>o?e:(o=r[this.ca++],e|=(127&o)<<7,128>o?e:(o=r[this.ca++],e|=(127&o)<<14,128>o?e:(o=r[this.ca++],e|=(127&o)<<21,128>o?e:(o=r[this.ca],i(e|(15&o)<<28,t,this)))))},Bo:function(){return this.Ea(!0)},zd:function(){var t=this.Ea();return 1===t%2?(t+1)/-2:t/2},ko:function(){return!!this.Ea()},Mf:function(){for(var t=this.Ea()+this.ca,e=this.bc,o="",i=this.ca;i<t;){var r=e[i],n=null,s=239<r?4:223<r?3:191<r?2:1;if(i+s>t)break;var p,a,h;1===s?128>r&&(n=r):2===s?(p=e[i+1],128===(192&p)&&(n=(31&r)<<6|63&p,127>=n&&(n=null))):3===s?(p=e[i+1],a=e[i+2],128===(192&p)&&128===(192&a)&&(n=(15&r)<<12|(63&p)<<6|63&a,2047>=n||55296<=n&&57343>=n)&&(n=null)):4===s&&(p=e[i+1],a=e[i+2],h=e[i+3],128===(192&p)&&128===(192&a)&&128===(192&h)&&(n=(15&r)<<18|(63&p)<<12|(63&a)<<6|63&h,65535>=n||1114112<=n))&&(n=null),null===n?(n=65533,s=1):65535<n&&(n-=65536,o+=String.fromCharCode(n>>>10&1023|55296),n=56320|1023&n),o+=String.fromCharCode(n),i+=s}return this.ca=t,o},$o:function(t){if(t&=7,t===o.f)for(;127<this.bc[this.ca++];);else if(t===o.b)this.ca=this.Ea()+this.ca;else if(t===o.a)this.ca+=4;else{if(t!==o.g)throw Error("Unimplemented type: "+t);this.ca+=8}}}},{ieee754:1}]},{},[2])(2)}),Vb=e.ja}(),function(){var t={},e={ja:t};!function(o){if("object"==typeof t&&"undefined"!=typeof e)e.ja=o();else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,i.Ep=o()}}(function(){return function t(e,o,i){function r(s,p){if(!o[s]){if(!e[s]){var a="function"==typeof require&&require;if(!p&&a)return a(s,!0);if(n)return n(s,!0);throw a=Error("Cannot find module '"+s+"'"),a.code="MODULE_NOT_FOUND",a}a=o[s]={ja:{}},e[s][0].call(a.ja,function(t){var o=e[s][1][t];return r(o?o:t)},a,a.ja,t,e,o,i)}return o[s].ja}for(var n="function"==typeof require&&require,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e){function o(t,e){this.x=t,this.y=e}e.ja=o,o.prototype={clone:function(){return new o(this.x,this.y)},add:function(t){return this.clone().Vi(t)},rotate:function(t){return this.clone().ej(t)},round:function(){return this.clone().fj()},angle:function(){return Math.atan2(this.y,this.x)},Vi:function(t){return this.x+=t.x,this.y+=t.y,this},ej:function(t){var e=Math.cos(t);t=Math.sin(t);var o=t*this.x+e*this.y;return this.x=e*this.x-t*this.y,this.y=o,this},fj:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},o.b=function(t){return t instanceof o?t:Array.isArray(t)?new o(t[0],t[1]):t}},{}],2:[function(t,e){e.ja.Ui=t("./lib/vectortile.js"),e.ja.yp=t("./lib/vectortilefeature.js"),e.ja.zp=t("./lib/vectortilelayer.js")},{"./lib/vectortile.js":3,"./lib/vectortilefeature.js":4,"./lib/vectortilelayer.js":5}],3:[function(t,e){function o(t,e,o){3===t&&(t=new i(o,o.Ea()+o.ca),t.length&&(e[t.name]=t))}var i=t("./vectortilelayer");e.ja=function(t,e){this.layers=t.If(o,{},e)}},{"./vectortilelayer":5}],4:[function(t,e){function o(t,e,o,r,n){this.properties={},this.extent=o,this.type=0,this.nc=t,this.Ne=-1,this.Kd=r,this.Md=n,t.If(i,this,e)}function i(t,e,o){if(1==t)e.id=o.Ea();else if(2==t)for(t=o.Ea()+o.ca;o.ca<t;){var i=e.Kd[o.Ea()],r=e.Md[o.Ea()];e.properties[i]=r}else 3==t?e.type=o.Ea():4==t&&(e.Ne=o.ca)}var r=t("point-geometry");e.ja=o,o.b=["Unknown","Point","LineString","Polygon"],o.prototype.Ng=function(){var t=this.nc;t.ca=this.Ne;for(var e,o=t.Ea()+t.ca,i=1,n=0,s=0,p=0,a=[];t.ca<o;)if(n||(n=t.Ea(),i=7&n,n>>=3),n--,1===i||2===i)s+=t.zd(),p+=t.zd(),1===i&&(e&&a.push(e),e=[]),e.push(new r(s,p));else{if(7!==i)throw Error("unknown command "+i);e&&e.push(e[0].clone())}return e&&a.push(e),a},o.prototype.bbox=function(){var t=this.nc;t.ca=this.Ne;for(var e=t.Ea()+t.ca,o=1,i=0,r=0,n=0,s=1/0,p=-(1/0),a=1/0,h=-(1/0);t.ca<e;)if(i||(i=t.Ea(),o=7&i,i>>=3),i--,1===o||2===o)r+=t.zd(),n+=t.zd(),r<s&&(s=r),r>p&&(p=r),n<a&&(a=n),n>h&&(h=n);else if(7!==o)throw Error("unknown command "+o);return[s,a,p,h]}},{"point-geometry":1}],5:[function(t,e){function o(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this.nc=t,this.Kd=[],this.Md=[],this.Jd=[],t.If(i,this,e),this.length=this.Jd.length}function i(t,e,o){15===t?e.version=o.Ea():1===t?e.name=o.Mf():5===t?e.extent=o.Ea():2===t?e.Jd.push(o.ca):3===t?e.Kd.push(o.Mf()):4===t&&e.Md.push(r(o))}function r(t){for(var e=null,o=t.Ea()+t.ca;t.ca<o;)e=t.Ea()>>3,e=1===e?t.Mf():2===e?t.qo():3===e?t.mo():4===e?t.Bo():5===e?t.Ea():6===e?t.zd():7===e?t.ko():null;return e}var n=t("./vectortilefeature.js");e.ja=o,o.prototype.feature=function(t){if(0>t||t>=this.Jd.length)throw Error("feature index out of bounds");return this.nc.ca=this.Jd[t],t=this.nc.Ea()+this.nc.ca,new n(this.nc,t,this.extent,this.Kd,this.Md)}},{"./vectortilefeature.js":4}]},{},[2])(2)}),Yb=e.ja}(),od=pu.prototype,od.get=function(t){return this.f[t]},od.Eb=function(){return this.c},od.D=function(){return this.a||(this.a="Point"===this.g?Mt(this.b):Ct(this.b,0,this.b.length,2)),this.a},od.Ob=function(){return this.b},od.ka=pu.prototype.Ob,od.V=function(){return this},od.Bm=function(){return this.f},od.pd=pu.prototype.V,od.sa=function(){return 2},od.zc=o,od.X=function(){return this.g},e(au,Wa),au.prototype.X=function(){return"arraybuffer"},au.prototype.Ha=function(t,e){var o,i,r,n=this.f,s=new Vb(t),s=new Yb.Ui(s),p=[],a=this.b;for(r in s.layers)if(!n||-1!=n.indexOf(r)){o=s.layers[r];for(var h=0,l=o.length;h<l;++h){if(a===pu){var u=o.feature(h);i=r;var c=u.Ng(),f=[],y=[];hu(c,y,f);var d=u.type,g=void 0;1===d?g=1===c.length?"Point":"MultiPoint":2===d?g=1===c.length?"LineString":"MultiLineString":3===d&&(g="Polygon"),u=u.properties,u[this.a]=i,i=new this.b(g,y,f,u)}else{if(c=o.feature(h),u=r,g=e,i=new this.b,f=c.id,y=c.properties,y[this.a]=u,u=c.type,0===u)u=null;else{var c=c.Ng(),d=[],v=[];hu(c,v,d);var m=void 0;1===u?m=1===c.length?new Ie(null):new nh(null):2===u?m=1===c.length?new th(null):new oh(null):3===u&&(m=new ze(null)),m.aa("XY",v,d),u=m}(g=Va(u,!1,qa(this,g)))&&(y[this.g]=g),i.Wb(f),i.H(y),i.Dc(this.g)}p.push(i)}}return p},au.prototype.Sa=function(){return this.defaultDataProjection},au.prototype.c=function(t){this.f=t},e(lu,zh);var _b=[null],Qb=Oa(_b,{nd:function(t,e){e[e.length-1].Oc.push(t.getAttribute("ref"))},tag:uu}),tw=Oa(_b,{node:function(t,e){var o=e[0],i=e[e.length-1],r=t.getAttribute("id"),n=[parseFloat(t.getAttribute("lon")),parseFloat(t.getAttribute("lat"))];i.Rg[r]=n;var s=Ua({Ed:{}},ew,t,e);m(s.Ed)||(n=new Ie(n),Va(n,!1,o),o=new wa(n),o.Wb(r),o.H(s.Ed),i.features.push(o))},way:function(t,e){for(var o=e[0],i=t.getAttribute("id"),r=Ua({Oc:[],Ed:{}},Qb,t,e),n=e[e.length-1],s=[],p=0,a=r.Oc.length;p<a;p++)W(s,n.Rg[r.Oc[p]]);r.Oc[0]==r.Oc[r.Oc.length-1]?(p=new ze(null),p.aa("XY",s,[s.length])):(p=new th(null),p.aa("XY",s)),Va(p,!1,o),o=new wa(p),o.Wb(i),o.H(r.Ed),n.features.push(o)}}),ew=Oa(_b,{tag:uu});lu.prototype.kc=function(t,e){var o=za(this,t,e);return"osm"==t.localName&&(o=Ua({Rg:{},features:[]},tw,t,[o]),o.features)?o.features:[]},fu.prototype.read=function(t){return Ma(t)?this.a(t):Ca(t)?this.b(t):"string"==typeof t?(t=Pa(t),this.a(t)):null},e(yu,fu),yu.prototype.a=function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return this.b(t);return null},yu.prototype.b=function(t){return(t=Ua({},iw,t,[]))?t:null};var ow=[null,"http://www.opengis.net/ows/1.1"],iw=Oa(ow,{ServiceIdentification:Ra(function(t,e){return Ua({},dw,t,e)}),ServiceProvider:Ra(function(t,e){return Ua({},gw,t,e)}),OperationsMetadata:Ra(function(t,e){return Ua({},uw,t,e)})}),rw=Oa(ow,{DeliveryPoint:Ra(il),City:Ra(il),AdministrativeArea:Ra(il),PostalCode:Ra(il),Country:Ra(il),ElectronicMailAddress:Ra(il)}),nw=Oa(ow,{Value:La(function(t){return il(t)})}),sw=Oa(ow,{AllowedValues:Ra(function(t,e){return Ua({},nw,t,e)})}),pw=Oa(ow,{Phone:Ra(function(t,e){return Ua({},cw,t,e)}),Address:Ra(function(t,e){return Ua({},rw,t,e)})}),aw=Oa(ow,{HTTP:Ra(function(t,e){return Ua({},hw,t,e)})}),hw=Oa(ow,{Get:La(function(t,e){var o=cu(t);return o?Ua({href:o},fw,t,e):void 0}),Post:void 0}),lw=Oa(ow,{DCP:Ra(function(t,e){return Ua({},aw,t,e)})}),uw=Oa(ow,{Operation:function(t,e){var o=t.getAttribute("name"),i=Ua({},lw,t,e);i&&(e[e.length-1][o]=i)}}),cw=Oa(ow,{Voice:Ra(il),Facsimile:Ra(il)}),fw=Oa(ow,{Constraint:La(function(t,e){var o=t.getAttribute("name");return o?Ua({name:o},sw,t,e):void 0})}),yw=Oa(ow,{IndividualName:Ra(il),PositionName:Ra(il),ContactInfo:Ra(function(t,e){return Ua({},pw,t,e)})}),dw=Oa(ow,{Title:Ra(il),ServiceTypeVersion:Ra(il),ServiceType:Ra(il)}),gw=Oa(ow,{ProviderName:Ra(il),ProviderSite:Ra(cu),ServiceContact:Ra(function(t,e){return Ua({},yw,t,e)})});e(gu,Sl),od=gu.prototype,od.wd=function(t,e){var o=this.yd(t,e);return new wa(o)},od.Hf=function(t,e){return[this.wd(t,e)]},od.yd=function(t,e){var o=de(this.a),i=mu(t,o,this.b);return du(i,i.length,o,i),o=Ae(i,0,i.length,o),Va(new th(o,this.a),!1,qa(this,e))},od.Fe=function(t,e){var o=t.V();return o?this.Gd(o,e):(n(!1,40),"")},od.ui=function(t,e){return this.Fe(t[0],e)},od.Gd=function(t,e){t=Va(t,!0,qa(this,e));var o=t.ka(),i=t.sa();return du(o,o.length,i,o),vu(o,i,this.b)},e(xu,Ya),xu.prototype.Gf=function(t,e){if("Topology"==t.type){var o,i=null,r=null;t.transform&&(o=t.transform,i=o.scale,r=o.translate);var n=t.arcs;if(o){o=i;var s,p,a=r;for(s=0,p=n.length;s<p;++s){var h,l,u,c=n[s],f=o,y=a,d=0,g=0;for(l=0,u=c.length;l<u;++l)h=c[l],d+=h[0],g+=h[1],h[0]=d,h[1]=g,Mu(h,f,y)}}for(o=[],a=v(t.objects),s=0,p=a.length;s<p;++s)"GeometryCollection"===a[s].type?(c=a[s],o.push.apply(o,Tu(c,n,i,r,e))):(c=a[s],o.push(Eu(c,n,i,r,e)));return o}return[]},xu.prototype.Sa=function(){return this.defaultDataProjection};var vw={Point:function(t,e,o){return t=t.coordinates,e&&o&&Mu(t,e,o),new Ie(t)},LineString:function(t,e){var o=Su(t.arcs,e);return new th(o)},Polygon:function(t,e){var o,i,r=[];for(o=0,i=t.arcs.length;o<i;++o)r[o]=Su(t.arcs[o],e);return new ze(r)},MultiPoint:function(t,e,o){t=t.coordinates;var i,r;if(e&&o)for(i=0,r=t.length;i<r;++i)Mu(t[i],e,o);return new nh(t)},MultiLineString:function(t,e){var o,i,r=[];for(o=0,i=t.arcs.length;o<i;++o)r[o]=Su(t.arcs[o],e);return new oh(r)},MultiPolygon:function(t,e){var o,i,r,n,s,p,a=[];for(s=0,p=t.arcs.length;s<p;++s){for(o=t.arcs[s],i=[],r=0,n=o.length;r<n;++r)i[r]=Su(o[r],e);a[s]=i}return new sh(a)}};e(Cu,zh),Cu.prototype.kc=function(t,e){var o={featureType:this.i,featureNS:this.g};return hd(o,za(this,t,e?e:{})),o=[o],this.b.b["http://www.opengis.net/gml"].featureMember=ja(Yh.prototype.xd),(o=Ua([],this.b.b,t,o,this.b))||(o=[]),o},Cu.prototype.o=function(t){return Ma(t)?ju(t):Ca(t)?Ua({},Sw,t,[]):"string"==typeof t?(t=Pa(t),ju(t)):void 0},Cu.prototype.l=function(t){return Ma(t)?Pu(this,t):Ca(t)?Au(this,t):"string"==typeof t?(t=Pa(t),Pu(this,t)):void 0};var mw={"http://www.opengis.net/gml":{boundedBy:Ra(Yh.prototype.xe,"bounds")}},bw={"http://www.opengis.net/wfs":{totalInserted:Ra(el),totalUpdated:Ra(el),totalDeleted:Ra(el)}},ww={"http://www.opengis.net/ogc":{FeatureId:ja(function(t){return t.getAttribute("fid")})}},xw={"http://www.opengis.net/wfs":{Feature:function(t,e){Ba(ww,t,e)}}},Sw={"http://www.opengis.net/wfs":{TransactionSummary:Ra(function(t,e){return Ua({},bw,t,e)},"transactionSummary"),InsertResults:Ra(function(t,e){return Ua([],xw,t,e)},"insertIds")}},Tw={"http://www.opengis.net/wfs":{PropertyName:ka(pl)}},Ew={"http://www.opengis.net/wfs":{Insert:ka(function(t,e,o){var i=o[o.length-1],i=Sa(i.featureNS,i.featureType);t.appendChild(i),al.prototype.ti(i,e,o)}),Update:ka(function(t,e,o){var i=o[o.length-1];n(void 0!==e.a,27);var r=i.featureType,s=i.featurePrefix,s=s?s:"feature",p=i.featureNS;if(t.setAttribute("typeName",s+":"+r),t.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+s,p),r=e.a,void 0!==r){for(var s=e.O(),p=[],a=0,h=s.length;a<h;a++){var l=e.get(s[a]);void 0!==l&&p.push({name:s[a],value:l})}$a({node:t,srsName:i.srsName},Ew,Da("Property"),p,o),Nu(t,r)}}),Delete:ka(function(t,e,o){var i=o[o.length-1];n(void 0!==e.a,26),o=i.featureType;var r=i.featurePrefix,r=r?r:"feature",i=i.featureNS;t.setAttribute("typeName",r+":"+o),t.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+r,i),e=e.a,void 0!==e&&Nu(t,e)}),Property:ka(function(t,e,o){var i=Sa("http://www.opengis.net/wfs","Name");t.appendChild(i),pl(i,e.name),void 0!==e.value&&null!==e.value&&(i=Sa("http://www.opengis.net/wfs","Value"),t.appendChild(i),e.value instanceof ce?al.prototype.ad(i,e.value,o):pl(i,e.value))}),Native:ka(function(t,e){e.ip&&t.setAttribute("vendorId",e.ip),void 0!==e.No&&t.setAttribute("safeToIgnore",e.No),void 0!==e.value&&pl(t,e.value)})}},Mw={"http://www.opengis.net/wfs":{Query:ka(function(t,e,o){var i=o[o.length-1],r=i.featurePrefix,n=i.featureNS,s=i.propertyNames,p=i.srsName;t.setAttribute("typeName",(r?r+":":"")+e),p&&t.setAttribute("srsName",p),n&&t.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+r,n),e=hd({},i),e.node=t,$a(e,Tw,Da("PropertyName"),s,o),(i=i.filter)&&(s=Sa("http://www.opengis.net/ogc","Filter"),t.appendChild(s),$a({node:s},Mw,Da(i.Hb),[i],o))})},"http://www.opengis.net/ogc":{And:ka(Lu),Or:ka(Lu),Not:ka(function(t,e,o){e=e.condition,$a({node:t},Mw,Da(e.Hb),[e],o)}),BBOX:ka(function(t,e,o){o[o.length-1].srsName=e.srsName,Iu(t,e.geometryName),al.prototype.ad(t,e.extent,o)}),Intersects:ka(function(t,e,o){o[o.length-1].srsName=e.srsName,Iu(t,e.geometryName),al.prototype.ad(t,e.geometry,o)}),Within:ka(function(t,e,o){o[o.length-1].srsName=e.srsName,Iu(t,e.geometryName),al.prototype.ad(t,e.geometry,o)}),PropertyIsEqualTo:ka(Ru),PropertyIsNotEqualTo:ka(Ru),PropertyIsLessThan:ka(Ru),PropertyIsLessThanOrEqualTo:ka(Ru),PropertyIsGreaterThan:ka(Ru),PropertyIsGreaterThanOrEqualTo:ka(Ru),PropertyIsNull:ka(function(t,e){Iu(t,e.b)}),PropertyIsBetween:ka(function(t,e){Iu(t,e.b);var o=Sa("http://www.opengis.net/ogc","LowerBoundary");t.appendChild(o),Du(o,""+e.a),o=Sa("http://www.opengis.net/ogc","UpperBoundary"),t.appendChild(o),Du(o,""+e.g)}),PropertyIsLike:ka(function(t,e){t.setAttribute("wildCard",e.i),t.setAttribute("singleChar",e.c),t.setAttribute("escapeChar",e.g),void 0!==e.a&&t.setAttribute("matchCase",e.a.toString()),Iu(t,e.b),Du(t,""+e.f)})}};Cu.prototype.s=function(t){var e=Sa("http://www.opengis.net/wfs","GetFeature");e.setAttribute("service","WFS"),e.setAttribute("version","1.1.0");var o;if(t&&(t.handle&&e.setAttribute("handle",t.handle),t.outputFormat&&e.setAttribute("outputFormat",t.outputFormat),void 0!==t.maxFeatures&&e.setAttribute("maxFeatures",t.maxFeatures),t.resultType&&e.setAttribute("resultType",t.resultType),void 0!==t.startIndex&&e.setAttribute("startIndex",t.startIndex),void 0!==t.count&&e.setAttribute("count",t.count),o=t.filter,t.bbox)){n(t.geometryName,12);var i=Bh(t.geometryName,t.bbox,t.srsName);o=o?Oh(o,i):i}return e.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.c),o={node:e,srsName:t.srsName,featureNS:t.featureNS?t.featureNS:this.g,featurePrefix:t.featurePrefix,geometryName:t.geometryName,filter:o,propertyNames:t.propertyNames?t.propertyNames:[]},n(Array.isArray(t.featureTypes),11),t=t.featureTypes,o=[o],i=hd({},o[o.length-1]),i.node=e,$a(i,Mw,Da("Query"),t,o),e},Cu.prototype.C=function(t,e,o,i){var r=[],n=Sa("http://www.opengis.net/wfs","Transaction");n.setAttribute("service","WFS"),n.setAttribute("version","1.1.0");var s,p;return i&&(s=i.gmlOptions?i.gmlOptions:{},i.handle&&n.setAttribute("handle",i.handle)),n.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.c),t&&(p={node:n,featureNS:i.featureNS,featureType:i.featureType,featurePrefix:i.featurePrefix,srsName:i.srsName},hd(p,s),$a(p,Ew,Da("Insert"),t,r)),e&&(p={node:n,featureNS:i.featureNS,featureType:i.featureType,featurePrefix:i.featurePrefix,srsName:i.srsName},hd(p,s),$a(p,Ew,Da("Update"),e,r)),o&&$a({node:n,featureNS:i.featureNS,featureType:i.featureType,featurePrefix:i.featurePrefix,srsName:i.srsName},Ew,Da("Delete"),o,r),i.nativeElements&&$a({node:n,featureNS:i.featureNS,featureType:i.featureType,featurePrefix:i.featurePrefix,srsName:i.srsName},Ew,Da("Native"),i.nativeElements,r),n},Cu.prototype.Lf=function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return this.Ae(t);return null},Cu.prototype.Ae=function(t){if(t.firstElementChild&&t.firstElementChild.firstElementChild)for(t=t.firstElementChild.firstElementChild,t=t.firstElementChild;t;t=t.nextElementSibling)if(0!==t.childNodes.length&&(1!==t.childNodes.length||3!==t.firstChild.nodeType)){var e=[{}];return this.b.xe(t,e),re(e.pop().srsName)}return null},e(Fu,Sl);var Cw={Point:Ou,LineString:Bu,Polygon:Uu,MultiPoint:function(t){var e=[];t=t.je();for(var o=0,i=t.length;o<i;++o)e.push("("+Ou(t[o])+")");return e.join(",")},MultiLineString:function(t){var e=[];t=t.od();for(var o=0,i=t.length;o<i;++o)e.push("("+Bu(t[o])+")");return e.join(",")},MultiPolygon:function(t){var e=[];t=t.Wd();for(var o=0,i=t.length;o<i;++o)e.push("("+Uu(t[o])+")");return e.join(",")},GeometryCollection:function(t){var e=[];t=t.cf();for(var o=0,i=t.length;o<i;++o)e.push(Gu(t[o]));return e.join(",")}};od=Fu.prototype,od.wd=function(t,e){var o=this.yd(t,e);if(o){var i=new wa;return i.Oa(o),i}return null},od.Hf=function(t,e){var o=[],i=this.yd(t,e);o=this.b&&"GeometryCollection"==i.X()?i.f:[i];for(var r=[],n=0,s=o.length;n<s;++n)i=new wa,i.Oa(o[n]),r.push(i);return r},od.yd=function(t,e){var o;return o=new Xu(new $u(t)),o.b=Hu(o.a),(o=Wu(o))?Va(o,!1,e):null},od.Fe=function(t,e){var o=t.V();return o?this.Gd(o,e):""},od.ui=function(t,e){if(1==t.length)return this.Fe(t[0],e);for(var o=[],i=0,r=t.length;i<r;++i)o.push(t[i].V());return o=new Uh(o),this.Gd(o,e)},od.Gd=function(t,e){return Gu(Va(t,!0,e))},od=Xu.prototype,od.Cf=function(){if(Ku(this,2)){var t=zu(this);if(Ku(this,3))return t}else if(Yu(this))return null;throw Error(Zu(this))},od.Bf=function(){if(Ku(this,2)){var t=qu(this);if(Ku(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))},od.Df=function(){if(Ku(this,2)){var t=Vu(this);if(Ku(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))},od.Wn=function(){if(Ku(this,2)){var t;if(2==this.b.type)for(t=[this.Cf()];Ku(this,5);)t.push(this.Cf());else t=qu(this);if(Ku(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))},od.Vn=function(){if(Ku(this,2)){var t=Vu(this);if(Ku(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))},od.Xn=function(){if(Ku(this,2)){for(var t=[this.Df()];Ku(this,5);)t.push(this.Df());if(Ku(this,3))return t}else if(Yu(this))return[];throw Error(Zu(this))};var Pw={POINT:Ie,LINESTRING:th,POLYGON:ze,MULTIPOINT:nh,MULTILINESTRING:oh,MULTIPOLYGON:sh},Aw={POINT:Xu.prototype.Cf,LINESTRING:Xu.prototype.Bf,POLYGON:Xu.prototype.Df,MULTIPOINT:Xu.prototype.Wn,MULTILINESTRING:Xu.prototype.Vn,MULTIPOLYGON:Xu.prototype.Xn};e(Ju,fu),Ju.prototype.a=function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return this.b(t);return null},Ju.prototype.b=function(t){return this.version=t.getAttribute("version").trim(),(t=Ua({version:this.version},Nw,t,[]))?t:null};var jw=[null,"http://www.opengis.net/wms"],Nw=Oa(jw,{Service:Ra(function(t,e){return Ua({},Rw,t,e)}),Capability:Ra(function(t,e){return Ua({},Lw,t,e)})}),Lw=Oa(jw,{Request:Ra(function(t,e){return Ua({},Gw,t,e)}),Exception:Ra(function(t,e){return Ua([],Fw,t,e)}),Layer:Ra(function(t,e){return Ua({},Ow,t,e)})}),Rw=Oa(jw,{Name:Ra(il),Title:Ra(il),Abstract:Ra(il),KeywordList:Ra(ec),OnlineResource:Ra(cu),ContactInformation:Ra(function(t,e){return Ua({},kw,t,e)}),Fees:Ra(il),AccessConstraints:Ra(il),LayerLimit:Ra(el),MaxWidth:Ra(el),MaxHeight:Ra(el)}),kw=Oa(jw,{ContactPersonPrimary:Ra(function(t,e){return Ua({},Iw,t,e)}),ContactPosition:Ra(il),ContactAddress:Ra(function(t,e){return Ua({},Dw,t,e)}),ContactVoiceTelephone:Ra(il),ContactFacsimileTelephone:Ra(il),ContactElectronicMailAddress:Ra(il)}),Iw=Oa(jw,{ContactPerson:Ra(il),ContactOrganization:Ra(il)}),Dw=Oa(jw,{AddressType:Ra(il),Address:Ra(il),City:Ra(il),StateOrProvince:Ra(il),PostCode:Ra(il),Country:Ra(il)}),Fw=Oa(jw,{Format:ja(il)}),Ow=Oa(jw,{Name:Ra(il),Title:Ra(il),Abstract:Ra(il),KeywordList:Ra(ec),CRS:La(il),EX_GeographicBoundingBox:Ra(function(t,e){var o=Ua({},Uw,t,e);if(o){var i=o.westBoundLongitude,r=o.southBoundLatitude,n=o.eastBoundLongitude,o=o.northBoundLatitude;return void 0===i||void 0===r||void 0===n||void 0===o?void 0:[i,r,n,o]}}),BoundingBox:La(function(t){var e=[tl(t.getAttribute("minx")),tl(t.getAttribute("miny")),tl(t.getAttribute("maxx")),tl(t.getAttribute("maxy"))],o=[tl(t.getAttribute("resx")),tl(t.getAttribute("resy"))];return{crs:t.getAttribute("CRS"),extent:e,res:o}}),Dimension:La(function(t){return{name:t.getAttribute("name"),units:t.getAttribute("units"),unitSymbol:t.getAttribute("unitSymbol"),"default":t.getAttribute("default"),multipleValues:Jh(t.getAttribute("multipleValues")),nearestValue:Jh(t.getAttribute("nearestValue")),current:Jh(t.getAttribute("current")),values:il(t)}}),Attribution:Ra(function(t,e){return Ua({},Bw,t,e)}),AuthorityURL:La(function(t,e){var o=_u(t,e);if(o)return o.name=t.getAttribute("name"),o}),Identifier:La(il),MetadataURL:La(function(t,e){
-var o=_u(t,e);if(o)return o.type=t.getAttribute("type"),o}),DataURL:La(_u),FeatureListURL:La(_u),Style:La(function(t,e){return Ua({},Kw,t,e)}),MinScaleDenominator:Ra(Qh),MaxScaleDenominator:Ra(Qh),Layer:La(function(t,e){var o=e[e.length-1],i=Ua({},Ow,t,e);if(i){var r=Jh(t.getAttribute("queryable"));return void 0===r&&(r=o.queryable),i.queryable=void 0!==r&&r,r=ol(t.getAttribute("cascaded")),void 0===r&&(r=o.cascaded),i.cascaded=r,r=Jh(t.getAttribute("opaque")),void 0===r&&(r=o.opaque),i.opaque=void 0!==r&&r,r=Jh(t.getAttribute("noSubsets")),void 0===r&&(r=o.noSubsets),i.noSubsets=void 0!==r&&r,(r=tl(t.getAttribute("fixedWidth")))||(r=o.fixedWidth),i.fixedWidth=r,(r=tl(t.getAttribute("fixedHeight")))||(r=o.fixedHeight),i.fixedHeight=r,["Style","CRS","AuthorityURL"].forEach(function(t){t in o&&(i[t]=(i[t]||[]).concat(o[t]))}),"EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" ").forEach(function(t){t in i||(i[t]=o[t])}),i}})}),Bw=Oa(jw,{Title:Ra(il),OnlineResource:Ra(cu),LogoURL:Ra(tc)}),Uw=Oa(jw,{westBoundLongitude:Ra(Qh),eastBoundLongitude:Ra(Qh),southBoundLatitude:Ra(Qh),northBoundLatitude:Ra(Qh)}),Gw=Oa(jw,{GetCapabilities:Ra(Qu),GetMap:Ra(Qu),GetFeatureInfo:Ra(Qu)}),$w=Oa(jw,{Format:La(il),DCPType:La(function(t,e){return Ua({},Hw,t,e)})}),Hw=Oa(jw,{HTTP:Ra(function(t,e){return Ua({},Xw,t,e)})}),Xw=Oa(jw,{Get:Ra(_u),Post:Ra(_u)}),Kw=Oa(jw,{Name:Ra(il),Title:Ra(il),Abstract:Ra(il),LegendURL:La(tc),StyleSheetURL:Ra(_u),StyleURL:Ra(_u)}),Ww=Oa(jw,{Format:Ra(il),OnlineResource:Ra(cu)}),zw=Oa(jw,{Keyword:ja(il)});e(oc,zh),oc.prototype.kc=function(t,e){var o={};e&&hd(o,za(this,t,e));var i=[o];t.setAttribute("namespaceURI",this.g);var r=t.localName,o=[];if(0!==t.childNodes.length){if("msGMLOutput"==r)for(var n=0,s=t.childNodes.length;n<s;n++){var p=t.childNodes[n];if(p.nodeType===Node.ELEMENT_NODE){var a=i[0],h=p.localName.replace("_layer","");if(!this.c||H(this.c,h)){h+="_feature",a.featureType=h,a.featureNS=this.g;var l={};l[h]=ja(this.b.Ff,this.b),a=Oa([a.featureNS,null],l),p.setAttribute("namespaceURI",this.g),(p=Ua([],a,p,i,this.b))&&W(o,p)}}}"FeatureCollection"==r&&(i=Ua([],this.b.b,t,[{}],this.b))&&(o=i)}return o},e(ic,fu),ic.prototype.a=function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType==Node.ELEMENT_NODE)return this.b(t);return null},ic.prototype.b=function(t){var e=t.getAttribute("version").trim(),o=this.g.b(t);return o?(o.version=e,(o=Ua(o,Yw,t,[]))?o:null):null};var qw=[null,"http://www.opengis.net/wmts/1.0"],Vw=[null,"http://www.opengis.net/ows/1.1"],Yw=Oa(qw,{Contents:Ra(function(t,e){return Ua({},Zw,t,e)})}),Zw=Oa(qw,{Layer:La(function(t,e){return Ua({},Jw,t,e)}),TileMatrixSet:La(function(t,e){return Ua({},ox,t,e)})}),Jw=Oa(qw,{Style:La(function(t,e){var o=Ua({},_w,t,e);if(o){var i="true"===t.getAttribute("isDefault");return o.isDefault=i,o}}),Format:La(il),TileMatrixSetLink:La(function(t,e){return Ua({},Qw,t,e)}),Dimension:La(function(t,e){return Ua({},tx,t,e)}),ResourceURL:La(function(t){var e=t.getAttribute("format"),o=t.getAttribute("template");t=t.getAttribute("resourceType");var i={};return e&&(i.format=e),o&&(i.template=o),t&&(i.resourceType=t),i})},Oa(Vw,{Title:Ra(il),Abstract:Ra(il),WGS84BoundingBox:Ra(function(t,e){var o=Ua([],ex,t,e);return 2!=o.length?void 0:dt(o)}),Identifier:Ra(il)})),_w=Oa(qw,{LegendURL:La(function(t){var e={};return e.format=t.getAttribute("format"),e.href=cu(t),e})},Oa(Vw,{Title:Ra(il),Identifier:Ra(il)})),Qw=Oa(qw,{TileMatrixSet:Ra(il)}),tx=Oa(qw,{Default:Ra(il),Value:La(il)},Oa(Vw,{Identifier:Ra(il)})),ex=Oa(Vw,{LowerCorner:ja(rc),UpperCorner:ja(rc)}),ox=Oa(qw,{WellKnownScaleSet:Ra(il),TileMatrix:La(function(t,e){return Ua({},ix,t,e)})},Oa(Vw,{SupportedCRS:Ra(il),Identifier:Ra(il)})),ix=Oa(qw,{TopLeftCorner:Ra(rc),ScaleDenominator:Ra(Qh),TileWidth:Ra(el),TileHeight:Ra(el),MatrixWidth:Ra(el),MatrixHeight:Ra(el)},Oa(Vw,{Identifier:Ra(il)}));e(nc,B),od=nc.prototype,od.la=function(){this.ge(!1),B.prototype.la.call(this)},od.Al=function(){var t=this.Tg();t&&(this.c=pe(re("EPSG:4326"),t),this.a&&this.set(hx,this.c(this.a)))},od.Bl=function(){if(Xd){var t=this.Ug();t&&void 0===this.f?this.f=navigator.geolocation.watchPosition(this.eo.bind(this),this.fo.bind(this),this.Gg()):t||void 0===this.f||(navigator.geolocation.clearWatch(this.f),this.f=void 0)}},od.eo=function(t){t=t.coords,this.set(rx,t.accuracy),this.set(sx,null===t.altitude?void 0:t.altitude),this.set(px,null===t.altitudeAccuracy?void 0:t.altitudeAccuracy),this.set(ax,null===t.heading?void 0:l(t.heading)),this.a?(this.a[0]=t.longitude,this.a[1]=t.latitude):this.a=[t.longitude,t.latitude];var e=this.c(this.a);this.set(hx,e),this.set(ux,null===t.speed?void 0:t.speed),t=Ve(mg,this.a,t.accuracy),t.oc(this.c),this.set(nx,t),this.v()},od.fo=function(t){t.type="error",this.ge(!1),this.b(t)},od.Aj=function(){return this.get(rx)},od.Bj=function(){return this.get(nx)||null},od.Dj=function(){return this.get(sx)},od.Ej=function(){return this.get(px)},od.yl=function(){return this.get(ax)},od.zl=function(){return this.get(hx)},od.Tg=function(){return this.get(lx)},od.jk=function(){return this.get(ux)},od.Ug=function(){return this.get(cx)},od.Gg=function(){return this.get(fx)},od.Vg=function(t){this.set(lx,t)},od.ge=function(t){this.set(cx,t)},od.ji=function(t){this.set(fx,t)};var rx="accuracy",nx="accuracyGeometry",sx="altitude",px="altitudeAccuracy",ax="heading",hx="position",lx="projection",ux="speed",cx="tracking",fx="trackingOptions";e(sc,ye),od=sc.prototype,od.clone=function(){var t=new sc(null);return ge(t,this.ia,this.A.slice()),t.v(),t},od.vb=function(t,e,o,i){var r=this.A;t-=r[0];var n=e-r[1];if(e=t*t+n*n,e<i){if(0===e)for(i=0;i<this.a;++i)o[i]=r[i];else for(i=this.vf()/Math.sqrt(e),o[0]=r[0]+i*t,o[1]=r[1]+i*n,i=2;i<this.a;++i)o[i]=r[i];return o.length=this.a,e}return i},od.Ac=function(t,e){var o=this.A,i=t-o[0],o=e-o[1];return i*i+o*o<=pc(this)},od.td=function(){return this.A.slice(0,this.a)},od.Pd=function(t){var e=this.A,o=e[this.a]-e[0];return Et(e[0]-o,e[1]-o,e[0]+o,e[1]+o,t)},od.vf=function(){return Math.sqrt(pc(this))},od.X=function(){return"Circle"},od.Na=function(t){var e=this.D();return!!Ht(t,e)&&(e=this.td(),t[0]<=e[0]&&t[2]>=e[0]||t[1]<=e[1]&&t[3]>=e[1]||Lt(t,this.jb,this))},od.Yl=function(t){var e=this.a,o=t.slice();o[e]=o[0]+(this.A[e]-this.A[0]);var i;for(i=1;i<e;++i)o[e+i]=t[i];ge(this,this.ia,o),this.v()},od.Sf=function(t,e,o){if(t){ve(this,o,t,0),this.A||(this.A=[]),o=this.A,t=Me(o,t),o[t++]=o[0]+e;var i;for(e=1,i=this.a;e<i;++e)o[t++]=o[e];o.length=t}else ge(this,"XY",null);this.v()},od.Zl=function(t){this.A[this.a]=this.A[0]+t,this.v()};var yx=new In({color:"rgba(0,0,0,0.2)"}),dx=[90,45,30,20,10,5,2,1,.5,.2,.1,.05,.01,.005,.002,.001];od=uc.prototype,od.Cl=function(){return this.l},od.Xj=function(){return this.b},od.dk=function(){return this.a},od.Lg=function(t){var e=t.vectorContext,o=t.frameState,i=o.extent;t=o.viewState;var r=t.center,n=t.projection,p=t.resolution;if(t=o.pixelRatio,t=p*p/(4*t*t),!this.c||!ne(this.c,n)){var a=re("EPSG:4326"),h=n.D(),l=n.i,u=ue(l,a,n),c=l[2],f=l[1],y=l[0],d=u[3],g=u[2],v=u[1],u=u[0];this.i=l[3],this.g=c,this.j=f,this.f=y,this.u=d,this.C=g,this.B=v,this.G=u,this.o=se(a,n),this.T=se(n,a),this.s=this.T(Dt(h)),this.c=n}for(n.a&&(n=n.D(),a=$t(n),o=o.focus[0],o<n[0]||o>n[2])&&(o=a*Math.ceil((n[0]-o)/a),i=[i[0]+o,i[1],i[2]+o,i[3]]),o=this.s[0],n=this.s[1],a=-1,l=Math.pow(this.za*p,2),c=[],f=[],p=0,h=dx.length;p<h&&(y=dx[p]/2,c[0]=o-y,c[1]=n-y,f[0]=o+y,f[1]=n+y,this.o(c,c),this.o(f,f),y=Math.pow(f[0]-c[0],2)+Math.pow(f[1]-c[1],2),!(y<=l));++p)a=dx[p];if(p=a,-1==p)this.b.length=this.a.length=0;else{for(o=this.T(r),r=o[0],o=o[1],n=this.S,a=[Math.max(i[0],this.G),Math.max(i[1],this.B),Math.min(i[2],this.C),Math.min(i[3],this.u)],a=ue(a,this.c,"EPSG:4326"),l=a[3],f=a[1],r=Math.floor(r/p)*p,c=s(r,this.f,this.g),h=cc(this,c,f,l,t,i,0),a=0;c!=this.f&&a++<n;)c=Math.max(c-p,this.f),h=cc(this,c,f,l,t,i,h);for(c=s(r,this.f,this.g),a=0;c!=this.g&&a++<n;)c=Math.min(c+p,this.g),h=cc(this,c,f,l,t,i,h);for(this.b.length=h,o=Math.floor(o/p)*p,r=s(o,this.j,this.i),h=fc(this,r,t,i,0),a=0;r!=this.j&&a++<n;)r=Math.max(r-p,this.j),h=fc(this,r,t,i,h);for(r=s(o,this.j,this.i),a=0;r!=this.i&&a++<n;)r=Math.min(r+p,this.i),h=fc(this,r,t,i,h);this.a.length=h}for(e.Vb(null,this.na),t=0,r=this.b.length;t<r;++t)p=this.b[t],e.kd(p,null);for(t=0,r=this.a.length;t<r;++t)p=this.a[t],e.kd(p,null)},od.setMap=function(t){this.l&&(this.l.J("postcompose",this.Lg,this),this.l.render()),t&&(t.I("postcompose",this.Lg,this),t.render()),this.l=t},e(yc,Bi),od=yc.prototype,od.la=function(){1==this.state&&dc(this),this.a&&N(this.a),this.state=5,Ui(this),Bi.prototype.la.call(this)},od.qb=function(){return this.g},od.Xa=function(){return this.o},od.Dl=function(){this.state=3,dc(this),Ui(this)},od.El=function(){this.state=this.g.naturalWidth&&this.g.naturalHeight?ag:4,dc(this),Ui(this)},od.load=function(){0!=this.state&&3!=this.state||(this.state=1,Ui(this),this.j=[M(this.g,"error",this.Dl,this),M(this.g,"load",this.El,this)],this.s(this,this.o))},e(gc,Zi),gc.prototype.j=function(t,e){var o=e.target.result,i=this.s,r=this.l;r||(r=i.$().l);var n,s,i=this.i,p=[];for(n=0,s=i.length;n<s;++n){var a=new i[n],h={featureProjection:r};try{p=a.Ha(o,h)}catch(l){p=null}if(p&&0<p.length)break}this.b(new bc(gx,t,p,r))},gc.prototype.setMap=function(t){this.a&&(this.a.forEach(P),this.a=null),Zi.prototype.setMap.call(this,t),t&&(t=this.target?this.target:t.a,this.a=[E(t,"drop",vc,this),E(t,"dragenter",mc,this),E(t,"dragover",mc,this),E(t,"drop",mc,this)])};var gx="addfeatures";e(bc,L),e(wc,ur),function(){var t={},e={ja:t};!function(o){if("object"==typeof t&&"undefined"!=typeof e)e.ja=o();else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,i.Dp=o()}}(function(){return function t(e,o,i){function r(s,p){if(!o[s]){if(!e[s]){var a="function"==typeof require&&require;if(!p&&a)return a(s,!0);if(n)return n(s,!0);throw a=Error("Cannot find module '"+s+"'"),a.code="MODULE_NOT_FOUND",a}a=o[s]={ja:{}},e[s][0].call(a.ja,function(t){var o=e[s][1][t];return r(o?o:t)},a,a.ja,t,e,o,i)}return o[s].ja}for(var n="function"==typeof require&&require,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e){function o(t,e,n,s,p){for(n=n||0,s=s||t.length-1,p=p||r;s>n;){if(600<s-n){var a=s-n+1,h=e-n+1,l=Math.log(a),u=.5*Math.exp(2*l/3),l=.5*Math.sqrt(l*u*(a-u)/a)*(0>h-a/2?-1:1);o(t,e,Math.max(n,Math.floor(e-h*u/a+l)),Math.min(s,Math.floor(e+(a-h)*u/a+l)),p)}for(a=t[e],h=n,u=s,i(t,n,e),0<p(t[s],a)&&i(t,n,s);h<u;){for(i(t,h,u),h++,u--;0>p(t[h],a);)h++;for(;0<p(t[u],a);)u--}0===p(t[n],a)?i(t,n,u):(u++,i(t,u,s)),u<=e&&(n=u+1),e<=u&&(s=u-1)}}function i(t,e,o){var i=t[e];t[e]=t[o],t[o]=i}function r(t,e){return t<e?-1:t>e?1:0}e.ja=o},{}],2:[function(t,e){function o(t,e){return this instanceof o?(this.Qe=Math.max(4,t||9),this.dg=Math.max(2,Math.ceil(.4*this.Qe)),e&&this.bj(e),void this.clear()):new o(t,e)}function i(t,e){r(t,0,t.children.length,e,t)}function r(t,e,o,i,r){r||(r=c(null)),r.ba=1/0,r.ea=1/0,r.da=-(1/0),r.ha=-(1/0);for(var s;e<o;e++)s=t.children[e],n(r,t.Wa?i(s):s);return r}function n(t,e){t.ba=Math.min(t.ba,e.ba),t.ea=Math.min(t.ea,e.ea),t.da=Math.max(t.da,e.da),t.ha=Math.max(t.ha,e.ha)}function s(t,e){return t.ba-e.ba}function p(t,e){return t.ea-e.ea}function a(t){return(t.da-t.ba)*(t.ha-t.ea)}function h(t){return t.da-t.ba+(t.ha-t.ea)}function l(t,e){return t.ba<=e.ba&&t.ea<=e.ea&&e.da<=t.da&&e.ha<=t.ha}function u(t,e){return e.ba<=t.da&&e.ea<=t.ha&&e.da>=t.ba&&e.ha>=t.ea}function c(t){return{children:t,height:1,Wa:!0,ba:1/0,ea:1/0,da:-(1/0),ha:-(1/0)}}function f(t,e,o,i,r){for(var n,s=[e,o];s.length;)o=s.pop(),e=s.pop(),o-e<=i||(n=e+Math.ceil((o-e)/i/2)*i,y(t,n,e,o,r),s.push(e,n,n,o))}e.ja=o;var y=t("quickselect");o.prototype={all:function(){return this.Zf(this.data,[])},search:function(t){var e=this.data,o=[],i=this.ob;if(!u(t,e))return o;for(var r,n,s,p,a=[];e;){for(r=0,n=e.children.length;r<n;r++)s=e.children[r],p=e.Wa?i(s):s,u(t,p)&&(e.Wa?o.push(s):l(t,p)?this.Zf(s,o):a.push(s));e=a.pop()}return o},load:function(t){if(!t||!t.length)return this;if(t.length<this.dg){for(var e=0,o=t.length;e<o;e++)this.Da(t[e]);return this}return t=this.ag(t.slice(),0,t.length-1,0),this.data.children.length?this.data.height===t.height?this.fg(this.data,t):(this.data.height<t.height&&(e=this.data,this.data=t,t=e),this.cg(t,this.data.height-t.height-1,!0)):this.data=t,this},Da:function(t){return t&&this.cg(t,this.data.height-1),this},clear:function(){return this.data=c([]),this},remove:function(t,e){if(!t)return this;for(var o,i,r,n,s=this.data,p=this.ob(t),a=[],h=[];s||a.length;){if(s||(s=a.pop(),i=a[a.length-1],o=h.pop(),n=!0),s.Wa){t:{r=t;var u=s.children,c=e;if(c){for(var f=0;f<u.length;f++)if(c(r,u[f])){r=f;break t}r=-1}else r=u.indexOf(r)}if(-1!==r){s.children.splice(r,1),a.push(s),this.$i(a);break}}n||s.Wa||!l(s,p)?i?(o++,s=i.children[o],n=!1):s=null:(a.push(s),h.push(o),o=0,i=s,s=s.children[0])}return this},ob:function(t){return t},Se:s,Te:p,toJSON:function(){return this.data},Zf:function(t,e){for(var o=[];t;)t.Wa?e.push.apply(e,t.children):o.push.apply(o,t.children),t=o.pop();return e},ag:function(t,e,o,r){var n,s=o-e+1,p=this.Qe;if(s<=p)return n=c(t.slice(e,o+1)),i(n,this.ob),n;r||(r=Math.ceil(Math.log(s)/Math.log(p)),p=Math.ceil(s/Math.pow(p,r-1))),n=c([]),n.Wa=!1,n.height=r;var a,h,l,s=Math.ceil(s/p),p=s*Math.ceil(Math.sqrt(p));for(f(t,e,o,p,this.Se);e<=o;e+=p)for(h=Math.min(e+p-1,o),f(t,e,h,s,this.Te),a=e;a<=h;a+=s)l=Math.min(a+s-1,h),n.children.push(this.ag(t,a,l,r-1));return i(n,this.ob),n},Zi:function(t,e,o,i){for(var r,n,s,p,h,l,u,c;i.push(e),!e.Wa&&i.length-1!==o;){for(u=c=1/0,r=0,n=e.children.length;r<n;r++)s=e.children[r],h=a(s),l=(Math.max(s.da,t.da)-Math.min(s.ba,t.ba))*(Math.max(s.ha,t.ha)-Math.min(s.ea,t.ea))-h,l<c?(c=l,u=h<u?h:u,p=s):l===c&&h<u&&(u=h,p=s);e=p||e.children[0]}return e},cg:function(t,e,o){var i=this.ob;o=o?t:i(t);var i=[],r=this.Zi(o,this.data,e,i);for(r.children.push(t),n(r,o);0<=e&&i[e].children.length>this.Qe;)this.gj(i,e),e--;this.Wi(o,i,e)},gj:function(t,e){var o=t[e],r=o.children.length,n=this.dg;this.Xi(o,n,r),r=this.Yi(o,n,r),r=c(o.children.splice(r,o.children.length-r)),r.height=o.height,r.Wa=o.Wa,i(o,this.ob),i(r,this.ob),e?t[e-1].children.push(r):this.fg(o,r)},fg:function(t,e){this.data=c([t,e]),this.data.height=t.height+1,this.data.Wa=!1,i(this.data,this.ob)},Yi:function(t,e,o){var i,n,s,p,h,l,u;for(h=l=1/0,i=e;i<=o-e;i++)n=r(t,0,i,this.ob),s=r(t,i,o,this.ob),p=Math.max(0,Math.min(n.da,s.da)-Math.max(n.ba,s.ba))*Math.max(0,Math.min(n.ha,s.ha)-Math.max(n.ea,s.ea)),n=a(n)+a(s),p<h?(h=p,u=i,l=n<l?n:l):p===h&&n<l&&(l=n,u=i);return u},Xi:function(t,e,o){var i=t.Wa?this.Se:s,r=t.Wa?this.Te:p,n=this.$f(t,e,o,i);e=this.$f(t,e,o,r),n<e&&t.children.sort(i)},$f:function(t,e,o,i){t.children.sort(i),i=this.ob;var s,p,a=r(t,0,e,i),l=r(t,o-e,o,i),u=h(a)+h(l);for(s=e;s<o-e;s++)p=t.children[s],n(a,t.Wa?i(p):p),u+=h(a);for(s=o-e-1;s>=e;s--)p=t.children[s],n(l,t.Wa?i(p):p),u+=h(l);return u},Wi:function(t,e,o){for(;0<=o;o--)n(e[o],t)},$i:function(t){for(var e,o=t.length-1;0<=o;o--)0===t[o].children.length?0<o?(e=t[o-1].children,e.splice(e.indexOf(t[o]),1)):this.clear():i(t[o],this.ob)},bj:function(t){var e=["return a"," - b",";"];this.Se=new Function("a","b",e.join(t[0])),this.Te=new Function("a","b",e.join(t[1])),this.ob=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},{quickselect:1}]},{},[2])(2)}),Zb=e.ja}(),od=Mc.prototype,od.Da=function(t,e){var o={ba:t[0],ea:t[1],da:t[2],ha:t[3],value:e};this.b.Da(o),this.a[i(e)]=o},od.load=function(t,e){for(var o=Array(e.length),r=0,n=e.length;r<n;r++){var s=t[r],p=e[r],s={ba:s[0],ea:s[1],da:s[2],ha:s[3],value:p};o[r]=s,this.a[i(p)]=s}this.b.load(o)},od.remove=function(t){t=i(t);var e=this.a[t];return delete this.a[t],null!==this.b.remove(e)},od.forEach=function(t,e){return Nc(Pc(this),t,e)},od.clear=function(){this.b.clear(),this.a={}},od.D=function(){var t=this.b.data;return[t.ba,t.ea,t.da,t.ha]},e(Lc,$s),od=Lc.prototype,od.cb=function(t){var e=i(t).toString();if(kc(this,e,t)){Rc(this,e,t);var o=t.V();o?(e=o.D(),this.a&&this.a.Da(e,t)):this.i[e]=t,this.b(new Bc(vx,t))}this.v()},od.Ic=function(t){Ic(this,t),this.v()},od.clear=function(t){if(t){for(var e in this.s)this.s[e].forEach(P);this.c||(this.s={},this.l={},this.o={})}else if(this.a){this.a.forEach(this.Of,this);for(var o in this.i)this.Of(this.i[o])}this.c&&this.c.clear(),this.a&&this.a.clear(),this.ra.clear(),this.i={},this.b(new Bc(bx)),this.v()},od.qg=function(t,e){return this.a?this.a.forEach(t,e):this.c?this.c.forEach(t,e):void 0},od.Kb=function(t,e,o){return this.a?jc(this.a,t,e,o):this.c?this.c.forEach(e,o):void 0},od.rg=function(t,e,o){return this.Kb(t,function(i){if(i.V().Na(t)&&(i=e.call(o,i)))return i})},od.zg=function(){return this.c},od.oe=function(){var t;return this.c?t=this.c.a:this.a&&(t=Pc(this.a),m(this.i)||W(t,v(this.i))),t},od.yg=function(t){var e=[];return Fc(this,t,function(t){e.push(t)}),e},od.bf=function(t){return Ac(this.a,t)},od.ug=function(t,e){var o=t[0],i=t[1],r=null,n=[NaN,NaN],s=1/0,p=[-(1/0),-(1/0),1/0,1/0],a=e?e:zt;return jc(this.a,p,function(t){if(a(t)){var e=t.V(),h=s;s=e.vb(o,i,n,s),s<h&&(r=t,t=Math.sqrt(s),p[0]=o-t,p[1]=i-t,p[2]=o+t,p[3]=i+t)}}),r},od.D=function(){return this.a.D()},od.xg=function(t){return t=this.l[t.toString()],void 0!==t?t:null},od.sh=function(){return this.P},od.th=function(){return this.Z},od.uh=function(t){t=t.target;var e=i(t).toString(),o=t.V();o?(o=o.D(),e in this.i?(delete this.i[e],this.a&&this.a.Da(o,t)):this.a&&Cc(this.a,o,t)):e in this.i||(this.a&&this.a.remove(t),this.i[e]=t),o=t.a,void 0!==o?(o=o.toString(),e in this.o?(delete this.o[e],this.l[o]=t):this.l[o]!==t&&(Oc(this,t),this.l[o]=t)):e in this.o||(Oc(this,t),this.o[e]=t),this.v(),this.b(new Bc(mx,t))},od.rd=function(t,e,o){var i=this.ra;t=this.ac(t,e);var r,n;for(r=0,n=t.length;r<n;++r){var s=t[r];jc(i,s,function(t){return wt(t.extent,s)})||(this.W.call(this,s,e,o),i.Da(s,{extent:s.slice()}))}},od.mb=function(t){var e=i(t).toString();e in this.i?delete this.i[e]:this.a&&this.a.remove(t),this.Of(t),this.v()},od.Of=function(t){var e=i(t).toString();this.s[e].forEach(P),delete this.s[e];var o=t.a;void 0!==o?delete this.l[o.toString()]:delete this.o[e],this.b(new Bc(wx,t))},e(Bc,L);var vx="addfeature",mx="changefeature",bx="clear",wx="removefeature";e(Uc,ur),od=Uc.prototype,od.setMap=function(t){ur.prototype.setMap.call(this,t),this.ri()},od.Fo=function(){var t,e,o=this.j.V();this.i===Sx?(t=this.a,t.splice(-2,1),this.G(t,o)):this.i===Tx&&(t=this.a[0],t.splice(-2,1),e=this.B.V(),e.ma(t),this.G(this.a,o)),0===t.length&&(this.o=null),Yc(this)},od.ld=function(){var t=Vc(this),e=this.a,o=t.V();this.i===Sx?(e.pop(),this.G(e,o)):this.i===Tx&&(e[0].pop(),this.G(e,o),e=o.Y()),"MultiPoint"===this.W?t.Oa(new nh([e])):"MultiLineString"===this.W?t.Oa(new oh([e])):"MultiPolygon"===this.W&&t.Oa(new sh([e])),this.b(new Jc(Cx,t)),this.Aa&&this.Aa.push(t),this.ub&&this.ub.cb(t)},od.fm=function(t){var e=t.V();this.j=t,this.a=e.Y(),t=this.a[this.a.length-1],this.o=t.slice(),this.a.push(t.slice()),Yc(this),this.b(new Jc(Mx,this.j))},od.Fc=qt,od.ri=function(){var t=this.s,e=this.f();t&&e||Vc(this),this.ra.setMap(e?t:null)};var xx="Point",Sx="LineString",Tx="Polygon",Ex="Circle";e(Jc,L);var Mx="drawstart",Cx="drawend";e(_c,ur),_c.prototype.setMap=function(t){this.u.setMap(t),this.S.setMap(t),ur.prototype.setMap.call(this,t)},_c.prototype.D=function(){return this.j},_c.prototype.i=function(t){this.j=t?t:null;var e=this.o;e?t?e.Oa(Ye(t)):e.Oa(void 0):(this.o=e=new wa(t?Ye(t):{}),this.u.ga().cb(e)),this.b(new lf(this.j))},e(lf,L);var Px="extentchanged";e(uf,ur),od=uf.prototype,od.wf=function(t){var e=t.V();e&&e.X()in this.fa&&this.fa[e.X()].call(this,t,e),(e=this.s)&&xf(this,this.ra,e),E(t,"change",this.ah,this)},od.Ba=function(t){this.a&&!t&&(this.G.ga().mb(this.a),this.a=null),ur.prototype.Ba.call(this,t)},od.setMap=function(t){this.G.setMap(t),ur.prototype.setMap.call(this,t)},od.gm=function(t){this.wf(t.element)},od.ah=function(t){this.o||(t=t.target,ff(this,t),this.wf(t))},od.hm=function(t){ff(this,t.element)},od.mm=function(t,e){var o=e.Y(),o={feature:t,geometry:e,pa:[o,o]};this.i.Da(e.D(),o)},od.km=function(t,e){var o,i,r,n=e.Y();for(i=0,r=n.length;i<r;++i)o=n[i],o={feature:t,geometry:e,depth:[i],index:i,pa:[o,o]},this.i.Da(e.D(),o)},od.bh=function(t,e){var o,i,r,n,s=e.Y();for(o=0,i=s.length-1;o<i;++o)r=s.slice(o,o+2),n={feature:t,geometry:e,index:o,pa:r},this.i.Da(dt(r),n)},od.jm=function(t,e){var o,i,r,n,s,p,a,h=e.Y();for(n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)p=o.slice(i,i+2),a={feature:t,geometry:e,depth:[n],index:i,pa:p},this.i.Da(dt(p),a)},od.nm=function(t,e){var o,i,r,n,s,p,a,h=e.Y();for(n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)p=o.slice(i,i+2),a={feature:t,geometry:e,depth:[n],index:i,pa:p},this.i.Da(dt(p),a)},od.lm=function(t,e){var o,i,r,n,s,p,a,h,l,u,c=e.Y();for(p=0,a=c.length;p<a;++p)for(h=c[p],n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)l=o.slice(i,i+2),u={feature:t,geometry:e,depth:[n,p],index:i,pa:l},this.i.Da(dt(l),u)},od.im=function(t,e){var o,i=e.f;for(o=0;o<i.length;++o)this.fa[i[o].X()].call(this,t,i[o])},od.$k=function(t,e){for(var o,i=t.pa,r=t.feature,n=t.geometry,s=t.depth,p=t.index;e.length<n.sa();)e.push(0);switch(n.X()){case"MultiLineString":o=n.Y(),o[s[0]].splice(p+1,0,e);break;case"Polygon":o=n.Y(),o[s[0]].splice(p+1,0,e);break;case"MultiPolygon":o=n.Y(),o[s[1]][s[0]].splice(p+1,0,e);break;case"LineString":o=n.Y(),o.splice(p+1,0,e);break;default:return}this.o=!0,n.ma(o),this.o=!1,o=this.i,o.remove(t),Sf(this,n,p,s,1);var a={pa:[i[0],e],feature:r,geometry:n,depth:s,index:p};o.Da(dt(a.pa),a),this.j.push([a,1]),i={pa:[e,i[1]],feature:r,geometry:n,depth:s,index:p+1},o.Da(dt(i.pa),i),this.j.push([i,0]),this.P=!0},od.Qh=function(){var t=!1;if(this.W&&this.W.type!=og){var e=this.W;cf(this,e);var o,r,n,s,p,a,h,l,u=this.j,t={},c=!1;for(s=u.length-1;0<=s;--s)n=u[s],h=n[0],l=i(h.feature),h.depth&&(l+="-"+h.depth.join("-")),l in t||(t[l]={}),0===n[1]?(t[l].right=h,t[l].index=h.index):1==n[1]&&(t[l].left=h,t[l].index=h.index+1);for(l in t){switch(a=t[l].right,s=t[l].left,n=t[l].index,p=n-1,h=void 0!==s?s:a,0>p&&(p=0),u=h.geometry,o=r=u.Y(),c=!1,u.X()){case"MultiLineString":2<r[h.depth[0]].length&&(r[h.depth[0]].splice(n,1),c=!0);break;case"LineString":2<r.length&&(r.splice(n,1),c=!0);break;case"MultiPolygon":o=o[h.depth[1]];case"Polygon":o=o[h.depth[0]],4<o.length&&(n==o.length-1&&(n=0),o.splice(n,1),c=!0,0===n&&(o.pop(),o.push(o[0]),p=o.length-1))}c&&(o=u,this.o=!0,o.ma(r),this.o=!1,r=[],void 0!==s&&(this.i.remove(s),r.push(s.pa[0])),void 0!==a&&(this.i.remove(a),r.push(a.pa[1])),void 0!==s&&void 0!==a&&(s={depth:h.depth,feature:h.feature,geometry:h.geometry,index:p,pa:r},this.i.Da(dt(s.pa),s)),Sf(this,u,n,h.depth,-1),this.a&&(this.G.ga().mb(this.a),this.a=null))}t=c,this.b(new Ef(jx,this.u,e)),this.B=!1}return t},e(Ef,L);var Ax="modifystart",jx="modifyend";e(Mf,Zi),od=Mf.prototype,od.pm=function(){return this.i.ga().c},od.qm=function(t){return t=i(t),this.a[t]},od.setMap=function(t){var e=this.s,o=this.i.ga().c;e&&o.forEach(e.oi,e),Zi.prototype.setMap.call(this,t),this.i.setMap(t),t&&o.forEach(t.ki,t)},od.om=function(t){var e=this.s;e&&e.ki(t.element)},od.rm=function(t){var e=this.s;e&&e.oi(t.element)},e(Af,L);var Nx="select";e(jf,ur),od=jf.prototype,od.cb=function(t,e){var o=void 0===e||e,r=i(t),n=t.V();if(n){var s=this.fa[n.X()];s&&(this.W[r]=n.D(Tt()),s.call(this,t,n),o&&(this.G[r]=E(n,"change",this.yk.bind(this,t),this)))}o&&(this.B[r]=E(t,U(t.f),this.sm,this))},od.xj=function(t){this.cb(t)},od.yj=function(t){this.mb(t)},od.dh=function(t){var e;t instanceof Bc?e=t.feature:t instanceof Bo&&(e=t.element),this.cb(e)},od.eh=function(t){var e;t instanceof Bc?e=t.feature:t instanceof Bo&&(e=t.element),this.mb(e)},od.sm=function(t){t=t.target,this.mb(t,!0),this.cb(t,!0)},od.yk=function(t){if(this.C){var e=i(t);e in this.u||(this.u[e]=t)}else this.pi(t)},od.mb=function(t,e){var o=void 0===e||e,r=i(t),n=this.W[r];if(n){var s=this.a,p=[];for(jc(s,n,function(e){t===e.feature&&p.push(e)}),n=p.length-1;0<=n;--n)s.remove(p[n]);o&&(F(this.G[r]),delete this.G[r])}o&&(F(this.B[r]),delete this.B[r])},od.setMap=function(t){var e,o=this.s,i=this.oa;this.j?e=this.j:this.o&&(e=this.o.oe()),o&&(i.forEach(F),i.length=0,e.forEach(this.yj,this)),ur.prototype.setMap.call(this,t),t&&(this.j?i.push(E(this.j,xd,this.dh,this),E(this.j,Sd,this.eh,this)):this.o&&i.push(E(this.o,vx,this.dh,this),E(this.o,wx,this.eh,this)),e.forEach(this.xj,this))},od.Fc=qt,od.pi=function(t){this.mb(t,!1),this.cb(t,!1)},od.tm=function(t,e){var o,i=e.f;for(o=0;o<i.length;++o)this.fa[i[o].X()].call(this,t,i[o])},od.fh=function(t,e){var o,i,r,n,s=e.Y();for(o=0,i=s.length-1;o<i;++o)r=s.slice(o,o+2),n={feature:t,pa:r},this.a.Da(dt(r),n)},od.um=function(t,e){var o,i,r,n,s,p,a,h=e.Y();for(n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)p=o.slice(i,i+2),a={feature:t,pa:p},this.a.Da(dt(p),a)},od.vm=function(t,e){var o,i,r,n=e.Y();for(i=0,r=n.length;i<r;++i)o=n[i],o={feature:t,pa:[o,o]},this.a.Da(e.D(),o)},od.wm=function(t,e){var o,i,r,n,s,p,a,h,l,u,c=e.Y();for(p=0,a=c.length;p<a;++p)for(h=c[p],n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)l=o.slice(i,i+2),u={feature:t,pa:l},this.a.Da(dt(l),u)},od.xm=function(t,e){var o=e.Y(),o={feature:t,pa:[o,o]};this.a.Da(e.D(),o)},od.ym=function(t,e){var o,i,r,n,s,p,a,h=e.Y();for(n=0,s=h.length;n<s;++n)for(o=h[n],i=0,r=o.length-1;i<r;++i)p=o.slice(i,i+2),a={feature:t,pa:p},this.a.Da(dt(p),a)},e(kf,ur),e(Uf,L);var Lx="translatestart",Rx="translating",kx="translateend";e(Gf,$n);var Ix=["#00f","#0ff","#0f0","#ff0","#f00"];od=Gf.prototype,od.tg=function(){return this.get(Dx)},od.Ag=function(){return this.get(Fx)},od.hh=function(){return this.get(Ox)},od.zk=function(){for(var t=this.Ag(),e=Xo(1,256),o=e.createLinearGradient(0,0,1,256),i=1/(t.length-1),r=0,n=t.length;r<n;++r)o.addColorStop(r*i,t[r]);e.fillStyle=o,e.fillRect(0,0,1,256),this.f=e.getImageData(0,0,1,256).data},od.lf=function(){var t=this.hh(),e=this.tg(),o=t+e+1,i=2*o,i=Xo(i,i);i.shadowOffsetX=i.shadowOffsetY=this.W,i.shadowBlur=e,i.shadowColor="#000",i.beginPath(),e=o-this.W,i.arc(e,e,t,0,2*Math.PI,!0),i.fill(),this.P=i.canvas.toDataURL(),this.c=Array(256),this.v()},od.Qk=function(t){t=t.context;var e,o,i,r=t.canvas,r=t.getImageData(0,0,r.width,r.height),n=r.data;for(e=0,o=n.length;e<o;e+=4)(i=4*n[e+3])&&(n[e]=this.f[i],n[e+1]=this.f[i+1],n[e+2]=this.f[i+2]);t.putImageData(r,0,0)},od.Th=function(t){this.set(Dx,t)},od.$h=function(t){this.set(Fx,t)},od.ih=function(t){this.set(Ox,t)};var Dx="blur",Fx="gradient",Ox="radius";e(Hf,Bi),Hf.prototype.la=function(){1==this.state&&(this.Xc.forEach(P),this.Xc=null),Bi.prototype.la.call(this)},Hf.prototype.qb=function(){return this.u},Hf.prototype.Bd=function(){var t=[];if(this.g.forEach(function(e){e&&e.U()==ag&&t.push({extent:this.c.Ia(e.ya),image:e.qb()})},this),this.g.length=0,0===t.length)this.state=3;else{var e=this.s[0],o=this.o.Va(e),i="number"==typeof o?o:o[0],o="number"==typeof o?o:o[1],e=this.o.Ga(e),r=this.c.Ga(this.j),n=this.o.Ia(this.s);this.u=Fs(i,o,this.B,r,this.c.D(),e,n,this.T,t,this.C,this.G),this.state=ag}Ui(this)},Hf.prototype.load=function(){if(0==this.state){this.state=1,Ui(this);var t=0;this.Xc=[],this.g.forEach(function(e){var o=e.U();if(0==o||1==o){t++;var i;i=E(e,"change",function(){var o=e.U();o!=ag&&3!=o&&4!=o||(P(i),t--,0===t&&(this.Xc.forEach(P),this.Xc=null,this.Bd()))},this),this.Xc.push(i)}},this),this.g.forEach(function(t){0==t.U()&&t.load()}),0===t&&setTimeout(this.Bd.bind(this),0)}},e(Vf,Yp),Vf.prototype.Kc=function(t){for(var e,o;Yf(this);){e=this.a.Gc,o=e.ya[0].toString();var i;if((i=o in t)&&(e=e.ya,i=yo(t[o],e[1],e[2])),i)break;N(this.pop())}},e(Zf,$s),od=Zf.prototype,od.qh=function(){return Yf(this.a)},od.Kc=function(t,e){var o=this.qd(t);o&&o.Kc(e)},od.df=function(){return 0},od.Fb=function(t,e,o){return t+"/"+e+"/"+o},od.gf=function(){return this.fa},od.Ra=function(){return this.tileGrid},od.pb=function(t){return this.tileGrid?this.tileGrid:Lo(t)},od.qd=function(t){var e=this.f;return e&&!ne(e,t)?null:this.a},od.gb=function(){return this.oa},od.kf=function(t,e,o){return o=this.pb(o),e=this.gb(e),t=wo(o.Va(t),this.l),1==e?t:bo(t,e,this.l)},od.ta=function(){this.a.clear(),this.v()},od.Vf=o,e(ty,L),e(ey,Zf),od=ey.prototype,od.fb=function(){return this.tileLoadFunction},od.hb=function(){return this.tileUrlFunction},od.ib=function(){return this.urls},od.rh=function(t){switch(t=t.target,t.U()){case 1:this.b(new ty("tileloadstart",t));break;case ag:this.b(new ty("tileloadend",t));break;case 3:this.b(new ty("tileloaderror",t))}},od.nb=function(t){this.a.clear(),this.tileLoadFunction=t,this.v()},od.Ta=function(t,e){this.tileUrlFunction=t,"undefined"!=typeof e?_f(this,e):this.v()},od.Ya=function(t){var e=this.urls=qf(t);this.Ta(this.sc?this.sc.bind(this):Kf(e,this.tileGrid),t)},od.Ua=function(t){this.urls=t;var e=t.join("\n");this.Ta(this.sc?this.sc.bind(this):Kf(t,this.tileGrid),e)},od.Vf=function(t,e,o){t=this.Fb(t,e,o),this.a.b.hasOwnProperty(t)&&this.a.get(t)},e(oy,ey),od=oy.prototype,od.qh=function(){if(Yf(this.a))return!0;for(var t in this.i)if(Yf(this.i[t]))return!0;return!1},od.Kc=function(t,e){var o=this.qd(t);this.a.Kc(this.a==o?e:{});for(var i in this.i){var r=this.i[i];r.Kc(r==o?e:{})}},od.df=function(t){return this.f&&t&&!ne(this.f,t)?0:this.ef()},od.ef=function(){return 0},od.gf=function(t){return!(this.f&&t&&!ne(this.f,t))&&ey.prototype.gf.call(this,t)},od.pb=function(t){var e=this.f;return!this.tileGrid||e&&!ne(e,t)?(e=i(t).toString(),e in this.s||(this.s[e]=Lo(t)),this.s[e]):this.tileGrid},od.qd=function(t){var e=this.f;return!e||ne(e,t)?this.a:(t=i(t).toString(),t in this.i||(this.i[t]=new Vf),this.i[t])},od.vc=function(t,e,o,i,r){if(this.f&&r&&!ne(this.f,r)){var n=this.qd(r);o=[t,e,o];var s;if(t=this.Fb.apply(this,o),n.b.hasOwnProperty(t)&&(s=n.get(t)),e=this.ec,s&&s.key==e)return s;var p=this.f,a=this.pb(p),h=this.pb(r),l=Qf(this,o,r);return i=new Hf(p,a,r,h,o,l,this.gb(i),this.ef(),function(t,e,o,i){return ry(this,t,e,o,i,p)}.bind(this),this.ra,this.B),i.key=e,s?(i.a=s,n.replace(t,i)):n.set(t,i),i}return ry(this,t,e,o,i,r)},od.Bb=function(t){if(this.B!=t){this.B=t;for(var e in this.i)this.i[e].clear();this.v()}},od.Cb=function(t,e){var o=re(t);o&&(o=i(o).toString(),o in this.s||(this.s[o]=e))},e(sy,oy);var Bx=new Do({html:'<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'});sy.prototype.P=function(){return this.c},sy.prototype.W=function(){return this.o},sy.prototype.Z=function(t){if(200!=t.statusCode||"OK"!=t.statusDescription||"ValidCredentials"!=t.authenticationResultCode||1!=t.resourceSets.length||1!=t.resourceSets[0].resources.length)Xs(this,"error");else{var e=t.brandLogoUri;-1==e.indexOf("https")&&(e=e.replace("http","https"));var o=t.resourceSets[0].resources[0],i=-1==this.u?o.zoomMax:this.u;t=Io(this.f);var r=Ro({extent:t,minZoom:o.zoomMin,maxZoom:i,tileSize:o.imageWidth==o.imageHeight?o.imageWidth:[o.imageWidth,o.imageHeight]});this.tileGrid=r;var n=this.C;if(this.tileUrlFunction=Wf(o.imageUrlSubdomains.map(function(t){var e=[0,0,0],i=o.imageUrl.replace("{subdomain}",t).replace("{culture}",n);return function(t){if(t)return xo(t[0],t[1],-t[2]-1,e),i.replace("{quadkey}",So(e))}})),o.imageryProviders){var s=pe(re("EPSG:4326"),this.f);t=o.imageryProviders.map(function(t){var e=t.attribution,o={};return t.coverageAreas.forEach(function(t){var e=t.zoomMin,n=Math.min(t.zoomMax,i);t=t.bbox,t=Wt([t[1],t[0],t[3],t[2]],s);var p,a;for(p=e;p<=n;++p)a=p.toString(),e=Po(r,t,p),a in o?o[a].push(e):o[a]=[e]}),new Do({html:e,tileRanges:o})}),t.push(Bx),this.qa(t)}this.S=e,Xs(this,"ready")}},e(py,oy),e(ay,py),od=ay.prototype,od.Hj=function(){return this.c},od.gp=function(t){
-hd(this.c,t),hy(this)},od.Po=function(t){this.c=t||{},hy(this)},od.Bk=function(t,e){var o=e.target;if(!o.status||200<=o.status&&300>o.status){var i;try{i=JSON.parse(o.responseText)}catch(r){return void Xs(this,"error")}ly(this,i),this.o[t]=i,Xs(this,"ready")}else Xs(this,"error")},od.Ak=function(){Xs(this,"error")},e(uy,Lc),uy.prototype.ub=function(){return this.u},uy.prototype.rd=function(t,e,o){this.u.rd(t,e,o),e!==this.B&&(this.clear(),this.B=e,cy(this),this.Ic(this.C))},uy.prototype.Jb=function(t){this.fa=t,this.La()},uy.prototype.La=function(){this.clear(),cy(this),this.Ic(this.C),this.v()},e(dy,Ks),od=dy.prototype,od.Gm=function(){return this.u},od.Lc=function(t,e,o,i){if(void 0===this.i)return null;e=Ws(this,e);var r=this.c;if(r&&this.P==this.g&&r.resolution==e&&r.f==o&&wt(r.D(),t))return r;r={F:"image",FORMAT:"PNG32",TRANSPARENT:!0},hd(r,this.u),t=t.slice();var s=(t[0]+t[2])/2,p=(t[1]+t[3])/2;if(1!=this.B){var a=this.B*$t(t)/2,h=this.B*Ot(t)/2;t[0]=s-a,t[1]=p-h,t[2]=s+a,t[3]=p+h}var a=e/o,h=Math.ceil($t(t)/a),l=Math.ceil(Ot(t)/a);return t[0]=s-a*h/2,t[2]=s+a*h/2,t[1]=p-a*l/2,t[3]=p+a*l/2,this.s[0]=h,this.s[1]=l,s=t,p=this.s,i=i.eb.split(":").pop(),r.SIZE=p[0]+","+p[1],r.BBOX=s.join(","),r.BBOXSR=i,r.IMAGESR=i,r.DPI=90*o,i=this.i,s=i.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),s==i&&n(!1,50),r=yy(s,r),this.c=new Pn(t,e,o,this.j,r,this.Z,this.l),this.P=this.g,E(this.c,"change",this.o,this),this.c},od.Fm=function(){return this.l},od.Hm=function(){return this.i},od.Im=function(t){this.c=null,this.l=t,this.v()},od.Jm=function(t){t!=this.i&&(this.i=t,this.c=null,this.v())},od.Km=function(t){hd(this.u,t),this.c=null,this.v()},e(gy,Ks),od=gy.prototype,od.Mm=function(){return this.l},od.Lc=function(t,e,o){e=Ws(this,e),o=this.fa?o:1;var i=this.i;if(i&&this.B==this.g&&i.resolution==e&&i.f==o&&wt(i.D(),t))return i;1!=this.u&&(t=t.slice(),Kt(t,this.u));var r=[$t(t)/e*o,Ot(t)/e*o];if(void 0!==this.P){var i=this.P,n=Dt(t),s=this.oa,p=$t(t),a=Ot(t),h=r[0],l=r[1],u=.0254/this.s,r={OPERATION:this.Aa?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.s,SETDISPLAYWIDTH:Math.round(r[0]),SETDISPLAYHEIGHT:Math.round(r[1]),SETVIEWSCALE:l*p>h*a?p*s/(h*u):a*s/(l*u),SETVIEWCENTERX:n[0],SETVIEWCENTERY:n[1]};hd(r,this.l),i=yy(i,r),i=new Pn(t,e,o,this.j,i,this.Z,this.c),E(i,"change",this.o,this)}else i=null;return this.i=i,this.B=this.g,i},od.Lm=function(){return this.c},od.Om=function(t){hd(this.l,t),this.v()},od.Nm=function(t){this.i=null,this.c=t,this.v()},e(vy,Ks),vy.prototype.Lc=function(t){return Ht(t,this.c.D())?this.c:null},vy.prototype.o=function(t){if(this.c.U()==Ag){var e,o,i=this.c.D(),r=this.c.a();if(this.i?(e=this.i[0],o=this.i[1]):(e=r.width,o=r.height),i=Math.ceil($t(i)/(Ot(i)/o)),i!=e){var i=Xo(i,o),n=i.canvas;i.drawImage(r,0,0,e,o,0,0,n.width,n.height),this.c.g=n}}Ks.prototype.o.call(this,t)},e(my,Ks);var Ux=[101,101];od=my.prototype,od.Um=function(t,e,o,i){if(void 0!==this.l){var r=Ft(t,e,0,Ux),n={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.i.LAYERS};return hd(n,this.i,i),i=Math.floor((r[3]-t[1])/e),n[this.u?"I":"X"]=Math.floor((t[0]-r[0])/e),n[this.u?"J":"Y"]=i,by(this,r,Ux,1,re(o),n)}},od.Wm=function(){return this.i},od.Lc=function(t,e,o,i){if(void 0===this.l)return null;e=Ws(this,e),1==o||this.Aa&&void 0!==this.fa||(o=1),t=t.slice();var r=(t[0]+t[2])/2,n=(t[1]+t[3])/2,s=e/o,p=$t(t)/s,s=Ot(t)/s,a=this.c;if(a&&this.Z==this.g&&a.resolution==e&&a.f==o&&wt(a.D(),t))return a;if(1!=this.s){var a=this.s*$t(t)/2,h=this.s*Ot(t)/2;t[0]=r-a,t[1]=n-h,t[2]=r+a,t[3]=n+h}return r={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0},hd(r,this.i),this.P[0]=Math.ceil(p*this.s),this.P[1]=Math.ceil(s*this.s),i=by(this,t,this.P,o,i,r),this.c=new Pn(t,e,o,this.j,i,this.oa,this.B),this.Z=this.g,E(this.c,"change",this.o,this),this.c},od.Vm=function(){return this.B},od.Xm=function(){return this.l},od.Ym=function(t){this.c=null,this.B=t,this.v()},od.Zm=function(t){t!=this.l&&(this.l=t,this.c=null,this.v())},od.$m=function(t){hd(this.i,t),wy(this),this.c=null,this.v()},e(xy,py);var Gx=new Do({html:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});!function(){var t={},e={ja:t};!function(o){if("object"==typeof t&&"undefined"!=typeof e)e.ja=o();else{var i;i="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,i.Cp=o()}}(function(){return function t(e,o,i){function r(s,p){if(!o[s]){if(!e[s]){var a="function"==typeof require&&require;if(!p&&a)return a(s,!0);if(n)return n(s,!0);throw a=Error("Cannot find module '"+s+"'"),a.code="MODULE_NOT_FOUND",a}a=o[s]={ja:{}},e[s][0].call(a.ja,function(t){var o=e[s][1][t];return r(o?o:t)},a,a.ja,t,e,o,i)}return o[s].ja}for(var n="function"==typeof require&&require,s=0;s<i.length;s++)r(i[s]);return r}({1:[function(t,e,o){t=t("./processor"),o.Pi=t},{"./processor":2}],2:[function(t,e){function o(t){var e=!0;try{new ImageData(10,10)}catch(o){e=!1}return function(o){var i=o.buffers,r=o.meta,n=o.width,s=o.height,p=i.length,a=i[0].byteLength;if(o.imageOps){for(a=Array(p),o=0;o<p;++o){var h,l=a,u=o;h=new Uint8ClampedArray(i[o]);var c=n,f=s;h=e?new ImageData(h,c,f):{data:h,width:c,height:f},l[u]=h}n=t(a,r).data}else{for(n=new Uint8ClampedArray(a),s=Array(p),l=Array(p),o=0;o<p;++o)s[o]=new Uint8ClampedArray(i[o]),l[o]=[0,0,0,0];for(i=0;i<a;i+=4){for(o=0;o<p;++o)u=s[o],l[o][0]=u[i],l[o][1]=u[i+1],l[o][2]=u[i+2],l[o][3]=u[i+3];o=t(l,r),n[i]=o[0],n[i+1]=o[1],n[i+2]=o[2],n[i+3]=o[3]}}return n.buffer}}function i(t,e){var i=Object.keys(t.lib||{}).map(function(e){return"var "+e+" = "+t.lib[e].toString()+";"}).concat(["var __minion__ = ("+o.toString()+")(",t.operation.toString(),");",'self.addEventListener("message", function(event) {',"  var buffer = __minion__(event.data);","  self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);","});"]),i=URL.createObjectURL(new Blob(i,{type:"text/javascript"})),i=new Worker(i);return i.addEventListener("message",e),i}function r(t,e){var i=o(t.operation);return{postMessage:function(t){setTimeout(function(){e({data:{buffer:i(t),meta:t.meta}})},0)}}}function n(t){this.Oe=!!t.Yk;var e;e=0===t.threads?0:this.Oe?1:t.threads||1;var o=[];if(e)for(var n=0;n<e;++n)o[n]=i(t,this.eg.bind(this,n));else o[0]=r(t,this.eg.bind(this,0));this.Nd=o,this.bd=[],this.cj=t.jo||1/0,this.Ld=0,this.Hc={},this.Pe=null}var s=t("./util").rl;n.prototype.ho=function(t,e,o){this.aj({xc:t,Pg:e,mg:o}),this.bg()},n.prototype.aj=function(t){for(this.bd.push(t);this.bd.length>this.cj;)this.bd.shift().mg(null,null)},n.prototype.bg=function(){if(0===this.Ld&&0<this.bd.length){var t=this.Pe=this.bd.shift(),e=t.xc[0].width,o=t.xc[0].height,i=t.xc.map(function(t){return t.data.buffer}),r=this.Nd.length;if(this.Ld=r,1===r)this.Nd[0].postMessage({buffers:i,meta:t.Pg,imageOps:this.Oe,width:e,height:o},i);else for(var n=4*Math.ceil(t.xc[0].data.length/4/r),s=0;s<r;++s){for(var p=s*n,a=[],h=0,l=i.length;h<l;++h)a.push(i[s].slice(p,p+n));this.Nd[s].postMessage({buffers:a,meta:t.Pg,imageOps:this.Oe,width:e,height:o},a)}}},n.prototype.eg=function(t,e){this.Ap||(this.Hc[t]=e.data,--this.Ld,0===this.Ld&&this.dj())},n.prototype.dj=function(){var t,e,o=this.Pe,i=this.Nd.length;if(1===i)t=new Uint8ClampedArray(this.Hc[0].buffer),e=this.Hc[0].meta;else{var r=o.xc[0].data.length;t=new Uint8ClampedArray(r),e=Array(r);for(var r=4*Math.ceil(r/4/i),n=0;n<i;++n){var p=n*r;t.set(new Uint8ClampedArray(this.Hc[n].buffer),p),e[n]=this.Hc[n].meta}}this.Pe=null,this.Hc={},o.mg(null,s(t,o.xc[0].width,o.xc[0].height),e),this.bg()},e.ja=n},{"./util":3}],3:[function(t,e,o){var i=!0;try{new ImageData(10,10)}catch(r){i=!1}var n=document.createElement("canvas").getContext("2d");o.rl=function(t,e,o){return i?new ImageData(t,e,o):(e=n.createImageData(e,o),e.data.set(t),e)}},{}]},{},[1])(1)}),Jb=e.ja}(),e(Sy,Ks),Sy.prototype.u=function(t,e){this.B=new Jb.Pi({operation:t,Yk:"image"===this.Aa,jo:1,lib:e,threads:this.La}),this.v()},Sy.prototype.W=function(t,e,o,i){o=!0;for(var r,n=0,s=this.c.length;n<s;++n)if(r=this.c[n].a.ga(),"ready"!==r.U()){o=!1;break}if(!o)return null;if(t=t.slice(),!Ty(this,t,e))return this.l;o=this.i.canvas,r=Math.round($t(t)/e),n=Math.round(Ot(t)/e),r===o.width&&n===o.height||(o.width=r,o.height=n),r=hd({},this.Z),r.viewState=hd({},r.viewState);var n=Dt(t),s=Math.round($t(t)/e),p=Math.round(Ot(t)/e);return r.extent=t,r.focus=Dt(t),r.size[0]=s,r.size[1]=p,s=r.viewState,s.center=n,s.projection=i,s.resolution=e,this.l=i=new ks(t,e,1,this.j,o,this.P.bind(this,r)),this.s={extent:t,resolution:e,Mo:this.g},i},Sy.prototype.P=function(t,e){for(var o=this.c.length,i=Array(o),r=0;r<o;++r){var n;n=this.c[r];var s=t,p=t.layerStatesArray[r];if(n.j(s,p)){var a=s.size[0],h=s.size[1];if($x){var l=$x.canvas;l.width!==a||l.height!==h?$x=Xo(a,h):$x.clearRect(0,0,a,h)}else $x=Xo(a,h);n.i(s,p,$x),n=$x.getImageData(0,0,a,h)}else n=null;if(!n)return;i[r]=n}o={},this.b(new Cy(Hx,t,o)),this.B.ho(i,o,this.oa.bind(this,t,e)),qi(t.tileQueue,16,16)},Sy.prototype.oa=function(t,e,o,i,r){o?e(o):i&&(this.b(new Cy(Xx,t,r)),Ty(this,t.extent,t.viewState.resolution/t.pixelRatio)||this.i.putImageData(i,0,0),e(null))};var $x=null;e(Cy,L);var Hx="beforeoperations",Xx="afteroperations";e(Py,py);var Kx=[new Do({html:'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'}),Gx],Wx={terrain:{wb:"jpg",opaque:!0},"terrain-background":{wb:"jpg",opaque:!0},"terrain-labels":{wb:"png",opaque:!1},"terrain-lines":{wb:"png",opaque:!1},"toner-background":{wb:"png",opaque:!0},toner:{wb:"png",opaque:!0},"toner-hybrid":{wb:"png",opaque:!1},"toner-labels":{wb:"png",opaque:!1},"toner-lines":{wb:"png",opaque:!1},"toner-lite":{wb:"png",opaque:!0},watercolor:{wb:"jpg",opaque:!0}},zx={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:1,maxZoom:16}};e(Ay,oy),Ay.prototype.u=function(){return this.c},Ay.prototype.gb=function(t){return t},Ay.prototype.sc=function(t,e,o){var i=this.tileGrid;if(i||(i=this.pb(o)),!(i.b.length<=t[0])){var r=i.Ia(t,this.o),s=wo(i.Va(t[0]),this.l);1!=e&&(s=bo(s,e,this.l)),i={F:"image",FORMAT:"PNG32",TRANSPARENT:!0},hd(i,this.c);var p=this.urls;return p?(o=o.eb.split(":").pop(),i.SIZE=s[0]+","+s[1],i.BBOX=r.join(","),i.BBOXSR=o,i.IMAGESR=o,i.DPI=Math.round(i.DPI?i.DPI*e:90*e),t=1==p.length?p[0]:p[u((t[1]<<t[0])+t[2],p.length)],e=t.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),e==t&&n(!1,50),i=yy(e,i)):i=void 0,i}},Ay.prototype.C=function(t){hd(this.c,t),_f(this,jy(this))},e(Ny,Zf),Ny.prototype.vc=function(t,e,o){var i=this.Fb(t,e,o);if(this.a.b.hasOwnProperty(i))return this.a.get(i);var r=wo(this.tileGrid.Va(t));return t=[t,e,o],e=(e=Qf(this,t))?Qf(this,e).toString():"",r=new Ly(t,r,e),this.a.set(i,r),r},e(Ly,Bi),Ly.prototype.qb=function(){if(this.g)return this.g;var t=this.j,e=Xo(t[0],t[1]);return e.strokeStyle="black",e.strokeRect(.5,.5,t[0]+.5,t[1]+.5),e.fillStyle="black",e.textAlign="center",e.textBaseline="middle",e.font="24px sans-serif",e.fillText(this.c,t[0]/2,t[1]/2),this.g=e.canvas},e(Ry,oy),od=Ry.prototype,od.bn=function(t){if(t=t.target,!t.status||200<=t.status&&300>t.status){var e;try{e=JSON.parse(t.responseText)}catch(o){return void this.me()}this.oh(e)}else this.me()},od.an=function(){this.me()},od.nk=function(){return this.c},od.oh=function(t){var e,o=re("EPSG:4326"),i=this.f;if(void 0!==t.bounds){var r=pe(o,i);e=Wt(t.bounds,r)}var n=t.minzoom||0,r=t.maxzoom||22;if(this.tileGrid=i=Ro({extent:Io(i),maxZoom:r,minZoom:n}),this.tileUrlFunction=Kf(t.tiles,i),void 0!==t.attribution&&!this.j){o=void 0!==e?e:o.D(),e={};for(var s;n<=r;++n)s=n.toString(),e[s]=[Po(i,o,n)];this.qa([new Do({html:t.attribution,tileRanges:e})])}this.c=t,Xs(this,"ready")},od.me=function(){Xs(this,"error")},e(ky,Zf),od=ky.prototype,od.fn=function(t){if(t=t.target,!t.status||200<=t.status&&300>t.status){var e;try{e=JSON.parse(t.responseText)}catch(o){return void this.ne()}this.zf(e)}else this.ne()},od.en=function(){this.ne()},od.kk=function(){return this.i},od.wj=function(t,e,o,i,r){this.tileGrid?(e=this.tileGrid.Yd(t,e),Dy(this.vc(e[0],e[1],e[2],1,this.f),t,o,i,r)):!0===r?setTimeout(function(){o.call(i,null)},0):o.call(i,null)},od.ne=function(){Xs(this,"error")},od.zf=function(t){var e,o=re("EPSG:4326"),i=this.f;if(void 0!==t.bounds){var r=pe(o,i);e=Wt(t.bounds,r)}var n=t.minzoom||0,r=t.maxzoom||22;this.tileGrid=i=Ro({extent:Io(i),maxZoom:r,minZoom:n}),this.i=t.template;var s=t.grids;if(s){if(this.o=Kf(s,i),void 0!==t.attribution){for(o=void 0!==e?e:o.D(),e={};n<=r;++n)s=n.toString(),e[s]=[Po(i,o,n)];this.qa([new Do({html:t.attribution,tileRanges:e})])}Xs(this,"ready")}else Xs(this,"error")},od.vc=function(t,e,o,i,r){var n=this.Fb(t,e,o);return this.a.b.hasOwnProperty(n)?this.a.get(n):(t=[t,e,o],e=Qf(this,t,r),i=this.o(e,i,r),i=new Iy(t,void 0!==i?0:4,void 0!==i?i:"",this.tileGrid.Ia(t),this.s,this.c),this.a.set(n,i),i)},od.Vf=function(t,e,o){t=this.Fb(t,e,o),this.a.b.hasOwnProperty(t)&&this.a.get(t)},e(Iy,Bi),od=Iy.prototype,od.qb=function(){return null},od.getData=function(t){if(!this.j||!this.o)return null;var e=this.j[Math.floor((1-(t[1]-this.g[1])/(this.g[3]-this.g[1]))*this.j.length)];return"string"!=typeof e?null:(e=e.charCodeAt(Math.floor((t[0]-this.g[0])/(this.g[2]-this.g[0])*e.length)),93<=e&&e--,35<=e&&e--,e-=32,t=null,e in this.o&&(e=this.o[e],t=this.c&&e in this.c?this.c[e]:e),t)},od.Xa=function(){return this.s},od.$d=function(){this.state=3,Ui(this)},od.ph=function(t){this.j=t.grid,this.o=t.keys,this.c=t.data,this.state=4,Ui(this)},od.dn=function(t){if(t=t.target,!t.status||200<=t.status&&300>t.status){var e;try{e=JSON.parse(t.responseText)}catch(o){return void this.$d()}this.ph(e)}else this.$d()},od.cn=function(){this.$d()},od.load=function(){this.u&&Fy(this)},e(Oy,oy),od=Oy.prototype,od.gn=function(t,e,o,i){o=re(o);var r=this.tileGrid;if(r||(r=this.pb(o)),e=r.Yd(t,e),!(r.b.length<=e[0])){var n=r.Ga(e[0]),s=r.Ia(e,this.Z),r=wo(r.Va(e[0]),this.l),p=this.u;return 0!==p&&(r=mo(r,p,this.l),s=gt(s,n*p,s)),p={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.c.LAYERS},hd(p,this.c,i),i=Math.floor((s[3]-t[1])/n),p[this.o?"I":"X"]=Math.floor((t[0]-s[0])/n),p[this.o?"J":"Y"]=i,By(this,e,r,s,1,o,p)}},od.ef=function(){return this.u},od.Fb=function(t,e,o){return this.P+oy.prototype.Fb.call(this,t,e,o)},od.hn=function(){return this.c},od.gb=function(t){return this.W&&void 0!==this.C?t:1},od.sc=function(t,e,o){var i=this.tileGrid;if(i||(i=this.pb(o)),!(i.b.length<=t[0])){1==e||this.W&&void 0!==this.C||(e=1);var r=i.Ga(t[0]),n=i.Ia(t,this.Z),i=wo(i.Va(t[0]),this.l),s=this.u;return 0!==s&&(i=mo(i,s,this.l),n=gt(n,r*s,n)),1!=e&&(i=bo(i,e,this.l)),r={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0},hd(r,this.c),By(this,t,i,n,e,o,r)}},od.Ua=function(t){oy.prototype.Ua.call(this,t),Uy(this)},od.jn=function(t){hd(this.c,t),Uy(this),$y(this),_f(this,Gy(this))},e(Hy,Bi),od=Hy.prototype,od.qb=function(){return-1==this.f.Rf?null:this.g.canvas},od.Il=function(){return this.j},od.Xa=function(){return this.o},od.load=function(){0==this.state&&(this.state=1,Ui(this),this.T(this,this.o),this.s(null,NaN,null))},od.Wh=function(t){this.c=t,this.state=ag,Ui(this)},od.uf=function(t){this.l=t},od.bi=function(t){this.s=t},e(Xy,ey),Xy.prototype.vc=function(t,e,o,i,r){var n=this.Fb(t,e,o);return this.a.b.hasOwnProperty(n)?this.a.get(n):(t=[t,e,o],i=(e=Qf(this,t,r))?this.tileUrlFunction(e,i,r):void 0,i=new this.tileClass(t,void 0!==i?0:4,void 0!==i?i:"",this.c,this.tileLoadFunction),E(i,"change",this.rh,this),this.a.set(n,i),i)},Xy.prototype.gb=function(t){return void 0==t?ey.prototype.gb.call(this,t):t},Xy.prototype.kf=function(t,e){var o=wo(this.tileGrid.Va(t));return[Math.round(o[0]*e),Math.round(o[1]*e)]},e(Wy,To),Wy.prototype.o=function(){return this.l},e(qy,oy),od=qy.prototype,od.Jj=function(){return this.c},od.kn=function(){return this.u},od.ln=function(){return this.C},od.Wj=function(){return this.o},od.ik=function(){return this.W},od.mn=function(){return this.P},od.qk=function(){return this.Z},od.hp=function(t){hd(this.c,t),_f(this,Vy(this))};var qx="KVP";e(Yy,oy),e(Zy,yc),Zy.prototype.qb=function(){if(this.c)return this.c;var t=yc.prototype.qb.call(this);if(this.state==ag){if(256==t.width&&256==t.height)return this.c=t;var e=Xo(256,256);return e.drawImage(t,0,0),this.c=e.canvas}return t};var Vx="default",Yx="truncated";return Jy.prototype.get=function(t){return this.f[t]||null},Jy.prototype.add=function(t,e,o,i,r){var n,s,p;for(s=0,p=this.a.length;s<p;++s)if(n=this.a[s],n.width>=e+this.b&&n.height>=o+this.b)return p={offsetX:n.x+this.b,offsetY:n.y+this.b,image:this.c},this.f[t]=p,i.call(r,this.g,n.x+this.b,n.y+this.b),t=s,e+=this.b,i=o+this.b,n.width-e>n.height-i?(o={x:n.x+e,y:n.y,width:n.width-e,height:n.height},e={x:n.x,y:n.y+i,width:e,height:n.height-i},_y(this,t,o,e)):(o={x:n.x+e,y:n.y,width:n.width-e,height:i},e={x:n.x,y:n.y+i,width:n.width,height:n.height-i},_y(this,t,o,e)),p;return null},Qy.prototype.add=function(t,e,i,r,n,s){return e+this.b>this.g||i+this.b>this.g?null:(r=td(this,!1,t,e,i,r,s))?(t=td(this,!0,t,e,i,void 0!==n?n:o,s),{offsetX:r.offsetX,offsetY:r.offsetY,image:r.image,de:t.image}):null},e(ed,jn),od=ed.prototype,od.clone=function(){var t=new ed({fill:this.j?this.j.clone():void 0,points:this.f!==this.g?this.b/2:this.b,radius:this.g,radius2:this.f,angle:this.s,snapToPixel:this.u,stroke:this.a?this.a.clone():void 0,rotation:this.o,rotateWithView:this.T,atlasManager:this.S});return t.Rc(this.l),t.Sc(this.c),t},od.cc=function(){return this.G},od.tn=function(){return this.s},od.vn=function(){return this.j},od.pe=function(){return this.B},od.Tb=function(){return this.C},od.md=function(){return this.na},od.vd=function(){return Ag},od.jc=function(){return this.za},od.wn=function(){return this.b},od.xn=function(){return this.g},od.hk=function(){return this.f},od.Gb=function(){return this.P},od.yn=function(){return this.a},od.pf=o,od.load=o,od.Uf=o,od.yh=function(t,e,o,i){var r;for(e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),this.f!==this.g&&(this.b*=2),o=0;o<=this.b;o++)i=2*o*Math.PI/this.b-Math.PI/2+this.s,r=0===o%2?this.g:this.f,e.lineTo(t.size/2+r*Math.cos(i),t.size/2+r*Math.sin(i));this.j&&(e.fillStyle=Ho(this.j.b),e.fill()),this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.Dd,t.lineDash&&e.setLineDash(t.lineDash),e.lineCap=t.lineCap,e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke()),e.closePath()},od.xh=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),this.f!==this.g&&(this.b*=2);var r;for(o=0;o<=this.b;o++)r=2*o*Math.PI/this.b-Math.PI/2+this.s,i=0===o%2?this.g:this.f,e.lineTo(t.size/2+i*Math.cos(r),t.size/2+i*Math.sin(r));e.fillStyle=Ng,e.fill(),this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.Dd,t.lineDash&&e.setLineDash(t.lineDash),e.stroke()),e.closePath()},t("ol.animation.bounce",function(t){var e=t.resolution,o=t.start?t.start:Date.now(),i=void 0!==t.duration?t.duration:1e3,r=t.easing?t.easing:ho;return function(t,n){if(n.time<o)return n.animate=!0,n.viewHints[0]+=1,!0;if(n.time<o+i){var s=r((n.time-o)/i),p=e-n.viewState.resolution;return n.animate=!0,n.viewState.resolution+=s*p,n.viewHints[0]+=1,!0}return!1}}),t("ol.animation.pan",lo),t("ol.animation.rotate",uo),t("ol.animation.zoom",co),r.prototype.code=r.prototype.code,t("ol.Attribution",Do),Do.prototype.getHTML=Do.prototype.g,t("ol.Collection",Fo),Fo.prototype.clear=Fo.prototype.clear,Fo.prototype.extend=Fo.prototype.qf,Fo.prototype.forEach=Fo.prototype.forEach,Fo.prototype.getArray=Fo.prototype.sl,Fo.prototype.item=Fo.prototype.item,Fo.prototype.getLength=Fo.prototype.yc,Fo.prototype.insertAt=Fo.prototype.ee,Fo.prototype.pop=Fo.prototype.pop,Fo.prototype.push=Fo.prototype.push,Fo.prototype.remove=Fo.prototype.remove,Fo.prototype.removeAt=Fo.prototype.Nf,Fo.prototype.setAt=Fo.prototype.Oo,Bo.prototype.element=Bo.prototype.element,t("ol.color.asArray",Uo),t("ol.color.asString",Go),t("ol.colorlike.asColorLike",Ho),t("ol.coordinate.add",st),t("ol.coordinate.createStringXY",function(t){return function(e){return yt(e,t)}}),t("ol.coordinate.format",ht),t("ol.coordinate.rotate",ut),t("ol.coordinate.toStringHDMS",function(t,e){return t?at(t[1],"NS",e)+" "+at(t[0],"EW",e):""}),t("ol.coordinate.toStringXY",yt),t("ol.DeviceOrientation",ba),ba.prototype.getAlpha=ba.prototype.Cj,ba.prototype.getBeta=ba.prototype.Fj,ba.prototype.getGamma=ba.prototype.Mj,ba.prototype.getHeading=ba.prototype.tl,ba.prototype.getTracking=ba.prototype.Sg,ba.prototype.setTracking=ba.prototype.rf,t("ol.easing.easeIn",no),t("ol.easing.easeOut",so),t("ol.easing.inAndOut",po),t("ol.easing.linear",ao),t("ol.easing.upAndDown",ho),t("ol.extent.boundingExtent",dt),t("ol.extent.buffer",gt),t("ol.extent.containsCoordinate",bt),t("ol.extent.containsExtent",wt),t("ol.extent.containsXY",xt),t("ol.extent.createEmpty",Tt),t("ol.extent.equals",Pt),t("ol.extent.extend",At),t("ol.extent.getBottomLeft",kt),t("ol.extent.getBottomRight",It),t("ol.extent.getCenter",Dt),t("ol.extent.getHeight",Ot),t("ol.extent.getIntersection",Bt),t("ol.extent.getSize",function(t){return[t[2]-t[0],t[3]-t[1]]}),t("ol.extent.getTopLeft",Ut),t("ol.extent.getTopRight",Gt),t("ol.extent.getWidth",$t),t("ol.extent.intersects",Ht),t("ol.extent.isEmpty",Xt),t("ol.extent.applyTransform",Wt),t("ol.Feature",wa),wa.prototype.clone=wa.prototype.clone,wa.prototype.getGeometry=wa.prototype.V,wa.prototype.getId=wa.prototype.vl,wa.prototype.getGeometryName=wa.prototype.Oj,wa.prototype.getStyle=wa.prototype.wl,wa.prototype.getStyleFunction=wa.prototype.zc,wa.prototype.setGeometry=wa.prototype.Oa,wa.prototype.setStyle=wa.prototype.sf,wa.prototype.setId=wa.prototype.Wb,wa.prototype.setGeometryName=wa.prototype.Dc,t("ol.featureloader.tile",Xa),t("ol.featureloader.xhr",Ka),t("ol.Geolocation",nc),nc.prototype.getAccuracy=nc.prototype.Aj,nc.prototype.getAccuracyGeometry=nc.prototype.Bj,nc.prototype.getAltitude=nc.prototype.Dj,nc.prototype.getAltitudeAccuracy=nc.prototype.Ej,nc.prototype.getHeading=nc.prototype.yl,nc.prototype.getPosition=nc.prototype.zl,nc.prototype.getProjection=nc.prototype.Tg,nc.prototype.getSpeed=nc.prototype.jk,nc.prototype.getTracking=nc.prototype.Ug,nc.prototype.getTrackingOptions=nc.prototype.Gg,nc.prototype.setProjection=nc.prototype.Vg,nc.prototype.setTracking=nc.prototype.ge,nc.prototype.setTrackingOptions=nc.prototype.ji,t("ol.Graticule",uc),uc.prototype.getMap=uc.prototype.Cl,uc.prototype.getMeridians=uc.prototype.Xj,uc.prototype.getParallels=uc.prototype.dk,uc.prototype.setMap=uc.prototype.setMap,t("ol.has.DEVICE_PIXEL_RATIO",Ud),t("ol.has.CANVAS",$d),t("ol.has.DEVICE_ORIENTATION",Hd),t("ol.has.GEOLOCATION",Xd),t("ol.has.TOUCH",Kd),t("ol.has.WEBGL",jd),Pn.prototype.getImage=Pn.prototype.a,Pn.prototype.load=Pn.prototype.load,yc.prototype.getImage=yc.prototype.qb,yc.prototype.load=yc.prototype.load,t("ol.inherits",e),t("ol.Kinetic",Vi),t("ol.loadingstrategy.all",Ec),t("ol.loadingstrategy.bbox",function(t){return[t]}),t("ol.loadingstrategy.tile",function(t){return function(e,o){var i=t.wc(o),r=Po(t,e,i),n=[],i=[i,0,0];for(i[1]=r.ba;i[1]<=r.da;++i[1])for(i[2]=r.ea;i[2]<=r.ha;++i[2])n.push(t.Ia(i));return n}}),t("ol.Map",ta),ta.prototype.addControl=ta.prototype.ij,ta.prototype.addInteraction=ta.prototype.jj,ta.prototype.addLayer=ta.prototype.gg,ta.prototype.addOverlay=ta.prototype.hg,ta.prototype.beforeRender=ta.prototype.ab,ta.prototype.forEachFeatureAtPixel=ta.prototype.Sd,ta.prototype.forEachLayerAtPixel=ta.prototype.Gl,ta.prototype.hasFeatureAtPixel=ta.prototype.Xk,ta.prototype.getEventCoordinate=ta.prototype.Kj,ta.prototype.getEventPixel=ta.prototype.Ud,ta.prototype.getTarget=ta.prototype.jf,ta.prototype.getTargetElement=ta.prototype.uc,ta.prototype.getCoordinateFromPixel=ta.prototype.Ja,ta.prototype.getControls=ta.prototype.Ij,ta.prototype.getOverlays=ta.prototype.bk,ta.prototype.getOverlayById=ta.prototype.ak,ta.prototype.getInteractions=ta.prototype.Pj,ta.prototype.getLayerGroup=ta.prototype.tc,ta.prototype.getLayers=ta.prototype.Wg,ta.prototype.getPixelFromCoordinate=ta.prototype.Ca,ta.prototype.getSize=ta.prototype.kb,ta.prototype.getView=ta.prototype.$,ta.prototype.getViewport=ta.prototype.rk,ta.prototype.renderSync=ta.prototype.Ko,ta.prototype.render=ta.prototype.render,ta.prototype.removeControl=ta.prototype.Do,ta.prototype.removeInteraction=ta.prototype.Eo,ta.prototype.removeLayer=ta.prototype.Go,ta.prototype.removeOverlay=ta.prototype.Ho,ta.prototype.setLayerGroup=ta.prototype.ai,ta.prototype.setSize=ta.prototype.Tf,ta.prototype.setTarget=ta.prototype.Xg,ta.prototype.setView=ta.prototype.Wo,ta.prototype.updateSize=ta.prototype.Yc,ki.prototype.originalEvent=ki.prototype.originalEvent,ki.prototype.pixel=ki.prototype.pixel,ki.prototype.coordinate=ki.prototype.coordinate,ki.prototype.dragging=ki.prototype.dragging,zo.prototype.map=zo.prototype.map,zo.prototype.frameState=zo.prototype.frameState,O.prototype.key=O.prototype.key,O.prototype.oldValue=O.prototype.oldValue,t("ol.Object",B),B.prototype.get=B.prototype.get,B.prototype.getKeys=B.prototype.O,B.prototype.getProperties=B.prototype.N,B.prototype.set=B.prototype.set,B.prototype.setProperties=B.prototype.H,B.prototype.unset=B.prototype.R,t("ol.Observable",D),t("ol.Observable.unByKey",F),D.prototype.changed=D.prototype.v,D.prototype.dispatchEvent=D.prototype.b,D.prototype.getRevision=D.prototype.K,D.prototype.on=D.prototype.I,D.prototype.once=D.prototype.L,D.prototype.un=D.prototype.J,D.prototype.unByKey=D.prototype.M,t("ol.Overlay",oa),oa.prototype.getElement=oa.prototype.Td,oa.prototype.getId=oa.prototype.Hl,oa.prototype.getMap=oa.prototype.he,oa.prototype.getOffset=oa.prototype.Eg,oa.prototype.getPosition=oa.prototype.Yg,oa.prototype.getPositioning=oa.prototype.Fg,oa.prototype.setElement=oa.prototype.Vh,oa.prototype.setMap=oa.prototype.setMap,oa.prototype.setOffset=oa.prototype.ci,oa.prototype.setPosition=oa.prototype.tf,oa.prototype.setPositioning=oa.prototype.fi,t("ol.render.toContext",function(t,e){var o=t.canvas,i=e?e:{},r=i.pixelRatio||Ud;return(i=i.size)&&(o.width=i[0]*r,o.height=i[1]*r,o.style.width=i[0]+"px",o.style.height=i[1]+"px"),o=[0,0,o.width,o.height],i=fn(sn(),r,r),new Kn(t,r,o,i,0)}),t("ol.size.toSize",wo),Bi.prototype.getTileCoord=Bi.prototype.i,Bi.prototype.load=Bi.prototype.load,Hy.prototype.getFormat=Hy.prototype.Il,Hy.prototype.setFeatures=Hy.prototype.Wh,Hy.prototype.setProjection=Hy.prototype.uf,Hy.prototype.setLoader=Hy.prototype.bi,t("ol.View",_e),_e.prototype.constrainCenter=_e.prototype.Qd,_e.prototype.constrainResolution=_e.prototype.constrainResolution,_e.prototype.constrainRotation=_e.prototype.constrainRotation,_e.prototype.getCenter=_e.prototype.bb,_e.prototype.calculateExtent=_e.prototype.Jc,_e.prototype.getMaxResolution=_e.prototype.Jl,_e.prototype.getMinResolution=_e.prototype.Kl,_e.prototype.getProjection=_e.prototype.Ll,_e.prototype.getResolution=_e.prototype.Ma,_e.prototype.getResolutions=_e.prototype.Ml,_e.prototype.getRotation=_e.prototype.Pa,_e.prototype.getZoom=_e.prototype.tk,_e.prototype.fit=_e.prototype.$e,_e.prototype.centerOn=_e.prototype.sj,_e.prototype.rotate=_e.prototype.rotate,_e.prototype.setCenter=_e.prototype.rb,_e.prototype.setResolution=_e.prototype.Yb,_e.prototype.setRotation=_e.prototype.ie,_e.prototype.setZoom=_e.prototype.Zo,t("ol.xml.getAllTextContent",Ta),t("ol.xml.parse",Pa),yp.prototype.getGL=yp.prototype.Pn,yp.prototype.useProgram=yp.prototype.ve,t("ol.tilegrid.createXYZ",Ro),t("ol.tilegrid.TileGrid",To),To.prototype.forEachTileCoord=To.prototype.sg,To.prototype.getMaxZoom=To.prototype.Cg,To.prototype.getMinZoom=To.prototype.Dg,To.prototype.getOrigin=To.prototype.Tc,To.prototype.getResolution=To.prototype.Ga,To.prototype.getResolutions=To.prototype.Bh,To.prototype.getTileCoordExtent=To.prototype.Ia,To.prototype.getTileCoordForCoordAndResolution=To.prototype.Yd,To.prototype.getTileCoordForCoordAndZ=To.prototype.Zd,To.prototype.getTileSize=To.prototype.Va,To.prototype.getZForResolution=To.prototype.wc,t("ol.tilegrid.WMTS",Wy),Wy.prototype.getMatrixIds=Wy.prototype.o,t("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet",zy),t("ol.style.AtlasManager",Qy),t("ol.style.Circle",Nn),Nn.prototype.clone=Nn.prototype.clone,Nn.prototype.getFill=Nn.prototype.nn,Nn.prototype.getImage=Nn.prototype.Tb,Nn.prototype.getRadius=Nn.prototype.pn,Nn.prototype.getStroke=Nn.prototype.qn,Nn.prototype.setRadius=Nn.prototype.rn,t("ol.style.Fill",Rn),Rn.prototype.clone=Rn.prototype.clone,Rn.prototype.getColor=Rn.prototype.g,Rn.prototype.setColor=Rn.prototype.f,t("ol.style.Icon",Pl),Pl.prototype.clone=Pl.prototype.clone,Pl.prototype.getAnchor=Pl.prototype.cc,Pl.prototype.getImage=Pl.prototype.Tb,Pl.prototype.getOrigin=Pl.prototype.jc,Pl.prototype.getSrc=Pl.prototype.sn,Pl.prototype.getSize=Pl.prototype.Gb,Pl.prototype.load=Pl.prototype.load,t("ol.style.Image",jn),jn.prototype.getOpacity=jn.prototype.qe,jn.prototype.getRotateWithView=jn.prototype.re,jn.prototype.getRotation=jn.prototype.se,jn.prototype.getScale=jn.prototype.te,jn.prototype.getSnapToPixel=jn.prototype.Xd,jn.prototype.setOpacity=jn.prototype.Rc,jn.prototype.setRotation=jn.prototype.ue,jn.prototype.setScale=jn.prototype.Sc,t("ol.style.RegularShape",ed),ed.prototype.clone=ed.prototype.clone,ed.prototype.getAnchor=ed.prototype.cc,ed.prototype.getAngle=ed.prototype.tn,ed.prototype.getFill=ed.prototype.vn,ed.prototype.getImage=ed.prototype.Tb,ed.prototype.getOrigin=ed.prototype.jc,ed.prototype.getPoints=ed.prototype.wn,ed.prototype.getRadius=ed.prototype.xn,ed.prototype.getRadius2=ed.prototype.hk,ed.prototype.getSize=ed.prototype.Gb,ed.prototype.getStroke=ed.prototype.yn,t("ol.style.Stroke",In),In.prototype.clone=In.prototype.clone,In.prototype.getColor=In.prototype.zn,In.prototype.getLineCap=In.prototype.Sj,In.prototype.getLineDash=In.prototype.An,In.prototype.getLineJoin=In.prototype.Tj,In.prototype.getMiterLimit=In.prototype.Yj,In.prototype.getWidth=In.prototype.Bn,In.prototype.setColor=In.prototype.Cn,In.prototype.setLineCap=In.prototype.So,In.prototype.setLineDash=In.prototype.setLineDash,In.prototype.setLineJoin=In.prototype.To,In.prototype.setMiterLimit=In.prototype.Uo,In.prototype.setWidth=In.prototype.Xo,t("ol.style.Style",Fn),Fn.prototype.clone=Fn.prototype.clone,Fn.prototype.getGeometry=Fn.prototype.V,Fn.prototype.getGeometryFunction=Fn.prototype.Nj,Fn.prototype.getFill=Fn.prototype.Dn,Fn.prototype.getImage=Fn.prototype.En,Fn.prototype.getStroke=Fn.prototype.Fn,Fn.prototype.getText=Fn.prototype.Fa,Fn.prototype.getZIndex=Fn.prototype.Gn,Fn.prototype.setGeometry=Fn.prototype.zh,Fn.prototype.setZIndex=Fn.prototype.Hn,t("ol.style.Text",Al),Al.prototype.clone=Al.prototype.clone,Al.prototype.getFont=Al.prototype.Lj,Al.prototype.getOffsetX=Al.prototype.Zj,Al.prototype.getOffsetY=Al.prototype.$j,Al.prototype.getFill=Al.prototype.In,Al.prototype.getRotateWithView=Al.prototype.Jn,Al.prototype.getRotation=Al.prototype.Kn,Al.prototype.getScale=Al.prototype.Ln,Al.prototype.getStroke=Al.prototype.Mn,Al.prototype.getText=Al.prototype.Fa,Al.prototype.getTextAlign=Al.prototype.lk,Al.prototype.getTextBaseline=Al.prototype.mk,Al.prototype.setFont=Al.prototype.Yh,Al.prototype.setOffsetX=Al.prototype.di,Al.prototype.setOffsetY=Al.prototype.ei,Al.prototype.setFill=Al.prototype.Xh,Al.prototype.setRotation=Al.prototype.Nn,Al.prototype.setScale=Al.prototype.Ah,Al.prototype.setStroke=Al.prototype.gi,Al.prototype.setText=Al.prototype.hi,Al.prototype.setTextAlign=Al.prototype.ii,Al.prototype.setTextBaseline=Al.prototype.Vo,t("ol.Sphere",Vt),Vt.prototype.geodesicArea=Vt.prototype.a,Vt.prototype.haversineDistance=Vt.prototype.b,t("ol.source.BingMaps",sy),t("ol.source.BingMaps.TOS_ATTRIBUTION",Bx),sy.prototype.getApiKey=sy.prototype.P,
-sy.prototype.getImagerySet=sy.prototype.W,t("ol.source.CartoDB",ay),ay.prototype.getConfig=ay.prototype.Hj,ay.prototype.updateConfig=ay.prototype.gp,ay.prototype.setConfig=ay.prototype.Po,t("ol.source.Cluster",uy),uy.prototype.getSource=uy.prototype.ub,uy.prototype.setDistance=uy.prototype.Jb,t("ol.source.Image",Ks),qs.prototype.image=qs.prototype.image,t("ol.source.ImageArcGISRest",dy),dy.prototype.getParams=dy.prototype.Gm,dy.prototype.getImageLoadFunction=dy.prototype.Fm,dy.prototype.getUrl=dy.prototype.Hm,dy.prototype.setImageLoadFunction=dy.prototype.Im,dy.prototype.setUrl=dy.prototype.Jm,dy.prototype.updateParams=dy.prototype.Km,t("ol.source.ImageCanvas",Vs),t("ol.source.ImageMapGuide",gy),gy.prototype.getParams=gy.prototype.Mm,gy.prototype.getImageLoadFunction=gy.prototype.Lm,gy.prototype.updateParams=gy.prototype.Om,gy.prototype.setImageLoadFunction=gy.prototype.Nm,t("ol.source.ImageStatic",vy),t("ol.source.ImageVector",Ys),Ys.prototype.getSource=Ys.prototype.Pm,Ys.prototype.getStyle=Ys.prototype.Qm,Ys.prototype.getStyleFunction=Ys.prototype.Rm,Ys.prototype.setStyle=Ys.prototype.nh,t("ol.source.ImageWMS",my),my.prototype.getGetFeatureInfoUrl=my.prototype.Um,my.prototype.getParams=my.prototype.Wm,my.prototype.getImageLoadFunction=my.prototype.Vm,my.prototype.getUrl=my.prototype.Xm,my.prototype.setImageLoadFunction=my.prototype.Ym,my.prototype.setUrl=my.prototype.Zm,my.prototype.updateParams=my.prototype.$m,t("ol.source.OSM",xy),t("ol.source.OSM.ATTRIBUTION",Gx),t("ol.source.Raster",Sy),Sy.prototype.setOperation=Sy.prototype.u,Cy.prototype.extent=Cy.prototype.extent,Cy.prototype.resolution=Cy.prototype.resolution,Cy.prototype.data=Cy.prototype.data,t("ol.source.Source",$s),$s.prototype.getAttributions=$s.prototype.va,$s.prototype.getLogo=$s.prototype.ua,$s.prototype.getProjection=$s.prototype.wa,$s.prototype.getState=$s.prototype.U,$s.prototype.refresh=$s.prototype.ta,$s.prototype.setAttributions=$s.prototype.qa,t("ol.source.Stamen",Py),t("ol.source.Tile",Zf),Zf.prototype.getTileGrid=Zf.prototype.Ra,ty.prototype.tile=ty.prototype.tile,t("ol.source.TileArcGISRest",Ay),Ay.prototype.getParams=Ay.prototype.u,Ay.prototype.updateParams=Ay.prototype.C,t("ol.source.TileDebug",Ny),t("ol.source.TileImage",oy),oy.prototype.setRenderReprojectionEdges=oy.prototype.Bb,oy.prototype.setTileGridForProjection=oy.prototype.Cb,t("ol.source.TileJSON",Ry),Ry.prototype.getTileJSON=Ry.prototype.nk,t("ol.source.TileUTFGrid",ky),ky.prototype.getTemplate=ky.prototype.kk,ky.prototype.forDataAtCoordinateAndResolution=ky.prototype.wj,t("ol.source.TileWMS",Oy),Oy.prototype.getGetFeatureInfoUrl=Oy.prototype.gn,Oy.prototype.getParams=Oy.prototype.hn,Oy.prototype.updateParams=Oy.prototype.jn,ey.prototype.getTileLoadFunction=ey.prototype.fb,ey.prototype.getTileUrlFunction=ey.prototype.hb,ey.prototype.getUrls=ey.prototype.ib,ey.prototype.setTileLoadFunction=ey.prototype.nb,ey.prototype.setTileUrlFunction=ey.prototype.Ta,ey.prototype.setUrl=ey.prototype.Ya,ey.prototype.setUrls=ey.prototype.Ua,t("ol.source.Vector",Lc),Lc.prototype.addFeature=Lc.prototype.cb,Lc.prototype.addFeatures=Lc.prototype.Ic,Lc.prototype.clear=Lc.prototype.clear,Lc.prototype.forEachFeature=Lc.prototype.qg,Lc.prototype.forEachFeatureInExtent=Lc.prototype.Kb,Lc.prototype.forEachFeatureIntersectingExtent=Lc.prototype.rg,Lc.prototype.getFeaturesCollection=Lc.prototype.zg,Lc.prototype.getFeatures=Lc.prototype.oe,Lc.prototype.getFeaturesAtCoordinate=Lc.prototype.yg,Lc.prototype.getFeaturesInExtent=Lc.prototype.bf,Lc.prototype.getClosestFeatureToCoordinate=Lc.prototype.ug,Lc.prototype.getExtent=Lc.prototype.D,Lc.prototype.getFeatureById=Lc.prototype.xg,Lc.prototype.getFormat=Lc.prototype.sh,Lc.prototype.getUrl=Lc.prototype.th,Lc.prototype.removeFeature=Lc.prototype.mb,Bc.prototype.feature=Bc.prototype.feature,t("ol.source.VectorTile",Xy),t("ol.source.WMTS",qy),qy.prototype.getDimensions=qy.prototype.Jj,qy.prototype.getFormat=qy.prototype.kn,qy.prototype.getLayer=qy.prototype.ln,qy.prototype.getMatrixSet=qy.prototype.Wj,qy.prototype.getRequestEncoding=qy.prototype.ik,qy.prototype.getStyle=qy.prototype.mn,qy.prototype.getVersion=qy.prototype.qk,qy.prototype.updateDimensions=qy.prototype.hp,t("ol.source.WMTS.optionsFromCapabilities",function(t,e){var o,i,r=q(t.Contents.Layer,function(t){return t.Identifier==e.layer}),n=t.Contents.TileMatrixSet;o=1<r.TileMatrixSetLink.length?"projection"in e?Z(r.TileMatrixSetLink,function(t){return q(n,function(e){return e.Identifier==t.TileMatrixSet}).SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")==e.projection}):Z(r.TileMatrixSetLink,function(t){return t.TileMatrixSet==e.matrixSet}):0,0>o&&(o=0),i=r.TileMatrixSetLink[o].TileMatrixSet;var s=r.Format[0];"format"in e&&(s=e.format),o=Z(r.Style,function(t){return"style"in e?t.Title==e.style:t.isDefault}),0>o&&(o=0),o=r.Style[o].Identifier;var p={};"Dimension"in r&&r.Dimension.forEach(function(t){var e=t.Identifier,o=t.Default;void 0===o&&(o=t.Value[0]),p[e]=o});var a,h=q(t.Contents.TileMatrixSet,function(t){return t.Identifier==i});a=re("projection"in e?e.projection:h.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var l,u,c=r.WGS84BoundingBox;void 0!==c&&(u=re("EPSG:4326").D(),u=c[0]==u[0]&&c[2]==u[2],l=ue(c,"EPSG:4326",a),(c=a.D())&&(wt(c,l)||(l=void 0)));var h=zy(h,l),f=[];if(l=e.requestEncoding,l=void 0!==l?l:"","OperationsMetadata"in t&&"GetTile"in t.OperationsMetadata)for(var c=t.OperationsMetadata.GetTile.DCP.HTTP.Get,y=0,d=c.length;y<d;++y){var g=q(c[y].Constraint,function(t){return"GetEncoding"==t.name}).AllowedValues.Value;if(""===l&&(l=g[0]),l!==qx)break;H(g,qx)&&f.push(c[y].href)}return 0===f.length&&(l="REST",r.ResourceURL.forEach(function(t){"tile"===t.resourceType&&(s=t.format,f.push(t.template))})),{urls:f,layer:e.layer,matrixSet:i,format:s,projection:a,requestEncoding:l,tileGrid:h,style:o,dimensions:p,wrapX:u}}),t("ol.source.XYZ",py),t("ol.source.Zoomify",Yy),en.prototype.vectorContext=en.prototype.vectorContext,en.prototype.frameState=en.prototype.frameState,en.prototype.context=en.prototype.context,en.prototype.glContext=en.prototype.glContext,pu.prototype.get=pu.prototype.get,pu.prototype.getExtent=pu.prototype.D,pu.prototype.getGeometry=pu.prototype.V,pu.prototype.getProperties=pu.prototype.Bm,pu.prototype.getType=pu.prototype.X,t("ol.render.VectorContext",Xn),Ip.prototype.setStyle=Ip.prototype.ud,Ip.prototype.drawGeometry=Ip.prototype.pc,Ip.prototype.drawFeature=Ip.prototype.Ve,Kn.prototype.drawCircle=Kn.prototype.Rd,Kn.prototype.setStyle=Kn.prototype.ud,Kn.prototype.drawGeometry=Kn.prototype.pc,Kn.prototype.drawFeature=Kn.prototype.Ve,t("ol.proj.common.add",tn),t("ol.proj.METERS_PER_UNIT",cd),t("ol.proj.Projection",Yt),Yt.prototype.getCode=Yt.prototype.Gj,Yt.prototype.getExtent=Yt.prototype.D,Yt.prototype.getUnits=Yt.prototype.yb,Yt.prototype.getMetersPerUnit=Yt.prototype.dc,Yt.prototype.getWorldExtent=Yt.prototype.sk,Yt.prototype.isGlobal=Yt.prototype.bl,Yt.prototype.setGlobal=Yt.prototype.Ro,Yt.prototype.setExtent=Yt.prototype.Am,Yt.prototype.setWorldExtent=Yt.prototype.Yo,Yt.prototype.setGetPointResolution=Yt.prototype.Qo,Yt.prototype.getPointResolution=Yt.prototype.getPointResolution,t("ol.proj.setProj4",function(t){dd=t}),t("ol.proj.addEquivalentProjections",Zt),t("ol.proj.addProjection",_t),t("ol.proj.addCoordinateTransforms",oe),t("ol.proj.fromLonLat",function(t,e){return le(t,"EPSG:4326",void 0!==e?e:"EPSG:3857")}),t("ol.proj.toLonLat",function(t,e){return le(t,void 0!==e?e:"EPSG:3857","EPSG:4326")}),t("ol.proj.get",re),t("ol.proj.equivalent",ne),t("ol.proj.getTransform",se),t("ol.proj.transform",le),t("ol.proj.transformExtent",ue),t("ol.layer.Base",qr),qr.prototype.getExtent=qr.prototype.D,qr.prototype.getMaxResolution=qr.prototype.Pb,qr.prototype.getMinResolution=qr.prototype.Qb,qr.prototype.getOpacity=qr.prototype.Rb,qr.prototype.getVisible=qr.prototype.zb,qr.prototype.getZIndex=qr.prototype.Sb,qr.prototype.setExtent=qr.prototype.fc,qr.prototype.setMaxResolution=qr.prototype.lc,qr.prototype.setMinResolution=qr.prototype.mc,qr.prototype.setOpacity=qr.prototype.gc,qr.prototype.setVisible=qr.prototype.hc,qr.prototype.setZIndex=qr.prototype.ic,t("ol.layer.Group",Yr),Yr.prototype.getLayers=Yr.prototype.Qc,Yr.prototype.setLayers=Yr.prototype.gh,t("ol.layer.Heatmap",Gf),Gf.prototype.getBlur=Gf.prototype.tg,Gf.prototype.getGradient=Gf.prototype.Ag,Gf.prototype.getRadius=Gf.prototype.hh,Gf.prototype.setBlur=Gf.prototype.Th,Gf.prototype.setGradient=Gf.prototype.$h,Gf.prototype.setRadius=Gf.prototype.ih,t("ol.layer.Image",Tn),Tn.prototype.getSource=Tn.prototype.ga,t("ol.layer.Layer",on),on.prototype.getSource=on.prototype.ga,on.prototype.setMap=on.prototype.setMap,on.prototype.setSource=on.prototype.Ec,t("ol.layer.Tile",En),En.prototype.getPreload=En.prototype.f,En.prototype.getSource=En.prototype.ga,En.prototype.setPreload=En.prototype.l,En.prototype.getUseInterimTilesOnError=En.prototype.c,En.prototype.setUseInterimTilesOnError=En.prototype.B,t("ol.layer.Vector",$n),$n.prototype.getSource=$n.prototype.ga,$n.prototype.getStyle=$n.prototype.G,$n.prototype.getStyleFunction=$n.prototype.S,$n.prototype.setStyle=$n.prototype.l,t("ol.layer.VectorTile",Hn),Hn.prototype.getPreload=Hn.prototype.f,Hn.prototype.getUseInterimTilesOnError=Hn.prototype.c,Hn.prototype.setPreload=Hn.prototype.P,Hn.prototype.setUseInterimTilesOnError=Hn.prototype.W,t("ol.interaction.DoubleClickZoom",tr),t("ol.interaction.DoubleClickZoom.handleEvent",er),t("ol.interaction.DragAndDrop",gc),t("ol.interaction.DragAndDrop.handleEvent",zt),bc.prototype.features=bc.prototype.features,bc.prototype.file=bc.prototype.file,bc.prototype.projection=bc.prototype.projection,t("ol.interaction.DragBox",Mr),Mr.prototype.getGeometry=Mr.prototype.V,Nr.prototype.coordinate=Nr.prototype.coordinate,Nr.prototype.mapBrowserEvent=Nr.prototype.mapBrowserEvent,t("ol.interaction.DragPan",yr),t("ol.interaction.DragRotate",mr),t("ol.interaction.DragRotateAndZoom",wc),t("ol.interaction.DragZoom",Lr),t("ol.interaction.Draw",Uc),t("ol.interaction.Draw.handleEvent",$c),Uc.prototype.removeLastPoint=Uc.prototype.Fo,Uc.prototype.finishDrawing=Uc.prototype.ld,Uc.prototype.extend=Uc.prototype.fm,t("ol.interaction.Draw.createRegularPolygon",function(t,e){return function(o,i){var r=o[0],n=o[1],s=Math.sqrt(ct(r,n)),p=i?i:Ze(new sc(r),t);return Je(p,r,s,e?e:Math.atan((n[1]-r[1])/(n[0]-r[0]))),p}}),t("ol.interaction.Draw.createBox",function(){return function(t,e){var o=dt(t),i=e||new ze(null);return i.ma([[kt(o),It(o),Gt(o),Ut(o),kt(o)]]),i}}),Jc.prototype.feature=Jc.prototype.feature,t("ol.interaction.Extent",_c),_c.prototype.getExtent=_c.prototype.D,_c.prototype.setExtent=_c.prototype.i,lf.prototype.extent_=lf.prototype.b,t("ol.interaction.defaults",zr),t("ol.interaction.Interaction",Zi),Zi.prototype.getActive=Zi.prototype.f,Zi.prototype.getMap=Zi.prototype.c,Zi.prototype.setActive=Zi.prototype.Ba,t("ol.interaction.KeyboardPan",Rr),t("ol.interaction.KeyboardPan.handleEvent",kr),t("ol.interaction.KeyboardZoom",Ir),t("ol.interaction.KeyboardZoom.handleEvent",Dr),t("ol.interaction.Modify",uf),t("ol.interaction.Modify.handleEvent",wf),uf.prototype.removePoint=uf.prototype.Qh,Ef.prototype.features=Ef.prototype.features,Ef.prototype.mapBrowserEvent=Ef.prototype.mapBrowserEvent,t("ol.interaction.MouseWheelZoom",Fr),t("ol.interaction.MouseWheelZoom.handleEvent",Or),Fr.prototype.setMouseAnchor=Fr.prototype.B,t("ol.interaction.PinchRotate",Br),t("ol.interaction.PinchZoom",Hr),t("ol.interaction.Pointer",ur),t("ol.interaction.Pointer.handleEvent",fr),t("ol.interaction.Select",Mf),Mf.prototype.getFeatures=Mf.prototype.pm,Mf.prototype.getLayer=Mf.prototype.qm,t("ol.interaction.Select.handleEvent",Cf),Mf.prototype.setMap=Mf.prototype.setMap,Af.prototype.selected=Af.prototype.selected,Af.prototype.deselected=Af.prototype.deselected,Af.prototype.mapBrowserEvent=Af.prototype.mapBrowserEvent,t("ol.interaction.Snap",jf),jf.prototype.addFeature=jf.prototype.cb,jf.prototype.removeFeature=jf.prototype.mb,t("ol.interaction.Translate",kf),Uf.prototype.features=Uf.prototype.features,Uf.prototype.coordinate=Uf.prototype.coordinate,t("ol.geom.Circle",sc),sc.prototype.clone=sc.prototype.clone,sc.prototype.getCenter=sc.prototype.td,sc.prototype.getRadius=sc.prototype.vf,sc.prototype.getType=sc.prototype.X,sc.prototype.intersectsExtent=sc.prototype.Na,sc.prototype.setCenter=sc.prototype.Yl,sc.prototype.setCenterAndRadius=sc.prototype.Sf,sc.prototype.setRadius=sc.prototype.Zl,sc.prototype.transform=sc.prototype.lb,t("ol.geom.Geometry",ce),ce.prototype.getClosestPoint=ce.prototype.xb,ce.prototype.intersectsCoordinate=ce.prototype.jb,ce.prototype.getExtent=ce.prototype.D,ce.prototype.rotate=ce.prototype.rotate,ce.prototype.scale=ce.prototype.scale,ce.prototype.simplify=ce.prototype.Db,ce.prototype.transform=ce.prototype.lb,t("ol.geom.GeometryCollection",Uh),Uh.prototype.clone=Uh.prototype.clone,Uh.prototype.getGeometries=Uh.prototype.cf,Uh.prototype.getType=Uh.prototype.X,Uh.prototype.intersectsExtent=Uh.prototype.Na,Uh.prototype.setGeometries=Uh.prototype.Zh,Uh.prototype.applyTransform=Uh.prototype.oc,Uh.prototype.translate=Uh.prototype.Pc,t("ol.geom.LinearRing",Re),Re.prototype.clone=Re.prototype.clone,Re.prototype.getArea=Re.prototype.bm,Re.prototype.getCoordinates=Re.prototype.Y,Re.prototype.getType=Re.prototype.X,Re.prototype.setCoordinates=Re.prototype.ma,t("ol.geom.LineString",th),th.prototype.appendCoordinate=th.prototype.kj,th.prototype.clone=th.prototype.clone,th.prototype.forEachSegment=th.prototype.zj,th.prototype.getCoordinateAtM=th.prototype.$l,th.prototype.getCoordinates=th.prototype.Y,th.prototype.getCoordinateAt=th.prototype.vg,th.prototype.getLength=th.prototype.am,th.prototype.getType=th.prototype.X,th.prototype.intersectsExtent=th.prototype.Na,th.prototype.setCoordinates=th.prototype.ma,t("ol.geom.MultiLineString",oh),oh.prototype.appendLineString=oh.prototype.lj,oh.prototype.clone=oh.prototype.clone,oh.prototype.getCoordinateAtM=oh.prototype.cm,oh.prototype.getCoordinates=oh.prototype.Y,oh.prototype.getLineString=oh.prototype.Uj,oh.prototype.getLineStrings=oh.prototype.od,oh.prototype.getType=oh.prototype.X,oh.prototype.intersectsExtent=oh.prototype.Na,oh.prototype.setCoordinates=oh.prototype.ma,t("ol.geom.MultiPoint",nh),nh.prototype.appendPoint=nh.prototype.nj,nh.prototype.clone=nh.prototype.clone,nh.prototype.getCoordinates=nh.prototype.Y,nh.prototype.getPoint=nh.prototype.ek,nh.prototype.getPoints=nh.prototype.je,nh.prototype.getType=nh.prototype.X,nh.prototype.intersectsExtent=nh.prototype.Na,nh.prototype.setCoordinates=nh.prototype.ma,t("ol.geom.MultiPolygon",sh),sh.prototype.appendPolygon=sh.prototype.oj,sh.prototype.clone=sh.prototype.clone,sh.prototype.getArea=sh.prototype.dm,sh.prototype.getCoordinates=sh.prototype.Y,sh.prototype.getInteriorPoints=sh.prototype.Rj,sh.prototype.getPolygon=sh.prototype.gk,sh.prototype.getPolygons=sh.prototype.Wd,sh.prototype.getType=sh.prototype.X,sh.prototype.intersectsExtent=sh.prototype.Na,sh.prototype.setCoordinates=sh.prototype.ma,t("ol.geom.Point",Ie),Ie.prototype.clone=Ie.prototype.clone,Ie.prototype.getCoordinates=Ie.prototype.Y,Ie.prototype.getType=Ie.prototype.X,Ie.prototype.intersectsExtent=Ie.prototype.Na,Ie.prototype.setCoordinates=Ie.prototype.ma,t("ol.geom.Polygon",ze),ze.prototype.appendLinearRing=ze.prototype.mj,ze.prototype.clone=ze.prototype.clone,ze.prototype.getArea=ze.prototype.em,ze.prototype.getCoordinates=ze.prototype.Y,ze.prototype.getInteriorPoint=ze.prototype.Qj,ze.prototype.getLinearRingCount=ze.prototype.Vj,ze.prototype.getLinearRing=ze.prototype.Bg,ze.prototype.getLinearRings=ze.prototype.Vd,ze.prototype.getType=ze.prototype.X,ze.prototype.intersectsExtent=ze.prototype.Na,ze.prototype.setCoordinates=ze.prototype.ma,t("ol.geom.Polygon.circular",Ve),t("ol.geom.Polygon.fromExtent",Ye),t("ol.geom.Polygon.fromCircle",Ze),t("ol.geom.SimpleGeometry",ye),ye.prototype.getFirstCoordinate=ye.prototype.Lb,ye.prototype.getLastCoordinate=ye.prototype.Mb,ye.prototype.getLayout=ye.prototype.Nb,ye.prototype.applyTransform=ye.prototype.oc,ye.prototype.translate=ye.prototype.Pc,t("ol.format.EsriJSON",uh),uh.prototype.readFeature=uh.prototype.Ub,uh.prototype.readFeatures=uh.prototype.Ha,uh.prototype.readGeometry=uh.prototype.Wc,uh.prototype.readProjection=uh.prototype.Sa,uh.prototype.writeGeometry=uh.prototype.$c,uh.prototype.writeGeometryObject=uh.prototype.He,uh.prototype.writeFeature=uh.prototype.Fd,uh.prototype.writeFeatureObject=uh.prototype.Zc,uh.prototype.writeFeatures=uh.prototype.$b,uh.prototype.writeFeaturesObject=uh.prototype.Ge,t("ol.format.Feature",Wa),t("ol.format.GeoJSON",Xh),Xh.prototype.readFeature=Xh.prototype.Ub,Xh.prototype.readFeatures=Xh.prototype.Ha,Xh.prototype.readGeometry=Xh.prototype.Wc,Xh.prototype.readProjection=Xh.prototype.Sa,Xh.prototype.writeFeature=Xh.prototype.Fd,Xh.prototype.writeFeatureObject=Xh.prototype.Zc,Xh.prototype.writeFeatures=Xh.prototype.$b,Xh.prototype.writeFeaturesObject=Xh.prototype.Ge,Xh.prototype.writeGeometry=Xh.prototype.$c,Xh.prototype.writeGeometryObject=Xh.prototype.He,t("ol.format.GML",al),al.prototype.writeFeatures=al.prototype.$b,al.prototype.writeFeaturesNode=al.prototype.a,t("ol.format.GML2",ll),t("ol.format.GML3",al),al.prototype.writeGeometryNode=al.prototype.T,al.prototype.writeFeatures=al.prototype.$b,al.prototype.writeFeaturesNode=al.prototype.a,Yh.prototype.readFeatures=Yh.prototype.Ha,t("ol.format.GPX",ul),ul.prototype.readFeature=ul.prototype.Ub,ul.prototype.readFeatures=ul.prototype.Ha,ul.prototype.readProjection=ul.prototype.Sa,ul.prototype.writeFeatures=ul.prototype.$b,ul.prototype.writeFeaturesNode=ul.prototype.a,t("ol.format.IGC",El),El.prototype.readFeature=El.prototype.Ub,El.prototype.readFeatures=El.prototype.Ha,El.prototype.readProjection=El.prototype.Sa,t("ol.format.KML",jl),jl.prototype.readFeature=jl.prototype.Ub,jl.prototype.readFeatures=jl.prototype.Ha,jl.prototype.readName=jl.prototype.uo,jl.prototype.readNetworkLinks=jl.prototype.vo,jl.prototype.readProjection=jl.prototype.Sa,jl.prototype.writeFeatures=jl.prototype.$b,jl.prototype.writeFeaturesNode=jl.prototype.a,t("ol.format.MVT",au),au.prototype.readFeatures=au.prototype.Ha,au.prototype.readProjection=au.prototype.Sa,au.prototype.setLayers=au.prototype.c,t("ol.format.OSMXML",lu),lu.prototype.readFeatures=lu.prototype.Ha,lu.prototype.readProjection=lu.prototype.Sa,t("ol.format.Polyline",gu),t("ol.format.Polyline.encodeDeltas",vu),t("ol.format.Polyline.decodeDeltas",mu),t("ol.format.Polyline.encodeFloats",bu),t("ol.format.Polyline.decodeFloats",wu),gu.prototype.readFeature=gu.prototype.Ub,gu.prototype.readFeatures=gu.prototype.Ha,gu.prototype.readGeometry=gu.prototype.Wc,gu.prototype.readProjection=gu.prototype.Sa,gu.prototype.writeGeometry=gu.prototype.$c,t("ol.format.TopoJSON",xu),xu.prototype.readFeatures=xu.prototype.Ha,xu.prototype.readProjection=xu.prototype.Sa,t("ol.format.WFS",Cu),Cu.prototype.readFeatures=Cu.prototype.Ha,Cu.prototype.readTransactionResponse=Cu.prototype.o,Cu.prototype.readFeatureCollectionMetadata=Cu.prototype.l,Cu.prototype.writeGetFeature=Cu.prototype.s,Cu.prototype.writeTransaction=Cu.prototype.C,Cu.prototype.readProjection=Cu.prototype.Sa,t("ol.format.WKT",Fu),Fu.prototype.readFeature=Fu.prototype.Ub,Fu.prototype.readFeatures=Fu.prototype.Ha,Fu.prototype.readGeometry=Fu.prototype.Wc,Fu.prototype.writeFeature=Fu.prototype.Fd,Fu.prototype.writeFeatures=Fu.prototype.$b,Fu.prototype.writeGeometry=Fu.prototype.$c,t("ol.format.WMSCapabilities",Ju),Ju.prototype.read=Ju.prototype.read,t("ol.format.WMSGetFeatureInfo",oc),oc.prototype.readFeatures=oc.prototype.Ha,t("ol.format.WMTSCapabilities",ic),ic.prototype.read=ic.prototype.read,t("ol.format.filter.And",bh),t("ol.format.filter.Bbox",wh),t("ol.format.filter.Comparison",xh),t("ol.format.filter.ComparisonBinary",Sh),t("ol.format.filter.EqualTo",Th),t("ol.format.filter.Filter",gh),t("ol.format.filter.GreaterThan",Eh),t("ol.format.filter.GreaterThanOrEqualTo",Mh),t("ol.format.filter.and",Oh),t("ol.format.filter.or",function(t,e){return new Dh(t,e)}),t("ol.format.filter.not",function(t){return new kh(t)}),t("ol.format.filter.bbox",Bh),t("ol.format.filter.intersects",function(t,e,o){return new Ph(t,e,o)}),t("ol.format.filter.within",function(t,e,o){return new Fh(t,e,o)}),t("ol.format.filter.equalTo",function(t,e,o){return new Th(t,e,o)}),t("ol.format.filter.notEqualTo",function(t,e,o){return new Ih(t,e,o)}),t("ol.format.filter.lessThan",function(t,e){return new Lh(t,e)}),t("ol.format.filter.lessThanOrEqualTo",function(t,e){return new Rh(t,e)}),t("ol.format.filter.greaterThan",function(t,e){return new Eh(t,e)}),t("ol.format.filter.greaterThanOrEqualTo",function(t,e){return new Mh(t,e)}),t("ol.format.filter.isNull",function(t){return new Nh(t)}),t("ol.format.filter.between",function(t,e,o){return new Ah(t,e,o)}),t("ol.format.filter.like",function(t,e,o,i,r,n){return new jh(t,e,o,i,r,n)}),t("ol.format.filter.Intersects",Ph),t("ol.format.filter.IsBetween",Ah),t("ol.format.filter.IsLike",jh),t("ol.format.filter.IsNull",Nh),t("ol.format.filter.LessThan",Lh),t("ol.format.filter.LessThanOrEqualTo",Rh),t("ol.format.filter.Not",kh),t("ol.format.filter.NotEqualTo",Ih),t("ol.format.filter.Or",Dh),t("ol.format.filter.Spatial",Ch),t("ol.format.filter.Within",Fh),t("ol.events.condition.altKeyOnly",function(t){return t=t.originalEvent,t.altKey&&!(t.metaKey||t.ctrlKey)&&!t.shiftKey}),t("ol.events.condition.altShiftKeysOnly",or),t("ol.events.condition.always",zt),t("ol.events.condition.click",function(t){return t.type==tg}),t("ol.events.condition.never",qt),t("ol.events.condition.pointerMove",rr),t("ol.events.condition.singleClick",nr),t("ol.events.condition.doubleClick",function(t){return t.type==eg}),t("ol.events.condition.noModifierKeys",sr),t("ol.events.condition.platformModifierKeyOnly",function(t){return t=t.originalEvent,!t.altKey&&(Bd?t.metaKey:t.ctrlKey)&&!t.shiftKey}),t("ol.events.condition.shiftKeyOnly",pr),t("ol.events.condition.targetNotEditable",ar),t("ol.events.condition.mouseOnly",hr),t("ol.events.condition.primaryAction",lr),L.prototype.type=L.prototype.type,L.prototype.target=L.prototype.target,L.prototype.preventDefault=L.prototype.preventDefault,L.prototype.stopPropagation=L.prototype.stopPropagation,t("ol.control.Attribution",Vo),t("ol.control.Attribution.render",Yo),Vo.prototype.getCollapsible=Vo.prototype.Ol,Vo.prototype.setCollapsible=Vo.prototype.Rl,Vo.prototype.setCollapsed=Vo.prototype.Ql,Vo.prototype.getCollapsed=Vo.prototype.Nl,t("ol.control.Control",qo),qo.prototype.getMap=qo.prototype.i,qo.prototype.setMap=qo.prototype.setMap,qo.prototype.setTarget=qo.prototype.c,t("ol.control.FullScreen",Jo),t("ol.control.defaults",ri),t("ol.control.MousePosition",ni),t("ol.control.MousePosition.render",si),ni.prototype.getCoordinateFormat=ni.prototype.wg,ni.prototype.getProjection=ni.prototype.Zg,ni.prototype.setCoordinateFormat=ni.prototype.Uh,ni.prototype.setProjection=ni.prototype.$g,t("ol.control.OverviewMap",sa),t("ol.control.OverviewMap.render",pa),sa.prototype.getCollapsible=sa.prototype.Ul,sa.prototype.setCollapsible=sa.prototype.Xl,sa.prototype.setCollapsed=sa.prototype.Wl,sa.prototype.getCollapsed=sa.prototype.Tl,sa.prototype.getOverviewMap=sa.prototype.ck,t("ol.control.Rotate",ei),t("ol.control.Rotate.render",oi),t("ol.control.ScaleLine",ua),ua.prototype.getUnits=ua.prototype.yb,t("ol.control.ScaleLine.render",ca),ua.prototype.setUnits=ua.prototype.G,t("ol.control.Zoom",ii),t("ol.control.ZoomSlider",ya),t("ol.control.ZoomSlider.render",da),t("ol.control.ZoomToExtent",ma),B.prototype.changed=B.prototype.v,B.prototype.dispatchEvent=B.prototype.b,B.prototype.getRevision=B.prototype.K,B.prototype.on=B.prototype.I,B.prototype.once=B.prototype.L,B.prototype.un=B.prototype.J,B.prototype.unByKey=B.prototype.M,Fo.prototype.get=Fo.prototype.get,Fo.prototype.getKeys=Fo.prototype.O,Fo.prototype.getProperties=Fo.prototype.N,Fo.prototype.set=Fo.prototype.set,Fo.prototype.setProperties=Fo.prototype.H,Fo.prototype.unset=Fo.prototype.R,Fo.prototype.changed=Fo.prototype.v,Fo.prototype.dispatchEvent=Fo.prototype.b,Fo.prototype.getRevision=Fo.prototype.K,Fo.prototype.on=Fo.prototype.I,Fo.prototype.once=Fo.prototype.L,Fo.prototype.un=Fo.prototype.J,Fo.prototype.unByKey=Fo.prototype.M,Bo.prototype.type=Bo.prototype.type,Bo.prototype.target=Bo.prototype.target,Bo.prototype.preventDefault=Bo.prototype.preventDefault,Bo.prototype.stopPropagation=Bo.prototype.stopPropagation,ba.prototype.get=ba.prototype.get,ba.prototype.getKeys=ba.prototype.O,ba.prototype.getProperties=ba.prototype.N,ba.prototype.set=ba.prototype.set,ba.prototype.setProperties=ba.prototype.H,ba.prototype.unset=ba.prototype.R,ba.prototype.changed=ba.prototype.v,ba.prototype.dispatchEvent=ba.prototype.b,ba.prototype.getRevision=ba.prototype.K,ba.prototype.on=ba.prototype.I,ba.prototype.once=ba.prototype.L,ba.prototype.un=ba.prototype.J,ba.prototype.unByKey=ba.prototype.M,wa.prototype.get=wa.prototype.get,wa.prototype.getKeys=wa.prototype.O,wa.prototype.getProperties=wa.prototype.N,wa.prototype.set=wa.prototype.set,wa.prototype.setProperties=wa.prototype.H,wa.prototype.unset=wa.prototype.R,wa.prototype.changed=wa.prototype.v,wa.prototype.dispatchEvent=wa.prototype.b,wa.prototype.getRevision=wa.prototype.K,wa.prototype.on=wa.prototype.I,wa.prototype.once=wa.prototype.L,wa.prototype.un=wa.prototype.J,wa.prototype.unByKey=wa.prototype.M,nc.prototype.get=nc.prototype.get,nc.prototype.getKeys=nc.prototype.O,nc.prototype.getProperties=nc.prototype.N,nc.prototype.set=nc.prototype.set,nc.prototype.setProperties=nc.prototype.H,nc.prototype.unset=nc.prototype.R,nc.prototype.changed=nc.prototype.v,nc.prototype.dispatchEvent=nc.prototype.b,nc.prototype.getRevision=nc.prototype.K,nc.prototype.on=nc.prototype.I,nc.prototype.once=nc.prototype.L,nc.prototype.un=nc.prototype.J,nc.prototype.unByKey=nc.prototype.M,yc.prototype.getTileCoord=yc.prototype.i,ta.prototype.get=ta.prototype.get,ta.prototype.getKeys=ta.prototype.O,ta.prototype.getProperties=ta.prototype.N,ta.prototype.set=ta.prototype.set,ta.prototype.setProperties=ta.prototype.H,ta.prototype.unset=ta.prototype.R,ta.prototype.changed=ta.prototype.v,ta.prototype.dispatchEvent=ta.prototype.b,ta.prototype.getRevision=ta.prototype.K,ta.prototype.on=ta.prototype.I,ta.prototype.once=ta.prototype.L,ta.prototype.un=ta.prototype.J,ta.prototype.unByKey=ta.prototype.M,zo.prototype.type=zo.prototype.type,zo.prototype.target=zo.prototype.target,zo.prototype.preventDefault=zo.prototype.preventDefault,zo.prototype.stopPropagation=zo.prototype.stopPropagation,ki.prototype.map=ki.prototype.map,ki.prototype.frameState=ki.prototype.frameState,ki.prototype.type=ki.prototype.type,ki.prototype.target=ki.prototype.target,ki.prototype.preventDefault=ki.prototype.preventDefault,ki.prototype.stopPropagation=ki.prototype.stopPropagation,Ii.prototype.originalEvent=Ii.prototype.originalEvent,Ii.prototype.pixel=Ii.prototype.pixel,Ii.prototype.coordinate=Ii.prototype.coordinate,Ii.prototype.dragging=Ii.prototype.dragging,Ii.prototype.preventDefault=Ii.prototype.preventDefault,Ii.prototype.stopPropagation=Ii.prototype.stopPropagation,Ii.prototype.map=Ii.prototype.map,Ii.prototype.frameState=Ii.prototype.frameState,Ii.prototype.type=Ii.prototype.type,Ii.prototype.target=Ii.prototype.target,O.prototype.type=O.prototype.type,O.prototype.target=O.prototype.target,O.prototype.preventDefault=O.prototype.preventDefault,O.prototype.stopPropagation=O.prototype.stopPropagation,oa.prototype.get=oa.prototype.get,oa.prototype.getKeys=oa.prototype.O,oa.prototype.getProperties=oa.prototype.N,oa.prototype.set=oa.prototype.set,oa.prototype.setProperties=oa.prototype.H,oa.prototype.unset=oa.prototype.R,oa.prototype.changed=oa.prototype.v,oa.prototype.dispatchEvent=oa.prototype.b,oa.prototype.getRevision=oa.prototype.K,oa.prototype.on=oa.prototype.I,oa.prototype.once=oa.prototype.L,oa.prototype.un=oa.prototype.J,oa.prototype.unByKey=oa.prototype.M,Hy.prototype.getTileCoord=Hy.prototype.i,_e.prototype.get=_e.prototype.get,_e.prototype.getKeys=_e.prototype.O,_e.prototype.getProperties=_e.prototype.N,_e.prototype.set=_e.prototype.set,_e.prototype.setProperties=_e.prototype.H,_e.prototype.unset=_e.prototype.R,_e.prototype.changed=_e.prototype.v,_e.prototype.dispatchEvent=_e.prototype.b,_e.prototype.getRevision=_e.prototype.K,_e.prototype.on=_e.prototype.I,_e.prototype.once=_e.prototype.L,_e.prototype.un=_e.prototype.J,_e.prototype.unByKey=_e.prototype.M,Wy.prototype.forEachTileCoord=Wy.prototype.sg,Wy.prototype.getMaxZoom=Wy.prototype.Cg,Wy.prototype.getMinZoom=Wy.prototype.Dg,Wy.prototype.getOrigin=Wy.prototype.Tc,Wy.prototype.getResolution=Wy.prototype.Ga,Wy.prototype.getResolutions=Wy.prototype.Bh,Wy.prototype.getTileCoordExtent=Wy.prototype.Ia,Wy.prototype.getTileCoordForCoordAndResolution=Wy.prototype.Yd,Wy.prototype.getTileCoordForCoordAndZ=Wy.prototype.Zd,Wy.prototype.getTileSize=Wy.prototype.Va,Wy.prototype.getZForResolution=Wy.prototype.wc,Nn.prototype.getOpacity=Nn.prototype.qe,Nn.prototype.getRotateWithView=Nn.prototype.re,Nn.prototype.getRotation=Nn.prototype.se,Nn.prototype.getScale=Nn.prototype.te,Nn.prototype.getSnapToPixel=Nn.prototype.Xd,Nn.prototype.setOpacity=Nn.prototype.Rc,Nn.prototype.setRotation=Nn.prototype.ue,Nn.prototype.setScale=Nn.prototype.Sc,Pl.prototype.getOpacity=Pl.prototype.qe,Pl.prototype.getRotateWithView=Pl.prototype.re,Pl.prototype.getRotation=Pl.prototype.se,Pl.prototype.getScale=Pl.prototype.te,Pl.prototype.getSnapToPixel=Pl.prototype.Xd,Pl.prototype.setOpacity=Pl.prototype.Rc,Pl.prototype.setRotation=Pl.prototype.ue,Pl.prototype.setScale=Pl.prototype.Sc,ed.prototype.getOpacity=ed.prototype.qe,ed.prototype.getRotateWithView=ed.prototype.re,ed.prototype.getRotation=ed.prototype.se,ed.prototype.getScale=ed.prototype.te,ed.prototype.getSnapToPixel=ed.prototype.Xd,ed.prototype.setOpacity=ed.prototype.Rc,ed.prototype.setRotation=ed.prototype.ue,ed.prototype.setScale=ed.prototype.Sc,$s.prototype.get=$s.prototype.get,$s.prototype.getKeys=$s.prototype.O,$s.prototype.getProperties=$s.prototype.N,$s.prototype.set=$s.prototype.set,$s.prototype.setProperties=$s.prototype.H,$s.prototype.unset=$s.prototype.R,$s.prototype.changed=$s.prototype.v,$s.prototype.dispatchEvent=$s.prototype.b,$s.prototype.getRevision=$s.prototype.K,$s.prototype.on=$s.prototype.I,$s.prototype.once=$s.prototype.L,$s.prototype.un=$s.prototype.J,$s.prototype.unByKey=$s.prototype.M,Zf.prototype.getAttributions=Zf.prototype.va,Zf.prototype.getLogo=Zf.prototype.ua,Zf.prototype.getProjection=Zf.prototype.wa,Zf.prototype.getState=Zf.prototype.U,Zf.prototype.refresh=Zf.prototype.ta,Zf.prototype.setAttributions=Zf.prototype.qa,Zf.prototype.get=Zf.prototype.get,Zf.prototype.getKeys=Zf.prototype.O,Zf.prototype.getProperties=Zf.prototype.N,Zf.prototype.set=Zf.prototype.set,Zf.prototype.setProperties=Zf.prototype.H,Zf.prototype.unset=Zf.prototype.R,Zf.prototype.changed=Zf.prototype.v,Zf.prototype.dispatchEvent=Zf.prototype.b,Zf.prototype.getRevision=Zf.prototype.K,Zf.prototype.on=Zf.prototype.I,Zf.prototype.once=Zf.prototype.L,Zf.prototype.un=Zf.prototype.J,Zf.prototype.unByKey=Zf.prototype.M,ey.prototype.getTileGrid=ey.prototype.Ra,ey.prototype.refresh=ey.prototype.ta,ey.prototype.getAttributions=ey.prototype.va,ey.prototype.getLogo=ey.prototype.ua,ey.prototype.getProjection=ey.prototype.wa,ey.prototype.getState=ey.prototype.U,ey.prototype.setAttributions=ey.prototype.qa,ey.prototype.get=ey.prototype.get,ey.prototype.getKeys=ey.prototype.O,ey.prototype.getProperties=ey.prototype.N,ey.prototype.set=ey.prototype.set,ey.prototype.setProperties=ey.prototype.H,ey.prototype.unset=ey.prototype.R,ey.prototype.changed=ey.prototype.v,ey.prototype.dispatchEvent=ey.prototype.b,ey.prototype.getRevision=ey.prototype.K,ey.prototype.on=ey.prototype.I,ey.prototype.once=ey.prototype.L,ey.prototype.un=ey.prototype.J,ey.prototype.unByKey=ey.prototype.M,oy.prototype.getTileLoadFunction=oy.prototype.fb,oy.prototype.getTileUrlFunction=oy.prototype.hb,
-oy.prototype.getUrls=oy.prototype.ib,oy.prototype.setTileLoadFunction=oy.prototype.nb,oy.prototype.setTileUrlFunction=oy.prototype.Ta,oy.prototype.setUrl=oy.prototype.Ya,oy.prototype.setUrls=oy.prototype.Ua,oy.prototype.getTileGrid=oy.prototype.Ra,oy.prototype.refresh=oy.prototype.ta,oy.prototype.getAttributions=oy.prototype.va,oy.prototype.getLogo=oy.prototype.ua,oy.prototype.getProjection=oy.prototype.wa,oy.prototype.getState=oy.prototype.U,oy.prototype.setAttributions=oy.prototype.qa,oy.prototype.get=oy.prototype.get,oy.prototype.getKeys=oy.prototype.O,oy.prototype.getProperties=oy.prototype.N,oy.prototype.set=oy.prototype.set,oy.prototype.setProperties=oy.prototype.H,oy.prototype.unset=oy.prototype.R,oy.prototype.changed=oy.prototype.v,oy.prototype.dispatchEvent=oy.prototype.b,oy.prototype.getRevision=oy.prototype.K,oy.prototype.on=oy.prototype.I,oy.prototype.once=oy.prototype.L,oy.prototype.un=oy.prototype.J,oy.prototype.unByKey=oy.prototype.M,sy.prototype.setRenderReprojectionEdges=sy.prototype.Bb,sy.prototype.setTileGridForProjection=sy.prototype.Cb,sy.prototype.getTileLoadFunction=sy.prototype.fb,sy.prototype.getTileUrlFunction=sy.prototype.hb,sy.prototype.getUrls=sy.prototype.ib,sy.prototype.setTileLoadFunction=sy.prototype.nb,sy.prototype.setTileUrlFunction=sy.prototype.Ta,sy.prototype.setUrl=sy.prototype.Ya,sy.prototype.setUrls=sy.prototype.Ua,sy.prototype.getTileGrid=sy.prototype.Ra,sy.prototype.refresh=sy.prototype.ta,sy.prototype.getAttributions=sy.prototype.va,sy.prototype.getLogo=sy.prototype.ua,sy.prototype.getProjection=sy.prototype.wa,sy.prototype.getState=sy.prototype.U,sy.prototype.setAttributions=sy.prototype.qa,sy.prototype.get=sy.prototype.get,sy.prototype.getKeys=sy.prototype.O,sy.prototype.getProperties=sy.prototype.N,sy.prototype.set=sy.prototype.set,sy.prototype.setProperties=sy.prototype.H,sy.prototype.unset=sy.prototype.R,sy.prototype.changed=sy.prototype.v,sy.prototype.dispatchEvent=sy.prototype.b,sy.prototype.getRevision=sy.prototype.K,sy.prototype.on=sy.prototype.I,sy.prototype.once=sy.prototype.L,sy.prototype.un=sy.prototype.J,sy.prototype.unByKey=sy.prototype.M,py.prototype.setRenderReprojectionEdges=py.prototype.Bb,py.prototype.setTileGridForProjection=py.prototype.Cb,py.prototype.getTileLoadFunction=py.prototype.fb,py.prototype.getTileUrlFunction=py.prototype.hb,py.prototype.getUrls=py.prototype.ib,py.prototype.setTileLoadFunction=py.prototype.nb,py.prototype.setTileUrlFunction=py.prototype.Ta,py.prototype.setUrl=py.prototype.Ya,py.prototype.setUrls=py.prototype.Ua,py.prototype.getTileGrid=py.prototype.Ra,py.prototype.refresh=py.prototype.ta,py.prototype.getAttributions=py.prototype.va,py.prototype.getLogo=py.prototype.ua,py.prototype.getProjection=py.prototype.wa,py.prototype.getState=py.prototype.U,py.prototype.setAttributions=py.prototype.qa,py.prototype.get=py.prototype.get,py.prototype.getKeys=py.prototype.O,py.prototype.getProperties=py.prototype.N,py.prototype.set=py.prototype.set,py.prototype.setProperties=py.prototype.H,py.prototype.unset=py.prototype.R,py.prototype.changed=py.prototype.v,py.prototype.dispatchEvent=py.prototype.b,py.prototype.getRevision=py.prototype.K,py.prototype.on=py.prototype.I,py.prototype.once=py.prototype.L,py.prototype.un=py.prototype.J,py.prototype.unByKey=py.prototype.M,ay.prototype.setRenderReprojectionEdges=ay.prototype.Bb,ay.prototype.setTileGridForProjection=ay.prototype.Cb,ay.prototype.getTileLoadFunction=ay.prototype.fb,ay.prototype.getTileUrlFunction=ay.prototype.hb,ay.prototype.getUrls=ay.prototype.ib,ay.prototype.setTileLoadFunction=ay.prototype.nb,ay.prototype.setTileUrlFunction=ay.prototype.Ta,ay.prototype.setUrl=ay.prototype.Ya,ay.prototype.setUrls=ay.prototype.Ua,ay.prototype.getTileGrid=ay.prototype.Ra,ay.prototype.refresh=ay.prototype.ta,ay.prototype.getAttributions=ay.prototype.va,ay.prototype.getLogo=ay.prototype.ua,ay.prototype.getProjection=ay.prototype.wa,ay.prototype.getState=ay.prototype.U,ay.prototype.setAttributions=ay.prototype.qa,ay.prototype.get=ay.prototype.get,ay.prototype.getKeys=ay.prototype.O,ay.prototype.getProperties=ay.prototype.N,ay.prototype.set=ay.prototype.set,ay.prototype.setProperties=ay.prototype.H,ay.prototype.unset=ay.prototype.R,ay.prototype.changed=ay.prototype.v,ay.prototype.dispatchEvent=ay.prototype.b,ay.prototype.getRevision=ay.prototype.K,ay.prototype.on=ay.prototype.I,ay.prototype.once=ay.prototype.L,ay.prototype.un=ay.prototype.J,ay.prototype.unByKey=ay.prototype.M,Lc.prototype.getAttributions=Lc.prototype.va,Lc.prototype.getLogo=Lc.prototype.ua,Lc.prototype.getProjection=Lc.prototype.wa,Lc.prototype.getState=Lc.prototype.U,Lc.prototype.refresh=Lc.prototype.ta,Lc.prototype.setAttributions=Lc.prototype.qa,Lc.prototype.get=Lc.prototype.get,Lc.prototype.getKeys=Lc.prototype.O,Lc.prototype.getProperties=Lc.prototype.N,Lc.prototype.set=Lc.prototype.set,Lc.prototype.setProperties=Lc.prototype.H,Lc.prototype.unset=Lc.prototype.R,Lc.prototype.changed=Lc.prototype.v,Lc.prototype.dispatchEvent=Lc.prototype.b,Lc.prototype.getRevision=Lc.prototype.K,Lc.prototype.on=Lc.prototype.I,Lc.prototype.once=Lc.prototype.L,Lc.prototype.un=Lc.prototype.J,Lc.prototype.unByKey=Lc.prototype.M,uy.prototype.addFeature=uy.prototype.cb,uy.prototype.addFeatures=uy.prototype.Ic,uy.prototype.clear=uy.prototype.clear,uy.prototype.forEachFeature=uy.prototype.qg,uy.prototype.forEachFeatureInExtent=uy.prototype.Kb,uy.prototype.forEachFeatureIntersectingExtent=uy.prototype.rg,uy.prototype.getFeaturesCollection=uy.prototype.zg,uy.prototype.getFeatures=uy.prototype.oe,uy.prototype.getFeaturesAtCoordinate=uy.prototype.yg,uy.prototype.getFeaturesInExtent=uy.prototype.bf,uy.prototype.getClosestFeatureToCoordinate=uy.prototype.ug,uy.prototype.getExtent=uy.prototype.D,uy.prototype.getFeatureById=uy.prototype.xg,uy.prototype.getFormat=uy.prototype.sh,uy.prototype.getUrl=uy.prototype.th,uy.prototype.removeFeature=uy.prototype.mb,uy.prototype.getAttributions=uy.prototype.va,uy.prototype.getLogo=uy.prototype.ua,uy.prototype.getProjection=uy.prototype.wa,uy.prototype.getState=uy.prototype.U,uy.prototype.refresh=uy.prototype.ta,uy.prototype.setAttributions=uy.prototype.qa,uy.prototype.get=uy.prototype.get,uy.prototype.getKeys=uy.prototype.O,uy.prototype.getProperties=uy.prototype.N,uy.prototype.set=uy.prototype.set,uy.prototype.setProperties=uy.prototype.H,uy.prototype.unset=uy.prototype.R,uy.prototype.changed=uy.prototype.v,uy.prototype.dispatchEvent=uy.prototype.b,uy.prototype.getRevision=uy.prototype.K,uy.prototype.on=uy.prototype.I,uy.prototype.once=uy.prototype.L,uy.prototype.un=uy.prototype.J,uy.prototype.unByKey=uy.prototype.M,Ks.prototype.getAttributions=Ks.prototype.va,Ks.prototype.getLogo=Ks.prototype.ua,Ks.prototype.getProjection=Ks.prototype.wa,Ks.prototype.getState=Ks.prototype.U,Ks.prototype.refresh=Ks.prototype.ta,Ks.prototype.setAttributions=Ks.prototype.qa,Ks.prototype.get=Ks.prototype.get,Ks.prototype.getKeys=Ks.prototype.O,Ks.prototype.getProperties=Ks.prototype.N,Ks.prototype.set=Ks.prototype.set,Ks.prototype.setProperties=Ks.prototype.H,Ks.prototype.unset=Ks.prototype.R,Ks.prototype.changed=Ks.prototype.v,Ks.prototype.dispatchEvent=Ks.prototype.b,Ks.prototype.getRevision=Ks.prototype.K,Ks.prototype.on=Ks.prototype.I,Ks.prototype.once=Ks.prototype.L,Ks.prototype.un=Ks.prototype.J,Ks.prototype.unByKey=Ks.prototype.M,qs.prototype.type=qs.prototype.type,qs.prototype.target=qs.prototype.target,qs.prototype.preventDefault=qs.prototype.preventDefault,qs.prototype.stopPropagation=qs.prototype.stopPropagation,dy.prototype.getAttributions=dy.prototype.va,dy.prototype.getLogo=dy.prototype.ua,dy.prototype.getProjection=dy.prototype.wa,dy.prototype.getState=dy.prototype.U,dy.prototype.refresh=dy.prototype.ta,dy.prototype.setAttributions=dy.prototype.qa,dy.prototype.get=dy.prototype.get,dy.prototype.getKeys=dy.prototype.O,dy.prototype.getProperties=dy.prototype.N,dy.prototype.set=dy.prototype.set,dy.prototype.setProperties=dy.prototype.H,dy.prototype.unset=dy.prototype.R,dy.prototype.changed=dy.prototype.v,dy.prototype.dispatchEvent=dy.prototype.b,dy.prototype.getRevision=dy.prototype.K,dy.prototype.on=dy.prototype.I,dy.prototype.once=dy.prototype.L,dy.prototype.un=dy.prototype.J,dy.prototype.unByKey=dy.prototype.M,Vs.prototype.getAttributions=Vs.prototype.va,Vs.prototype.getLogo=Vs.prototype.ua,Vs.prototype.getProjection=Vs.prototype.wa,Vs.prototype.getState=Vs.prototype.U,Vs.prototype.refresh=Vs.prototype.ta,Vs.prototype.setAttributions=Vs.prototype.qa,Vs.prototype.get=Vs.prototype.get,Vs.prototype.getKeys=Vs.prototype.O,Vs.prototype.getProperties=Vs.prototype.N,Vs.prototype.set=Vs.prototype.set,Vs.prototype.setProperties=Vs.prototype.H,Vs.prototype.unset=Vs.prototype.R,Vs.prototype.changed=Vs.prototype.v,Vs.prototype.dispatchEvent=Vs.prototype.b,Vs.prototype.getRevision=Vs.prototype.K,Vs.prototype.on=Vs.prototype.I,Vs.prototype.once=Vs.prototype.L,Vs.prototype.un=Vs.prototype.J,Vs.prototype.unByKey=Vs.prototype.M,gy.prototype.getAttributions=gy.prototype.va,gy.prototype.getLogo=gy.prototype.ua,gy.prototype.getProjection=gy.prototype.wa,gy.prototype.getState=gy.prototype.U,gy.prototype.refresh=gy.prototype.ta,gy.prototype.setAttributions=gy.prototype.qa,gy.prototype.get=gy.prototype.get,gy.prototype.getKeys=gy.prototype.O,gy.prototype.getProperties=gy.prototype.N,gy.prototype.set=gy.prototype.set,gy.prototype.setProperties=gy.prototype.H,gy.prototype.unset=gy.prototype.R,gy.prototype.changed=gy.prototype.v,gy.prototype.dispatchEvent=gy.prototype.b,gy.prototype.getRevision=gy.prototype.K,gy.prototype.on=gy.prototype.I,gy.prototype.once=gy.prototype.L,gy.prototype.un=gy.prototype.J,gy.prototype.unByKey=gy.prototype.M,vy.prototype.getAttributions=vy.prototype.va,vy.prototype.getLogo=vy.prototype.ua,vy.prototype.getProjection=vy.prototype.wa,vy.prototype.getState=vy.prototype.U,vy.prototype.refresh=vy.prototype.ta,vy.prototype.setAttributions=vy.prototype.qa,vy.prototype.get=vy.prototype.get,vy.prototype.getKeys=vy.prototype.O,vy.prototype.getProperties=vy.prototype.N,vy.prototype.set=vy.prototype.set,vy.prototype.setProperties=vy.prototype.H,vy.prototype.unset=vy.prototype.R,vy.prototype.changed=vy.prototype.v,vy.prototype.dispatchEvent=vy.prototype.b,vy.prototype.getRevision=vy.prototype.K,vy.prototype.on=vy.prototype.I,vy.prototype.once=vy.prototype.L,vy.prototype.un=vy.prototype.J,vy.prototype.unByKey=vy.prototype.M,Ys.prototype.getAttributions=Ys.prototype.va,Ys.prototype.getLogo=Ys.prototype.ua,Ys.prototype.getProjection=Ys.prototype.wa,Ys.prototype.getState=Ys.prototype.U,Ys.prototype.refresh=Ys.prototype.ta,Ys.prototype.setAttributions=Ys.prototype.qa,Ys.prototype.get=Ys.prototype.get,Ys.prototype.getKeys=Ys.prototype.O,Ys.prototype.getProperties=Ys.prototype.N,Ys.prototype.set=Ys.prototype.set,Ys.prototype.setProperties=Ys.prototype.H,Ys.prototype.unset=Ys.prototype.R,Ys.prototype.changed=Ys.prototype.v,Ys.prototype.dispatchEvent=Ys.prototype.b,Ys.prototype.getRevision=Ys.prototype.K,Ys.prototype.on=Ys.prototype.I,Ys.prototype.once=Ys.prototype.L,Ys.prototype.un=Ys.prototype.J,Ys.prototype.unByKey=Ys.prototype.M,my.prototype.getAttributions=my.prototype.va,my.prototype.getLogo=my.prototype.ua,my.prototype.getProjection=my.prototype.wa,my.prototype.getState=my.prototype.U,my.prototype.refresh=my.prototype.ta,my.prototype.setAttributions=my.prototype.qa,my.prototype.get=my.prototype.get,my.prototype.getKeys=my.prototype.O,my.prototype.getProperties=my.prototype.N,my.prototype.set=my.prototype.set,my.prototype.setProperties=my.prototype.H,my.prototype.unset=my.prototype.R,my.prototype.changed=my.prototype.v,my.prototype.dispatchEvent=my.prototype.b,my.prototype.getRevision=my.prototype.K,my.prototype.on=my.prototype.I,my.prototype.once=my.prototype.L,my.prototype.un=my.prototype.J,my.prototype.unByKey=my.prototype.M,xy.prototype.setRenderReprojectionEdges=xy.prototype.Bb,xy.prototype.setTileGridForProjection=xy.prototype.Cb,xy.prototype.getTileLoadFunction=xy.prototype.fb,xy.prototype.getTileUrlFunction=xy.prototype.hb,xy.prototype.getUrls=xy.prototype.ib,xy.prototype.setTileLoadFunction=xy.prototype.nb,xy.prototype.setTileUrlFunction=xy.prototype.Ta,xy.prototype.setUrl=xy.prototype.Ya,xy.prototype.setUrls=xy.prototype.Ua,xy.prototype.getTileGrid=xy.prototype.Ra,xy.prototype.refresh=xy.prototype.ta,xy.prototype.getAttributions=xy.prototype.va,xy.prototype.getLogo=xy.prototype.ua,xy.prototype.getProjection=xy.prototype.wa,xy.prototype.getState=xy.prototype.U,xy.prototype.setAttributions=xy.prototype.qa,xy.prototype.get=xy.prototype.get,xy.prototype.getKeys=xy.prototype.O,xy.prototype.getProperties=xy.prototype.N,xy.prototype.set=xy.prototype.set,xy.prototype.setProperties=xy.prototype.H,xy.prototype.unset=xy.prototype.R,xy.prototype.changed=xy.prototype.v,xy.prototype.dispatchEvent=xy.prototype.b,xy.prototype.getRevision=xy.prototype.K,xy.prototype.on=xy.prototype.I,xy.prototype.once=xy.prototype.L,xy.prototype.un=xy.prototype.J,xy.prototype.unByKey=xy.prototype.M,Sy.prototype.getAttributions=Sy.prototype.va,Sy.prototype.getLogo=Sy.prototype.ua,Sy.prototype.getProjection=Sy.prototype.wa,Sy.prototype.getState=Sy.prototype.U,Sy.prototype.refresh=Sy.prototype.ta,Sy.prototype.setAttributions=Sy.prototype.qa,Sy.prototype.get=Sy.prototype.get,Sy.prototype.getKeys=Sy.prototype.O,Sy.prototype.getProperties=Sy.prototype.N,Sy.prototype.set=Sy.prototype.set,Sy.prototype.setProperties=Sy.prototype.H,Sy.prototype.unset=Sy.prototype.R,Sy.prototype.changed=Sy.prototype.v,Sy.prototype.dispatchEvent=Sy.prototype.b,Sy.prototype.getRevision=Sy.prototype.K,Sy.prototype.on=Sy.prototype.I,Sy.prototype.once=Sy.prototype.L,Sy.prototype.un=Sy.prototype.J,Sy.prototype.unByKey=Sy.prototype.M,Cy.prototype.type=Cy.prototype.type,Cy.prototype.target=Cy.prototype.target,Cy.prototype.preventDefault=Cy.prototype.preventDefault,Cy.prototype.stopPropagation=Cy.prototype.stopPropagation,Py.prototype.setRenderReprojectionEdges=Py.prototype.Bb,Py.prototype.setTileGridForProjection=Py.prototype.Cb,Py.prototype.getTileLoadFunction=Py.prototype.fb,Py.prototype.getTileUrlFunction=Py.prototype.hb,Py.prototype.getUrls=Py.prototype.ib,Py.prototype.setTileLoadFunction=Py.prototype.nb,Py.prototype.setTileUrlFunction=Py.prototype.Ta,Py.prototype.setUrl=Py.prototype.Ya,Py.prototype.setUrls=Py.prototype.Ua,Py.prototype.getTileGrid=Py.prototype.Ra,Py.prototype.refresh=Py.prototype.ta,Py.prototype.getAttributions=Py.prototype.va,Py.prototype.getLogo=Py.prototype.ua,Py.prototype.getProjection=Py.prototype.wa,Py.prototype.getState=Py.prototype.U,Py.prototype.setAttributions=Py.prototype.qa,Py.prototype.get=Py.prototype.get,Py.prototype.getKeys=Py.prototype.O,Py.prototype.getProperties=Py.prototype.N,Py.prototype.set=Py.prototype.set,Py.prototype.setProperties=Py.prototype.H,Py.prototype.unset=Py.prototype.R,Py.prototype.changed=Py.prototype.v,Py.prototype.dispatchEvent=Py.prototype.b,Py.prototype.getRevision=Py.prototype.K,Py.prototype.on=Py.prototype.I,Py.prototype.once=Py.prototype.L,Py.prototype.un=Py.prototype.J,Py.prototype.unByKey=Py.prototype.M,ty.prototype.type=ty.prototype.type,ty.prototype.target=ty.prototype.target,ty.prototype.preventDefault=ty.prototype.preventDefault,ty.prototype.stopPropagation=ty.prototype.stopPropagation,Ay.prototype.setRenderReprojectionEdges=Ay.prototype.Bb,Ay.prototype.setTileGridForProjection=Ay.prototype.Cb,Ay.prototype.getTileLoadFunction=Ay.prototype.fb,Ay.prototype.getTileUrlFunction=Ay.prototype.hb,Ay.prototype.getUrls=Ay.prototype.ib,Ay.prototype.setTileLoadFunction=Ay.prototype.nb,Ay.prototype.setTileUrlFunction=Ay.prototype.Ta,Ay.prototype.setUrl=Ay.prototype.Ya,Ay.prototype.setUrls=Ay.prototype.Ua,Ay.prototype.getTileGrid=Ay.prototype.Ra,Ay.prototype.refresh=Ay.prototype.ta,Ay.prototype.getAttributions=Ay.prototype.va,Ay.prototype.getLogo=Ay.prototype.ua,Ay.prototype.getProjection=Ay.prototype.wa,Ay.prototype.getState=Ay.prototype.U,Ay.prototype.setAttributions=Ay.prototype.qa,Ay.prototype.get=Ay.prototype.get,Ay.prototype.getKeys=Ay.prototype.O,Ay.prototype.getProperties=Ay.prototype.N,Ay.prototype.set=Ay.prototype.set,Ay.prototype.setProperties=Ay.prototype.H,Ay.prototype.unset=Ay.prototype.R,Ay.prototype.changed=Ay.prototype.v,Ay.prototype.dispatchEvent=Ay.prototype.b,Ay.prototype.getRevision=Ay.prototype.K,Ay.prototype.on=Ay.prototype.I,Ay.prototype.once=Ay.prototype.L,Ay.prototype.un=Ay.prototype.J,Ay.prototype.unByKey=Ay.prototype.M,Ny.prototype.getTileGrid=Ny.prototype.Ra,Ny.prototype.refresh=Ny.prototype.ta,Ny.prototype.getAttributions=Ny.prototype.va,Ny.prototype.getLogo=Ny.prototype.ua,Ny.prototype.getProjection=Ny.prototype.wa,Ny.prototype.getState=Ny.prototype.U,Ny.prototype.setAttributions=Ny.prototype.qa,Ny.prototype.get=Ny.prototype.get,Ny.prototype.getKeys=Ny.prototype.O,Ny.prototype.getProperties=Ny.prototype.N,Ny.prototype.set=Ny.prototype.set,Ny.prototype.setProperties=Ny.prototype.H,Ny.prototype.unset=Ny.prototype.R,Ny.prototype.changed=Ny.prototype.v,Ny.prototype.dispatchEvent=Ny.prototype.b,Ny.prototype.getRevision=Ny.prototype.K,Ny.prototype.on=Ny.prototype.I,Ny.prototype.once=Ny.prototype.L,Ny.prototype.un=Ny.prototype.J,Ny.prototype.unByKey=Ny.prototype.M,Ry.prototype.setRenderReprojectionEdges=Ry.prototype.Bb,Ry.prototype.setTileGridForProjection=Ry.prototype.Cb,Ry.prototype.getTileLoadFunction=Ry.prototype.fb,Ry.prototype.getTileUrlFunction=Ry.prototype.hb,Ry.prototype.getUrls=Ry.prototype.ib,Ry.prototype.setTileLoadFunction=Ry.prototype.nb,Ry.prototype.setTileUrlFunction=Ry.prototype.Ta,Ry.prototype.setUrl=Ry.prototype.Ya,Ry.prototype.setUrls=Ry.prototype.Ua,Ry.prototype.getTileGrid=Ry.prototype.Ra,Ry.prototype.refresh=Ry.prototype.ta,Ry.prototype.getAttributions=Ry.prototype.va,Ry.prototype.getLogo=Ry.prototype.ua,Ry.prototype.getProjection=Ry.prototype.wa,Ry.prototype.getState=Ry.prototype.U,Ry.prototype.setAttributions=Ry.prototype.qa,Ry.prototype.get=Ry.prototype.get,Ry.prototype.getKeys=Ry.prototype.O,Ry.prototype.getProperties=Ry.prototype.N,Ry.prototype.set=Ry.prototype.set,Ry.prototype.setProperties=Ry.prototype.H,Ry.prototype.unset=Ry.prototype.R,Ry.prototype.changed=Ry.prototype.v,Ry.prototype.dispatchEvent=Ry.prototype.b,Ry.prototype.getRevision=Ry.prototype.K,Ry.prototype.on=Ry.prototype.I,Ry.prototype.once=Ry.prototype.L,Ry.prototype.un=Ry.prototype.J,Ry.prototype.unByKey=Ry.prototype.M,ky.prototype.getTileGrid=ky.prototype.Ra,ky.prototype.refresh=ky.prototype.ta,ky.prototype.getAttributions=ky.prototype.va,ky.prototype.getLogo=ky.prototype.ua,ky.prototype.getProjection=ky.prototype.wa,ky.prototype.getState=ky.prototype.U,ky.prototype.setAttributions=ky.prototype.qa,ky.prototype.get=ky.prototype.get,ky.prototype.getKeys=ky.prototype.O,ky.prototype.getProperties=ky.prototype.N,ky.prototype.set=ky.prototype.set,ky.prototype.setProperties=ky.prototype.H,ky.prototype.unset=ky.prototype.R,ky.prototype.changed=ky.prototype.v,ky.prototype.dispatchEvent=ky.prototype.b,ky.prototype.getRevision=ky.prototype.K,ky.prototype.on=ky.prototype.I,ky.prototype.once=ky.prototype.L,ky.prototype.un=ky.prototype.J,ky.prototype.unByKey=ky.prototype.M,Oy.prototype.setRenderReprojectionEdges=Oy.prototype.Bb,Oy.prototype.setTileGridForProjection=Oy.prototype.Cb,Oy.prototype.getTileLoadFunction=Oy.prototype.fb,Oy.prototype.getTileUrlFunction=Oy.prototype.hb,Oy.prototype.getUrls=Oy.prototype.ib,Oy.prototype.setTileLoadFunction=Oy.prototype.nb,Oy.prototype.setTileUrlFunction=Oy.prototype.Ta,Oy.prototype.setUrl=Oy.prototype.Ya,Oy.prototype.setUrls=Oy.prototype.Ua,Oy.prototype.getTileGrid=Oy.prototype.Ra,Oy.prototype.refresh=Oy.prototype.ta,Oy.prototype.getAttributions=Oy.prototype.va,Oy.prototype.getLogo=Oy.prototype.ua,Oy.prototype.getProjection=Oy.prototype.wa,Oy.prototype.getState=Oy.prototype.U,Oy.prototype.setAttributions=Oy.prototype.qa,Oy.prototype.get=Oy.prototype.get,Oy.prototype.getKeys=Oy.prototype.O,Oy.prototype.getProperties=Oy.prototype.N,Oy.prototype.set=Oy.prototype.set,Oy.prototype.setProperties=Oy.prototype.H,Oy.prototype.unset=Oy.prototype.R,Oy.prototype.changed=Oy.prototype.v,Oy.prototype.dispatchEvent=Oy.prototype.b,Oy.prototype.getRevision=Oy.prototype.K,Oy.prototype.on=Oy.prototype.I,Oy.prototype.once=Oy.prototype.L,Oy.prototype.un=Oy.prototype.J,Oy.prototype.unByKey=Oy.prototype.M,Bc.prototype.type=Bc.prototype.type,Bc.prototype.target=Bc.prototype.target,Bc.prototype.preventDefault=Bc.prototype.preventDefault,Bc.prototype.stopPropagation=Bc.prototype.stopPropagation,Xy.prototype.getTileLoadFunction=Xy.prototype.fb,Xy.prototype.getTileUrlFunction=Xy.prototype.hb,Xy.prototype.getUrls=Xy.prototype.ib,Xy.prototype.setTileLoadFunction=Xy.prototype.nb,Xy.prototype.setTileUrlFunction=Xy.prototype.Ta,Xy.prototype.setUrl=Xy.prototype.Ya,Xy.prototype.setUrls=Xy.prototype.Ua,Xy.prototype.getTileGrid=Xy.prototype.Ra,Xy.prototype.refresh=Xy.prototype.ta,Xy.prototype.getAttributions=Xy.prototype.va,Xy.prototype.getLogo=Xy.prototype.ua,Xy.prototype.getProjection=Xy.prototype.wa,Xy.prototype.getState=Xy.prototype.U,Xy.prototype.setAttributions=Xy.prototype.qa,Xy.prototype.get=Xy.prototype.get,Xy.prototype.getKeys=Xy.prototype.O,Xy.prototype.getProperties=Xy.prototype.N,Xy.prototype.set=Xy.prototype.set,Xy.prototype.setProperties=Xy.prototype.H,Xy.prototype.unset=Xy.prototype.R,Xy.prototype.changed=Xy.prototype.v,Xy.prototype.dispatchEvent=Xy.prototype.b,Xy.prototype.getRevision=Xy.prototype.K,Xy.prototype.on=Xy.prototype.I,Xy.prototype.once=Xy.prototype.L,Xy.prototype.un=Xy.prototype.J,Xy.prototype.unByKey=Xy.prototype.M,qy.prototype.setRenderReprojectionEdges=qy.prototype.Bb,qy.prototype.setTileGridForProjection=qy.prototype.Cb,qy.prototype.getTileLoadFunction=qy.prototype.fb,qy.prototype.getTileUrlFunction=qy.prototype.hb,qy.prototype.getUrls=qy.prototype.ib,qy.prototype.setTileLoadFunction=qy.prototype.nb,qy.prototype.setTileUrlFunction=qy.prototype.Ta,qy.prototype.setUrl=qy.prototype.Ya,qy.prototype.setUrls=qy.prototype.Ua,qy.prototype.getTileGrid=qy.prototype.Ra,qy.prototype.refresh=qy.prototype.ta,qy.prototype.getAttributions=qy.prototype.va,qy.prototype.getLogo=qy.prototype.ua,qy.prototype.getProjection=qy.prototype.wa,qy.prototype.getState=qy.prototype.U,qy.prototype.setAttributions=qy.prototype.qa,qy.prototype.get=qy.prototype.get,qy.prototype.getKeys=qy.prototype.O,qy.prototype.getProperties=qy.prototype.N,qy.prototype.set=qy.prototype.set,qy.prototype.setProperties=qy.prototype.H,qy.prototype.unset=qy.prototype.R,qy.prototype.changed=qy.prototype.v,qy.prototype.dispatchEvent=qy.prototype.b,qy.prototype.getRevision=qy.prototype.K,qy.prototype.on=qy.prototype.I,qy.prototype.once=qy.prototype.L,qy.prototype.un=qy.prototype.J,qy.prototype.unByKey=qy.prototype.M,Yy.prototype.setRenderReprojectionEdges=Yy.prototype.Bb,Yy.prototype.setTileGridForProjection=Yy.prototype.Cb,Yy.prototype.getTileLoadFunction=Yy.prototype.fb,Yy.prototype.getTileUrlFunction=Yy.prototype.hb,Yy.prototype.getUrls=Yy.prototype.ib,Yy.prototype.setTileLoadFunction=Yy.prototype.nb,Yy.prototype.setTileUrlFunction=Yy.prototype.Ta,Yy.prototype.setUrl=Yy.prototype.Ya,Yy.prototype.setUrls=Yy.prototype.Ua,Yy.prototype.getTileGrid=Yy.prototype.Ra,Yy.prototype.refresh=Yy.prototype.ta,Yy.prototype.getAttributions=Yy.prototype.va,Yy.prototype.getLogo=Yy.prototype.ua,Yy.prototype.getProjection=Yy.prototype.wa,Yy.prototype.getState=Yy.prototype.U,Yy.prototype.setAttributions=Yy.prototype.qa,Yy.prototype.get=Yy.prototype.get,Yy.prototype.getKeys=Yy.prototype.O,Yy.prototype.getProperties=Yy.prototype.N,Yy.prototype.set=Yy.prototype.set,Yy.prototype.setProperties=Yy.prototype.H,Yy.prototype.unset=Yy.prototype.R,Yy.prototype.changed=Yy.prototype.v,Yy.prototype.dispatchEvent=Yy.prototype.b,Yy.prototype.getRevision=Yy.prototype.K,Yy.prototype.on=Yy.prototype.I,Yy.prototype.once=Yy.prototype.L,Yy.prototype.un=Yy.prototype.J,Yy.prototype.unByKey=Yy.prototype.M,Hf.prototype.getTileCoord=Hf.prototype.i,Hf.prototype.load=Hf.prototype.load,Jn.prototype.changed=Jn.prototype.v,Jn.prototype.dispatchEvent=Jn.prototype.b,Jn.prototype.getRevision=Jn.prototype.K,Jn.prototype.on=Jn.prototype.I,Jn.prototype.once=Jn.prototype.L,Jn.prototype.un=Jn.prototype.J,Jn.prototype.unByKey=Jn.prototype.M,Bp.prototype.changed=Bp.prototype.v,Bp.prototype.dispatchEvent=Bp.prototype.b,Bp.prototype.getRevision=Bp.prototype.K,Bp.prototype.on=Bp.prototype.I,Bp.prototype.once=Bp.prototype.L,Bp.prototype.un=Bp.prototype.J,Bp.prototype.unByKey=Bp.prototype.M,$p.prototype.changed=$p.prototype.v,$p.prototype.dispatchEvent=$p.prototype.b,$p.prototype.getRevision=$p.prototype.K,$p.prototype.on=$p.prototype.I,$p.prototype.once=$p.prototype.L,$p.prototype.un=$p.prototype.J,$p.prototype.unByKey=$p.prototype.M,qp.prototype.changed=qp.prototype.v,qp.prototype.dispatchEvent=qp.prototype.b,qp.prototype.getRevision=qp.prototype.K,qp.prototype.on=qp.prototype.I,qp.prototype.once=qp.prototype.L,qp.prototype.un=qp.prototype.J,qp.prototype.unByKey=qp.prototype.M,Vp.prototype.changed=Vp.prototype.v,Vp.prototype.dispatchEvent=Vp.prototype.b,Vp.prototype.getRevision=Vp.prototype.K,Vp.prototype.on=Vp.prototype.I,Vp.prototype.once=Vp.prototype.L,Vp.prototype.un=Vp.prototype.J,Vp.prototype.unByKey=Vp.prototype.M,ns.prototype.changed=ns.prototype.v,ns.prototype.dispatchEvent=ns.prototype.b,ns.prototype.getRevision=ns.prototype.K,ns.prototype.on=ns.prototype.I,ns.prototype.once=ns.prototype.L,ns.prototype.un=ns.prototype.J,ns.prototype.unByKey=ns.prototype.M,Js.prototype.changed=Js.prototype.v,Js.prototype.dispatchEvent=Js.prototype.b,Js.prototype.getRevision=Js.prototype.K,Js.prototype.on=Js.prototype.I,Js.prototype.once=Js.prototype.L,Js.prototype.un=Js.prototype.J,Js.prototype.unByKey=Js.prototype.M,_s.prototype.changed=_s.prototype.v,_s.prototype.dispatchEvent=_s.prototype.b,_s.prototype.getRevision=_s.prototype.K,_s.prototype.on=_s.prototype.I,_s.prototype.once=_s.prototype.L,_s.prototype.un=_s.prototype.J,_s.prototype.unByKey=_s.prototype.M,tp.prototype.changed=tp.prototype.v,tp.prototype.dispatchEvent=tp.prototype.b,tp.prototype.getRevision=tp.prototype.K,tp.prototype.on=tp.prototype.I,tp.prototype.once=tp.prototype.L,tp.prototype.un=tp.prototype.J,tp.prototype.unByKey=tp.prototype.M,ep.prototype.changed=ep.prototype.v,ep.prototype.dispatchEvent=ep.prototype.b,ep.prototype.getRevision=ep.prototype.K,ep.prototype.on=ep.prototype.I,ep.prototype.once=ep.prototype.L,ep.prototype.un=ep.prototype.J,ep.prototype.unByKey=ep.prototype.M,en.prototype.type=en.prototype.type,en.prototype.target=en.prototype.target,en.prototype.preventDefault=en.prototype.preventDefault,en.prototype.stopPropagation=en.prototype.stopPropagation,gi.prototype.type=gi.prototype.type,gi.prototype.target=gi.prototype.target,gi.prototype.preventDefault=gi.prototype.preventDefault,gi.prototype.stopPropagation=gi.prototype.stopPropagation,qr.prototype.get=qr.prototype.get,qr.prototype.getKeys=qr.prototype.O,qr.prototype.getProperties=qr.prototype.N,qr.prototype.set=qr.prototype.set,qr.prototype.setProperties=qr.prototype.H,qr.prototype.unset=qr.prototype.R,qr.prototype.changed=qr.prototype.v,qr.prototype.dispatchEvent=qr.prototype.b,qr.prototype.getRevision=qr.prototype.K,qr.prototype.on=qr.prototype.I,qr.prototype.once=qr.prototype.L,qr.prototype.un=qr.prototype.J,qr.prototype.unByKey=qr.prototype.M,Yr.prototype.getExtent=Yr.prototype.D,Yr.prototype.getMaxResolution=Yr.prototype.Pb,Yr.prototype.getMinResolution=Yr.prototype.Qb,Yr.prototype.getOpacity=Yr.prototype.Rb,Yr.prototype.getVisible=Yr.prototype.zb,Yr.prototype.getZIndex=Yr.prototype.Sb,Yr.prototype.setExtent=Yr.prototype.fc,Yr.prototype.setMaxResolution=Yr.prototype.lc,Yr.prototype.setMinResolution=Yr.prototype.mc,Yr.prototype.setOpacity=Yr.prototype.gc,Yr.prototype.setVisible=Yr.prototype.hc,Yr.prototype.setZIndex=Yr.prototype.ic,Yr.prototype.get=Yr.prototype.get,Yr.prototype.getKeys=Yr.prototype.O,Yr.prototype.getProperties=Yr.prototype.N,Yr.prototype.set=Yr.prototype.set,Yr.prototype.setProperties=Yr.prototype.H,Yr.prototype.unset=Yr.prototype.R,Yr.prototype.changed=Yr.prototype.v,Yr.prototype.dispatchEvent=Yr.prototype.b,Yr.prototype.getRevision=Yr.prototype.K,Yr.prototype.on=Yr.prototype.I,Yr.prototype.once=Yr.prototype.L,Yr.prototype.un=Yr.prototype.J,Yr.prototype.unByKey=Yr.prototype.M,on.prototype.getExtent=on.prototype.D,on.prototype.getMaxResolution=on.prototype.Pb,on.prototype.getMinResolution=on.prototype.Qb,on.prototype.getOpacity=on.prototype.Rb,on.prototype.getVisible=on.prototype.zb,on.prototype.getZIndex=on.prototype.Sb,on.prototype.setExtent=on.prototype.fc,on.prototype.setMaxResolution=on.prototype.lc,on.prototype.setMinResolution=on.prototype.mc,on.prototype.setOpacity=on.prototype.gc,on.prototype.setVisible=on.prototype.hc,on.prototype.setZIndex=on.prototype.ic,on.prototype.get=on.prototype.get,on.prototype.getKeys=on.prototype.O,on.prototype.getProperties=on.prototype.N,on.prototype.set=on.prototype.set,on.prototype.setProperties=on.prototype.H,on.prototype.unset=on.prototype.R,on.prototype.changed=on.prototype.v,on.prototype.dispatchEvent=on.prototype.b,on.prototype.getRevision=on.prototype.K,on.prototype.on=on.prototype.I,on.prototype.once=on.prototype.L,on.prototype.un=on.prototype.J,on.prototype.unByKey=on.prototype.M,$n.prototype.setMap=$n.prototype.setMap,$n.prototype.setSource=$n.prototype.Ec,$n.prototype.getExtent=$n.prototype.D,$n.prototype.getMaxResolution=$n.prototype.Pb,$n.prototype.getMinResolution=$n.prototype.Qb,$n.prototype.getOpacity=$n.prototype.Rb,$n.prototype.getVisible=$n.prototype.zb,$n.prototype.getZIndex=$n.prototype.Sb,$n.prototype.setExtent=$n.prototype.fc,$n.prototype.setMaxResolution=$n.prototype.lc,$n.prototype.setMinResolution=$n.prototype.mc,$n.prototype.setOpacity=$n.prototype.gc,$n.prototype.setVisible=$n.prototype.hc,$n.prototype.setZIndex=$n.prototype.ic,$n.prototype.get=$n.prototype.get,$n.prototype.getKeys=$n.prototype.O,$n.prototype.getProperties=$n.prototype.N,$n.prototype.set=$n.prototype.set,$n.prototype.setProperties=$n.prototype.H,$n.prototype.unset=$n.prototype.R,$n.prototype.changed=$n.prototype.v,$n.prototype.dispatchEvent=$n.prototype.b,$n.prototype.getRevision=$n.prototype.K,$n.prototype.on=$n.prototype.I,$n.prototype.once=$n.prototype.L,$n.prototype.un=$n.prototype.J,$n.prototype.unByKey=$n.prototype.M,Gf.prototype.getSource=Gf.prototype.ga,Gf.prototype.getStyle=Gf.prototype.G,Gf.prototype.getStyleFunction=Gf.prototype.S,Gf.prototype.setStyle=Gf.prototype.l,Gf.prototype.setMap=Gf.prototype.setMap,Gf.prototype.setSource=Gf.prototype.Ec,Gf.prototype.getExtent=Gf.prototype.D,Gf.prototype.getMaxResolution=Gf.prototype.Pb,Gf.prototype.getMinResolution=Gf.prototype.Qb,Gf.prototype.getOpacity=Gf.prototype.Rb,Gf.prototype.getVisible=Gf.prototype.zb,Gf.prototype.getZIndex=Gf.prototype.Sb,Gf.prototype.setExtent=Gf.prototype.fc,Gf.prototype.setMaxResolution=Gf.prototype.lc,Gf.prototype.setMinResolution=Gf.prototype.mc,Gf.prototype.setOpacity=Gf.prototype.gc,Gf.prototype.setVisible=Gf.prototype.hc,Gf.prototype.setZIndex=Gf.prototype.ic,Gf.prototype.get=Gf.prototype.get,Gf.prototype.getKeys=Gf.prototype.O,Gf.prototype.getProperties=Gf.prototype.N,Gf.prototype.set=Gf.prototype.set,Gf.prototype.setProperties=Gf.prototype.H,Gf.prototype.unset=Gf.prototype.R,Gf.prototype.changed=Gf.prototype.v,Gf.prototype.dispatchEvent=Gf.prototype.b,Gf.prototype.getRevision=Gf.prototype.K,Gf.prototype.on=Gf.prototype.I,Gf.prototype.once=Gf.prototype.L,Gf.prototype.un=Gf.prototype.J,Gf.prototype.unByKey=Gf.prototype.M,Tn.prototype.setMap=Tn.prototype.setMap,Tn.prototype.setSource=Tn.prototype.Ec,Tn.prototype.getExtent=Tn.prototype.D,Tn.prototype.getMaxResolution=Tn.prototype.Pb,Tn.prototype.getMinResolution=Tn.prototype.Qb,Tn.prototype.getOpacity=Tn.prototype.Rb,Tn.prototype.getVisible=Tn.prototype.zb,Tn.prototype.getZIndex=Tn.prototype.Sb,Tn.prototype.setExtent=Tn.prototype.fc,Tn.prototype.setMaxResolution=Tn.prototype.lc,Tn.prototype.setMinResolution=Tn.prototype.mc,Tn.prototype.setOpacity=Tn.prototype.gc,Tn.prototype.setVisible=Tn.prototype.hc,
-Tn.prototype.setZIndex=Tn.prototype.ic,Tn.prototype.get=Tn.prototype.get,Tn.prototype.getKeys=Tn.prototype.O,Tn.prototype.getProperties=Tn.prototype.N,Tn.prototype.set=Tn.prototype.set,Tn.prototype.setProperties=Tn.prototype.H,Tn.prototype.unset=Tn.prototype.R,Tn.prototype.changed=Tn.prototype.v,Tn.prototype.dispatchEvent=Tn.prototype.b,Tn.prototype.getRevision=Tn.prototype.K,Tn.prototype.on=Tn.prototype.I,Tn.prototype.once=Tn.prototype.L,Tn.prototype.un=Tn.prototype.J,Tn.prototype.unByKey=Tn.prototype.M,En.prototype.setMap=En.prototype.setMap,En.prototype.setSource=En.prototype.Ec,En.prototype.getExtent=En.prototype.D,En.prototype.getMaxResolution=En.prototype.Pb,En.prototype.getMinResolution=En.prototype.Qb,En.prototype.getOpacity=En.prototype.Rb,En.prototype.getVisible=En.prototype.zb,En.prototype.getZIndex=En.prototype.Sb,En.prototype.setExtent=En.prototype.fc,En.prototype.setMaxResolution=En.prototype.lc,En.prototype.setMinResolution=En.prototype.mc,En.prototype.setOpacity=En.prototype.gc,En.prototype.setVisible=En.prototype.hc,En.prototype.setZIndex=En.prototype.ic,En.prototype.get=En.prototype.get,En.prototype.getKeys=En.prototype.O,En.prototype.getProperties=En.prototype.N,En.prototype.set=En.prototype.set,En.prototype.setProperties=En.prototype.H,En.prototype.unset=En.prototype.R,En.prototype.changed=En.prototype.v,En.prototype.dispatchEvent=En.prototype.b,En.prototype.getRevision=En.prototype.K,En.prototype.on=En.prototype.I,En.prototype.once=En.prototype.L,En.prototype.un=En.prototype.J,En.prototype.unByKey=En.prototype.M,Hn.prototype.getSource=Hn.prototype.ga,Hn.prototype.getStyle=Hn.prototype.G,Hn.prototype.getStyleFunction=Hn.prototype.S,Hn.prototype.setStyle=Hn.prototype.l,Hn.prototype.setMap=Hn.prototype.setMap,Hn.prototype.setSource=Hn.prototype.Ec,Hn.prototype.getExtent=Hn.prototype.D,Hn.prototype.getMaxResolution=Hn.prototype.Pb,Hn.prototype.getMinResolution=Hn.prototype.Qb,Hn.prototype.getOpacity=Hn.prototype.Rb,Hn.prototype.getVisible=Hn.prototype.zb,Hn.prototype.getZIndex=Hn.prototype.Sb,Hn.prototype.setExtent=Hn.prototype.fc,Hn.prototype.setMaxResolution=Hn.prototype.lc,Hn.prototype.setMinResolution=Hn.prototype.mc,Hn.prototype.setOpacity=Hn.prototype.gc,Hn.prototype.setVisible=Hn.prototype.hc,Hn.prototype.setZIndex=Hn.prototype.ic,Hn.prototype.get=Hn.prototype.get,Hn.prototype.getKeys=Hn.prototype.O,Hn.prototype.getProperties=Hn.prototype.N,Hn.prototype.set=Hn.prototype.set,Hn.prototype.setProperties=Hn.prototype.H,Hn.prototype.unset=Hn.prototype.R,Hn.prototype.changed=Hn.prototype.v,Hn.prototype.dispatchEvent=Hn.prototype.b,Hn.prototype.getRevision=Hn.prototype.K,Hn.prototype.on=Hn.prototype.I,Hn.prototype.once=Hn.prototype.L,Hn.prototype.un=Hn.prototype.J,Hn.prototype.unByKey=Hn.prototype.M,Zi.prototype.get=Zi.prototype.get,Zi.prototype.getKeys=Zi.prototype.O,Zi.prototype.getProperties=Zi.prototype.N,Zi.prototype.set=Zi.prototype.set,Zi.prototype.setProperties=Zi.prototype.H,Zi.prototype.unset=Zi.prototype.R,Zi.prototype.changed=Zi.prototype.v,Zi.prototype.dispatchEvent=Zi.prototype.b,Zi.prototype.getRevision=Zi.prototype.K,Zi.prototype.on=Zi.prototype.I,Zi.prototype.once=Zi.prototype.L,Zi.prototype.un=Zi.prototype.J,Zi.prototype.unByKey=Zi.prototype.M,tr.prototype.getActive=tr.prototype.f,tr.prototype.getMap=tr.prototype.c,tr.prototype.setActive=tr.prototype.Ba,tr.prototype.get=tr.prototype.get,tr.prototype.getKeys=tr.prototype.O,tr.prototype.getProperties=tr.prototype.N,tr.prototype.set=tr.prototype.set,tr.prototype.setProperties=tr.prototype.H,tr.prototype.unset=tr.prototype.R,tr.prototype.changed=tr.prototype.v,tr.prototype.dispatchEvent=tr.prototype.b,tr.prototype.getRevision=tr.prototype.K,tr.prototype.on=tr.prototype.I,tr.prototype.once=tr.prototype.L,tr.prototype.un=tr.prototype.J,tr.prototype.unByKey=tr.prototype.M,gc.prototype.getActive=gc.prototype.f,gc.prototype.getMap=gc.prototype.c,gc.prototype.setActive=gc.prototype.Ba,gc.prototype.get=gc.prototype.get,gc.prototype.getKeys=gc.prototype.O,gc.prototype.getProperties=gc.prototype.N,gc.prototype.set=gc.prototype.set,gc.prototype.setProperties=gc.prototype.H,gc.prototype.unset=gc.prototype.R,gc.prototype.changed=gc.prototype.v,gc.prototype.dispatchEvent=gc.prototype.b,gc.prototype.getRevision=gc.prototype.K,gc.prototype.on=gc.prototype.I,gc.prototype.once=gc.prototype.L,gc.prototype.un=gc.prototype.J,gc.prototype.unByKey=gc.prototype.M,bc.prototype.type=bc.prototype.type,bc.prototype.target=bc.prototype.target,bc.prototype.preventDefault=bc.prototype.preventDefault,bc.prototype.stopPropagation=bc.prototype.stopPropagation,ur.prototype.getActive=ur.prototype.f,ur.prototype.getMap=ur.prototype.c,ur.prototype.setActive=ur.prototype.Ba,ur.prototype.get=ur.prototype.get,ur.prototype.getKeys=ur.prototype.O,ur.prototype.getProperties=ur.prototype.N,ur.prototype.set=ur.prototype.set,ur.prototype.setProperties=ur.prototype.H,ur.prototype.unset=ur.prototype.R,ur.prototype.changed=ur.prototype.v,ur.prototype.dispatchEvent=ur.prototype.b,ur.prototype.getRevision=ur.prototype.K,ur.prototype.on=ur.prototype.I,ur.prototype.once=ur.prototype.L,ur.prototype.un=ur.prototype.J,ur.prototype.unByKey=ur.prototype.M,Mr.prototype.getActive=Mr.prototype.f,Mr.prototype.getMap=Mr.prototype.c,Mr.prototype.setActive=Mr.prototype.Ba,Mr.prototype.get=Mr.prototype.get,Mr.prototype.getKeys=Mr.prototype.O,Mr.prototype.getProperties=Mr.prototype.N,Mr.prototype.set=Mr.prototype.set,Mr.prototype.setProperties=Mr.prototype.H,Mr.prototype.unset=Mr.prototype.R,Mr.prototype.changed=Mr.prototype.v,Mr.prototype.dispatchEvent=Mr.prototype.b,Mr.prototype.getRevision=Mr.prototype.K,Mr.prototype.on=Mr.prototype.I,Mr.prototype.once=Mr.prototype.L,Mr.prototype.un=Mr.prototype.J,Mr.prototype.unByKey=Mr.prototype.M,Nr.prototype.type=Nr.prototype.type,Nr.prototype.target=Nr.prototype.target,Nr.prototype.preventDefault=Nr.prototype.preventDefault,Nr.prototype.stopPropagation=Nr.prototype.stopPropagation,yr.prototype.getActive=yr.prototype.f,yr.prototype.getMap=yr.prototype.c,yr.prototype.setActive=yr.prototype.Ba,yr.prototype.get=yr.prototype.get,yr.prototype.getKeys=yr.prototype.O,yr.prototype.getProperties=yr.prototype.N,yr.prototype.set=yr.prototype.set,yr.prototype.setProperties=yr.prototype.H,yr.prototype.unset=yr.prototype.R,yr.prototype.changed=yr.prototype.v,yr.prototype.dispatchEvent=yr.prototype.b,yr.prototype.getRevision=yr.prototype.K,yr.prototype.on=yr.prototype.I,yr.prototype.once=yr.prototype.L,yr.prototype.un=yr.prototype.J,yr.prototype.unByKey=yr.prototype.M,mr.prototype.getActive=mr.prototype.f,mr.prototype.getMap=mr.prototype.c,mr.prototype.setActive=mr.prototype.Ba,mr.prototype.get=mr.prototype.get,mr.prototype.getKeys=mr.prototype.O,mr.prototype.getProperties=mr.prototype.N,mr.prototype.set=mr.prototype.set,mr.prototype.setProperties=mr.prototype.H,mr.prototype.unset=mr.prototype.R,mr.prototype.changed=mr.prototype.v,mr.prototype.dispatchEvent=mr.prototype.b,mr.prototype.getRevision=mr.prototype.K,mr.prototype.on=mr.prototype.I,mr.prototype.once=mr.prototype.L,mr.prototype.un=mr.prototype.J,mr.prototype.unByKey=mr.prototype.M,wc.prototype.getActive=wc.prototype.f,wc.prototype.getMap=wc.prototype.c,wc.prototype.setActive=wc.prototype.Ba,wc.prototype.get=wc.prototype.get,wc.prototype.getKeys=wc.prototype.O,wc.prototype.getProperties=wc.prototype.N,wc.prototype.set=wc.prototype.set,wc.prototype.setProperties=wc.prototype.H,wc.prototype.unset=wc.prototype.R,wc.prototype.changed=wc.prototype.v,wc.prototype.dispatchEvent=wc.prototype.b,wc.prototype.getRevision=wc.prototype.K,wc.prototype.on=wc.prototype.I,wc.prototype.once=wc.prototype.L,wc.prototype.un=wc.prototype.J,wc.prototype.unByKey=wc.prototype.M,Lr.prototype.getGeometry=Lr.prototype.V,Lr.prototype.getActive=Lr.prototype.f,Lr.prototype.getMap=Lr.prototype.c,Lr.prototype.setActive=Lr.prototype.Ba,Lr.prototype.get=Lr.prototype.get,Lr.prototype.getKeys=Lr.prototype.O,Lr.prototype.getProperties=Lr.prototype.N,Lr.prototype.set=Lr.prototype.set,Lr.prototype.setProperties=Lr.prototype.H,Lr.prototype.unset=Lr.prototype.R,Lr.prototype.changed=Lr.prototype.v,Lr.prototype.dispatchEvent=Lr.prototype.b,Lr.prototype.getRevision=Lr.prototype.K,Lr.prototype.on=Lr.prototype.I,Lr.prototype.once=Lr.prototype.L,Lr.prototype.un=Lr.prototype.J,Lr.prototype.unByKey=Lr.prototype.M,Uc.prototype.getActive=Uc.prototype.f,Uc.prototype.getMap=Uc.prototype.c,Uc.prototype.setActive=Uc.prototype.Ba,Uc.prototype.get=Uc.prototype.get,Uc.prototype.getKeys=Uc.prototype.O,Uc.prototype.getProperties=Uc.prototype.N,Uc.prototype.set=Uc.prototype.set,Uc.prototype.setProperties=Uc.prototype.H,Uc.prototype.unset=Uc.prototype.R,Uc.prototype.changed=Uc.prototype.v,Uc.prototype.dispatchEvent=Uc.prototype.b,Uc.prototype.getRevision=Uc.prototype.K,Uc.prototype.on=Uc.prototype.I,Uc.prototype.once=Uc.prototype.L,Uc.prototype.un=Uc.prototype.J,Uc.prototype.unByKey=Uc.prototype.M,Jc.prototype.type=Jc.prototype.type,Jc.prototype.target=Jc.prototype.target,Jc.prototype.preventDefault=Jc.prototype.preventDefault,Jc.prototype.stopPropagation=Jc.prototype.stopPropagation,_c.prototype.getActive=_c.prototype.f,_c.prototype.getMap=_c.prototype.c,_c.prototype.setActive=_c.prototype.Ba,_c.prototype.get=_c.prototype.get,_c.prototype.getKeys=_c.prototype.O,_c.prototype.getProperties=_c.prototype.N,_c.prototype.set=_c.prototype.set,_c.prototype.setProperties=_c.prototype.H,_c.prototype.unset=_c.prototype.R,_c.prototype.changed=_c.prototype.v,_c.prototype.dispatchEvent=_c.prototype.b,_c.prototype.getRevision=_c.prototype.K,_c.prototype.on=_c.prototype.I,_c.prototype.once=_c.prototype.L,_c.prototype.un=_c.prototype.J,_c.prototype.unByKey=_c.prototype.M,lf.prototype.type=lf.prototype.type,lf.prototype.target=lf.prototype.target,lf.prototype.preventDefault=lf.prototype.preventDefault,lf.prototype.stopPropagation=lf.prototype.stopPropagation,Rr.prototype.getActive=Rr.prototype.f,Rr.prototype.getMap=Rr.prototype.c,Rr.prototype.setActive=Rr.prototype.Ba,Rr.prototype.get=Rr.prototype.get,Rr.prototype.getKeys=Rr.prototype.O,Rr.prototype.getProperties=Rr.prototype.N,Rr.prototype.set=Rr.prototype.set,Rr.prototype.setProperties=Rr.prototype.H,Rr.prototype.unset=Rr.prototype.R,Rr.prototype.changed=Rr.prototype.v,Rr.prototype.dispatchEvent=Rr.prototype.b,Rr.prototype.getRevision=Rr.prototype.K,Rr.prototype.on=Rr.prototype.I,Rr.prototype.once=Rr.prototype.L,Rr.prototype.un=Rr.prototype.J,Rr.prototype.unByKey=Rr.prototype.M,Ir.prototype.getActive=Ir.prototype.f,Ir.prototype.getMap=Ir.prototype.c,Ir.prototype.setActive=Ir.prototype.Ba,Ir.prototype.get=Ir.prototype.get,Ir.prototype.getKeys=Ir.prototype.O,Ir.prototype.getProperties=Ir.prototype.N,Ir.prototype.set=Ir.prototype.set,Ir.prototype.setProperties=Ir.prototype.H,Ir.prototype.unset=Ir.prototype.R,Ir.prototype.changed=Ir.prototype.v,Ir.prototype.dispatchEvent=Ir.prototype.b,Ir.prototype.getRevision=Ir.prototype.K,Ir.prototype.on=Ir.prototype.I,Ir.prototype.once=Ir.prototype.L,Ir.prototype.un=Ir.prototype.J,Ir.prototype.unByKey=Ir.prototype.M,uf.prototype.getActive=uf.prototype.f,uf.prototype.getMap=uf.prototype.c,uf.prototype.setActive=uf.prototype.Ba,uf.prototype.get=uf.prototype.get,uf.prototype.getKeys=uf.prototype.O,uf.prototype.getProperties=uf.prototype.N,uf.prototype.set=uf.prototype.set,uf.prototype.setProperties=uf.prototype.H,uf.prototype.unset=uf.prototype.R,uf.prototype.changed=uf.prototype.v,uf.prototype.dispatchEvent=uf.prototype.b,uf.prototype.getRevision=uf.prototype.K,uf.prototype.on=uf.prototype.I,uf.prototype.once=uf.prototype.L,uf.prototype.un=uf.prototype.J,uf.prototype.unByKey=uf.prototype.M,Ef.prototype.type=Ef.prototype.type,Ef.prototype.target=Ef.prototype.target,Ef.prototype.preventDefault=Ef.prototype.preventDefault,Ef.prototype.stopPropagation=Ef.prototype.stopPropagation,Fr.prototype.getActive=Fr.prototype.f,Fr.prototype.getMap=Fr.prototype.c,Fr.prototype.setActive=Fr.prototype.Ba,Fr.prototype.get=Fr.prototype.get,Fr.prototype.getKeys=Fr.prototype.O,Fr.prototype.getProperties=Fr.prototype.N,Fr.prototype.set=Fr.prototype.set,Fr.prototype.setProperties=Fr.prototype.H,Fr.prototype.unset=Fr.prototype.R,Fr.prototype.changed=Fr.prototype.v,Fr.prototype.dispatchEvent=Fr.prototype.b,Fr.prototype.getRevision=Fr.prototype.K,Fr.prototype.on=Fr.prototype.I,Fr.prototype.once=Fr.prototype.L,Fr.prototype.un=Fr.prototype.J,Fr.prototype.unByKey=Fr.prototype.M,Br.prototype.getActive=Br.prototype.f,Br.prototype.getMap=Br.prototype.c,Br.prototype.setActive=Br.prototype.Ba,Br.prototype.get=Br.prototype.get,Br.prototype.getKeys=Br.prototype.O,Br.prototype.getProperties=Br.prototype.N,Br.prototype.set=Br.prototype.set,Br.prototype.setProperties=Br.prototype.H,Br.prototype.unset=Br.prototype.R,Br.prototype.changed=Br.prototype.v,Br.prototype.dispatchEvent=Br.prototype.b,Br.prototype.getRevision=Br.prototype.K,Br.prototype.on=Br.prototype.I,Br.prototype.once=Br.prototype.L,Br.prototype.un=Br.prototype.J,Br.prototype.unByKey=Br.prototype.M,Hr.prototype.getActive=Hr.prototype.f,Hr.prototype.getMap=Hr.prototype.c,Hr.prototype.setActive=Hr.prototype.Ba,Hr.prototype.get=Hr.prototype.get,Hr.prototype.getKeys=Hr.prototype.O,Hr.prototype.getProperties=Hr.prototype.N,Hr.prototype.set=Hr.prototype.set,Hr.prototype.setProperties=Hr.prototype.H,Hr.prototype.unset=Hr.prototype.R,Hr.prototype.changed=Hr.prototype.v,Hr.prototype.dispatchEvent=Hr.prototype.b,Hr.prototype.getRevision=Hr.prototype.K,Hr.prototype.on=Hr.prototype.I,Hr.prototype.once=Hr.prototype.L,Hr.prototype.un=Hr.prototype.J,Hr.prototype.unByKey=Hr.prototype.M,Mf.prototype.getActive=Mf.prototype.f,Mf.prototype.getMap=Mf.prototype.c,Mf.prototype.setActive=Mf.prototype.Ba,Mf.prototype.get=Mf.prototype.get,Mf.prototype.getKeys=Mf.prototype.O,Mf.prototype.getProperties=Mf.prototype.N,Mf.prototype.set=Mf.prototype.set,Mf.prototype.setProperties=Mf.prototype.H,Mf.prototype.unset=Mf.prototype.R,Mf.prototype.changed=Mf.prototype.v,Mf.prototype.dispatchEvent=Mf.prototype.b,Mf.prototype.getRevision=Mf.prototype.K,Mf.prototype.on=Mf.prototype.I,Mf.prototype.once=Mf.prototype.L,Mf.prototype.un=Mf.prototype.J,Mf.prototype.unByKey=Mf.prototype.M,Af.prototype.type=Af.prototype.type,Af.prototype.target=Af.prototype.target,Af.prototype.preventDefault=Af.prototype.preventDefault,Af.prototype.stopPropagation=Af.prototype.stopPropagation,jf.prototype.getActive=jf.prototype.f,jf.prototype.getMap=jf.prototype.c,jf.prototype.setActive=jf.prototype.Ba,jf.prototype.get=jf.prototype.get,jf.prototype.getKeys=jf.prototype.O,jf.prototype.getProperties=jf.prototype.N,jf.prototype.set=jf.prototype.set,jf.prototype.setProperties=jf.prototype.H,jf.prototype.unset=jf.prototype.R,jf.prototype.changed=jf.prototype.v,jf.prototype.dispatchEvent=jf.prototype.b,jf.prototype.getRevision=jf.prototype.K,jf.prototype.on=jf.prototype.I,jf.prototype.once=jf.prototype.L,jf.prototype.un=jf.prototype.J,jf.prototype.unByKey=jf.prototype.M,kf.prototype.getActive=kf.prototype.f,kf.prototype.getMap=kf.prototype.c,kf.prototype.setActive=kf.prototype.Ba,kf.prototype.get=kf.prototype.get,kf.prototype.getKeys=kf.prototype.O,kf.prototype.getProperties=kf.prototype.N,kf.prototype.set=kf.prototype.set,kf.prototype.setProperties=kf.prototype.H,kf.prototype.unset=kf.prototype.R,kf.prototype.changed=kf.prototype.v,kf.prototype.dispatchEvent=kf.prototype.b,kf.prototype.getRevision=kf.prototype.K,kf.prototype.on=kf.prototype.I,kf.prototype.once=kf.prototype.L,kf.prototype.un=kf.prototype.J,kf.prototype.unByKey=kf.prototype.M,Uf.prototype.type=Uf.prototype.type,Uf.prototype.target=Uf.prototype.target,Uf.prototype.preventDefault=Uf.prototype.preventDefault,Uf.prototype.stopPropagation=Uf.prototype.stopPropagation,ce.prototype.get=ce.prototype.get,ce.prototype.getKeys=ce.prototype.O,ce.prototype.getProperties=ce.prototype.N,ce.prototype.set=ce.prototype.set,ce.prototype.setProperties=ce.prototype.H,ce.prototype.unset=ce.prototype.R,ce.prototype.changed=ce.prototype.v,ce.prototype.dispatchEvent=ce.prototype.b,ce.prototype.getRevision=ce.prototype.K,ce.prototype.on=ce.prototype.I,ce.prototype.once=ce.prototype.L,ce.prototype.un=ce.prototype.J,ce.prototype.unByKey=ce.prototype.M,ye.prototype.getClosestPoint=ye.prototype.xb,ye.prototype.intersectsCoordinate=ye.prototype.jb,ye.prototype.getExtent=ye.prototype.D,ye.prototype.rotate=ye.prototype.rotate,ye.prototype.scale=ye.prototype.scale,ye.prototype.simplify=ye.prototype.Db,ye.prototype.transform=ye.prototype.lb,ye.prototype.get=ye.prototype.get,ye.prototype.getKeys=ye.prototype.O,ye.prototype.getProperties=ye.prototype.N,ye.prototype.set=ye.prototype.set,ye.prototype.setProperties=ye.prototype.H,ye.prototype.unset=ye.prototype.R,ye.prototype.changed=ye.prototype.v,ye.prototype.dispatchEvent=ye.prototype.b,ye.prototype.getRevision=ye.prototype.K,ye.prototype.on=ye.prototype.I,ye.prototype.once=ye.prototype.L,ye.prototype.un=ye.prototype.J,ye.prototype.unByKey=ye.prototype.M,sc.prototype.getFirstCoordinate=sc.prototype.Lb,sc.prototype.getLastCoordinate=sc.prototype.Mb,sc.prototype.getLayout=sc.prototype.Nb,sc.prototype.rotate=sc.prototype.rotate,sc.prototype.scale=sc.prototype.scale,sc.prototype.getClosestPoint=sc.prototype.xb,sc.prototype.intersectsCoordinate=sc.prototype.jb,sc.prototype.getExtent=sc.prototype.D,sc.prototype.simplify=sc.prototype.Db,sc.prototype.get=sc.prototype.get,sc.prototype.getKeys=sc.prototype.O,sc.prototype.getProperties=sc.prototype.N,sc.prototype.set=sc.prototype.set,sc.prototype.setProperties=sc.prototype.H,sc.prototype.unset=sc.prototype.R,sc.prototype.changed=sc.prototype.v,sc.prototype.dispatchEvent=sc.prototype.b,sc.prototype.getRevision=sc.prototype.K,sc.prototype.on=sc.prototype.I,sc.prototype.once=sc.prototype.L,sc.prototype.un=sc.prototype.J,sc.prototype.unByKey=sc.prototype.M,Uh.prototype.getClosestPoint=Uh.prototype.xb,Uh.prototype.intersectsCoordinate=Uh.prototype.jb,Uh.prototype.getExtent=Uh.prototype.D,Uh.prototype.rotate=Uh.prototype.rotate,Uh.prototype.scale=Uh.prototype.scale,Uh.prototype.simplify=Uh.prototype.Db,Uh.prototype.transform=Uh.prototype.lb,Uh.prototype.get=Uh.prototype.get,Uh.prototype.getKeys=Uh.prototype.O,Uh.prototype.getProperties=Uh.prototype.N,Uh.prototype.set=Uh.prototype.set,Uh.prototype.setProperties=Uh.prototype.H,Uh.prototype.unset=Uh.prototype.R,Uh.prototype.changed=Uh.prototype.v,Uh.prototype.dispatchEvent=Uh.prototype.b,Uh.prototype.getRevision=Uh.prototype.K,Uh.prototype.on=Uh.prototype.I,Uh.prototype.once=Uh.prototype.L,Uh.prototype.un=Uh.prototype.J,Uh.prototype.unByKey=Uh.prototype.M,Re.prototype.getFirstCoordinate=Re.prototype.Lb,Re.prototype.getLastCoordinate=Re.prototype.Mb,Re.prototype.getLayout=Re.prototype.Nb,Re.prototype.rotate=Re.prototype.rotate,Re.prototype.scale=Re.prototype.scale,Re.prototype.getClosestPoint=Re.prototype.xb,Re.prototype.intersectsCoordinate=Re.prototype.jb,Re.prototype.getExtent=Re.prototype.D,Re.prototype.simplify=Re.prototype.Db,Re.prototype.transform=Re.prototype.lb,Re.prototype.get=Re.prototype.get,Re.prototype.getKeys=Re.prototype.O,Re.prototype.getProperties=Re.prototype.N,Re.prototype.set=Re.prototype.set,Re.prototype.setProperties=Re.prototype.H,Re.prototype.unset=Re.prototype.R,Re.prototype.changed=Re.prototype.v,Re.prototype.dispatchEvent=Re.prototype.b,Re.prototype.getRevision=Re.prototype.K,Re.prototype.on=Re.prototype.I,Re.prototype.once=Re.prototype.L,Re.prototype.un=Re.prototype.J,Re.prototype.unByKey=Re.prototype.M,th.prototype.getFirstCoordinate=th.prototype.Lb,th.prototype.getLastCoordinate=th.prototype.Mb,th.prototype.getLayout=th.prototype.Nb,th.prototype.rotate=th.prototype.rotate,th.prototype.scale=th.prototype.scale,th.prototype.getClosestPoint=th.prototype.xb,th.prototype.intersectsCoordinate=th.prototype.jb,th.prototype.getExtent=th.prototype.D,th.prototype.simplify=th.prototype.Db,th.prototype.transform=th.prototype.lb,th.prototype.get=th.prototype.get,th.prototype.getKeys=th.prototype.O,th.prototype.getProperties=th.prototype.N,th.prototype.set=th.prototype.set,th.prototype.setProperties=th.prototype.H,th.prototype.unset=th.prototype.R,th.prototype.changed=th.prototype.v,th.prototype.dispatchEvent=th.prototype.b,th.prototype.getRevision=th.prototype.K,th.prototype.on=th.prototype.I,th.prototype.once=th.prototype.L,th.prototype.un=th.prototype.J,th.prototype.unByKey=th.prototype.M,oh.prototype.getFirstCoordinate=oh.prototype.Lb,oh.prototype.getLastCoordinate=oh.prototype.Mb,oh.prototype.getLayout=oh.prototype.Nb,oh.prototype.rotate=oh.prototype.rotate,oh.prototype.scale=oh.prototype.scale,oh.prototype.getClosestPoint=oh.prototype.xb,oh.prototype.intersectsCoordinate=oh.prototype.jb,oh.prototype.getExtent=oh.prototype.D,oh.prototype.simplify=oh.prototype.Db,oh.prototype.transform=oh.prototype.lb,oh.prototype.get=oh.prototype.get,oh.prototype.getKeys=oh.prototype.O,oh.prototype.getProperties=oh.prototype.N,oh.prototype.set=oh.prototype.set,oh.prototype.setProperties=oh.prototype.H,oh.prototype.unset=oh.prototype.R,oh.prototype.changed=oh.prototype.v,oh.prototype.dispatchEvent=oh.prototype.b,oh.prototype.getRevision=oh.prototype.K,oh.prototype.on=oh.prototype.I,oh.prototype.once=oh.prototype.L,oh.prototype.un=oh.prototype.J,oh.prototype.unByKey=oh.prototype.M,nh.prototype.getFirstCoordinate=nh.prototype.Lb,nh.prototype.getLastCoordinate=nh.prototype.Mb,nh.prototype.getLayout=nh.prototype.Nb,nh.prototype.rotate=nh.prototype.rotate,nh.prototype.scale=nh.prototype.scale,nh.prototype.getClosestPoint=nh.prototype.xb,nh.prototype.intersectsCoordinate=nh.prototype.jb,nh.prototype.getExtent=nh.prototype.D,nh.prototype.simplify=nh.prototype.Db,nh.prototype.transform=nh.prototype.lb,nh.prototype.get=nh.prototype.get,nh.prototype.getKeys=nh.prototype.O,nh.prototype.getProperties=nh.prototype.N,nh.prototype.set=nh.prototype.set,nh.prototype.setProperties=nh.prototype.H,nh.prototype.unset=nh.prototype.R,nh.prototype.changed=nh.prototype.v,nh.prototype.dispatchEvent=nh.prototype.b,nh.prototype.getRevision=nh.prototype.K,nh.prototype.on=nh.prototype.I,nh.prototype.once=nh.prototype.L,nh.prototype.un=nh.prototype.J,nh.prototype.unByKey=nh.prototype.M,sh.prototype.getFirstCoordinate=sh.prototype.Lb,sh.prototype.getLastCoordinate=sh.prototype.Mb,sh.prototype.getLayout=sh.prototype.Nb,sh.prototype.rotate=sh.prototype.rotate,sh.prototype.scale=sh.prototype.scale,sh.prototype.getClosestPoint=sh.prototype.xb,sh.prototype.intersectsCoordinate=sh.prototype.jb,sh.prototype.getExtent=sh.prototype.D,sh.prototype.simplify=sh.prototype.Db,sh.prototype.transform=sh.prototype.lb,sh.prototype.get=sh.prototype.get,sh.prototype.getKeys=sh.prototype.O,sh.prototype.getProperties=sh.prototype.N,sh.prototype.set=sh.prototype.set,sh.prototype.setProperties=sh.prototype.H,sh.prototype.unset=sh.prototype.R,sh.prototype.changed=sh.prototype.v,sh.prototype.dispatchEvent=sh.prototype.b,sh.prototype.getRevision=sh.prototype.K,sh.prototype.on=sh.prototype.I,sh.prototype.once=sh.prototype.L,sh.prototype.un=sh.prototype.J,sh.prototype.unByKey=sh.prototype.M,Ie.prototype.getFirstCoordinate=Ie.prototype.Lb,Ie.prototype.getLastCoordinate=Ie.prototype.Mb,Ie.prototype.getLayout=Ie.prototype.Nb,Ie.prototype.rotate=Ie.prototype.rotate,Ie.prototype.scale=Ie.prototype.scale,Ie.prototype.getClosestPoint=Ie.prototype.xb,Ie.prototype.intersectsCoordinate=Ie.prototype.jb,Ie.prototype.getExtent=Ie.prototype.D,Ie.prototype.simplify=Ie.prototype.Db,Ie.prototype.transform=Ie.prototype.lb,Ie.prototype.get=Ie.prototype.get,Ie.prototype.getKeys=Ie.prototype.O,Ie.prototype.getProperties=Ie.prototype.N,Ie.prototype.set=Ie.prototype.set,Ie.prototype.setProperties=Ie.prototype.H,Ie.prototype.unset=Ie.prototype.R,Ie.prototype.changed=Ie.prototype.v,Ie.prototype.dispatchEvent=Ie.prototype.b,Ie.prototype.getRevision=Ie.prototype.K,Ie.prototype.on=Ie.prototype.I,Ie.prototype.once=Ie.prototype.L,Ie.prototype.un=Ie.prototype.J,Ie.prototype.unByKey=Ie.prototype.M,ze.prototype.getFirstCoordinate=ze.prototype.Lb,ze.prototype.getLastCoordinate=ze.prototype.Mb,ze.prototype.getLayout=ze.prototype.Nb,ze.prototype.rotate=ze.prototype.rotate,ze.prototype.scale=ze.prototype.scale,ze.prototype.getClosestPoint=ze.prototype.xb,ze.prototype.intersectsCoordinate=ze.prototype.jb,ze.prototype.getExtent=ze.prototype.D,ze.prototype.simplify=ze.prototype.Db,ze.prototype.transform=ze.prototype.lb,ze.prototype.get=ze.prototype.get,ze.prototype.getKeys=ze.prototype.O,ze.prototype.getProperties=ze.prototype.N,ze.prototype.set=ze.prototype.set,ze.prototype.setProperties=ze.prototype.H,ze.prototype.unset=ze.prototype.R,ze.prototype.changed=ze.prototype.v,ze.prototype.dispatchEvent=ze.prototype.b,ze.prototype.getRevision=ze.prototype.K,ze.prototype.on=ze.prototype.I,ze.prototype.once=ze.prototype.L,ze.prototype.un=ze.prototype.J,ze.prototype.unByKey=ze.prototype.M,al.prototype.readFeatures=al.prototype.Ha,ll.prototype.readFeatures=ll.prototype.Ha,al.prototype.readFeatures=al.prototype.Ha,qo.prototype.get=qo.prototype.get,qo.prototype.getKeys=qo.prototype.O,qo.prototype.getProperties=qo.prototype.N,qo.prototype.set=qo.prototype.set,qo.prototype.setProperties=qo.prototype.H,qo.prototype.unset=qo.prototype.R,qo.prototype.changed=qo.prototype.v,qo.prototype.dispatchEvent=qo.prototype.b,qo.prototype.getRevision=qo.prototype.K,qo.prototype.on=qo.prototype.I,qo.prototype.once=qo.prototype.L,qo.prototype.un=qo.prototype.J,qo.prototype.unByKey=qo.prototype.M,Vo.prototype.getMap=Vo.prototype.i,Vo.prototype.setMap=Vo.prototype.setMap,Vo.prototype.setTarget=Vo.prototype.c,Vo.prototype.get=Vo.prototype.get,Vo.prototype.getKeys=Vo.prototype.O,Vo.prototype.getProperties=Vo.prototype.N,Vo.prototype.set=Vo.prototype.set,Vo.prototype.setProperties=Vo.prototype.H,Vo.prototype.unset=Vo.prototype.R,Vo.prototype.changed=Vo.prototype.v,Vo.prototype.dispatchEvent=Vo.prototype.b,Vo.prototype.getRevision=Vo.prototype.K,Vo.prototype.on=Vo.prototype.I,Vo.prototype.once=Vo.prototype.L,Vo.prototype.un=Vo.prototype.J,Vo.prototype.unByKey=Vo.prototype.M,Jo.prototype.getMap=Jo.prototype.i,Jo.prototype.setMap=Jo.prototype.setMap,Jo.prototype.setTarget=Jo.prototype.c,Jo.prototype.get=Jo.prototype.get,Jo.prototype.getKeys=Jo.prototype.O,Jo.prototype.getProperties=Jo.prototype.N,Jo.prototype.set=Jo.prototype.set,Jo.prototype.setProperties=Jo.prototype.H,Jo.prototype.unset=Jo.prototype.R,Jo.prototype.changed=Jo.prototype.v,Jo.prototype.dispatchEvent=Jo.prototype.b,Jo.prototype.getRevision=Jo.prototype.K,Jo.prototype.on=Jo.prototype.I,Jo.prototype.once=Jo.prototype.L,Jo.prototype.un=Jo.prototype.J,Jo.prototype.unByKey=Jo.prototype.M,ni.prototype.getMap=ni.prototype.i,ni.prototype.setMap=ni.prototype.setMap,ni.prototype.setTarget=ni.prototype.c,ni.prototype.get=ni.prototype.get,ni.prototype.getKeys=ni.prototype.O,ni.prototype.getProperties=ni.prototype.N,ni.prototype.set=ni.prototype.set,ni.prototype.setProperties=ni.prototype.H,ni.prototype.unset=ni.prototype.R,ni.prototype.changed=ni.prototype.v,ni.prototype.dispatchEvent=ni.prototype.b,ni.prototype.getRevision=ni.prototype.K,ni.prototype.on=ni.prototype.I,ni.prototype.once=ni.prototype.L,ni.prototype.un=ni.prototype.J,ni.prototype.unByKey=ni.prototype.M,sa.prototype.getMap=sa.prototype.i,sa.prototype.setMap=sa.prototype.setMap,sa.prototype.setTarget=sa.prototype.c,sa.prototype.get=sa.prototype.get,sa.prototype.getKeys=sa.prototype.O,sa.prototype.getProperties=sa.prototype.N,sa.prototype.set=sa.prototype.set,sa.prototype.setProperties=sa.prototype.H,sa.prototype.unset=sa.prototype.R,sa.prototype.changed=sa.prototype.v,sa.prototype.dispatchEvent=sa.prototype.b,sa.prototype.getRevision=sa.prototype.K,sa.prototype.on=sa.prototype.I,sa.prototype.once=sa.prototype.L,sa.prototype.un=sa.prototype.J,sa.prototype.unByKey=sa.prototype.M,ei.prototype.getMap=ei.prototype.i,ei.prototype.setMap=ei.prototype.setMap,ei.prototype.setTarget=ei.prototype.c,ei.prototype.get=ei.prototype.get,ei.prototype.getKeys=ei.prototype.O,ei.prototype.getProperties=ei.prototype.N,ei.prototype.set=ei.prototype.set,ei.prototype.setProperties=ei.prototype.H,ei.prototype.unset=ei.prototype.R,ei.prototype.changed=ei.prototype.v,ei.prototype.dispatchEvent=ei.prototype.b,ei.prototype.getRevision=ei.prototype.K,ei.prototype.on=ei.prototype.I,ei.prototype.once=ei.prototype.L,ei.prototype.un=ei.prototype.J,ei.prototype.unByKey=ei.prototype.M,ua.prototype.getMap=ua.prototype.i,ua.prototype.setMap=ua.prototype.setMap,ua.prototype.setTarget=ua.prototype.c,ua.prototype.get=ua.prototype.get,ua.prototype.getKeys=ua.prototype.O,ua.prototype.getProperties=ua.prototype.N,ua.prototype.set=ua.prototype.set,ua.prototype.setProperties=ua.prototype.H,ua.prototype.unset=ua.prototype.R,ua.prototype.changed=ua.prototype.v,ua.prototype.dispatchEvent=ua.prototype.b,ua.prototype.getRevision=ua.prototype.K,ua.prototype.on=ua.prototype.I,ua.prototype.once=ua.prototype.L,ua.prototype.un=ua.prototype.J,ua.prototype.unByKey=ua.prototype.M,ii.prototype.getMap=ii.prototype.i,ii.prototype.setMap=ii.prototype.setMap,ii.prototype.setTarget=ii.prototype.c,ii.prototype.get=ii.prototype.get,ii.prototype.getKeys=ii.prototype.O,ii.prototype.getProperties=ii.prototype.N,ii.prototype.set=ii.prototype.set,ii.prototype.setProperties=ii.prototype.H,ii.prototype.unset=ii.prototype.R,ii.prototype.changed=ii.prototype.v,ii.prototype.dispatchEvent=ii.prototype.b,ii.prototype.getRevision=ii.prototype.K,ii.prototype.on=ii.prototype.I,ii.prototype.once=ii.prototype.L,ii.prototype.un=ii.prototype.J,ii.prototype.unByKey=ii.prototype.M,ya.prototype.getMap=ya.prototype.i,ya.prototype.setMap=ya.prototype.setMap,ya.prototype.setTarget=ya.prototype.c,ya.prototype.get=ya.prototype.get,ya.prototype.getKeys=ya.prototype.O,ya.prototype.getProperties=ya.prototype.N,ya.prototype.set=ya.prototype.set,ya.prototype.setProperties=ya.prototype.H,ya.prototype.unset=ya.prototype.R,ya.prototype.changed=ya.prototype.v,ya.prototype.dispatchEvent=ya.prototype.b,ya.prototype.getRevision=ya.prototype.K,ya.prototype.on=ya.prototype.I,ya.prototype.once=ya.prototype.L,ya.prototype.un=ya.prototype.J,ya.prototype.unByKey=ya.prototype.M,ma.prototype.getMap=ma.prototype.i,ma.prototype.setMap=ma.prototype.setMap,ma.prototype.setTarget=ma.prototype.c,ma.prototype.get=ma.prototype.get,ma.prototype.getKeys=ma.prototype.O,ma.prototype.getProperties=ma.prototype.N,ma.prototype.set=ma.prototype.set,ma.prototype.setProperties=ma.prototype.H,ma.prototype.unset=ma.prototype.R,ma.prototype.changed=ma.prototype.v,ma.prototype.dispatchEvent=ma.prototype.b,ma.prototype.getRevision=ma.prototype.K,ma.prototype.on=ma.prototype.I,ma.prototype.once=ma.prototype.L,ma.prototype.un=ma.prototype.J,ma.prototype.unByKey=ma.prototype.M,nd.ol});var map,extent,overlays=[],vectorSource=new ol.source.Vector,lastClick,popupOverlay,vectorLayer;$(document).ready(function(){initMap(),$("#closer").click(function(){toggleResults()}),map.on("singleclick",function(t){var e=t.coordinate;lastClick=e}),$(window).resize(function(){updateResultsPosition(),updateCloserPosition()})});var options={enableHighAccuracy:!0,timeout:5e3,maximumAge:0};$(document).ready(function(){boundings||receiveLocation(),$("#clearInput").click(function(){$("#search input[name=q]").val(""),$("#search input[name=q]").focus(),$("#results > .result").remove(),$("#results").addClass("hidden"),$.each(overlays,function(t,e){map.removeOverlay(e),$("#popup-closer").click()})}),$("#search input[name=q]").on("keydown",function(t){13==t.which&&$("#doSearch").click()}),$("#doSearch").click(function(){updateMapExtent();var t=$("#search input[name=q]").val();t=encodeURI(t),$("#clearInput").html('<img src="/img/ajax-loader.gif" />');var e="/"+t+"/"+encodeURI(extent[0])+"/"+encodeURI(extent[1])+"/"+encodeURI(extent[2])+"/"+encodeURI(extent[3]);$.getScript(e).fail(function(t,e,o){}),$("#search input[name=q]").blur()}),map.on("moveend",function(){var t=$("#search input[name=q]").val();if(""!==t){updateMapExtent();var t=$("#search input[name=q]").val();t=encodeURI(t),$("#clearInput").html('<img src="/img/ajax-loader.gif" />');var e="/"+t+"/"+encodeURI(extent[0])+"/"+encodeURI(extent[1])+"/"+encodeURI(extent[2])+"/"+encodeURI(extent[3]+"/"+!1+"/50");
-$.getScript(e)}},map)});
\ No newline at end of file
+function success(t){var e=t.coords;map.getView().setCenter(ol.proj.transform([e.longitude,e.latitude],"EPSG:4326","EPSG:3857")),map.getView().setZoom(12),updateMapExtent()}function error(t){}function receiveLocation(){navigator.geolocation.getCurrentPosition(success,error,options)}function updateMapExtent(){var t=map.getView().calculateExtent([$("#map").width(),$("#map").height()]);extent=ol.proj.transform([t[0],t[1]],"EPSG:3857","EPSG:4326").concat(ol.proj.transform([t[2],t[3]],"EPSG:3857","EPSG:4326"))}function numberWithPoints(t){return t.toString().replace(/\B(?=(\d{3})+(?!\d))/g,".")}function toggleResults(){"in"===$("#results").attr("data-status")?($("#closer").html("<"),$("#results").attr("data-status","out"),$("#closer").attr("title","Ergebnisse ausklappen"),updateResultsPosition(),updateCloserPosition()):($("#closer").html(">"),$("#results").attr("data-status","in"),$("#closer").attr("title","Ergebnisse einklappen"),updateResultsPosition(),updateCloserPosition())}function updateResultsPosition(){if("out"===$("#results").attr("data-status")){var t=$("#results").outerWidth()*-1;$("#results").css("right",t+"px")}else $("#results").css("right",0)}function updateCloserPosition(){if("out"===$("#results").attr("data-status"))$("#closer").css("right","0px");else{var t=$(window).width(),e=$("#results").width()-1,o=$("#closer").width();t>e+o?$("#closer").css("right",e+"px"):$("#closer").css("right",e-o+"px")}}function adjustView(t){if(!(t.length<=0)){for(var e=[],o=[],i=0;i<t.length&&(("undefined"==typeof e[0]||e[0]>parseFloat(t[i].lon))&&(e[0]=parseFloat(t[i].lon)),("undefined"==typeof e[0]||"undefined"!=typeof t[i].boundingbox&&e[0]>parseFloat(t[i].boundingbox[2]))&&(e[0]=parseFloat(t[i].boundingbox[2])),("undefined"==typeof e[1]||e[1]>parseFloat(t[i].lat))&&(e[1]=parseFloat(t[i].lat)),("undefined"==typeof e[1]||"undefined"!=typeof t[i].boundingbox&&e[1]>parseFloat(t[i].boundingbox[0]))&&(e[1]=parseFloat(t[i].boundingbox[0])),("undefined"==typeof o[0]||o[0]<parseFloat(t[i].lon))&&(o[0]=parseFloat(t[i].lon)),("undefined"==typeof o[0]||"undefined"!=typeof t[i].boundingbox&&o[0]<parseFloat(t[i].boundingbox[3]))&&(o[0]=parseFloat(t[i].boundingbox[3])),("undefined"==typeof o[1]||o[1]<parseFloat(t[i].lat))&&(o[1]=parseFloat(t[i].lat)),("undefined"==typeof o[1]||"undefined"!=typeof t[i].boundingbox&&o[1]<parseFloat(t[i].boundingbox[1]))&&(o[1]=parseFloat(t[i].boundingbox[1])),"undefined"==typeof t[i].type||"city"!==t[i].type&&"administrative"!==t[i].type&&"river"!==t[i].type);i++);e=ol.proj.transform(e,"EPSG:4326","EPSG:3857"),o=ol.proj.transform(o,"EPSG:4326","EPSG:3857"),map.getView().fitExtent([e[0],e[1],o[0],o[1]],map.getSize())}}function clearPOIS(){$.each(overlays,function(t,e){map.removeOverlay(e)}),map.removeLayer(vectorLayer),vectorSource=new ol.source.Vector,$("#results > .result").remove(),$("#results > h4").remove(),overlays=[]}function addMarker(t,e){var o=new ol.Overlay({position:e,element:t,offset:[-12,-45],stopEvent:!1});map.addOverlay(o),overlays.push(o)}function initMap(){popupOverlay=new ol.Overlay({element:$("#popup"),autoPan:!0,autoPanAnimation:{duration:250}}),map=new ol.Map({layers:[new ol.layer.Tile({preload:1/0,source:new ol.source.OSM({attributions:[new ol.Attribution({html:'All search results &copy; <a href="http://nominatim.openstreetmap.org/">Nominatim</a>'}),ol.source.OSM.ATTRIBUTION],url:"https://maps.metager.de/osm_tiles/{z}/{x}/{y}.png"})})],target:"map",controls:ol.control.defaults({attributionOptions:{collapsible:!0}}),overlays:[popupOverlay],view:new ol.View({maxZoom:18,minZoom:6,center:ol.proj.transform([10.06897,51.37247],"EPSG:4326","EPSG:3857"),zoom:6}),loadTilesWhileAnimating:!0,loadTilesWhileInteracting:!0}),map.addControl(new ol.control.ZoomSlider),$("#popup-closer").click(function(){return popupOverlay.setPosition(void 0),$(this).blur(),!1})}if(!function(t,e){"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){function o(t){var e=t.length,o=nt.type(t);return"function"!==o&&!nt.isWindow(t)&&(!(1!==t.nodeType||!e)||("array"===o||0===e||"number"==typeof e&&e>0&&e-1 in t))}function i(t,e,o){if(nt.isFunction(e))return nt.grep(t,function(t,i){return!!e.call(t,i,t)!==o});if(e.nodeType)return nt.grep(t,function(t){return t===e!==o});if("string"==typeof e){if(ct.test(e))return nt.filter(e,t,o);e=nt.filter(e,t)}return nt.grep(t,function(t){return nt.inArray(t,e)>=0!==o})}function n(t,e){do t=t[e];while(t&&1!==t.nodeType);return t}function r(t){var e=wt[t]={};return nt.each(t.match(bt)||[],function(t,o){e[o]=!0}),e}function s(){yt.addEventListener?(yt.removeEventListener("DOMContentLoaded",a,!1),t.removeEventListener("load",a,!1)):(yt.detachEvent("onreadystatechange",a),t.detachEvent("onload",a))}function a(){(yt.addEventListener||"load"===event.type||"complete"===yt.readyState)&&(s(),nt.ready())}function p(t,e,o){if(void 0===o&&1===t.nodeType){var i="data-"+e.replace(Mt,"-$1").toLowerCase();if(o=t.getAttribute(i),"string"==typeof o){try{o="true"===o||"false"!==o&&("null"===o?null:+o+""===o?+o:Ct.test(o)?nt.parseJSON(o):o)}catch(n){}nt.data(t,e,o)}else o=void 0}return o}function l(t){var e;for(e in t)if(("data"!==e||!nt.isEmptyObject(t[e]))&&"toJSON"!==e)return!1;return!0}function h(t,e,o,i){if(nt.acceptData(t)){var n,r,s=nt.expando,a=t.nodeType,p=a?nt.cache:t,l=a?t[s]:t[s]&&s;if(l&&p[l]&&(i||p[l].data)||void 0!==o||"string"!=typeof e)return l||(l=a?t[s]=V.pop()||nt.guid++:s),p[l]||(p[l]=a?{}:{toJSON:nt.noop}),("object"==typeof e||"function"==typeof e)&&(i?p[l]=nt.extend(p[l],e):p[l].data=nt.extend(p[l].data,e)),r=p[l],i||(r.data||(r.data={}),r=r.data),void 0!==o&&(r[nt.camelCase(e)]=o),"string"==typeof e?(n=r[e],null==n&&(n=r[nt.camelCase(e)])):n=r,n}}function u(t,e,o){if(nt.acceptData(t)){var i,n,r=t.nodeType,s=r?nt.cache:t,a=r?t[nt.expando]:nt.expando;if(s[a]){if(e&&(i=o?s[a]:s[a].data)){nt.isArray(e)?e=e.concat(nt.map(e,nt.camelCase)):e in i?e=[e]:(e=nt.camelCase(e),e=e in i?[e]:e.split(" ")),n=e.length;for(;n--;)delete i[e[n]];if(o?!l(i):!nt.isEmptyObject(i))return}(o||(delete s[a].data,l(s[a])))&&(r?nt.cleanData([t],!0):ot.deleteExpando||s!=s.window?delete s[a]:s[a]=null)}}}function c(){return!0}function f(){return!1}function y(){try{return yt.activeElement}catch(t){}}function d(t){var e=Ft.split("|"),o=t.createDocumentFragment();if(o.createElement)for(;e.length;)o.createElement(e.pop());return o}function g(t,e){var o,i,n=0,r=typeof t.getElementsByTagName!==Tt?t.getElementsByTagName(e||"*"):typeof t.querySelectorAll!==Tt?t.querySelectorAll(e||"*"):void 0;if(!r)for(r=[],o=t.childNodes||t;null!=(i=o[n]);n++)!e||nt.nodeName(i,e)?r.push(i):nt.merge(r,g(i,e));return void 0===e||e&&nt.nodeName(t,e)?nt.merge([t],r):r}function v(t){Rt.test(t.type)&&(t.defaultChecked=t.checked)}function m(t,e){return nt.nodeName(t,"table")&&nt.nodeName(11!==e.nodeType?e:e.firstChild,"tr")?t.getElementsByTagName("tbody")[0]||t.appendChild(t.ownerDocument.createElement("tbody")):t}function b(t){return t.type=(null!==nt.find.attr(t,"type"))+"/"+t.type,t}function w(t){var e=zt.exec(t.type);return e?t.type=e[1]:t.removeAttribute("type"),t}function x(t,e){for(var o,i=0;null!=(o=t[i]);i++)nt._data(o,"globalEval",!e||nt._data(e[i],"globalEval"))}function S(t,e){if(1===e.nodeType&&nt.hasData(t)){var o,i,n,r=nt._data(t),s=nt._data(e,r),a=r.events;if(a){delete s.handle,s.events={};for(o in a)for(i=0,n=a[o].length;n>i;i++)nt.event.add(e,o,a[o][i])}s.data&&(s.data=nt.extend({},s.data))}}function T(t,e){var o,i,n;if(1===e.nodeType){if(o=e.nodeName.toLowerCase(),!ot.noCloneEvent&&e[nt.expando]){n=nt._data(e);for(i in n.events)nt.removeEvent(e,i,n.handle);e.removeAttribute(nt.expando)}"script"===o&&e.text!==t.text?(b(e).text=t.text,w(e)):"object"===o?(e.parentNode&&(e.outerHTML=t.outerHTML),ot.html5Clone&&t.innerHTML&&!nt.trim(e.innerHTML)&&(e.innerHTML=t.innerHTML)):"input"===o&&Rt.test(t.type)?(e.defaultChecked=e.checked=t.checked,e.value!==t.value&&(e.value=t.value)):"option"===o?e.defaultSelected=e.selected=t.defaultSelected:("input"===o||"textarea"===o)&&(e.defaultValue=t.defaultValue)}}function C(e,o){var i,n=nt(o.createElement(e)).appendTo(o.body),r=t.getDefaultComputedStyle&&(i=t.getDefaultComputedStyle(n[0]))?i.display:nt.css(n[0],"display");return n.detach(),r}function M(t){var e=yt,o=Qt[t];return o||(o=C(t,e),"none"!==o&&o||(Jt=(Jt||nt("<iframe frameborder='0' width='0' height='0'/>")).appendTo(e.documentElement),e=(Jt[0].contentWindow||Jt[0].contentDocument).document,e.write(),e.close(),o=C(t,e),Jt.detach()),Qt[t]=o),o}function P(t,e){return{get:function(){var o=t();if(null!=o)return o?void delete this.get:(this.get=e).apply(this,arguments)}}}function E(t,e){if(e in t)return e;for(var o=e.charAt(0).toUpperCase()+e.slice(1),i=e,n=ce.length;n--;)if(e=ce[n]+o,e in t)return e;return i}function k(t,e){for(var o,i,n,r=[],s=0,a=t.length;a>s;s++)i=t[s],i.style&&(r[s]=nt._data(i,"olddisplay"),o=i.style.display,e?(r[s]||"none"!==o||(i.style.display=""),""===i.style.display&&kt(i)&&(r[s]=nt._data(i,"olddisplay",M(i.nodeName)))):(n=kt(i),(o&&"none"!==o||!n)&&nt._data(i,"olddisplay",n?o:nt.css(i,"display"))));for(s=0;a>s;s++)i=t[s],i.style&&(e&&"none"!==i.style.display&&""!==i.style.display||(i.style.display=e?r[s]||"":"none"));return t}function A(t,e,o){var i=pe.exec(e);return i?Math.max(0,i[1]-(o||0))+(i[2]||"px"):e}function R(t,e,o,i,n){for(var r=o===(i?"border":"content")?4:"width"===e?1:0,s=0;4>r;r+=2)"margin"===o&&(s+=nt.css(t,o+Et[r],!0,n)),i?("content"===o&&(s-=nt.css(t,"padding"+Et[r],!0,n)),"margin"!==o&&(s-=nt.css(t,"border"+Et[r]+"Width",!0,n))):(s+=nt.css(t,"padding"+Et[r],!0,n),"padding"!==o&&(s+=nt.css(t,"border"+Et[r]+"Width",!0,n)));return s}function j(t,e,o){var i=!0,n="width"===e?t.offsetWidth:t.offsetHeight,r=te(t),s=ot.boxSizing&&"border-box"===nt.css(t,"boxSizing",!1,r);if(0>=n||null==n){if(n=ee(t,e,r),(0>n||null==n)&&(n=t.style[e]),ie.test(n))return n;i=s&&(ot.boxSizingReliable()||n===t.style[e]),n=parseFloat(n)||0}return n+R(t,e,o||(s?"border":"content"),i,r)+"px"}function L(t,e,o,i,n){return new L.prototype.init(t,e,o,i,n)}function N(){return setTimeout(function(){fe=void 0}),fe=nt.now()}function I(t,e){var o,i={height:t},n=0;for(e=e?1:0;4>n;n+=2-e)o=Et[n],i["margin"+o]=i["padding"+o]=t;return e&&(i.opacity=i.width=t),i}function D(t,e,o){for(var i,n=(be[e]||[]).concat(be["*"]),r=0,s=n.length;s>r;r++)if(i=n[r].call(o,e,t))return i}function F(t,e,o){var i,n,r,s,a,p,l,h,u=this,c={},f=t.style,y=t.nodeType&&kt(t),d=nt._data(t,"fxshow");o.queue||(a=nt._queueHooks(t,"fx"),null==a.unqueued&&(a.unqueued=0,p=a.empty.fire,a.empty.fire=function(){a.unqueued||p()}),a.unqueued++,u.always(function(){u.always(function(){a.unqueued--,nt.queue(t,"fx").length||a.empty.fire()})})),1===t.nodeType&&("height"in e||"width"in e)&&(o.overflow=[f.overflow,f.overflowX,f.overflowY],l=nt.css(t,"display"),h="none"===l?nt._data(t,"olddisplay")||M(t.nodeName):l,"inline"===h&&"none"===nt.css(t,"float")&&(ot.inlineBlockNeedsLayout&&"inline"!==M(t.nodeName)?f.zoom=1:f.display="inline-block")),o.overflow&&(f.overflow="hidden",ot.shrinkWrapBlocks()||u.always(function(){f.overflow=o.overflow[0],f.overflowX=o.overflow[1],f.overflowY=o.overflow[2]}));for(i in e)if(n=e[i],de.exec(n)){if(delete e[i],r=r||"toggle"===n,n===(y?"hide":"show")){if("show"!==n||!d||void 0===d[i])continue;y=!0}c[i]=d&&d[i]||nt.style(t,i)}else l=void 0;if(nt.isEmptyObject(c))"inline"===("none"===l?M(t.nodeName):l)&&(f.display=l);else{d?"hidden"in d&&(y=d.hidden):d=nt._data(t,"fxshow",{}),r&&(d.hidden=!y),y?nt(t).show():u.done(function(){nt(t).hide()}),u.done(function(){var e;nt._removeData(t,"fxshow");for(e in c)nt.style(t,e,c[e])});for(i in c)s=D(y?d[i]:0,i,u),i in d||(d[i]=s.start,y&&(s.end=s.start,s.start="width"===i||"height"===i?1:0))}}function O(t,e){var o,i,n,r,s;for(o in t)if(i=nt.camelCase(o),n=e[i],r=t[o],nt.isArray(r)&&(n=r[1],r=t[o]=r[0]),o!==i&&(t[i]=r,delete t[o]),s=nt.cssHooks[i],s&&"expand"in s){r=s.expand(r),delete t[i];for(o in r)o in t||(t[o]=r[o],e[o]=n)}else e[i]=n}function B(t,e,o){var i,n,r=0,s=me.length,a=nt.Deferred().always(function(){delete p.elem}),p=function(){if(n)return!1;for(var e=fe||N(),o=Math.max(0,l.startTime+l.duration-e),i=o/l.duration||0,r=1-i,s=0,p=l.tweens.length;p>s;s++)l.tweens[s].run(r);return a.notifyWith(t,[l,r,o]),1>r&&p?o:(a.resolveWith(t,[l]),!1)},l=a.promise({elem:t,props:nt.extend({},e),opts:nt.extend(!0,{specialEasing:{}},o),originalProperties:e,originalOptions:o,startTime:fe||N(),duration:o.duration,tweens:[],createTween:function(e,o){var i=nt.Tween(t,l.opts,e,o,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(i),i},stop:function(e){var o=0,i=e?l.tweens.length:0;if(n)return this;for(n=!0;i>o;o++)l.tweens[o].run(1);return e?a.resolveWith(t,[l,e]):a.rejectWith(t,[l,e]),this}}),h=l.props;for(O(h,l.opts.specialEasing);s>r;r++)if(i=me[r].call(l,t,h,l.opts))return i;return nt.map(h,D,l),nt.isFunction(l.opts.start)&&l.opts.start.call(t,l),nt.fx.timer(nt.extend(p,{elem:t,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function U(t){return function(e,o){"string"!=typeof e&&(o=e,e="*");var i,n=0,r=e.toLowerCase().match(bt)||[];if(nt.isFunction(o))for(;i=r[n++];)"+"===i.charAt(0)?(i=i.slice(1)||"*",(t[i]=t[i]||[]).unshift(o)):(t[i]=t[i]||[]).push(o)}}function G(t,e,o,i){function n(a){var p;return r[a]=!0,nt.each(t[a]||[],function(t,a){var l=a(e,o,i);return"string"!=typeof l||s||r[l]?s?!(p=l):void 0:(e.dataTypes.unshift(l),n(l),!1)}),p}var r={},s=t===He;return n(e.dataTypes[0])||!r["*"]&&n("*")}function q(t,e){var o,i,n=nt.ajaxSettings.flatOptions||{};for(i in e)void 0!==e[i]&&((n[i]?t:o||(o={}))[i]=e[i]);return o&&nt.extend(!0,t,o),t}function $(t,e,o){for(var i,n,r,s,a=t.contents,p=t.dataTypes;"*"===p[0];)p.shift(),void 0===n&&(n=t.mimeType||e.getResponseHeader("Content-Type"));if(n)for(s in a)if(a[s]&&a[s].test(n)){p.unshift(s);break}if(p[0]in o)r=p[0];else{for(s in o){if(!p[0]||t.converters[s+" "+p[0]]){r=s;break}i||(i=s)}r=r||i}return r?(r!==p[0]&&p.unshift(r),o[r]):void 0}function H(t,e,o,i){var n,r,s,a,p,l={},h=t.dataTypes.slice();if(h[1])for(s in t.converters)l[s.toLowerCase()]=t.converters[s];for(r=h.shift();r;)if(t.responseFields[r]&&(o[t.responseFields[r]]=e),!p&&i&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),p=r,r=h.shift())if("*"===r)r=p;else if("*"!==p&&p!==r){if(s=l[p+" "+r]||l["* "+r],!s)for(n in l)if(a=n.split(" "),a[1]===r&&(s=l[p+" "+a[0]]||l["* "+a[0]])){s===!0?s=l[n]:l[n]!==!0&&(r=a[0],h.unshift(a[1]));break}if(s!==!0)if(s&&t["throws"])e=s(e);else try{e=s(e)}catch(u){return{state:"parsererror",error:s?u:"No conversion from "+p+" to "+r}}}return{state:"success",data:e}}function X(t,e,o,i){var n;if(nt.isArray(e))nt.each(e,function(e,n){o||ze.test(t)?i(t,n):X(t+"["+("object"==typeof n?e:"")+"]",n,o,i)});else if(o||"object"!==nt.type(e))i(t,e);else for(n in e)X(t+"["+n+"]",e[n],o,i)}function W(){try{return new t.XMLHttpRequest}catch(e){}}function K(){try{return new t.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}function z(t){return nt.isWindow(t)?t:9===t.nodeType&&(t.defaultView||t.parentWindow)}var V=[],Y=V.slice,Z=V.concat,_=V.push,J=V.indexOf,Q={},tt=Q.toString,et=Q.hasOwnProperty,ot={},it="1.11.2",nt=function(t,e){return new nt.fn.init(t,e)},rt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,st=/^-ms-/,at=/-([\da-z])/gi,pt=function(t,e){return e.toUpperCase()};nt.fn=nt.prototype={jquery:it,constructor:nt,selector:"",length:0,toArray:function(){return Y.call(this)},get:function(t){return null!=t?0>t?this[t+this.length]:this[t]:Y.call(this)},pushStack:function(t){var e=nt.merge(this.constructor(),t);return e.prevObject=this,e.context=this.context,e},each:function(t,e){return nt.each(this,t,e)},map:function(t){return this.pushStack(nt.map(this,function(e,o){return t.call(e,o,e)}))},slice:function(){return this.pushStack(Y.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,o=+t+(0>t?e:0);return this.pushStack(o>=0&&e>o?[this[o]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:_,sort:V.sort,splice:V.splice},nt.extend=nt.fn.extend=function(){var t,e,o,i,n,r,s=arguments[0]||{},a=1,p=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[a]||{},a++),"object"==typeof s||nt.isFunction(s)||(s={}),a===p&&(s=this,a--);p>a;a++)if(null!=(n=arguments[a]))for(i in n)t=s[i],o=n[i],s!==o&&(l&&o&&(nt.isPlainObject(o)||(e=nt.isArray(o)))?(e?(e=!1,r=t&&nt.isArray(t)?t:[]):r=t&&nt.isPlainObject(t)?t:{},s[i]=nt.extend(l,r,o)):void 0!==o&&(s[i]=o));return s},nt.extend({expando:"jQuery"+(it+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return"function"===nt.type(t)},isArray:Array.isArray||function(t){return"array"===nt.type(t)},isWindow:function(t){return null!=t&&t==t.window},isNumeric:function(t){return!nt.isArray(t)&&t-parseFloat(t)+1>=0},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},isPlainObject:function(t){var e;if(!t||"object"!==nt.type(t)||t.nodeType||nt.isWindow(t))return!1;try{if(t.constructor&&!et.call(t,"constructor")&&!et.call(t.constructor.prototype,"isPrototypeOf"))return!1}catch(o){return!1}if(ot.ownLast)for(e in t)return et.call(t,e);for(e in t);return void 0===e||et.call(t,e)},type:function(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?Q[tt.call(t)]||"object":typeof t},globalEval:function(e){e&&nt.trim(e)&&(t.execScript||function(e){t.eval.call(t,e)})(e)},camelCase:function(t){return t.replace(st,"ms-").replace(at,pt)},nodeName:function(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()},each:function(t,e,i){var n,r=0,s=t.length,a=o(t);if(i){if(a)for(;s>r&&(n=e.apply(t[r],i),n!==!1);r++);else for(r in t)if(n=e.apply(t[r],i),n===!1)break}else if(a)for(;s>r&&(n=e.call(t[r],r,t[r]),n!==!1);r++);else for(r in t)if(n=e.call(t[r],r,t[r]),n===!1)break;return t},trim:function(t){return null==t?"":(t+"").replace(rt,"")},makeArray:function(t,e){var i=e||[];return null!=t&&(o(Object(t))?nt.merge(i,"string"==typeof t?[t]:t):_.call(i,t)),i},inArray:function(t,e,o){var i;if(e){if(J)return J.call(e,t,o);for(i=e.length,o=o?0>o?Math.max(0,i+o):o:0;i>o;o++)if(o in e&&e[o]===t)return o}return-1},merge:function(t,e){for(var o=+e.length,i=0,n=t.length;o>i;)t[n++]=e[i++];if(o!==o)for(;void 0!==e[i];)t[n++]=e[i++];return t.length=n,t},grep:function(t,e,o){for(var i,n=[],r=0,s=t.length,a=!o;s>r;r++)i=!e(t[r],r),i!==a&&n.push(t[r]);return n},map:function(t,e,i){var n,r=0,s=t.length,a=o(t),p=[];if(a)for(;s>r;r++)n=e(t[r],r,i),null!=n&&p.push(n);else for(r in t)n=e(t[r],r,i),null!=n&&p.push(n);return Z.apply([],p)},guid:1,proxy:function(t,e){var o,i,n;return"string"==typeof e&&(n=t[e],e=t,t=n),nt.isFunction(t)?(o=Y.call(arguments,2),i=function(){return t.apply(e||this,o.concat(Y.call(arguments)))},i.guid=t.guid=t.guid||nt.guid++,i):void 0},now:function(){return+new Date},support:ot}),nt.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(t,e){Q["[object "+e+"]"]=e.toLowerCase()});var lt=function(t){function e(t,e,o,i){var n,r,s,a,p,l,u,f,y,d;if((e?e.ownerDocument||e:G)!==L&&j(e),e=e||L,o=o||[],a=e.nodeType,"string"!=typeof t||!t||1!==a&&9!==a&&11!==a)return o;if(!i&&I){if(11!==a&&(n=mt.exec(t)))if(s=n[1]){if(9===a){if(r=e.getElementById(s),!r||!r.parentNode)return o;if(r.id===s)return o.push(r),o}else if(e.ownerDocument&&(r=e.ownerDocument.getElementById(s))&&B(e,r)&&r.id===s)return o.push(r),o}else{if(n[2])return J.apply(o,e.getElementsByTagName(t)),o;if((s=n[3])&&x.getElementsByClassName)return J.apply(o,e.getElementsByClassName(s)),o}if(x.qsa&&(!D||!D.test(t))){if(f=u=U,y=e,d=1!==a&&t,1===a&&"object"!==e.nodeName.toLowerCase()){for(l=M(t),(u=e.getAttribute("id"))?f=u.replace(wt,"\\$&"):e.setAttribute("id",f),f="[id='"+f+"'] ",p=l.length;p--;)l[p]=f+c(l[p]);y=bt.test(t)&&h(e.parentNode)||e,d=l.join(",")}if(d)try{return J.apply(o,y.querySelectorAll(d)),o}catch(g){}finally{u||e.removeAttribute("id")}}}return E(t.replace(pt,"$1"),e,o,i)}function o(){function t(o,i){return e.push(o+" ")>S.cacheLength&&delete t[e.shift()],t[o+" "]=i}var e=[];return t}function i(t){return t[U]=!0,t}function n(t){var e=L.createElement("div");try{return!!t(e)}catch(o){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function r(t,e){for(var o=t.split("|"),i=t.length;i--;)S.attrHandle[o[i]]=e}function s(t,e){var o=e&&t,i=o&&1===t.nodeType&&1===e.nodeType&&(~e.sourceIndex||z)-(~t.sourceIndex||z);if(i)return i;if(o)for(;o=o.nextSibling;)if(o===e)return-1;return t?1:-1}function a(t){return function(e){var o=e.nodeName.toLowerCase();return"input"===o&&e.type===t}}function p(t){return function(e){var o=e.nodeName.toLowerCase();return("input"===o||"button"===o)&&e.type===t}}function l(t){return i(function(e){return e=+e,i(function(o,i){for(var n,r=t([],o.length,e),s=r.length;s--;)o[n=r[s]]&&(o[n]=!(i[n]=o[n]))})})}function h(t){return t&&"undefined"!=typeof t.getElementsByTagName&&t}function u(){}function c(t){for(var e=0,o=t.length,i="";o>e;e++)i+=t[e].value;return i}function f(t,e,o){var i=e.dir,n=o&&"parentNode"===i,r=$++;return e.first?function(e,o,r){for(;e=e[i];)if(1===e.nodeType||n)return t(e,o,r)}:function(e,o,s){var a,p,l=[q,r];if(s){for(;e=e[i];)if((1===e.nodeType||n)&&t(e,o,s))return!0}else for(;e=e[i];)if(1===e.nodeType||n){if(p=e[U]||(e[U]={}),(a=p[i])&&a[0]===q&&a[1]===r)return l[2]=a[2];if(p[i]=l,l[2]=t(e,o,s))return!0}}}function y(t){return t.length>1?function(e,o,i){for(var n=t.length;n--;)if(!t[n](e,o,i))return!1;return!0}:t[0]}function d(t,o,i){for(var n=0,r=o.length;r>n;n++)e(t,o[n],i);return i}function g(t,e,o,i,n){for(var r,s=[],a=0,p=t.length,l=null!=e;p>a;a++)(r=t[a])&&(!o||o(r,i,n))&&(s.push(r),l&&e.push(a));return s}function v(t,e,o,n,r,s){return n&&!n[U]&&(n=v(n)),r&&!r[U]&&(r=v(r,s)),i(function(i,s,a,p){var l,h,u,c=[],f=[],y=s.length,v=i||d(e||"*",a.nodeType?[a]:a,[]),m=!t||!i&&e?v:g(v,c,t,a,p),b=o?r||(i?t:y||n)?[]:s:m;if(o&&o(m,b,a,p),n)for(l=g(b,f),n(l,[],a,p),h=l.length;h--;)(u=l[h])&&(b[f[h]]=!(m[f[h]]=u));if(i){if(r||t){if(r){for(l=[],h=b.length;h--;)(u=b[h])&&l.push(m[h]=u);r(null,b=[],l,p)}for(h=b.length;h--;)(u=b[h])&&(l=r?tt(i,u):c[h])>-1&&(i[l]=!(s[l]=u))}}else b=g(b===s?b.splice(y,b.length):b),r?r(null,s,b,p):J.apply(s,b)})}function m(t){for(var e,o,i,n=t.length,r=S.relative[t[0].type],s=r||S.relative[" "],a=r?1:0,p=f(function(t){return t===e},s,!0),l=f(function(t){return tt(e,t)>-1},s,!0),h=[function(t,o,i){var n=!r&&(i||o!==k)||((e=o).nodeType?p(t,o,i):l(t,o,i));return e=null,n}];n>a;a++)if(o=S.relative[t[a].type])h=[f(y(h),o)];else{if(o=S.filter[t[a].type].apply(null,t[a].matches),o[U]){for(i=++a;n>i&&!S.relative[t[i].type];i++);return v(a>1&&y(h),a>1&&c(t.slice(0,a-1).concat({value:" "===t[a-2].type?"*":""})).replace(pt,"$1"),o,i>a&&m(t.slice(a,i)),n>i&&m(t=t.slice(i)),n>i&&c(t))}h.push(o)}return y(h)}function b(t,o){var n=o.length>0,r=t.length>0,s=function(i,s,a,p,l){var h,u,c,f=0,y="0",d=i&&[],v=[],m=k,b=i||r&&S.find.TAG("*",l),w=q+=null==m?1:Math.random()||.1,x=b.length;for(l&&(k=s!==L&&s);y!==x&&null!=(h=b[y]);y++){if(r&&h){for(u=0;c=t[u++];)if(c(h,s,a)){p.push(h);break}l&&(q=w)}n&&((h=!c&&h)&&f--,i&&d.push(h))}if(f+=y,n&&y!==f){for(u=0;c=o[u++];)c(d,v,s,a);if(i){if(f>0)for(;y--;)d[y]||v[y]||(v[y]=Z.call(p));v=g(v)}J.apply(p,v),l&&!i&&v.length>0&&f+o.length>1&&e.uniqueSort(p)}return l&&(q=w,k=m),d};return n?i(s):s}var w,x,S,T,C,M,P,E,k,A,R,j,L,N,I,D,F,O,B,U="sizzle"+1*new Date,G=t.document,q=0,$=0,H=o(),X=o(),W=o(),K=function(t,e){return t===e&&(R=!0),0},z=1<<31,V={}.hasOwnProperty,Y=[],Z=Y.pop,_=Y.push,J=Y.push,Q=Y.slice,tt=function(t,e){for(var o=0,i=t.length;i>o;o++)if(t[o]===e)return o;return-1},et="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ot="[\\x20\\t\\r\\n\\f]",it="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",nt=it.replace("w","w#"),rt="\\["+ot+"*("+it+")(?:"+ot+"*([*^$|!~]?=)"+ot+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+nt+"))|)"+ot+"*\\]",st=":("+it+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+rt+")*)|.*)\\)|)",at=new RegExp(ot+"+","g"),pt=new RegExp("^"+ot+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ot+"+$","g"),lt=new RegExp("^"+ot+"*,"+ot+"*"),ht=new RegExp("^"+ot+"*([>+~]|"+ot+")"+ot+"*"),ut=new RegExp("="+ot+"*([^\\]'\"]*?)"+ot+"*\\]","g"),ct=new RegExp(st),ft=new RegExp("^"+nt+"$"),yt={ID:new RegExp("^#("+it+")"),CLASS:new RegExp("^\\.("+it+")"),TAG:new RegExp("^("+it.replace("w","w*")+")"),ATTR:new RegExp("^"+rt),PSEUDO:new RegExp("^"+st),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ot+"*(even|odd|(([+-]|)(\\d*)n|)"+ot+"*(?:([+-]|)"+ot+"*(\\d+)|))"+ot+"*\\)|)","i"),bool:new RegExp("^(?:"+et+")$","i"),needsContext:new RegExp("^"+ot+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ot+"*((?:-\\d)?\\d*)"+ot+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,gt=/^h\d$/i,vt=/^[^{]+\{\s*\[native \w/,mt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,bt=/[+~]/,wt=/'|\\/g,xt=new RegExp("\\\\([\\da-f]{1,6}"+ot+"?|("+ot+")|.)","ig"),St=function(t,e,o){var i="0x"+e-65536;return i!==i||o?e:0>i?String.fromCharCode(i+65536):String.fromCharCode(i>>10|55296,1023&i|56320)},Tt=function(){j()};try{J.apply(Y=Q.call(G.childNodes),G.childNodes),Y[G.childNodes.length].nodeType}catch(Ct){J={apply:Y.length?function(t,e){_.apply(t,Q.call(e))}:function(t,e){for(var o=t.length,i=0;t[o++]=e[i++];);t.length=o-1}}}x=e.support={},C=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},j=e.setDocument=function(t){var e,o,i=t?t.ownerDocument||t:G;return i!==L&&9===i.nodeType&&i.documentElement?(L=i,N=i.documentElement,o=i.defaultView,o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",Tt,!1):o.attachEvent&&o.attachEvent("onunload",Tt)),I=!C(i),x.attributes=n(function(t){return t.className="i",!t.getAttribute("className")}),x.getElementsByTagName=n(function(t){return t.appendChild(i.createComment("")),!t.getElementsByTagName("*").length}),x.getElementsByClassName=vt.test(i.getElementsByClassName),x.getById=n(function(t){return N.appendChild(t).id=U,!i.getElementsByName||!i.getElementsByName(U).length}),x.getById?(S.find.ID=function(t,e){if("undefined"!=typeof e.getElementById&&I){var o=e.getElementById(t);return o&&o.parentNode?[o]:[]}},S.filter.ID=function(t){var e=t.replace(xt,St);return function(t){return t.getAttribute("id")===e}}):(delete S.find.ID,S.filter.ID=function(t){var e=t.replace(xt,St);return function(t){var o="undefined"!=typeof t.getAttributeNode&&t.getAttributeNode("id");return o&&o.value===e}}),S.find.TAG=x.getElementsByTagName?function(t,e){return"undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t):x.qsa?e.querySelectorAll(t):void 0}:function(t,e){var o,i=[],n=0,r=e.getElementsByTagName(t);if("*"===t){for(;o=r[n++];)1===o.nodeType&&i.push(o);return i}return r},S.find.CLASS=x.getElementsByClassName&&function(t,e){return I?e.getElementsByClassName(t):void 0},F=[],D=[],(x.qsa=vt.test(i.querySelectorAll))&&(n(function(t){N.appendChild(t).innerHTML="<a id='"+U+"'></a><select id='"+U+"-\f]' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&D.push("[*^$]="+ot+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||D.push("\\["+ot+"*(?:value|"+et+")"),t.querySelectorAll("[id~="+U+"-]").length||D.push("~="),t.querySelectorAll(":checked").length||D.push(":checked"),t.querySelectorAll("a#"+U+"+*").length||D.push(".#.+[+~]")}),n(function(t){var e=i.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&D.push("name"+ot+"*[*^$|!~]?="),t.querySelectorAll(":enabled").length||D.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),D.push(",.*:")})),(x.matchesSelector=vt.test(O=N.matches||N.webkitMatchesSelector||N.mozMatchesSelector||N.oMatchesSelector||N.msMatchesSelector))&&n(function(t){x.disconnectedMatch=O.call(t,"div"),O.call(t,"[s!='']:x"),F.push("!=",st)}),D=D.length&&new RegExp(D.join("|")),F=F.length&&new RegExp(F.join("|")),e=vt.test(N.compareDocumentPosition),B=e||vt.test(N.contains)?function(t,e){var o=9===t.nodeType?t.documentElement:t,i=e&&e.parentNode;return t===i||!(!i||1!==i.nodeType||!(o.contains?o.contains(i):t.compareDocumentPosition&&16&t.compareDocumentPosition(i)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},K=e?function(t,e){if(t===e)return R=!0,0;var o=!t.compareDocumentPosition-!e.compareDocumentPosition;return o?o:(o=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&o||!x.sortDetached&&e.compareDocumentPosition(t)===o?t===i||t.ownerDocument===G&&B(G,t)?-1:e===i||e.ownerDocument===G&&B(G,e)?1:A?tt(A,t)-tt(A,e):0:4&o?-1:1)}:function(t,e){if(t===e)return R=!0,0;var o,n=0,r=t.parentNode,a=e.parentNode,p=[t],l=[e];if(!r||!a)return t===i?-1:e===i?1:r?-1:a?1:A?tt(A,t)-tt(A,e):0;if(r===a)return s(t,e);for(o=t;o=o.parentNode;)p.unshift(o);for(o=e;o=o.parentNode;)l.unshift(o);for(;p[n]===l[n];)n++;return n?s(p[n],l[n]):p[n]===G?-1:l[n]===G?1:0},i):L},e.matches=function(t,o){return e(t,null,null,o)},e.matchesSelector=function(t,o){if((t.ownerDocument||t)!==L&&j(t),o=o.replace(ut,"='$1']"),!(!x.matchesSelector||!I||F&&F.test(o)||D&&D.test(o)))try{var i=O.call(t,o);if(i||x.disconnectedMatch||t.document&&11!==t.document.nodeType)return i}catch(n){}return e(o,L,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==L&&j(t),B(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==L&&j(t);var o=S.attrHandle[e.toLowerCase()],i=o&&V.call(S.attrHandle,e.toLowerCase())?o(t,e,!I):void 0;return void 0!==i?i:x.attributes||!I?t.getAttribute(e):(i=t.getAttributeNode(e))&&i.specified?i.value:null},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,o=[],i=0,n=0;if(R=!x.detectDuplicates,A=!x.sortStable&&t.slice(0),t.sort(K),R){for(;e=t[n++];)e===t[n]&&(i=o.push(n));for(;i--;)t.splice(o[i],1)}return A=null,t},T=e.getText=function(t){var e,o="",i=0,n=t.nodeType;if(n){if(1===n||9===n||11===n){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)o+=T(t)}else if(3===n||4===n)return t.nodeValue}else for(;e=t[i++];)o+=T(e);return o},S=e.selectors={cacheLength:50,createPseudo:i,match:yt,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(xt,St),t[3]=(t[3]||t[4]||t[5]||"").replace(xt,St),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,o=!t[6]&&t[2];return yt.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":o&&ct.test(o)&&(e=M(o,!0))&&(e=o.indexOf(")",o.length-e)-o.length)&&(t[0]=t[0].slice(0,e),t[2]=o.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(xt,St).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=H[t+" "];return e||(e=new RegExp("(^|"+ot+")"+t+"("+ot+"|$)"))&&H(t,function(t){return e.test("string"==typeof t.className&&t.className||"undefined"!=typeof t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,o,i){return function(n){var r=e.attr(n,t);return null==r?"!="===o:!o||(r+="","="===o?r===i:"!="===o?r!==i:"^="===o?i&&0===r.indexOf(i):"*="===o?i&&r.indexOf(i)>-1:"$="===o?i&&r.slice(-i.length)===i:"~="===o?(" "+r.replace(at," ")+" ").indexOf(i)>-1:"|="===o&&(r===i||r.slice(0,i.length+1)===i+"-"));
+}},CHILD:function(t,e,o,i,n){var r="nth"!==t.slice(0,3),s="last"!==t.slice(-4),a="of-type"===e;return 1===i&&0===n?function(t){return!!t.parentNode}:function(e,o,p){var l,h,u,c,f,y,d=r!==s?"nextSibling":"previousSibling",g=e.parentNode,v=a&&e.nodeName.toLowerCase(),m=!p&&!a;if(g){if(r){for(;d;){for(u=e;u=u[d];)if(a?u.nodeName.toLowerCase()===v:1===u.nodeType)return!1;y=d="only"===t&&!y&&"nextSibling"}return!0}if(y=[s?g.firstChild:g.lastChild],s&&m){for(h=g[U]||(g[U]={}),l=h[t]||[],f=l[0]===q&&l[1],c=l[0]===q&&l[2],u=f&&g.childNodes[f];u=++f&&u&&u[d]||(c=f=0)||y.pop();)if(1===u.nodeType&&++c&&u===e){h[t]=[q,f,c];break}}else if(m&&(l=(e[U]||(e[U]={}))[t])&&l[0]===q)c=l[1];else for(;(u=++f&&u&&u[d]||(c=f=0)||y.pop())&&((a?u.nodeName.toLowerCase()!==v:1!==u.nodeType)||!++c||(m&&((u[U]||(u[U]={}))[t]=[q,c]),u!==e)););return c-=n,c===i||c%i===0&&c/i>=0}}},PSEUDO:function(t,o){var n,r=S.pseudos[t]||S.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return r[U]?r(o):r.length>1?(n=[t,t,"",o],S.setFilters.hasOwnProperty(t.toLowerCase())?i(function(t,e){for(var i,n=r(t,o),s=n.length;s--;)i=tt(t,n[s]),t[i]=!(e[i]=n[s])}):function(t){return r(t,0,n)}):r}},pseudos:{not:i(function(t){var e=[],o=[],n=P(t.replace(pt,"$1"));return n[U]?i(function(t,e,o,i){for(var r,s=n(t,null,i,[]),a=t.length;a--;)(r=s[a])&&(t[a]=!(e[a]=r))}):function(t,i,r){return e[0]=t,n(e,null,r,o),e[0]=null,!o.pop()}}),has:i(function(t){return function(o){return e(t,o).length>0}}),contains:i(function(t){return t=t.replace(xt,St),function(e){return(e.textContent||e.innerText||T(e)).indexOf(t)>-1}}),lang:i(function(t){return ft.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(xt,St).toLowerCase(),function(e){var o;do if(o=I?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return o=o.toLowerCase(),o===t||0===o.indexOf(t+"-");while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var o=t.location&&t.location.hash;return o&&o.slice(1)===e.id},root:function(t){return t===N},focus:function(t){return t===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:function(t){return t.disabled===!1},disabled:function(t){return t.disabled===!0},checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,t.selected===!0},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!S.pseudos.empty(t)},header:function(t){return gt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,o){return[0>o?o+e:o]}),even:l(function(t,e){for(var o=0;e>o;o+=2)t.push(o);return t}),odd:l(function(t,e){for(var o=1;e>o;o+=2)t.push(o);return t}),lt:l(function(t,e,o){for(var i=0>o?o+e:o;--i>=0;)t.push(i);return t}),gt:l(function(t,e,o){for(var i=0>o?o+e:o;++i<e;)t.push(i);return t})}},S.pseudos.nth=S.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})S.pseudos[w]=a(w);for(w in{submit:!0,reset:!0})S.pseudos[w]=p(w);return u.prototype=S.filters=S.pseudos,S.setFilters=new u,M=e.tokenize=function(t,o){var i,n,r,s,a,p,l,h=X[t+" "];if(h)return o?0:h.slice(0);for(a=t,p=[],l=S.preFilter;a;){(!i||(n=lt.exec(a)))&&(n&&(a=a.slice(n[0].length)||a),p.push(r=[])),i=!1,(n=ht.exec(a))&&(i=n.shift(),r.push({value:i,type:n[0].replace(pt," ")}),a=a.slice(i.length));for(s in S.filter)!(n=yt[s].exec(a))||l[s]&&!(n=l[s](n))||(i=n.shift(),r.push({value:i,type:s,matches:n}),a=a.slice(i.length));if(!i)break}return o?a.length:a?e.error(t):X(t,p).slice(0)},P=e.compile=function(t,e){var o,i=[],n=[],r=W[t+" "];if(!r){for(e||(e=M(t)),o=e.length;o--;)r=m(e[o]),r[U]?i.push(r):n.push(r);r=W(t,b(n,i)),r.selector=t}return r},E=e.select=function(t,e,o,i){var n,r,s,a,p,l="function"==typeof t&&t,u=!i&&M(t=l.selector||t);if(o=o||[],1===u.length){if(r=u[0]=u[0].slice(0),r.length>2&&"ID"===(s=r[0]).type&&x.getById&&9===e.nodeType&&I&&S.relative[r[1].type]){if(e=(S.find.ID(s.matches[0].replace(xt,St),e)||[])[0],!e)return o;l&&(e=e.parentNode),t=t.slice(r.shift().value.length)}for(n=yt.needsContext.test(t)?0:r.length;n--&&(s=r[n],!S.relative[a=s.type]);)if((p=S.find[a])&&(i=p(s.matches[0].replace(xt,St),bt.test(r[0].type)&&h(e.parentNode)||e))){if(r.splice(n,1),t=i.length&&c(r),!t)return J.apply(o,i),o;break}}return(l||P(t,u))(i,e,!I,o,bt.test(t)&&h(e.parentNode)||e),o},x.sortStable=U.split("").sort(K).join("")===U,x.detectDuplicates=!!R,j(),x.sortDetached=n(function(t){return 1&t.compareDocumentPosition(L.createElement("div"))}),n(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||r("type|href|height|width",function(t,e,o){return o?void 0:t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),x.attributes&&n(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||r("value",function(t,e,o){return o||"input"!==t.nodeName.toLowerCase()?void 0:t.defaultValue}),n(function(t){return null==t.getAttribute("disabled")})||r(et,function(t,e,o){var i;return o?void 0:t[e]===!0?e.toLowerCase():(i=t.getAttributeNode(e))&&i.specified?i.value:null}),e}(t);nt.find=lt,nt.expr=lt.selectors,nt.expr[":"]=nt.expr.pseudos,nt.unique=lt.uniqueSort,nt.text=lt.getText,nt.isXMLDoc=lt.isXML,nt.contains=lt.contains;var ht=nt.expr.match.needsContext,ut=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ct=/^.[^:#\[\.,]*$/;nt.filter=function(t,e,o){var i=e[0];return o&&(t=":not("+t+")"),1===e.length&&1===i.nodeType?nt.find.matchesSelector(i,t)?[i]:[]:nt.find.matches(t,nt.grep(e,function(t){return 1===t.nodeType}))},nt.fn.extend({find:function(t){var e,o=[],i=this,n=i.length;if("string"!=typeof t)return this.pushStack(nt(t).filter(function(){for(e=0;n>e;e++)if(nt.contains(i[e],this))return!0}));for(e=0;n>e;e++)nt.find(t,i[e],o);return o=this.pushStack(n>1?nt.unique(o):o),o.selector=this.selector?this.selector+" "+t:t,o},filter:function(t){return this.pushStack(i(this,t||[],!1))},not:function(t){return this.pushStack(i(this,t||[],!0))},is:function(t){return!!i(this,"string"==typeof t&&ht.test(t)?nt(t):t||[],!1).length}});var ft,yt=t.document,dt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,gt=nt.fn.init=function(t,e){var o,i;if(!t)return this;if("string"==typeof t){if(o="<"===t.charAt(0)&&">"===t.charAt(t.length-1)&&t.length>=3?[null,t,null]:dt.exec(t),!o||!o[1]&&e)return!e||e.jquery?(e||ft).find(t):this.constructor(e).find(t);if(o[1]){if(e=e instanceof nt?e[0]:e,nt.merge(this,nt.parseHTML(o[1],e&&e.nodeType?e.ownerDocument||e:yt,!0)),ut.test(o[1])&&nt.isPlainObject(e))for(o in e)nt.isFunction(this[o])?this[o](e[o]):this.attr(o,e[o]);return this}if(i=yt.getElementById(o[2]),i&&i.parentNode){if(i.id!==o[2])return ft.find(t);this.length=1,this[0]=i}return this.context=yt,this.selector=t,this}return t.nodeType?(this.context=this[0]=t,this.length=1,this):nt.isFunction(t)?"undefined"!=typeof ft.ready?ft.ready(t):t(nt):(void 0!==t.selector&&(this.selector=t.selector,this.context=t.context),nt.makeArray(t,this))};gt.prototype=nt.fn,ft=nt(yt);var vt=/^(?:parents|prev(?:Until|All))/,mt={children:!0,contents:!0,next:!0,prev:!0};nt.extend({dir:function(t,e,o){for(var i=[],n=t[e];n&&9!==n.nodeType&&(void 0===o||1!==n.nodeType||!nt(n).is(o));)1===n.nodeType&&i.push(n),n=n[e];return i},sibling:function(t,e){for(var o=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&o.push(t);return o}}),nt.fn.extend({has:function(t){var e,o=nt(t,this),i=o.length;return this.filter(function(){for(e=0;i>e;e++)if(nt.contains(this,o[e]))return!0})},closest:function(t,e){for(var o,i=0,n=this.length,r=[],s=ht.test(t)||"string"!=typeof t?nt(t,e||this.context):0;n>i;i++)for(o=this[i];o&&o!==e;o=o.parentNode)if(o.nodeType<11&&(s?s.index(o)>-1:1===o.nodeType&&nt.find.matchesSelector(o,t))){r.push(o);break}return this.pushStack(r.length>1?nt.unique(r):r)},index:function(t){return t?"string"==typeof t?nt.inArray(this[0],nt(t)):nt.inArray(t.jquery?t[0]:t,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(nt.unique(nt.merge(this.get(),nt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),nt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return nt.dir(t,"parentNode")},parentsUntil:function(t,e,o){return nt.dir(t,"parentNode",o)},next:function(t){return n(t,"nextSibling")},prev:function(t){return n(t,"previousSibling")},nextAll:function(t){return nt.dir(t,"nextSibling")},prevAll:function(t){return nt.dir(t,"previousSibling")},nextUntil:function(t,e,o){return nt.dir(t,"nextSibling",o)},prevUntil:function(t,e,o){return nt.dir(t,"previousSibling",o)},siblings:function(t){return nt.sibling((t.parentNode||{}).firstChild,t)},children:function(t){return nt.sibling(t.firstChild)},contents:function(t){return nt.nodeName(t,"iframe")?t.contentDocument||t.contentWindow.document:nt.merge([],t.childNodes)}},function(t,e){nt.fn[t]=function(o,i){var n=nt.map(this,e,o);return"Until"!==t.slice(-5)&&(i=o),i&&"string"==typeof i&&(n=nt.filter(i,n)),this.length>1&&(mt[t]||(n=nt.unique(n)),vt.test(t)&&(n=n.reverse())),this.pushStack(n)}});var bt=/\S+/g,wt={};nt.Callbacks=function(t){t="string"==typeof t?wt[t]||r(t):nt.extend({},t);var e,o,i,n,s,a,p=[],l=!t.once&&[],h=function(r){for(o=t.memory&&r,i=!0,s=a||0,a=0,n=p.length,e=!0;p&&n>s;s++)if(p[s].apply(r[0],r[1])===!1&&t.stopOnFalse){o=!1;break}e=!1,p&&(l?l.length&&h(l.shift()):o?p=[]:u.disable())},u={add:function(){if(p){var i=p.length;!function r(e){nt.each(e,function(e,o){var i=nt.type(o);"function"===i?t.unique&&u.has(o)||p.push(o):o&&o.length&&"string"!==i&&r(o)})}(arguments),e?n=p.length:o&&(a=i,h(o))}return this},remove:function(){return p&&nt.each(arguments,function(t,o){for(var i;(i=nt.inArray(o,p,i))>-1;)p.splice(i,1),e&&(n>=i&&n--,s>=i&&s--)}),this},has:function(t){return t?nt.inArray(t,p)>-1:!(!p||!p.length)},empty:function(){return p=[],n=0,this},disable:function(){return p=l=o=void 0,this},disabled:function(){return!p},lock:function(){return l=void 0,o||u.disable(),this},locked:function(){return!l},fireWith:function(t,o){return!p||i&&!l||(o=o||[],o=[t,o.slice?o.slice():o],e?l.push(o):h(o)),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!i}};return u},nt.extend({Deferred:function(t){var e=[["resolve","done",nt.Callbacks("once memory"),"resolved"],["reject","fail",nt.Callbacks("once memory"),"rejected"],["notify","progress",nt.Callbacks("memory")]],o="pending",i={state:function(){return o},always:function(){return n.done(arguments).fail(arguments),this},then:function(){var t=arguments;return nt.Deferred(function(o){nt.each(e,function(e,r){var s=nt.isFunction(t[e])&&t[e];n[r[1]](function(){var t=s&&s.apply(this,arguments);t&&nt.isFunction(t.promise)?t.promise().done(o.resolve).fail(o.reject).progress(o.notify):o[r[0]+"With"](this===i?o.promise():this,s?[t]:arguments)})}),t=null}).promise()},promise:function(t){return null!=t?nt.extend(t,i):i}},n={};return i.pipe=i.then,nt.each(e,function(t,r){var s=r[2],a=r[3];i[r[1]]=s.add,a&&s.add(function(){o=a},e[1^t][2].disable,e[2][2].lock),n[r[0]]=function(){return n[r[0]+"With"](this===n?i:this,arguments),this},n[r[0]+"With"]=s.fireWith}),i.promise(n),t&&t.call(n,n),n},when:function(t){var e,o,i,n=0,r=Y.call(arguments),s=r.length,a=1!==s||t&&nt.isFunction(t.promise)?s:0,p=1===a?t:nt.Deferred(),l=function(t,o,i){return function(n){o[t]=this,i[t]=arguments.length>1?Y.call(arguments):n,i===e?p.notifyWith(o,i):--a||p.resolveWith(o,i)}};if(s>1)for(e=new Array(s),o=new Array(s),i=new Array(s);s>n;n++)r[n]&&nt.isFunction(r[n].promise)?r[n].promise().done(l(n,i,r)).fail(p.reject).progress(l(n,o,e)):--a;return a||p.resolveWith(i,r),p.promise()}});var xt;nt.fn.ready=function(t){return nt.ready.promise().done(t),this},nt.extend({isReady:!1,readyWait:1,holdReady:function(t){t?nt.readyWait++:nt.ready(!0)},ready:function(t){if(t===!0?!--nt.readyWait:!nt.isReady){if(!yt.body)return setTimeout(nt.ready);nt.isReady=!0,t!==!0&&--nt.readyWait>0||(xt.resolveWith(yt,[nt]),nt.fn.triggerHandler&&(nt(yt).triggerHandler("ready"),nt(yt).off("ready")))}}}),nt.ready.promise=function(e){if(!xt)if(xt=nt.Deferred(),"complete"===yt.readyState)setTimeout(nt.ready);else if(yt.addEventListener)yt.addEventListener("DOMContentLoaded",a,!1),t.addEventListener("load",a,!1);else{yt.attachEvent("onreadystatechange",a),t.attachEvent("onload",a);var o=!1;try{o=null==t.frameElement&&yt.documentElement}catch(i){}o&&o.doScroll&&!function n(){if(!nt.isReady){try{o.doScroll("left")}catch(t){return setTimeout(n,50)}s(),nt.ready()}}()}return xt.promise(e)};var St,Tt="undefined";for(St in nt(ot))break;ot.ownLast="0"!==St,ot.inlineBlockNeedsLayout=!1,nt(function(){var t,e,o,i;o=yt.getElementsByTagName("body")[0],o&&o.style&&(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",ot.inlineBlockNeedsLayout=t=3===e.offsetWidth,t&&(o.style.zoom=1)),o.removeChild(i))}),function(){var t=yt.createElement("div");if(null==ot.deleteExpando){ot.deleteExpando=!0;try{delete t.test}catch(e){ot.deleteExpando=!1}}t=null}(),nt.acceptData=function(t){var e=nt.noData[(t.nodeName+" ").toLowerCase()],o=+t.nodeType||1;return(1===o||9===o)&&(!e||e!==!0&&t.getAttribute("classid")===e)};var Ct=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Mt=/([A-Z])/g;nt.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(t){return t=t.nodeType?nt.cache[t[nt.expando]]:t[nt.expando],!!t&&!l(t)},data:function(t,e,o){return h(t,e,o)},removeData:function(t,e){return u(t,e)},_data:function(t,e,o){return h(t,e,o,!0)},_removeData:function(t,e){return u(t,e,!0)}}),nt.fn.extend({data:function(t,e){var o,i,n,r=this[0],s=r&&r.attributes;if(void 0===t){if(this.length&&(n=nt.data(r),1===r.nodeType&&!nt._data(r,"parsedAttrs"))){for(o=s.length;o--;)s[o]&&(i=s[o].name,0===i.indexOf("data-")&&(i=nt.camelCase(i.slice(5)),p(r,i,n[i])));nt._data(r,"parsedAttrs",!0)}return n}return"object"==typeof t?this.each(function(){nt.data(this,t)}):arguments.length>1?this.each(function(){nt.data(this,t,e)}):r?p(r,t,nt.data(r,t)):void 0},removeData:function(t){return this.each(function(){nt.removeData(this,t)})}}),nt.extend({queue:function(t,e,o){var i;return t?(e=(e||"fx")+"queue",i=nt._data(t,e),o&&(!i||nt.isArray(o)?i=nt._data(t,e,nt.makeArray(o)):i.push(o)),i||[]):void 0},dequeue:function(t,e){e=e||"fx";var o=nt.queue(t,e),i=o.length,n=o.shift(),r=nt._queueHooks(t,e),s=function(){nt.dequeue(t,e)};"inprogress"===n&&(n=o.shift(),i--),n&&("fx"===e&&o.unshift("inprogress"),delete r.stop,n.call(t,s,r)),!i&&r&&r.empty.fire()},_queueHooks:function(t,e){var o=e+"queueHooks";return nt._data(t,o)||nt._data(t,o,{empty:nt.Callbacks("once memory").add(function(){nt._removeData(t,e+"queue"),nt._removeData(t,o)})})}}),nt.fn.extend({queue:function(t,e){var o=2;return"string"!=typeof t&&(e=t,t="fx",o--),arguments.length<o?nt.queue(this[0],t):void 0===e?this:this.each(function(){var o=nt.queue(this,t,e);nt._queueHooks(this,t),"fx"===t&&"inprogress"!==o[0]&&nt.dequeue(this,t)})},dequeue:function(t){return this.each(function(){nt.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var o,i=1,n=nt.Deferred(),r=this,s=this.length,a=function(){--i||n.resolveWith(r,[r])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";s--;)o=nt._data(r[s],t+"queueHooks"),o&&o.empty&&(i++,o.empty.add(a));return a(),n.promise(e)}});var Pt=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Et=["Top","Right","Bottom","Left"],kt=function(t,e){return t=e||t,"none"===nt.css(t,"display")||!nt.contains(t.ownerDocument,t)},At=nt.access=function(t,e,o,i,n,r,s){var a=0,p=t.length,l=null==o;if("object"===nt.type(o)){n=!0;for(a in o)nt.access(t,e,a,o[a],!0,r,s)}else if(void 0!==i&&(n=!0,nt.isFunction(i)||(s=!0),l&&(s?(e.call(t,i),e=null):(l=e,e=function(t,e,o){return l.call(nt(t),o)})),e))for(;p>a;a++)e(t[a],o,s?i:i.call(t[a],a,e(t[a],o)));return n?t:l?e.call(t):p?e(t[0],o):r},Rt=/^(?:checkbox|radio)$/i;!function(){var t=yt.createElement("input"),e=yt.createElement("div"),o=yt.createDocumentFragment();if(e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",ot.leadingWhitespace=3===e.firstChild.nodeType,ot.tbody=!e.getElementsByTagName("tbody").length,ot.htmlSerialize=!!e.getElementsByTagName("link").length,ot.html5Clone="<:nav></:nav>"!==yt.createElement("nav").cloneNode(!0).outerHTML,t.type="checkbox",t.checked=!0,o.appendChild(t),ot.appendChecked=t.checked,e.innerHTML="<textarea>x</textarea>",ot.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue,o.appendChild(e),e.innerHTML="<input type='radio' checked='checked' name='t'/>",ot.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,ot.noCloneEvent=!0,e.attachEvent&&(e.attachEvent("onclick",function(){ot.noCloneEvent=!1}),e.cloneNode(!0).click()),null==ot.deleteExpando){ot.deleteExpando=!0;try{delete e.test}catch(i){ot.deleteExpando=!1}}}(),function(){var e,o,i=yt.createElement("div");for(e in{submit:!0,change:!0,focusin:!0})o="on"+e,(ot[e+"Bubbles"]=o in t)||(i.setAttribute(o,"t"),ot[e+"Bubbles"]=i.attributes[o].expando===!1);i=null}();var jt=/^(?:input|select|textarea)$/i,Lt=/^key/,Nt=/^(?:mouse|pointer|contextmenu)|click/,It=/^(?:focusinfocus|focusoutblur)$/,Dt=/^([^.]*)(?:\.(.+)|)$/;nt.event={global:{},add:function(t,e,o,i,n){var r,s,a,p,l,h,u,c,f,y,d,g=nt._data(t);if(g){for(o.handler&&(p=o,o=p.handler,n=p.selector),o.guid||(o.guid=nt.guid++),(s=g.events)||(s=g.events={}),(h=g.handle)||(h=g.handle=function(t){return typeof nt===Tt||t&&nt.event.triggered===t.type?void 0:nt.event.dispatch.apply(h.elem,arguments)},h.elem=t),e=(e||"").match(bt)||[""],a=e.length;a--;)r=Dt.exec(e[a])||[],f=d=r[1],y=(r[2]||"").split(".").sort(),f&&(l=nt.event.special[f]||{},f=(n?l.delegateType:l.bindType)||f,l=nt.event.special[f]||{},u=nt.extend({type:f,origType:d,data:i,handler:o,guid:o.guid,selector:n,needsContext:n&&nt.expr.match.needsContext.test(n),namespace:y.join(".")},p),(c=s[f])||(c=s[f]=[],c.delegateCount=0,l.setup&&l.setup.call(t,i,y,h)!==!1||(t.addEventListener?t.addEventListener(f,h,!1):t.attachEvent&&t.attachEvent("on"+f,h))),l.add&&(l.add.call(t,u),u.handler.guid||(u.handler.guid=o.guid)),n?c.splice(c.delegateCount++,0,u):c.push(u),nt.event.global[f]=!0);t=null}},remove:function(t,e,o,i,n){var r,s,a,p,l,h,u,c,f,y,d,g=nt.hasData(t)&&nt._data(t);if(g&&(h=g.events)){for(e=(e||"").match(bt)||[""],l=e.length;l--;)if(a=Dt.exec(e[l])||[],f=d=a[1],y=(a[2]||"").split(".").sort(),f){for(u=nt.event.special[f]||{},f=(i?u.delegateType:u.bindType)||f,c=h[f]||[],a=a[2]&&new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"),p=r=c.length;r--;)s=c[r],!n&&d!==s.origType||o&&o.guid!==s.guid||a&&!a.test(s.namespace)||i&&i!==s.selector&&("**"!==i||!s.selector)||(c.splice(r,1),s.selector&&c.delegateCount--,u.remove&&u.remove.call(t,s));p&&!c.length&&(u.teardown&&u.teardown.call(t,y,g.handle)!==!1||nt.removeEvent(t,f,g.handle),delete h[f])}else for(f in h)nt.event.remove(t,f+e[l],o,i,!0);nt.isEmptyObject(h)&&(delete g.handle,nt._removeData(t,"events"))}},trigger:function(e,o,i,n){var r,s,a,p,l,h,u,c=[i||yt],f=et.call(e,"type")?e.type:e,y=et.call(e,"namespace")?e.namespace.split("."):[];if(a=h=i=i||yt,3!==i.nodeType&&8!==i.nodeType&&!It.test(f+nt.event.triggered)&&(f.indexOf(".")>=0&&(y=f.split("."),f=y.shift(),y.sort()),s=f.indexOf(":")<0&&"on"+f,e=e[nt.expando]?e:new nt.Event(f,"object"==typeof e&&e),e.isTrigger=n?2:3,e.namespace=y.join("."),e.namespace_re=e.namespace?new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),o=null==o?[e]:nt.makeArray(o,[e]),l=nt.event.special[f]||{},n||!l.trigger||l.trigger.apply(i,o)!==!1)){if(!n&&!l.noBubble&&!nt.isWindow(i)){for(p=l.delegateType||f,It.test(p+f)||(a=a.parentNode);a;a=a.parentNode)c.push(a),h=a;h===(i.ownerDocument||yt)&&c.push(h.defaultView||h.parentWindow||t)}for(u=0;(a=c[u++])&&!e.isPropagationStopped();)e.type=u>1?p:l.bindType||f,r=(nt._data(a,"events")||{})[e.type]&&nt._data(a,"handle"),r&&r.apply(a,o),r=s&&a[s],r&&r.apply&&nt.acceptData(a)&&(e.result=r.apply(a,o),e.result===!1&&e.preventDefault());if(e.type=f,!n&&!e.isDefaultPrevented()&&(!l._default||l._default.apply(c.pop(),o)===!1)&&nt.acceptData(i)&&s&&i[f]&&!nt.isWindow(i)){h=i[s],h&&(i[s]=null),nt.event.triggered=f;try{i[f]()}catch(d){}nt.event.triggered=void 0,h&&(i[s]=h)}return e.result}},dispatch:function(t){t=nt.event.fix(t);var e,o,i,n,r,s=[],a=Y.call(arguments),p=(nt._data(this,"events")||{})[t.type]||[],l=nt.event.special[t.type]||{};if(a[0]=t,t.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,t)!==!1){for(s=nt.event.handlers.call(this,t,p),e=0;(n=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=n.elem,r=0;(i=n.handlers[r++])&&!t.isImmediatePropagationStopped();)(!t.namespace_re||t.namespace_re.test(i.namespace))&&(t.handleObj=i,t.data=i.data,o=((nt.event.special[i.origType]||{}).handle||i.handler).apply(n.elem,a),void 0!==o&&(t.result=o)===!1&&(t.preventDefault(),t.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,t),t.result}},handlers:function(t,e){var o,i,n,r,s=[],a=e.delegateCount,p=t.target;if(a&&p.nodeType&&(!t.button||"click"!==t.type))for(;p!=this;p=p.parentNode||this)if(1===p.nodeType&&(p.disabled!==!0||"click"!==t.type)){for(n=[],r=0;a>r;r++)i=e[r],o=i.selector+" ",void 0===n[o]&&(n[o]=i.needsContext?nt(o,this).index(p)>=0:nt.find(o,this,null,[p]).length),n[o]&&n.push(i);n.length&&s.push({elem:p,handlers:n})}return a<e.length&&s.push({elem:this,handlers:e.slice(a)}),s},fix:function(t){if(t[nt.expando])return t;var e,o,i,n=t.type,r=t,s=this.fixHooks[n];for(s||(this.fixHooks[n]=s=Nt.test(n)?this.mouseHooks:Lt.test(n)?this.keyHooks:{}),i=s.props?this.props.concat(s.props):this.props,t=new nt.Event(r),e=i.length;e--;)o=i[e],t[o]=r[o];return t.target||(t.target=r.srcElement||yt),3===t.target.nodeType&&(t.target=t.target.parentNode),t.metaKey=!!t.metaKey,s.filter?s.filter(t,r):t},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(t,e){return null==t.which&&(t.which=null!=e.charCode?e.charCode:e.keyCode),t}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(t,e){var o,i,n,r=e.button,s=e.fromElement;return null==t.pageX&&null!=e.clientX&&(i=t.target.ownerDocument||yt,n=i.documentElement,o=i.body,t.pageX=e.clientX+(n&&n.scrollLeft||o&&o.scrollLeft||0)-(n&&n.clientLeft||o&&o.clientLeft||0),t.pageY=e.clientY+(n&&n.scrollTop||o&&o.scrollTop||0)-(n&&n.clientTop||o&&o.clientTop||0)),!t.relatedTarget&&s&&(t.relatedTarget=s===t.target?e.toElement:s),t.which||void 0===r||(t.which=1&r?1:2&r?3:4&r?2:0),t}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==y()&&this.focus)try{return this.focus(),!1}catch(t){}},delegateType:"focusin"},blur:{trigger:function(){return this===y()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return nt.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(t){return nt.nodeName(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}},simulate:function(t,e,o,i){var n=nt.extend(new nt.Event,o,{type:t,isSimulated:!0,originalEvent:{}});i?nt.event.trigger(n,null,e):nt.event.dispatch.call(e,n),n.isDefaultPrevented()&&o.preventDefault()}},nt.removeEvent=yt.removeEventListener?function(t,e,o){t.removeEventListener&&t.removeEventListener(e,o,!1)}:function(t,e,o){var i="on"+e;t.detachEvent&&(typeof t[i]===Tt&&(t[i]=null),t.detachEvent(i,o))},nt.Event=function(t,e){return this instanceof nt.Event?(t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&t.returnValue===!1?c:f):this.type=t,e&&nt.extend(this,e),this.timeStamp=t&&t.timeStamp||nt.now(),void(this[nt.expando]=!0)):new nt.Event(t,e)},nt.Event.prototype={isDefaultPrevented:f,isPropagationStopped:f,isImmediatePropagationStopped:f,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=c,t&&(t.preventDefault?t.preventDefault():t.returnValue=!1)},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=c,t&&(t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0)},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=c,t&&t.stopImmediatePropagation&&t.stopImmediatePropagation(),this.stopPropagation()}},nt.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){nt.event.special[t]={delegateType:e,bindType:e,handle:function(t){var o,i=this,n=t.relatedTarget,r=t.handleObj;return(!n||n!==i&&!nt.contains(i,n))&&(t.type=r.origType,o=r.handler.apply(this,arguments),t.type=e),o}}}),ot.submitBubbles||(nt.event.special.submit={setup:function(){return!nt.nodeName(this,"form")&&void nt.event.add(this,"click._submit keypress._submit",function(t){var e=t.target,o=nt.nodeName(e,"input")||nt.nodeName(e,"button")?e.form:void 0;o&&!nt._data(o,"submitBubbles")&&(nt.event.add(o,"submit._submit",function(t){t._submit_bubble=!0}),nt._data(o,"submitBubbles",!0))})},postDispatch:function(t){t._submit_bubble&&(delete t._submit_bubble,this.parentNode&&!t.isTrigger&&nt.event.simulate("submit",this.parentNode,t,!0))},teardown:function(){return!nt.nodeName(this,"form")&&void nt.event.remove(this,"._submit")}}),ot.changeBubbles||(nt.event.special.change={setup:function(){return jt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(nt.event.add(this,"propertychange._change",function(t){"checked"===t.originalEvent.propertyName&&(this._just_changed=!0)}),nt.event.add(this,"click._change",function(t){this._just_changed&&!t.isTrigger&&(this._just_changed=!1),nt.event.simulate("change",this,t,!0)})),!1):void nt.event.add(this,"beforeactivate._change",function(t){var e=t.target;jt.test(e.nodeName)&&!nt._data(e,"changeBubbles")&&(nt.event.add(e,"change._change",function(t){!this.parentNode||t.isSimulated||t.isTrigger||nt.event.simulate("change",this.parentNode,t,!0)}),nt._data(e,"changeBubbles",!0))})},handle:function(t){var e=t.target;return this!==e||t.isSimulated||t.isTrigger||"radio"!==e.type&&"checkbox"!==e.type?t.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return nt.event.remove(this,"._change"),!jt.test(this.nodeName)}}),ot.focusinBubbles||nt.each({focus:"focusin",blur:"focusout"},function(t,e){var o=function(t){nt.event.simulate(e,t.target,nt.event.fix(t),!0)};nt.event.special[e]={setup:function(){var i=this.ownerDocument||this,n=nt._data(i,e);n||i.addEventListener(t,o,!0),nt._data(i,e,(n||0)+1)},teardown:function(){var i=this.ownerDocument||this,n=nt._data(i,e)-1;n?nt._data(i,e,n):(i.removeEventListener(t,o,!0),nt._removeData(i,e))}}}),nt.fn.extend({on:function(t,e,o,i,n){var r,s;if("object"==typeof t){"string"!=typeof e&&(o=o||e,e=void 0);for(r in t)this.on(r,e,o,t[r],n);return this}if(null==o&&null==i?(i=e,o=e=void 0):null==i&&("string"==typeof e?(i=o,o=void 0):(i=o,o=e,e=void 0)),i===!1)i=f;else if(!i)return this;return 1===n&&(s=i,i=function(t){return nt().off(t),s.apply(this,arguments)},i.guid=s.guid||(s.guid=nt.guid++)),this.each(function(){nt.event.add(this,t,i,o,e)})},one:function(t,e,o,i){return this.on(t,e,o,i,1)},off:function(t,e,o){var i,n;if(t&&t.preventDefault&&t.handleObj)return i=t.handleObj,nt(t.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof t){for(n in t)this.off(n,e,t[n]);return this}return(e===!1||"function"==typeof e)&&(o=e,e=void 0),o===!1&&(o=f),this.each(function(){nt.event.remove(this,t,o,e)})},trigger:function(t,e){return this.each(function(){nt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var o=this[0];return o?nt.event.trigger(t,e,o,!0):void 0}});var Ft="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Ot=/ jQuery\d+="(?:null|\d+)"/g,Bt=new RegExp("<(?:"+Ft+")[\\s/>]","i"),Ut=/^\s+/,Gt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,qt=/<([\w:]+)/,$t=/<tbody/i,Ht=/<|&#?\w+;/,Xt=/<(?:script|style|link)/i,Wt=/checked\s*(?:[^=]|=\s*.checked.)/i,Kt=/^$|\/(?:java|ecma)script/i,zt=/^true\/(.*)/,Vt=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Yt={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:ot.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},Zt=d(yt),_t=Zt.appendChild(yt.createElement("div"));Yt.optgroup=Yt.option,Yt.tbody=Yt.tfoot=Yt.colgroup=Yt.caption=Yt.thead,Yt.th=Yt.td,nt.extend({clone:function(t,e,o){var i,n,r,s,a,p=nt.contains(t.ownerDocument,t);if(ot.html5Clone||nt.isXMLDoc(t)||!Bt.test("<"+t.nodeName+">")?r=t.cloneNode(!0):(_t.innerHTML=t.outerHTML,_t.removeChild(r=_t.firstChild)),!(ot.noCloneEvent&&ot.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||nt.isXMLDoc(t)))for(i=g(r),a=g(t),s=0;null!=(n=a[s]);++s)i[s]&&T(n,i[s]);if(e)if(o)for(a=a||g(t),i=i||g(r),s=0;null!=(n=a[s]);s++)S(n,i[s]);else S(t,r);return i=g(r,"script"),i.length>0&&x(i,!p&&g(t,"script")),i=a=n=null,r},buildFragment:function(t,e,o,i){for(var n,r,s,a,p,l,h,u=t.length,c=d(e),f=[],y=0;u>y;y++)if(r=t[y],r||0===r)if("object"===nt.type(r))nt.merge(f,r.nodeType?[r]:r);else if(Ht.test(r)){for(a=a||c.appendChild(e.createElement("div")),p=(qt.exec(r)||["",""])[1].toLowerCase(),h=Yt[p]||Yt._default,a.innerHTML=h[1]+r.replace(Gt,"<$1></$2>")+h[2],n=h[0];n--;)a=a.lastChild;if(!ot.leadingWhitespace&&Ut.test(r)&&f.push(e.createTextNode(Ut.exec(r)[0])),!ot.tbody)for(r="table"!==p||$t.test(r)?"<table>"!==h[1]||$t.test(r)?0:a:a.firstChild,n=r&&r.childNodes.length;n--;)nt.nodeName(l=r.childNodes[n],"tbody")&&!l.childNodes.length&&r.removeChild(l);for(nt.merge(f,a.childNodes),a.textContent="";a.firstChild;)a.removeChild(a.firstChild);a=c.lastChild}else f.push(e.createTextNode(r));for(a&&c.removeChild(a),ot.appendChecked||nt.grep(g(f,"input"),v),y=0;r=f[y++];)if((!i||-1===nt.inArray(r,i))&&(s=nt.contains(r.ownerDocument,r),a=g(c.appendChild(r),"script"),s&&x(a),o))for(n=0;r=a[n++];)Kt.test(r.type||"")&&o.push(r);return a=null,c},cleanData:function(t,e){for(var o,i,n,r,s=0,a=nt.expando,p=nt.cache,l=ot.deleteExpando,h=nt.event.special;null!=(o=t[s]);s++)if((e||nt.acceptData(o))&&(n=o[a],r=n&&p[n])){if(r.events)for(i in r.events)h[i]?nt.event.remove(o,i):nt.removeEvent(o,i,r.handle);p[n]&&(delete p[n],l?delete o[a]:typeof o.removeAttribute!==Tt?o.removeAttribute(a):o[a]=null,V.push(n))}}}),nt.fn.extend({text:function(t){return At(this,function(t){return void 0===t?nt.text(this):this.empty().append((this[0]&&this[0].ownerDocument||yt).createTextNode(t))},null,t,arguments.length)},append:function(){return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.appendChild(t)}})},prepend:function(){
+return this.domManip(arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return this.domManip(arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},remove:function(t,e){for(var o,i=t?nt.filter(t,this):this,n=0;null!=(o=i[n]);n++)e||1!==o.nodeType||nt.cleanData(g(o)),o.parentNode&&(e&&nt.contains(o.ownerDocument,o)&&x(g(o,"script")),o.parentNode.removeChild(o));return this},empty:function(){for(var t,e=0;null!=(t=this[e]);e++){for(1===t.nodeType&&nt.cleanData(g(t,!1));t.firstChild;)t.removeChild(t.firstChild);t.options&&nt.nodeName(t,"select")&&(t.options.length=0)}return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return nt.clone(this,t,e)})},html:function(t){return At(this,function(t){var e=this[0]||{},o=0,i=this.length;if(void 0===t)return 1===e.nodeType?e.innerHTML.replace(Ot,""):void 0;if(!("string"!=typeof t||Xt.test(t)||!ot.htmlSerialize&&Bt.test(t)||!ot.leadingWhitespace&&Ut.test(t)||Yt[(qt.exec(t)||["",""])[1].toLowerCase()])){t=t.replace(Gt,"<$1></$2>");try{for(;i>o;o++)e=this[o]||{},1===e.nodeType&&(nt.cleanData(g(e,!1)),e.innerHTML=t);e=0}catch(n){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=arguments[0];return this.domManip(arguments,function(e){t=this.parentNode,nt.cleanData(g(this)),t&&t.replaceChild(e,this)}),t&&(t.length||t.nodeType)?this:this.remove()},detach:function(t){return this.remove(t,!0)},domManip:function(t,e){t=Z.apply([],t);var o,i,n,r,s,a,p=0,l=this.length,h=this,u=l-1,c=t[0],f=nt.isFunction(c);if(f||l>1&&"string"==typeof c&&!ot.checkClone&&Wt.test(c))return this.each(function(o){var i=h.eq(o);f&&(t[0]=c.call(this,o,i.html())),i.domManip(t,e)});if(l&&(a=nt.buildFragment(t,this[0].ownerDocument,!1,this),o=a.firstChild,1===a.childNodes.length&&(a=o),o)){for(r=nt.map(g(a,"script"),b),n=r.length;l>p;p++)i=a,p!==u&&(i=nt.clone(i,!0,!0),n&&nt.merge(r,g(i,"script"))),e.call(this[p],i,p);if(n)for(s=r[r.length-1].ownerDocument,nt.map(r,w),p=0;n>p;p++)i=r[p],Kt.test(i.type||"")&&!nt._data(i,"globalEval")&&nt.contains(s,i)&&(i.src?nt._evalUrl&&nt._evalUrl(i.src):nt.globalEval((i.text||i.textContent||i.innerHTML||"").replace(Vt,"")));a=o=null}return this}}),nt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){nt.fn[t]=function(t){for(var o,i=0,n=[],r=nt(t),s=r.length-1;s>=i;i++)o=i===s?this:this.clone(!0),nt(r[i])[e](o),_.apply(n,o.get());return this.pushStack(n)}});var Jt,Qt={};!function(){var t;ot.shrinkWrapBlocks=function(){if(null!=t)return t;t=!1;var e,o,i;return o=yt.getElementsByTagName("body")[0],o&&o.style?(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),typeof e.style.zoom!==Tt&&(e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",e.appendChild(yt.createElement("div")).style.width="5px",t=3!==e.offsetWidth),o.removeChild(i),t):void 0}}();var te,ee,oe=/^margin/,ie=new RegExp("^("+Pt+")(?!px)[a-z%]+$","i"),ne=/^(top|right|bottom|left)$/;t.getComputedStyle?(te=function(e){return e.ownerDocument.defaultView.opener?e.ownerDocument.defaultView.getComputedStyle(e,null):t.getComputedStyle(e,null)},ee=function(t,e,o){var i,n,r,s,a=t.style;return o=o||te(t),s=o?o.getPropertyValue(e)||o[e]:void 0,o&&(""!==s||nt.contains(t.ownerDocument,t)||(s=nt.style(t,e)),ie.test(s)&&oe.test(e)&&(i=a.width,n=a.minWidth,r=a.maxWidth,a.minWidth=a.maxWidth=a.width=s,s=o.width,a.width=i,a.minWidth=n,a.maxWidth=r)),void 0===s?s:s+""}):yt.documentElement.currentStyle&&(te=function(t){return t.currentStyle},ee=function(t,e,o){var i,n,r,s,a=t.style;return o=o||te(t),s=o?o[e]:void 0,null==s&&a&&a[e]&&(s=a[e]),ie.test(s)&&!ne.test(e)&&(i=a.left,n=t.runtimeStyle,r=n&&n.left,r&&(n.left=t.currentStyle.left),a.left="fontSize"===e?"1em":s,s=a.pixelLeft+"px",a.left=i,r&&(n.left=r)),void 0===s?s:s+""||"auto"}),!function(){function e(){var e,o,i,n;o=yt.getElementsByTagName("body")[0],o&&o.style&&(e=yt.createElement("div"),i=yt.createElement("div"),i.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",o.appendChild(i).appendChild(e),e.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",r=s=!1,p=!0,t.getComputedStyle&&(r="1%"!==(t.getComputedStyle(e,null)||{}).top,s="4px"===(t.getComputedStyle(e,null)||{width:"4px"}).width,n=e.appendChild(yt.createElement("div")),n.style.cssText=e.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",n.style.marginRight=n.style.width="0",e.style.width="1px",p=!parseFloat((t.getComputedStyle(n,null)||{}).marginRight),e.removeChild(n)),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",n=e.getElementsByTagName("td"),n[0].style.cssText="margin:0;border:0;padding:0;display:none",a=0===n[0].offsetHeight,a&&(n[0].style.display="",n[1].style.display="none",a=0===n[0].offsetHeight),o.removeChild(i))}var o,i,n,r,s,a,p;o=yt.createElement("div"),o.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=o.getElementsByTagName("a")[0],(i=n&&n.style)&&(i.cssText="float:left;opacity:.5",ot.opacity="0.5"===i.opacity,ot.cssFloat=!!i.cssFloat,o.style.backgroundClip="content-box",o.cloneNode(!0).style.backgroundClip="",ot.clearCloneStyle="content-box"===o.style.backgroundClip,ot.boxSizing=""===i.boxSizing||""===i.MozBoxSizing||""===i.WebkitBoxSizing,nt.extend(ot,{reliableHiddenOffsets:function(){return null==a&&e(),a},boxSizingReliable:function(){return null==s&&e(),s},pixelPosition:function(){return null==r&&e(),r},reliableMarginRight:function(){return null==p&&e(),p}}))}(),nt.swap=function(t,e,o,i){var n,r,s={};for(r in e)s[r]=t.style[r],t.style[r]=e[r];n=o.apply(t,i||[]);for(r in e)t.style[r]=s[r];return n};var re=/alpha\([^)]*\)/i,se=/opacity\s*=\s*([^)]*)/,ae=/^(none|table(?!-c[ea]).+)/,pe=new RegExp("^("+Pt+")(.*)$","i"),le=new RegExp("^([+-])=("+Pt+")","i"),he={position:"absolute",visibility:"hidden",display:"block"},ue={letterSpacing:"0",fontWeight:"400"},ce=["Webkit","O","Moz","ms"];nt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var o=ee(t,"opacity");return""===o?"1":o}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":ot.cssFloat?"cssFloat":"styleFloat"},style:function(t,e,o,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var n,r,s,a=nt.camelCase(e),p=t.style;if(e=nt.cssProps[a]||(nt.cssProps[a]=E(p,a)),s=nt.cssHooks[e]||nt.cssHooks[a],void 0===o)return s&&"get"in s&&void 0!==(n=s.get(t,!1,i))?n:p[e];if(r=typeof o,"string"===r&&(n=le.exec(o))&&(o=(n[1]+1)*n[2]+parseFloat(nt.css(t,e)),r="number"),null!=o&&o===o&&("number"!==r||nt.cssNumber[a]||(o+="px"),ot.clearCloneStyle||""!==o||0!==e.indexOf("background")||(p[e]="inherit"),!(s&&"set"in s&&void 0===(o=s.set(t,o,i)))))try{p[e]=o}catch(l){}}},css:function(t,e,o,i){var n,r,s,a=nt.camelCase(e);return e=nt.cssProps[a]||(nt.cssProps[a]=E(t.style,a)),s=nt.cssHooks[e]||nt.cssHooks[a],s&&"get"in s&&(r=s.get(t,!0,o)),void 0===r&&(r=ee(t,e,i)),"normal"===r&&e in ue&&(r=ue[e]),""===o||o?(n=parseFloat(r),o===!0||nt.isNumeric(n)?n||0:r):r}}),nt.each(["height","width"],function(t,e){nt.cssHooks[e]={get:function(t,o,i){return o?ae.test(nt.css(t,"display"))&&0===t.offsetWidth?nt.swap(t,he,function(){return j(t,e,i)}):j(t,e,i):void 0},set:function(t,o,i){var n=i&&te(t);return A(t,o,i?R(t,e,i,ot.boxSizing&&"border-box"===nt.css(t,"boxSizing",!1,n),n):0)}}}),ot.opacity||(nt.cssHooks.opacity={get:function(t,e){return se.test((e&&t.currentStyle?t.currentStyle.filter:t.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":e?"1":""},set:function(t,e){var o=t.style,i=t.currentStyle,n=nt.isNumeric(e)?"alpha(opacity="+100*e+")":"",r=i&&i.filter||o.filter||"";o.zoom=1,(e>=1||""===e)&&""===nt.trim(r.replace(re,""))&&o.removeAttribute&&(o.removeAttribute("filter"),""===e||i&&!i.filter)||(o.filter=re.test(r)?r.replace(re,n):r+" "+n)}}),nt.cssHooks.marginRight=P(ot.reliableMarginRight,function(t,e){return e?nt.swap(t,{display:"inline-block"},ee,[t,"marginRight"]):void 0}),nt.each({margin:"",padding:"",border:"Width"},function(t,e){nt.cssHooks[t+e]={expand:function(o){for(var i=0,n={},r="string"==typeof o?o.split(" "):[o];4>i;i++)n[t+Et[i]+e]=r[i]||r[i-2]||r[0];return n}},oe.test(t)||(nt.cssHooks[t+e].set=A)}),nt.fn.extend({css:function(t,e){return At(this,function(t,e,o){var i,n,r={},s=0;if(nt.isArray(e)){for(i=te(t),n=e.length;n>s;s++)r[e[s]]=nt.css(t,e[s],!1,i);return r}return void 0!==o?nt.style(t,e,o):nt.css(t,e)},t,e,arguments.length>1)},show:function(){return k(this,!0)},hide:function(){return k(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){kt(this)?nt(this).show():nt(this).hide()})}}),nt.Tween=L,L.prototype={constructor:L,init:function(t,e,o,i,n,r){this.elem=t,this.prop=o,this.easing=n||"swing",this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=r||(nt.cssNumber[o]?"":"px")},cur:function(){var t=L.propHooks[this.prop];return t&&t.get?t.get(this):L.propHooks._default.get(this)},run:function(t){var e,o=L.propHooks[this.prop];return this.pos=e=this.options.duration?nt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),o&&o.set?o.set(this):L.propHooks._default.set(this),this}},L.prototype.init.prototype=L.prototype,L.propHooks={_default:{get:function(t){var e;return null==t.elem[t.prop]||t.elem.style&&null!=t.elem.style[t.prop]?(e=nt.css(t.elem,t.prop,""),e&&"auto"!==e?e:0):t.elem[t.prop]},set:function(t){nt.fx.step[t.prop]?nt.fx.step[t.prop](t):t.elem.style&&(null!=t.elem.style[nt.cssProps[t.prop]]||nt.cssHooks[t.prop])?nt.style(t.elem,t.prop,t.now+t.unit):t.elem[t.prop]=t.now}}},L.propHooks.scrollTop=L.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},nt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2}},nt.fx=L.prototype.init,nt.fx.step={};var fe,ye,de=/^(?:toggle|show|hide)$/,ge=new RegExp("^(?:([+-])=|)("+Pt+")([a-z%]*)$","i"),ve=/queueHooks$/,me=[F],be={"*":[function(t,e){var o=this.createTween(t,e),i=o.cur(),n=ge.exec(e),r=n&&n[3]||(nt.cssNumber[t]?"":"px"),s=(nt.cssNumber[t]||"px"!==r&&+i)&&ge.exec(nt.css(o.elem,t)),a=1,p=20;if(s&&s[3]!==r){r=r||s[3],n=n||[],s=+i||1;do a=a||".5",s/=a,nt.style(o.elem,t,s+r);while(a!==(a=o.cur()/i)&&1!==a&&--p)}return n&&(s=o.start=+s||+i||0,o.unit=r,o.end=n[1]?s+(n[1]+1)*n[2]:+n[2]),o}]};nt.Animation=nt.extend(B,{tweener:function(t,e){nt.isFunction(t)?(e=t,t=["*"]):t=t.split(" ");for(var o,i=0,n=t.length;n>i;i++)o=t[i],be[o]=be[o]||[],be[o].unshift(e)},prefilter:function(t,e){e?me.unshift(t):me.push(t)}}),nt.speed=function(t,e,o){var i=t&&"object"==typeof t?nt.extend({},t):{complete:o||!o&&e||nt.isFunction(t)&&t,duration:t,easing:o&&e||e&&!nt.isFunction(e)&&e};return i.duration=nt.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in nt.fx.speeds?nt.fx.speeds[i.duration]:nt.fx.speeds._default,(null==i.queue||i.queue===!0)&&(i.queue="fx"),i.old=i.complete,i.complete=function(){nt.isFunction(i.old)&&i.old.call(this),i.queue&&nt.dequeue(this,i.queue)},i},nt.fn.extend({fadeTo:function(t,e,o,i){return this.filter(kt).css("opacity",0).show().end().animate({opacity:e},t,o,i)},animate:function(t,e,o,i){var n=nt.isEmptyObject(t),r=nt.speed(e,o,i),s=function(){var e=B(this,nt.extend({},t),r);(n||nt._data(this,"finish"))&&e.stop(!0)};return s.finish=s,n||r.queue===!1?this.each(s):this.queue(r.queue,s)},stop:function(t,e,o){var i=function(t){var e=t.stop;delete t.stop,e(o)};return"string"!=typeof t&&(o=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,n=null!=t&&t+"queueHooks",r=nt.timers,s=nt._data(this);if(n)s[n]&&s[n].stop&&i(s[n]);else for(n in s)s[n]&&s[n].stop&&ve.test(n)&&i(s[n]);for(n=r.length;n--;)r[n].elem!==this||null!=t&&r[n].queue!==t||(r[n].anim.stop(o),e=!1,r.splice(n,1));(e||!o)&&nt.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,o=nt._data(this),i=o[t+"queue"],n=o[t+"queueHooks"],r=nt.timers,s=i?i.length:0;for(o.finish=!0,nt.queue(this,t,[]),n&&n.stop&&n.stop.call(this,!0),e=r.length;e--;)r[e].elem===this&&r[e].queue===t&&(r[e].anim.stop(!0),r.splice(e,1));for(e=0;s>e;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete o.finish})}}),nt.each(["toggle","show","hide"],function(t,e){var o=nt.fn[e];nt.fn[e]=function(t,i,n){return null==t||"boolean"==typeof t?o.apply(this,arguments):this.animate(I(e,!0),t,i,n)}}),nt.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){nt.fn[t]=function(t,o,i){return this.animate(e,t,o,i)}}),nt.timers=[],nt.fx.tick=function(){var t,e=nt.timers,o=0;for(fe=nt.now();o<e.length;o++)t=e[o],t()||e[o]!==t||e.splice(o--,1);e.length||nt.fx.stop(),fe=void 0},nt.fx.timer=function(t){nt.timers.push(t),t()?nt.fx.start():nt.timers.pop()},nt.fx.interval=13,nt.fx.start=function(){ye||(ye=setInterval(nt.fx.tick,nt.fx.interval))},nt.fx.stop=function(){clearInterval(ye),ye=null},nt.fx.speeds={slow:600,fast:200,_default:400},nt.fn.delay=function(t,e){return t=nt.fx?nt.fx.speeds[t]||t:t,e=e||"fx",this.queue(e,function(e,o){var i=setTimeout(e,t);o.stop=function(){clearTimeout(i)}})},function(){var t,e,o,i,n;e=yt.createElement("div"),e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",i=e.getElementsByTagName("a")[0],o=yt.createElement("select"),n=o.appendChild(yt.createElement("option")),t=e.getElementsByTagName("input")[0],i.style.cssText="top:1px",ot.getSetAttribute="t"!==e.className,ot.style=/top/.test(i.getAttribute("style")),ot.hrefNormalized="/a"===i.getAttribute("href"),ot.checkOn=!!t.value,ot.optSelected=n.selected,ot.enctype=!!yt.createElement("form").enctype,o.disabled=!0,ot.optDisabled=!n.disabled,t=yt.createElement("input"),t.setAttribute("value",""),ot.input=""===t.getAttribute("value"),t.value="t",t.setAttribute("type","radio"),ot.radioValue="t"===t.value}();var we=/\r/g;nt.fn.extend({val:function(t){var e,o,i,n=this[0];return arguments.length?(i=nt.isFunction(t),this.each(function(o){var n;1===this.nodeType&&(n=i?t.call(this,o,nt(this).val()):t,null==n?n="":"number"==typeof n?n+="":nt.isArray(n)&&(n=nt.map(n,function(t){return null==t?"":t+""})),e=nt.valHooks[this.type]||nt.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,n,"value")||(this.value=n))})):n?(e=nt.valHooks[n.type]||nt.valHooks[n.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(o=e.get(n,"value"))?o:(o=n.value,"string"==typeof o?o.replace(we,""):null==o?"":o)):void 0}}),nt.extend({valHooks:{option:{get:function(t){var e=nt.find.attr(t,"value");return null!=e?e:nt.trim(nt.text(t))}},select:{get:function(t){for(var e,o,i=t.options,n=t.selectedIndex,r="select-one"===t.type||0>n,s=r?null:[],a=r?n+1:i.length,p=0>n?a:r?n:0;a>p;p++)if(o=i[p],!(!o.selected&&p!==n||(ot.optDisabled?o.disabled:null!==o.getAttribute("disabled"))||o.parentNode.disabled&&nt.nodeName(o.parentNode,"optgroup"))){if(e=nt(o).val(),r)return e;s.push(e)}return s},set:function(t,e){for(var o,i,n=t.options,r=nt.makeArray(e),s=n.length;s--;)if(i=n[s],nt.inArray(nt.valHooks.option.get(i),r)>=0)try{i.selected=o=!0}catch(a){i.scrollHeight}else i.selected=!1;return o||(t.selectedIndex=-1),n}}}}),nt.each(["radio","checkbox"],function(){nt.valHooks[this]={set:function(t,e){return nt.isArray(e)?t.checked=nt.inArray(nt(t).val(),e)>=0:void 0}},ot.checkOn||(nt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var xe,Se,Te=nt.expr.attrHandle,Ce=/^(?:checked|selected)$/i,Me=ot.getSetAttribute,Pe=ot.input;nt.fn.extend({attr:function(t,e){return At(this,nt.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){nt.removeAttr(this,t)})}}),nt.extend({attr:function(t,e,o){var i,n,r=t.nodeType;if(t&&3!==r&&8!==r&&2!==r)return typeof t.getAttribute===Tt?nt.prop(t,e,o):(1===r&&nt.isXMLDoc(t)||(e=e.toLowerCase(),i=nt.attrHooks[e]||(nt.expr.match.bool.test(e)?Se:xe)),void 0===o?i&&"get"in i&&null!==(n=i.get(t,e))?n:(n=nt.find.attr(t,e),null==n?void 0:n):null!==o?i&&"set"in i&&void 0!==(n=i.set(t,o,e))?n:(t.setAttribute(e,o+""),o):void nt.removeAttr(t,e))},removeAttr:function(t,e){var o,i,n=0,r=e&&e.match(bt);if(r&&1===t.nodeType)for(;o=r[n++];)i=nt.propFix[o]||o,nt.expr.match.bool.test(o)?Pe&&Me||!Ce.test(o)?t[i]=!1:t[nt.camelCase("default-"+o)]=t[i]=!1:nt.attr(t,o,""),t.removeAttribute(Me?o:i)},attrHooks:{type:{set:function(t,e){if(!ot.radioValue&&"radio"===e&&nt.nodeName(t,"input")){var o=t.value;return t.setAttribute("type",e),o&&(t.value=o),e}}}}}),Se={set:function(t,e,o){return e===!1?nt.removeAttr(t,o):Pe&&Me||!Ce.test(o)?t.setAttribute(!Me&&nt.propFix[o]||o,o):t[nt.camelCase("default-"+o)]=t[o]=!0,o}},nt.each(nt.expr.match.bool.source.match(/\w+/g),function(t,e){var o=Te[e]||nt.find.attr;Te[e]=Pe&&Me||!Ce.test(e)?function(t,e,i){var n,r;return i||(r=Te[e],Te[e]=n,n=null!=o(t,e,i)?e.toLowerCase():null,Te[e]=r),n}:function(t,e,o){return o?void 0:t[nt.camelCase("default-"+e)]?e.toLowerCase():null}}),Pe&&Me||(nt.attrHooks.value={set:function(t,e,o){return nt.nodeName(t,"input")?void(t.defaultValue=e):xe&&xe.set(t,e,o)}}),Me||(xe={set:function(t,e,o){var i=t.getAttributeNode(o);return i||t.setAttributeNode(i=t.ownerDocument.createAttribute(o)),i.value=e+="","value"===o||e===t.getAttribute(o)?e:void 0}},Te.id=Te.name=Te.coords=function(t,e,o){var i;return o?void 0:(i=t.getAttributeNode(e))&&""!==i.value?i.value:null},nt.valHooks.button={get:function(t,e){var o=t.getAttributeNode(e);return o&&o.specified?o.value:void 0},set:xe.set},nt.attrHooks.contenteditable={set:function(t,e,o){xe.set(t,""!==e&&e,o)}},nt.each(["width","height"],function(t,e){nt.attrHooks[e]={set:function(t,o){return""===o?(t.setAttribute(e,"auto"),o):void 0}}})),ot.style||(nt.attrHooks.style={get:function(t){return t.style.cssText||void 0},set:function(t,e){return t.style.cssText=e+""}});var Ee=/^(?:input|select|textarea|button|object)$/i,ke=/^(?:a|area)$/i;nt.fn.extend({prop:function(t,e){return At(this,nt.prop,t,e,arguments.length>1)},removeProp:function(t){return t=nt.propFix[t]||t,this.each(function(){try{this[t]=void 0,delete this[t]}catch(e){}})}}),nt.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(t,e,o){var i,n,r,s=t.nodeType;if(t&&3!==s&&8!==s&&2!==s)return r=1!==s||!nt.isXMLDoc(t),r&&(e=nt.propFix[e]||e,n=nt.propHooks[e]),void 0!==o?n&&"set"in n&&void 0!==(i=n.set(t,o,e))?i:t[e]=o:n&&"get"in n&&null!==(i=n.get(t,e))?i:t[e]},propHooks:{tabIndex:{get:function(t){var e=nt.find.attr(t,"tabindex");return e?parseInt(e,10):Ee.test(t.nodeName)||ke.test(t.nodeName)&&t.href?0:-1}}}}),ot.hrefNormalized||nt.each(["href","src"],function(t,e){nt.propHooks[e]={get:function(t){return t.getAttribute(e,4)}}}),ot.optSelected||(nt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex),null}}),nt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){nt.propFix[this.toLowerCase()]=this}),ot.enctype||(nt.propFix.enctype="encoding");var Ae=/[\t\r\n\f]/g;nt.fn.extend({addClass:function(t){var e,o,i,n,r,s,a=0,p=this.length,l="string"==typeof t&&t;if(nt.isFunction(t))return this.each(function(e){nt(this).addClass(t.call(this,e,this.className))});if(l)for(e=(t||"").match(bt)||[];p>a;a++)if(o=this[a],i=1===o.nodeType&&(o.className?(" "+o.className+" ").replace(Ae," "):" ")){for(r=0;n=e[r++];)i.indexOf(" "+n+" ")<0&&(i+=n+" ");s=nt.trim(i),o.className!==s&&(o.className=s)}return this},removeClass:function(t){var e,o,i,n,r,s,a=0,p=this.length,l=0===arguments.length||"string"==typeof t&&t;if(nt.isFunction(t))return this.each(function(e){nt(this).removeClass(t.call(this,e,this.className))});if(l)for(e=(t||"").match(bt)||[];p>a;a++)if(o=this[a],i=1===o.nodeType&&(o.className?(" "+o.className+" ").replace(Ae," "):"")){for(r=0;n=e[r++];)for(;i.indexOf(" "+n+" ")>=0;)i=i.replace(" "+n+" "," ");s=t?nt.trim(i):"",o.className!==s&&(o.className=s)}return this},toggleClass:function(t,e){var o=typeof t;return"boolean"==typeof e&&"string"===o?e?this.addClass(t):this.removeClass(t):this.each(nt.isFunction(t)?function(o){nt(this).toggleClass(t.call(this,o,this.className,e),e)}:function(){if("string"===o)for(var e,i=0,n=nt(this),r=t.match(bt)||[];e=r[i++];)n.hasClass(e)?n.removeClass(e):n.addClass(e);else(o===Tt||"boolean"===o)&&(this.className&&nt._data(this,"__className__",this.className),this.className=this.className||t===!1?"":nt._data(this,"__className__")||"")})},hasClass:function(t){for(var e=" "+t+" ",o=0,i=this.length;i>o;o++)if(1===this[o].nodeType&&(" "+this[o].className+" ").replace(Ae," ").indexOf(e)>=0)return!0;return!1}}),nt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){nt.fn[e]=function(t,o){return arguments.length>0?this.on(e,null,t,o):this.trigger(e)}}),nt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)},bind:function(t,e,o){return this.on(t,null,e,o)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,o,i){return this.on(e,t,o,i)},undelegate:function(t,e,o){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",o)}});var Re=nt.now(),je=/\?/,Le=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;nt.parseJSON=function(e){if(t.JSON&&t.JSON.parse)return t.JSON.parse(e+"");var o,i=null,n=nt.trim(e+"");return n&&!nt.trim(n.replace(Le,function(t,e,n,r){return o&&e&&(i=0),0===i?t:(o=n||e,i+=!r-!n,"")}))?Function("return "+n)():nt.error("Invalid JSON: "+e)},nt.parseXML=function(e){var o,i;if(!e||"string"!=typeof e)return null;try{t.DOMParser?(i=new DOMParser,o=i.parseFromString(e,"text/xml")):(o=new ActiveXObject("Microsoft.XMLDOM"),o.async="false",o.loadXML(e))}catch(n){o=void 0}return o&&o.documentElement&&!o.getElementsByTagName("parsererror").length||nt.error("Invalid XML: "+e),o};var Ne,Ie,De=/#.*$/,Fe=/([?&])_=[^&]*/,Oe=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Be=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ue=/^(?:GET|HEAD)$/,Ge=/^\/\//,qe=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,$e={},He={},Xe="*/".concat("*");try{Ie=location.href}catch(We){Ie=yt.createElement("a"),Ie.href="",Ie=Ie.href}Ne=qe.exec(Ie.toLowerCase())||[],nt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ie,type:"GET",isLocal:Be.test(Ne[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Xe,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":nt.parseJSON,"text xml":nt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?q(q(t,nt.ajaxSettings),e):q(nt.ajaxSettings,t)},ajaxPrefilter:U($e),ajaxTransport:U(He),ajax:function(t,e){function o(t,e,o,i){var n,h,v,m,w,S=e;2!==b&&(b=2,a&&clearTimeout(a),l=void 0,s=i||"",x.readyState=t>0?4:0,n=t>=200&&300>t||304===t,o&&(m=$(u,x,o)),m=H(u,m,x,n),n?(u.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(nt.lastModified[r]=w),w=x.getResponseHeader("etag"),w&&(nt.etag[r]=w)),204===t||"HEAD"===u.type?S="nocontent":304===t?S="notmodified":(S=m.state,h=m.data,v=m.error,n=!v)):(v=S,(t||!S)&&(S="error",0>t&&(t=0))),x.status=t,x.statusText=(e||S)+"",n?y.resolveWith(c,[h,S,x]):y.rejectWith(c,[x,S,v]),x.statusCode(g),g=void 0,p&&f.trigger(n?"ajaxSuccess":"ajaxError",[x,u,n?h:v]),d.fireWith(c,[x,S]),p&&(f.trigger("ajaxComplete",[x,u]),--nt.active||nt.event.trigger("ajaxStop")))}"object"==typeof t&&(e=t,t=void 0),e=e||{};var i,n,r,s,a,p,l,h,u=nt.ajaxSetup({},e),c=u.context||u,f=u.context&&(c.nodeType||c.jquery)?nt(c):nt.event,y=nt.Deferred(),d=nt.Callbacks("once memory"),g=u.statusCode||{},v={},m={},b=0,w="canceled",x={readyState:0,getResponseHeader:function(t){var e;if(2===b){if(!h)for(h={};e=Oe.exec(s);)h[e[1].toLowerCase()]=e[2];e=h[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===b?s:null},setRequestHeader:function(t,e){var o=t.toLowerCase();return b||(t=m[o]=m[o]||t,v[t]=e),this},overrideMimeType:function(t){return b||(u.mimeType=t),this},statusCode:function(t){var e;if(t)if(2>b)for(e in t)g[e]=[g[e],t[e]];else x.always(t[x.status]);return this},abort:function(t){var e=t||w;return l&&l.abort(e),o(0,e),this}};if(y.promise(x).complete=d.add,x.success=x.done,x.error=x.fail,u.url=((t||u.url||Ie)+"").replace(De,"").replace(Ge,Ne[1]+"//"),u.type=e.method||e.type||u.method||u.type,u.dataTypes=nt.trim(u.dataType||"*").toLowerCase().match(bt)||[""],null==u.crossDomain&&(i=qe.exec(u.url.toLowerCase()),u.crossDomain=!(!i||i[1]===Ne[1]&&i[2]===Ne[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(Ne[3]||("http:"===Ne[1]?"80":"443")))),u.data&&u.processData&&"string"!=typeof u.data&&(u.data=nt.param(u.data,u.traditional)),G($e,u,e,x),2===b)return x;p=nt.event&&u.global,p&&0===nt.active++&&nt.event.trigger("ajaxStart"),u.type=u.type.toUpperCase(),u.hasContent=!Ue.test(u.type),r=u.url,u.hasContent||(u.data&&(r=u.url+=(je.test(r)?"&":"?")+u.data,delete u.data),u.cache===!1&&(u.url=Fe.test(r)?r.replace(Fe,"$1_="+Re++):r+(je.test(r)?"&":"?")+"_="+Re++)),u.ifModified&&(nt.lastModified[r]&&x.setRequestHeader("If-Modified-Since",nt.lastModified[r]),nt.etag[r]&&x.setRequestHeader("If-None-Match",nt.etag[r])),(u.data&&u.hasContent&&u.contentType!==!1||e.contentType)&&x.setRequestHeader("Content-Type",u.contentType),x.setRequestHeader("Accept",u.dataTypes[0]&&u.accepts[u.dataTypes[0]]?u.accepts[u.dataTypes[0]]+("*"!==u.dataTypes[0]?", "+Xe+"; q=0.01":""):u.accepts["*"]);for(n in u.headers)x.setRequestHeader(n,u.headers[n]);if(u.beforeSend&&(u.beforeSend.call(c,x,u)===!1||2===b))return x.abort();w="abort";for(n in{success:1,error:1,complete:1})x[n](u[n]);if(l=G(He,u,e,x)){x.readyState=1,p&&f.trigger("ajaxSend",[x,u]),u.async&&u.timeout>0&&(a=setTimeout(function(){x.abort("timeout")},u.timeout));try{b=1,l.send(v,o)}catch(S){if(!(2>b))throw S;o(-1,S)}}else o(-1,"No Transport");return x},getJSON:function(t,e,o){return nt.get(t,e,o,"json")},getScript:function(t,e){return nt.get(t,void 0,e,"script")}}),nt.each(["get","post"],function(t,e){nt[e]=function(t,o,i,n){return nt.isFunction(o)&&(n=n||i,i=o,o=void 0),nt.ajax({url:t,type:e,dataType:n,data:o,success:i})}}),nt._evalUrl=function(t){return nt.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},nt.fn.extend({wrapAll:function(t){if(nt.isFunction(t))return this.each(function(e){nt(this).wrapAll(t.call(this,e))});if(this[0]){var e=nt(t,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstChild&&1===t.firstChild.nodeType;)t=t.firstChild;return t}).append(this)}return this},wrapInner:function(t){return this.each(nt.isFunction(t)?function(e){nt(this).wrapInner(t.call(this,e))}:function(){var e=nt(this),o=e.contents();o.length?o.wrapAll(t):e.append(t)})},wrap:function(t){var e=nt.isFunction(t);return this.each(function(o){nt(this).wrapAll(e?t.call(this,o):t)})},unwrap:function(){return this.parent().each(function(){nt.nodeName(this,"body")||nt(this).replaceWith(this.childNodes)}).end()}}),nt.expr.filters.hidden=function(t){return t.offsetWidth<=0&&t.offsetHeight<=0||!ot.reliableHiddenOffsets()&&"none"===(t.style&&t.style.display||nt.css(t,"display"))},nt.expr.filters.visible=function(t){return!nt.expr.filters.hidden(t)};var Ke=/%20/g,ze=/\[\]$/,Ve=/\r?\n/g,Ye=/^(?:submit|button|image|reset|file)$/i,Ze=/^(?:input|select|textarea|keygen)/i;nt.param=function(t,e){var o,i=[],n=function(t,e){e=nt.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=nt.ajaxSettings&&nt.ajaxSettings.traditional),nt.isArray(t)||t.jquery&&!nt.isPlainObject(t))nt.each(t,function(){n(this.name,this.value)});else for(o in t)X(o,t[o],e,n);return i.join("&").replace(Ke,"+")},nt.fn.extend({serialize:function(){return nt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=nt.prop(this,"elements");return t?nt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!nt(this).is(":disabled")&&Ze.test(this.nodeName)&&!Ye.test(t)&&(this.checked||!Rt.test(t))}).map(function(t,e){var o=nt(this).val();return null==o?null:nt.isArray(o)?nt.map(o,function(t){return{name:e.name,value:t.replace(Ve,"\r\n")}}):{name:e.name,value:o.replace(Ve,"\r\n")}}).get()}}),nt.ajaxSettings.xhr=void 0!==t.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&W()||K()}:W;var _e=0,Je={},Qe=nt.ajaxSettings.xhr();t.attachEvent&&t.attachEvent("onunload",function(){for(var t in Je)Je[t](void 0,!0)}),ot.cors=!!Qe&&"withCredentials"in Qe,Qe=ot.ajax=!!Qe,Qe&&nt.ajaxTransport(function(t){if(!t.crossDomain||ot.cors){var e;return{send:function(o,i){var n,r=t.xhr(),s=++_e;if(r.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(n in t.xhrFields)r[n]=t.xhrFields[n];t.mimeType&&r.overrideMimeType&&r.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(n in o)void 0!==o[n]&&r.setRequestHeader(n,o[n]+"");r.send(t.hasContent&&t.data||null),e=function(o,n){var a,p,l;if(e&&(n||4===r.readyState))if(delete Je[s],e=void 0,r.onreadystatechange=nt.noop,n)4!==r.readyState&&r.abort();else{l={},a=r.status,"string"==typeof r.responseText&&(l.text=r.responseText);try{p=r.statusText}catch(h){p=""}a||!t.isLocal||t.crossDomain?1223===a&&(a=204):a=l.text?200:404}l&&i(a,p,l,r.getAllResponseHeaders())},t.async?4===r.readyState?setTimeout(e):r.onreadystatechange=Je[s]=e:e()},abort:function(){e&&e(void 0,!0)}}}}),nt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(t){return nt.globalEval(t),t}}}),nt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET",t.global=!1)}),nt.ajaxTransport("script",function(t){if(t.crossDomain){var e,o=yt.head||nt("head")[0]||yt.documentElement;return{send:function(i,n){e=yt.createElement("script"),e.async=!0,t.scriptCharset&&(e.charset=t.scriptCharset),e.src=t.url,e.onload=e.onreadystatechange=function(t,o){(o||!e.readyState||/loaded|complete/.test(e.readyState))&&(e.onload=e.onreadystatechange=null,e.parentNode&&e.parentNode.removeChild(e),e=null,o||n(200,"success"))},o.insertBefore(e,o.firstChild)},abort:function(){e&&e.onload(void 0,!0)}}}});var to=[],eo=/(=)\?(?=&|$)|\?\?/;nt.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=to.pop()||nt.expando+"_"+Re++;return this[t]=!0,t}}),nt.ajaxPrefilter("json jsonp",function(e,o,i){var n,r,s,a=e.jsonp!==!1&&(eo.test(e.url)?"url":"string"==typeof e.data&&!(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&eo.test(e.data)&&"data");
+return a||"jsonp"===e.dataTypes[0]?(n=e.jsonpCallback=nt.isFunction(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(eo,"$1"+n):e.jsonp!==!1&&(e.url+=(je.test(e.url)?"&":"?")+e.jsonp+"="+n),e.converters["script json"]=function(){return s||nt.error(n+" was not called"),s[0]},e.dataTypes[0]="json",r=t[n],t[n]=function(){s=arguments},i.always(function(){t[n]=r,e[n]&&(e.jsonpCallback=o.jsonpCallback,to.push(n)),s&&nt.isFunction(r)&&r(s[0]),s=r=void 0}),"script"):void 0}),nt.parseHTML=function(t,e,o){if(!t||"string"!=typeof t)return null;"boolean"==typeof e&&(o=e,e=!1),e=e||yt;var i=ut.exec(t),n=!o&&[];return i?[e.createElement(i[1])]:(i=nt.buildFragment([t],e,n),n&&n.length&&nt(n).remove(),nt.merge([],i.childNodes))};var oo=nt.fn.load;nt.fn.load=function(t,e,o){if("string"!=typeof t&&oo)return oo.apply(this,arguments);var i,n,r,s=this,a=t.indexOf(" ");return a>=0&&(i=nt.trim(t.slice(a,t.length)),t=t.slice(0,a)),nt.isFunction(e)?(o=e,e=void 0):e&&"object"==typeof e&&(r="POST"),s.length>0&&nt.ajax({url:t,type:r,dataType:"html",data:e}).done(function(t){n=arguments,s.html(i?nt("<div>").append(nt.parseHTML(t)).find(i):t)}).complete(o&&function(t,e){s.each(o,n||[t.responseText,e,t])}),this},nt.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){nt.fn[e]=function(t){return this.on(e,t)}}),nt.expr.filters.animated=function(t){return nt.grep(nt.timers,function(e){return t===e.elem}).length};var io=t.document.documentElement;nt.offset={setOffset:function(t,e,o){var i,n,r,s,a,p,l,h=nt.css(t,"position"),u=nt(t),c={};"static"===h&&(t.style.position="relative"),a=u.offset(),r=nt.css(t,"top"),p=nt.css(t,"left"),l=("absolute"===h||"fixed"===h)&&nt.inArray("auto",[r,p])>-1,l?(i=u.position(),s=i.top,n=i.left):(s=parseFloat(r)||0,n=parseFloat(p)||0),nt.isFunction(e)&&(e=e.call(t,o,a)),null!=e.top&&(c.top=e.top-a.top+s),null!=e.left&&(c.left=e.left-a.left+n),"using"in e?e.using.call(t,c):u.css(c)}},nt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){nt.offset.setOffset(this,t,e)});var e,o,i={top:0,left:0},n=this[0],r=n&&n.ownerDocument;return r?(e=r.documentElement,nt.contains(e,n)?(typeof n.getBoundingClientRect!==Tt&&(i=n.getBoundingClientRect()),o=z(r),{top:i.top+(o.pageYOffset||e.scrollTop)-(e.clientTop||0),left:i.left+(o.pageXOffset||e.scrollLeft)-(e.clientLeft||0)}):i):void 0},position:function(){if(this[0]){var t,e,o={top:0,left:0},i=this[0];return"fixed"===nt.css(i,"position")?e=i.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),nt.nodeName(t[0],"html")||(o=t.offset()),o.top+=nt.css(t[0],"borderTopWidth",!0),o.left+=nt.css(t[0],"borderLeftWidth",!0)),{top:e.top-o.top-nt.css(i,"marginTop",!0),left:e.left-o.left-nt.css(i,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent||io;t&&!nt.nodeName(t,"html")&&"static"===nt.css(t,"position");)t=t.offsetParent;return t||io})}}),nt.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var o=/Y/.test(e);nt.fn[t]=function(i){return At(this,function(t,i,n){var r=z(t);return void 0===n?r?e in r?r[e]:r.document.documentElement[i]:t[i]:void(r?r.scrollTo(o?nt(r).scrollLeft():n,o?n:nt(r).scrollTop()):t[i]=n)},t,i,arguments.length,null)}}),nt.each(["top","left"],function(t,e){nt.cssHooks[e]=P(ot.pixelPosition,function(t,o){return o?(o=ee(t,e),ie.test(o)?nt(t).position()[e]+"px":o):void 0})}),nt.each({Height:"height",Width:"width"},function(t,e){nt.each({padding:"inner"+t,content:e,"":"outer"+t},function(o,i){nt.fn[i]=function(i,n){var r=arguments.length&&(o||"boolean"!=typeof i),s=o||(i===!0||n===!0?"margin":"border");return At(this,function(e,o,i){var n;return nt.isWindow(e)?e.document.documentElement["client"+t]:9===e.nodeType?(n=e.documentElement,Math.max(e.body["scroll"+t],n["scroll"+t],e.body["offset"+t],n["offset"+t],n["client"+t])):void 0===i?nt.css(e,o,s):nt.style(e,o,i,s)},e,r?i:void 0,r,null)}})}),nt.fn.size=function(){return this.length},nt.fn.andSelf=nt.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return nt});var no=t.jQuery,ro=t.$;return nt.noConflict=function(e){return t.$===nt&&(t.$=ro),e&&t.jQuery===nt&&(t.jQuery=no),nt},typeof e===Tt&&(t.jQuery=t.$=nt),nt}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var o in e)if(void 0!==t.style[o])return{end:e[o]};return!1}t.fn.emulateTransitionEnd=function(e){var o=!1,i=this;t(this).one("bsTransitionEnd",function(){o=!0});var n=function(){o||t(i).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){return t(e.target).is(this)?e.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.alert");n||o.data("bs.alert",n=new i(this)),"string"==typeof e&&n[e].call(o)})}var o='[data-dismiss="alert"]',i=function(e){t(e).on("click",o,this.close)};i.VERSION="3.3.4",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function o(){s.detach().trigger("closed.bs.alert").remove()}var n=t(this),r=n.attr("data-target");r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var s=t(r);e&&e.preventDefault(),s.length||(s=n.closest(".alert")),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",o,i.prototype.close)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.button"),r="object"==typeof e&&e;n||i.data("bs.button",n=new o(this,r)),"toggle"==e?n.toggle():e&&n.setState(e)})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.isLoading=!1};o.VERSION="3.3.4",o.DEFAULTS={loadingText:"loading..."},o.prototype.setState=function(e){var o="disabled",i=this.$element,n=i.is("input")?"val":"html",r=i.data();e+="Text",null==r.resetText&&i.data("resetText",i[n]()),setTimeout(t.proxy(function(){i[n](null==r[e]?this.options[e]:r[e]),"loadingText"==e?(this.isLoading=!0,i.addClass(o).attr(o,o)):this.isLoading&&(this.isLoading=!1,i.removeClass(o).removeAttr(o))},this),0)},o.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var o=this.$element.find("input");"radio"==o.prop("type")&&(o.prop("checked")&&this.$element.hasClass("active")?t=!1:e.find(".active").removeClass("active")),t&&o.prop("checked",!this.$element.hasClass("active")).trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active"));t&&this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=e,t.fn.button.Constructor=o,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(o){var i=t(o.target);i.hasClass("btn")||(i=i.closest(".btn")),e.call(i,"toggle"),o.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.carousel"),r=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e),s="string"==typeof e?e:r.slide;n||i.data("bs.carousel",n=new o(this,r)),"number"==typeof e?n.to(e):s?n[s]():r.interval&&n.pause().cycle()})}var o=function(e,o){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=o,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};o.VERSION="3.3.4",o.TRANSITION_DURATION=600,o.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},o.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},o.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},o.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},o.prototype.getItemForDirection=function(t,e){var o=this.getItemIndex(e),i="prev"==t&&0===o||"next"==t&&o==this.$items.length-1;if(i&&!this.options.wrap)return e;var n="prev"==t?-1:1,r=(o+n)%this.$items.length;return this.$items.eq(r)},o.prototype.to=function(t){var e=this,o=this.getItemIndex(this.$active=this.$element.find(".item.active"));return t>this.$items.length-1||0>t?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):o==t?this.pause().cycle():this.slide(t>o?"next":"prev",this.$items.eq(t))},o.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},o.prototype.next=function(){return this.sliding?void 0:this.slide("next")},o.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},o.prototype.slide=function(e,i){var n=this.$element.find(".item.active"),r=i||this.getItemForDirection(e,n),s=this.interval,a="next"==e?"left":"right",p=this;if(r.hasClass("active"))return this.sliding=!1;var l=r[0],h=t.Event("slide.bs.carousel",{relatedTarget:l,direction:a});if(this.$element.trigger(h),!h.isDefaultPrevented()){if(this.sliding=!0,s&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var u=t(this.$indicators.children()[this.getItemIndex(r)]);u&&u.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:l,direction:a});return t.support.transition&&this.$element.hasClass("slide")?(r.addClass(e),r[0].offsetWidth,n.addClass(a),r.addClass(a),n.one("bsTransitionEnd",function(){r.removeClass([e,a].join(" ")).addClass("active"),n.removeClass(["active",a].join(" ")),p.sliding=!1,setTimeout(function(){p.$element.trigger(c)},0)}).emulateTransitionEnd(o.TRANSITION_DURATION)):(n.removeClass("active"),r.addClass("active"),this.sliding=!1,this.$element.trigger(c)),s&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=o,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this};var n=function(o){var i,n=t(this),r=t(n.attr("data-target")||(i=n.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""));if(r.hasClass("carousel")){var s=t.extend({},r.data(),n.data()),a=n.attr("data-slide-to");a&&(s.interval=!1),e.call(r,s),a&&r.data("bs.carousel").to(a),o.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var o=t(this);e.call(o,o.data())})})}(jQuery),+function(t){"use strict";function e(e){var o,i=e.attr("data-target")||(o=e.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,"");return t(i)}function o(e){return this.each(function(){var o=t(this),n=o.data("bs.collapse"),r=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e);!n&&r.toggle&&/show|hide/.test(e)&&(r.toggle=!1),n||o.data("bs.collapse",n=new i(this,r)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};i.VERSION="3.3.4",i.TRANSITION_DURATION=350,i.DEFAULTS={toggle:!0},i.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},i.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"),e&&e.transitioning))){var r=t.Event("show.bs.collapse");if(this.$element.trigger(r),!r.isDefaultPrevented()){n&&n.length&&(o.call(n,"hide"),e||n.data("bs.collapse",null));var s=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[s](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var a=function(){this.$element.removeClass("collapsing").addClass("collapse in")[s](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return a.call(this);var p=t.camelCase(["scroll",s].join("-"));this.$element.one("bsTransitionEnd",t.proxy(a,this)).emulateTransitionEnd(i.TRANSITION_DURATION)[s](this.$element[0][p])}}}},i.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var o=this.dimension();this.$element[o](this.$element[o]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return t.support.transition?void this.$element[o](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(i.TRANSITION_DURATION):n.call(this)}}},i.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},i.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(o,i){var n=t(i);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},i.prototype.addAriaAndCollapsedClass=function(t,e){var o=t.hasClass("in");t.attr("aria-expanded",o),e.toggleClass("collapsed",!o).attr("aria-expanded",o)};var n=t.fn.collapse;t.fn.collapse=o,t.fn.collapse.Constructor=i,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(i){var n=t(this);n.attr("data-target")||i.preventDefault();var r=e(n),s=r.data("bs.collapse"),a=s?"toggle":n.data();o.call(r,a)})}(jQuery),+function(t){"use strict";function e(e){e&&3===e.which||(t(n).remove(),t(r).each(function(){var i=t(this),n=o(i),r={relatedTarget:this};n.hasClass("open")&&(n.trigger(e=t.Event("hide.bs.dropdown",r)),e.isDefaultPrevented()||(i.attr("aria-expanded","false"),n.removeClass("open").trigger("hidden.bs.dropdown",r)))}))}function o(e){var o=e.attr("data-target");o||(o=e.attr("href"),o=o&&/#[A-Za-z]/.test(o)&&o.replace(/.*(?=#[^\s]*$)/,""));var i=o&&t(o);return i&&i.length?i:e.parent()}function i(e){return this.each(function(){var o=t(this),i=o.data("bs.dropdown");i||o.data("bs.dropdown",i=new s(this)),"string"==typeof e&&i[e].call(o)})}var n=".dropdown-backdrop",r='[data-toggle="dropdown"]',s=function(e){t(e).on("click.bs.dropdown",this.toggle)};s.VERSION="3.3.4",s.prototype.toggle=function(i){var n=t(this);if(!n.is(".disabled, :disabled")){var r=o(n),s=r.hasClass("open");if(e(),!s){"ontouchstart"in document.documentElement&&!r.closest(".navbar-nav").length&&t('<div class="dropdown-backdrop"/>').insertAfter(t(this)).on("click",e);var a={relatedTarget:this};if(r.trigger(i=t.Event("show.bs.dropdown",a)),i.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),r.toggleClass("open").trigger("shown.bs.dropdown",a)}return!1}},s.prototype.keydown=function(e){if(/(38|40|27|32)/.test(e.which)&&!/input|textarea/i.test(e.target.tagName)){var i=t(this);if(e.preventDefault(),e.stopPropagation(),!i.is(".disabled, :disabled")){var n=o(i),s=n.hasClass("open");if(!s&&27!=e.which||s&&27==e.which)return 27==e.which&&n.find(r).trigger("focus"),i.trigger("click");var a=" li:not(.disabled):visible a",p=n.find('[role="menu"]'+a+', [role="listbox"]'+a);if(p.length){var l=p.index(e.target);38==e.which&&l>0&&l--,40==e.which&&l<p.length-1&&l++,~l||(l=0),p.eq(l).trigger("focus")}}}};var a=t.fn.dropdown;t.fn.dropdown=i,t.fn.dropdown.Constructor=s,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=a,this},t(document).on("click.bs.dropdown.data-api",e).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",r,s.prototype.toggle).on("keydown.bs.dropdown.data-api",r,s.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="menu"]',s.prototype.keydown).on("keydown.bs.dropdown.data-api",'[role="listbox"]',s.prototype.keydown)}(jQuery),+function(t){"use strict";function e(e,i){return this.each(function(){var n=t(this),r=n.data("bs.modal"),s=t.extend({},o.DEFAULTS,n.data(),"object"==typeof e&&e);r||n.data("bs.modal",r=new o(this,s)),"string"==typeof e?r[e](i):s.show&&r.show(i)})}var o=function(e,o){this.options=o,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};o.VERSION="3.3.4",o.TRANSITION_DURATION=300,o.BACKDROP_TRANSITION_DURATION=150,o.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},o.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},o.prototype.show=function(e){var i=this,n=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(n),this.isShown||n.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){i.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(i.$element)&&(i.ignoreBackdropClick=!0)})}),this.backdrop(function(){var n=t.support.transition&&i.$element.hasClass("fade");i.$element.parent().length||i.$element.appendTo(i.$body),i.$element.show().scrollTop(0),i.adjustDialog(),n&&i.$element[0].offsetWidth,i.$element.addClass("in").attr("aria-hidden",!1),i.enforceFocus();var r=t.Event("shown.bs.modal",{relatedTarget:e});n?i.$dialog.one("bsTransitionEnd",function(){i.$element.trigger("focus").trigger(r)}).emulateTransitionEnd(o.TRANSITION_DURATION):i.$element.trigger("focus").trigger(r)}))},o.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(o.TRANSITION_DURATION):this.hideModal())},o.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},o.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},o.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},o.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},o.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},o.prototype.backdrop=function(e){var i=this,n=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var r=t.support.transition&&n;if(this.$backdrop=t('<div class="modal-backdrop '+n+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),r&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;r?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(o.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var s=function(){i.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",s).emulateTransitionEnd(o.BACKDROP_TRANSITION_DURATION):s()}else e&&e()},o.prototype.handleUpdate=function(){this.adjustDialog()},o.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},o.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},o.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},o.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},o.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},o.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var i=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=o,t.fn.modal.noConflict=function(){return t.fn.modal=i,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(o){var i=t(this),n=i.attr("href"),r=t(i.attr("data-target")||n&&n.replace(/.*(?=#[^\s]+$)/,"")),s=r.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(n)&&n},r.data(),i.data());i.is("a")&&o.preventDefault(),r.one("show.bs.modal",function(t){t.isDefaultPrevented()||r.one("hidden.bs.modal",function(){i.is(":visible")&&i.trigger("focus")})}),e.call(r,s,this)})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.tooltip"),r="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||i.data("bs.tooltip",n=new o(this,r)),"string"==typeof e&&n[e]())})}var o=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.init("tooltip",t,e)};o.VERSION="3.3.4",o.TRANSITION_DURATION=150,o.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},o.prototype.init=function(e,o,i){if(this.enabled=!0,this.type=e,this.$element=t(o),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&t(this.options.viewport.selector||this.options.viewport),this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),r=n.length;r--;){var s=n[r];if("click"==s)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",p="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(p+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},o.prototype.getDelegateOptions=function(){var e={},o=this.getDefaults();return this._options&&t.each(this._options,function(t,i){o[t]!=i&&(e[t]=i)}),e},o.prototype.enter=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o&&o.$tip&&o.$tip.is(":visible")?void(o.hoverState="in"):(o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="in",o.options.delay&&o.options.delay.show?void(o.timeout=setTimeout(function(){"in"==o.hoverState&&o.show()},o.options.delay.show)):o.show())},o.prototype.leave=function(e){var o=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o)),clearTimeout(o.timeout),o.hoverState="out",o.options.delay&&o.options.delay.hide?void(o.timeout=setTimeout(function(){"out"==o.hoverState&&o.hide()},o.options.delay.hide)):o.hide()},o.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var i=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!i)return;var n=this,r=this.tip(),s=this.getUID(this.type);this.setContent(),r.attr("id",s),this.$element.attr("aria-describedby",s),this.options.animation&&r.addClass("fade");var a="function"==typeof this.options.placement?this.options.placement.call(this,r[0],this.$element[0]):this.options.placement,p=/\s?auto?\s?/i,l=p.test(a);l&&(a=a.replace(p,"")||"top"),r.detach().css({top:0,left:0,display:"block"}).addClass(a).data("bs."+this.type,this),this.options.container?r.appendTo(this.options.container):r.insertAfter(this.$element);var h=this.getPosition(),u=r[0].offsetWidth,c=r[0].offsetHeight;if(l){var f=a,y=this.options.container?t(this.options.container):this.$element.parent(),d=this.getPosition(y);a="bottom"==a&&h.bottom+c>d.bottom?"top":"top"==a&&h.top-c<d.top?"bottom":"right"==a&&h.right+u>d.width?"left":"left"==a&&h.left-u<d.left?"right":a,r.removeClass(f).addClass(a)}var g=this.getCalculatedOffset(a,h,u,c);this.applyPlacement(g,a);var v=function(){var t=n.hoverState;n.$element.trigger("shown.bs."+n.type),n.hoverState=null,"out"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass("fade")?r.one("bsTransitionEnd",v).emulateTransitionEnd(o.TRANSITION_DURATION):v()}},o.prototype.applyPlacement=function(e,o){var i=this.tip(),n=i[0].offsetWidth,r=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),e.top=e.top+s,e.left=e.left+a,t.offset.setOffset(i[0],t.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),i.addClass("in");var p=i[0].offsetWidth,l=i[0].offsetHeight;"top"==o&&l!=r&&(e.top=e.top+r-l);var h=this.getViewportAdjustedDelta(o,e,p,l);h.left?e.left+=h.left:e.top+=h.top;var u=/top|bottom/.test(o),c=u?2*h.left-n+p:2*h.top-r+l,f=u?"offsetWidth":"offsetHeight";i.offset(e),this.replaceArrow(c,i[0][f],u)},o.prototype.replaceArrow=function(t,e,o){this.arrow().css(o?"left":"top",50*(1-t/e)+"%").css(o?"top":"left","")},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},o.prototype.hide=function(e){function i(){"in"!=n.hoverState&&r.detach(),n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),e&&e()}var n=this,r=t(this.$tip),s=t.Event("hide.bs."+this.type);return this.$element.trigger(s),s.isDefaultPrevented()?void 0:(r.removeClass("in"),t.support.transition&&r.hasClass("fade")?r.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i(),this.hoverState=null,this)},o.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},o.prototype.hasContent=function(){return this.getTitle()},o.prototype.getPosition=function(e){e=e||this.$element;var o=e[0],i="BODY"==o.tagName,n=o.getBoundingClientRect();null==n.width&&(n=t.extend({},n,{width:n.right-n.left,height:n.bottom-n.top}));var r=i?{top:0,left:0}:e.offset(),s={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},a=i?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},n,s,a,r)},o.prototype.getCalculatedOffset=function(t,e,o,i){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-o/2}:"top"==t?{top:e.top-i,left:e.left+e.width/2-o/2}:"left"==t?{top:e.top+e.height/2-i/2,left:e.left-o}:{top:e.top+e.height/2-i/2,left:e.left+e.width}},o.prototype.getViewportAdjustedDelta=function(t,e,o,i){var n={top:0,left:0};if(!this.$viewport)return n;var r=this.options.viewport&&this.options.viewport.padding||0,s=this.getPosition(this.$viewport);if(/right|left/.test(t)){var a=e.top-r-s.scroll,p=e.top+r-s.scroll+i;a<s.top?n.top=s.top-a:p>s.top+s.height&&(n.top=s.top+s.height-p)}else{var l=e.left-r,h=e.left+r+o;l<s.left?n.left=s.left-l:h>s.width&&(n.left=s.left+s.width-h)}return n},o.prototype.getTitle=function(){var t,e=this.$element,o=this.options;return t=e.attr("data-original-title")||("function"==typeof o.title?o.title.call(e[0]):o.title)},o.prototype.getUID=function(t){do t+=~~(1e6*Math.random());while(document.getElementById(t));return t},o.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},o.prototype.enable=function(){this.enabled=!0},o.prototype.disable=function(){this.enabled=!1},o.prototype.toggleEnabled=function(){this.enabled=!this.enabled},o.prototype.toggle=function(e){var o=this;e&&(o=t(e.currentTarget).data("bs."+this.type),o||(o=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,o))),o.tip().hasClass("in")?o.leave(o):o.enter(o)},o.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type)})};var i=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=o,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.popover"),r="object"==typeof e&&e;(n||!/destroy|hide/.test(e))&&(n||i.data("bs.popover",n=new o(this,r)),
+"string"==typeof e&&n[e]())})}var o=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");o.VERSION="3.3.4",o.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),o.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),o.prototype.constructor=o,o.prototype.getDefaults=function(){return o.DEFAULTS},o.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),o=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof o?"html":"append":"text"](o),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},o.prototype.hasContent=function(){return this.getTitle()||this.getContent()},o.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},o.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=o,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),+function(t){"use strict";function e(o,i){this.$body=t(document.body),this.$scrollElement=t(t(o).is(document.body)?window:o),this.options=t.extend({},e.DEFAULTS,i),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function o(o){return this.each(function(){var i=t(this),n=i.data("bs.scrollspy"),r="object"==typeof o&&o;n||i.data("bs.scrollspy",n=new e(this,r)),"string"==typeof o&&n[o]()})}e.VERSION="3.3.4",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,o="offset",i=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(o="position",i=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),r=/^#./.test(n)&&t(n);return r&&r.length&&r.is(":visible")&&[[r[o]().top+i,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,o=this.getScrollHeight(),i=this.options.offset+o-this.$scrollElement.height(),n=this.offsets,r=this.targets,s=this.activeTarget;if(this.scrollHeight!=o&&this.refresh(),e>=i)return s!=(t=r[r.length-1])&&this.activate(t);if(s&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)s!=r[t]&&e>=n[t]&&(void 0===n[t+1]||e<n[t+1])&&this.activate(r[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var o=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',i=t(o).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var i=t.fn.scrollspy;t.fn.scrollspy=o,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);o.call(e,e.data())})})}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.tab");n||i.data("bs.tab",n=new o(this)),"string"==typeof e&&n[e]()})}var o=function(e){this.element=t(e)};o.VERSION="3.3.4",o.TRANSITION_DURATION=150,o.prototype.show=function(){var e=this.element,o=e.closest("ul:not(.dropdown-menu)"),i=e.data("target");if(i||(i=e.attr("href"),i=i&&i.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=o.find(".active:last a"),r=t.Event("hide.bs.tab",{relatedTarget:e[0]}),s=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(r),e.trigger(s),!s.isDefaultPrevented()&&!r.isDefaultPrevented()){var a=t(i);this.activate(e.closest("li"),o),this.activate(a,a.parent(),function(){n.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},o.prototype.activate=function(e,i,n){function r(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),a?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var s=i.find("> .active"),a=n&&t.support.transition&&(s.length&&s.hasClass("fade")||!!i.find("> .fade").length);s.length&&a?s.one("bsTransitionEnd",r).emulateTransitionEnd(o.TRANSITION_DURATION):r(),s.removeClass("in")};var i=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=o,t.fn.tab.noConflict=function(){return t.fn.tab=i,this};var n=function(o){o.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),+function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.affix"),r="object"==typeof e&&e;n||i.data("bs.affix",n=new o(this,r)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.options=t.extend({},o.DEFAULTS,i),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};o.VERSION="3.3.4",o.RESET="affix affix-top affix-bottom",o.DEFAULTS={offset:0,target:window},o.prototype.getState=function(t,e,o,i){var n=this.$target.scrollTop(),r=this.$element.offset(),s=this.$target.height();if(null!=o&&"top"==this.affixed)return o>n&&"top";if("bottom"==this.affixed)return null!=o?!(n+this.unpin<=r.top)&&"bottom":!(t-i>=n+s)&&"bottom";var a=null==this.affixed,p=a?n:r.top,l=a?s:e;return null!=o&&o>=n?"top":null!=i&&p+l>=t-i&&"bottom"},o.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(o.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},o.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},o.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),i=this.options.offset,n=i.top,r=i.bottom,s=t(document.body).height();"object"!=typeof i&&(r=n=i),"function"==typeof n&&(n=i.top(this.$element)),"function"==typeof r&&(r=i.bottom(this.$element));var a=this.getState(s,e,n,r);if(this.affixed!=a){null!=this.unpin&&this.$element.css("top","");var p="affix"+(a?"-"+a:""),l=t.Event(p+".bs.affix");if(this.$element.trigger(l),l.isDefaultPrevented())return;this.affixed=a,this.unpin="bottom"==a?this.getPinnedOffset():null,this.$element.removeClass(o.RESET).addClass(p).trigger(p.replace("affix","affixed")+".bs.affix")}"bottom"==a&&this.$element.offset({top:s-e-r})}};var i=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=o,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var o=t(this),i=o.data();i.offset=i.offset||{},null!=i.offsetBottom&&(i.offset.bottom=i.offsetBottom),null!=i.offsetTop&&(i.offset.top=i.offsetTop),e.call(o,i)})})}(jQuery),function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.ol=e()}(this,function(){function t(t){return void 0!==t}function e(e,o,i){e=e.split("."),i=i||sm,e[0]in i||!i.execScript||i.execScript("var "+e[0]);for(var n;e.length&&(n=e.shift());)!e.length&&t(o)?i[n]=o:i=i[n]?i[n]:i[n]={}}function o(){}function i(t){t.Ia=function(){return t.jg?t.jg:t.jg=new t}}function n(t){var e=typeof t;if("object"==e){if(!t)return"null";if(t instanceof Array)return"array";if(t instanceof Object)return e;var o=Object.prototype.toString.call(t);if("[object Window]"==o)return"object";if("[object Array]"==o||"number"==typeof t.length&&"undefined"!=typeof t.splice&&"undefined"!=typeof t.propertyIsEnumerable&&!t.propertyIsEnumerable("splice"))return"array";if("[object Function]"==o||"undefined"!=typeof t.call&&"undefined"!=typeof t.propertyIsEnumerable&&!t.propertyIsEnumerable("call"))return"function"}else if("function"==e&&"undefined"==typeof t.call)return"object";return e}function r(t){return null===t}function s(t){return"array"==n(t)}function a(t){var e=n(t);return"array"==e||"object"==e&&"number"==typeof t.length}function p(t){return"string"==typeof t}function l(t){return"number"==typeof t}function h(t){return"function"==n(t)}function u(t){var e=typeof t;return"object"==e&&null!=t||"function"==e}function c(t){return t[am]||(t[am]=++pm)}function f(t,e,o){return t.call.apply(t.bind,arguments)}function y(t,e,o){if(!t)throw Error();if(2<arguments.length){var i=Array.prototype.slice.call(arguments,2);return function(){var o=Array.prototype.slice.call(arguments);return Array.prototype.unshift.apply(o,i),t.apply(e,o)}}return function(){return t.apply(e,arguments)}}function d(t,e,o){return d=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?f:y,d.apply(null,arguments)}function g(t,e){var o=Array.prototype.slice.call(arguments,1);return function(){var e=o.slice();return e.push.apply(e,arguments),t.apply(this,e)}}function v(t,e){function o(){}o.prototype=e.prototype,t.S=e.prototype,t.prototype=new o,t.prototype.constructor=t,t.Mo=function(t,o,i){for(var n=Array(arguments.length-2),r=2;r<arguments.length;r++)n[r-2]=arguments[r];return e.prototype[o].apply(t,n)}}function m(t){if(Error.captureStackTrace)Error.captureStackTrace(this,m);else{var e=Error().stack;e&&(this.stack=e)}t&&(this.message=String(t))}function b(t,e){var o=t.length-e.length;return 0<=o&&t.indexOf(e,o)==o}function w(t,e){for(var o=t.split("%s"),i="",n=Array.prototype.slice.call(arguments,1);n.length&&1<o.length;)i+=o.shift()+n.shift();return i+o.join("%s")}function x(t){return bm.test(t)?(-1!=t.indexOf("&")&&(t=t.replace(fm,"&amp;")),-1!=t.indexOf("<")&&(t=t.replace(ym,"&lt;")),-1!=t.indexOf(">")&&(t=t.replace(dm,"&gt;")),-1!=t.indexOf('"')&&(t=t.replace(gm,"&quot;")),-1!=t.indexOf("'")&&(t=t.replace(vm,"&#39;")),-1!=t.indexOf("\0")&&(t=t.replace(mm,"&#0;")),t):t}function S(e){e=t(void 0)?e.toFixed(void 0):String(e);var o=e.indexOf(".");return-1==o&&(o=e.length),o=Math.max(0,2-o),Array(o+1).join("0")+e}function T(t,e){for(var o=0,i=cm(String(t)).split("."),n=cm(String(e)).split("."),r=Math.max(i.length,n.length),s=0;0==o&&s<r;s++){var a=i[s]||"",p=n[s]||"",l=RegExp("(\\d*)(\\D*)","g"),h=RegExp("(\\d*)(\\D*)","g");do{var u=l.exec(a)||["","",""],c=h.exec(p)||["","",""];if(0==u[0].length&&0==c[0].length)break;o=C(0==u[1].length?0:parseInt(u[1],10),0==c[1].length?0:parseInt(c[1],10))||C(0==u[2].length,0==c[2].length)||C(u[2],c[2])}while(0==o)}return o}function C(t,e){return t<e?-1:t>e?1:0}function M(t,e){return wm.indexOf.call(t,e,void 0)}function P(t,e,o){wm.forEach.call(t,e,o)}function E(t,e){return wm.filter.call(t,e,void 0)}function k(t,e,o){return wm.map.call(t,e,o)}function A(t,e){return wm.some.call(t,e,void 0)}function R(t,e){var o=j(t,e,void 0);return 0>o?null:p(t)?t.charAt(o):t[o]}function j(t,e,o){for(var i=t.length,n=p(t)?t.split(""):t,r=0;r<i;r++)if(r in n&&e.call(o,n[r],r,t))return r;return-1}function L(t,e){return 0<=M(t,e)}function N(t,e){var o,i=M(t,e);return(o=0<=i)&&wm.splice.call(t,i,1),o}function I(t){return wm.concat.apply(wm,arguments)}function D(t){var e=t.length;if(0<e){for(var o=Array(e),i=0;i<e;i++)o[i]=t[i];return o}return[]}function F(t,e){for(var o=1;o<arguments.length;o++){var i=arguments[o];if(a(i)){var n=t.length||0,r=i.length||0;t.length=n+r;for(var s=0;s<r;s++)t[n+s]=i[s]}else t.push(i)}}function O(t,e,o,i){wm.splice.apply(t,B(arguments,1))}function B(t,e,o){return 2>=arguments.length?wm.slice.call(t,e):wm.slice.call(t,e,o)}function U(t,e){t.sort(e||q)}function G(t,e){if(!a(t)||!a(e)||t.length!=e.length)return!1;for(var o=t.length,i=$,n=0;n<o;n++)if(!i(t[n],e[n]))return!1;return!0}function q(t,e){return t>e?1:t<e?-1:0}function $(t,e){return t===e}function H(t){for(var e=[],o=0;o<arguments.length;o++){var i=arguments[o];if(s(i))for(var n=0;n<i.length;n+=8192)for(var r=H.apply(null,B(i,n,n+8192)),a=0;a<r.length;a++)e.push(r[a]);else e.push(i)}return e}function X(t){return-1!=um.indexOf(t)}function W(t,e,o){for(var i in t)e.call(o,t[i],i,t)}function K(t,e){for(var o in t)if(e.call(void 0,t[o],o,t))return!0;return!1}function z(t){var e,o=0;for(e in t)o++;return o}function V(t){var e,o=[],i=0;for(e in t)o[i++]=t[e];return o}function Y(t){var e,o=[],i=0;for(e in t)o[i++]=e;return o}function Z(t,e){return e in t}function _(t,e){for(var o in t)if(t[o]==e)return!0;return!1}function J(t,e){for(var o in t)if(e.call(void 0,t[o],o,t))return o}function Q(t){for(var e in t)return!1;return!0}function tt(t){for(var e in t)delete t[e]}function et(t,e){e in t&&delete t[e]}function ot(t,e,o){return e in t?t[e]:o}function it(t,e){var o=[];return e in t?t[e]:t[e]=o}function nt(t){var e,o={};for(e in t)o[e]=t[e];return o}function rt(t,e){for(var o,i,n=1;n<arguments.length;n++){i=arguments[n];for(o in i)t[o]=i[o];for(var r=0;r<Tm.length;r++)o=Tm[r],Object.prototype.hasOwnProperty.call(i,o)&&(t[o]=i[o])}}function st(t){var e=arguments.length;if(1==e&&s(arguments[0]))return st.apply(null,arguments[0]);for(var o={},i=0;i<e;i++)o[arguments[i]]=!0;return o}function at(){var t=sm.document;return t?t.documentMode:void 0}function pt(t){return Lm[t]||(Lm[t]=0<=T(jm,t))}function lt(t,e,o){return Math.min(Math.max(t,e),o)}function ht(t,e){var o=t%e;return 0>o*e?o+e:o}function ut(t,e,o){return t+o*(e-t)}function ct(t){return t*Math.PI/180}function ft(e){return function(o){if(t(o))return[lt(o[0],e[0],e[2]),lt(o[1],e[1],e[3])]}}function yt(t){return t}function dt(t,e,o){var i=t.length;if(t[0]<=e)return 0;if(!(e<=t[i-1]))if(0<o){for(o=1;o<i;++o)if(t[o]<e)return o-1}else if(0>o){for(o=1;o<i;++o)if(t[o]<=e)return o}else for(o=1;o<i;++o){if(t[o]==e)return o;if(t[o]<e)return t[o-1]-e<e-t[o]?o-1:o}return i-1}function gt(e){return function(o,i,n){if(t(o))return o=dt(e,o,n),o=lt(o+i,0,e.length-1),e[o]}}function vt(e,o,i){return function(n,r,s){if(t(n))return s=0<s?0:0>s?1:.5,n=Math.floor(Math.log(o/n)/Math.log(e)+s),r=Math.max(n+r,0),t(i)&&(r=Math.min(r,i)),o/Math.pow(e,r)}}function mt(e){if(t(e))return 0}function bt(e,o){if(t(e))return e+o}function wt(e){var o=2*Math.PI/e;return function(e,i){if(t(e))return e=Math.floor((e+i)/o+.5)*o}}function xt(){var e=ct(5);return function(o,i){if(t(o))return Math.abs(o+i)<=e?0:o+i}}function St(t,e,o){this.center=t,this.resolution=e,this.rotation=o}function Tt(){0!=Um&&(Gm[c(this)]=this),this.U=this.U,this.V=this.V}function Ct(e,o){var i=g(Mt,o);e.U?i.call(void 0):(e.V||(e.V=[]),e.V.push(t(void 0)?d(i,void 0):i))}function Mt(t){t&&"function"==typeof t.Yc&&t.Yc()}function Pt(t,e){this.type=t,this.c=this.target=e,this.f=!1,this.rh=!0}function Et(t){t.fb()}function kt(t){t.preventDefault()}function At(t){return At[" "](t),t}function Rt(t,e){Pt.call(this,t?t.type:""),this.relatedTarget=this.c=this.target=null,this.q=this.e=this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0,this.l=this.d=this.a=this.i=!1,this.state=null,this.g=!1,this.b=null,t&&jt(this,t,e)}function jt(t,e,o){t.b=e;var i=t.type=e.type;if(t.target=e.target||e.srcElement,t.c=o,o=e.relatedTarget){if(Pm){var n;t:{try{At(o.nodeName),n=!0;break t}catch(r){}n=!1}n||(o=null)}}else"mouseover"==i?o=e.fromElement:"mouseout"==i&&(o=e.toElement);t.relatedTarget=o,Object.defineProperties?Object.defineProperties(t,{offsetX:{configurable:!0,enumerable:!0,get:t.Zf,set:t.bo},offsetY:{configurable:!0,enumerable:!0,get:t.$f,set:t.co}}):(t.offsetX=t.Zf(),t.offsetY=t.$f()),t.clientX=void 0!==e.clientX?e.clientX:e.pageX,t.clientY=void 0!==e.clientY?e.clientY:e.pageY,t.screenX=e.screenX||0,t.screenY=e.screenY||0,t.button=e.button,t.e=e.keyCode||0,t.q=e.charCode||("keypress"==i?e.keyCode:0),t.i=e.ctrlKey,t.a=e.altKey,t.d=e.shiftKey,t.l=e.metaKey,t.g=km?e.metaKey:e.ctrlKey,t.state=e.state,e.defaultPrevented&&t.preventDefault()}function Lt(t){return!((Fm?0!=t.b.button:"click"!=t.type&&!(t.b.button&$m[0]))||Em&&km&&t.i)}function Nt(t){return!(!t||!t[Hm])}function It(t,e,o,i,n){this.$b=t,this.b=null,this.src=e,this.type=o,this.Qc=!!i,this.Sd=n,this.key=++Xm,this.Hc=this.vd=!1}function Dt(t){t.Hc=!0,t.$b=null,t.b=null,t.src=null,t.Sd=null}function Ft(t){this.src=t,this.b={},this.a=0}function Ot(t,e){var o=e.type;if(!(o in t.b))return!1;var i=N(t.b[o],e);return i&&(Dt(e),0==t.b[o].length&&(delete t.b[o],t.a--)),i}function Bt(t,e,o,i,n){return t=t.b[e.toString()],e=-1,t&&(e=Gt(t,o,i,n)),-1<e?t[e]:null}function Ut(e,o,i){var n=t(o),r=n?o.toString():"",s=t(i);return K(e.b,function(t){for(var e=0;e<t.length;++e)if(!(n&&t[e].type!=r||s&&t[e].Qc!=i))return!0;return!1})}function Gt(t,e,o,i){for(var n=0;n<t.length;++n){var r=t[n];if(!r.Hc&&r.$b==e&&r.Qc==!!o&&r.Sd==i)return n}return-1}function qt(t,e,o,i,n){if(s(e)){for(var r=0;r<e.length;r++)qt(t,e[r],o,i,n);return null}return o=Jt(o),Nt(t)?t.Ka(e,o,i,n):$t(t,e,o,!1,i,n)}function $t(t,e,o,i,n,r){if(!e)throw Error("Invalid event type");var s=!!n,a=_t(t);return a||(t[Wm]=a=new Ft(t)),o=a.add(e,o,i,n,r),o.b?o:(i=Ht(),o.b=i,i.src=t,i.$b=o,t.addEventListener?t.addEventListener(e.toString(),i,s):t.attachEvent(zt(e.toString()),i),zm++,o)}function Ht(){var t=Zt,e=Om?function(o){return t.call(e.src,e.$b,o)}:function(o){if(o=t.call(e.src,e.$b,o),!o)return o};return e}function Xt(t,e,o,i,n){if(s(e)){for(var r=0;r<e.length;r++)Xt(t,e[r],o,i,n);return null}return o=Jt(o),Nt(t)?t.ab.add(String(e),o,!0,i,n):$t(t,e,o,!0,i,n)}function Wt(t,e,o,i,n){if(s(e))for(var r=0;r<e.length;r++)Wt(t,e[r],o,i,n);else o=Jt(o),Nt(t)?t.wf(e,o,i,n):t&&(t=_t(t))&&(e=Bt(t,e,o,!!i,n))&&Kt(e)}function Kt(t){if(l(t)||!t||t.Hc)return!1;var e=t.src;if(Nt(e))return Ot(e.ab,t);var o=t.type,i=t.b;return e.removeEventListener?e.removeEventListener(o,i,t.Qc):e.detachEvent&&e.detachEvent(zt(o),i),zm--,(o=_t(e))?(Ot(o,t),0==o.a&&(o.src=null,e[Wm]=null)):Dt(t),!0}function zt(t){return t in Km?Km[t]:Km[t]="on"+t}function Vt(t,e,o,i){var n=!0;if((t=_t(t))&&(e=t.b[e.toString()]))for(e=e.concat(),t=0;t<e.length;t++){var r=e[t];r&&r.Qc==o&&!r.Hc&&(r=Yt(r,i),n=n&&!1!==r)}return n}function Yt(t,e){var o=t.$b,i=t.Sd||t.src;return t.vd&&Kt(t),o.call(i,e)}function Zt(t,e){if(t.Hc)return!0;if(!Om){var o;if(!(o=e))t:{o=["window","event"];for(var i,n=sm;i=o.shift();){if(null==n[i]){o=null;break t}n=n[i]}o=n}if(i=o,o=new Rt(i,this),n=!0,!(0>i.keyCode||void 0!=i.returnValue)){t:{var r=!1;if(0==i.keyCode)try{i.keyCode=-1;break t}catch(s){r=!0}(r||void 0==i.returnValue)&&(i.returnValue=!0)}for(i=[],r=o.c;r;r=r.parentNode)i.push(r);for(var r=t.type,a=i.length-1;!o.f&&0<=a;a--){o.c=i[a];var p=Vt(i[a],r,!0,o),n=n&&p}for(a=0;!o.f&&a<i.length;a++)o.c=i[a],p=Vt(i[a],r,!1,o),n=n&&p}return n}return Yt(t,new Rt(e,this))}function _t(t){return t=t[Wm],t instanceof Ft?t:null}function Jt(t){return h(t)?t:(t[Vm]||(t[Vm]=function(e){return t.handleEvent(e)}),t[Vm])}function Qt(){Tt.call(this),this.ab=new Ft(this),this.rc=this,this.sa=null}function te(t,e,o,i){if(e=t.ab.b[String(e)],!e)return!0;e=e.concat();for(var n=!0,r=0;r<e.length;++r){var s=e[r];if(s&&!s.Hc&&s.Qc==o){var a=s.$b,p=s.Sd||s.src;s.vd&&Ot(t.ab,s),n=!1!==a.call(p,i)&&n}}return n&&0!=i.rh}function ee(e,o,i){return Ut(e.ab,t(o)?String(o):void 0,i)}function oe(){Qt.call(this),this.b=0}function ie(t){Kt(t)}function ne(t,e,o){Pt.call(this,t),this.key=e,this.oldValue=o}function re(e){oe.call(this),c(this),this.q={},t(e)&&this.t(e)}function se(t){return Ym.hasOwnProperty(t)?Ym[t]:Ym[t]="change:"+t}function ae(t,e,o){var i;i=se(e),t.dispatchEvent(new ne(i,e,o)),t.dispatchEvent(new ne("propertychange",e,o))}function pe(e,o,i){return t(i)||(i=[0,0]),i[0]=e[0]+2*o,i[1]=e[1]+2*o,i}function le(e,o,i){return t(i)||(i=[0,0]),i[0]=e[0]*o+.5|0,i[1]=e[1]*o+.5|0,i}function he(e,o){return s(e)?e:(t(o)?(o[0]=e,o[1]=e):o=[e,e],o)}function ue(t,e){return t[0]+=e[0],t[1]+=e[1],t}function ce(t,e){var o=t[0],i=t[1],n=e[0],r=e[1],s=n[0],n=n[1],a=r[0],r=r[1],p=a-s,l=r-n,o=0===p&&0===l?0:(p*(o-s)+l*(i-n))/(p*p+l*l||0);return 0>=o||(1<=o?(s=a,n=r):(s+=o*p,n+=o*l)),[s,n]}function fe(t,e){var o=ht(t+180,360)-180,i=Math.abs(Math.round(3600*o));return Math.floor(i/3600)+"° "+Math.floor(i/60%60)+"′ "+Math.floor(i%60)+"″ "+e.charAt(0>o?1:0)}function ye(e,o,i){return t(e)?o.replace("{x}",e[0].toFixed(i)).replace("{y}",e[1].toFixed(i)):""}function de(t,e){for(var o=!0,i=t.length-1;0<=i;--i)if(t[i]!=e[i]){o=!1;break}return o}function ge(t,e){var o=Math.cos(e),i=Math.sin(e),n=t[1]*o+t[0]*i;return t[0]=t[0]*o-t[1]*i,t[1]=n,t}function ve(t,e){var o=t[0]-e[0],i=t[1]-e[1];return o*o+i*i}function me(t,e){return ve(t,ce(t,e))}function be(t,e){return ye(t,"{x}, {y}",e)}function we(t){this.length=t.length||t;for(var e=0;e<this.length;e++)this[e]=t[e]||0}function xe(t){this.length=t.length||t;for(var e=0;e<this.length;e++)this[e]=t[e]||0}function Se(t,e,o,i,n){t[0]=e,t[1]=o,t[2]=i,t[3]=n}function Te(){var t=Array(16);return Me(t,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),t}function Ce(){var t=Array(16);return Me(t,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),t}function Me(t,e,o,i,n,r,s,a,p,l,h,u,c,f,y,d,g){t[0]=e,t[1]=o,t[2]=i,t[3]=n,t[4]=r,t[5]=s,t[6]=a,t[7]=p,t[8]=l,t[9]=h,t[10]=u,t[11]=c,t[12]=f,t[13]=y,t[14]=d,t[15]=g}function Pe(t,e){t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]}function Ee(t){t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1}function ke(t,e,o){var i=t[0],n=t[1],r=t[2],s=t[3],a=t[4],p=t[5],l=t[6],h=t[7],u=t[8],c=t[9],f=t[10],y=t[11],d=t[12],g=t[13],v=t[14];t=t[15];var m=e[0],b=e[1],w=e[2],x=e[3],S=e[4],T=e[5],C=e[6],M=e[7],P=e[8],E=e[9],k=e[10],A=e[11],R=e[12],j=e[13],L=e[14];e=e[15],o[0]=i*m+a*b+u*w+d*x,o[1]=n*m+p*b+c*w+g*x,o[2]=r*m+l*b+f*w+v*x,o[3]=s*m+h*b+y*w+t*x,o[4]=i*S+a*T+u*C+d*M,o[5]=n*S+p*T+c*C+g*M,o[6]=r*S+l*T+f*C+v*M,o[7]=s*S+h*T+y*C+t*M,o[8]=i*P+a*E+u*k+d*A,o[9]=n*P+p*E+c*k+g*A,o[10]=r*P+l*E+f*k+v*A,o[11]=s*P+h*E+y*k+t*A,o[12]=i*R+a*j+u*L+d*e,o[13]=n*R+p*j+c*L+g*e,o[14]=r*R+l*j+f*L+v*e,o[15]=s*R+h*j+y*L+t*e}function Ae(t,e){var o=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],p=t[6],l=t[7],h=t[8],u=t[9],c=t[10],f=t[11],y=t[12],d=t[13],g=t[14],v=t[15],m=o*a-i*s,b=o*p-n*s,w=o*l-r*s,x=i*p-n*a,S=i*l-r*a,T=n*l-r*p,C=h*d-u*y,M=h*g-c*y,P=h*v-f*y,E=u*g-c*d,k=u*v-f*d,A=c*v-f*g,R=m*A-b*k+w*E+x*P-S*M+T*C;0!=R&&(R=1/R,e[0]=(a*A-p*k+l*E)*R,e[1]=(-i*A+n*k-r*E)*R,e[2]=(d*T-g*S+v*x)*R,e[3]=(-u*T+c*S-f*x)*R,e[4]=(-s*A+p*P-l*M)*R,e[5]=(o*A-n*P+r*M)*R,e[6]=(-y*T+g*w-v*b)*R,e[7]=(h*T-c*w+f*b)*R,e[8]=(s*k-a*P+l*C)*R,e[9]=(-o*k+i*P-r*C)*R,e[10]=(y*S-d*w+v*m)*R,e[11]=(-h*S+u*w-f*m)*R,e[12]=(-s*E+a*M-p*C)*R,e[13]=(o*E-i*M+n*C)*R,e[14]=(-y*x+d*b-g*m)*R,e[15]=(h*x-u*b+c*m)*R)}function Re(t,e,o){var i=t[1]*e+t[5]*o+0*t[9]+t[13],n=t[2]*e+t[6]*o+0*t[10]+t[14],r=t[3]*e+t[7]*o+0*t[11]+t[15];t[12]=t[0]*e+t[4]*o+0*t[8]+t[12],t[13]=i,t[14]=n,t[15]=r}function je(t,e,o){Me(t,t[0]*e,t[1]*e,t[2]*e,t[3]*e,t[4]*o,t[5]*o,t[6]*o,t[7]*o,1*t[8],1*t[9],1*t[10],1*t[11],t[12],t[13],t[14],t[15])}function Le(t,e){var o=t[0],i=t[1],n=t[2],r=t[3],s=t[4],a=t[5],p=t[6],l=t[7],h=Math.cos(e),u=Math.sin(e);t[0]=o*h+s*u,t[1]=i*h+a*u,t[2]=n*h+p*u,t[3]=r*h+l*u,t[4]=o*-u+s*h,t[5]=i*-u+a*h,t[6]=n*-u+p*h,t[7]=r*-u+l*h}function Ne(t){for(var e=qe(),o=0,i=t.length;o<i;++o)Ke(e,t[o]);return e}function Ie(t,e,o){var i=Math.min.apply(null,t),n=Math.min.apply(null,e);return t=Math.max.apply(null,t),e=Math.max.apply(null,e),$e(i,n,t,e,o)}function De(e,o,i){return t(i)?(i[0]=e[0]-o,i[1]=e[1]-o,i[2]=e[2]+o,i[3]=e[3]+o,i):[e[0]-o,e[1]-o,e[2]+o,e[3]+o]}function Fe(e,o){return t(o)?(o[0]=e[0],o[1]=e[1],o[2]=e[2],o[3]=e[3],o):e.slice()}function Oe(t,e,o){return e=e<t[0]?t[0]-e:t[2]<e?e-t[2]:0,t=o<t[1]?t[1]-o:t[3]<o?o-t[3]:0,e*e+t*t}function Be(t,e){return t[0]<=e[0]&&e[2]<=t[2]&&t[1]<=e[1]&&e[3]<=t[3]}function Ue(t,e,o){return t[0]<=e&&e<=t[2]&&t[1]<=o&&o<=t[3]}function Ge(t,e){var o=t[1],i=t[2],n=t[3],r=e[0],s=e[1],a=0;return r<t[0]?a=16|a:r>i&&(a=4|a),s<o?a|=8:s>n&&(a|=2),0===a&&(a=1),a}function qe(){return[1/0,1/0,-(1/0),-(1/0)]}function $e(e,o,i,n,r){return t(r)?(r[0]=e,r[1]=o,r[2]=i,r[3]=n,r):[e,o,i,n]}function He(t,e){var o=t[0],i=t[1];return $e(o,i,o,i,e)}function Xe(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function We(t,e){return e[0]<t[0]&&(t[0]=e[0]),e[2]>t[2]&&(t[2]=e[2]),e[1]<t[1]&&(t[1]=e[1]),e[3]>t[3]&&(t[3]=e[3]),t}function Ke(t,e){e[0]<t[0]&&(t[0]=e[0]),e[0]>t[2]&&(t[2]=e[0]),e[1]<t[1]&&(t[1]=e[1]),e[1]>t[3]&&(t[3]=e[1])}function ze(t,e,o,i,n){for(;o<i;o+=n){var r=t,s=e[o],a=e[o+1];r[0]=Math.min(r[0],s),r[1]=Math.min(r[1],a),r[2]=Math.max(r[2],s),r[3]=Math.max(r[3],a)}return t}function Ve(t,e){var o;return(o=e.call(void 0,Ye(t)))||(o=e.call(void 0,Ze(t)))||(o=e.call(void 0,io(t)))?o:!!(o=e.call(void 0,oo(t)))&&o}function Ye(t){return[t[0],t[1]]}function Ze(t){return[t[2],t[1]]}function _e(t){return[(t[0]+t[2])/2,(t[1]+t[3])/2]}function Je(t,e){var o;return"bottom-left"===e?o=Ye(t):"bottom-right"===e?o=Ze(t):"top-left"===e?o=oo(t):"top-right"===e&&(o=io(t)),o}function Qe(t,e,o,i){var n=e*i[0]/2;i=e*i[1]/2,e=Math.cos(o),o=Math.sin(o),n=[-n,-n,n,n],i=[-i,i,-i,i];var r,s,a;for(r=0;4>r;++r)s=n[r],a=i[r],n[r]=t[0]+s*e-a*o,i[r]=t[1]+s*o+a*e;return Ie(n,i,void 0)}function to(t){return t[3]-t[1]}function eo(e,o,i){return i=t(i)?i:qe(),ro(e,o)&&(i[0]=e[0]>o[0]?e[0]:o[0],i[1]=e[1]>o[1]?e[1]:o[1],i[2]=e[2]<o[2]?e[2]:o[2],i[3]=e[3]<o[3]?e[3]:o[3]),i}function oo(t){return[t[0],t[3]]}function io(t){return[t[2],t[3]]}function no(t){return t[2]-t[0]}function ro(t,e){return t[0]<=e[2]&&t[2]>=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function so(t){return t[2]<t[0]||t[3]<t[1]}function ao(t,e){var o=(t[2]-t[0])/2*(e-1),i=(t[3]-t[1])/2*(e-1);t[0]-=o,t[2]+=o,t[1]-=i,t[3]+=i}function po(t,e,o){return t=[t[0],t[1],t[0],t[3],t[2],t[1],t[2],t[3]],e(t,t,2),Ie([t[0],t[2],t[4],t[6]],[t[1],t[3],t[5],t[7]],o)}function lo(t){this.radius=t}function ho(e){if(this.b=e.code,this.a=e.units,this.f=t(e.extent)?e.extent:null,this.g=t(e.worldExtent)?e.worldExtent:null,this.d=t(e.axisOrientation)?e.axisOrientation:"enu",this.c=(this.e=!!t(e.global)&&e.global)&&null!==this.f,this.q=t(e.getPointResolution)?e.getPointResolution:this.rj,this.i=null,"function"==typeof proj4){var o=e.code,i=proj4.defs(o);if(t(i)){t(i.axis)&&!t(e.axisOrientation)&&(this.d=i.axis),t(e.units)||(e=i.units,!t(e)&&t(i.to_meter)&&(e=i.to_meter.toString(),Jm[e]=i.to_meter),this.a=e),e=Qm;var n,r;for(n in e)r=proj4.defs(n),t(r)&&(e=xo(n),r===i?co([e,this]):(r=proj4(n,o),bo(e,this,r.forward,r.inverse)))}}}function uo(t){return t.d}function co(t){go(t),P(t,function(e){P(t,function(t){e!==t&&mo(e,t,Po)})})}function fo(){var t=pw,e=Pp,o=Ep;P(hw,function(i){P(t,function(t){mo(i,t,e),mo(t,i,o)})})}function yo(t){Qm[t.b]=t,mo(t,t,Po)}function go(t){var e=[];P(t,function(t){e.push(yo(t))})}function vo(t){return null!=t?p(t)?xo(t):t:xo("EPSG:3857")}function mo(t,e,o){t=t.b,e=e.b,t in tb||(tb[t]={}),tb[t][e]=o}function bo(t,e,o,i){t=xo(t),e=xo(e),mo(t,e,wo(o)),mo(e,t,wo(i))}function wo(e){return function(o,i,n){var r=o.length;n=t(n)?n:2,i=t(i)?i:Array(r);var s,a;for(a=0;a<r;a+=n)for(s=e([o[a],o[a+1]]),i[a]=s[0],i[a+1]=s[1],s=n-1;2<=s;--s)i[a+s]=o[a+s];return i}}function xo(e){var o;return e instanceof ho?o=e:p(e)?(o=Qm[e],!t(o)&&"function"==typeof proj4&&t(proj4.defs(e))&&(o=new ho({code:e}),yo(o))):o=null,o}function So(t,e){return t===e||(t.b===e.b||t.a==e.a&&Co(t,e)===Po)}function To(t,e){var o=xo(t),i=xo(e);return Co(o,i)}function Co(e,o){var i,n=e.b,r=o.b;return n in tb&&r in tb[n]&&(i=tb[n][r]),t(i)||(i=Mo),i}function Mo(e,o){if(t(o)&&e!==o){for(var i=0,n=e.length;i<n;++i)o[i]=e[i];e=o}return e}function Po(e,o){var i;if(t(o)){i=0;for(var n=e.length;i<n;++i)o[i]=e[i];i=o}else i=e.slice();return i}function Eo(t,e,o){return To(e,o)(t,void 0,t.length)}function ko(t,e,o){return e=To(e,o),po(t,e)}function Ao(e){re.call(this),e=t(e)?e:{},this.c=[0,0];var o={};o.center=t(e.center)?e.center:null,this.e=vo(e.projection);var i,n,r,s=t(e.minZoom)?e.minZoom:0;i=t(e.maxZoom)?e.maxZoom:28;var a=t(e.zoomFactor)?e.zoomFactor:2;if(t(e.resolutions))i=e.resolutions,n=i[0],r=i[i.length-1],i=gt(i);else{n=vo(e.projection),r=n.G();var p=(null===r?360*Jm.degrees/Jm[n.a]:Math.max(no(r),to(r)))/256/Math.pow(2,0),h=p/Math.pow(2,28);n=e.maxResolution,t(n)?s=0:n=p/Math.pow(a,s),r=e.minResolution,t(r)||(r=t(e.maxZoom)?t(e.maxResolution)?n/Math.pow(a,i):p/Math.pow(a,i):h),i=s+Math.floor(Math.log(n/r)/Math.log(a)),r=n/Math.pow(a,i-s),i=vt(a,n,i-s)}this.a=n,this.g=r,this.d=s,s=t(e.extent)?ft(e.extent):yt,(t(e.enableRotation)?e.enableRotation:1)?(n=e.constrainRotation,n=t(n)&&!0!==n?!1===n?bt:l(n)?wt(n):bt:xt()):n=mt,this.f=new St(s,i,n),t(e.resolution)?o.resolution=e.resolution:t(e.zoom)&&(o.resolution=this.constrainResolution(this.a,e.zoom-this.d)),o.rotation=t(e.rotation)?e.rotation:0,this.t(o)}function Ro(t,e){return Math.max(no(t)/e[0],to(t)/e[1])}function jo(t){var e=t.a,o=Math.log(e/t.g)/Math.log(2);return function(t){return e/Math.pow(2,t*o)}}function Lo(t){var e=t.a,o=Math.log(e/t.g)/Math.log(2);return function(t){return Math.log(e/t)/Math.log(2)/o}}function No(e){var o=e.Ca(),i=e.e,n=e.ya();return e=e.Da(),{center:o.slice(),projection:t(i)?i:null,resolution:n,rotation:e}}function Io(e){return null!=e.Ca()&&t(e.ya())}function Do(t,e){t.c[1]+=e}function Fo(t){return 1-Math.pow(1-t,3)}function Oo(t){return 3*t*t-2*t*t*t}function Bo(t){return t}function Uo(t){return.5>t?Oo(2*t):1-Oo(2*(t-.5))}function Go(e){var o=e.source,i=t(e.start)?e.start:lm(),n=o[0],r=o[1],s=t(e.duration)?e.duration:1e3,a=t(e.easing)?e.easing:Oo;return function(t,e){if(e.time<i)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<i+s){var o=1-a((e.time-i)/s),p=n-e.viewState.center[0],l=r-e.viewState.center[1];return e.animate=!0,e.viewState.center[0]+=o*p,e.viewState.center[1]+=o*l,e.viewHints[0]+=1,!0}return!1}}function qo(e){var o=t(e.rotation)?e.rotation:0,i=t(e.start)?e.start:lm(),n=t(e.duration)?e.duration:1e3,r=t(e.easing)?e.easing:Oo,s=t(e.anchor)?e.anchor:null;return function(t,e){if(e.time<i)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<i+n){var a=1-r((e.time-i)/n),a=(o-e.viewState.rotation)*a;if(e.animate=!0,e.viewState.rotation+=a,null!==s){var p=e.viewState.center;p[0]-=s[0],p[1]-=s[1],ge(p,a),ue(p,s)}return e.viewHints[0]+=1,!0}return!1}}function $o(e){var o=e.resolution,i=t(e.start)?e.start:lm(),n=t(e.duration)?e.duration:1e3,r=t(e.easing)?e.easing:Oo;return function(t,e){if(e.time<i)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<i+n){var s=1-r((e.time-i)/n),a=o-e.viewState.resolution;return e.animate=!0,e.viewState.resolution+=s*a,e.viewHints[0]+=1,!0}return!1}}function Ho(e,o,i,n){return t(n)?(n[0]=e,n[1]=o,n[2]=i,n):[e,o,i]}function Xo(t,e,o){return t+"/"+e+"/"+o}function Wo(t){var e,o,i=t[0],n=Array(i),r=1<<i-1;for(e=0;e<i;++e)o=48,t[1]&r&&(o+=1),t[2]&r&&(o+=2),n[e]=String.fromCharCode(o),r>>=1;return n.join("")}function Ko(t){return Xo(t[0],t[1],t[2])}function zo(t,e,o,i){this.b=t,this.d=e,this.c=o,this.a=i}function Vo(e,o,i,n,r){return t(r)?(r.b=e,r.d=o,r.c=i,r.a=n,r):new zo(e,o,i,n)}function Yo(t,e,o){
+return t.b<=e&&e<=t.d&&t.c<=o&&o<=t.a}function Zo(t,e){return t.b==e.b&&t.c==e.c&&t.d==e.d&&t.a==e.a}function _o(t){return t.d-t.b+1}function Jo(t,e){return t.b<=e.d&&t.d>=e.b&&t.c<=e.a&&t.a>=e.c}function Qo(e){this.a=e.html,this.b=t(e.tileRanges)?e.tileRanges:null}function ti(t,e,o){Pt.call(this,t,o),this.element=e}function ei(e){re.call(this),this.a=t(e)?e:[],oi(this)}function oi(t){t.set("length",t.a.length)}function ii(t){return s(t)?t:nb(t)}function ni(t){if(!p(t)){var e=t[0];e!=(0|e)&&(e=e+.5|0);var o=t[1];o!=(0|o)&&(o=o+.5|0);var i=t[2];i!=(0|i)&&(i=i+.5|0),t="rgba("+e+","+o+","+i+","+t[3]+")"}return t}function ri(e,o){var i=t(o)?o:[];return i[0]=lt(e[0]+.5|0,0,255),i[1]=lt(e[1]+.5|0,0,255),i[2]=lt(e[2]+.5|0,0,255),i[3]=lt(e[3],0,1),i}function si(){this.g=Te(),this.a=void 0,this.b=Te(),this.d=void 0,this.c=Te(),this.f=void 0,this.e=Te(),this.q=void 0,this.i=Te()}function ai(e,o,i,n,r){var s=!1;if(t(o)&&o!==e.a&&(s=e.b,Ee(s),s[12]=o,s[13]=o,s[14]=o,s[15]=1,e.a=o,s=!0),t(i)&&i!==e.d){s=e.c,Ee(s),s[0]=i,s[5]=i,s[10]=i,s[15]=1;var a=-.5*i+.5;s[12]=a,s[13]=a,s[14]=a,s[15]=1,e.d=i,s=!0}return t(n)&&n!==e.f&&(s=Math.cos(n),a=Math.sin(n),Me(e.e,.213+.787*s-.213*a,.213-.213*s+.143*a,.213-.213*s-.787*a,0,.715-.715*s-.715*a,.715+.285*s+.14*a,.715-.715*s+.715*a,0,.072-.072*s+.928*a,.072-.072*s-.283*a,.072+.928*s+.072*a,0,0,0,0,1),e.f=n,s=!0),t(r)&&r!==e.q&&(Me(e.i,.213+.787*r,.213-.213*r,.213-.213*r,0,.715-.715*r,.715+.285*r,.715-.715*r,0,.072-.072*r,.072-.072*r,.072+.928*r,0,0,0,0,1),e.q=r,s=!0),s&&(s=e.g,Ee(s),t(i)&&ke(s,e.c,s),t(o)&&ke(s,e.b,s),t(r)&&ke(s,e.i,s),t(n)&&ke(s,e.e,s)),e.g}function pi(e,o){this.x=t(e)?e:0,this.y=t(o)?o:0}function li(t,e){this.width=t,this.height=e}function hi(t){return t?new Pi(Ci(t)):hm||(hm=new Pi)}function ui(t){var e=document;return p(t)?e.getElementById(t):t}function ci(t,e){W(e,function(e,o){"style"==o?t.style.cssText=e:"class"==o?t.className=e:"for"==o?t.htmlFor=e:o in sb?t.setAttribute(sb[o],e):0==o.lastIndexOf("aria-",0)||0==o.lastIndexOf("data-",0)?t.setAttribute(o,e):t[o]=e})}function fi(t){return t=t.document.documentElement,new li(t.clientWidth,t.clientHeight)}function yi(t,e,o){var i=arguments,n=document,r=i[0],a=i[1];if(!rb&&a&&(a.name||a.type)){if(r=["<",r],a.name&&r.push(' name="',x(a.name),'"'),a.type){r.push(' type="',x(a.type),'"');var l={};rt(l,a),delete l.type,a=l}r.push(">"),r=r.join("")}return r=n.createElement(r),a&&(p(a)?r.className=a:s(a)?r.className=a.join(" "):ci(r,a)),2<i.length&&di(n,r,i,2),r}function di(t,e,o,i){function n(o){o&&e.appendChild(p(o)?t.createTextNode(o):o)}for(;i<o.length;i++){var r=o[i];!a(r)||u(r)&&0<r.nodeType?n(r):P(Mi(r)?D(r):r,n)}}function gi(t){return document.createElement(t)}function vi(t,e){di(Ci(t),t,arguments,1)}function mi(t){for(var e;e=t.firstChild;)t.removeChild(e)}function bi(t,e,o){t.insertBefore(e,t.childNodes[o]||null)}function wi(t){t&&t.parentNode&&t.parentNode.removeChild(t)}function xi(t,e){var o=e.parentNode;o&&o.replaceChild(t,e)}function Si(t){if(void 0!=t.firstElementChild)t=t.firstElementChild;else for(t=t.firstChild;t&&1!=t.nodeType;)t=t.nextSibling;return t}function Ti(t,e){if(t.contains&&1==e.nodeType)return t==e||t.contains(e);if("undefined"!=typeof t.compareDocumentPosition)return t==e||Boolean(16&t.compareDocumentPosition(e));for(;e&&t!=e;)e=e.parentNode;return e==t}function Ci(t){return 9==t.nodeType?t:t.ownerDocument||t.document}function Mi(t){if(t&&"number"==typeof t.length){if(u(t))return"function"==typeof t.item||"string"==typeof t.item;if(h(t))return"function"==typeof t.item}return!1}function Pi(t){this.b=t||sm.document||document}function Ei(){return!0}function ki(t){var e=t.b;return t=Em?e.body||e.documentElement:e.documentElement,e=e.parentWindow||e.defaultView,Mm&&pt("10")&&e.pageYOffset!=t.scrollTop?new pi(t.scrollLeft,t.scrollTop):new pi(e.pageXOffset||t.scrollLeft,e.pageYOffset||t.scrollTop)}function Ai(t){return t.classList?t.classList:(t=t.className,p(t)&&t.match(/\S+/g)||[])}function Ri(t,e){return t.classList?t.classList.contains(e):L(Ai(t),e)}function ji(t,e){t.classList?t.classList.add(e):Ri(t,e)||(t.className+=0<t.className.length?" "+e:e)}function Li(t,e){t.classList?t.classList.remove(e):Ri(t,e)&&(t.className=E(Ai(t),function(t){return t!=e}).join(" "))}function Ni(t,e){Ri(t,e)?Li(t,e):ji(t,e)}function Ii(t,e,o,i){this.top=t,this.right=e,this.bottom=o,this.left=i}function Di(t,e,o,i){this.left=t,this.top=e,this.width=o,this.height=i}function Fi(t,e){var o=e.x<t.left?t.left-e.x:Math.max(e.x-(t.left+t.width),0),i=e.y<t.top?t.top-e.y:Math.max(e.y-(t.top+t.height),0);return o*o+i*i}function Oi(t,e){var o=Ci(t);return o.defaultView&&o.defaultView.getComputedStyle&&(o=o.defaultView.getComputedStyle(t,null))?o[e]||o.getPropertyValue(e)||"":""}function Bi(t,e){return Oi(t,e)||(t.currentStyle?t.currentStyle[e]:null)||t.style&&t.style[e]}function Ui(t,e,o){var i;e instanceof pi?(i=e.x,e=e.y):(i=e,e=o),t.style.left=$i(i),t.style.top=$i(e)}function Gi(t){var e;try{e=t.getBoundingClientRect()}catch(o){return{left:0,top:0,right:0,bottom:0}}return Mm&&t.ownerDocument.body&&(t=t.ownerDocument,e.left-=t.documentElement.clientLeft+t.body.clientLeft,e.top-=t.documentElement.clientTop+t.body.clientTop),e}function qi(t){if(1==t.nodeType)return t=Gi(t),new pi(t.left,t.top);var e=h(t.Qi),o=t;return t.targetTouches&&t.targetTouches.length?o=t.targetTouches[0]:e&&t.b.targetTouches&&t.b.targetTouches.length&&(o=t.b.targetTouches[0]),new pi(o.clientX,o.clientY)}function $i(t){return"number"==typeof t&&(t+="px"),t}function Hi(t){var e=Xi;if("none"!=Bi(t,"display"))return e(t);var o=t.style,i=o.display,n=o.visibility,r=o.position;return o.visibility="hidden",o.position="absolute",o.display="inline",t=e(t),o.display=i,o.position=r,o.visibility=n,t}function Xi(e){var o=e.offsetWidth,i=e.offsetHeight,n=Em&&!o&&!i;return t(o)&&!n||!e.getBoundingClientRect?new li(o,i):(e=Gi(e),new li(e.right-e.left,e.bottom-e.top))}function Wi(t,e){t.style.display=e?"":"none"}function Ki(t,e,o,i){if(/^\d+px?$/.test(e))return parseInt(e,10);var n=t.style[o],r=t.runtimeStyle[o];return t.runtimeStyle[o]=t.currentStyle[o],t.style[o]=e,e=t.style[i],t.style[o]=n,t.runtimeStyle[o]=r,e}function zi(t,e){var o=t.currentStyle?t.currentStyle[e]:null;return o?Ki(t,o,"left","pixelLeft"):0}function Vi(t,e){if(Mm){var o=zi(t,e+"Left"),i=zi(t,e+"Right"),n=zi(t,e+"Top"),r=zi(t,e+"Bottom");return new Ii(n,i,r,o)}return o=Oi(t,e+"Left"),i=Oi(t,e+"Right"),n=Oi(t,e+"Top"),r=Oi(t,e+"Bottom"),new Ii(parseFloat(n),parseFloat(i),parseFloat(r),parseFloat(o))}function Yi(t,e){if("none"==(t.currentStyle?t.currentStyle[e+"Style"]:null))return 0;var o=t.currentStyle?t.currentStyle[e+"Width"]:null;return o in ab?ab[o]:Ki(t,o,"left","pixelLeft")}function Zi(t){if(Mm&&!(Mm&&9<=Im)){var e=Yi(t,"borderLeft"),o=Yi(t,"borderRight"),i=Yi(t,"borderTop");return t=Yi(t,"borderBottom"),new Ii(i,o,t,e)}return e=Oi(t,"borderLeftWidth"),o=Oi(t,"borderRightWidth"),i=Oi(t,"borderTopWidth"),t=Oi(t,"borderBottomWidth"),new Ii(parseFloat(i),parseFloat(o),parseFloat(t),parseFloat(e))}function _i(e,o,i){Pt.call(this,e),this.map=o,this.frameState=t(i)?i:null}function Ji(e){re.call(this),this.element=t(e.element)?e.element:null,this.a=this.L=null,this.l=[],this.render=t(e.render)?e.render:o,t(e.target)&&this.c(e.target)}function Qi(){this.c=0,this.d={},this.a=this.b=null}function tn(t,e){return t.d.hasOwnProperty(e)}function en(e){Qi.call(this),this.e=t(e)?e:2048}function on(t){return t.Tb()>t.e}function nn(t,e){Qt.call(this),this.b=t,this.state=e}function rn(t){t.dispatchEvent("change")}function sn(e){re.call(this),this.f=xo(e.projection),this.d=t(e.attributions)?e.attributions:null,this.L=e.logo,this.o=t(e.state)?e.state:"ready",this.H=e.wrapX}function an(t){return t.H}function pn(t,e){t.o=e,t.k()}function ln(t){return function(){return t}}function hn(t){return t}function un(t){var e;return e=e||0,function(){return t.apply(this,Array.prototype.slice.call(arguments,0,e))}}function cn(t){var e=arguments,o=e.length;return function(){for(var t,i=0;i<o;i++)t=e[i].apply(this,arguments);return t}}function fn(t){var e=arguments,o=e.length;return function(){for(var t=0;t<o;t++)if(!e[t].apply(this,arguments))return!1;return!0}}function yn(e){this.minZoom=t(e.minZoom)?e.minZoom:0,this.b=e.resolutions,this.maxZoom=this.b.length-1,this.f=t(e.origin)?e.origin:null,this.i=null,t(e.origins)&&(this.i=e.origins),this.c=null,t(e.tileSizes)&&(this.c=e.tileSizes),this.g=t(e.tileSize)?e.tileSize:null===this.c?256:null,this.a=[0,0],this.d=null,t(e.widths)&&(this.d=e.widths)}function dn(t,e,o,i){bn(t,e[0],e[1],o,!1,ub);var n=ub[1],r=ub[2];return bn(t,e[2],e[3],o,!0,ub),Vo(n,ub[1],r,ub[2],i)}function gn(t,e,o,i){return dn(t,e,t.ma(o),i)}function vn(t,e){var o=t.Mb(e[0]),i=t.ma(e[0]),n=he(t.na(e[0]),t.a);return[o[0]+(e[1]+.5)*n[0]*i,o[1]+(e[2]+.5)*n[1]*i]}function mn(t,e,o){var i=t.Mb(e[0]),n=t.ma(e[0]);t=he(t.na(e[0]),t.a);var r=i[0]+e[1]*t[0]*n;return e=i[1]+e[2]*t[1]*n,$e(r,e,r+t[0]*n,e+t[1]*n,o)}function bn(t,e,o,i,n,r){var s=Sn(t,i),a=i/t.ma(s),p=t.Mb(s);return t=he(t.na(s),t.a),e=a*(e-p[0])/(i*t[0]),o=a*(o-p[1])/(i*t[1]),n?(e=Math.ceil(e)-1,o=Math.ceil(o)-1):(e=Math.floor(e),o=Math.floor(o)),Ho(s,e,o,r)}function wn(e,o,i){return i=gn(e,Mn(i),o),e=xn(e,o),t(e)||(e=_o(i)),Vo(0,e-1,0,i.a-i.c+1,void 0)}function xn(t,e){if(null!==t.d)return t.d[e]}function Sn(t,e){var o=dt(t.b,e,0);return lt(o,t.minZoom,t.maxZoom)}function Tn(e){var o=e.i;if(null===o){for(var o=Mn(e),i=he(t(void 0)?void 0:256),n=t(void 0)?void 0:"bottom-left",r=Cn(o,void 0,he(i)),s=Array(r.length),a=no(o),p=r.length-1;0<=p;--p)s[p]=a/i[0]/r[p];o=new yn({origin:Je(o,n),resolutions:r,tileSize:t(void 0)?void 0:256,widths:s}),e.i=o}return o}function Cn(e,o,i){o=t(o)?o:42;var n=to(e);for(e=no(e),i=t(i)?i:he(256),i=Math.max(e/i[0],n/i[1]),o+=1,n=Array(o),e=0;e<o;++e)n[e]=i/Math.pow(2,e);return n}function Mn(t){t=xo(t);var e=t.G();return null===e&&(t=180*Jm.degrees/t.Gd(),e=$e(-t,-t,t,t)),e}function Pn(e){sn.call(this,{attributions:e.attributions,extent:e.extent,logo:e.logo,projection:e.projection,state:e.state,wrapX:e.wrapX}),this.X=!!t(e.opaque)&&e.opaque,this.ba=t(e.tilePixelRatio)?e.tilePixelRatio:1,this.tileGrid=t(e.tileGrid)?e.tileGrid:null,this.a=new en,this.c=[0,0]}function En(t,e,o,i){for(var n,r,s=!0,a=o.b;a<=o.d;++a)for(var p=o.c;p<=o.a;++p)n=t.bb(e,a,p),r=!1,tn(t.a,n)&&(n=t.a.get(n),(r=2===n.state)&&(r=!1!==i(n))),r||(s=!1);return s}function kn(t,e){return null===t.tileGrid?Tn(e):t.tileGrid}function An(t,e){Pt.call(this,t),this.tile=e}function Rn(e){e=t(e)?e:{},this.p=gi("UL"),this.o=gi("LI"),this.p.appendChild(this.o),Wi(this.o,!1),this.d=!t(e.collapsed)||e.collapsed,this.g=!t(e.collapsible)||e.collapsible,this.g||(this.d=!1);var o=t(e.className)?e.className:"ol-attribution",i=t(e.tipLabel)?e.tipLabel:"Attributions",n=t(e.collapseLabel)?e.collapseLabel:"»";this.H=p(n)?yi("SPAN",{},n):n,n=t(e.label)?e.label:"i",this.J=p(n)?yi("SPAN",{},n):n,i=yi("BUTTON",{type:"button",title:i},this.g&&!this.d?this.H:this.J),qt(i,"click",this.gl,!1,this),qt(i,["mouseout",qm],function(){this.blur()},!1),o=yi("DIV",o+" ol-unselectable ol-control"+(this.d&&this.g?" ol-collapsed":"")+(this.g?"":" ol-uncollapsible"),this.p,i),Ji.call(this,{element:o,render:t(e.render)?e.render:jn,target:e.target}),this.n=!0,this.i={},this.f={},this.N={}}function jn(e){if(e=e.frameState,null===e)this.n&&(Wi(this.element,!1),this.n=!1);else{var o,i,n,r,s,a,p,l,h,u,f,y=e.layerStatesArray,d=nt(e.attributions),g={},v=e.viewState.projection;for(i=0,o=y.length;i<o;i++)if(a=y[i].layer.da(),null!==a&&(u=c(a).toString(),h=a.d,null!==h))for(n=0,r=h.length;n<r;n++)if(p=h[n],l=c(p).toString(),!(l in d)){if(s=e.usedTiles[u],t(s)){var m=kn(a,v);t:{f=p;var b=v;if(null===f.b)f=!0;else{var w=void 0,x=void 0,S=void 0,T=void 0;for(T in s)if(T in f.b)for(var C,S=s[T],w=0,x=f.b[T].length;w<x;++w){if(C=f.b[T][w],Jo(C,S)){f=!0;break t}var M=wn(m,parseInt(T,10),b),P=_o(M);if((S.b<M.b||S.d>M.d)&&(Jo(C,new zo(ht(S.b,P),ht(S.d,P),S.c,S.a))||_o(S)>P&&Jo(C,M))){f=!0;break t}}f=!1}}}else f=!1;f?(l in g&&delete g[l],d[l]=p):g[l]=p}o=[d,g],i=o[0],o=o[1];for(var E in this.i)E in i?(this.f[E]||(Wi(this.i[E],!0),this.f[E]=!0),delete i[E]):E in o?(this.f[E]&&(Wi(this.i[E],!1),delete this.f[E]),delete o[E]):(wi(this.i[E]),delete this.i[E],delete this.f[E]);for(E in i)n=gi("LI"),n.innerHTML=i[E].a,this.p.appendChild(n),this.i[E]=n,this.f[E]=!0;for(E in o)n=gi("LI"),n.innerHTML=o[E].a,Wi(n,!1),this.p.appendChild(n),this.i[E]=n;E=!Q(this.f)||!Q(e.logos),this.n!=E&&(Wi(this.element,E),this.n=E),E&&Q(this.f)?ji(this.element,"ol-logo-only"):Li(this.element,"ol-logo-only");var k;e=e.logos,E=this.N;for(k in E)k in e||(wi(E[k]),delete E[k]);for(var A in e)A in E||(k=new Image,k.src=A,i=e[A],""===i?i=k:(i=yi("A",{href:i}),i.appendChild(k)),this.o.appendChild(i),E[A]=i);Wi(this.o,!Q(e))}}function Ln(t){Ni(t.element,"ol-collapsed"),t.d?xi(t.H,t.J):xi(t.J,t.H),t.d=!t.d}function Nn(e){e=t(e)?e:{};var o=t(e.className)?e.className:"ol-rotate",i=t(e.label)?e.label:"⇧";this.d=null,p(i)?this.d=yi("SPAN","ol-compass",i):(this.d=i,ji(this.d,"ol-compass")),i=yi("BUTTON",{"class":o+"-reset",type:"button",title:t(e.tipLabel)?e.tipLabel:"Reset rotation"},this.d),qt(i,"click",Nn.prototype.o,!1,this),qt(i,["mouseout",qm],function(){this.blur()},!1),o=yi("DIV",o+" ol-unselectable ol-control",i),Ji.call(this,{element:o,render:t(e.render)?e.render:In,target:e.target}),this.g=t(e.duration)?e.duration:250,this.f=!t(e.autoHide)||e.autoHide,this.i=void 0,this.f&&ji(this.element,"ol-hidden")}function In(t){if(t=t.frameState,null!==t){if(t=t.viewState.rotation,t!=this.i){var e="rotate("+180*t/Math.PI+"deg)";if(this.f){var o=this.element;0===t?ji(o,"ol-hidden"):Li(o,"ol-hidden")}this.d.style.msTransform=e,this.d.style.webkitTransform=e,this.d.style.transform=e}this.i=t}}function Dn(e){e=t(e)?e:{};var o=t(e.className)?e.className:"ol-zoom",i=t(e.delta)?e.delta:1,n=t(e.zoomOutLabel)?e.zoomOutLabel:"−",r=t(e.zoomOutTipLabel)?e.zoomOutTipLabel:"Zoom out",s=yi("BUTTON",{"class":o+"-in",type:"button",title:t(e.zoomInTipLabel)?e.zoomInTipLabel:"Zoom in"},t(e.zoomInLabel)?e.zoomInLabel:"+");qt(s,"click",g(Dn.prototype.f,i),!1,this),qt(s,["mouseout",qm],function(){this.blur()},!1),n=yi("BUTTON",{"class":o+"-out",type:"button",title:r},n),qt(n,"click",g(Dn.prototype.f,-i),!1,this),qt(n,["mouseout",qm],function(){this.blur()},!1),o=yi("DIV",o+" ol-unselectable ol-control",s,n),Ji.call(this,{element:o,target:e.target}),this.d=t(e.duration)?e.duration:250}function Fn(e){e=t(e)?e:{};var o=new ei;return(t(e.zoom)?e.zoom:1)&&o.push(new Dn(e.zoomOptions)),(t(e.rotate)?e.rotate:1)&&o.push(new Nn(e.rotateOptions)),(t(e.attribution)?e.attribution:1)&&o.push(new Rn(e.attributionOptions)),o}function On(){var t=hi().b,e=t.body;return!!(e.webkitRequestFullscreen||e.mozRequestFullScreen&&t.mozFullScreenEnabled||e.msRequestFullscreen&&t.msFullscreenEnabled||e.requestFullscreen&&t.fullscreenEnabled)}function Bn(t){t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.msRequestFullscreen?t.msRequestFullscreen():t.requestFullscreen&&t.requestFullscreen()}function Un(){var t=hi().b;return!!(t.webkitIsFullScreen||t.mozFullScreen||t.msFullscreenElement||t.fullscreenElement)}function Gn(e){e=t(e)?e:{},this.d=t(e.className)?e.className:"ol-full-screen";var o=t(e.label)?e.label:"↔";this.f=p(o)?document.createTextNode(String(o)):o,o=t(e.labelActive)?e.labelActive:"×",this.g=p(o)?document.createTextNode(String(o)):o,o=t(e.tipLabel)?e.tipLabel:"Toggle full-screen",o=yi("BUTTON",{"class":this.d+"-"+Un(),type:"button",title:o},this.f),qt(o,"click",this.n,!1,this),qt(o,["mouseout",qm],function(){this.blur()},!1),qt(sm.document,cb,this.i,!1,this);var i=this.d+" ol-unselectable ol-control "+(On()?"":"ol-unsupported"),o=yi("DIV",i,o);Ji.call(this,{element:o,target:e.target}),this.o=!!t(e.keys)&&e.keys}function qn(e){e=t(e)?e:{};var o=yi("DIV",t(e.className)?e.className:"ol-mouse-position");Ji.call(this,{element:o,render:t(e.render)?e.render:$n,target:e.target}),qt(this,se("projection"),this.jl,!1,this),t(e.coordinateFormat)&&this.vh(e.coordinateFormat),t(e.projection)&&this.yg(xo(e.projection)),this.o=t(e.undefinedHTML)?e.undefinedHTML:"",this.i=o.innerHTML,this.g=this.f=this.d=null}function $n(t){t=t.frameState,null===t?this.d=null:this.d!=t.viewState.projection&&(this.d=t.viewState.projection,this.f=null),Hn(this,this.g)}function Hn(e,o){var i=e.o;if(null!==o&&null!==e.d){if(null===e.f){var n=e.xg();e.f=t(n)?Co(e.d,n):Mo}n=e.a.ka(o),null!==n&&(e.f(n,n),i=e.Uf(),i=t(i)?i(n):n.toString())}t(e.i)&&i==e.i||(e.element.innerHTML=i,e.i=i)}function Xn(t,e,o){Tt.call(this),this.d=t,this.c=o,this.b=e||window,this.a=d(this.Pf,this)}function Wn(t){if(null!=t.$){var e=Kn(t),o=zn(t);e&&!o&&t.b.mozRequestAnimationFrame?Kt(t.$):e&&o?o.call(t.b,t.$):t.b.clearTimeout(t.$)}t.$=null}function Kn(t){return t=t.b,t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||t.msRequestAnimationFrame||null}function zn(t){return t=t.b,t.cancelAnimationFrame||t.cancelRequestAnimationFrame||t.webkitCancelRequestAnimationFrame||t.mozCancelRequestAnimationFrame||t.oCancelRequestAnimationFrame||t.msCancelRequestAnimationFrame||null}function Vn(t){sm.setTimeout(function(){throw t},0)}function Yn(t,e){var o=t;e&&(o=d(t,e)),o=yb(o),!h(sm.setImmediate)||sm.Window&&sm.Window.prototype.setImmediate==sm.setImmediate?(fb||(fb=Zn()),fb(o)):sm.setImmediate(o)}function Zn(){var e=sm.MessageChannel;if("undefined"==typeof e&&"undefined"!=typeof window&&window.postMessage&&window.addEventListener&&(e=function(){var t=document.createElement("iframe");t.style.display="none",t.src="",document.documentElement.appendChild(t);var e=t.contentWindow,t=e.document;t.open(),t.write(""),t.close();var o="callImmediate"+Math.random(),i="file:"==e.location.protocol?"*":e.location.protocol+"//"+e.location.host,t=d(function(t){"*"!=i&&t.origin!=i||t.data!=o||this.port1.onmessage()},this);e.addEventListener("message",t,!1),this.port1={},this.port2={postMessage:function(){e.postMessage(o,i)}}}),"undefined"!=typeof e&&!X("Trident")&&!X("MSIE")){var o=new e,i={},n=i;return o.port1.onmessage=function(){if(t(i.next)){i=i.next;var e=i.Lf;i.Lf=null,e()}},function(t){n.next={Lf:t},n=n.next,o.port2.postMessage(0)}}return"undefined"!=typeof document&&"onreadystatechange"in document.createElement("script")?function(t){var e=document.createElement("script");e.onreadystatechange=function(){e.onreadystatechange=null,e.parentNode.removeChild(e),e=null,t(),t=null},document.documentElement.appendChild(e)}:function(t){sm.setTimeout(t,0)}}function _n(t){if("function"==typeof t.cb)return t.cb();if(p(t))return t.split("");if(a(t)){for(var e=[],o=t.length,i=0;i<o;i++)e.push(t[i]);return e}return V(t)}function Jn(t,e){if("function"==typeof t.forEach)t.forEach(e,void 0);else if(a(t)||p(t))P(t,e,void 0);else{var o;if("function"==typeof t.C)o=t.C();else if("function"!=typeof t.cb)if(a(t)||p(t)){o=[];for(var i=t.length,n=0;n<i;n++)o.push(n)}else o=Y(t);else o=void 0;for(var i=_n(t),n=i.length,r=0;r<n;r++)e.call(void 0,i[r],o&&o[r],t)}}function Qn(t,e){this.a={},this.b=[],this.c=0;var o=arguments.length;if(1<o){if(o%2)throw Error("Uneven number of arguments");for(var i=0;i<o;i+=2)this.set(arguments[i],arguments[i+1])}else if(t){t instanceof Qn?(o=t.C(),i=t.cb()):(o=Y(t),i=V(t));for(var n=0;n<o.length;n++)this.set(o[n],i[n])}}function tr(t){if(t.c!=t.b.length){for(var e=0,o=0;e<t.b.length;){var i=t.b[e];er(t.a,i)&&(t.b[o++]=i),e++}t.b.length=o}if(t.c!=t.b.length){for(var n={},o=e=0;e<t.b.length;)i=t.b[e],er(n,i)||(t.b[o++]=i,n[i]=1),e++;t.b.length=o}}function er(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function or(){this.b=lm()}function ir(t){Qt.call(this),this.pd=t||window,this.Md=qt(this.pd,"resize",this.ik,!1,this),this.Nd=fi(this.pd||window)}function nr(t,e,o,i,n){if(!(Mm||Em&&pt("525")))return!0;if(km&&n)return rr(t);if(n&&!i)return!1;if(l(e)&&(e=sr(e)),!o&&(17==e||18==e||km&&91==e))return!1;if(Em&&i&&o)switch(t){case 220:case 219:case 221:case 192:case 186:case 189:case 187:case 188:case 190:case 191:case 192:case 222:return!1}if(Mm&&i&&e==t)return!1;switch(t){case 13:return!0;case 27:return!Em}return rr(t)}function rr(t){if(48<=t&&57>=t||96<=t&&106>=t||65<=t&&90>=t||Em&&0==t)return!0;switch(t){case 32:case 63:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return!0;default:return!1}}function sr(t){if(Pm)t=ar(t);else if(km&&Em)t:switch(t){case 93:t=91}return t}function ar(t){switch(t){case 61:return 187;case 59:return 186;case 173:return 189;case 224:return 91;case 0:return 224;default:return t}}function pr(t,e){Qt.call(this),t&&lr(this,t,e)}function lr(t,e,o){t.Vd&&hr(t),t.Z=e,t.Ud=qt(t.Z,"keypress",t,o),t.Ye=qt(t.Z,"keydown",t.b,o,t),t.Vd=qt(t.Z,"keyup",t.a,o,t)}function hr(t){t.Ud&&(Kt(t.Ud),Kt(t.Ye),Kt(t.Vd),t.Ud=null,t.Ye=null,t.Vd=null),t.Z=null,t.Ja=-1,t.Hb=-1}function ur(t,e,o,i){Rt.call(this,i),this.type="key",this.e=t,this.q=e}function cr(t,e){Qt.call(this);var o=this.Z=t;(o=u(o)&&1==o.nodeType?this.Z:this.Z?this.Z.body:null)&&Bi(o,"direction"),this.b=qt(this.Z,Pm?"DOMMouseScroll":"mousewheel",this,e)}function fr(t,e){return Em&&(km||Rm)&&0!=t%e?t:t/e}function yr(t,e,o,i){Rt.call(this,e),this.type="mousewheel",this.detail=t,this.o=i}function dr(e,o,i){Pt.call(this,e),this.b=o,e=t(i)?i:{},this.buttons=gr(e),this.pressure=vr(e,this.buttons),this.bubbles=ot(e,"bubbles",!1),this.cancelable=ot(e,"cancelable",!1),this.view=ot(e,"view",null),this.detail=ot(e,"detail",null),this.screenX=ot(e,"screenX",0),this.screenY=ot(e,"screenY",0),this.clientX=ot(e,"clientX",0),this.clientY=ot(e,"clientY",0),this.button=ot(e,"button",0),this.relatedTarget=ot(e,"relatedTarget",null),this.pointerId=ot(e,"pointerId",0),this.width=ot(e,"width",0),this.height=ot(e,"height",0),this.pointerType=ot(e,"pointerType",""),this.isPrimary=ot(e,"isPrimary",!1),o.preventDefault&&(this.preventDefault=function(){o.preventDefault()})}function gr(t){if(t.buttons||bb)t=t.buttons;else switch(t.which){case 1:t=1;break;case 2:t=4;break;case 3:t=2;break;default:t=0}return t}function vr(t,e){var o=0;return o=t.pressure?t.pressure:e?.5:0}function mr(e,o){var i=gi("CANVAS");return t(e)&&(i.width=e),t(o)&&(i.height=o),i.getContext("2d")}function br(t,e){var o=t.style;o.WebkitTransform=e,o.MozTransform=e,o.b=e,o.msTransform=e,o.transform=e,Mm&&!Dm&&(t.style.transformOrigin="0 0")}function wr(e,o){var i;if(Cb()){if(t(6)){var n=Array(16);for(i=0;16>i;++i)n[i]=o[i].toFixed(6);i=n.join(",")}else i=o.join(",");br(e,"matrix3d("+i+")")}else if(Tb()){if(n=[o[0],o[1],o[4],o[5],o[12],o[13]],t(6)){var r=Array(6);for(i=0;6>i;++i)r[i]=n[i].toFixed(6);i=r.join(",")}else i=n.join(",");br(e,"matrix("+i+")")}else e.style.left=Math.round(o[12])+"px",e.style.top=Math.round(o[13])+"px"}function xr(t,e){var o,i,n=Mb.length;for(i=0;i<n;++i)try{if(o=t.getContext(Mb[i],e),null!==o)return o}catch(r){}return null}function Sr(t,e){this.b=t,this.e=e}function Tr(t){Sr.call(this,t,{mousedown:this.tk,mousemove:this.uk,mouseup:this.xk,mouseover:this.wk,mouseout:this.vk}),this.a=t.a,this.c=[]}function Cr(t,e){for(var o,i=t.c,n=e.clientX,r=e.clientY,s=0,a=i.length;s<a&&(o=i[s]);s++){var p=Math.abs(r-o[1]);if(25>=Math.abs(n-o[0])&&25>=p)return!0}return!1}function Mr(t){var e=Or(t,t.b),o=e.preventDefault;return e.preventDefault=function(){t.preventDefault(),o()},e.pointerId=1,e.isPrimary=!0,e.pointerType="mouse",e}function Pr(t){Sr.call(this,t,{MSPointerDown:this.Ck,MSPointerMove:this.Dk,MSPointerUp:this.Gk,MSPointerOut:this.Ek,MSPointerOver:this.Fk,MSPointerCancel:this.Bk,MSGotPointerCapture:this.zk,MSLostPointerCapture:this.Ak}),this.a=t.a,this.c=["","unavailable","touch","pen","mouse"]}function Er(t,e){var o=e;return l(e.b.pointerType)&&(o=Or(e,e.b),o.pointerType=t.c[e.b.pointerType]),o}function kr(t){Sr.call(this,t,{pointerdown:this.nn,pointermove:this.pn,pointerup:this.sn,pointerout:this.qn,pointerover:this.rn,pointercancel:this.mn,gotpointercapture:this.Fj,lostpointercapture:this.sk})}function Ar(t,e){Sr.call(this,t,{touchstart:this.so,touchmove:this.ro,touchend:this.qo,touchcancel:this.po}),this.a=t.a,this.g=e,this.c=void 0,this.f=0,this.d=void 0}function Rr(t,e,o){return e=Or(e,o),e.pointerId=o.identifier+2,e.bubbles=!0,e.cancelable=!0,e.detail=t.f,e.button=0,e.buttons=1,e.width=o.webkitRadiusX||o.radiusX||0,e.height=o.webkitRadiusY||o.radiusY||0,e.pressure=o.webkitForce||o.force||.5,e.isPrimary=t.c===o.identifier,e.pointerType="touch",e.clientX=o.clientX,e.clientY=o.clientY,e.screenX=o.screenX,e.screenY=o.screenY,e}function jr(t,e,o){function i(){e.preventDefault()}var n,r,s=Array.prototype.slice.call(e.b.changedTouches),a=s.length;for(n=0;n<a;++n)r=Rr(t,e,s[n]),r.preventDefault=i,o.call(t,e,r)}function Lr(t,e){var o=t.g.c,i=e.b.changedTouches[0];if(t.c===i.identifier){var n=[i.clientX,i.clientY];o.push(n),sm.setTimeout(function(){N(o,n)},2500)}}function Nr(t){Qt.call(this),this.Z=t,this.a={},this.c={},this.b=[],Lb?Ir(this,new kr(this)):Nb?Ir(this,new Pr(this)):(t=new Tr(this),Ir(this,t),jb&&Ir(this,new Ar(this,t))),t=this.b.length;for(var e,o=0;o<t;o++)e=this.b[o],Dr(this,Y(e.e))}function Ir(t,e){var o=Y(e.e);o&&(P(o,function(t){var o=e.e[t];o&&(this.c[t]=d(o,e))},t),t.b.push(e))}function Dr(t,e){P(e,function(t){qt(this.Z,t,this.d,!1,this)},t)}function Fr(t,e){P(e,function(t){Wt(this.Z,t,this.d,!1,this)},t)}function Or(t,e){for(var o,i={},n=0,r=Kb.length;n<r;n++)o=Kb[n][0],i[o]=t[o]||e[o]||Kb[n][1];return i}function Br(t,e,o){t.ec(e,o);var i=e.relatedTarget;null!==i&&Ti(e.target,i)||(e.bubbles=!1,Gr(t,Xb,e,o))}function Ur(t,e,o){e.bubbles=!0,Gr(t,qb,e,o);var i=e.relatedTarget;null!==i&&Ti(e.target,i)||(e.bubbles=!1,Gr(t,Hb,e,o))}function Gr(t,e,o,i){t.dispatchEvent(new dr(e,i,o))}function qr(t,e){t.dispatchEvent(new dr(e.type,e,e.b))}function $r(e,o,i,n,r){_i.call(this,e,o,r),this.b=i,this.originalEvent=i.b,this.pixel=o.Bd(this.originalEvent),this.coordinate=o.ka(this.pixel),this.dragging=!!t(n)&&n}function Hr(t,e,o,i,n){$r.call(this,t,e,o.b,i,n),this.a=o}function Xr(t){Qt.call(this),this.c=t,this.f=0,this.g=!1,this.a=this.i=this.d=null,t=this.c.a,this.o=0,this.l={},this.e=new Nr(t),this.b=null,this.i=qt(this.e,Ub,this.dk,!1,this),this.q=qt(this.e,Bb,this.Kn,!1,this)}function Wr(t,e){var o;o=new Hr(Vb,t.c,e),t.dispatchEvent(o),0!==t.f?(sm.clearTimeout(t.f),t.f=0,o=new Hr(Yb,t.c,e),t.dispatchEvent(o)):t.f=sm.setTimeout(d(function(){this.f=0;var t=new Hr(zb,this.c,e);this.dispatchEvent(t)},t),250)}function Kr(t,e){e.type==Qb||e.type==tw?delete t.l[e.pointerId]:e.type==Jb&&(t.l[e.pointerId]=!0),t.o=z(t.l)}function zr(e){re.call(this);var o=nt(e);o.brightness=t(e.brightness)?e.brightness:0,o.contrast=t(e.contrast)?e.contrast:1,o.hue=t(e.hue)?e.hue:0,o.opacity=t(e.opacity)?e.opacity:1,o.saturation=t(e.saturation)?e.saturation:1,o.visible=!t(e.visible)||e.visible,o.maxResolution=t(e.maxResolution)?e.maxResolution:1/0,o.minResolution=t(e.minResolution)?e.minResolution:0,this.t(o)}function Vr(t){var e=t.Bb(),o=t.Cb(),i=t.Db(),n=t.Kb(),r=t.Gb(),s=t.We(),a=t.eb(),p=t.G(),l=t.Eb(),h=t.Fb();return{layer:t,brightness:lt(e,-1,1),contrast:Math.max(o,0),hue:i,opacity:lt(n,0,1),saturation:Math.max(r,0),i:s,visible:a,extent:p,maxResolution:l,minResolution:Math.max(h,0)}}function Yr(e){var o=nt(e);delete o.source,zr.call(this,o),this.f=null,qt(this,se("source"),this.kk,!1,this),this.Jc(t(e.source)?e.source:null)}function Zr(t,e){return t.visible&&e>=t.minResolution&&e<t.maxResolution}function _r(t,e,o,i,n){Qt.call(this),this.f=n,this.extent=t,this.e=o,this.resolution=e,this.state=i}function Jr(t,e,o,i,n,r,s,a){return Ee(t),0===e&&0===o||Re(t,e,o),1==i&&1==n||je(t,i,n),0!==r&&Le(t,r),0===s&&0===a||Re(t,s,a),t}function Qr(t,e){return t[0]==e[0]&&t[1]==e[1]&&t[4]==e[4]&&t[5]==e[5]&&t[12]==e[12]&&t[13]==e[13]}function ts(t,e,o){var i=t[1],n=t[5],r=t[13],s=e[0];return e=e[1],o[0]=t[0]*s+t[4]*e+t[12],o[1]=i*s+n*e+r,o}function es(t){oe.call(this),this.a=t}function os(t,e){var o=e.state;return 2!=o&&3!=o&&qt(e,"change",t.Ol,!1,t),0==o&&(e.load(),o=e.state),2==o}function is(t){var e=t.a;e.eb()&&"ready"==e.We()&&t.k()}function ns(t,e){on(e.a)&&t.postRenderFunctions.push(g(function(t,e,o){e=c(t).toString(),t=t.a,o=o.usedTiles[e];for(var i;on(t)&&(e=t.b.qc,i=e.b[0].toString(),!(i in o&&o[i].contains(e.b)));)t.pop().Yc()},e))}function rs(t,e){if(null!=e){var o,i,n;for(i=0,n=e.length;i<n;++i)o=e[i],t[c(o).toString()]=o}}function ss(e,o){var i=o.L;t(i)&&(p(i)?e.logos[i]="":u(i)&&(e.logos[i.src]=i.href))}function as(t,e,o,i){e=c(e).toString(),o=o.toString(),e in t?o in t[e]?(t=t[e][o],i.b<t.b&&(t.b=i.b),i.d>t.d&&(t.d=i.d),i.c<t.c&&(t.c=i.c),i.a>t.a&&(t.a=i.a)):t[e][o]=i:(t[e]={},t[e][o]=i)}function ps(t,e,o){return[e*(Math.round(t[0]/e)+o[0]%2/2),e*(Math.round(t[1]/e)+o[1]%2/2)]}function ls(e,o,i,n,r,s,a,p,l,h){var u=c(o).toString();u in e.wantedTiles||(e.wantedTiles[u]={});var f=e.wantedTiles[u];e=e.tileQueue;var y,d,g,v,m,b,w=i.minZoom;for(b=a;b>=w;--b)for(d=gn(i,s,b,d),g=i.ma(b),v=d.b;v<=d.d;++v)for(m=d.c;m<=d.a;++m)a-b<=p?(y=o.Vb(b,v,m,n,r),0==y.state&&(f[Ko(y.b)]=!0,y.gb()in e.c||xs(e,[y,u,vn(i,y.b),g])),t(l)&&l.call(h,y)):o.yf(b,v,m)}function hs(t){this.U=t.opacity,this.V=t.rotateWithView,this.q=t.rotation,this.l=t.scale,this.n=t.snapToPixel}function us(e){e=t(e)?e:{},this.e=t(e.anchor)?e.anchor:[.5,.5],this.d=null,this.a=t(e.anchorOrigin)?e.anchorOrigin:"top-left",this.g=t(e.anchorXUnits)?e.anchorXUnits:"fraction",this.i=t(e.anchorYUnits)?e.anchorYUnits:"fraction";var o=t(e.crossOrigin)?e.crossOrigin:null,i=t(e.img)?e.img:null,n=t(e.imgSize)?e.imgSize:null,r=e.src;t(r)&&0!==r.length||null===i||(r=i.src);var s=t(e.src)?0:2,a=fs.Ia(),p=a.get(r,o);null===p&&(p=new cs(i,r,n,o,s),a.set(r,o,p)),this.b=p,this.p=t(e.offset)?e.offset:[0,0],this.c=t(e.offsetOrigin)?e.offsetOrigin:"top-left",this.f=null,this.o=t(e.size)?e.size:null,hs.call(this,{opacity:t(e.opacity)?e.opacity:1,rotation:t(e.rotation)?e.rotation:0,scale:t(e.scale)?e.scale:1,snapToPixel:!t(e.snapToPixel)||e.snapToPixel,rotateWithView:!!t(e.rotateWithView)&&e.rotateWithView})}function cs(t,e,o,i,n){Qt.call(this),this.e=null,this.b=null===t?new Image:t,null!==i&&(this.b.crossOrigin=i),this.d=null,this.c=n,this.a=o,this.f=e,this.i=!1}function fs(){this.b={},this.a=0}function ys(t,e){Tt.call(this),this.g=e,this.c=null,this.f={},this.o={}}function ds(t){var e=t.viewState,o=t.coordinateToPixelMatrix;Jr(o,t.size[0]/2,t.size[1]/2,1/e.resolution,-1/e.resolution,-e.rotation,-e.center[0],-e.center[1]),Ae(o,t.pixelToCoordinateMatrix)}function gs(){var t=fs.Ia();if(32<t.a){var e,o,i=0;for(e in t.b){o=t.b[e];var n;(n=0===(3&i++))&&(Nt(o)?o=ee(o,void 0,void 0):(o=_t(o),o=!!o&&Ut(o,void 0,void 0)),n=!o),n&&(delete t.b[e],--t.a)}}}function vs(t,e){var o=c(e).toString();if(o in t.f)return t.f[o];var i=t.Ke(e);return t.f[o]=i,t.o[o]=qt(i,"change",t.Tj,!1,t),i}function ms(t,e){for(var o in t.f)if(!(o in e.layerStates)){e.postRenderFunctions.push(d(t.Pn,t));break}}function bs(t,e){this.g=t,this.e=e,this.b=[],this.a=[],this.c={}}function ws(t){var e=t.b,o=t.a,i=e[0];return 1==e.length?(e.length=0,o.length=0):(e[0]=e.pop(),o[0]=o.pop(),Ss(t,0)),e=t.e(i),delete t.c[e],i}function xs(t,e){var o=t.g(e);1/0!=o&&(t.b.push(e),t.a.push(o),t.c[t.e(e)]=!0,Ts(t,0,t.b.length-1))}function Ss(t,e){for(var o=t.b,i=t.a,n=o.length,r=o[e],s=i[e],a=e;e<n>>1;){var p=2*e+1,l=2*e+2,p=l<n&&i[l]<i[p]?l:p;o[e]=o[p],i[e]=i[p],e=p}o[e]=r,i[e]=s,Ts(t,a,e)}function Ts(t,e,o){var i=t.b;t=t.a;for(var n=i[o],r=t[o];o>e;){var s=o-1>>1;if(!(t[s]>r))break;i[o]=i[s],t[o]=t[s],o=s}i[o]=n,t[o]=r}function Cs(t){var e,o,i,n=t.g,r=t.b,s=t.a,a=0,p=r.length;for(o=0;o<p;++o)e=r[o],i=n(e),1/0==i?delete t.c[t.e(e)]:(s[a]=i,r[a++]=e);for(r.length=a,s.length=a,n=(t.b.length>>1)-1;0<=n;n--)Ss(t,n)}function Ms(t,e){bs.call(this,function(e){return t.apply(null,e)},function(t){return t[0].gb()}),this.i=e,this.d=0}function Ps(t,e,o){this.d=t,this.c=e,
+this.f=o,this.b=[],this.a=this.e=0}function Es(t,e){var o=t.d,i=t.a,n=t.c-i,r=ks(t);return Go({source:e,duration:r,easing:function(t){return i*(Math.exp(o*t*r)-1)/n}})}function ks(t){return Math.log(t.c/t.a)/t.d}function As(t){re.call(this),this.l=null,this.d(!0),this.handleEvent=t.handleEvent}function Rs(e,o,i,n,r){if(null!=i){var s=o.Da(),a=o.Ca();t(s)&&t(a)&&t(r)&&0<r&&(e.Ha(qo({rotation:s,duration:r,easing:Fo})),t(n)&&e.Ha(Go({source:a,duration:r,easing:Fo}))),o.rotate(i,n)}}function js(t,e,o,i,n){var r=e.ya();o=e.constrainResolution(r,o,0),Ls(t,e,o,i,n)}function Ls(e,o,i,n,r){if(null!=i){var s=o.ya(),a=o.Ca();if(t(s)&&t(a)&&t(r)&&0<r&&(e.Ha($o({resolution:s,duration:r,easing:Fo})),t(n)&&e.Ha(Go({source:a,duration:r,easing:Fo}))),null!=n){var p;e=o.Ca(),r=o.ya(),t(e)&&t(r)&&(p=[n[0]-i*(n[0]-e[0])/r,n[1]-i*(n[1]-e[1])/r]),o.Na(p)}o.tb(i)}}function Ns(e){e=t(e)?e:{},this.a=t(e.delta)?e.delta:1,As.call(this,{handleEvent:Is}),this.e=t(e.duration)?e.duration:250}function Is(t){var e=!1,o=t.b;if(t.type==Yb){var e=t.map,i=t.coordinate,o=o.d?-this.a:this.a,n=e.R();js(e,n,o,i,this.e),t.preventDefault(),e=!0}return!e}function Ds(t){return t=t.b,t.a&&!t.g&&t.d}function Fs(t){return"pointermove"==t.type}function Os(t){return t.type==zb}function Bs(t){return t=t.b,!t.a&&!t.g&&!t.d}function Us(t){return t=t.b,!t.a&&!t.g&&t.d}function Gs(t){return t=t.b.target.tagName,"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}function qs(t){return 1==t.a.pointerId}function $s(e){e=t(e)?e:{},As.call(this,{handleEvent:t(e.handleEvent)?e.handleEvent:Xs}),this.vb=t(e.handleDownEvent)?e.handleDownEvent:pb,this.wb=t(e.handleDragEvent)?e.handleDragEvent:o,this.xb=t(e.handleMoveEvent)?e.handleMoveEvent:o,this.sc=t(e.handleUpEvent)?e.handleUpEvent:pb,this.o=!1,this.J={},this.e=[]}function Hs(t){for(var e=t.length,o=0,i=0,n=0;n<e;n++)o+=t[n].clientX,i+=t[n].clientY;return[o/e,i/e]}function Xs(t){if(!(t instanceof Hr))return!0;var e=!1,o=t.type;return o!==Jb&&o!==Zb&&o!==Qb||(o=t.a,t.type==Qb?delete this.J[o.pointerId]:t.type==Jb?this.J[o.pointerId]=o:o.pointerId in this.J&&(this.J[o.pointerId]=o),this.e=V(this.J)),this.o&&(t.type==Zb?this.wb(t):t.type==Qb&&(this.o=this.sc(t))),t.type==Jb?(this.o=t=this.vb(t),e=this.nc(t)):t.type==_b&&this.xb(t),!e}function Ws(e){$s.call(this,{handleDownEvent:Vs,handleDragEvent:Ks,handleUpEvent:zs}),e=t(e)?e:{},this.a=e.kinetic,this.f=this.g=null,this.n=t(e.condition)?e.condition:Bs,this.i=!1}function Ks(t){var e=Hs(this.e);if(this.a&&this.a.update(e[0],e[1]),null!==this.f){var o=this.f[0]-e[0],i=e[1]-this.f[1];t=t.map;var n=t.R(),r=No(n),i=o=[o,i],s=r.resolution;i[0]*=s,i[1]*=s,ge(o,r.rotation),ue(o,r.center),o=n.xd(o),t.render(),n.Na(o)}this.f=e}function zs(t){t=t.map;var e=t.R();if(0===this.e.length){var o;if(o=!this.i&&this.a)if(o=this.a,6>o.b.length)o=!1;else{var i=lm()-o.f,n=o.b.length-3;if(o.b[n+2]<i)o=!1;else{for(var r=n-3;0<r&&o.b[r+2]>i;)r-=3;var i=o.b[n+2]-o.b[r+2],s=o.b[n]-o.b[r],n=o.b[n+1]-o.b[r+1];o.e=Math.atan2(n,s),o.a=Math.sqrt(s*s+n*n)/i,o=o.a>o.c}}return o&&(o=this.a,o=(o.c-o.a)/o.d,n=this.a.e,r=e.Ca(),this.g=Es(this.a,r),t.Ha(this.g),r=t.ta(r),o=t.ka([r[0]-o*Math.cos(n),r[1]-o*Math.sin(n)]),o=e.xd(o),e.Na(o)),Do(e,-1),t.render(),!1}return this.f=null,!0}function Vs(t){if(0<this.e.length&&this.n(t)){var e=t.map,o=e.R();return this.f=null,this.o||Do(o,1),e.render(),null!==this.g&&N(e.H,this.g)&&(o.Na(t.frameState.viewState.center),this.g=null),this.a&&(t=this.a,t.b.length=0,t.e=0,t.a=0),this.i=1<this.e.length,!0}return!1}function Ys(e){e=t(e)?e:{},$s.call(this,{handleDownEvent:Js,handleDragEvent:Zs,handleUpEvent:_s}),this.f=t(e.condition)?e.condition:Ds,this.a=void 0,this.g=t(e.duration)?e.duration:250}function Zs(e){if(qs(e)){var o=e.map,i=o.xa();if(e=e.pixel,i=Math.atan2(i[1]/2-e[1],e[0]-i[0]/2),t(this.a)){e=i-this.a;var n=o.R(),r=n.Da();o.render(),Rs(o,n,r-e)}this.a=i}}function _s(t){if(!qs(t))return!0;t=t.map;var e=t.R();Do(e,-1);var o=e.Da(),i=this.g,o=e.constrainRotation(o,0);return Rs(t,e,o,void 0,i),!1}function Js(t){return!!(qs(t)&&Lt(t.b)&&this.f(t))&&(t=t.map,Do(t.R(),1),t.render(),this.a=void 0,!0)}function Qs(){re.call(this),this.o=qe(),this.n=-1,this.f={},this.l=this.g=0}function ta(e,o,i,n,r,s){var a=r[0],p=r[1],l=r[4],h=r[5],u=r[12];r=r[13];for(var c=t(s)?s:[],f=0;o<i;o+=n){var y=e[o],d=e[o+1];c[f++]=a*y+l*d+u,c[f++]=p*y+h*d+r}return t(s)&&c.length!=f&&(c.length=f),c}function ea(){Qs.call(this),this.a="XY",this.s=2,this.j=null}function oa(t){return"XY"==t?2:"XYZ"==t||"XYM"==t?3:"XYZM"==t?4:void 0}function ia(t,e,o){t.s=oa(e),t.a=e,t.j=o}function na(e,o,i,n){if(t(o))i=oa(o);else{for(o=0;o<n;++o){if(0===i.length)return e.a="XY",void(e.s=2);i=i[0]}i=i.length,o=2==i?"XY":3==i?"XYZ":4==i?"XYZM":void 0}e.a=o,e.s=i}function ra(t,e,o,i){for(var n=0,r=t[o-i],s=t[o-i+1];e<o;e+=i)var a=t[e],p=t[e+1],n=n+(s*a-r*p),r=a,s=p;return n/2}function sa(t,e,o,i){var n,r,s=0;for(n=0,r=o.length;n<r;++n){var a=o[n],s=s+ra(t,e,a,i);e=a}return s}function aa(t,e,o,i,n,r){var s=n-o,a=r-i;if(0!==s||0!==a){var p=((t-o)*s+(e-i)*a)/(s*s+a*a);1<p?(o=n,i=r):0<p&&(o+=s*p,i+=a*p)}return pa(t,e,o,i)}function pa(t,e,o,i){return t=o-t,e=i-e,t*t+e*e}function la(t,e,o,i,n,r,s){var a=t[e],p=t[e+1],l=t[o]-a,h=t[o+1]-p;if(0!==l||0!==h)if(r=((n-a)*l+(r-p)*h)/(l*l+h*h),1<r)e=o;else if(0<r){for(n=0;n<i;++n)s[n]=ut(t[e+n],t[o+n],r);return void(s.length=i)}for(n=0;n<i;++n)s[n]=t[e+n];s.length=i}function ha(t,e,o,i,n){var r=t[e],s=t[e+1];for(e+=i;e<o;e+=i){var a=t[e],p=t[e+1],r=pa(r,s,a,p);r>n&&(n=r),r=a,s=p}return n}function ua(t,e,o,i,n){var r,s;for(r=0,s=o.length;r<s;++r){var a=o[r];n=ha(t,e,a,i,n),e=a}return n}function ca(e,o,i,n,r,s,a,p,l,h,u){if(o==i)return h;var c;if(0===r){if(c=pa(a,p,e[o],e[o+1]),c<h){for(u=0;u<n;++u)l[u]=e[o+u];return l.length=n,c}return h}for(var f=t(u)?u:[NaN,NaN],y=o+n;y<i;)if(la(e,y-n,y,n,a,p,f),c=pa(a,p,f[0],f[1]),c<h){for(h=c,u=0;u<n;++u)l[u]=f[u];l.length=n,y+=n}else y+=n*Math.max((Math.sqrt(c)-Math.sqrt(h))/r|0,1);if(s&&(la(e,i-n,o,n,a,p,f),c=pa(a,p,f[0],f[1]),c<h)){for(h=c,u=0;u<n;++u)l[u]=f[u];l.length=n}return h}function fa(e,o,i,n,r,s,a,p,l,h,u){u=t(u)?u:[NaN,NaN];var c,f;for(c=0,f=i.length;c<f;++c){var y=i[c];h=ca(e,o,y,n,r,s,a,p,l,h,u),o=y}return h}function ya(t,e){var o,i,n=0;for(o=0,i=e.length;o<i;++o)t[n++]=e[o];return n}function da(t,e,o,i){var n,r;for(n=0,r=o.length;n<r;++n){var s,a=o[n];for(s=0;s<i;++s)t[e++]=a[s]}return e}function ga(e,o,i,n,r){r=t(r)?r:[];var s,a,p=0;for(s=0,a=i.length;s<a;++s)o=da(e,o,i[s],n),r[p++]=o;return r.length=p,r}function va(e,o,i,n,r){r=t(r)?r:[];for(var s=0;o<i;o+=n)r[s++]=e.slice(o,o+n);return r.length=s,r}function ma(e,o,i,n,r){r=t(r)?r:[];var s,a,p=0;for(s=0,a=i.length;s<a;++s){var l=i[s];r[p++]=va(e,o,l,n,r[p]),o=l}return r.length=p,r}function ba(t,e,o,i,n,r,s){var a=(o-e)/i;if(3>a){for(;e<o;e+=i)r[s++]=t[e],r[s++]=t[e+1];return s}var p=Array(a);p[0]=1,p[a-1]=1,o=[e,o-i];for(var l,h=0;0<o.length;){var u=o.pop(),c=o.pop(),f=0,y=t[c],d=t[c+1],g=t[u],v=t[u+1];for(l=c+i;l<u;l+=i){var m=aa(t[l],t[l+1],y,d,g,v);m>f&&(h=l,f=m)}f>n&&(p[(h-e)/i]=1,c+i<h&&o.push(c,h),h+i<u&&o.push(h,u))}for(l=0;l<a;++l)p[l]&&(r[s++]=t[e+l*i],r[s++]=t[e+l*i+1]);return s}function wa(t,e,o,i,n,r,s,a){var p,l;for(p=0,l=o.length;p<l;++p){var h=o[p];t:{var u=t,c=h,f=i,y=n,d=r;if(e!=c){var g=y*Math.round(u[e]/y),v=y*Math.round(u[e+1]/y);e+=f,d[s++]=g,d[s++]=v;var m=void 0,b=void 0;do if(m=y*Math.round(u[e]/y),b=y*Math.round(u[e+1]/y),e+=f,e==c){d[s++]=m,d[s++]=b;break t}while(m==g&&b==v);for(;e<c;){var w,x;if(w=y*Math.round(u[e]/y),x=y*Math.round(u[e+1]/y),e+=f,w!=m||x!=b){var S=m-g,T=b-v,C=w-g,M=x-v;S*M==T*C&&(0>S&&C<S||S==C||0<S&&C>S)&&(0>T&&M<T||T==M||0<T&&M>T)||(d[s++]=m,d[s++]=b,g=m,v=b),m=w,b=x}}d[s++]=m,d[s++]=b}}a.push(s),e=h}return s}function xa(t,e){ea.call(this),this.c=this.i=-1,this.W(t,e)}function Sa(t,e,o){ia(t,e,o),t.k()}function Ta(t,e){ea.call(this),this.W(t,e)}function Ca(t,e,o){ia(t,e,o),t.k()}function Ma(t,e,o,i,n){return!Ve(n,function(n){return!Pa(t,e,o,i,n[0],n[1])})}function Pa(t,e,o,i,n,r){for(var s=!1,a=t[o-i],p=t[o-i+1];e<o;e+=i){var l=t[e],h=t[e+1];p>r!=h>r&&n<(l-a)*(r-p)/(h-p)+a&&(s=!s),a=l,p=h}return s}function Ea(t,e,o,i,n,r){if(0===o.length||!Pa(t,e,o[0],i,n,r))return!1;var s;for(e=1,s=o.length;e<s;++e)if(Pa(t,o[e-1],o[e],i,n,r))return!1;return!0}function ka(e,o,i,n,r,s,a){var p,l,h,u,c,f=r[s+1],y=[],d=i[0];for(h=e[d-n],c=e[d-n+1],p=o;p<d;p+=n)u=e[p],l=e[p+1],(f<=c&&l<=f||c<=f&&f<=l)&&(h=(f-c)/(l-c)*(u-h)+h,y.push(h)),h=u,c=l;for(d=NaN,c=-(1/0),y.sort(),h=y[0],p=1,l=y.length;p<l;++p){u=y[p];var g=Math.abs(u-h);g>c&&(h=(h+u)/2,Ea(e,o,i,n,h,f)&&(d=h,c=g)),h=u}return isNaN(d)&&(d=r[s]),t(a)?(a.push(d,f),a):[d,f]}function Aa(t,e,o,i,n,r){for(var s,a=[t[e],t[e+1]],p=[];e+i<o;e+=i){if(p[0]=t[e+i],p[1]=t[e+i+1],s=n.call(r,a,p))return s;a[0]=p[0],a[1]=p[1]}return!1}function Ra(t,e,o,i,n){var r=ze(qe(),t,e,o,i);return!!ro(n,r)&&(!!(Be(n,r)||r[0]>=n[0]&&r[2]<=n[2]||r[1]>=n[1]&&r[3]<=n[3])||Aa(t,e,o,i,function(t,e){var o=!1,i=Ge(n,t),r=Ge(n,e);if(1===i||1===r)o=!0;else{var s=n[0],a=n[1],p=n[2],l=n[3],h=e[0],u=e[1],c=(u-t[1])/(h-t[0]);2&r&&!(2&i)&&(o=h-(u-l)/c,o=o>=s&&o<=p),o||!(4&r)||4&i||(o=u-(h-p)*c,o=o>=a&&o<=l),o||!(8&r)||8&i||(o=h-(u-a)/c,o=o>=s&&o<=p),o||!(16&r)||16&i||(o=u-(h-s)*c,o=o>=a&&o<=l)}return o}))}function ja(t,e,o,i,n){var r=o[0];if(!(Ra(t,e,r,i,n)||Pa(t,e,r,i,n[0],n[1])||Pa(t,e,r,i,n[0],n[3])||Pa(t,e,r,i,n[2],n[1])||Pa(t,e,r,i,n[2],n[3])))return!1;if(1===o.length)return!0;for(e=1,r=o.length;e<r;++e)if(Ma(t,o[e-1],o[e],i,n))return!1;return!0}function La(t,e,o,i){for(var n=0,r=t[o-i],s=t[o-i+1];e<o;e+=i)var a=t[e],p=t[e+1],n=n+(a-r)*(p+s),r=a,s=p;return 0<n}function Na(e,o,i,n){var r=0;n=!!t(n)&&n;var s,a;for(s=0,a=o.length;s<a;++s){var p=o[s],r=La(e,r,p,i);if(0===s){if(n&&r||!n&&!r)return!1}else if(n&&!r||!n&&r)return!1;r=p}return!0}function Ia(e,o,i,n,r){r=!!t(r)&&r;var s,a;for(s=0,a=i.length;s<a;++s){var p=i[s],l=La(e,o,p,n);if(0===s?r&&l||!r&&!l:r&&!l||!r&&l)for(var l=e,h=p,u=n;o<h-u;){var c;for(c=0;c<u;++c){var f=l[o+c];l[o+c]=l[h-u+c],l[h-u+c]=f}o+=u,h-=u}o=p}return o}function Da(t,e,o,i){var n,r,s=0;for(n=0,r=e.length;n<r;++n)s=Ia(t,s,e[n],o,i);return s}function Fa(t,e){ea.call(this),this.c=[],this.p=-1,this.H=null,this.N=this.J=this.L=-1,this.i=null,this.W(t,e)}function Oa(t){if(t.p!=t.b){var e=_e(t.G());t.H=ka(Ba(t),0,t.c,t.s,e,0),t.p=t.b}return t.H}function Ba(t){if(t.N!=t.b){var e=t.j;Na(e,t.c,t.s)?t.i=e:(t.i=e.slice(),t.i.length=Ia(t.i,0,t.c,t.s)),t.N=t.b}return t.i}function Ua(t,e,o,i){ia(t,e,o),t.c=i,t.k()}function Ga(e,o,i,n){var r=t(n)?n:32;n=[];var s;for(s=0;s<r;++s)F(n,e.offset(o,i,2*Math.PI*s/r));return n.push(n[0],n[1]),e=new Fa(null),Ua(e,"XY",n,[n.length]),e}function qa(){}function $a(t,e,o,i,n,r,s){Pt.call(this,t,e),this.vectorContext=o,this.b=i,this.frameState=n,this.context=r,this.glContext=s}function Ha(t){this.c=this.a=this.e=this.d=this.b=null,this.f=t}function Xa(t){var e=t.e,o=t.a;return t=k([e,[e[0],o[1]],o,[o[0],e[1]]],t.b.ka,t.b),t[4]=t[0].slice(),new Fa([t])}function Wa(t){null===t.b||null===t.e||null===t.a||t.b.render()}function Ka(t,e){Pt.call(this,t),this.coordinate=e}function za(e){$s.call(this,{handleDownEvent:Za,handleDragEvent:Va,handleUpEvent:Ya}),e=t(e)?e:{},this.f=new Ha(t(e.style)?e.style:null),this.a=null,this.i=t(e.condition)?e.condition:lb}function Va(t){if(qs(t)){var e=this.f;t=t.pixel,e.e=this.a,e.a=t,e.c=Xa(e),Wa(e)}}function Ya(t){if(!qs(t))return!0;this.f.setMap(null);var e=t.pixel[0]-this.a[0],o=t.pixel[1]-this.a[1];return 64<=e*e+o*o&&(this.g(t),this.dispatchEvent(new Ka("boxend",t.coordinate))),!1}function Za(t){if(qs(t)&&Lt(t.b)&&this.i(t)){this.a=t.pixel,this.f.setMap(t.map);var e=this.f,o=this.a;return e.e=this.a,e.a=o,e.c=Xa(e),Wa(e),this.dispatchEvent(new Ka("boxstart",t.coordinate)),!0}return!1}function _a(){this.a=-1}function Ja(){this.a=-1,this.a=64,this.b=Array(4),this.e=Array(this.a),this.d=this.c=0,this.b[0]=1732584193,this.b[1]=4023233417,this.b[2]=2562383102,this.b[3]=271733878,this.d=this.c=0}function Qa(t,e,o){o||(o=0);var i=Array(16);if(p(e))for(var n=0;16>n;++n)i[n]=e.charCodeAt(o++)|e.charCodeAt(o++)<<8|e.charCodeAt(o++)<<16|e.charCodeAt(o++)<<24;else for(n=0;16>n;++n)i[n]=e[o++]|e[o++]<<8|e[o++]<<16|e[o++]<<24;e=t.b[0],o=t.b[1];var n=t.b[2],r=t.b[3],s=0,s=e+(r^o&(n^r))+i[0]+3614090360&4294967295;e=o+(s<<7&4294967295|s>>>25),s=r+(n^e&(o^n))+i[1]+3905402710&4294967295,r=e+(s<<12&4294967295|s>>>20),s=n+(o^r&(e^o))+i[2]+606105819&4294967295,n=r+(s<<17&4294967295|s>>>15),s=o+(e^n&(r^e))+i[3]+3250441966&4294967295,o=n+(s<<22&4294967295|s>>>10),s=e+(r^o&(n^r))+i[4]+4118548399&4294967295,e=o+(s<<7&4294967295|s>>>25),s=r+(n^e&(o^n))+i[5]+1200080426&4294967295,r=e+(s<<12&4294967295|s>>>20),s=n+(o^r&(e^o))+i[6]+2821735955&4294967295,n=r+(s<<17&4294967295|s>>>15),s=o+(e^n&(r^e))+i[7]+4249261313&4294967295,o=n+(s<<22&4294967295|s>>>10),s=e+(r^o&(n^r))+i[8]+1770035416&4294967295,e=o+(s<<7&4294967295|s>>>25),s=r+(n^e&(o^n))+i[9]+2336552879&4294967295,r=e+(s<<12&4294967295|s>>>20),s=n+(o^r&(e^o))+i[10]+4294925233&4294967295,n=r+(s<<17&4294967295|s>>>15),s=o+(e^n&(r^e))+i[11]+2304563134&4294967295,o=n+(s<<22&4294967295|s>>>10),s=e+(r^o&(n^r))+i[12]+1804603682&4294967295,e=o+(s<<7&4294967295|s>>>25),s=r+(n^e&(o^n))+i[13]+4254626195&4294967295,r=e+(s<<12&4294967295|s>>>20),s=n+(o^r&(e^o))+i[14]+2792965006&4294967295,n=r+(s<<17&4294967295|s>>>15),s=o+(e^n&(r^e))+i[15]+1236535329&4294967295,o=n+(s<<22&4294967295|s>>>10),s=e+(n^r&(o^n))+i[1]+4129170786&4294967295,e=o+(s<<5&4294967295|s>>>27),s=r+(o^n&(e^o))+i[6]+3225465664&4294967295,r=e+(s<<9&4294967295|s>>>23),s=n+(e^o&(r^e))+i[11]+643717713&4294967295,n=r+(s<<14&4294967295|s>>>18),s=o+(r^e&(n^r))+i[0]+3921069994&4294967295,o=n+(s<<20&4294967295|s>>>12),s=e+(n^r&(o^n))+i[5]+3593408605&4294967295,e=o+(s<<5&4294967295|s>>>27),s=r+(o^n&(e^o))+i[10]+38016083&4294967295,r=e+(s<<9&4294967295|s>>>23),s=n+(e^o&(r^e))+i[15]+3634488961&4294967295,n=r+(s<<14&4294967295|s>>>18),s=o+(r^e&(n^r))+i[4]+3889429448&4294967295,o=n+(s<<20&4294967295|s>>>12),s=e+(n^r&(o^n))+i[9]+568446438&4294967295,e=o+(s<<5&4294967295|s>>>27),s=r+(o^n&(e^o))+i[14]+3275163606&4294967295,r=e+(s<<9&4294967295|s>>>23),s=n+(e^o&(r^e))+i[3]+4107603335&4294967295,n=r+(s<<14&4294967295|s>>>18),s=o+(r^e&(n^r))+i[8]+1163531501&4294967295,o=n+(s<<20&4294967295|s>>>12),s=e+(n^r&(o^n))+i[13]+2850285829&4294967295,e=o+(s<<5&4294967295|s>>>27),s=r+(o^n&(e^o))+i[2]+4243563512&4294967295,r=e+(s<<9&4294967295|s>>>23),s=n+(e^o&(r^e))+i[7]+1735328473&4294967295,n=r+(s<<14&4294967295|s>>>18),s=o+(r^e&(n^r))+i[12]+2368359562&4294967295,o=n+(s<<20&4294967295|s>>>12),s=e+(o^n^r)+i[5]+4294588738&4294967295,e=o+(s<<4&4294967295|s>>>28),s=r+(e^o^n)+i[8]+2272392833&4294967295,r=e+(s<<11&4294967295|s>>>21),s=n+(r^e^o)+i[11]+1839030562&4294967295,n=r+(s<<16&4294967295|s>>>16),s=o+(n^r^e)+i[14]+4259657740&4294967295,o=n+(s<<23&4294967295|s>>>9),s=e+(o^n^r)+i[1]+2763975236&4294967295,e=o+(s<<4&4294967295|s>>>28),s=r+(e^o^n)+i[4]+1272893353&4294967295,r=e+(s<<11&4294967295|s>>>21),s=n+(r^e^o)+i[7]+4139469664&4294967295,n=r+(s<<16&4294967295|s>>>16),s=o+(n^r^e)+i[10]+3200236656&4294967295,o=n+(s<<23&4294967295|s>>>9),s=e+(o^n^r)+i[13]+681279174&4294967295,e=o+(s<<4&4294967295|s>>>28),s=r+(e^o^n)+i[0]+3936430074&4294967295,r=e+(s<<11&4294967295|s>>>21),s=n+(r^e^o)+i[3]+3572445317&4294967295,n=r+(s<<16&4294967295|s>>>16),s=o+(n^r^e)+i[6]+76029189&4294967295,o=n+(s<<23&4294967295|s>>>9),s=e+(o^n^r)+i[9]+3654602809&4294967295,e=o+(s<<4&4294967295|s>>>28),s=r+(e^o^n)+i[12]+3873151461&4294967295,r=e+(s<<11&4294967295|s>>>21),s=n+(r^e^o)+i[15]+530742520&4294967295,n=r+(s<<16&4294967295|s>>>16),s=o+(n^r^e)+i[2]+3299628645&4294967295,o=n+(s<<23&4294967295|s>>>9),s=e+(n^(o|~r))+i[0]+4096336452&4294967295,e=o+(s<<6&4294967295|s>>>26),s=r+(o^(e|~n))+i[7]+1126891415&4294967295,r=e+(s<<10&4294967295|s>>>22),s=n+(e^(r|~o))+i[14]+2878612391&4294967295,n=r+(s<<15&4294967295|s>>>17),s=o+(r^(n|~e))+i[5]+4237533241&4294967295,o=n+(s<<21&4294967295|s>>>11),s=e+(n^(o|~r))+i[12]+1700485571&4294967295,e=o+(s<<6&4294967295|s>>>26),s=r+(o^(e|~n))+i[3]+2399980690&4294967295,r=e+(s<<10&4294967295|s>>>22),s=n+(e^(r|~o))+i[10]+4293915773&4294967295,n=r+(s<<15&4294967295|s>>>17),s=o+(r^(n|~e))+i[1]+2240044497&4294967295,o=n+(s<<21&4294967295|s>>>11),s=e+(n^(o|~r))+i[8]+1873313359&4294967295,e=o+(s<<6&4294967295|s>>>26),s=r+(o^(e|~n))+i[15]+4264355552&4294967295,r=e+(s<<10&4294967295|s>>>22),s=n+(e^(r|~o))+i[6]+2734768916&4294967295,n=r+(s<<15&4294967295|s>>>17),s=o+(r^(n|~e))+i[13]+1309151649&4294967295,o=n+(s<<21&4294967295|s>>>11),s=e+(n^(o|~r))+i[4]+4149444226&4294967295,e=o+(s<<6&4294967295|s>>>26),s=r+(o^(e|~n))+i[11]+3174756917&4294967295,r=e+(s<<10&4294967295|s>>>22),s=n+(e^(r|~o))+i[2]+718787259&4294967295,n=r+(s<<15&4294967295|s>>>17),s=o+(r^(n|~e))+i[9]+3951481745&4294967295,t.b[0]=t.b[0]+e&4294967295,t.b[1]=t.b[1]+(n+(s<<21&4294967295|s>>>11))&4294967295,t.b[2]=t.b[2]+n&4294967295,t.b[3]=t.b[3]+r&4294967295}function tp(e){e=t(e)?e:{},this.b=t(e.color)?e.color:null,this.d=e.lineCap,this.c=t(e.lineDash)?e.lineDash:null,this.e=e.lineJoin,this.f=e.miterLimit,this.a=e.width,this.g=void 0}function ep(e){e=t(e)?e:{},this.b=t(e.color)?e.color:null,this.a=void 0}function op(e){e=t(e)?e:{},this.f=this.b=this.e=null,this.d=t(e.fill)?e.fill:null,this.a=t(e.stroke)?e.stroke:null,this.c=e.radius,this.o=[0,0],this.i=this.p=this.g=null;var o,i,n=e.atlasManager,r=null,s=0;null!==this.a&&(i=ni(this.a.b),s=this.a.a,t(s)||(s=1),r=this.a.c,Eb||(r=null));var a=2*(this.c+s)+1;i={strokeStyle:i,md:s,size:a,lineDash:r},t(n)?(a=Math.round(a),(r=null===this.d)&&(o=d(this.Rg,this,i)),s=this.nb(),i=n.add(s,a,a,d(this.Sg,this,i),o),this.b=i.image,this.o=[i.offsetX,i.offsetY],o=i.image.width,this.f=r?i.ig:this.b):(this.b=gi("CANVAS"),this.b.height=a,this.b.width=a,o=a=this.b.width,n=this.b.getContext("2d"),this.Sg(i,n,0,0),null===this.d?(n=this.f=gi("CANVAS"),n.height=i.size,n.width=i.size,n=n.getContext("2d"),this.Rg(i,n,0,0)):this.f=this.b),this.g=[a/2,a/2],this.p=[a,a],this.i=[o,o],hs.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:!t(e.snapToPixel)||e.snapToPixel})}function ip(e){e=t(e)?e:{},this.g=null,this.d=ap,t(e.geometry)&&this.Vg(e.geometry),this.e=t(e.fill)?e.fill:null,this.f=t(e.image)?e.image:null,this.c=t(e.stroke)?e.stroke:null,this.a=t(e.text)?e.text:null,this.b=e.zIndex}function np(t){return h(t)||(t=s(t)?t:[t],t=ln(t)),t}function rp(){var t=new ep({color:"rgba(255,255,255,0.4)"}),e=new tp({color:"#3399CC",width:1.25}),o=[new ip({image:new op({fill:t,stroke:e,radius:5}),fill:t,stroke:e})];return rp=function(){return o},o}function sp(){var t={},e=[255,255,255,1],o=[0,153,255,1];return t.Polygon=[new ip({fill:new ep({color:[255,255,255,.5]})})],t.MultiPolygon=t.Polygon,t.LineString=[new ip({stroke:new tp({color:e,width:5})}),new ip({stroke:new tp({color:o,width:3})})],t.MultiLineString=t.LineString,t.Circle=t.Polygon.concat(t.LineString),t.Point=[new ip({image:new op({radius:6,fill:new ep({color:o}),stroke:new tp({color:e,width:1.5})}),zIndex:1/0})],t.MultiPoint=t.Point,t.GeometryCollection=t.Polygon.concat(t.Point),t}function ap(t){return t.Q()}function pp(e){var o=t(e)?e:{};e=t(o.condition)?o.condition:Us,this.n=t(o.duration)?o.duration:200,o=t(o.style)?o.style:new ip({stroke:new tp({color:[0,0,255,1]})}),za.call(this,{condition:e,style:o})}function lp(e){As.call(this,{handleEvent:hp}),e=t(e)?e:{},this.a=t(e.condition)?e.condition:fn(Bs,Gs),this.e=t(e.duration)?e.duration:100,this.f=t(e.pixelDelta)?e.pixelDelta:128}function hp(e){var o=!1;if("key"==e.type){var i=e.b.e;if(this.a(e)&&(40==i||37==i||39==i||38==i)){var n=e.map,o=n.R(),r=No(o),s=r.resolution*this.f,a=0,p=0;40==i?p=-s:37==i?a=-s:39==i?a=s:p=s,i=[a,p],ge(i,r.rotation),r=this.e,s=o.Ca(),t(s)&&(t(r)&&0<r&&n.Ha(Go({source:s,duration:r,easing:Bo})),n=o.xd([s[0]+i[0],s[1]+i[1]]),o.Na(n)),e.preventDefault(),o=!0}}return!o}function up(e){As.call(this,{handleEvent:cp}),e=t(e)?e:{},this.e=t(e.condition)?e.condition:Gs,this.a=t(e.delta)?e.delta:1,this.f=t(e.duration)?e.duration:100}function cp(t){var e=!1;if("key"==t.type){var o=t.b.q;if(this.e(t)&&(43==o||45==o)){e=t.map,o=43==o?this.a:-this.a,e.render();var i=e.R();js(e,i,o,void 0,this.f),t.preventDefault(),e=!0}}return!e}function fp(e){As.call(this,{handleEvent:yp}),e=t(e)?e:{},this.a=0,this.o=t(e.duration)?e.duration:250,this.f=null,this.g=this.e=void 0}function yp(e){var o=!1;if("mousewheel"==e.type){var o=e.map,i=e.b;this.f=e.coordinate,this.a+=i.o,t(this.e)||(this.e=lm()),i=Math.max(80-(lm()-this.e),0),sm.clearTimeout(this.g),this.g=sm.setTimeout(d(this.i,this,o),i),e.preventDefault(),o=!0}return!o}function dp(e){$s.call(this,{handleDownEvent:mp,handleDragEvent:gp,handleUpEvent:vp}),e=t(e)?e:{},this.f=null,this.g=void 0,this.a=!1,this.i=0,this.p=t(e.threshold)?e.threshold:.3,this.n=t(e.duration)?e.duration:250}function gp(e){var o=0,i=this.e[0],n=this.e[1],i=Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX);t(this.g)&&(o=i-this.g,this.i+=o,!this.a&&Math.abs(this.i)>this.p&&(this.a=!0)),this.g=i,e=e.map,i=qi(e.a),n=Hs(this.e),n[0]-=i.x,n[1]-=i.y,this.f=e.ka(n),this.a&&(i=e.R(),n=i.Da(),e.render(),Rs(e,i,n+o,this.f))}function vp(t){if(2>this.e.length){t=t.map;var e=t.R();if(Do(e,-1),this.a){var o=e.Da(),i=this.f,n=this.n,o=e.constrainRotation(o,0);Rs(t,e,o,i,n)}return!1}return!0}function mp(t){return 2<=this.e.length&&(t=t.map,this.f=null,this.g=void 0,this.a=!1,this.i=0,this.o||Do(t.R(),1),t.render(),!0)}function bp(e){$s.call(this,{handleDownEvent:Sp,handleDragEvent:wp,handleUpEvent:xp}),e=t(e)?e:{},this.f=null,this.i=t(e.duration)?e.duration:400,this.a=void 0,this.g=1}function wp(e){var o=1,i=this.e[0],n=this.e[1],r=i.clientX-n.clientX,i=i.clientY-n.clientY,r=Math.sqrt(r*r+i*i);t(this.a)&&(o=this.a/r),this.a=r,1!=o&&(this.g=o),e=e.map;var r=e.R(),i=r.ya(),n=qi(e.a),s=Hs(this.e);s[0]-=n.x,s[1]-=n.y,this.f=e.ka(s),e.render(),Ls(e,r,i*o,this.f)}function xp(t){if(2>this.e.length){t=t.map;var e=t.R();Do(e,-1);var o=e.ya(),i=this.f,n=this.i,o=e.constrainResolution(o,0,this.g-1);return Ls(t,e,o,i,n),!1}return!0}function Sp(t){return 2<=this.e.length&&(t=t.map,this.f=null,this.a=void 0,this.g=1,this.o||Do(t.R(),1),t.render(),!0)}function Tp(e){e=t(e)?e:{};var o=new ei,i=new Ps((-.005),.05,100);return(t(e.altShiftDragRotate)?e.altShiftDragRotate:1)&&o.push(new Ys),(t(e.doubleClickZoom)?e.doubleClickZoom:1)&&o.push(new Ns({delta:e.zoomDelta,duration:e.zoomDuration})),(t(e.dragPan)?e.dragPan:1)&&o.push(new Ws({kinetic:i})),(t(e.pinchRotate)?e.pinchRotate:1)&&o.push(new dp),(t(e.pinchZoom)?e.pinchZoom:1)&&o.push(new bp({duration:e.zoomDuration})),(t(e.keyboard)?e.keyboard:1)&&(o.push(new lp),o.push(new up({delta:e.zoomDelta,duration:e.zoomDuration}))),(t(e.mouseWheelZoom)?e.mouseWheelZoom:1)&&o.push(new fp({duration:e.zoomDuration})),(t(e.shiftDragZoom)?e.shiftDragZoom:1)&&o.push(new pp),o}function Cp(e){var o=t(e)?e:{};e=nt(o),delete e.layers,o=o.layers,zr.call(this,e),this.c=[],this.a={},qt(this,se("layers"),this.Vj,!1,this),null!=o?s(o)&&(o=new ei(o.slice())):o=new ei,this.Ah(o)}function Mp(t){ho.call(this,{code:t,units:"m",extent:sw,global:!0,worldExtent:aw})}function Pp(e,o,i){var n=e.length;i=1<i?i:2,t(o)||(o=2<i?e.slice():Array(n));for(var r=0;r<n;r+=i)o[r]=6378137*Math.PI*e[r]/180,o[r+1]=6378137*Math.log(Math.tan(Math.PI*(e[r+1]+90)/360));return o}function Ep(e,o,i){var n=e.length;i=1<i?i:2,t(o)||(o=2<i?e.slice():Array(n));for(var r=0;r<n;r+=i)o[r]=180*e[r]/(6378137*Math.PI),o[r+1]=360*Math.atan(Math.exp(e[r+1]/6378137))/Math.PI-90;return o}function kp(t,e){ho.call(this,{code:t,units:"degrees",extent:lw,axisOrientation:e,global:!0,worldExtent:lw})}function Ap(){co(pw),co(hw),fo()}function Rp(e){Yr.call(this,t(e)?e:{})}function jp(e){e=t(e)?e:{};var o=nt(e);delete o.preload,delete o.useInterimTilesOnError,Yr.call(this,o),this.d(t(e.preload)?e.preload:0),this.e(!t(e.useInterimTilesOnError)||e.useInterimTilesOnError)}function Lp(e){e=t(e)?e:{};var o=nt(e);delete o.style,delete o.renderBuffer,delete o.updateWhileAnimating,delete o.updateWhileInteracting,Yr.call(this,o),this.c=t(e.renderBuffer)?e.renderBuffer:100,this.g=null,this.a=void 0,this.e(e.style),this.o=!!t(e.updateWhileAnimating)&&e.updateWhileAnimating,this.n=!!t(e.updateWhileInteracting)&&e.updateWhileInteracting}function Np(t,e,o,i,n){this.U={},this.c=t,this.n=e,this.e=o,this.H=i,this.Nc=n,this.f=this.b=this.a=this.oa=this.ba=this.X=null,this.Ga=this.Fa=this.o=this.N=this.L=this.J=0,this.Ra=!1,this.g=this.rc=0,this.vb=!1,this.T=0,this.d="",this.q=this.p=this.xb=this.wb=0,this.sa=this.l=this.i=null,this.V=[],this.sc=Te()}function Ip(t,e,o){if(null!==t.f){e=ta(e,0,o,2,t.H,t.V),o=t.c;var i=t.sc,n=o.globalAlpha;1!=t.o&&(o.globalAlpha=n*t.o);var r=t.rc;t.Ra&&(r+=t.Nc);var s,a;for(s=0,a=e.length;s<a;s+=2){var p=e[s]-t.J,l=e[s+1]-t.L;if(t.vb&&(p=p+.5|0,l=l+.5|0),0!==r||1!=t.g){var h=p+t.J,u=l+t.L;Jr(i,h,u,t.g,t.g,r,-h,-u),o.setTransform(i[0],i[1],i[4],i[5],i[12],i[13])}o.drawImage(t.f,t.Fa,t.Ga,t.T,t.N,p,l,t.T,t.N)}0===r&&1==t.g||o.setTransform(1,0,0,1,0,0),1!=t.o&&(o.globalAlpha=n)}}function Dp(t,e,o,i){var n=0;if(null!==t.sa&&""!==t.d){null===t.i||Up(t,t.i),null===t.l||Gp(t,t.l);var r=t.sa,s=t.c,a=t.oa;for(null===a?(s.font=r.font,s.textAlign=r.textAlign,s.textBaseline=r.textBaseline,t.oa={font:r.font,textAlign:r.textAlign,textBaseline:r.textBaseline}):(a.font!=r.font&&(a.font=s.font=r.font),a.textAlign!=r.textAlign&&(a.textAlign=s.textAlign=r.textAlign),a.textBaseline!=r.textBaseline&&(a.textBaseline=s.textBaseline=r.textBaseline)),e=ta(e,n,o,i,t.H,t.V),r=t.c;n<o;n+=i){if(s=e[n]+t.wb,a=e[n+1]+t.xb,0!==t.p||1!=t.q){var p=Jr(t.sc,s,a,t.q,t.q,t.p,-s,-a);r.setTransform(p[0],p[1],p[4],p[5],p[12],p[13])}null===t.l||r.strokeText(t.d,s,a),null===t.i||r.fillText(t.d,s,a)}0===t.p&&1==t.q||r.setTransform(1,0,0,1,0,0)}}function Fp(t,e,o,i,n,r){var s=t.c;for(t=ta(e,o,i,n,t.H,t.V),s.moveTo(t[0],t[1]),e=2;e<t.length;e+=2)s.lineTo(t[e],t[e+1]);return r&&s.lineTo(t[0],t[1]),i}function Op(t,e,o,i,n){var r,s,a=t.c;for(r=0,s=i.length;r<s;++r)o=Fp(t,e,o,i[r],n,!0),a.closePath();return o}function Bp(t){var e=k(Y(t.U),Number);U(e);var o,i,n,r,s;for(o=0,i=e.length;o<i;++o)for(n=t.U[e[o].toString()],r=0,s=n.length;r<s;++r)n[r](t)}function Up(t,e){var o=t.c,i=t.X;null===i?(o.fillStyle=e.fillStyle,t.X={fillStyle:e.fillStyle}):i.fillStyle!=e.fillStyle&&(i.fillStyle=o.fillStyle=e.fillStyle)}function Gp(t,e){var o=t.c,i=t.ba;null===i?(o.lineCap=e.lineCap,Eb&&o.setLineDash(e.lineDash),o.lineJoin=e.lineJoin,o.lineWidth=e.lineWidth,o.miterLimit=e.miterLimit,o.strokeStyle=e.strokeStyle,t.ba={lineCap:e.lineCap,lineDash:e.lineDash,lineJoin:e.lineJoin,lineWidth:e.lineWidth,miterLimit:e.miterLimit,strokeStyle:e.strokeStyle}):(i.lineCap!=e.lineCap&&(i.lineCap=o.lineCap=e.lineCap),Eb&&!G(i.lineDash,e.lineDash)&&o.setLineDash(i.lineDash=e.lineDash),i.lineJoin!=e.lineJoin&&(i.lineJoin=o.lineJoin=e.lineJoin),i.lineWidth!=e.lineWidth&&(i.lineWidth=o.lineWidth=e.lineWidth),i.miterLimit!=e.miterLimit&&(i.miterLimit=o.miterLimit=e.miterLimit),i.strokeStyle!=e.strokeStyle&&(i.strokeStyle=o.strokeStyle=e.strokeStyle))}function qp(t,e,o){this.oa=t,this.T=e,this.d=null,this.e=0,this.resolution=o,this.L=this.J=null,this.a=[],this.coordinates=[],this.X=Te(),this.b=[],this.sa=[],this.ba=Te()}function $p(t,e,o,i,n,r){var s,a,p,l=t.coordinates.length,h=t.Pe(),u=[e[o],e[o+1]],c=[NaN,NaN],f=!0;for(s=o+n;s<i;s+=n)c[0]=e[s],c[1]=e[s+1],p=Ge(h,c),p!==a?(f&&(t.coordinates[l++]=u[0],t.coordinates[l++]=u[1]),t.coordinates[l++]=c[0],t.coordinates[l++]=c[1],f=!1):1===p?(t.coordinates[l++]=c[0],t.coordinates[l++]=c[1],f=!1):f=!0,u[0]=c[0],u[1]=c[1],a=p;return s===o+n&&(t.coordinates[l++]=u[0],t.coordinates[l++]=u[1]),r&&(t.coordinates[l++]=e[o],t.coordinates[l++]=e[o+1]),l}function Hp(t,e){t.J=[0,e,0],t.a.push(t.J),t.L=[0,e,0],t.b.push(t.L)}function Xp(e,o,i,n,r,s,a,p,l){var h;Qr(n,e.X)?h=e.sa:(h=ta(e.coordinates,0,e.coordinates.length,2,n,e.sa),Pe(e.X,n)),n=0;var u,f=a.length,y=0;for(e=e.ba;n<f;){var d,g,v,m,b=a[n];switch(b[0]){case 0:y=b[1],u=c(y).toString(),t(s[u])?n=b[2]:t(l)&&!ro(l,y.Q().G())?n=b[2]:++n;break;case 1:o.beginPath(),++n;break;case 2:y=b[1],u=h[y];var w=h[y+1],x=h[y+2]-u,y=h[y+3]-w;o.arc(u,w,Math.sqrt(x*x+y*y),0,2*Math.PI,!0),++n;break;case 3:o.closePath(),++n;break;case 4:y=b[1],u=b[2],d=b[3],v=b[4]*i;var S=b[5]*i,T=b[6];g=b[7];var C=b[8],M=b[9],w=b[11],x=b[12],P=b[13],E=b[14];for(b[10]&&(w+=r);y<u;y+=2){if(b=h[y]-v,m=h[y+1]-S,P&&(b=b+.5|0,m=m+.5|0),1!=x||0!==w){var k=b+v,A=m+S;Jr(e,k,A,x,x,w,-k,-A),o.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])}k=o.globalAlpha,1!=g&&(o.globalAlpha=k*g),o.drawImage(d,C,M,E,T,b,m,E*i,T*i),1!=g&&(o.globalAlpha=k),1==x&&0===w||o.setTransform(1,0,0,1,0,0)}++n;break;case 5:for(y=b[1],u=b[2],v=b[3],S=b[4]*i,T=b[5]*i,w=b[6],x=b[7]*i,d=b[8],g=b[9];y<u;y+=2)b=h[y]+S,m=h[y+1]+T,1==x&&0===w||(Jr(e,b,m,x,x,w,-b,-m),o.setTransform(e[0],e[1],e[4],e[5],e[12],e[13])),g&&o.strokeText(v,b,m),d&&o.fillText(v,b,m),1==x&&0===w||o.setTransform(1,0,0,1,0,0);++n;break;case 6:if(t(p)&&(y=b[1],y=p(y)))return y;++n;break;case 7:o.fill(),++n;break;case 8:for(y=b[1],u=b[2],o.moveTo(h[y],h[y+1]),y+=2;y<u;y+=2)o.lineTo(h[y],h[y+1]);++n;break;case 9:o.fillStyle=b[1],++n;break;case 10:y=!t(b[7])||b[7],u=b[2],o.strokeStyle=b[1],o.lineWidth=y?u*i:u,o.lineCap=b[3],o.lineJoin=b[4],o.miterLimit=b[5],Eb&&o.setLineDash(b[6]),++n;break;case 11:o.font=b[1],o.textAlign=b[2],o.textBaseline=b[3],++n;break;case 12:o.stroke(),++n;break;default:++n}}}function Wp(t){var e=t.b;e.reverse();var o,i,n,r=e.length,s=-1;for(o=0;o<r;++o)if(i=e[o],n=i[0],6==n)s=o;else if(0==n){for(i[2]=o,i=t.b,n=o;s<n;){var a=i[s];i[s]=i[n],i[n]=a,++s,--n}s=-1}}function Kp(t,e){t.J[2]=t.a.length,t.J=null,t.L[2]=t.b.length,t.L=null;var o=[6,e];t.a.push(o),t.b.push(o)}function zp(t,e,o){qp.call(this,t,e,o),this.i=this.N=null,this.H=this.p=this.n=this.V=this.U=this.o=this.l=this.q=this.g=this.f=this.c=void 0}function Vp(t,e,o){qp.call(this,t,e,o),this.c={Xc:void 0,Sc:void 0,Tc:null,Uc:void 0,Vc:void 0,Wc:void 0,Ze:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}function Yp(t,e,o,i,n){var r=t.coordinates.length;return e=$p(t,e,o,i,n,!1),r=[8,r,e],t.a.push(r),t.b.push(r),i}function Zp(t){var e=t.c,o=e.strokeStyle,i=e.lineCap,n=e.lineDash,r=e.lineJoin,s=e.lineWidth,a=e.miterLimit;e.Xc==o&&e.Sc==i&&G(e.Tc,n)&&e.Uc==r&&e.Vc==s&&e.Wc==a||(e.Ze!=t.coordinates.length&&(t.a.push([12]),e.Ze=t.coordinates.length),t.a.push([10,o,s,i,r,a,n],[1]),e.Xc=o,e.Sc=i,e.Tc=n,e.Uc=r,e.Vc=s,e.Wc=a)}function _p(t,e,o){qp.call(this,t,e,o),this.c={Mf:void 0,Xc:void 0,Sc:void 0,Tc:null,Uc:void 0,Vc:void 0,Wc:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}function Jp(e,o,i,n,r){var s=e.c,a=[1];e.a.push(a),e.b.push(a);var p,a=0;for(p=n.length;a<p;++a){var l=n[a],h=e.coordinates.length;i=$p(e,o,i,l,r,!0),i=[8,h,i],h=[3],e.a.push(i,h),e.b.push(i,h),i=l}return o=[7],e.b.push(o),t(s.fillStyle)&&e.a.push(o),t(s.strokeStyle)&&(s=[12],e.a.push(s),e.b.push(s)),i}function Qp(e){var o=e.c,i=o.fillStyle,n=o.strokeStyle,r=o.lineCap,s=o.lineDash,a=o.lineJoin,p=o.lineWidth,l=o.miterLimit;t(i)&&o.Mf!=i&&(e.a.push([9,i]),o.Mf=o.fillStyle),!t(n)||o.Xc==n&&o.Sc==r&&o.Tc==s&&o.Uc==a&&o.Vc==p&&o.Wc==l||(e.a.push([10,n,p,r,a,l,s]),o.Xc=n,o.Sc=r,o.Tc=s,o.Uc=a,o.Vc=p,o.Wc=l)}function tl(t,e,o){qp.call(this,t,e,o),this.p=this.n=this.V=null,this.i="",this.U=this.o=this.l=this.q=0,this.g=this.f=this.c=null}function el(t,e,o,i){this.q=t,this.d=e,this.i=o,this.e=i,this.a={},this.f=mr(1,1),this.g=Te()}function ol(t){for(var e in t.a){var o,i=t.a[e];for(o in i)i[o].de()}}function il(e,o,i,n,r,s){var a=k(Y(e.a),Number);U(a);var p=e.d,l=p[0],h=p[1],u=p[2],p=p[3],l=[l,h,l,p,u,p,u,h];ta(l,0,8,2,n,l),o.save(),o.beginPath(),o.moveTo(l[0],l[1]),o.lineTo(l[2],l[3]),o.lineTo(l[4],l[5]),o.lineTo(l[6],l[7]),o.closePath(),o.clip();for(var c,f,l=0,h=a.length;l<h;++l)for(c=e.a[a[l].toString()],u=0,p=cw.length;u<p;++u)f=c[cw[u]],t(f)&&Xp(f,o,i,n,r,s,f.a,void 0);o.restore();
+}function nl(e,o,i,n,r,s,a){var p=k(Y(e.a),Number);U(p,function(t,e){return e-t});var l,h,u,c,f;for(l=0,h=p.length;l<h;++l)for(c=e.a[p[l].toString()],u=cw.length-1;0<=u;--u)if(f=c[cw[u]],t(f)&&(f=Xp(f,o,1,i,n,r,f.b,s,a)))return f}function rl(t){es.call(this,t),this.J=Te()}function sl(e,o,i,n,r){var s=e.a;ee(s,o)&&(e=t(r)?r:al(e,n,0),e=new Np(i,n.pixelRatio,n.extent,e,n.viewState.rotation),s.dispatchEvent(new $a(o,s,e,null,n,i,null)),Bp(e))}function al(t,e,o){var i=e.viewState,n=e.pixelRatio;return Jr(t.J,n*e.size[0]/2,n*e.size[1]/2,n/i.resolution,-n/i.resolution,-i.rotation,-i.center[0]+o,-i.center[1])}function pl(t,e){var o=[0,0];return ts(e,t,o),o}function ll(e,o,i){ea.call(this),this.uh(e,t(o)?o:0,i)}function hl(t){var e=t.j[t.s]-t.j[0];return t=t.j[t.s+1]-t.j[1],e*e+t*t}function ul(e){Qs.call(this),this.d=t(e)?e:null,yl(this)}function cl(t){var e,o,i=[];for(e=0,o=t.length;e<o;++e)i.push(t[e].clone());return i}function fl(t){var e,o;if(null!==t.d)for(e=0,o=t.d.length;e<o;++e)Wt(t.d[e],"change",t.k,!1,t)}function yl(t){var e,o;if(null!==t.d)for(e=0,o=t.d.length;e<o;++e)qt(t.d[e],"change",t.k,!1,t)}function dl(t,e,o,i,n){var r=NaN,s=NaN,a=(o-e)/i;if(0!==a)if(1==a)r=t[e],s=t[e+1];else if(2==a)r=.5*t[e]+.5*t[e+i],s=.5*t[e+1]+.5*t[e+i+1];else{var p,s=t[e],a=t[e+1],l=0,r=[0];for(p=e+i;p<o;p+=i){var h=t[p],u=t[p+1],l=l+Math.sqrt((h-s)*(h-s)+(u-a)*(u-a));r.push(l),s=h,a=u}o=.5*l;for(var c,s=q,a=0,l=r.length;a<l;)p=a+l>>1,h=s(o,r[p]),0<h?a=p+1:(l=p,c=!h);c=c?a:~a,0>c?(o=(o-r[-c-2])/(r[-c-1]-r[-c-2]),e+=(-c-2)*i,r=ut(t[e],t[e+i],o),s=ut(t[e+1],t[e+i+1],o)):(r=t[e+c*i],s=t[e+c*i+1])}return null!=n?(n[0]=r,n[1]=s,n):[r,s]}function gl(t,e,o,i,n,r){if(o==e)return null;if(n<t[e+i-1])return r?(o=t.slice(e,e+i),o[i-1]=n,o):null;if(t[o-1]<n)return r?(o=t.slice(o-i,o),o[i-1]=n,o):null;if(n==t[e+i-1])return t.slice(e,e+i);for(e/=i,o/=i;e<o;)r=e+o>>1,n<t[(r+1)*i-1]?o=r:e=r+1;if(o=t[e*i-1],n==o)return t.slice((e-1)*i,(e-1)*i+i);r=(n-o)/(t[(e+1)*i-1]-o),o=[];var s;for(s=0;s<i-1;++s)o.push(ut(t[(e-1)*i+s],t[e*i+s],r));return o.push(n),o}function vl(t,e,o,i,n,r){var s=0;if(r)return gl(t,s,e[e.length-1],o,i,n);if(i<t[o-1])return n?(t=t.slice(0,o),t[o-1]=i,t):null;if(t[t.length-1]<i)return n?(t=t.slice(t.length-o),t[o-1]=i,t):null;for(n=0,r=e.length;n<r;++n){var a=e[n];if(s!=a){if(i<t[s+o-1])break;if(i<=t[a-1])return gl(t,s,a,o,i,!1);s=a}}return null}function ml(t,e){ea.call(this),this.c=null,this.p=this.H=this.i=-1,this.W(t,e)}function bl(t){return t.i!=t.b&&(t.c=dl(t.j,0,t.j.length,t.s,t.c),t.i=t.b),t.c}function wl(t,e,o){ia(t,e,o),t.k()}function xl(t,e){ea.call(this),this.c=[],this.i=this.p=-1,this.W(t,e)}function Sl(t){var e=[],o=t.j,i=0,n=t.c;t=t.s;var r,s;for(r=0,s=n.length;r<s;++r){var a=n[r],i=dl(o,i,a,t);F(e,i),i=a}return e}function Tl(t,e,o,i){ia(t,e,o),t.c=i,t.k()}function Cl(t,e){var o,i,n="XY",r=[],s=[];for(o=0,i=e.length;o<i;++o){var a=e[o];0===o&&(n=a.a),F(r,a.j),s.push(r.length)}Tl(t,n,r,s)}function Ml(t,e){ea.call(this),this.W(t,e)}function Pl(t,e){ea.call(this),this.c=[],this.p=-1,this.H=null,this.N=this.J=this.L=-1,this.i=null,this.W(t,e)}function El(t){if(t.p!=t.b){var e,o,i=t.j,n=t.c,r=t.s,s=0,a=[],p=qe();for(e=0,o=n.length;e<o;++e){var l=n[e],p=ze($e(1/0,1/0,-(1/0),-(1/0),void 0),i,s,l[0],r);a.push((p[0]+p[2])/2,(p[1]+p[3])/2),s=l[l.length-1]}for(i=kl(t),n=t.c,r=t.s,s=0,e=[],o=0,p=n.length;o<p;++o)l=n[o],e=ka(i,s,l,r,a,2*o,e),s=l[l.length-1];t.H=e,t.p=t.b}return t.H}function kl(t){if(t.N!=t.b){var e,o=t.j;t:{e=t.c;var i,n;for(i=0,n=e.length;i<n;++i)if(!Na(o,e[i],t.s,void 0)){e=!1;break t}e=!0}e?t.i=o:(t.i=o.slice(),t.i.length=Da(t.i,t.c,t.s)),t.N=t.b}return t.i}function Al(t,e,o,i){ia(t,e,o),t.c=i,t.k()}function Rl(t,e){var o,i,n,r="XY",s=[],a=[];for(o=0,i=e.length;o<i;++o){var p=e[o];0===o&&(r=p.a);var l=s.length;n=p.c;var h,u;for(h=0,u=n.length;h<u;++h)n[h]+=l;F(s,p.j),a.push(n)}Al(t,r,s,a)}function jl(t,e){return c(t)-c(e)}function Ll(t,e){var o=.5*t/e;return o*o}function Nl(t,e,o,i,n,r){var s,a,p=!1;return s=o.f,null!==s&&(a=s.gd(),2==a||3==a?s.xf(n,r):(0==a&&s.load(),s.$e(n,r),p=!0)),n=(0,o.d)(e),null!=n&&(i=n.Ve(i),(0,dw[i.M()])(t,i,o,e)),p}function Il(t,e,o,i,n){_r.call(this,t,e,o,2,i),this.a=n}function Dl(e){sn.call(this,{attributions:e.attributions,extent:e.extent,logo:e.logo,projection:e.projection,state:e.state}),this.l=t(e.resolutions)?e.resolutions:null}function Fl(t,e){if(null!==t.l){var o=dt(t.l,e,0);e=t.l[o]}return e}function Ol(t,e){t.b().src=e}function Bl(t,e){Pt.call(this,t),this.image=e}function Ul(e){Dl.call(this,{attributions:e.attributions,logo:e.logo,projection:e.projection,resolutions:e.resolutions,state:t(e.state)?e.state:void 0}),this.T=e.canvasFunction,this.J=null,this.N=0,this.X=t(e.ratio)?e.ratio:1.5}function Gl(t){t.prototype.then=t.prototype.then,t.prototype.$goog_Thenable=!0}function ql(t){if(!t)return!1;try{return!!t.$goog_Thenable}catch(e){return!1}}function $l(t,e){bw||Hl(),ww||(bw(),ww=!0),xw.push(new Wl(t,e))}function Hl(){if(sm.Promise&&sm.Promise.resolve){var t=sm.Promise.resolve();bw=function(){t.then(Xl)}}else bw=function(){Yn(Xl)}}function Xl(){for(;xw.length;){var t=xw;xw=[];for(var e=0;e<t.length;e++){var o=t[e];try{o.b.call(o.a)}catch(i){Vn(i)}}}ww=!1}function Wl(t,e){this.b=t,this.a=e}function Kl(t,e){this.a=Sw,this.f=void 0,this.b=this.c=null,this.d=this.e=!1;try{var o=this;t.call(e,function(t){Zl(o,Tw,t)},function(t){Zl(o,Cw,t)})}catch(i){Zl(this,Cw,i)}}function zl(t,e){if(t.a==Sw)if(t.c){var o=t.c;if(o.b){for(var i,n=0,r=-1,s=0;(i=o.b[s])&&!((i=i.Rc)&&(n++,i==t&&(r=s),0<=r&&1<n));s++);0<=r&&(o.a==Sw&&1==n?zl(o,e):(n=o.b.splice(r,1)[0],Ql(o,n,Cw,e)))}}else Zl(t,Cw,e)}function Vl(t,e){t.b&&t.b.length||t.a!=Tw&&t.a!=Cw||Jl(t),t.b||(t.b=[]),t.b.push(e)}function Yl(e,o,i,n){var r={Rc:null,Wg:null,Yg:null};return r.Rc=new Kl(function(e,s){r.Wg=o?function(t){try{var i=o.call(n,t);e(i)}catch(r){s(r)}}:e,r.Yg=i?function(o){try{var r=i.call(n,o);!t(r)&&o instanceof eh?s(o):e(r)}catch(a){s(a)}}:s}),r.Rc.c=e,Vl(e,r),r.Rc}function Zl(t,e,o){if(t.a==Sw){if(t==o)e=Cw,o=new TypeError("Promise cannot resolve to itself");else{if(ql(o))return t.a=1,void o.then(t.g,t.i,t);if(u(o))try{var i=o.then;if(h(i))return void _l(t,o,i)}catch(n){e=Cw,o=n}}t.f=o,t.a=e,Jl(t),e!=Cw||o instanceof eh||th(t,o)}}function _l(t,e,o){function i(e){r||(r=!0,t.i(e))}function n(e){r||(r=!0,t.g(e))}t.a=1;var r=!1;try{o.call(e,n,i)}catch(s){i(s)}}function Jl(t){t.e||(t.e=!0,$l(t.q,t))}function Ql(t,e,o,i){if(o==Tw)e.Wg(i);else{if(e.Rc)for(;t&&t.d;t=t.c)t.d=!1;e.Yg(i)}}function th(t,e){t.d=!0,$l(function(){t.d&&Mw.call(null,e)})}function eh(t){m.call(this,t)}function oh(t,e,o){if(h(t))o&&(t=d(t,o));else{if(!t||"function"!=typeof t.handleEvent)throw Error("Invalid listener argument");t=d(t.handleEvent,t)}return 2147483647<e?-1:sm.setTimeout(t,e||0)}function ih(){}function nh(t){var e;return(e=t.b)||(e={},ah(t)&&(e[0]=!0,e[1]=!0),e=t.b=e),e}function rh(){}function sh(t){return(t=ah(t))?new ActiveXObject(t):new XMLHttpRequest}function ah(t){if(!t.a&&"undefined"==typeof XMLHttpRequest&&"undefined"!=typeof ActiveXObject){for(var e=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"],o=0;o<e.length;o++){var i=e[o];try{return new ActiveXObject(i),t.a=i}catch(n){}}throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed")}return t.a}function ph(t){if(Rw){Rw=!1;var e=sm.location;if(e){var o=e.href;if(o&&(o=(o=ph(o)[3]||null)?decodeURI(o):o)&&o!=e.hostname)throw Rw=!0,Error()}}return t.match(Aw)}function lh(t,e){for(var o=t.split("&"),i=0;i<o.length;i++){var n=o[i].indexOf("="),r=null,s=null;0<=n?(r=o[i].substring(0,n),s=o[i].substring(n+1)):r=o[i],e(r,s?decodeURIComponent(s.replace(/\+/g," ")):"")}}function hh(t){if(t[1]){var e=t[0],o=e.indexOf("#");0<=o&&(t.push(e.substr(o)),t[0]=e=e.substr(0,o)),o=e.indexOf("?"),0>o?t[1]="?":o==e.length-1&&(t[1]=void 0)}return t.join("")}function uh(t,e,o){if(s(e))for(var i=0;i<e.length;i++)uh(t,String(e[i]),o);else null!=e&&o.push("&",t,""===e?"":"=",encodeURIComponent(String(e)))}function ch(t,e){for(var o in e)uh(o,e[o],t);return t}function fh(t){Qt.call(this),this.H=new Qn,this.i=t||null,this.b=!1,this.g=this.Y=null,this.e=this.o="",this.a=this.l=this.d=this.q=!1,this.f=0,this.c=null,this.n=jw,this.p=this.J=!1}function yh(e){return Mm&&pt(9)&&l(e.timeout)&&t(e.ontimeout)}function dh(t){return"content-type"==t.toLowerCase()}function gh(t,e){t.b=!1,t.Y&&(t.a=!0,t.Y.abort(),t.a=!1),t.e=e,vh(t),bh(t)}function vh(t){t.q||(t.q=!0,t.dispatchEvent("complete"),t.dispatchEvent("error"))}function mh(t){if(t.b&&"undefined"!=typeof rm&&(!t.g[1]||4!=Sh(t)||2!=Th(t)))if(t.d&&4==Sh(t))oh(t.Xg,0,t);else if(t.dispatchEvent("readystatechange"),4==Sh(t)){t.b=!1;try{if(xh(t))t.dispatchEvent("complete"),t.dispatchEvent("success");else{var e;try{e=2<Sh(t)?t.Y.statusText:""}catch(o){e=""}t.e=e+" ["+Th(t)+"]",vh(t)}}finally{bh(t)}}}function bh(t,e){if(t.Y){wh(t);var i=t.Y,n=t.g[0]?o:null;t.Y=null,t.g=null,e||t.dispatchEvent("ready");try{i.onreadystatechange=n}catch(r){}}}function wh(t){t.Y&&t.p&&(t.Y.ontimeout=null),l(t.c)&&(sm.clearTimeout(t.c),t.c=null)}function xh(t){var e,o=Th(t);t:switch(o){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:e=!0;break t;default:e=!1}return e||((o=0===o)&&(t=ph(String(t.o))[1]||null,!t&&self.location&&(t=self.location.protocol,t=t.substr(0,t.length-1)),o=!Lw.test(t?t.toLowerCase():"")),e=o),e}function Sh(t){return t.Y?t.Y.readyState:0}function Th(t){try{return 2<Sh(t)?t.Y.status:-1}catch(e){return-1}}function Ch(t){try{return t.Y?t.Y.responseText:""}catch(e){return""}}function Mh(t){if("undefined"!=typeof XMLSerializer)return(new XMLSerializer).serializeToString(t);if(t=t.xml)return t;throw Error("Your browser does not support serializing XML documents")}function Ph(t,e){return Bw.createElementNS(t,e)}function Eh(t,e){return null===t&&(t=""),Bw.createNode(1,e,t)}function kh(t,e){return Ah(t,e,[]).join("")}function Ah(t,e,o){if(4==t.nodeType||3==t.nodeType)e?o.push(String(t.nodeValue).replace(/(\r\n|\r|\n)/g,"")):o.push(t.nodeValue);else for(t=t.firstChild;null!==t;t=t.nextSibling)Ah(t,e,o);return o}function Rh(t){return t.localName}function jh(e){var o=e.localName;return t(o)?o:e.baseName}function Lh(t){return t instanceof Document}function Nh(t){return u(t)&&9==t.nodeType}function Ih(t){return t instanceof Node}function Dh(e){return u(e)&&t(e.nodeType)}function Fh(t,e,o){return t.getAttributeNS(e,o)||""}function Oh(e,o,i){var n="";return e=Xw(e,o,i),t(e)&&(n=e.nodeValue),n}function Bh(t,e,o){return t.getAttributeNodeNS(e,o)}function Uh(t,e,o){var i=null;t=t.attributes;for(var n,r,s=0,a=t.length;s<a;++s)if(n=t[s],n.namespaceURI==e&&(r=n.prefix?n.prefix+":"+o:o,r==n.nodeName)){i=n;break}return i}function Gh(t,e,o,i){t.setAttributeNS(e,o,i)}function qh(t,e,o,i){null===e?t.setAttribute(o,i):(e=t.ownerDocument.createNode(2,o,e),e.nodeValue=i,t.setAttributeNode(e))}function $h(t){return(new DOMParser).parseFromString(t,"application/xml")}function Hh(e,o){return function(i,n){var r=e.call(o,i,n);t(r)&&F(n[n.length-1],r)}}function Xh(e,o){return function(i,n){var r=e.call(t(o)?o:this,i,n);t(r)&&n[n.length-1].push(r)}}function Wh(e,o){return function(i,n){var r=e.call(t(o)?o:this,i,n);t(r)&&(n[n.length-1]=r)}}function Kh(e){return function(o,i){var n=e.call(t(void 0)?void 0:this,o,i);t(n)&&it(i[i.length-1],t(void 0)?void 0:o.localName).push(n)}}function zh(e,o){return function(i,n){var r=e.call(t(void 0)?void 0:this,i,n);t(r)&&(n[n.length-1][t(o)?o:i.localName]=r)}}function Vh(t,e,o){return Qh(t,e,o)}function Yh(e,o){return function(i,n,r){e.call(t(o)?o:this,i,n,r),r[r.length-1].P.appendChild(i)}}function Zh(e){var o,i;return function(n,r,s){if(!t(o)){o={};var a={};a[n.localName]=e,o[n.namespaceURI]=a,i=_h(n.localName)}ou(o,i,r,s)}}function _h(e,o){return function(i,n,r){return i=n[n.length-1].P,n=e,t(n)||(n=r),r=o,t(o)||(r=i.namespaceURI),Uw(r,n)}}function Jh(t,e){for(var o=e.length,i=Array(o),n=0;n<o;++n)i[n]=t[e[n]];return i}function Qh(e,o,i){i=t(i)?i:{};var n,r;for(n=0,r=e.length;n<r;++n)i[e[n]]=o;return i}function tu(e,o,i,n){for(o=o.firstElementChild;null!==o;o=o.nextElementSibling){var r=e[o.namespaceURI];t(r)&&(r=r[o.localName],t(r)&&r.call(n,o,i))}}function eu(t,e,o,i,n){return i.push(t),tu(e,o,i,n),i.pop()}function ou(e,o,i,n,r,s){for(var a,p,l=(t(r)?r:i).length,h=0;h<l;++h)a=i[h],t(a)&&(p=o.call(s,a,n,t(r)?r[h]:void 0),t(p)&&e[p.namespaceURI][p.localName].call(s,p,a,n))}function iu(t,e,o,i,n,r,s){n.push(t),ou(e,o,i,n,r,s),n.pop()}function nu(t,e,o){return function(i,n,r){i=new fh,i.n="text",qt(i,"complete",function(t){if(t=t.target,xh(t)){var i,n=e.M();if("json"==n)i=Ch(t);else if("text"==n)i=Ch(t);else if("xml"==n){if(!Mm)try{i=t.Y?t.Y.responseXML:null}catch(s){i=null}null!=i||(i=$h(Ch(t)))}null!=i&&(i=e.ja(i,{featureProjection:r}),o.call(this,i))}Mt(t)},!1,this),i.send(t)}}function ru(t,e){return nu(t,e,function(t){this.Oc(t)})}function su(){return[[-(1/0),-(1/0),1/0,1/0]]}function au(t){this.a=Ow(t),this.b={}}function pu(t){return t=t.a.all(),k(t,function(t){return t[4]})}function lu(t,e){var o=t.a.search(e);return k(o,function(t){return t[4]})}function hu(t,e,o,i){return uu(lu(t,e),o,i)}function uu(t,e,o){for(var i,n=0,r=t.length;n<r&&!(i=e.call(o,t[n]));n++);return i}function cu(e){e=t(e)?e:{},sn.call(this,{attributions:e.attributions,logo:e.logo,projection:void 0,state:"ready",wrapX:!t(e.wrapX)||e.wrapX}),this.J=o,t(e.loader)?this.J=e.loader:t(e.url)&&(this.J=ru(e.url,e.format)),this.oa=t(e.strategy)?e.strategy:su,this.a=new au,this.N=new au,this.c={},this.e={},this.g={},this.i={},t(e.features)&&du(this,e.features)}function fu(t,e,o){t.i[e]=[qt(o,"change",t.Pg,!1,t),qt(o,"propertychange",t.Pg,!1,t)]}function yu(e,o,i){var n=!0,r=i.$;return t(r)?r.toString()in e.e?n=!1:e.e[r.toString()]=i:e.g[o]=i,n}function du(t,e){var o,i,n,r,s=[],a=[],p=[];for(i=0,n=e.length;i<n;i++)r=e[i],o=c(r).toString(),yu(t,o,r)&&a.push(r);for(i=0,n=a.length;i<n;i++){r=a[i],o=c(r).toString(),fu(t,o,r);var l=r.Q();null!=l?(o=l.G(),s.push(o),p.push(r)):t.c[o]=r}for(t.a.load(s,p),i=0,n=a.length;i<n;i++)t.dispatchEvent(new mu("addfeature",a[i]))}function gu(t,e,o){t.$c([e[0],e[1],e[0],e[1]],function(t){if(t.Q().Jb(e[0],e[1]))return o.call(void 0,t)})}function vu(t,e){for(var o in t.e)if(t.e[o]===e){delete t.e[o];break}}function mu(t,e){Pt.call(this,t),this.feature=e}function bu(t){this.a=t.source,this.ba=Te(),this.c=mr(),this.e=[0,0],this.n=null,Ul.call(this,{attributions:t.attributions,canvasFunction:d(this.zi,this),logo:t.logo,projection:t.projection,ratio:t.ratio,resolutions:t.resolutions,state:this.a.o}),this.p=null,this.g=void 0,this.Mg(t.style),qt(this.a,"change",this.am,void 0,this)}function wu(t,e,o,i,n){return Jr(t.ba,n[0]/2,n[1]/2,i/o,-i/o,0,-e[0],-e[1])}function xu(t){rl.call(this,t),this.e=null,this.f=Te(),this.c=this.d=null}function Su(t){rl.call(this,t),this.c=this.f=null,this.q=!1,this.g=null,this.l=Te(),this.e=null,this.p=this.H=this.n=NaN,this.i=this.d=null,this.L=[0,0]}function Tu(t){rl.call(this,t),this.d=!1,this.q=-1,this.i=NaN,this.f=qe(),this.c=this.g=null,this.e=mr()}function Cu(t,e){ys.call(this,0,e),this.d=mr(),this.b=this.d.canvas,this.b.style.width="100%",this.b.style.height="100%",this.b.className="ol-unselectable",bi(t,this.b,0),this.a=!0,this.e=Te()}function Mu(t,e,o){var i=t.g,n=t.d;if(ee(i,e)){var r=o.extent,s=o.pixelRatio,a=o.viewState,p=a.projection,l=a.resolution,a=a.rotation,h=0;if(p.c){var u=p.G(),p=no(u),c=o.focus[0];(c<u[0]||c>u[2])&&(h=Math.ceil((u[0]-c)/p),h*=p,r=[r[0]+h,r[1],r[2]+h,r[3]])}p=o.pixelRatio,u=o.viewState,c=u.resolution,h=Jr(t.e,t.b.width/2,t.b.height/2,p/c,-p/c,-u.rotation,-u.center[0]-h,-u.center[1]),l=new el(.5*l/s,r,l),r=new Np(n,s,r,h,a),i.dispatchEvent(new $a(e,i,r,l,o,n,null)),ol(l),l.la()||il(l,n,s,h,a,{}),Bp(r),t.c=l}}function Pu(t,e){es.call(this,t),this.target=e}function Eu(t){var e=gi("DIV");e.style.position="absolute",Pu.call(this,t,e),this.c=null,this.d=Ce()}function ku(t){var e=gi("DIV");e.style.position="absolute",Pu.call(this,t,e),this.d=!0,this.q=1,this.g=0,this.c={}}function Au(t,e){this.target=gi("DIV"),this.target.style.position="absolute",this.target.style.width="100%",this.target.style.height="100%",this.d=t,this.c=e,this.f=oo(mn(t,e)),this.g=t.ma(e[0]),this.a={},this.b=null,this.e=Ce(),this.i=[0,0]}function Ru(t){this.g=mr();var e=this.g.canvas;e.style.maxWidth="none",e.style.position="absolute",Pu.call(this,t,e),this.d=!1,this.n=-1,this.o=NaN,this.q=qe(),this.c=this.l=null,this.H=Te(),this.p=Te()}function ju(t,e,o,i){var n=t.g;t=t.a,ee(t,e)&&(i=new Np(n,o.pixelRatio,o.extent,i,o.viewState.rotation),t.dispatchEvent(new $a(e,t,i,null,o,n,null)),Bp(i))}function Lu(t,e){ys.call(this,0,e),this.a=null,this.a=mr();var o=this.a.canvas;o.style.position="absolute",o.style.width="100%",o.style.height="100%",o.className="ol-unselectable",bi(t,o,0),this.e=Te(),this.b=gi("DIV"),this.b.className="ol-unselectable",o=this.b.style,o.position="absolute",o.width="100%",o.height="100%",qt(this.b,"touchstart",kt),bi(t,this.b,0),this.d=!0}function Nu(t,e,o){var i=t.g;if(ee(i,e)){var n=o.extent,r=o.pixelRatio,s=o.viewState,a=s.resolution,p=s.rotation,l=t.a,h=l.canvas;Jr(t.e,h.width/2,h.height/2,r/s.resolution,-r/s.resolution,-s.rotation,-s.center[0],-s.center[1]),s=new Np(l,r,n,t.e,p),n=new el(.5*a/r,n,a),i.dispatchEvent(new $a(e,i,s,n,o,l,null)),ol(n),n.la()||il(n,l,r,t.e,p,{}),Bp(s),t.c=n}}function Iu(t){this.b=t}function Du(t){this.b=t}function Fu(t){this.b=t}function Ou(){this.b="precision mediump float;varying vec2 a;varying float b;uniform mat4 k;uniform float l;uniform sampler2D m;void main(void){vec4 texColor=texture2D(m,a);float alpha=texColor.a*b*l;if(alpha==0.0){discard;}gl_FragColor.a=alpha;gl_FragColor.rgb=(k*vec4(texColor.rgb,1.)).rgb;}"}function Bu(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}function Uu(t,e){this.l=t.getUniformLocation(e,"k"),this.i=t.getUniformLocation(e,"j"),this.q=t.getUniformLocation(e,"i"),this.f=t.getUniformLocation(e,"l"),this.g=t.getUniformLocation(e,"h"),this.b=t.getAttribLocation(e,"e"),this.a=t.getAttribLocation(e,"f"),this.d=t.getAttribLocation(e,"c"),this.c=t.getAttribLocation(e,"g"),this.e=t.getAttribLocation(e,"d")}function Gu(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}function qu(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}function $u(t,e){this.i=t.getUniformLocation(e,"j"),this.q=t.getUniformLocation(e,"i"),this.f=t.getUniformLocation(e,"k"),this.g=t.getUniformLocation(e,"h"),this.b=t.getAttribLocation(e,"e"),this.a=t.getAttribLocation(e,"f"),this.d=t.getAttribLocation(e,"c"),this.c=t.getAttribLocation(e,"g"),this.e=t.getAttribLocation(e,"d")}function Hu(e){this.b=t(e)?e:[],this.a=t(void 0)?void 0:35044}function Xu(t,e){this.l=t,this.b=e,this.a={},this.f={},this.e={},this.i=this.q=this.d=this.g=null,(this.c=L(im,"OES_element_index_uint"))&&e.getExtension("OES_element_index_uint"),qt(this.l,"webglcontextlost",this.Ym,!1,this),qt(this.l,"webglcontextrestored",this.Zm,!1,this)}function Wu(t,e,o){var i=t.b,n=o.b,r=c(o);if(r in t.a)i.bindBuffer(e,t.a[r].buffer);else{var s=i.createBuffer();i.bindBuffer(e,s);var a;34962==e?a=new Float32Array(n):34963==e&&(a=t.c?new Uint32Array(n):new Uint16Array(n)),i.bufferData(e,a,o.a),t.a[r]={c:o,buffer:s}}}function Ku(t,e){var o=t.b,i=c(e),n=t.a[i];o.isContextLost()||o.deleteBuffer(n.buffer),delete t.a[i]}function zu(t,e){var o=c(e);if(o in t.f)return t.f[o];var i=t.b,n=i.createShader(e.M());return i.shaderSource(n,e.b),i.compileShader(n),t.f[o]=n}function Vu(t,e,o){var i=c(e)+"/"+c(o);if(i in t.e)return t.e[i];var n=t.b,r=n.createProgram();return n.attachShader(r,zu(t,e)),n.attachShader(r,zu(t,o)),n.linkProgram(r),t.e[i]=r}function Yu(e,o,i){var n=e.createTexture();return e.bindTexture(e.TEXTURE_2D,n),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),t(o)&&e.texParameteri(3553,10242,o),t(i)&&e.texParameteri(3553,10243,i),n}function Zu(t,e,o){var i=Yu(t,void 0,void 0);return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,o,0,t.RGBA,t.UNSIGNED_BYTE,null),i}function _u(t,e){var o=Yu(t,33071,33071);return t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,e),o}function Ju(t,e){this.n=this.V=void 0,this.wb=new si,this.q=_e(e),this.U=[],this.f=[],this.J=void 0,this.e=[],this.d=[],this.N=this.L=void 0,this.a=[],this.H=this.p=this.i=null,this.T=void 0,this.rc=Ce(),this.vb=Ce(),this.X=this.sa=void 0,this.xb=Ce(),this.Fa=this.oa=this.ba=void 0,this.Ra=[],this.g=[],this.b=[],this.o=null,this.c=[],this.l=[],this.Ga=void 0}function Qu(t,e){var o=t.o,i=t.i,n=t.Ra,r=t.g,s=e.b;return function(){if(!s.isContextLost()){var t,a;for(t=0,a=n.length;t<a;++t)s.deleteTexture(n[t]);for(t=0,a=r.length;t<a;++t)s.deleteTexture(r[t])}Ku(e,o),Ku(e,i)}}function tc(t,e,o,i){var n,r,s,a,p,l,h=t.V,u=t.n,c=t.J,f=t.L,y=t.N,d=t.T,g=t.sa,v=t.X,m=t.ba?1:0,b=t.oa,w=t.Fa,x=t.Ga,S=Math.cos(b),b=Math.sin(b),T=t.a.length,C=t.b.length;for(n=0;n<o;n+=i)p=e[n]-t.q[0],l=e[n+1]-t.q[1],r=C/8,s=-w*h,a=-w*(c-u),t.b[C++]=p,t.b[C++]=l,t.b[C++]=s*S-a*b,t.b[C++]=s*b+a*S,t.b[C++]=g/y,t.b[C++]=(v+c)/f,t.b[C++]=d,t.b[C++]=m,s=w*(x-h),a=-w*(c-u),t.b[C++]=p,t.b[C++]=l,t.b[C++]=s*S-a*b,t.b[C++]=s*b+a*S,t.b[C++]=(g+x)/y,t.b[C++]=(v+c)/f,t.b[C++]=d,t.b[C++]=m,s=w*(x-h),a=w*u,t.b[C++]=p,t.b[C++]=l,t.b[C++]=s*S-a*b,t.b[C++]=s*b+a*S,t.b[C++]=(g+x)/y,t.b[C++]=v/f,t.b[C++]=d,t.b[C++]=m,s=-w*h,a=w*u,t.b[C++]=p,t.b[C++]=l,t.b[C++]=s*S-a*b,t.b[C++]=s*b+a*S,t.b[C++]=g/y,t.b[C++]=v/f,t.b[C++]=d,t.b[C++]=m,t.a[T++]=r,t.a[T++]=r+1,t.a[T++]=r+2,t.a[T++]=r,t.a[T++]=r+2,t.a[T++]=r+3}function ec(t,e){var o=e.b;t.U.push(t.a.length),t.f.push(t.a.length),t.o=new Hu(t.b),Wu(e,34962,t.o),t.i=new Hu(t.a),Wu(e,34963,t.i);var i={};oc(t.Ra,t.e,i,o),oc(t.g,t.d,i,o),t.V=void 0,t.n=void 0,t.J=void 0,t.e=null,t.d=null,t.L=void 0,t.N=void 0,t.a=null,t.T=void 0,t.sa=void 0,t.X=void 0,t.ba=void 0,t.oa=void 0,t.Fa=void 0,t.b=null,t.Ga=void 0}function oc(t,e,o,i){var n,r,s,a=e.length;for(s=0;s<a;++s)n=e[s],r=c(n).toString(),r in o?n=o[r]:(n=_u(i,n),o[r]=n),t[s]=n}function ic(e,o,i,n,r,s,a,p,l,h,u,f,y,d,g){var v=o.b;Wu(o,34962,e.o),Wu(o,34963,e.i);var m,b,w=p||1!=l||h||1!=u;w?(m=Ou.Ia(),b=Bu.Ia()):(m=Gu.Ia(),b=qu.Ia()),b=Vu(o,m,b),w?null===e.p?(m=new Uu(v,b),e.p=m):m=e.p:null===e.H?(m=new $u(v,b),e.H=m):m=e.H,o.oe(b),v.enableVertexAttribArray(m.d),v.vertexAttribPointer(m.d,2,5126,!1,32,0),v.enableVertexAttribArray(m.b),v.vertexAttribPointer(m.b,2,5126,!1,32,8),v.enableVertexAttribArray(m.e),v.vertexAttribPointer(m.e,2,5126,!1,32,16),v.enableVertexAttribArray(m.a),v.vertexAttribPointer(m.a,1,5126,!1,32,24),v.enableVertexAttribArray(m.c),v.vertexAttribPointer(m.c,1,5126,!1,32,28),b=e.xb,Jr(b,0,0,2/(n*s[0]),2/(n*s[1]),-r,-(i[0]-e.q[0]),-(i[1]-e.q[1])),i=e.vb,n=2/s[0],s=2/s[1],Ee(i),i[0]=n,i[5]=s,i[10]=1,i[15]=1,s=e.rc,Ee(s),0!==r&&Le(s,-r),v.uniformMatrix4fv(m.g,!1,b),v.uniformMatrix4fv(m.q,!1,i),v.uniformMatrix4fv(m.i,!1,s),v.uniform1f(m.f,a),w&&v.uniformMatrix4fv(m.l,!1,ai(e.wb,p,l,h,u));var x;if(t(y)){if(d)t:{for(r=o.c?5125:5123,o=o.c?4:2,h=e.c.length-1,a=e.g.length-1;0<=a;--a)for(v.bindTexture(3553,e.g[a]),p=0<a?e.f[a-1]:0,u=e.f[a];0<=h&&e.c[h]>=p;){if(l=e.c[h],d=e.l[h],w=c(d).toString(),!t(f[w])&&(!t(g)||ro(g,d.Q().G()))&&(v.clear(v.COLOR_BUFFER_BIT|v.DEPTH_BUFFER_BIT),v.drawElements(4,u-l,r,l*o),u=y(d))){e=u;break t}u=l,h--}e=void 0}else v.clear(v.COLOR_BUFFER_BIT|v.DEPTH_BUFFER_BIT),nc(e,v,o,f,e.g,e.f),e=(e=y(null))?e:void 0;x=e}else nc(e,v,o,f,e.Ra,e.U);return v.disableVertexAttribArray(m.d),v.disableVertexAttribArray(m.b),v.disableVertexAttribArray(m.e),v.disableVertexAttribArray(m.a),v.disableVertexAttribArray(m.c),x}function nc(e,o,i,n,r,s){var a=i.c?5125:5123;if(i=i.c?4:2,Q(n)){var p;for(e=0,n=r.length,p=0;e<n;++e){o.bindTexture(3553,r[e]);var l=s[e];o.drawElements(4,l-p,a,p*i),p=l}}else{p=0;var h,l=0;for(h=r.length;l<h;++l){o.bindTexture(3553,r[l]);for(var u=0<l?s[l-1]:0,f=s[l],y=u;p<e.c.length&&e.c[p]<=f;){var d=c(e.l[p]).toString();t(n[d])?(y!==u&&o.drawElements(4,u-y,a,y*i),u=y=p===e.c.length-1?f:e.c[p+1]):u=p===e.c.length-1?f:e.c[p+1],p++}y!==u&&o.drawElements(4,u-y,a,y*i)}}}function rc(t,e,o){this.e=e,this.f=t,this.d=o,this.a={}}function sc(t,e){var o,i=[];for(o in t.a)i.push(Qu(t.a[o],e));return cn.apply(null,i)}function ac(t,e){for(var o in t.a)ec(t.a[o],e)}function pc(e,o,i,n,r,s,a,p,l,h,u,c,f,y){var d,g,v=Vw;for(d=cw.length-1;0<=d;--d)if(g=e.a[cw[d]],t(g)&&(g=ic(g,o,i,n,r,v,s,a,p,l,h,u,c,f,y)))return g}function lc(e,o,i,n,r,s,a,p,l,h,u){var c=i.b;return c.bindFramebuffer(c.FRAMEBUFFER,i.Te()),e=pc(e,i,o,n,r,s,a,p,l,h,u,function(){var t=new Uint8Array(4);return c.readPixels(0,0,1,1,c.RGBA,c.UNSIGNED_BYTE,t),0<t[3]},!1),t(e)}function hc(t,e,o,i,n,r){this.a=t,this.e=e,this.d=r,this.i=n,this.g=i,this.f=o,this.c=null,this.b={}}function uc(){this.b="precision mediump float;varying vec2 a;uniform mat4 f;uniform float g;uniform sampler2D h;void main(void){vec4 texColor=texture2D(h,a);gl_FragColor.rgb=(f*vec4(texColor.rgb,1.)).rgb;gl_FragColor.a=texColor.a*g;}"}function cc(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}function fc(t,e){this.g=t.getUniformLocation(e,"f"),this.c=t.getUniformLocation(e,"g"),this.d=t.getUniformLocation(e,"e"),this.f=t.getUniformLocation(e,"d"),this.e=t.getUniformLocation(e,"h"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function yc(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}function dc(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}function gc(t,e){this.c=t.getUniformLocation(e,"f"),this.d=t.getUniformLocation(e,"e"),this.f=t.getUniformLocation(e,"d"),this.e=t.getUniformLocation(e,"g"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function vc(t,e){es.call(this,e),this.c=t,this.N=new Hu([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]),this.e=this.Qa=null,this.f=void 0,this.q=Te(),this.n=Ce(),this.T=new si,this.o=this.l=null}function mc(e,o,i){var n=e.c.e;if(t(e.f)&&e.f==i)n.bindFramebuffer(36160,e.e);else{o.postRenderFunctions.push(g(function(t,e,o){t.isContextLost()||(t.deleteFramebuffer(e),t.deleteTexture(o))},n,e.e,e.Qa)),o=Zu(n,i,i);var r=n.createFramebuffer();n.bindFramebuffer(36160,r),n.framebufferTexture2D(36160,36064,3553,o,0),e.Qa=o,e.e=r,e.f=i}}function bc(t,e,o,i){if(t=t.a,ee(t,e)){var n=i.viewState;t.dispatchEvent(new $a(e,t,new hc(o,n.center,n.resolution,n.rotation,i.size,i.extent),null,i,null,o))}}function wc(t,e){vc.call(this,t,e),this.i=this.g=this.d=null}function xc(t,e){var o=e.b();return _u(t.c.e,o)}function Sc(t,e,o,i,n,r,s,a){e*=r,o*=r,t=t.n,Ee(t),je(t,2*i/e,2*i/o),Le(t,-s),Re(t,a[0]-n[0],a[1]-n[1]),je(t,(a[2]-a[0])/2,(a[3]-a[1])/2),Re(t,1,1)}function Tc(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}function Cc(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}function Mc(t,e){this.c=t.getUniformLocation(e,"e"),this.d=t.getUniformLocation(e,"d"),this.b=t.getAttribLocation(e,"b"),this.a=t.getAttribLocation(e,"c")}function Pc(t,e){vc.call(this,t,e),this.J=Tc.Ia(),this.X=Cc.Ia(),this.d=null,this.H=new Hu([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]),this.p=this.g=null,this.i=-1,this.L=[0,0]}function Ec(t,e){vc.call(this,t,e),this.i=!1,this.L=-1,this.J=NaN,this.p=qe(),this.g=this.d=this.H=null}function kc(t,e){ys.call(this,0,e),this.b=gi("CANVAS"),this.b.style.width="100%",this.b.style.height="100%",this.b.className="ol-unselectable",bi(t,this.b,0),this.p=this.H=0,this.J=mr(),this.l=!0,this.e=xr(this.b,{antialias:!0,depth:!1,Ei:!0,preserveDrawingBuffer:!1,stencil:!0}),this.d=new Xu(this.b,this.e),qt(this.b,"webglcontextlost",this.Pl,!1,this),qt(this.b,"webglcontextrestored",this.Ql,!1,this),this.a=new Qi,this.n=null,this.q=new bs(d(function(t){var e=t[1];t=t[2];var o=e[0]-this.n[0],e=e[1]-this.n[1];return 65536*Math.log(t)+Math.sqrt(o*o+e*e)/t},this),function(t){return t[0].gb()}),this.L=d(function(){if(!this.q.la()){Cs(this.q);var t=ws(this.q);Ac(this,t[0],t[3],t[4])}},this),this.i=0,jc(this)}function Ac(t,e,o,i){var n=t.e,r=e.gb();if(tn(t.a,r))t=t.a.get(r),n.bindTexture(3553,t.Qa),9729!=t.lg&&(n.texParameteri(3553,10240,9729),t.lg=9729),9729!=t.mg&&(n.texParameteri(3553,10240,9729),t.mg=9729);else{var s=n.createTexture();if(n.bindTexture(3553,s),0<i){var a=t.J.canvas,p=t.J;t.H!==o[0]||t.p!==o[1]?(a.width=o[0],a.height=o[1],t.H=o[0],t.p=o[1]):p.clearRect(0,0,o[0],o[1]),p.drawImage(e.Ma(),i,i,o[0],o[1],0,0,o[0],o[1]),n.texImage2D(3553,0,6408,6408,5121,a)}else n.texImage2D(3553,0,6408,6408,5121,e.Ma());n.texParameteri(3553,10240,9729),n.texParameteri(3553,10241,9729),n.texParameteri(3553,10242,33071),n.texParameteri(3553,10243,33071),t.a.set(r,{Qa:s,lg:9729,mg:9729})}}function Rc(e,o,i){var n=e.g;if(ee(n,o)){var r=e.d,s=i.extent,a=i.size,p=i.viewState,l=p.resolution,h=p.center,u=p.rotation,p=new hc(r,h,l,u,a,s),s=new rc(.5*l/i.pixelRatio,s);if(n.dispatchEvent(new $a(o,n,p,s,i,null,r)),ac(s,r),!s.la()){var c=Zw;o=c.opacity,i=c.brightness;var f,y,d,n=c.contrast,g=c.hue,c=c.saturation,v={};for(f=0,y=cw.length;f<y;++f)d=s.a[cw[f]],t(d)&&ic(d,r,h,l,u,a,o,i,n,g,c,v,void 0,!1)}for(sc(s,r)(),r=k(Y(p.b),Number),U(r),a=0,l=r.length;a<l;++a)for(h=p.b[r[a].toString()],u=0,o=h.length;u<o;++u)h[u](p);e.c=s}}function jc(t){t=t.e,t.activeTexture(33984),t.blendFuncSeparate(770,771,1,771),t.disable(2884),t.disable(2929),t.disable(3089),t.disable(2960)}function Lc(e){re.call(this);var o=Nc(e);this.wb=!!t(e.loadTilesWhileAnimating)&&e.loadTilesWhileAnimating,this.xb=!!t(e.loadTilesWhileInteracting)&&e.loadTilesWhileInteracting,this.Nc=t(e.pixelRatio)?e.pixelRatio:Pb,this.sc=o.logos,this.o=new Xn(this.Qn,(void 0),this),Ct(this,this.o),this.Ra=Te(),this.Ee=Te(),this.vb=0,this.c=null,this.oa=qe(),this.g=this.J=null,this.a=yi("DIV","ol-viewport"),this.a.style.position="relative",this.a.style.overflow="hidden",this.a.style.width="100%",this.a.style.height="100%",this.a.style.msTouchAction="none",jb&&(this.a.className="ol-touch"),this.X=yi("DIV","ol-overlaycontainer"),this.a.appendChild(this.X),this.p=yi("DIV","ol-overlaycontainer-stopevent"),qt(this.p,["click","dblclick","mousedown","touchstart","MSPointerDown",Jb,Pm?"DOMMouseScroll":"mousewheel"],Et),this.a.appendChild(this.p),e=new Xr(this),qt(e,V(ew),this.eg,!1,this),Ct(this,e),this.T=o.keyboardEventTarget,this.n=new pr,qt(this.n,"key",this.dg,!1,this),Ct(this,this.n),e=new cr(this.a),qt(e,"mousewheel",this.dg,!1,this),Ct(this,e),this.e=o.controls,this.d=o.interactions,this.f=o.overlays,this.i=new o.Sn(this.a,this),Ct(this,this.i),this.Ga=new ir,Ct(this,this.Ga),this.L=this.l=null,this.H=[],this.ba=[],this.Fa=new Ms(d(this.zj,this),d(this.bl,this)),this.N={},qt(this,se("layergroup"),this.Qj,!1,this),qt(this,se("view"),this.mk,!1,this),qt(this,se("size"),this.jk,!1,this),qt(this,se("target"),this.lk,!1,this),this.t(o.values),this.e.forEach(function(t){t.setMap(this)},this),qt(this.e,"add",function(t){
+t.element.setMap(this)},!1,this),qt(this.e,"remove",function(t){t.element.setMap(null)},!1,this),this.d.forEach(function(t){t.setMap(this)},this),qt(this.d,"add",function(t){t.element.setMap(this)},!1,this),qt(this.d,"remove",function(t){t.element.setMap(null)},!1,this),this.f.forEach(function(t){t.setMap(this)},this),qt(this.f,"add",function(t){t.element.setMap(this)},!1,this),qt(this.f,"remove",function(t){t.element.setMap(null)},!1,this)}function Nc(e){var o=null;t(e.keyboardEventTarget)&&(o=p(e.keyboardEventTarget)?document.getElementById(e.keyboardEventTarget):e.keyboardEventTarget);var i={},n={};if(!t(e.logo)||"boolean"==typeof e.logo&&e.logo)n["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]="http://openlayers.org/";else{var r=e.logo;p(r)?n[r]="":u(r)&&(n[r.src]=r.href)}r=e.layers instanceof Cp?e.layers:new Cp({layers:e.layers}),i.layergroup=r,i.target=e.target,i.view=t(e.view)?e.view:new Ao;var a,r=ys;t(e.renderer)?s(e.renderer)?a=e.renderer:p(e.renderer)&&(a=[e.renderer]):a=_w;var l,h;for(l=0,h=a.length;l<h;++l){var c=a[l];if("canvas"==c){if(kb){r=Cu;break}}else{if("dom"==c){r=Lu;break}if("webgl"==c&&xb){r=kc;break}}}var f;f=t(e.controls)?s(e.controls)?new ei(e.controls.slice()):e.controls:Fn();var y;return y=t(e.interactions)?s(e.interactions)?new ei(e.interactions.slice()):e.interactions:Tp(),e=t(e.overlays)?s(e.overlays)?new ei(e.overlays.slice()):e.overlays:new ei,{controls:f,interactions:y,keyboardEventTarget:o,logos:n,overlays:e,Sn:r,values:i}}function Ic(e){re.call(this),this.g=!t(e.insertFirst)||e.insertFirst,this.i=!t(e.stopEvent)||e.stopEvent,this.Z=yi("DIV",{"class":"ol-overlay-container"}),this.Z.style.position="absolute",this.f=!!t(e.autoPan)&&e.autoPan,this.d=t(e.autoPanAnimation)?e.autoPanAnimation:{},this.e=t(e.autoPanMargin)?e.autoPanMargin:20,this.a={ud:"",Xd:"",ve:"",we:"",visible:!0},this.c=null,qt(this,se("element"),this.Kj,!1,this),qt(this,se("map"),this.Yj,!1,this),qt(this,se("offset"),this.ck,!1,this),qt(this,se("position"),this.ek,!1,this),qt(this,se("positioning"),this.fk,!1,this),t(e.element)&&this.wh(e.element),this.Bh(t(e.offset)?e.offset:[0,0]),this.Ch(t(e.positioning)?e.positioning:"top-left"),t(e.position)&&this.uf(e.position)}function Dc(t,e){var o=Ci(t);Bi(t,"position");var i,n=new pi(0,0);return i=o?Ci(o):document,i=!Mm||Mm&&9<=Im||Ei(hi(i))?i.documentElement:i.body,t!=i&&(i=Gi(t),o=ki(hi(o)),n.x=i.left+o.x,n.y=i.top+o.y),[n.x,n.y,n.x+e[0],n.y+e[1]]}function Fc(e){var o=e.ae(),i=e.wg();if(t(o)&&null!==o.c&&t(i)){var i=o.ta(i),n=o.xa(),o=e.Z.style,r=e.Yf(),s=e.ag(),a=r[0],r=r[1];"bottom-right"==s||"center-right"==s||"top-right"==s?(""!==e.a.Xd&&(e.a.Xd=o.left=""),a=Math.round(n[0]-i[0]-a)+"px",e.a.ve!=a&&(e.a.ve=o.right=a)):(""!==e.a.ve&&(e.a.ve=o.right=""),"bottom-center"!=s&&"center-center"!=s&&"top-center"!=s||(a-=Hi(e.Z).width/2),a=Math.round(i[0]+a)+"px",e.a.Xd!=a&&(e.a.Xd=o.left=a)),"bottom-left"==s||"bottom-center"==s||"bottom-right"==s?(""!==e.a.we&&(e.a.we=o.top=""),i=Math.round(n[1]-i[1]-r)+"px",e.a.ud!=i&&(e.a.ud=o.bottom=i)):(""!==e.a.ud&&(e.a.ud=o.bottom=""),"center-left"!=s&&"center-center"!=s&&"center-right"!=s||(r-=Hi(e.Z).height/2),i=Math.round(i[1]+r)+"px",e.a.we!=i&&(e.a.we=o.top=i)),e.a.visible||(Wi(e.Z,!0),e.a.visible=!0)}else e.a.visible&&(Wi(e.Z,!1),e.a.visible=!1)}function Oc(e){e=t(e)?e:{},this.f=!t(e.collapsed)||e.collapsed,this.g=!t(e.collapsible)||e.collapsible,this.g||(this.f=!1);var o=t(e.className)?e.className:"ol-overviewmap",i=t(e.tipLabel)?e.tipLabel:"Overview map",n=t(e.collapseLabel)?e.collapseLabel:"«";this.o=p(n)?yi("SPAN",{},n):n,n=t(e.label)?e.label:"»",this.n=p(n)?yi("SPAN",{},n):n,i=yi("BUTTON",{type:"button",title:i},this.g&&!this.f?this.o:this.n),qt(i,"click",this.ml,!1,this),qt(i,["mouseout",qm],function(){this.blur()},!1);var n=yi("DIV","ol-overviewmap-map"),r=this.d=new Lc({controls:new ei,interactions:new ei,target:n});t(e.layers)&&e.layers.forEach(function(t){r.Jf(t)},this);var s=yi("DIV","ol-overviewmap-box");this.i=new Ic({position:[0,0],positioning:"bottom-left",element:s}),this.d.Kf(this.i),o=yi("DIV",o+" ol-unselectable ol-control"+(this.f&&this.g?" ol-collapsed":"")+(this.g?"":" ol-uncollapsible"),n,i),Ji.call(this,{element:o,render:t(e.render)?e.render:Bc,target:e.target})}function Bc(){var t=this.a,e=this.d;if(null!==t.c&&null!==e.c){var o=t.xa(),t=t.R().Pc(o),i=e.xa(),o=e.R().Pc(i),n=e.ta(oo(t)),e=e.ta(Ze(t)),e=new li(Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1])),n=i[0],i=i[1];e.width<.1*n||e.height<.1*i||e.width>.75*n||e.height>.75*i?Uc(this):Be(o,t)||(t=this.d,o=this.a.R(),t.R().Na(o.Ca()))}Gc(this)}function Uc(t){var e=t.a;t=t.d;var o=e.xa(),e=e.R().Pc(o),o=t.xa();t=t.R();var i=Math.log(7.5)/Math.LN2;ao(e,1/(.1*Math.pow(2,i/2))),t.Me(e,o)}function Gc(e){var o=e.a,i=e.d;if(null!==o.c&&null!==i.c){var n=o.xa(),r=o.R(),s=i.R();i.xa();var a,o=r.Da(),p=e.i,i=e.i.$d(),r=r.Pc(n),n=s.ya(),s=Ye(r),r=io(r);e=e.a.R().Ca(),t(e)&&(a=[s[0]-e[0],s[1]-e[1]],ge(a,o),ue(a,e)),p.uf(a),null!=i&&(a=new li(Math.abs((s[0]-r[0])/n),Math.abs((r[1]-s[1])/n)),o=Ei(hi(Ci(i))),!Mm||pt("10")||o&&pt("8")?(i=i.style,Pm?i.MozBoxSizing="border-box":Em?i.WebkitBoxSizing="border-box":i.boxSizing="border-box",i.width=Math.max(a.width,0)+"px",i.height=Math.max(a.height,0)+"px"):(e=i.style,o?(o=Vi(i,"padding"),i=Zi(i),e.pixelWidth=a.width-i.left-o.left-o.right-i.right,e.pixelHeight=a.height-i.top-o.top-o.bottom-i.bottom):(e.pixelWidth=a.width,e.pixelHeight=a.height)))}}function qc(t){Ni(t.element,"ol-collapsed"),t.f?xi(t.o,t.n):xi(t.n,t.o),t.f=!t.f;var e=t.d;t.f||null!==e.c||(e.Kc(),Uc(t),Xt(e,"postrender",function(){Gc(this)},!1,t))}function $c(e){e=t(e)?e:{};var o=t(e.className)?e.className:"ol-scale-line";this.g=yi("DIV",o+"-inner"),this.Z=yi("DIV",o+" ol-unselectable",this.g),this.o=null,this.i=t(e.minWidth)?e.minWidth:64,this.d=!1,this.H=void 0,this.n="",this.f=null,Ji.call(this,{element:this.Z,render:t(e.render)?e.render:Hc,target:e.target}),qt(this,se("units"),this.N,!1,this),this.J(e.units||"metric")}function Hc(t){t=t.frameState,null===t?this.o=null:this.o=t.viewState,Xc(this)}function Xc(t){var e=t.o;if(null===e)t.d&&(Wi(t.Z,!1),t.d=!1);else{var o=e.center,i=e.projection,e=i.getPointResolution(e.resolution,o),n=i.a,r=t.p();for("degrees"!=n||"metric"!=r&&"imperial"!=r&&"us"!=r&&"nautical"!=r?"degrees"!=n&&"degrees"==r?(null===t.f&&(t.f=Co(i,xo("EPSG:4326"))),o=Math.cos(ct(t.f(o)[1])),i=_m.radius,i/=Jm[n],e*=180/(Math.PI*o*i)):t.f=null:(t.f=null,o=Math.cos(ct(o[1])),e*=Math.PI*o*_m.radius/180),o=t.i*e,n="","degrees"==r?o<1/60?(n="″",e*=3600):1>o?(n="′",e*=60):n="°":"imperial"==r?.9144>o?(n="in",e/=.0254):1609.344>o?(n="ft",e/=.3048):(n="mi",e/=1609.344):"nautical"==r?(e/=1852,n="nm"):"metric"==r?1>o?(n="mm",e*=1e3):1e3>o?n="m":(n="km",e/=1e3):"us"==r&&(.9144>o?(n="in",e*=39.37):1609.344>o?(n="ft",e/=.30480061):(n="mi",e/=1609.3472)),o=3*Math.floor(Math.log(t.i*e)/Math.log(10));;){if(i=Jw[o%3]*Math.pow(10,Math.floor(o/3)),r=Math.round(i/e),isNaN(r))return Wi(t.Z,!1),void(t.d=!1);if(r>=t.i)break;++o}e=i+" "+n,t.n!=e&&(t.g.innerHTML=e,t.n=e),t.H!=r&&(t.g.style.width=r+"px",t.H=r),t.d||(Wi(t.Z,!0),t.d=!0)}}function Wc(t){Tt.call(this),this.a=t,this.b={}}function Kc(t){W(t.b,Kt),t.b={}}function zc(t,e,o){Qt.call(this),this.target=t,this.handle=e||t,this.b=o||new Di(NaN,NaN,NaN,NaN),this.c=Ci(t),this.a=new Wc(this),Ct(this,this.a),qt(this.handle,["touchstart","mousedown"],this.cg,!1,this)}function Vc(t){var e=t.type;"touchstart"==e||"touchmove"==e?jt(t,t.b.targetTouches[0],t.c):"touchend"!=e&&"touchcancel"!=e||jt(t,t.b.changedTouches[0],t.c)}function Yc(t,e,o){var i=ki(hi(t.c));return e+=i.x-t.d.x,o+=i.y-t.d.y,t.d=i,t.yc+=e,t.zc+=o,e=_c(t,t.yc),t=Jc(t,t.zc),new pi(e,t)}function Zc(t,e,o,i){t.target.style.left=o+"px",t.target.style.top=i+"px",t.dispatchEvent(new Qc("drag",t,e.clientX,e.clientY,0,o,i))}function _c(t,e){var o=t.b,i=isNaN(o.left)?null:o.left,o=isNaN(o.width)?0:o.width;return Math.min(null!=i?i+o:1/0,Math.max(null!=i?i:-(1/0),e))}function Jc(t,e){var o=t.b,i=isNaN(o.top)?null:o.top,o=isNaN(o.height)?0:o.height;return Math.min(null!=i?i+o:1/0,Math.max(null!=i?i:-(1/0),e))}function Qc(e,o,i,n,r,s,a){Pt.call(this,e),this.clientX=i,this.clientY=n,this.left=t(s)?s:o.yc,this.top=t(a)?a:o.zc}function tf(e){e=t(e)?e:{},this.f=void 0,this.g=ex,this.i=null,this.n=!1,this.o=t(e.duration)?e.duration:200;var o=t(e.className)?e.className:"ol-zoomslider",i=yi("DIV",[o+"-thumb","ol-unselectable"]),o=yi("DIV",[o,"ol-unselectable","ol-control"],i);this.d=new zc(i),Ct(this,this.d),qt(this.d,"start",this.Jj,!1,this),qt(this.d,"drag",this.Hj,!1,this),qt(this.d,"end",this.Ij,!1,this),qt(o,"click",this.Gj,!1,this),qt(i,"click",Et),Ji.call(this,{element:o,render:t(e.render)?e.render:ef})}function ef(t){if(null!==t.frameState){if(!this.n){var e=this.element,o=Hi(e),i=Si(e),e=Vi(i,"margin"),n=new li(i.offsetWidth,i.offsetHeight),i=n.width+e.right+e.left,e=n.height+e.top+e.bottom;this.i=[i,e],i=o.width-i,e=o.height-e,o.width>o.height?(this.g=1,o=new Di(0,0,i,0)):(this.g=ex,o=new Di(0,0,0,e)),this.d.b=o||new Di(NaN,NaN,NaN,NaN),this.n=!0}t=t.frameState.viewState.resolution,t!==this.f&&(this.f=t,t=1-Lo(this.a.R())(t),o=this.d,e=Si(this.element),1==this.g?Ui(e,o.b.left+o.b.width*t):Ui(e,o.b.left,o.b.top+o.b.height*t))}}function of(t,e,o){var i=t.d.b;return lt(1===t.g?(e-i.left)/i.width:(o-i.top)/i.height,0,1)}function nf(t,e){return jo(t.a.R())(1-e)}function rf(e){e=t(e)?e:{},this.d=t(e.extent)?e.extent:null;var o=t(e.className)?e.className:"ol-zoom-extent",i=yi("BUTTON",{type:"button",title:t(e.tipLabel)?e.tipLabel:"Fit to extent"},t(e.label)?e.label:"E");qt(i,"click",this.f,!1,this),qt(i,["mouseout",qm],function(){this.blur()},!1),o=yi("DIV",o+" ol-unselectable ol-control",i),Ji.call(this,{element:o,target:e.target})}function sf(e){re.call(this),e=t(e)?e:{},this.a=null,qt(this,se("tracking"),this.Jk,!1,this),this.bf(!!t(e.tracking)&&e.tracking)}function af(e){re.call(this),this.$=void 0,this.a="geometry",this.e=null,this.c=void 0,this.d=null,qt(this,se(this.a),this.Pd,!1,this),t(e)&&(e instanceof Qs||null===e?this.La(e):this.t(e))}function pf(e){e=t(e)?e:{},this.g=this.e=this.d=this.a=this.c=this.b=null,this.f=void 0,this.rg(t(e.style)?e.style:rp),t(e.features)?s(e.features)?this.ld(new ei(e.features.slice())):this.ld(e.features):this.ld(new ei),t(e.map)&&this.setMap(e.map)}function lf(t){null===t.d||t.d.render()}function hf(){this.defaultDataProjection=null}function uf(e,o,i){var n;return t(i)&&(n={dataProjection:t(i.dataProjection)?i.dataProjection:e.za(o),featureProjection:i.featureProjection}),cf(e,n)}function cf(e,o){var i;return t(o)&&(i={featureProjection:o.featureProjection,dataProjection:null!=o.dataProjection?o.dataProjection:e.defaultDataProjection,rightHanded:o.rightHanded}),i}function ff(e,o,i){var n=t(i)?xo(i.featureProjection):null;return i=t(i)?xo(i.dataProjection):null,null===n||null===i||So(n,i)?e:e instanceof Qs?(o?e.clone():e).transform(o?n:i,o?i:n):ko(o?e.slice():e,o?n:i,o?i:n)}function yf(){this.defaultDataProjection=null}function df(e){return u(e)?e:p(e)?(e=Pw(e),t(e)?e:null):null}function gf(e){e=t(e)?e:{},this.defaultDataProjection=null,this.b=e.geometryName}function vf(t,e){if(null===t)return null;var o;if(l(t.x)&&l(t.y))o="Point";else if(null!=t.points)o="MultiPoint";else if(null!=t.paths)o=1===t.paths.length?"LineString":"MultiLineString";else if(null!=t.rings){var i=t.rings,n=mf(t),r=[];o=[];var s,a;for(s=0,a=i.length;s<a;++s){var p=H(i[s]);La(p,0,p.length,n.length)?r.push([i[s]]):o.push(i[s])}for(;o.length;){for(i=o.shift(),n=!1,s=r.length-1;0<=s;s--)if(Be(new xa(r[s][0]).G(),new xa(i).G())){r[s].push(i),n=!0;break}n||r.push([i.reverse()])}t=nt(t),1===r.length?(o="Polygon",t.rings=r[0]):(o="MultiPolygon",t.rings=r)}return ff((0,ox[o])(t),!1,e)}function mf(t){var e="XY";return!0===t.hasZ&&!0===t.hasM?e="XYZM":!0===t.hasZ?e="XYZ":!0===t.hasM&&(e="XYM"),e}function bf(t){return t=t.a,{hasZ:"XYZ"===t||"XYZM"===t,hasM:"XYM"===t||"XYZM"===t}}function wf(t,e){return(0,ix[t.M()])(ff(t,!0,e),e)}function xf(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo(null!=e.defaultDataProjection?e.defaultDataProjection:"EPSG:4326"),this.b=e.geometryName}function Sf(t,e){return null===t?null:ff((0,nx[t.type])(t),!1,e)}function Tf(t,e){return(0,rx[t.M()])(ff(t,!0,e),e)}function Cf(){this.defaultDataProjection=null}function Mf(t,e,o){return t=Pf(t,e,o),0<t.length?t[0]:null}function Pf(t,e,o){var i=[];for(e=e.firstChild;null!==e;e=e.nextSibling)1==e.nodeType&&F(i,t.Ob(e,o));return i}function Ef(e){e=t(e)?e:{},this.featureType=e.featureType,this.featureNS=e.featureNS,this.srsName=e.srsName,this.schemaLocation="",this.b={},this.b["http://www.opengis.net/gml"]={featureMember:Wh(Ef.prototype.jd),featureMembers:Wh(Ef.prototype.jd)},this.defaultDataProjection=null}function kf(t){return t=kh(t,!1),Af(t)}function Af(e){if(e=/^\s*(true|1)|(false|0)\s*$/.exec(e))return t(e[1])||!1}function Rf(e){if(e=kh(e,!1),e=/^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?))\s*$/.exec(e)){var o=Date.UTC(parseInt(e[1],10),parseInt(e[2],10)-1,parseInt(e[3],10),parseInt(e[4],10),parseInt(e[5],10),parseInt(e[6],10))/1e3;if("Z"!=e[7]){var i="-"==e[8]?-1:1,o=o+60*i*parseInt(e[9],10);t(e[10])&&(o+=3600*i*parseInt(e[10],10))}return o}}function jf(t){return t=kh(t,!1),Lf(t)}function Lf(t){if(t=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(t))return parseFloat(t[1])}function Nf(t){return t=kh(t,!1),If(t)}function If(t){if(t=/^\s*(\d+)\s*$/.exec(t))return parseInt(t[1],10)}function Df(t){return t=kh(t,!1),cm(t)}function Ff(t,e){Uf(t,e?"1":"0")}function Of(t,e){t.appendChild(Bw.createTextNode(e.toPrecision()))}function Bf(t,e){t.appendChild(Bw.createTextNode(e.toString()))}function Uf(t,e){t.appendChild(Bw.createTextNode(e))}function Gf(e){e=t(e)?e:{},Ef.call(this,e),this.i=!!t(e.surface)&&e.surface,this.e=!!t(e.curve)&&e.curve,this.f=!t(e.multiCurve)||e.multiCurve,this.g=!t(e.multiSurface)||e.multiSurface,this.schemaLocation=t(e.schemaLocation)?e.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"}function qf(t,e,o){o=o[o.length-1].srsName,e=e.K();for(var i,n=e.length,r=Array(n),s=0;s<n;++s){i=e[s];var a=s,p="enu";null!=o&&(p=uo(xo(o))),r[a]="en"===p.substr(0,2)?i[0]+" "+i[1]:i[1]+" "+i[0]}Uf(t,r.join(" "))}function $f(e){e=t(e)?e:{},Ef.call(this,e),this.b["http://www.opengis.net/gml"].featureMember=Xh(Ef.prototype.jd),this.schemaLocation=t(e.schemaLocation)?e.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"}function Hf(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326"),this.b=e.readExtensions}function Xf(t,e,o){return t.push(parseFloat(e.getAttribute("lon")),parseFloat(e.getAttribute("lat"))),"ele"in o?(t.push(o.ele),et(o,"ele")):t.push(0),"time"in o?(t.push(o.time),et(o,"time")):t.push(0),t}function Wf(t,e){var o=e[e.length-1],i=t.getAttribute("href");null===i||(o.link=i),tu(gx,t,e)}function Kf(t,e){e[e.length-1].extensionsNode_=t}function zf(e,o){var i=o[0],n=eu({flatCoordinates:[]},vx,e,o);if(t(n)){var r=n.flatCoordinates;et(n,"flatCoordinates");var s=new ml(null);return wl(s,"XYZM",r),ff(s,!1,i),i=new af(s),i.t(n),i}}function Vf(e,o){var i=o[0],n=eu({flatCoordinates:[],ends:[]},bx,e,o);if(t(n)){var r=n.flatCoordinates;et(n,"flatCoordinates");var s=n.ends;et(n,"ends");var a=new xl(null);return Tl(a,"XYZM",r,s),ff(a,!1,i),i=new af(a),i.t(n),i}}function Yf(e,o){var i=o[0],n=eu({},Sx,e,o);if(t(n)){var r=Xf([],e,n),r=new Ta(r,"XYZM");return ff(r,!1,i),i=new af(r),i.t(n),i}}function Zf(e,o){null===o&&(o=[]);for(var i=0,n=o.length;i<n;++i){var r=o[i];if(t(e.b)){var s=r.get("extensionsNode_")||null;e.b(r,s)}r.set("extensionsNode_",void 0)}}function _f(t,e,o){t.setAttribute("href",e),e=o[o.length-1].properties,iu({P:t},Cx,Kw,[e.linkText,e.linkType],o,Tx)}function Jf(t,e,o){var i=o[o.length-1],n=i.P.namespaceURI,r=i.properties;switch(Ww(t,null,"lat",e[1]),Ww(t,null,"lon",e[0]),i.geometryLayout){case"XYZM":0!==e[3]&&(r.time=e[3]);case"XYZ":0!==e[2]&&(r.ele=e[2]);break;case"XYM":0!==e[2]&&(r.time=e[2])}e=jx[n],i=Jh(r,e),iu({P:t,properties:r},Lx,Kw,i,o,e)}function Qf(e,o){var i=e.Q();if(t(i))return Uw(o[o.length-1].P.namespaceURI,Nx[i.M()])}function ty(t){return t=oy(t),k(t,function(t){return t.c.substring(t.a,t.b)})}function ey(t,e,o){this.c=t,this.a=e,this.b=o}function oy(t){for(var e,o=RegExp("\r\n|\r|\n","g"),i=0,n=[];e=o.exec(t);)i=new ey(t,i,e.index),n.push(i),i=o.lastIndex;return i<t.length&&(i=new ey(t,i,t.length),n.push(i)),n}function iy(){this.defaultDataProjection=null}function ny(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326"),this.b=t(e.altitudeMode)?e.altitudeMode:"none"}function ry(e,o){var i;e instanceof ry?(this.Yb=t(o)?o:e.Yb,sy(this,e.Pb),this.pc=e.pc,this.ib=e.ib,ay(this,e.Ec),this.hb=e.hb,py(this,e.b.clone()),this.Sb=e.Sb):e&&(i=ph(String(e)))?(this.Yb=!!o,sy(this,i[1]||"",!0),this.pc=uy(i[2]||""),this.ib=uy(i[3]||"",!0),ay(this,i[4]),this.hb=uy(i[5]||"",!0),py(this,i[6]||"",!0),this.Sb=uy(i[7]||"")):(this.Yb=!!o,this.b=new yy(null,0,this.Yb))}function sy(t,e,o){t.Pb=o?uy(e,!0):e,t.Pb&&(t.Pb=t.Pb.replace(/:$/,""))}function ay(t,e){if(e){if(e=Number(e),isNaN(e)||0>e)throw Error("Bad port number "+e);t.Ec=e}else t.Ec=null}function py(t,e,o){e instanceof yy?(t.b=e,by(t.b,t.Yb)):(o||(e=cy(e,qx)),t.b=new yy(e,0,t.Yb))}function ly(t){return t instanceof ry?t.clone():new ry(t,(void 0))}function hy(t,e){t instanceof ry||(t=ly(t)),e instanceof ry||(e=ly(e));var o=t,i=e,n=o.clone(),r=!!i.Pb;r?sy(n,i.Pb):r=!!i.pc,r?n.pc=i.pc:r=!!i.ib,r?n.ib=i.ib:r=null!=i.Ec;var s=i.hb;if(r)ay(n,i.Ec);else if(r=!!i.hb)if("/"!=s.charAt(0)&&(o.ib&&!o.hb?s="/"+s:(o=n.hb.lastIndexOf("/"),-1!=o&&(s=n.hb.substr(0,o+1)+s))),o=s,".."==o||"."==o)s="";else if(-1!=o.indexOf("./")||-1!=o.indexOf("/.")){for(var s=0==o.lastIndexOf("/",0),o=o.split("/"),a=[],p=0;p<o.length;){var l=o[p++];"."==l?s&&p==o.length&&a.push(""):".."==l?((1<a.length||1==a.length&&""!=a[0])&&a.pop(),s&&p==o.length&&a.push("")):(a.push(l),s=!0)}s=a.join("/")}else s=o;return r?n.hb=s:r=""!==i.b.toString(),r?py(n,uy(i.b.toString())):r=!!i.Sb,r&&(n.Sb=i.Sb),n}function uy(t,e){return t?e?decodeURI(t):decodeURIComponent(t):""}function cy(t,e,o){return p(t)?(t=encodeURI(t).replace(e,fy),o&&(t=t.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),t):null}function fy(t){return t=t.charCodeAt(0),"%"+(t>>4&15).toString(16)+(15&t).toString(16)}function yy(t,e,o){this.b=t||null,this.a=!!o}function dy(t){t.ia||(t.ia=new Qn,t.va=0,t.b&&lh(t.b,function(e,o){t.add(decodeURIComponent(e.replace(/\+/g," ")),o)}))}function gy(t,e){return dy(t),e=my(t,e),er(t.ia.a,e)}function vy(t,e,o){t.remove(e),0<o.length&&(t.b=null,t.ia.set(my(t,e),D(o)),t.va+=o.length)}function my(t,e){var o=String(e);return t.a&&(o=o.toLowerCase()),o}function by(t,e){e&&!t.a&&(dy(t),t.b=null,t.ia.forEach(function(t,e){var o=e.toLowerCase();e!=o&&(this.remove(e),vy(this,o,t))},t)),t.a=e}function wy(e){e=t(e)?e:{},this.d=e.font,this.e=e.rotation,this.a=e.scale,this.c=e.text,this.g=e.textAlign,this.i=e.textBaseline,this.b=t(e.fill)?e.fill:null,this.f=t(e.stroke)?e.stroke:null,this.q=t(e.offsetX)?e.offsetX:0,this.l=t(e.offsetY)?e.offsetY:0}function xy(e){function o(t){return s(t)?t:p(t)?(!(t in n)&&"#"+t in n&&(t="#"+t),o(n[t])):i}e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326");var i=t(e.defaultStyle)?e.defaultStyle:Jx,n={};this.c=!t(e.extractStyles)||e.extractStyles,this.b=n,this.d=function(){var e=this.get("Style");return t(e)?e:(e=this.get("styleUrl"),t(e)?o(e):i)}}function Sy(t){if(t=kh(t,!1),t=/^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(t))return t=t[1],[parseInt(t.substr(6,2),16),parseInt(t.substr(4,2),16),parseInt(t.substr(2,2),16),parseInt(t.substr(0,2),16)/255]}function Ty(t){t=kh(t,!1);for(var e,o=[],i=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i;e=i.exec(t);)o.push(parseFloat(e[1]),parseFloat(e[2]),e[3]?parseFloat(e[3]):0),t=t.substr(e[0].length);return""!==t?void 0:o}function Cy(t){var e=kh(t,!1);return null!=t.baseURI?hy(t.baseURI,cm(e)).toString():cm(e)}function My(e){if(e=jf(e),t(e))return Math.sqrt(e)}function Py(t,e){return eu(null,iS,t,e)}function Ey(e,o){var i=eu({j:[],Kh:[]},rS,e,o);if(t(i)){var n,r,s=i.j,i=i.Kh;for(n=0,r=Math.min(s.length,i.length);n<r;++n)s[4*n+3]=i[n];return i=new ml(null),wl(i,"XYZM",s),i}}function ky(e,o){var i=eu({},oS,e,o),n=eu(null,sS,e,o);if(t(n)){var r=new ml(null);return wl(r,"XYZ",n),r.t(i),r}}function Ay(e,o){var i=eu({},oS,e,o),n=eu(null,sS,e,o);if(t(n)){var r=new Fa(null);return Ua(r,"XYZ",n,[n.length]),r.t(i),r}}function Ry(e,o){var i=eu([],cS,e,o);if(!t(i))return null;if(0===i.length)return new ul(i);var n,r,s,a=!0,p=i[0].M();for(r=1,s=i.length;r<s;++r)if(n=i[r],n.M()!=p){a=!1;break}if(a){if("Point"==p){for(n=i[0],a=n.a,p=n.j,r=1,s=i.length;r<s;++r)n=i[r],F(p,n.j);return n=new Ml(null),ia(n,a,p),n.k(),Iy(n,i),n}return"LineString"==p?(n=new xl(null),Cl(n,i),Iy(n,i),n):"Polygon"==p?(n=new Pl(null),Rl(n,i),Iy(n,i),n):"GeometryCollection"==p?new ul(i):null}return new ul(i)}function jy(t,e){var o=eu({},oS,t,e),i=eu(null,sS,t,e);if(null!=i){var n=new Ta(null);return Ca(n,"XYZ",i),n.t(o),n}}function Ly(t,e){var o=eu({},oS,t,e),i=eu([null],nS,t,e);if(null!=i&&null!==i[0]){var n,r,s=new Fa(null),a=i[0],p=[a.length];for(n=1,r=i.length;n<r;++n)F(a,i[n]),p.push(a.length);return Ua(s,"XYZ",a,p),s.t(o),s}}function Ny(e,o){var i=eu({},xS,e,o);if(!t(i))return null;var n=ot(i,"fillStyle",Kx),r=i.fill;t(r)&&!r&&(n=null);var r=ot(i,"imageStyle",Yx),s=ot(i,"textStyle",_x),a=ot(i,"strokeStyle",Zx),i=i.outline;return t(i)&&!i&&(a=null),[new ip({fill:n,image:r,stroke:a,text:s,zIndex:void 0})]}function Iy(e,o){var i,n,r,s,a=o.length,p=Array(o.length),l=Array(o.length);for(r=s=!1,n=0;n<a;++n)i=o[n],p[n]=i.get("extrude"),l[n]=i.get("altitudeMode"),r=r||t(p[n]),s=s||t(l[n]);r&&e.set("extrude",p),s&&e.set("altitudeMode",l)}function Dy(t,e){tu(eS,t,e)}function Fy(e,o){var i;for(i=o.firstChild;null!==i;i=i.nextSibling)if(1==i.nodeType){var n=Oy(e,i);if(t(n))return n}}function Oy(e,o){var i;for(i=o.firstElementChild;null!==i;i=i.nextElementSibling)if(L(Xx,i.namespaceURI)&&"name"==i.localName)return Df(i);for(i=o.firstElementChild;null!==i;i=i.nextElementSibling){var n=Gw(i);if(L(Xx,i.namespaceURI)&&("Document"==n||"Folder"==n||"Placemark"==n||"kml"==n)&&(n=Oy(e,i),t(n)))return n}}function By(t,e){var o,i=[];for(o=e.firstChild;null!==o;o=o.nextSibling)1==o.nodeType&&F(i,Uy(t,o));return i}function Uy(t,e){var o,i=[];for(o=e.firstElementChild;null!==o;o=o.nextElementSibling)if(L(Xx,o.namespaceURI)&&"NetworkLink"==o.localName){var n=eu({},yS,o,[]);i.push(n)}for(o=e.firstElementChild;null!==o;o=o.nextElementSibling)n=Gw(o),!L(Xx,o.namespaceURI)||"Document"!=n&&"Folder"!=n&&"kml"!=n||F(i,Uy(t,o));return i}function Gy(t,e){var o,i=ii(e),i=[255*(4==i.length?i[3]:1),i[2],i[1],i[0]];for(o=0;4>o;++o){var n=parseInt(i[o],10).toString(16);i[o]=1==n.length?"0"+n:n}Uf(t,i.join(""))}function qy(t,e,o){iu({P:t},DS,YS,[e],o)}function $y(e,o,i){var n={P:e};null!=o.$&&e.setAttribute("id",o.$),e=o.D();var r=o.c;t(r)&&(r=r.call(o,0),null!==r&&0<r.length&&(e.Style=r[0],r=r[0].a,null===r||(e.name=r.c))),r=OS[i[i.length-1].P.namespaceURI],e=Jh(e,r),iu(n,BS,Kw,e,i,r),e=i[0],o=o.Q(),null!=o&&(o=ff(o,!0,e)),iu(n,BS,Vy,[o],i)}function Hy(t,e,o){var i=e.j;t={P:t},t.layout=e.a,t.stride=e.s,iu(t,US,WS,[i],o)}function Xy(t,e,o){e=e.Ed();var i=e.shift();t={P:t},iu(t,GS,KS,e,o),iu(t,GS,_S,[i],o)}function Wy(t,e){Of(t,e*e)}function Ky(t,e,o){return Uw(Hx[0],"gx:"+o)}function zy(t,e){return Uw(e[e.length-1].P.namespaceURI,"Placemark")}function Vy(t,e){if(null!=t)return Uw(e[e.length-1].P.namespaceURI,PS[t.M()])}function Yy(){this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326")}function Zy(t,e){e[e.length-1].od[t.getAttribute("k")]=t.getAttribute("v")}function _y(t){return t.getAttributeNS("http://www.w3.org/1999/xlink","href")}function Jy(){}function Qy(){}function td(e,o,i,n){var r;t(n)?r=t(void 0)?void 0:0:(n=[],r=0);var s,a;for(s=0;s<o;)for(a=e[s++],n[r++]=e[s++],n[r++]=a,a=2;a<i;++a)n[r++]=e[s++];n.length=r}function ed(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo("EPSG:4326"),this.b=t(e.factor)?e.factor:1e5,this.a=t(e.geometryLayout)?e.geometryLayout:"XY"}function od(e,o,i){i=t(i)?i:1e5;var n,r=Array(o);for(n=0;n<o;++n)r[n]=0;var s,a;for(s=0,a=e.length;s<a;)for(n=0;n<o;++n,++s){var p=e[s],l=p-r[n];r[n]=p,e[s]=l}return nd(e,i)}function id(e,o,i){var n=t(i)?i:1e5,r=Array(o);for(i=0;i<o;++i)r[i]=0;e=rd(e,n);var s,n=0;for(s=e.length;n<s;)for(i=0;i<o;++i,++n)r[i]+=e[n],e[n]=r[i];return e}function nd(e,o){var i,n,r=t(o)?o:1e5;for(i=0,n=e.length;i<n;++i)e[i]=Math.round(e[i]*r);for(r=0,i=e.length;r<i;++r)n=e[r],e[r]=0>n?~(n<<1):n<<1;for(r="",i=0,n=e.length;i<n;++i){for(var s=e[i],a=void 0,p="";32<=s;)a=(32|31&s)+63,p+=String.fromCharCode(a),s>>=5;a=s+63,p+=String.fromCharCode(a),r+=p}return r}function rd(e,o){var i,n,r=t(o)?o:1e5,s=[],a=0,p=0;for(i=0,n=e.length;i<n;++i){var l=e.charCodeAt(i)-63,a=a|(31&l)<<p;32>l?(s.push(a),p=a=0):p+=5}for(a=0,p=s.length;a<p;++a)i=s[a],s[a]=1&i?~(i>>1):i>>1;for(a=0,p=s.length;a<p;++a)s[a]/=r;return s}function sd(e){e=t(e)?e:{},this.defaultDataProjection=null,this.defaultDataProjection=xo(null!=e.defaultDataProjection?e.defaultDataProjection:"EPSG:4326")}function ad(t,e){var o,i,n,r,s=[];for(n=0,r=t.length;n<r;++n)o=t[n],0<n&&s.pop(),i=0<=o?e[o]:e[~o].slice().reverse(),s.push.apply(s,i);for(o=0,i=s.length;o<i;++o)s[o]=s[o].slice();return s}function pd(t,e,o,i,n){t=t.geometries;var r,s,a=[];for(r=0,s=t.length;r<s;++r)a[r]=ld(t[r],e,o,i,n);return a}function ld(e,o,i,n,r){var s=e.type,a=vT[s];return o="Point"===s||"MultiPoint"===s?a(e,i,n):a(e,o),i=new af,i.La(ff(o,!1,r)),t(e.id)&&i.Qb(e.id),t(e.properties)&&i.t(e.properties),i}function hd(t,e,o){t[0]=t[0]*e[0]+o[0],t[1]=t[1]*e[1]+o[1]}function ud(e){e=t(e)?e:{},this.e=e.featureType,this.c=e.featureNS,this.b=t(e.gmlFormat)?e.gmlFormat:new Gf,this.d=t(e.schemaLocation)?e.schemaLocation:"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd",this.defaultDataProjection=null}function cd(t,e){for(var o=e.firstChild;null!==o;o=o.nextSibling)if(1==o.nodeType)return fd(t,o)}function fd(t,e){var o={},i=If(e.getAttribute("numberOfFeatures"));return o.numberOfFeatures=i,eu(o,mT,e,[],t.b)}function yd(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return eu({},ST,t,[])}function dd(t,e){var o=Uw("http://www.opengis.net/ogc","Filter"),i=Uw("http://www.opengis.net/ogc","FeatureId");o.appendChild(i),i.setAttribute("fid",e),t.appendChild(o)}function gd(e){e=t(e)?e:{},this.defaultDataProjection=null,this.b=!!t(e.splitCollection)&&e.splitCollection}function vd(t){return t=t.K(),0==t.length?"":t[0]+" "+t[1]}function md(t){t=t.K();for(var e=[],o=0,i=t.length;o<i;++o)e.push(t[o][0]+" "+t[o][1]);return e.join(",")}function bd(t){var e=[];t=t.Ed();for(var o=0,i=t.length;o<i;++o)e.push("("+md(t[o])+")");return e.join(",")}function wd(t){var e=t.M();return t=(0,PT[e])(t),e=e.toUpperCase(),0===t.length?e+" EMPTY":e+"("+t+")"}function xd(t){this.a=t,this.b=-1}function Sd(e,o){var i=!!t(o)&&o;return"0"<=e&&"9">=e||"."==e&&!i}function Td(t){var e=t.a.charAt(++t.b),o={position:t.b,value:e};if("("==e)o.type=2;else if(","==e)o.type=5;else if(")"==e)o.type=3;else if(Sd(e)||"-"==e){o.type=4;var i,e=t.b,n=!1;do"."==i&&(n=!0),i=t.a.charAt(++t.b);while(Sd(i,n));t=parseFloat(t.a.substring(e,t.b--)),o.value=t}else if("a"<=e&&"z">=e||"A"<=e&&"Z">=e){o.type=1,e=t.b;do i=t.a.charAt(++t.b);while("a"<=i&&"z">=i||"A"<=i&&"Z">=i);t=t.a.substring(e,t.b--).toUpperCase(),o.value=t}else{if(" "==e||"\t"==e||"\r"==e||"\n"==e)return Td(t);if(""!==e)throw Error("Unexpected character: "+e);o.type=6}return o}function Cd(t){this.a=t}function Md(e){var o=e.b;if(e.match(1)){var i=o.value;if("GEOMETRYCOLLECTION"==i){t:{if(e.match(2)){o=[];do o.push(Md(e));while(e.match(5));if(e.match(3)){e=o;break t}}else if(Ad(e)){e=[];break t}throw Error(Rd(e))}return new ul(e)}var n=kT[i],o=ET[i];if(!t(n)||!t(o))throw Error("Invalid geometry type: "+i);return e=n.call(e),new o(e)}throw Error(Rd(e))}function Pd(t){for(var e=[],o=0;2>o;++o){var i=t.b;if(!t.match(4))break;e.push(i.value)}if(2==e.length)return e;throw Error(Rd(t))}function Ed(t){for(var e=[Pd(t)];t.match(5);)e.push(Pd(t));return e}function kd(t){for(var e=[t.kf()];t.match(5);)e.push(t.kf());return e}function Ad(t){var e=1==t.b.type&&"EMPTY"==t.b.value;return e&&(t.b=Td(t.a)),e}function Rd(t){return"Unexpected `"+t.b.value+"` at position "+t.b.position+" in `"+t.a.a+"`"}function jd(){this.version=void 0}function Ld(t,e){return eu({},WT,t,e)}function Nd(t,e){return eu({},qT,t,e)}function Id(e,o){var i=Ld(e,o);if(t(i)){var n=[If(e.getAttribute("width")),If(e.getAttribute("height"))];return i.size=n,i}}function Dd(t,e){return eu([],KT,t,e)}function Fd(){this.c="http://mapserver.gis.umn.edu/mapserver",this.b=new $f,this.defaultDataProjection=null}function Od(e,o,i){o.namespaceURI=e.c;var n=Gw(o),r=[];return 0===o.childNodes.length?r:("msGMLOutput"==n&&P(o.childNodes,function(e){if(1===e.nodeType){var o,n=i[0],s=e.localName,a=RegExp;o="_layer".replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08"),a=new a(o,""),s=s.replace(a,"")+"_feature",n.featureType=s,n.featureNS=this.c,a={},a[s]=Xh(this.b.nf,this.b),n=Vh([n.featureNS,null],a),e.namespaceURI=this.c,e=eu([],n,e,i,this.b),t(e)&&F(r,e)}},e),"FeatureCollection"==n&&(e=eu([],e.b.b,o,[{}],e.b),t(e)&&(r=e)),r)}function Bd(){this.d=new Qy}function Ud(e){var o=Df(e).split(" ");if(t(o)&&2==o.length)return e=+o[0],o=+o[1],isNaN(e)||isNaN(o)?void 0:[e,o]}function Gd(e){re.call(this),e=t(e)?e:{},this.a=null,this.d=Mo,this.c=void 0,qt(this,se("projection"),this.Vk,!1,this),qt(this,se("tracking"),this.Wk,!1,this),t(e.projection)&&this.ug(xo(e.projection)),t(e.trackingOptions)&&this.Dh(e.trackingOptions),this.Zd(!!t(e.tracking)&&e.tracking)}function qd(t,e,o){for(var i,n,r,s,a,p=[],l=t(0),h=t(1),u=e(l),c=e(h),f=[h,l],y=[c,u],d=[1,0],g={},v=1e5;0<--v&&0<d.length;)r=d.pop(),l=f.pop(),u=y.pop(),h=r.toString(),h in g||(p.push(u[0],u[1]),g[h]=!0),s=d.pop(),h=f.pop(),c=y.pop(),a=(r+s)/2,i=t(a),n=e(i),aa(n[0],n[1],u[0],u[1],c[0],c[1])<o?(p.push(c[0],c[1]),h=s.toString(),g[h]=!0):(d.push(s,a,a,r),y.push(c,n,n,u),f.push(h,i,i,l));return p}function $d(t,e,o,i,n){var r=xo("EPSG:4326");return qd(function(i){
+return[t,e+(o-e)*i]},To(r,i),n)}function Hd(t,e,o,i,n){var r=xo("EPSG:4326");return qd(function(i){return[e+(o-e)*i,t]},To(r,i),n)}function Xd(e){e=t(e)?e:{},this.i=this.g=null,this.d=this.c=1/0,this.f=this.e=-(1/0),this.n=t(e.targetSize)?e.targetSize:100,this.U=t(e.maxLines)?e.maxLines:100,this.b=[],this.a=[],this.V=t(e.strokeStyle)?e.strokeStyle:nC,this.o=this.q=void 0,this.l=null,this.setMap(t(e.map)?e.map:null)}function Wd(e,o,i,n,r){var s=r;return o=$d(o,e.e,e.c,e.i,i),s=t(e.b[s])?e.b[s]:new ml(null),wl(s,"XY",o),ro(s.G(),n)&&(e.b[r++]=s),r}function Kd(e,o,i,n,r){var s=r;return o=Hd(o,e.f,e.d,e.i,i),s=t(e.a[s])?e.a[s]:new ml(null),wl(s,"XY",o),ro(s.G(),n)&&(e.a[r++]=s),r}function zd(t,e,o,i,n,r,s){_r.call(this,t,e,o,0,i),this.i=n,this.a=new Image,null!==r&&(this.a.crossOrigin=r),this.d={},this.c=null,this.state=0,this.g=s}function Vd(t,e,o,i,n){nn.call(this,t,e),this.g=o,this.a=new Image,null!==i&&(this.a.crossOrigin=i),this.c={},this.e=null,this.i=n}function Yd(t){P(t.e,Kt),t.e=null}function Zd(t,e,o){return function(i,n,r){return o(t,e,i,n,r)}}function _d(){}function Jd(t,e){Qt.call(this),this.b=new Wc(this);var o=t;e&&(o=Ci(t)),this.b.Ka(o,"dragenter",this.$m),o!=t&&this.b.Ka(o,"dragover",this.an),this.b.Ka(t,"dragover",this.bn),this.b.Ka(t,"drop",this.cn)}function Qd(t,e){this.e=[],this.U=t,this.o=e||null,this.d=this.b=!1,this.c=void 0,this.q=this.V=this.g=!1,this.f=0,this.a=null,this.i=0}function tg(t,e,o){t.b=!0,t.c=o,t.d=!e,ng(t)}function eg(t){if(t.b){if(!t.q)throw new rg;t.q=!1}}function og(t,e,o,i){t.e.push([e,o,i]),t.b&&ng(t)}function ig(t){return A(t.e,function(t){return h(t[1])})}function ng(e){if(e.f&&e.b&&ig(e)){var o=e.f,i=sC[o];i&&(sm.clearTimeout(i.$),delete sC[o]),e.f=0}e.a&&(e.a.i--,delete e.a);for(var o=e.c,n=i=!1;e.e.length&&!e.g;){var r=e.e.shift(),s=r[0],a=r[1],r=r[2];if(s=e.d?a:s)try{var p=s.call(r||e.o,o);t(p)&&(e.d=e.d&&(p==o||p instanceof Error),e.c=o=p),ql(o)&&(n=!0,e.g=!0)}catch(l){o=l,e.d=!0,ig(e)||(i=!0)}}e.c=o,n&&(p=d(e.l,e,!0),n=d(e.l,e,!1),o instanceof Qd?(og(o,p,n),o.V=!0):o.then(p,n)),i&&(o=new ag(o),sC[o.$]=o,e.f=o.$)}function rg(){m.call(this)}function sg(){m.call(this)}function ag(t){this.$=sm.setTimeout(d(this.a,this),0),this.b=t}function pg(e,o){t(e.name)?(this.name=e.name,this.code=aC[e.name]):(this.code=e.code,this.name=lg(e.code)),m.call(this,w("%s %s",this.name,o))}function lg(e){var o=J(aC,function(t){return e==t});if(!t(o))throw Error("Invalid code: "+e);return o}function hg(t,e){Pt.call(this,t.type,e)}function ug(){Qt.call(this),this.Ya=new FileReader,this.Ya.onloadstart=d(this.b,this),this.Ya.onprogress=d(this.b,this),this.Ya.onload=d(this.b,this),this.Ya.onabort=d(this.b,this),this.Ya.onerror=d(this.b,this),this.Ya.onloadend=d(this.b,this)}function cg(t){var e=new Qd;return t.Ka("loadend",g(function(t,e){var o=e.Ya.result,i=e.getError();null==o||i?(eg(t),tg(t,!1,i)):(eg(t),tg(t,!0,o)),e.Yc()},e,t)),e}function fg(e){e=t(e)?e:{},As.call(this,{handleEvent:lb}),this.f=t(e.formatConstructors)?e.formatConstructors:[],this.o=t(e.projection)?xo(e.projection):null,this.e=null,this.a=void 0}function yg(t,e,o,i,n){Pt.call(this,t,e),this.features=i,this.file=o,this.projection=n}function dg(t,e){this.x=t,this.y=e}function gg(e){e=t(e)?e:{},$s.call(this,{handleDownEvent:bg,handleDragEvent:vg,handleUpEvent:mg}),this.i=t(e.condition)?e.condition:Us,this.a=this.f=void 0,this.g=0,this.n=t(e.duration)?e.duration:400}function vg(e){if(qs(e)){var o=e.map,i=o.xa();e=e.pixel,e=new dg(e[0]-i[0]/2,i[1]/2-e[1]),i=Math.atan2(e.y,e.x),e=Math.sqrt(e.x*e.x+e.y*e.y);var n=o.R(),r=No(n);o.render(),t(this.f)&&Rs(o,n,r.rotation-(i-this.f)),this.f=i,t(this.a)&&Ls(o,n,r.resolution/e*this.a),t(this.a)&&(this.g=this.a/e),this.a=e}}function mg(t){if(!qs(t))return!0;t=t.map;var e=t.R();Do(e,-1);var o=No(e),i=this.g-1,n=o.rotation,n=e.constrainRotation(n,0);return Rs(t,e,n,void 0,void 0),o=o.resolution,n=this.n,o=e.constrainResolution(o,0,i),Ls(t,e,o,void 0,n),this.g=0,!1}function bg(t){return!(!qs(t)||!this.i(t))&&(Do(t.map.R(),1),this.a=this.f=void 0,!0)}function wg(t,e){Pt.call(this,t),this.feature=e}function xg(e){$s.call(this,{handleDownEvent:Cg,handleEvent:Tg,handleUpEvent:Mg}),this.N=null,this.H=!1,this.Ga=t(e.source)?e.source:null,this.oa=t(e.features)?e.features:null,this.gi=t(e.snapTolerance)?e.snapTolerance:12,this.Nc=t(e.minPointsPerRing)?e.minPointsPerRing:3;var o,i=this.L=e.type;"Point"===i||"MultiPoint"===i?o=lC:"LineString"===i||"MultiLineString"===i?o=hC:"Polygon"===i||"MultiPolygon"===i?o=uC:"Circle"===i&&(o=cC),this.a=o,this.f=this.n=this.p=this.g=this.i=null,this.T=new pf({style:t(e.style)?e.style:Sg()}),this.Fa=e.geometryName,this.Ee=t(e.condition)?e.condition:Bs,this.ba=t(e.freehandCondition)?e.freehandCondition:Us,qt(this,se("active"),this.Ra,!1,this)}function Sg(){var t=sp();return function(e){return t[e.Q().M()]}}function Tg(t){var e=!this.H;return this.H&&t.type===Zb?(Ag(this,t),e=!1):t.type===_b?e=Pg(this,t):t.type===Yb&&(e=!1),Xs.call(this,t)&&e}function Cg(t){return this.Ee(t)?(this.N=t.pixel,!0):!(this.a!==hC&&this.a!==uC||!this.ba(t))&&(this.N=t.pixel,this.H=!0,null===this.i&&kg(this,t),!0)}function Mg(t){this.H=!1;var e=this.N,o=t.pixel,i=e[0]-o[0],e=e[1]-o[1],o=!0;return 4>=i*i+e*e&&(Pg(this,t),null===this.i?kg(this,t):(this.a===lC||this.a===cC)&&null!==this.i||Eg(this,t)?this.X():Ag(this,t),o=!1),o}function Pg(t,e){if(t.a===lC&&null===t.i)kg(t,e);else if(null===t.i){var o=e.coordinate.slice();null===t.p?(t.p=new af(new Ta(o)),jg(t)):t.p.Q().W(o)}else{var i,n,o=e.coordinate,r=t.g.Q();t.a===lC?(n=r.K(),n[0]=o[0],n[1]=o[1],r.W(n)):(t.a===hC?i=r.K():t.a===uC?i=t.f[0]:t.a===cC&&(i=r.dd()),Eg(t,e)&&(o=t.i.slice()),t.p.Q().W(o),n=i[i.length-1],n[0]=o[0],n[1]=o[1],t.a===hC?r.W(i):t.a===uC?(n=t.n.Q(),n.W(i),r.W(t.f)):t.a===cC&&(n=t.n.Q(),n.W([r.dd(),o]),r.Ag(n.Bg()))),jg(t)}return!0}function Eg(t,e){var o=!1;if(null!==t.g){var i=t.g.Q(),n=!1,r=[t.i];if(t.a===hC?n=2<i.K().length:t.a===uC&&(n=i.K()[0].length>t.Nc,r=[t.f[0][0],t.f[0][t.f[0].length-2]]),n)for(var i=e.map,n=0,s=r.length;n<s;n++){var a=r[n],p=i.ta(a),l=e.pixel,o=l[0]-p[0],p=l[1]-p[1],l=t.H&&t.ba(e)?1:t.gi;if(o=Math.sqrt(o*o+p*p)<=l){t.i=a;break}}}return o}function kg(e,o){var i=o.coordinate;e.i=i;var n;e.a===lC?n=new Ta(i.slice()):e.a===hC?n=new ml([i.slice(),i.slice()]):e.a===uC?(e.n=new af(new ml([i.slice(),i.slice()])),e.f=[[i.slice(),i.slice()]],n=new Fa(e.f)):e.a===cC&&(n=new ll(i.slice(),0),e.n=new af(new ml([i.slice(),i.slice()]))),e.g=new af,t(e.Fa)&&e.g.Ic(e.Fa),e.g.La(n),jg(e),e.dispatchEvent(new wg("drawstart",e.g))}function Ag(t,e){var o,i=e.coordinate,n=t.g.Q();t.a===hC?(t.i=i.slice(),o=n.K(),o.push(i.slice()),n.W(o)):t.a===uC&&(t.f[0].push(i.slice()),n.W(t.f)),jg(t)}function Rg(t){t.i=null;var e=t.g;return null!==e&&(t.g=null,t.p=null,t.n=null,t.T.b.clear()),e}function jg(t){var e=[];null===t.g||e.push(t.g),null===t.n||e.push(t.n),null===t.p||e.push(t.p),t.T.ld(new ei(e))}function Lg(e){$s.call(this,{handleDownEvent:Dg,handleDragEvent:Fg,handleEvent:Bg,handleUpEvent:Og}),this.X=t(e.deleteCondition)?e.deleteCondition:fn(Bs,Os),this.T=this.f=null,this.L=[0,0],this.a=new au,this.i=t(e.pixelTolerance)?e.pixelTolerance:10,this.N=!1,this.g=null,this.n=new pf({style:t(e.style)?e.style:qg()}),this.H={Point:this.Bl,LineString:this.Dg,LinearRing:this.Dg,Polygon:this.Cl,MultiPoint:this.zl,MultiLineString:this.yl,MultiPolygon:this.Al,GeometryCollection:this.xl},this.p=e.features,this.p.forEach(this.Cg,this),qt(this.p,"add",this.vl,!1,this),qt(this.p,"remove",this.wl,!1,this)}function Ng(t,e){var o=t.f;null===o?(o=new af(new Ta(e)),t.f=o,t.n.pg(o)):o.Q().W(e)}function Ig(t,e){return t.index-e.index}function Dg(t){Ug(this,t.pixel,t.map),this.g=[];var e=this.f;if(null!==e){t=[];var e=e.Q().K(),o=Ne([e]),o=lu(this.a,o),i={};o.sort(Ig);for(var n=0,r=o.length;n<r;++n){var s=o[n],a=s.aa,p=c(s.feature),l=s.depth;l&&(p+="-"+l.join("-")),i[p]||(i[p]=Array(2)),de(a[0],e)&&!i[p][0]?(this.g.push([s,0]),i[p][0]=s):de(a[1],e)&&!i[p][1]?("LineString"!==s.geometry.M()&&"MultiLineString"!==s.geometry.M()||!i[p][0]||0!==i[p][0].index)&&(this.g.push([s,1]),i[p][1]=s):c(a)in this.T&&!i[p][0]&&!i[p][1]&&t.push([s,e])}for(n=t.length-1;0<=n;--n)this.qk.apply(this,t[n])}return null!==this.f}function Fg(t){t=t.coordinate;for(var e=0,o=this.g.length;e<o;++e){for(var i=this.g[e],n=i[0],r=n.depth,s=n.geometry,a=s.K(),p=n.aa,i=i[1];t.length<s.s;)t.push(0);switch(s.M()){case"Point":a=t,p[0]=p[1]=t;break;case"MultiPoint":a[n.index]=t,p[0]=p[1]=t;break;case"LineString":a[n.index+i]=t,p[i]=t;break;case"MultiLineString":a[r[0]][n.index+i]=t,p[i]=t;break;case"Polygon":a[r[0]][n.index+i]=t,p[i]=t;break;case"MultiPolygon":a[r[1]][r[0]][n.index+i]=t,p[i]=t}s.W(a)}Ng(this,t)}function Og(){for(var t,e=this.g.length-1;0<=e;--e)t=this.g[e][0],this.a.update(Ne(t.aa),t);return!1}function Bg(e){var o;if(e.map.R().c.slice()[1]||e.type!=_b||this.o||(this.L=e.pixel,Ug(this,e.pixel,e.map)),null!==this.f&&this.X(e)){this.f.Q(),o=this.g;var i,n,r,s,a,p,l,h,u,f={};for(a=o.length-1;0<=a;--a)if(r=o[a],h=r[0],s=h.geometry,n=s.K(),u=c(h.feature),h.depth&&(u+="-"+h.depth.join("-")),i=l=p=void 0,0===r[1]?(l=h,p=h.index):1==r[1]&&(i=h,p=h.index+1),u in f||(f[u]=[i,l,p]),r=f[u],t(i)&&(r[0]=i),t(l)&&(r[1]=l),t(r[0])&&t(r[1])){switch(i=n,u=!1,l=p-1,s.M()){case"MultiLineString":n[h.depth[0]].splice(p,1),u=!0;break;case"LineString":n.splice(p,1),u=!0;break;case"MultiPolygon":i=i[h.depth[1]];case"Polygon":i=i[h.depth[0]],4<i.length&&(p==i.length-1&&(p=0),i.splice(p,1),u=!0,0===p&&(i.pop(),i.push(i[0]),l=i.length-1))}u&&(this.a.remove(r[0]),this.a.remove(r[1]),s.W(n),n={depth:h.depth,feature:h.feature,geometry:h.geometry,index:l,aa:[r[0].aa[0],r[1].aa[1]]},this.a.ha(Ne(n.aa),n),Gg(this,s,p,h.depth,-1),this.n.Yd(this.f),this.f=null)}o=!0}return Xs.call(this,e)&&!o}function Ug(t,e,o){function i(t,e){return me(n,t.aa)-me(n,e.aa)}var n=o.ka(e),r=o.ka([e[0]-t.i,e[1]+t.i]),s=o.ka([e[0]+t.i,e[1]-t.i]),r=Ne([r,s]),r=lu(t.a,r);if(0<r.length){r.sort(i);var s=r[0].aa,a=ce(n,s),p=o.ta(a);if(Math.sqrt(ve(e,p))<=t.i){for(e=o.ta(s[0]),o=o.ta(s[1]),e=ve(p,e),o=ve(p,o),t.N=Math.sqrt(Math.min(e,o))<=t.i,t.N&&(a=e>o?s[1]:s[0]),Ng(t,a),o={},o[c(s)]=!0,e=1,p=r.length;e<p&&(a=r[e].aa,de(s[0],a[0])&&de(s[1],a[1])||de(s[0],a[1])&&de(s[1],a[0]));++e)o[c(a)]=!0;return void(t.T=o)}}null!==t.f&&(t.n.Yd(t.f),t.f=null)}function Gg(e,o,i,n,r){hu(e.a,o.G(),function(e){e.geometry===o&&(!t(n)||G(e.depth,n))&&e.index>i&&(e.index+=r)})}function qg(){var t=sp();return function(){return t.Point}}function $g(t,e,o){Pt.call(this,t),this.selected=e,this.deselected=o}function Hg(e){As.call(this,{handleEvent:Xg}),e=t(e)?e:{},this.o=t(e.condition)?e.condition:Os,this.g=t(e.addCondition)?e.addCondition:pb,this.H=t(e.removeCondition)?e.removeCondition:pb,this.L=t(e.toggleCondition)?e.toggleCondition:Us,this.i=!!t(e.multi)&&e.multi,this.e=t(e.filter)?e.filter:lb;var o;if(t(e.layers))if(h(e.layers))o=e.layers;else{var i=e.layers;o=function(t){return L(i,t)}}else o=lb;this.f=o,this.a=new pf({style:t(e.style)?e.style:Wg()}),e=this.a.b,qt(e,"add",this.n,!1,this),qt(e,"remove",this.J,!1,this)}function Xg(t){if(!this.o(t))return!0;var e=this.g(t),o=this.H(t),i=this.L(t),n=t.map,r=this.a.b,s=[],a=[],p=!1;if(e||o||i){for(n.Ne(t.pixel,function(t,n){-1==M(r.a,t)?(e||i)&&this.e(t,n)&&a.push(t):(o||i)&&s.push(t)},this,this.f),n=s.length-1;0<=n;--n)r.remove(s[n]);r.af(a),(0<a.length||0<s.length)&&(p=!0)}else n.Ne(t.pixel,function(t,e){if(this.e(t,e))return a.push(t),!this.i},this,this.f),0<a.length&&1==r.Ib()&&r.item(0)==a[0]||(p=!0,0!==r.Ib()&&(s=Array.prototype.concat(r.a),r.clear()),r.af(a));return p&&this.dispatchEvent(new $g("select",a,s)),Fs(t)}function Wg(){var t=sp();return F(t.Polygon,t.LineString),F(t.GeometryCollection,t.LineString),function(e){return t[e.Q().M()]}}function Kg(e){$s.call(this,{handleEvent:zg,handleDownEvent:lb,handleUpEvent:Vg}),e=t(e)?e:{},this.i=t(e.source)?e.source:null,this.g=t(e.features)?e.features:null,this.X=[],this.p={},this.H={},this.N={},this.n={},this.L=null,this.f=t(e.pixelTolerance)?e.pixelTolerance:10,this.ba=d(Yg,this),this.a=new au,this.T={Point:this.Il,LineString:this.Gg,LinearRing:this.Gg,Polygon:this.Jl,MultiPoint:this.Gl,MultiLineString:this.Fl,MultiPolygon:this.Hl,GeometryCollection:this.El}}function zg(t){var e,o,i=t.pixel,n=t.coordinate;e=t.map;var r=e.ka([i[0]-this.f,i[1]+this.f]);o=e.ka([i[0]+this.f,i[1]-this.f]);var r=Ne([r,o]),s=lu(this.a,r),a=!1,r=!1,p=null;return o=null,0<s.length&&(this.L=n,s.sort(this.ba),s=s[0].aa,p=ce(n,s),o=e.ta(p),Math.sqrt(ve(i,o))<=this.f&&(r=!0,i=e.ta(s[0]),n=e.ta(s[1]),i=ve(o,i),n=ve(o,n),a=Math.sqrt(Math.min(i,n))<=this.f))&&(p=i>n?s[1]:s[0],o=e.ta(p),o=[Math.round(o[0]),Math.round(o[1])]),e=p,r&&(t.coordinate=e.slice(0,2),t.pixel=o),Xs.call(this,t)}function Vg(){var t=V(this.n);return t.length&&(P(t,this.Jh,this),this.n={}),!1}function Yg(t,e){return me(this.L,t.aa)-me(this.L,e.aa)}function Zg(e){e=t(e)?e:{};var o=nt(e);delete o.gradient,delete o.radius,delete o.blur,delete o.shadow,delete o.weight,Lp.call(this,o),this.d=null,this.L=t(e.shadow)?e.shadow:250,this.p=void 0,this.l=null,qt(this,se("gradient"),this.Pj,!1,this),this.yh(t(e.gradient)?e.gradient:fC),this.th(t(e.blur)?e.blur:15),this.Ig(t(e.radius)?e.radius:8),qt(this,[se("blur"),se("radius")],this.hg,!1,this),this.hg();var i,n=t(e.weight)?e.weight:"weight";i=p(n)?function(t){return t.get(n)}:n,this.e(d(function(e){e=i(e),e=t(e)?lt(e,0,1):1;var o=255*e|0,n=this.l[o];return t(n)||(n=[new ip({image:new us({opacity:e,src:this.p})})],this.l[o]=n),n},this)),this.set("renderOrder",null),qt(this,"render",this.hk,!1,this)}function _g(t,e){var o=e||{},i=o.document||document,n=gi("SCRIPT"),r={sh:n,oc:void 0},s=new Qd(Qg,r),a=null,p=null!=o.timeout?o.timeout:5e3;return 0<p&&(a=window.setTimeout(function(){tv(n,!0);var e=new ev(dC,"Timeout reached for loading script "+t);eg(s),tg(s,!1,e)},p),r.oc=a),n.onload=n.onreadystatechange=function(){n.readyState&&"loaded"!=n.readyState&&"complete"!=n.readyState||(tv(n,o.Bi||!1,a),eg(s),tg(s,!0,null))},n.onerror=function(){tv(n,!0,a);var e=new ev(yC,"Error while loading script "+t);eg(s),tg(s,!1,e)},ci(n,{type:"text/javascript",charset:"UTF-8",src:t}),Jg(i).appendChild(n),s}function Jg(t){var e=t.getElementsByTagName("HEAD");return e&&0!=e.length?e[0]:t.documentElement}function Qg(){if(this&&this.sh){var t=this.sh;t&&"SCRIPT"==t.tagName&&tv(t,!0,this.oc)}}function tv(t,e,i){null!=i&&sm.clearTimeout(i),t.onload=o,t.onerror=o,t.onreadystatechange=o,e&&window.setTimeout(function(){wi(t)},0)}function ev(t,e){var o="Jsloader error (code #"+t+")";e&&(o+=": "+e),m.call(this,o),this.code=t}function ov(t,e){this.a=new ry(t),this.b=e?e:"callback",this.oc=5e3}function iv(t,e,o){return function(){rv(t,!1),o&&o(e)}}function nv(t,e){return function(o){rv(t,!0),e.apply(void 0,arguments)}}function rv(t,e){sm._callbacks_[t]&&(e?delete sm._callbacks_[t]:sm._callbacks_[t]=o)}function sv(t){var e=/\{z\}/g,o=/\{x\}/g,i=/\{y\}/g,n=/\{-y\}/g;return function(r){return null===r?void 0:t.replace(e,r[0].toString()).replace(o,r[1].toString()).replace(i,r[2].toString()).replace(n,function(){return((1<<r[0])-r[2]-1).toString()})}}function av(t){return pv(k(t,sv))}function pv(t){return 1===t.length?t[0]:function(e,o,i){return null===e?void 0:t[ht((e[1]<<e[0])+e[2],t.length)](e,o,i)}}function lv(){}function hv(t,e){var o=[0,0,0];return function(i,n,r){return null===i?void 0:e(t(i,r,o),n,r)}}function uv(t){var e=[],o=/\{(\d)-(\d)\}/.exec(t)||/\{([a-z])-([a-z])\}/.exec(t);if(o){var i,n=o[2].charCodeAt(0);for(i=o[1].charCodeAt(0);i<=n;++i)e.push(t.replace(o[0],String.fromCharCode(i)))}else e.push(t);return e}function cv(e){Pn.call(this,{attributions:e.attributions,extent:e.extent,logo:e.logo,opaque:e.opaque,projection:e.projection,state:t(e.state)?e.state:void 0,tileGrid:e.tileGrid,tilePixelRatio:e.tilePixelRatio,wrapX:e.wrapX}),this.tileUrlFunction=t(e.tileUrlFunction)?e.tileUrlFunction:lv,this.crossOrigin=t(e.crossOrigin)?e.crossOrigin:null,this.tileLoadFunction=t(e.tileLoadFunction)?e.tileLoadFunction:fv,this.tileClass=t(e.tileClass)?e.tileClass:Vd}function fv(t,e){t.Ma().src=e}function yv(e){var o,i=t(e.extent)?e.extent:sw;t(e.tileSize)&&(o=he(e.tileSize)),o=Cn(i,e.maxZoom,o),yn.call(this,{minZoom:e.minZoom,origin:Je(i,"top-left"),resolutions:o,tileSize:e.tileSize})}function dv(e){cv.call(this,{crossOrigin:"anonymous",opaque:!0,projection:xo("EPSG:3857"),state:"loading",tileLoadFunction:e.tileLoadFunction,wrapX:!t(e.wrapX)||e.wrapX}),this.g=t(e.culture)?e.culture:"en-us",this.e=t(e.maxZoom)?e.maxZoom:-1;var o=new ry("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+e.imagerySet);new ov(o,"jsonp").send({include:"ImageryProviders",uriScheme:"https",key:e.key},d(this.i,this))}function gv(e){cu.call(this,{attributions:e.attributions,extent:e.extent,logo:e.logo,projection:e.projection}),this.p=void 0,this.T=t(e.distance)?e.distance:20,this.n=[],this.l=e.source,this.l.r("change",gv.prototype.ba,this)}function vv(e){if(t(e.p)){e.n.length=0;for(var o=qe(),i=e.T*e.p,n=e.l.Dc(),r={},s=0,a=n.length;s<a;s++){var p=n[s];Z(r,c(p).toString())||(p=p.Q().K(),He(p,o),De(o,i,o),p=e.l.Se(o),p=E(p,function(t){return t=c(t).toString(),!(t in r)&&(r[t]=!0)}),e.n.push(mv(p)))}}}function mv(t){for(var e=t.length,o=[0,0],i=0;i<e;i++){var n=t[i].Q().K();ue(o,n)}return e=1/e,o[0]*=e,o[1]*=e,o=new af(new Ta(o)),o.set("features",t),o}function bv(e){Dl.call(this,{projection:e.projection,resolutions:e.resolutions}),this.T=t(e.crossOrigin)?e.crossOrigin:null,this.g=t(e.displayDpi)?e.displayDpi:96,this.e=t(e.params)?e.params:{};var o;o=t(e.url)?Zd(e.url,this.e,d(this.Ul,this)):_d,this.J=o,this.a=t(e.imageLoadFunction)?e.imageLoadFunction:Ol,this.X=!t(e.hidpi)||e.hidpi,this.N=t(e.metersPerUnit)?e.metersPerUnit:1,this.n=t(e.ratio)?e.ratio:1,this.ba=!!t(e.useOverlay)&&e.useOverlay,this.c=null,this.p=0}function wv(e){var o,i,n=t(e.attributions)?e.attributions:null,r=e.imageExtent;t(e.imageSize)&&(o=to(r)/e.imageSize[1],i=[o]);var s=t(e.crossOrigin)?e.crossOrigin:null,a=t(e.imageLoadFunction)?e.imageLoadFunction:Ol;Dl.call(this,{attributions:n,logo:e.logo,projection:xo(e.projection),resolutions:i}),this.a=new zd(r,o,1,n,e.url,s,a),qt(this.a,"change",this.i,!1,this)}function xv(e){e=t(e)?e:{},Dl.call(this,{attributions:e.attributions,logo:e.logo,projection:e.projection,resolutions:e.resolutions}),this.X=t(e.crossOrigin)?e.crossOrigin:null,this.e=e.url,this.n=t(e.imageLoadFunction)?e.imageLoadFunction:Ol,this.c=e.params,this.g=!0,Tv(this),this.T=e.serverType,this.ba=!t(e.hidpi)||e.hidpi,this.a=null,this.p=[0,0],this.N=0,this.J=t(e.ratio)?e.ratio:1.5}function Sv(e,o,i,n,r,s){if(s[e.g?"CRS":"SRS"]=r.b,"STYLES"in e.c||(s.STYLES=new String("")),1!=n)switch(e.T){case"geoserver":n=90*n+.5|0,s.FORMAT_OPTIONS=t(s.FORMAT_OPTIONS)?s.FORMAT_OPTIONS+(";dpi:"+n):"dpi:"+n;break;case"mapserver":s.MAP_RESOLUTION=90*n;break;case"carmentaserver":case"qgis":s.DPI=90*n}s.WIDTH=i[0],s.HEIGHT=i[1],i=r.d;var a;return a=e.g&&"ne"==i.substr(0,2)?[o[1],o[0],o[3],o[2]]:o,s.BBOX=a.join(","),hh(ch([e.e],s))}function Tv(t){t.g=0<=T(ot(t.c,"VERSION","1.3.0"),"1.3")}function Cv(e){var o=t(e.projection)?e.projection:"EPSG:3857",i=new yv({extent:Mn(o),maxZoom:e.maxZoom,tileSize:e.tileSize});cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,logo:e.logo,projection:o,tileGrid:i,tileLoadFunction:e.tileLoadFunction,tilePixelRatio:e.tilePixelRatio,tileUrlFunction:lv,wrapX:!t(e.wrapX)||e.wrapX}),this.l=i.yb(),t(e.tileUrlFunction)?this.pa(e.tileUrlFunction):t(e.urls)?this.pa(av(e.urls)):t(e.url)&&this.e(e.url)}function Mv(e){e=t(e)?e:{};var o;o=t(e.attributions)?e.attributions:[bC],Cv.call(this,{attributions:o,crossOrigin:t(e.crossOrigin)?e.crossOrigin:"anonymous",opaque:!0,maxZoom:t(e.maxZoom)?e.maxZoom:19,tileLoadFunction:e.tileLoadFunction,url:t(e.url)?e.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:e.wrapX})}function Pv(e){e=t(e)?e:{};var o=xC[e.layer];this.g=e.layer,Cv.call(this,{attributions:o.attributions,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:o.maxZoom,opaque:!0,tileLoadFunction:e.tileLoadFunction,url:t(e.url)?e.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.g+"/{z}/{x}/{y}.jpg"})}function Ev(e){var o=e.layer.indexOf("-"),i=SC[e.layer];Cv.call(this,{attributions:CC,crossOrigin:"anonymous",maxZoom:TC[-1==o?e.layer:e.layer.slice(0,o)].maxZoom,opaque:i.opaque,tileLoadFunction:e.tileLoadFunction,url:t(e.url)?e.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+e.layer+"/{z}/{x}/{y}."+i.Ta})}function kv(e){e=t(e)?e:{};var o=t(e.params)?e.params:{};cv.call(this,{attributions:e.attributions,logo:e.logo,projection:e.projection,tileGrid:e.tileGrid,tileLoadFunction:e.tileLoadFunction,tileUrlFunction:d(this.lm,this),wrapX:!t(e.wrapX)||e.wrapX});var i=e.urls;!t(i)&&t(e.url)&&(i=uv(e.url)),this.g=null!=i?i:[],this.e=o,this.i=qe()}function Av(t,e){nn.call(this,t,2),this.c=he(e.na(t[0])),this.a={}}function Rv(t){Pn.call(this,{opaque:!1,projection:t.projection,tileGrid:t.tileGrid})}function jv(e){cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,projection:xo("EPSG:3857"),state:"loading",tileLoadFunction:e.tileLoadFunction,wrapX:!t(e.wrapX)||e.wrapX}),new ov(e.url).send(void 0,d(this.e,this))}function Lv(e){Pn.call(this,{projection:xo("EPSG:3857"),state:"loading"}),this.i=!t(e.preemptive)||e.preemptive,this.e=lv,this.g=void 0,new ov(e.url).send(void 0,d(this.om,this))}function Nv(t,e,o,i,n){nn.call(this,t,e),this.g=o,this.a=i,this.i=n,this.d=this.e=this.c=null}function Iv(t,e){if(null===t.c||null===t.e||null==t.d)return null;var o=t.c[Math.floor((1-(e[1]-t.a[1])/(t.a[3]-t.a[1]))*t.c.length)];return p(o)?(o=o.charCodeAt(Math.floor((e[0]-t.a[0])/(t.a[2]-t.a[0])*o.length)),93<=o&&o--,35<=o&&o--,o=t.e[o-32],null!=o?t.d[o]:null):null}function Dv(t,e,o,i,n){0==t.state&&!0===n?(Xt(t,"change",function(){o.call(i,Iv(this,e))},!1,t),Fv(t)):!0===n?Yn(function(){o.call(i,Iv(this,e))},t):o.call(i,Iv(t,e))}function Fv(t){0==t.state&&(t.state=1,new ov(t.g).send(void 0,d(t.Xj,t),d(t.Lj,t)))}function Ov(e){cu.call(this,{attributions:e.attributions,logo:e.logo,projection:void 0,state:"ready"}),this.T=e.format,this.n=e.tileGrid,this.p=lv,this.X=this.n.yb(),this.l={},t(e.tileUrlFunction)?(this.p=e.tileUrlFunction,this.k()):t(e.urls)?(this.p=av(e.urls),this.k()):t(e.url)&&(this.p=av(uv(e.url)),this.k())}function Bv(e,o,i,n){var r=e.l;if(e=e.n.Wb(o,i),r=r[e[0]+"/"+e[1]+"/"+e[2]],t(r))for(e=0,i=r.length;e<i;++e){var s=r[e];if(s.Q().Jb(o[0],o[1])&&n.call(void 0,s))break}}function Uv(e){e=t(e)?e:{};var o=t(e.params)?e.params:{};cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,logo:e.logo,opaque:!ot(o,"TRANSPARENT",!0),projection:e.projection,tileGrid:e.tileGrid,tileLoadFunction:e.tileLoadFunction,tileUrlFunction:d(this.tm,this),wrapX:e.wrapX});var i=e.urls;!t(i)&&t(e.url)&&(i=uv(e.url)),this.g=null!=i?i:[],this.l=t(e.gutter)?e.gutter:0,this.e=o,this.i=!0,this.n=e.serverType,this.J=!t(e.hidpi)||e.hidpi,this.p="",qv(this),this.N=qe(),$v(this)}function Gv(e,o,i,n,r,s,a){var p=e.g;if(0!=p.length){if(a.WIDTH=i[0],a.HEIGHT=i[1],a[e.i?"CRS":"SRS"]=s.b,"STYLES"in e.e||(a.STYLES=new String("")),1!=r)switch(e.n){case"geoserver":i=90*r+.5|0,a.FORMAT_OPTIONS=t(a.FORMAT_OPTIONS)?a.FORMAT_OPTIONS+(";dpi:"+i):"dpi:"+i;break;case"mapserver":a.MAP_RESOLUTION=90*r;break;case"carmentaserver":case"qgis":a.DPI=90*r}return s=s.d,e.i&&"ne"==s.substr(0,2)&&(e=n[0],n[0]=n[1],n[1]=e,e=n[2],n[2]=n[3],n[3]=e),a.BBOX=n.join(","),hh(ch([1==p.length?p[0]:p[ht((o[1]<<o[0])+o[2],p.length)]],a))}}function qv(t){var e,o,i=0,n=[];for(e=0,o=t.g.length;e<o;++e)n[i++]=t.g[e];for(var r in t.e)n[i++]=r+"-"+t.e[r];t.p=n.join("#")}function $v(t){t.i=0<=T(ot(t.e,"VERSION","1.3.0"),"1.3")}function Hv(t){this.e=t.matrixIds,yn.call(this,{origin:t.origin,origins:t.origins,resolutions:t.resolutions,tileSize:t.tileSize,tileSizes:t.tileSizes,widths:t.widths})}function Xv(t){var e,o=[],i=[],n=[],r=[],s=[];e=xo(t.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var a=e.Gd(),p="ne"==e.d.substr(0,2);return U(t.TileMatrix,function(t,e){return e.ScaleDenominator-t.ScaleDenominator}),P(t.TileMatrix,function(t){i.push(t.Identifier),p?n.push([t.TopLeftCorner[1],t.TopLeftCorner[0]]):n.push(t.TopLeftCorner),o.push(28e-5*t.ScaleDenominator/a);var e=t.TileWidth,l=t.TileHeight;r.push(e==l?e:[e,l]),s.push(t.MatrixWidth)}),new Hv({origins:n,resolutions:o,matrixIds:i,tileSizes:r,widths:s})}function Wv(e){function o(t){return t="KVP"==n?hh(ch([t],s)):t.replace(/\{(\w+?)\}/g,function(t,e){return e.toLowerCase()in s?s[e.toLowerCase()]:t}),function(e){if(null!==e){var o={TileMatrix:r.e[e[0]],TileCol:e[1],TileRow:e[2]};return rt(o,a),e=t,e="KVP"==n?hh(ch([e],o)):e.replace(/\{(\w+?)\}/g,function(t,e){return o[e]})}}}this.N=t(e.version)?e.version:"1.0.0",this.n=t(e.format)?e.format:"image/jpeg",this.e=t(e.dimensions)?e.dimensions:{},this.l="",Kv(this),this.p=e.layer,this.i=e.matrixSet,this.J=e.style;var i=e.urls;!t(i)&&t(e.url)&&(i=uv(e.url)),this.g=null!=i?i:[];var n=this.T=t(e.requestEncoding)?e.requestEncoding:"KVP",r=e.tileGrid,s={layer:this.p,style:this.J,tilematrixset:this.i};"KVP"==n&&rt(s,{Service:"WMTS",Request:"GetTile",Version:this.N,Format:this.n});var a=this.e,i=0<this.g.length?pv(k(this.g,o)):lv,p=qe(),i=hv(function(t,e,o){if(r.b.length<=t[0])return null;var i=t[1],n=-t[2]-1,s=mn(r,t,p);return e=e.G(),!ro(s,e)||ro(s,e)&&(s[0]==e[2]||s[2]==e[0]||s[1]==e[3]||s[3]==e[1])?null:Ho(t[0],i,n,o)},i);cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,logo:e.logo,projection:e.projection,tileClass:e.tileClass,tileGrid:r,tileLoadFunction:e.tileLoadFunction,tilePixelRatio:e.tilePixelRatio,tileUrlFunction:i,wrapX:!!t(e.wrapX)&&e.wrapX})}function Kv(t){var e,o=0,i=[];for(e in t.e)i[o++]=e+"-"+t.e[e];t.l=i.join("/")}function zv(e){var o=t(e)?e:o;yn.call(this,{origin:[0,0],resolutions:o.resolutions})}function Vv(e){e=t(e)?e:{};var o=e.size,i=o[0],n=o[1],r=[],s=256;switch(t(e.tierSizeCalculation)?e.tierSizeCalculation:"default"){case"default":for(;i>s||n>s;)r.push([Math.ceil(i/s),Math.ceil(n/s)]),s+=s;break;case"truncated":for(;i>s||n>s;)r.push([Math.ceil(i/s),Math.ceil(n/s)]),i>>=1,n>>=1}r.push([1,1]),r.reverse();for(var s=[1],a=[0],n=1,i=r.length;n<i;n++)s.push(1<<n),a.push(r[n-1][0]*r[n-1][1]+a[n-1]);s.reverse();var s=new zv({resolutions:s}),p=e.url,o=hv(s.yb({extent:[0,0,o[0],o[1]]}),function(t){if(null!==t){var e=t[0],o=t[1];return t=t[2],p+"TileGroup"+((o+t*r[e][0]+a[e])/256|0)+"/"+e+"-"+o+"-"+t+".jpg"}});cv.call(this,{attributions:e.attributions,crossOrigin:e.crossOrigin,logo:e.logo,tileClass:Yv,tileGrid:s,tileUrlFunction:o})}function Yv(t,e,o,i,n){Vd.call(this,t,e,o,i,n),this.d={}}function Zv(e){e=t(e)?e:{},this.a=t(e.initialSize)?e.initialSize:256,this.c=t(e.maxSize)?e.maxSize:t(om)?om:2048,this.b=t(e.space)?e.space:1,this.e=[new Jv(this.a,this.b)],this.d=this.a,this.f=[new Jv(this.d,this.b)]}function _v(t,e,o,i,n,r,s){var a,p,l,h=e?t.f:t.e;for(p=0,l=h.length;p<l;++p){if(a=h[p],a=a.add(o,i,n,r,s),null!==a)return a;null===a&&p===l-1&&(e?(a=Math.min(2*t.d,t.c),t.d=a):(a=Math.min(2*t.a,t.c),t.a=a),a=new Jv(a,t.b),h.push(a),++l)}}function Jv(t,e){this.b=e,this.a=[{x:0,y:0,width:t,height:t}],this.d={},this.c=gi("CANVAS"),this.c.width=t,this.c.height=t,this.e=this.c.getContext("2d")}function Qv(t,e,o,i){e=[e,1],0<o.width&&0<o.height&&e.push(o),0<i.width&&0<i.height&&e.push(i),t.a.splice.apply(t.a,e)}function tm(e){this.o=this.d=this.e=null,this.i=t(e.fill)?e.fill:null,this.J=[0,0],this.b=e.points,this.c=t(e.radius)?e.radius:e.radius1,this.f=t(e.radius2)?e.radius2:this.c,this.g=t(e.angle)?e.angle:0,this.a=t(e.stroke)?e.stroke:null,this.H=this.L=this.p=null;var o,i=e.atlasManager,n="",r="",s=0,a=null,p=0;null!==this.a&&(o=ni(this.a.b),p=this.a.a,t(p)||(p=1),a=this.a.c,Eb||(a=null),r=this.a.e,t(r)||(r="round"),n=this.a.d,t(n)||(n="round"),s=this.a.f,t(s)||(s=10));var l=2*(this.c+p)+1,n={strokeStyle:o,md:p,size:l,lineCap:n,lineDash:a,lineJoin:r,miterLimit:s};if(t(i)){var h,l=Math.round(l),r=null===this.i;r&&(h=d(this.Tg,this,n)),s=this.nb(),h=i.add(s,l,l,d(this.Ug,this,n),h),this.d=h.image,this.J=[h.offsetX,h.offsetY],i=h.image.width,this.o=r?h.ig:this.d}else this.d=gi("CANVAS"),this.d.height=l,this.d.width=l,i=l=this.d.width,h=this.d.getContext("2d"),this.Ug(n,h,0,0),null===this.i?(h=this.o=gi("CANVAS"),h.height=n.size,h.width=n.size,h=h.getContext("2d"),this.Tg(n,h,0,0)):this.o=this.d;this.p=[l/2,l/2],this.L=[l,l],this.H=[i,i],hs.call(this,{opacity:1,rotateWithView:!1,rotation:t(e.rotation)?e.rotation:0,scale:1,snapToPixel:!t(e.snapToPixel)||e.snapToPixel})}var em,om,im,nm={},rm=rm||{},sm=this,am="closure_uid_"+(1e9*Math.random()>>>0),pm=0,lm=Date.now||function(){return+new Date};v(m,Error),m.prototype.name="CustomError";var hm,um,cm=String.prototype.trim?function(t){return t.trim()}:function(t){return t.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},fm=/&/g,ym=/</g,dm=/>/g,gm=/"/g,vm=/'/g,mm=/\x00/g,bm=/[\x00&<>"']/,wm=Array.prototype;t:{var xm=sm.navigator;if(xm){var Sm=xm.userAgent;if(Sm){um=Sm;break t}}um=""}var Tm="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "),Cm=X("Opera")||X("OPR"),Mm=X("Trident")||X("MSIE"),Pm=X("Gecko")&&-1==um.toLowerCase().indexOf("webkit")&&!(X("Trident")||X("MSIE")),Em=-1!=um.toLowerCase().indexOf("webkit"),km=X("Macintosh"),Am=X("Windows"),Rm=X("Linux")||X("CrOS"),jm=function(){var t,e="";return Cm&&sm.opera?(e=sm.opera.version,h(e)?e():e):(Pm?t=/rv\:([^\);]+)(\)|;)/:Mm?t=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:Em&&(t=/WebKit\/(\S+)/),t&&(e=(e=t.exec(um))?e[1]:""),Mm&&(t=at(),t>parseFloat(e))?String(t):e)}(),Lm={},Nm=sm.document,Im=Nm&&Mm?at()||("CSS1Compat"==Nm.compatMode?parseInt(jm,10):5):void 0,Dm=Mm&&!pt("9.0")&&""!==jm,Fm=!Mm||Mm&&9<=Im,Om=!Mm||Mm&&9<=Im,Bm=Mm&&!pt("9");!Em||pt("528"),Pm&&pt("1.9b")||Mm&&pt("8")||Cm&&pt("9.5")||Em&&pt("528"),Pm&&!pt("8")||Mm&&pt("9");var Um=0,Gm={};Tt.prototype.U=!1,Tt.prototype.Yc=function(){if(!this.U&&(this.U=!0,this.O(),0!=Um)){var t=c(this);delete Gm[t]}},Tt.prototype.O=function(){if(this.V)for(;this.V.length;)this.V.shift()()},Pt.prototype.fb=function(){this.f=!0},Pt.prototype.preventDefault=function(){this.rh=!1};var qm=Mm?"focusout":"DOMFocusOut";At[" "]=o,v(Rt,Pt);var $m=[1,4,2];em=Rt.prototype,em.fb=function(){Rt.S.fb.call(this),this.b.stopPropagation?this.b.stopPropagation():this.b.cancelBubble=!0},em.preventDefault=function(){Rt.S.preventDefault.call(this);var t=this.b;if(t.preventDefault);else if(t.returnValue=!1,Bm)try{(t.ctrlKey||112<=t.keyCode&&123>=t.keyCode)&&(t.keyCode=-1)}catch(e){}},em.Qi=function(){return this.b},em.Zf=function(){return Em||void 0!==this.b.offsetX?this.b.offsetX:this.b.layerX},em.bo=function(t){Object.defineProperties(this,{offsetX:{writable:!0,enumerable:!0,configurable:!0,value:t}})},em.$f=function(){return Em||void 0!==this.b.offsetY?this.b.offsetY:this.b.layerY},em.co=function(t){Object.defineProperties(this,{offsetY:{writable:!0,enumerable:!0,configurable:!0,value:t}})};var Hm="closure_listenable_"+(1e6*Math.random()|0),Xm=0;Ft.prototype.add=function(t,e,o,i,n){var r=t.toString();t=this.b[r],t||(t=this.b[r]=[],this.a++);var s=Gt(t,e,i,n);return-1<s?(e=t[s],o||(e.vd=!1)):(e=new It(e,this.src,r,(!!i),n),e.vd=o,t.push(e)),e},Ft.prototype.remove=function(t,e,o,i){if(t=t.toString(),!(t in this.b))return!1;var n=this.b[t];return e=Gt(n,e,o,i),-1<e&&(Dt(n[e]),wm.splice.call(n,e,1),0==n.length&&(delete this.b[t],this.a--),!0)};var Wm="closure_lm_"+(1e6*Math.random()|0),Km={},zm=0,Vm="__closure_events_fn_"+(1e9*Math.random()>>>0);v(Qt,Tt),Qt.prototype[Hm]=!0,em=Qt.prototype,em.addEventListener=function(t,e,o,i){qt(this,t,e,o,i)},em.removeEventListener=function(t,e,o,i){Wt(this,t,e,o,i)},em.dispatchEvent=function(t){var e,o=this.sa;if(o)for(e=[];o;o=o.sa)e.push(o);var o=this.rc,i=t.type||t;if(p(t))t=new Pt(t,o);else if(t instanceof Pt)t.target=t.target||o;else{var n=t;t=new Pt(i,o),rt(t,n)}var r,n=!0;if(e)for(var s=e.length-1;!t.f&&0<=s;s--)r=t.c=e[s],
+n=te(r,i,!0,t)&&n;if(t.f||(r=t.c=o,n=te(r,i,!0,t)&&n,t.f||(n=te(r,i,!1,t)&&n)),e)for(s=0;!t.f&&s<e.length;s++)r=t.c=e[s],n=te(r,i,!1,t)&&n;return n},em.O=function(){if(Qt.S.O.call(this),this.ab){var t,e=this.ab,o=0;for(t in e.b){for(var i=e.b[t],n=0;n<i.length;n++)++o,Dt(i[n]);delete e.b[t],e.a--}}this.sa=null},em.Ka=function(t,e,o,i){return this.ab.add(String(t),e,!1,o,i)},em.wf=function(t,e,o,i){return this.ab.remove(String(t),e,o,i)},v(oe,Qt),em=oe.prototype,em.k=function(){++this.b,this.dispatchEvent("change")},em.v=function(){return this.b},em.r=function(t,e,o){return qt(this,t,e,!1,o)},em.A=function(t,e,o){return Xt(this,t,e,!1,o)},em.u=function(t,e,o){Wt(this,t,e,!1,o)},em.B=ie,v(ne,Pt),v(re,oe);var Ym={};if(em=re.prototype,em.get=function(t){var e;return this.q.hasOwnProperty(t)&&(e=this.q[t]),e},em.C=function(){return Y(this.q)},em.D=function(){var t,e={};for(t in this.q)e[t]=this.q[t];return e},em.set=function(t,e){var o=this.q[t];this.q[t]=e,ae(this,t,o)},em.t=function(t){for(var e in t)this.set(e,t[e])},em.I=function(t){if(t in this.q){var e=this.q[t];delete this.q[t],ae(this,t,e)}},we.prototype.b=4,we.prototype.set=function(t,e){e=e||0;for(var o=0;o<t.length&&e+o<this.length;o++)this[e+o]=t[o]},we.prototype.toString=Array.prototype.join,"undefined"==typeof Float32Array&&(we.BYTES_PER_ELEMENT=4,we.prototype.BYTES_PER_ELEMENT=we.prototype.b,we.prototype.set=we.prototype.set,we.prototype.toString=we.prototype.toString,e("Float32Array",we,void 0)),xe.prototype.b=8,xe.prototype.set=function(t,e){e=e||0;for(var o=0;o<t.length&&e+o<this.length;o++)this[e+o]=t[o]},xe.prototype.toString=Array.prototype.join,"undefined"==typeof Float64Array){try{xe.BYTES_PER_ELEMENT=8}catch(Zm){}xe.prototype.BYTES_PER_ELEMENT=xe.prototype.b,xe.prototype.set=xe.prototype.set,xe.prototype.toString=xe.prototype.toString,e("Float64Array",xe,void 0)}new Float64Array(3),new Float64Array(3),new Float64Array(4),new Float64Array(4),new Float64Array(4),new Float64Array(16),lo.prototype.a=function(t){for(var e=0,o=t.length,i=t[o-1][0],n=t[o-1][1],r=0;r<o;r++)var s=t[r][0],a=t[r][1],e=e+ct(s-i)*(2+Math.sin(ct(n))+Math.sin(ct(a))),i=s,n=a;return e*this.radius*this.radius/2},lo.prototype.b=function(t,e){var o=ct(t[1]),i=ct(e[1]),n=(i-o)/2,r=ct(e[0]-t[0])/2,o=Math.sin(n)*Math.sin(n)+Math.sin(r)*Math.sin(r)*Math.cos(o)*Math.cos(i);return 2*this.radius*Math.atan2(Math.sqrt(o),Math.sqrt(1-o))},lo.prototype.offset=function(t,e,o){var i=ct(t[1]);e/=this.radius;var n=Math.asin(Math.sin(i)*Math.cos(e)+Math.cos(i)*Math.sin(e)*Math.cos(o));return[180*(ct(t[0])+Math.atan2(Math.sin(o)*Math.sin(e)*Math.cos(i),Math.cos(e)-Math.sin(i)*Math.sin(n)))/Math.PI,180*n/Math.PI]};var _m=new lo(6370997),Jm={};Jm.degrees=2*Math.PI*_m.radius/360,Jm.ft=.3048,Jm.m=1,Jm["us-ft"]=1200/3937,em=ho.prototype,em.Ri=function(){return this.b},em.G=function(){return this.f},em.Ll=function(){return this.a},em.Gd=function(){return Jm[this.a]},em.Cj=function(){return this.g},em.Ml=function(){return this.e},em.Yn=function(t){this.c=(this.e=t)&&null!==this.f},em.Nl=function(t){this.f=t,this.c=this.e&&null!==t},em.lo=function(t){this.g=t},em.Xn=function(t){this.q=t},em.rj=function(e,o){if("degrees"==this.a)return e;var i=Co(this,xo("EPSG:4326")),n=[o[0]-e/2,o[1],o[0]+e/2,o[1],o[0],o[1]-e/2,o[0],o[1]+e/2],n=i(n,n,2),i=(_m.b(n.slice(0,2),n.slice(2,4))+_m.b(n.slice(4,6),n.slice(6,8)))/2,n=this.Gd();return t(n)&&(i/=n),i},em.getPointResolution=function(t,e){return this.q(t,e)};var Qm={},tb={};v(Ao,re),em=Ao.prototype,em.xd=function(t){return this.f.center(t)},em.constrainResolution=function(t,e,o){return this.f.resolution(t,e||0,o||0)},em.constrainRotation=function(t,e){return this.f.rotation(t,e||0)},em.Ca=function(){return this.get("center")},em.Pc=function(t){var e=this.Ca(),o=this.ya();return[e[0]-o*t[0]/2,e[1]-o*t[1]/2,e[0]+o*t[0]/2,e[1]+o*t[1]/2]},em.dl=function(){return this.e},em.ya=function(){return this.get("resolution")},em.Da=function(){return this.get("rotation")},em.Ej=function(){var e,o=this.ya();if(t(o)){var i,n=0;do{if(i=this.constrainResolution(this.a,n),i==o){e=n;break}++n}while(i>this.g)}return t(e)?this.d+e:e},em.Me=function(t,e){if(!so(t)){this.Na(_e(t));var o=Ro(t,e),i=this.constrainResolution(o,0,0);i<o&&(i=this.constrainResolution(i,-1,0)),this.tb(i)}},em.Fi=function(e,o,i){var n=t(i)?i:{};i=t(n.padding)?n.padding:[0,0,0,0];var r,s=!t(n.constrainResolution)||n.constrainResolution,a=!!t(n.nearest)&&n.nearest;r=t(n.minResolution)?n.minResolution:t(n.maxZoom)?this.constrainResolution(this.a,n.maxZoom-this.d,0):0;var p=e.j,l=this.Da(),n=Math.cos(-l),l=Math.sin(-l),h=1/0,u=1/0,c=-(1/0),f=-(1/0);e=e.s;for(var y=0,d=p.length;y<d;y+=e)var g=p[y]*n-p[y+1]*l,v=p[y]*l+p[y+1]*n,h=Math.min(h,g),u=Math.min(u,v),c=Math.max(c,g),f=Math.max(f,v);o=Ro([h,u,c,f],[o[0]-i[1]-i[3],o[1]-i[0]-i[2]]),o=isNaN(o)?r:Math.max(o,r),s&&(r=this.constrainResolution(o,0,0),!a&&r<o&&(r=this.constrainResolution(r,-1,0)),o=r),this.tb(o),l=-l,a=(h+c)/2+(i[1]-i[3])/2*o,i=(u+f)/2+(i[0]-i[2])/2*o,this.Na([a*n-i*l,i*n+a*l])},em.Ai=function(t,e,o){var i=this.Da(),n=Math.cos(-i),i=Math.sin(-i),r=t[0]*n-t[1]*i;t=t[1]*n+t[0]*i;var s=this.ya(),r=r+(e[0]/2-o[0])*s;t+=(o[1]-e[1]/2)*s,i=-i,this.Na([r*n-t*i,t*n+r*i])},em.rotate=function(e,o){if(t(o)){var i,n=this.Ca();t(n)&&(i=[n[0]-o[0],n[1]-o[1]],ge(i,e-this.Da()),ue(i,o)),this.Na(i)}this.be(e)},em.Na=function(t){this.set("center",t)},em.tb=function(t){this.set("resolution",t)},em.be=function(t){this.set("rotation",t)},em.no=function(t){t=this.constrainResolution(this.a,t-this.d,0),this.tb(t)},zo.prototype.contains=function(t){return Yo(this,t[1],t[2])},Qo.prototype.c=function(){return this.a},v(ti,Pt),v(ei,re),em=ei.prototype,em.clear=function(){for(;0<this.Ib();)this.pop()},em.af=function(t){var e,o;for(e=0,o=t.length;e<o;++e)this.push(t[e]);return this},em.forEach=function(t,e){P(this.a,t,e)},em.Hk=function(){return this.a},em.item=function(t){return this.a[t]},em.Ib=function(){return this.get("length")},em.Td=function(t,e){O(this.a,t,0,e),oi(this),this.dispatchEvent(new ti("add",e,this))},em.pop=function(){return this.tf(this.Ib()-1)},em.push=function(t){var e=this.a.length;return this.Td(e,t),e},em.remove=function(t){var e,o,i=this.a;for(e=0,o=i.length;e<o;++e)if(i[e]===t)return this.tf(e)},em.tf=function(t){var e=this.a[t];return wm.splice.call(this.a,t,1),oi(this),this.dispatchEvent(new ti("remove",e,this)),e},em.Un=function(t,e){var o=this.Ib();if(t<o)o=this.a[t],this.a[t]=e,this.dispatchEvent(new ti("remove",o,this)),this.dispatchEvent(new ti("add",e,this));else{for(;o<t;++o)this.Td(o,void 0);this.Td(t,e)}};var eb=/^#(?:[0-9a-f]{3}){1,2}$/i,ob=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,ib=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i,nb=function(){var t={},e=0;return function(o){var i;if(t.hasOwnProperty(o))i=t[o];else{if(1024<=e){i=0;for(var n in t)0===(3&i++)&&(delete t[n],--e)}var r,s;eb.exec(o)?(s=3==o.length-1?1:2,i=parseInt(o.substr(1+0*s,s),16),n=parseInt(o.substr(1+1*s,s),16),r=parseInt(o.substr(1+2*s,s),16),1==s&&(i=(i<<4)+i,n=(n<<4)+n,r=(r<<4)+r),i=[i,n,r,1]):(s=ib.exec(o))?(i=Number(s[1]),n=Number(s[2]),r=Number(s[3]),s=Number(s[4]),i=[i,n,r,s],i=ri(i,i)):(s=ob.exec(o))?(i=Number(s[1]),n=Number(s[2]),r=Number(s[3]),i=[i,n,r,1],i=ri(i,i)):i=void 0,t[o]=i,++e}return i}}(),rb=!Mm||Mm&&9<=Im;!Pm&&!Mm||Mm&&Mm&&9<=Im||Pm&&pt("1.9.1"),Mm&&pt("9"),st("area base br col command embed hr img input keygen link meta param source track wbr".split(" ")),em=pi.prototype,em.clone=function(){return new pi(this.x,this.y)},em.ceil=function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},em.floor=function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},em.round=function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},em.scale=function(t,e){var o=l(e)?e:t;return this.x*=t,this.y*=o,this},em=li.prototype,em.clone=function(){return new li(this.width,this.height)},em.la=function(){return!(this.width*this.height)},em.ceil=function(){return this.width=Math.ceil(this.width),this.height=Math.ceil(this.height),this},em.floor=function(){return this.width=Math.floor(this.width),this.height=Math.floor(this.height),this},em.round=function(){return this.width=Math.round(this.width),this.height=Math.round(this.height),this},em.scale=function(t,e){var o=l(e)?e:t;return this.width*=t,this.height*=o,this};var sb={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};Pi.prototype.appendChild=function(t,e){t.appendChild(e)},Pi.prototype.contains=Ti,em=Ii.prototype,em.clone=function(){return new Ii(this.top,this.right,this.bottom,this.left)},em.contains=function(t){return!(!this||!t)&&(t instanceof Ii?t.left>=this.left&&t.right<=this.right&&t.top>=this.top&&t.bottom<=this.bottom:t.x>=this.left&&t.x<=this.right&&t.y>=this.top&&t.y<=this.bottom)},em.ceil=function(){return this.top=Math.ceil(this.top),this.right=Math.ceil(this.right),this.bottom=Math.ceil(this.bottom),this.left=Math.ceil(this.left),this},em.floor=function(){return this.top=Math.floor(this.top),this.right=Math.floor(this.right),this.bottom=Math.floor(this.bottom),this.left=Math.floor(this.left),this},em.round=function(){return this.top=Math.round(this.top),this.right=Math.round(this.right),this.bottom=Math.round(this.bottom),this.left=Math.round(this.left),this},em.scale=function(t,e){var o=l(e)?e:t;return this.left*=t,this.right*=t,this.top*=o,this.bottom*=o,this},em=Di.prototype,em.clone=function(){return new Di(this.left,this.top,this.width,this.height)},em.contains=function(t){return t instanceof Di?this.left<=t.left&&this.left+this.width>=t.left+t.width&&this.top<=t.top&&this.top+this.height>=t.top+t.height:t.x>=this.left&&t.x<=this.left+this.width&&t.y>=this.top&&t.y<=this.top+this.height},em.distance=function(t){return Math.sqrt(Fi(this,t))},em.ceil=function(){return this.left=Math.ceil(this.left),this.top=Math.ceil(this.top),this.width=Math.ceil(this.width),this.height=Math.ceil(this.height),this},em.floor=function(){return this.left=Math.floor(this.left),this.top=Math.floor(this.top),this.width=Math.floor(this.width),this.height=Math.floor(this.height),this},em.round=function(){return this.left=Math.round(this.left),this.top=Math.round(this.top),this.width=Math.round(this.width),this.height=Math.round(this.height),this},em.scale=function(t,e){var o=l(e)?e:t;return this.left*=t,this.width*=t,this.top*=o,this.height*=o,this};var ab={thin:2,medium:4,thick:6};v(_i,Pt),v(Ji,re),Ji.prototype.O=function(){wi(this.element),Ji.S.O.call(this)},Ji.prototype.e=function(){return this.a},Ji.prototype.setMap=function(t){null===this.a||wi(this.element),0!=this.l.length&&(P(this.l,Kt),this.l.length=0),this.a=t,null!==this.a&&((null===this.L?t.p:this.L).appendChild(this.element),this.render!==o&&this.l.push(qt(t,"postrender",this.render,!1,this)),t.render())},Ji.prototype.c=function(t){this.L=ui(t)},em=Qi.prototype,em.clear=function(){this.c=0,this.d={},this.a=this.b=null},em.forEach=function(t,e){for(var o=this.b;null!==o;)t.call(e,o.qc,o.Wd,this),o=o.Wa},em.get=function(t){return t=this.d[t],t===this.a?t.qc:(t===this.b?(this.b=this.b.Wa,this.b.Nb=null):(t.Wa.Nb=t.Nb,t.Nb.Wa=t.Wa),t.Wa=null,t.Nb=this.a,this.a=this.a.Wa=t,t.qc)},em.Tb=function(){return this.c},em.C=function(){var t,e=Array(this.c),o=0;for(t=this.a;null!==t;t=t.Nb)e[o++]=t.Wd;return e},em.cb=function(){var t,e=Array(this.c),o=0;for(t=this.a;null!==t;t=t.Nb)e[o++]=t.qc;return e},em.pop=function(){var t=this.b;return delete this.d[t.Wd],null!==t.Wa&&(t.Wa.Nb=null),this.b=t.Wa,null===this.b&&(this.a=null),--this.c,t.qc},em.set=function(t,e){var o={Wd:t,Wa:null,Nb:this.a,qc:e};null===this.a?this.b=o:this.a.Wa=o,this.a=o,this.d[t]=o,++this.c},v(en,Qi),v(nn,Qt),nn.prototype.gb=function(){return c(this).toString()},nn.prototype.f=function(){return this.b},v(sn,re),em=sn.prototype,em.ge=o,em.ea=function(){return this.d},em.ca=function(){return this.L},em.fa=function(){return this.f},em.ga=function(){return this.o};var pb=ln(!1),lb=ln(!0),hb=ln(null),ub=[0,0,0];em=yn.prototype,em.yb=function(){return hn},em.Ad=function(t,e,o,i,n){for(n=mn(this,t,n),t=t[0]-1;t>=this.minZoom;){if(e.call(o,t,gn(this,n,t,i)))return!0;--t}return!1},em.Fd=function(){return this.maxZoom},em.Hd=function(){return this.minZoom},em.Mb=function(t){return null===this.f?this.i[t]:this.f},em.ma=function(t){return this.b[t]},em.ne=function(){return this.b},em.Ld=function(t,e,o){return t[0]<this.maxZoom?(o=mn(this,t,o),gn(this,o,t[0]+1,e)):null},em.Wb=function(t,e,o){return bn(this,t[0],t[1],e,!1,o)},em.cd=function(t,e,o){return bn(this,t[0],t[1],this.ma(e),!1,o)},em.na=function(t){return null===this.g?this.c[t]:this.g},v(Pn,sn),em=Pn.prototype,em.Cd=function(){return 0},em.bb=Xo,em.ua=function(){return this.tileGrid},em.Xb=function(t,e,o){return e=kn(this,o),le(he(e.na(t),this.c),this.ba,this.c)},em.yf=o,v(An,Pt),v(Rn,Ji),em=Rn.prototype,em.gl=function(t){t.preventDefault(),Ln(this)},em.fl=function(){return this.g},em.il=function(t){this.g!==t&&(this.g=t,Ni(this.element,"ol-uncollapsible"),!t&&this.d&&Ln(this))},em.hl=function(t){this.g&&this.d!==t&&Ln(this)},em.el=function(){return this.d},v(Nn,Ji),Nn.prototype.o=function(e){e.preventDefault(),e=this.a;var o=e.R();if(null!==o){for(var i=o.Da();i<-Math.PI;)i+=2*Math.PI;for(;i>Math.PI;)i-=2*Math.PI;t(i)&&(0<this.g&&e.Ha(qo({rotation:i,duration:this.g,easing:Fo})),o.be(0))}},v(Dn,Ji),Dn.prototype.f=function(e,o){o.preventDefault();var i=this.a,n=i.R();if(null!==n){var r=n.ya();t(r)&&(0<this.d&&i.Ha($o({resolution:r,duration:this.d,easing:Fo})),i=n.constrainResolution(r,e),n.tb(i))}};var cb=Em?"webkitfullscreenchange":Pm?"mozfullscreenchange":Mm?"MSFullscreenChange":"fullscreenchange";v(Gn,Ji),Gn.prototype.n=function(t){t.preventDefault(),On()&&(t=this.a,null!==t&&(Un()?(t=hi().b,t.webkitCancelFullScreen?t.webkitCancelFullScreen():t.mozCancelFullScreen?t.mozCancelFullScreen():t.msExitFullscreen?t.msExitFullscreen():t.exitFullscreen&&t.exitFullscreen()):(t=t.df(),t=ui(t),this.o?t.mozRequestFullScreenWithKeys?t.mozRequestFullScreenWithKeys():t.webkitRequestFullscreen?t.webkitRequestFullscreen():Bn(t):Bn(t))))},Gn.prototype.i=function(){var t=this.d+"-true",e=this.d+"-false",o=Si(this.element),i=this.a;Un()?(Ri(o,e)&&(Li(o,e),ji(o,t)),xi(this.g,this.f)):(Ri(o,t)&&(Li(o,t),ji(o,e)),xi(this.f,this.g)),null===i||i.Kc()},v(qn,Ji),em=qn.prototype,em.jl=function(){this.f=null},em.Uf=function(){return this.get("coordinateFormat")},em.xg=function(){return this.get("projection")},em.$j=function(t){this.g=this.a.Bd(t.b),Hn(this,this.g)},em.ak=function(){Hn(this,null),this.g=null},em.setMap=function(t){qn.S.setMap.call(this,t),null!==t&&(t=t.a,this.l.push(qt(t,"mousemove",this.$j,!1,this),qt(t,"mouseout",this.ak,!1,this)))},em.vh=function(t){this.set("coordinateFormat",t)},em.yg=function(t){this.set("projection",t)},v(Xn,Tt),em=Xn.prototype,em.$=null,em.zf=!1,em.start=function(){Wn(this),this.zf=!1;var t=Kn(this),e=zn(this);t&&!e&&this.b.mozRequestAnimationFrame?(this.$=qt(this.b,"MozBeforePaint",this.a),this.b.mozRequestAnimationFrame(null),this.zf=!0):this.$=t&&e?t.call(this.b,this.a):this.b.setTimeout(un(this.a),20)},em.Pf=function(){this.zf&&this.$&&Kt(this.$),this.$=null,this.d.call(this.c,lm())},em.O=function(){Wn(this),Xn.S.O.call(this)};var fb,yb=hn;em=Qn.prototype,em.Tb=function(){return this.c},em.cb=function(){tr(this);for(var t=[],e=0;e<this.b.length;e++)t.push(this.a[this.b[e]]);return t},em.C=function(){return tr(this),this.b.concat()},em.la=function(){return 0==this.c},em.clear=function(){this.a={},this.c=this.b.length=0},em.remove=function(t){return!!er(this.a,t)&&(delete this.a[t],this.c--,this.b.length>2*this.c&&tr(this),!0)},em.get=function(t,e){return er(this.a,t)?this.a[t]:e},em.set=function(t,e){er(this.a,t)||(this.c++,this.b.push(t)),this.a[t]=e},em.forEach=function(t,e){for(var o=this.C(),i=0;i<o.length;i++){var n=o[i],r=this.get(n);t.call(e,r,n,this)}},em.clone=function(){return new Qn(this)},new or,or.prototype.set=function(t){this.b=t},or.prototype.get=function(){return this.b},v(ir,Qt),em=ir.prototype,em.Md=null,em.pd=null,em.Nd=null,em.O=function(){ir.S.O.call(this),this.Md&&(Kt(this.Md),this.Md=null),this.Nd=this.pd=null},em.ik=function(){var t=fi(this.pd||window),e=this.Nd;t==e||t&&e&&t.width==e.width&&t.height==e.height||(this.Nd=t,this.dispatchEvent("resize"))},v(pr,Qt),em=pr.prototype,em.Z=null,em.Ud=null,em.Ye=null,em.Vd=null,em.Ja=-1,em.Hb=-1,em.Ge=!1;var db={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},gb={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},vb=Mm||Em&&pt("525"),mb=km&&Pm;pr.prototype.b=function(t){Em&&(17==this.Ja&&!t.i||18==this.Ja&&!t.a||km&&91==this.Ja&&!t.l)&&(this.Hb=this.Ja=-1),-1==this.Ja&&(t.i&&17!=t.e?this.Ja=17:t.a&&18!=t.e?this.Ja=18:t.l&&91!=t.e&&(this.Ja=91)),vb&&!nr(t.e,this.Ja,t.d,t.i,t.a)?this.handleEvent(t):(this.Hb=sr(t.e),mb&&(this.Ge=t.a))},pr.prototype.a=function(t){this.Hb=this.Ja=-1,this.Ge=t.a},pr.prototype.handleEvent=function(t){var e,o,i=t.b,n=i.altKey;Mm&&"keypress"==t.type?(e=this.Hb,o=13!=e&&27!=e?i.keyCode:0):Em&&"keypress"==t.type?(e=this.Hb,o=0<=i.charCode&&63232>i.charCode&&rr(e)?i.charCode:0):Cm?(e=this.Hb,o=rr(e)?i.keyCode:0):(e=i.keyCode||this.Hb,o=i.charCode||0,mb&&(n=this.Ge),km&&63==o&&224==e&&(e=191));var r=e=sr(e),s=i.keyIdentifier;e?63232<=e&&e in db?r=db[e]:25==e&&t.d&&(r=9):s&&s in gb&&(r=gb[s]),this.Ja=r,t=new ur(r,o,0,i),t.a=n,this.dispatchEvent(t)},pr.prototype.O=function(){pr.S.O.call(this),hr(this)},v(ur,Rt),v(cr,Qt),cr.prototype.handleEvent=function(e){var o=0,i=0,n=0;e=e.b,"mousewheel"==e.type?(i=1,(Mm||Em&&(Am||pt("532.0")))&&(i=40),n=fr(-e.wheelDelta,i),t(e.wheelDeltaX)?(o=fr(-e.wheelDeltaX,i),i=fr(-e.wheelDeltaY,i)):i=n):(n=e.detail,100<n?n=3:-100>n&&(n=-3),t(e.axis)&&e.axis===e.HORIZONTAL_AXIS?o=n:i=n),l(this.a)&&lt(o,-this.a,this.a),l(this.c)&&(i=lt(i,-this.c,this.c)),o=new yr(n,e,0,i),this.dispatchEvent(o)},cr.prototype.O=function(){cr.S.O.call(this),Kt(this.b),this.b=null},v(yr,Rt),v(dr,Pt);var bb=!1;try{bb=1===new MouseEvent("click",{buttons:1}).buttons}catch(wb){}var xb,Sb,Tb=function(){var e;return function(){if(!t(e))if(sm.getComputedStyle){var o,i=gi("P"),n={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(i);for(var r in n)r in i.style&&(i.style[r]="translate(1px,1px)",o=sm.getComputedStyle(i).getPropertyValue(n[r]));wi(i),e=o&&"none"!==o}else e=!1;return e}}(),Cb=function(){var e;return function(){if(!t(e))if(sm.getComputedStyle){var o,i=gi("P"),n={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(i);for(var r in n)r in i.style&&(i.style[r]="translate3d(1px,1px,1px)",o=sm.getComputedStyle(i).getPropertyValue(n[r]));wi(i),e=o&&"none"!==o}else e=!1;return e}}(),Mb=["experimental-webgl","webgl","webkit-3d","moz-webgl"],Pb=sm.devicePixelRatio||1,Eb=!1,kb=function(){if(!("HTMLCanvasElement"in sm))return!1;try{var e=mr();return null!==e&&(t(e.setLineDash)&&(Eb=!0),!0)}catch(o){return!1}}(),Ab="DeviceOrientationEvent"in sm,Rb="geolocation"in sm.navigator,jb="ontouchstart"in sm,Lb="PointerEvent"in sm,Nb=!!sm.navigator.msPointerEnabled,Ib=!1,Db=[];if("WebGLRenderingContext"in sm)try{var Fb=xr(gi("CANVAS"),{Ei:!0});null!==Fb&&(Ib=!0,Sb=Fb.getParameter(Fb.MAX_TEXTURE_SIZE),Db=Fb.getSupportedExtensions())}catch(Ob){}xb=Ib,im=Db,om=Sb,v(Tr,Sr),em=Tr.prototype,em.tk=function(t){if(!Cr(this,t)){1..toString()in this.a&&this.cancel(t);var e=Mr(t);this.a[1..toString()]=t,Gr(this.b,Ub,e,t)}},em.uk=function(t){if(!Cr(this,t)){var e=Mr(t);Gr(this.b,Bb,e,t)}},em.xk=function(t){if(!Cr(this,t)){var e=this.a[1..toString()];e&&e.button===t.button&&(e=Mr(t),Gr(this.b,Gb,e,t),et(this.a,1..toString()))}},em.wk=function(t){if(!Cr(this,t)){var e=Mr(t);Ur(this.b,e,t)}},em.vk=function(t){if(!Cr(this,t)){var e=Mr(t);Br(this.b,e,t)}},em.cancel=function(t){var e=Mr(t);this.b.cancel(e,t),et(this.a,1..toString())},v(Pr,Sr),em=Pr.prototype,em.Ck=function(t){this.a[t.b.pointerId]=t;var e=Er(this,t);Gr(this.b,Ub,e,t)},em.Dk=function(t){var e=Er(this,t);Gr(this.b,Bb,e,t)},em.Gk=function(t){var e=Er(this,t);Gr(this.b,Gb,e,t),et(this.a,t.b.pointerId)},em.Ek=function(t){var e=Er(this,t);Br(this.b,e,t)},em.Fk=function(t){var e=Er(this,t);Ur(this.b,e,t)},em.Bk=function(t){var e=Er(this,t);this.b.cancel(e,t),et(this.a,t.b.pointerId)},em.Ak=function(t){this.b.dispatchEvent(new dr("lostpointercapture",t,t.b))},em.zk=function(t){this.b.dispatchEvent(new dr("gotpointercapture",t,t.b))},v(kr,Sr),em=kr.prototype,em.nn=function(t){qr(this.b,t)},em.pn=function(t){qr(this.b,t)},em.sn=function(t){qr(this.b,t)},em.qn=function(t){qr(this.b,t)},em.rn=function(t){qr(this.b,t)},em.mn=function(t){qr(this.b,t)},em.sk=function(t){qr(this.b,t)},em.Fj=function(t){qr(this.b,t)},v(Ar,Sr),em=Ar.prototype,em.qh=function(){this.f=0,this.d=void 0},em.so=function(e){var o=e.b.touches,i=Y(this.a),n=i.length;if(n>=o.length){var r,s,a,p=[];for(r=0;r<n;++r){s=i[r],a=this.a[s];var l;if(!(l=1==s))t:{l=o.length;for(var h=void 0,u=0;u<l;u++)if(h=o[u],h.identifier===s-2){l=!0;break t}l=!1}l||p.push(a.ec)}for(r=0;r<p.length;++r)this.He(e,p[r])}o=z(this.a),(0===o||1===o&&1..toString()in this.a)&&(this.c=e.b.changedTouches[0].identifier,t(this.d)&&sm.clearTimeout(this.d)),Lr(this,e),this.f++,jr(this,e,this.hn)},em.hn=function(t,e){this.a[e.pointerId]={target:e.target,ec:e,Zg:e.target};var o=this.b;e.bubbles=!0,Gr(o,qb,e,t),o=this.b,e.bubbles=!1,Gr(o,Hb,e,t),Gr(this.b,Ub,e,t)},em.ro=function(t){t.preventDefault(),jr(this,t,this.yk)},em.yk=function(t,e){var o=this.a[e.pointerId];if(o){var i=o.ec,n=o.Zg;Gr(this.b,Bb,e,t),i&&n!==e.target&&(i.relatedTarget=e.target,e.relatedTarget=n,i.target=n,e.target?(Br(this.b,i,t),Ur(this.b,e,t)):(e.target=n,e.relatedTarget=null,this.He(t,e))),o.ec=e,o.Zg=e.target}},em.qo=function(t){Lr(this,t),jr(this,t,this.to)},em.to=function(t,e){Gr(this.b,Gb,e,t),this.b.ec(e,t);var o=this.b;e.bubbles=!1,Gr(o,Xb,e,t),et(this.a,e.pointerId),e.isPrimary&&(this.c=void 0,this.d=sm.setTimeout(d(this.qh,this),200))},em.po=function(t){jr(this,t,this.He)},em.He=function(t,e){this.b.cancel(e,t),this.b.ec(e,t);var o=this.b;e.bubbles=!1,Gr(o,Xb,e,t),et(this.a,e.pointerId),e.isPrimary&&(this.c=void 0,this.d=sm.setTimeout(d(this.qh,this),200))},v(Nr,Qt),Nr.prototype.d=function(t){var e=this.c[t.type];e&&e(t)},Nr.prototype.ec=function(t,e){t.bubbles=!0,Gr(this,$b,t,e)},Nr.prototype.cancel=function(t,e){Gr(this,Wb,t,e)},Nr.prototype.O=function(){for(var t,e=this.b.length,o=0;o<e;o++)t=this.b[o],Fr(this,Y(t.e));Nr.S.O.call(this)};var Bb="pointermove",Ub="pointerdown",Gb="pointerup",qb="pointerover",$b="pointerout",Hb="pointerenter",Xb="pointerleave",Wb="pointercancel",Kb=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",!1],["type",""],["target",null],["currentTarget",null],["which",0]];v($r,_i),$r.prototype.preventDefault=function(){$r.S.preventDefault.call(this),this.b.preventDefault()},$r.prototype.fb=function(){$r.S.fb.call(this),this.b.fb()},v(Hr,$r),v(Xr,Qt),em=Xr.prototype,em.fg=function(t){Kr(this,t);var e=new Hr(Qb,this.c,t);this.dispatchEvent(e),!this.g&&0===t.button&&Wr(this,this.a),0===this.o&&(P(this.d,Kt),this.d=null,this.g=!1,this.a=null,Mt(this.b),this.b=null)},em.dk=function(t){Kr(this,t);var e=new Hr(Jb,this.c,t);this.dispatchEvent(e),this.a=t,null===this.d&&(this.b=new Nr(document),this.d=[qt(this.b,_b,this.$k,!1,this),qt(this.b,Qb,this.fg,!1,this),qt(this.e,tw,this.fg,!1,this)])},em.$k=function(t){if(t.clientX!=this.a.clientX||t.clientY!=this.a.clientY){this.g=!0;var e=new Hr(Zb,this.c,t,this.g);this.dispatchEvent(e)}t.preventDefault()},em.Kn=function(t){this.dispatchEvent(new Hr(t.type,this.c,t,null!==this.a&&(t.clientX!=this.a.clientX||t.clientY!=this.a.clientY)))},em.O=function(){null!==this.q&&(Kt(this.q),this.q=null),null!==this.i&&(Kt(this.i),this.i=null),null!==this.d&&(P(this.d,Kt),this.d=null),null!==this.b&&(Mt(this.b),this.b=null),null!==this.e&&(Mt(this.e),this.e=null),Xr.S.O.call(this)};var zb="singleclick",Vb="click",Yb="dblclick",Zb="pointerdrag",_b="pointermove",Jb="pointerdown",Qb="pointerup",tw="pointercancel",ew={Ko:zb,zo:Vb,Ao:Yb,Do:Zb,Go:_b,Co:Jb,Jo:Qb,Io:"pointerover",Ho:"pointerout",Eo:"pointerenter",Fo:"pointerleave",Bo:tw};v(zr,re),em=zr.prototype,em.Bb=function(){return this.get("brightness")},em.Cb=function(){return this.get("contrast")},em.Db=function(){return this.get("hue")},em.G=function(){return this.get("extent")},em.Eb=function(){return this.get("maxResolution")},em.Fb=function(){return this.get("minResolution")},em.Kb=function(){return this.get("opacity")},em.Gb=function(){return this.get("saturation")},em.eb=function(){return this.get("visible")},em.gc=function(t){this.set("brightness",t)},em.hc=function(t){this.set("contrast",t)},em.ic=function(t){this.set("hue",t)},em.bc=function(t){this.set("extent",t)},em.jc=function(t){this.set("maxResolution",t)},em.kc=function(t){this.set("minResolution",t)},em.cc=function(t){this.set("opacity",t)},em.lc=function(t){this.set("saturation",t)},em.mc=function(t){this.set("visible",t)},v(Yr,zr),em=Yr.prototype,em.Ue=function(e){return e=t(e)?e:[],e.push(Vr(this)),e},em.da=function(){var e=this.get("source");return t(e)?e:null},em.We=function(){var t=this.da();return null===t?"undefined":t.o},em.Kl=function(){this.k()},em.kk=function(){null!==this.f&&(Kt(this.f),this.f=null);var t=this.da();null!==t&&(this.f=qt(t,"change",this.Kl,!1,this)),this.k()},em.Jc=function(t){this.set("source",t)},v(_r,Qt),_r.prototype.G=function(){return this.extent},v(es,oe),em=es.prototype,em.Pa=o,em.dc=function(t,e,o,i){if(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t),this.Pa(t,e,lb,this))return o.call(i,this.a)},em.ee=pb,em.yd=function(t,e){return function(o,i){return En(t,o,i,function(t){e[o]||(e[o]={}),e[o][t.b.toString()]=t})}},em.Ol=function(t){2===t.target.state&&is(this)},em=hs.prototype,em.ie=function(){return this.U},em.Jd=function(){return this.V},em.je=function(){return this.q},em.ke=function(){return this.l},em.Kd=function(){return this.n},em.le=function(t){this.q=t},em.me=function(t){this.l=t},v(us,hs),em=us.prototype,em.mb=function(){if(null!==this.d)return this.d;var t=this.e,e=this.Xa();if("fraction"==this.g||"fraction"==this.i){if(null===e)return null;t=this.e.slice(),"fraction"==this.g&&(t[0]*=e[0]),"fraction"==this.i&&(t[1]*=e[1])}if("top-left"!=this.a){if(null===e)return null;t===this.e&&(t=this.e.slice()),"top-right"!=this.a&&"bottom-right"!=this.a||(t[0]=-t[0]+e[0]),"bottom-left"!=this.a&&"bottom-right"!=this.a||(t[1]=-t[1]+e[1])}return this.d=t},em.Lb=function(){return this.b.b},em.Dd=function(){return this.b.a},em.gd=function(){return this.b.c},em.he=function(){var t=this.b;if(null===t.e)if(t.i){var e=t.a[0],o=t.a[1],i=mr(e,o);i.fillRect(0,0,e,o),t.e=i.canvas}else t.e=t.b;return t.e},em.rb=function(){if(null!==this.f)return this.f;var t=this.p;if("top-left"!=this.c){var e=this.Xa(),o=this.b.a;if(null===e||null===o)return null;t=t.slice(),"top-right"!=this.c&&"bottom-right"!=this.c||(t[0]=o[0]-e[0]-t[0]),"bottom-left"!=this.c&&"bottom-right"!=this.c||(t[1]=o[1]-e[1]-t[1])}return this.f=t},em.Bm=function(){return this.b.f},em.Xa=function(){return null===this.o?this.b.a:this.o},em.$e=function(t,e){return qt(this.b,"change",t,!1,e)},em.load=function(){this.b.load()},em.xf=function(t,e){Wt(this.b,"change",t,!1,e)},v(cs,Qt),cs.prototype.g=function(){this.c=3,P(this.d,Kt),this.d=null,this.dispatchEvent("change")},cs.prototype.q=function(){this.c=2,this.a=[this.b.width,this.b.height],P(this.d,Kt),this.d=null;var t=mr(1,1);t.drawImage(this.b,0,0);try{t.getImageData(0,0,1,1)}catch(e){this.i=!0}this.dispatchEvent("change")},cs.prototype.load=function(){if(0==this.c){this.c=1,this.d=[Xt(this.b,"error",this.g,!1,this),Xt(this.b,"load",this.q,!1,this)];try{this.b.src=this.f}catch(t){this.g()}}},i(fs),fs.prototype.clear=function(){this.b={},this.a=0},fs.prototype.get=function(t,e){var o=e+":"+t;return o in this.b?this.b[o]:null},fs.prototype.set=function(t,e,o){this.b[e+":"+t]=o,++this.a},v(ys,Tt),em=ys.prototype,em.O=function(){W(this.f,Mt),ys.S.O.call(this)},em.ef=function(t,e,o,i,n,r){function s(t){var e=c(t).toString();if(!(e in u))return u[e]=!0,o.call(i,t,null)}var a,p=e.viewState,l=p.resolution,h=p.rotation,u={},f=p.projection,p=t;if(f.c){var y=f.G(),f=no(y);a=t[0],(a<y[0]||a>y[2])&&(p=Math.ceil((y[0]-a)/f),p=[a+f*p,t[1]])}if(null!==this.c&&(a=this.c.c(p,l,h,{},s)))return a;for(h=e.layerStatesArray,f=h.length-1;0<=f;--f)if(a=h[f],y=a.layer,Zr(a,l)&&n.call(r,y)&&(a=vs(this,y).Pa(an(y.da())?p:t,e,o,i)))return a},em.Jg=function(t,e,o,i,n,r){var s,a=e.viewState,p=a.resolution,a=a.rotation;if(null!==this.c){var l=this.g.ka(t);if(this.c.c(l,p,a,{},lb)&&(s=o.call(i,null)))return s}for(a=e.layerStatesArray,l=a.length-1;0<=l;--l){s=a[l];var h=s.layer;if(Zr(s,p)&&n.call(r,h)&&(s=vs(this,h).dc(t,e,o,i)))return s}},em.Kg=function(e,o,i,n){return e=this.ef(e,o,lb,this,i,n),t(e)},em.Tj=function(){this.g.render()},em.ue=o,em.Pn=function(t,e){for(var o in this.f)if(!(null!==e&&o in e.layerStates)){var i=o,n=this.f[i];delete this.f[i],Kt(this.o[i]),delete this.o[i],Mt(n)}},bs.prototype.clear=function(){this.b.length=0,this.a.length=0,tt(this.c)},bs.prototype.Tb=function(){return this.b.length},bs.prototype.la=function(){return 0===this.b.length},v(Ms,bs),Ms.prototype.f=function(t){t=t.target;var e=t.state;2!==e&&3!==e&&4!==e||(Wt(t,"change",this.f,!1,this),--this.d,this.i())},Ps.prototype.update=function(t,e){this.b.push(t,e,lm())},v(As,re),As.prototype.c=function(){return this.get("active")},As.prototype.d=function(t){this.set("active",t)},As.prototype.setMap=function(t){this.l=t},v(Ns,As),v($s,As),$s.prototype.nc=hn,v(Ws,$s),Ws.prototype.nc=pb,v(Ys,$s),Ys.prototype.nc=pb,v(Qs,re),Qs.prototype.e=function(e,o){var i=t(o)?o:[NaN,NaN];return this.Sa(e[0],e[1],i,1/0),i},Qs.prototype.Jb=pb,Qs.prototype.G=function(e){this.n!=this.b&&(this.o=this.wd(this.o),this.n=this.b);var o=this.o;return t(e)?(e[0]=o[0],e[1]=o[1],e[2]=o[2],e[3]=o[3]):e=o,e},Qs.prototype.transform=function(t,e){return this.qa(To(t,e)),this},v(ea,Qs),em=ea.prototype,em.Jb=pb,em.wd=function(t){var e=this.j,o=this.j.length,i=this.s;return t=$e(1/0,1/0,-(1/0),-(1/0),t),ze(t,e,0,o,i)},em.ob=function(){return this.j.slice(0,this.s)},em.pb=function(){return this.j.slice(this.j.length-this.s)},em.qb=function(){return this.a},em.Ve=function(t){if(this.l!=this.b&&(tt(this.f),this.g=0,this.l=this.b),0>t||0!==this.g&&t<=this.g)return this;var e=t.toString();if(this.f.hasOwnProperty(e))return this.f[e];var o=this.xc(t);return o.j.length<this.j.length?this.f[e]=o:(this.g=t,this)},em.xc=function(){return this},em.qa=function(t){null!==this.j&&(t(this.j,this.j,this.s),this.k())},em.Oa=function(e,o){var i=this.j;if(null!==i){var n,r,s=i.length,a=this.s,p=t(i)?i:[],l=0;for(n=0;n<s;n+=a)for(p[l++]=i[n]+e,p[l++]=i[n+1]+o,r=n+2;r<n+a;++r)p[l++]=i[r];t(i)&&p.length!=l&&(p.length=l),this.k()}},v(xa,ea),em=xa.prototype,em.clone=function(){var t=new xa(null);return Sa(t,this.a,this.j.slice()),t},em.Sa=function(t,e,o,i){return i<Oe(this.G(),t,e)?i:(this.c!=this.b&&(this.i=Math.sqrt(ha(this.j,0,this.j.length,this.s,0)),
+this.c=this.b),ca(this.j,0,this.j.length,this.s,this.i,!0,t,e,o,i))},em.rl=function(){return ra(this.j,0,this.j.length,this.s)},em.K=function(){return va(this.j,0,this.j.length,this.s)},em.xc=function(t){var e=[];return e.length=ba(this.j,0,this.j.length,this.s,t,e,0),t=new xa(null),Sa(t,"XY",e),t},em.M=function(){return"LinearRing"},em.W=function(t,e){null===t?Sa(this,"XY",null):(na(this,e,t,1),null===this.j&&(this.j=[]),this.j.length=da(this.j,0,t,this.s),this.k())},v(Ta,ea),em=Ta.prototype,em.clone=function(){var t=new Ta(null);return Ca(t,this.a,this.j.slice()),t},em.Sa=function(t,e,o,i){var n=this.j;if(t=pa(t,e,n[0],n[1]),t<i){for(i=this.s,e=0;e<i;++e)o[e]=n[e];return o.length=i,t}return i},em.K=function(){return null===this.j?[]:this.j.slice()},em.wd=function(t){return He(this.j,t)},em.M=function(){return"Point"},em.ra=function(t){return Ue(t,this.j[0],this.j[1])},em.W=function(t,e){null===t?Ca(this,"XY",null):(na(this,e,t,0),null===this.j&&(this.j=[]),this.j.length=ya(this.j,t),this.k())},v(Fa,ea),em=Fa.prototype,em.wi=function(t){null===this.j?this.j=t.j.slice():F(this.j,t.j),this.c.push(this.j.length),this.k()},em.clone=function(){var t=new Fa(null);return Ua(t,this.a,this.j.slice(),this.c.slice()),t},em.Sa=function(t,e,o,i){return i<Oe(this.G(),t,e)?i:(this.J!=this.b&&(this.L=Math.sqrt(ua(this.j,0,this.c,this.s,0)),this.J=this.b),fa(this.j,0,this.c,this.s,this.L,!0,t,e,o,i))},em.Jb=function(t,e){return Ea(Ba(this),0,this.c,this.s,t,e)},em.ul=function(){return sa(Ba(this),0,this.c,this.s)},em.K=function(e){var o;return t(e)?(o=Ba(this).slice(),Ia(o,0,this.c,this.s,e)):o=this.j,ma(o,0,this.c,this.s)},em.cj=function(){return new Ta(Oa(this))},em.ij=function(){return this.c.length},em.hj=function(t){if(0>t||this.c.length<=t)return null;var e=new xa(null);return Sa(e,this.a,this.j.slice(0===t?0:this.c[t-1],this.c[t])),e},em.Ed=function(){var t,e,o=this.a,i=this.j,n=this.c,r=[],s=0;for(t=0,e=n.length;t<e;++t){var a=n[t],p=new xa(null);Sa(p,o,i.slice(s,a)),r.push(p),s=a}return r},em.xc=function(t){var e=[],o=[];return e.length=wa(this.j,0,this.c,this.s,Math.sqrt(t),e,0,o),t=new Fa(null),Ua(t,"XY",e,o),t},em.M=function(){return"Polygon"},em.ra=function(t){return ja(Ba(this),0,this.c,this.s,t)},em.W=function(t,e){if(null===t)Ua(this,"XY",null,this.c);else{na(this,e,t,2),null===this.j&&(this.j=[]);var o=ga(this.j,0,t,this.s,this.c);this.j.length=0===o.length?0:o[o.length-1],this.k()}},v($a,Pt),v(Ha,Tt),Ha.prototype.O=function(){this.setMap(null)},Ha.prototype.g=function(t){var e=this.c,o=this.f;t.vectorContext.tc(1/0,function(t){t.Aa(o.e,o.c),t.Ba(o.a),t.Rb(e,null)})},Ha.prototype.Q=function(){return this.c},Ha.prototype.setMap=function(t){null!==this.d&&(Kt(this.d),this.d=null,this.b.render(),this.b=null),this.b=t,null!==this.b&&(this.d=qt(t,"postcompose",this.g,!1,this),Wa(this))},v(Ka,Pt),v(za,$s),za.prototype.Q=function(){return this.f.Q()},za.prototype.g=o,v(Ja,_a),Ja.prototype.update=function(e,o){t(o)||(o=e.length);for(var i=o-this.a,n=this.e,r=this.c,s=0;s<o;){if(0==r)for(;s<=i;)Qa(this,e,s),s+=this.a;if(p(e)){for(;s<o;)if(n[r++]=e.charCodeAt(s++),r==this.a){Qa(this,n),r=0;break}}else for(;s<o;)if(n[r++]=e[s++],r==this.a){Qa(this,n),r=0;break}}this.c=r,this.d+=o},em=tp.prototype,em.Hm=function(){return this.b},em.ej=function(){return this.d},em.Im=function(){return this.c},em.fj=function(){return this.e},em.lj=function(){return this.f},em.Jm=function(){return this.a},em.Km=function(t){this.b=t,this.g=void 0},em.Zn=function(t){this.d=t,this.g=void 0},em.Lm=function(t){this.c=t,this.g=void 0},em.$n=function(t){this.e=t,this.g=void 0},em.ao=function(t){this.f=t,this.g=void 0},em.ko=function(t){this.a=t,this.g=void 0},em.nb=function(){if(!t(this.g)){var e="s"+(null===this.b?"-":ni(this.b))+","+(t(this.d)?this.d.toString():"-")+","+(null===this.c?"-":this.c.toString())+","+(t(this.e)?this.e:"-")+","+(t(this.f)?this.f.toString():"-")+","+(t(this.a)?this.a.toString():"-"),o=new Ja;o.update(e);var i=Array((56>o.c?o.a:2*o.a)-o.c);for(i[0]=128,e=1;e<i.length-8;++e)i[e]=0;for(var n=8*o.d,e=i.length-8;e<i.length;++e)i[e]=255&n,n/=256;for(o.update(i),i=Array(16),e=n=0;4>e;++e)for(var r=0;32>r;r+=8)i[n++]=o.b[e]>>>r&255;if(8192>i.length)o=String.fromCharCode.apply(null,i);else for(o="",e=0;e<i.length;e+=8192)o+=String.fromCharCode.apply(null,B(i,e,e+8192));this.g=o}return this.g};var ow=[0,0,0,1],iw=[],nw=[0,0,0,1];ep.prototype.c=function(){return this.b},ep.prototype.d=function(t){this.b=t,this.a=void 0},ep.prototype.nb=function(){return t(this.a)||(this.a="f"+(null===this.b?"-":ni(this.b))),this.a},v(op,hs),em=op.prototype,em.mb=function(){return this.g},em.ym=function(){return this.d},em.he=function(){return this.f},em.Lb=function(){return this.b},em.gd=function(){return 2},em.Dd=function(){return this.i},em.rb=function(){return this.o},em.zm=function(){return this.c},em.Xa=function(){return this.p},em.Am=function(){return this.a},em.$e=o,em.load=o,em.xf=o,em.Sg=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),e.arc(t.size/2,t.size/2,this.c,0,2*Math.PI,!0),null!==this.d&&(e.fillStyle=ni(this.d.b),e.fill()),null!==this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.md,null===t.lineDash||e.setLineDash(t.lineDash),e.stroke()),e.closePath()},em.Rg=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),e.arc(t.size/2,t.size/2,this.c,0,2*Math.PI,!0),e.fillStyle=ow,e.fill(),null!==this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.md,null===t.lineDash||e.setLineDash(t.lineDash),e.stroke()),e.closePath()},em.nb=function(){var e=null===this.a?"-":this.a.nb(),o=null===this.d?"-":this.d.nb();return null!==this.e&&e==this.e[1]&&o==this.e[2]&&this.c==this.e[3]||(this.e=["c"+e+o+(t(this.c)?this.c.toString():"-"),e,o,this.c]),this.e[0]},em=ip.prototype,em.Q=function(){return this.g},em.Zi=function(){return this.d},em.Mm=function(){return this.e},em.Nm=function(){return this.f},em.Om=function(){return this.c},em.Pm=function(){return this.a},em.Dj=function(){return this.b},em.Vg=function(e){h(e)?this.d=e:p(e)?this.d=function(t){return t.get(e)}:null===e?this.d=ap:t(e)&&(this.d=function(){return e}),this.g=e},em.mo=function(t){this.b=t},v(pp,za),pp.prototype.g=function(){var t=this.l,e=t.R(),o=this.Q().G(),i=_e(o),n=t.xa(),o=Ro(o,n),n=this.n,o=e.constrainResolution(o,0,void 0);Ls(t,e,o,i,n)},v(lp,As),v(up,As),v(fp,As),fp.prototype.i=function(t){var e=lt(this.a,-1,1),o=t.R();t.render(),js(t,o,-e,this.f,this.o),this.a=0,this.f=null,this.g=this.e=void 0},v(dp,$s),dp.prototype.nc=pb,v(bp,$s),bp.prototype.nc=pb,v(Cp,zr),em=Cp.prototype,em.Qd=function(){this.eb()&&this.k()},em.Vj=function(){P(this.c,Kt),this.c.length=0;var t=this.Bc();this.c.push(qt(t,"add",this.Uj,!1,this),qt(t,"remove",this.Wj,!1,this)),W(this.a,function(t){P(t,Kt)}),tt(this.a);var e,o,i,t=t.a;for(e=0,o=t.length;e<o;e++)i=t[e],this.a[c(i).toString()]=[qt(i,"propertychange",this.Qd,!1,this),qt(i,"change",this.Qd,!1,this)];this.k()},em.Uj=function(t){t=t.element;var e=c(t).toString();this.a[e]=[qt(t,"propertychange",this.Qd,!1,this),qt(t,"change",this.Qd,!1,this)],this.k()},em.Wj=function(t){t=c(t.element).toString(),P(this.a[t],Kt),delete this.a[t],this.k()},em.Bc=function(){return this.get("layers")},em.Ah=function(t){this.set("layers",t)},em.Ue=function(e){var o=t(e)?e:[],i=o.length;this.Bc().forEach(function(t){t.Ue(o)}),e=Vr(this);var n,r;for(n=o.length;i<n;i++)r=o[i],r.brightness=lt(r.brightness+e.brightness,-1,1),r.contrast*=e.contrast,r.hue+=e.hue,r.opacity*=e.opacity,r.saturation*=e.saturation,r.visible=r.visible&&e.visible,r.maxResolution=Math.min(r.maxResolution,e.maxResolution),r.minResolution=Math.max(r.minResolution,e.minResolution),t(e.extent)&&(r.extent=t(r.extent)?eo(r.extent,e.extent):e.extent);return o},em.We=function(){return"ready"},v(Mp,ho),Mp.prototype.getPointResolution=function(t,e){var o=e[1]/6378137;return t/((Math.exp(o)+Math.exp(-o))/2)};var rw=6378137*Math.PI,sw=[-rw,-rw,rw,rw],aw=[-180,-85,180,85],pw=k("EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" "),function(t){return new Mp(t)});v(kp,ho),kp.prototype.getPointResolution=function(t){return t};var lw=[-180,-90,180,90],hw=[new kp("CRS:84"),new kp("EPSG:4326","neu"),new kp("urn:ogc:def:crs:EPSG::4326","neu"),new kp("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new kp("urn:ogc:def:crs:OGC:1.3:CRS84"),new kp("urn:ogc:def:crs:OGC:2:84"),new kp("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new kp("urn:x-ogc:def:crs:EPSG:4326","neu")];v(Rp,Yr),v(jp,Yr),jp.prototype.a=function(){return this.get("preload")},jp.prototype.d=function(t){this.set("preload",t)},jp.prototype.c=function(){return this.get("useInterimTilesOnError")},jp.prototype.e=function(t){this.set("useInterimTilesOnError",t)},v(Lp,Yr),Lp.prototype.H=function(){return this.g},Lp.prototype.J=function(){return this.a},Lp.prototype.e=function(e){this.g=t(e)?e:rp,this.a=null===e?void 0:np(this.g),this.k()},em=Np.prototype,em.tc=function(e,o){var i=e.toString(),n=this.U[i];t(n)?n.push(o):this.U[i]=[o]},em.uc=function(t){if(ro(this.e,t.G())){if(null!==this.a||null!==this.b){null===this.a||Up(this,this.a),null===this.b||Gp(this,this.b);var e;e=t.j,e=null===e?null:ta(e,0,e.length,t.s,this.H,this.V);var o=e[2]-e[0],i=e[3]-e[1],o=Math.sqrt(o*o+i*i),i=this.c;i.beginPath(),i.arc(e[0],e[1],o,0,2*Math.PI),null===this.a||i.fill(),null===this.b||i.stroke()}""!==this.d&&Dp(this,t.dd(),2,2)}},em.Le=function(e,o){var i=(0,o.d)(e);if(null!=i&&ro(this.e,i.G())){var n=o.b;t(n)||(n=0),this.tc(n,function(t){t.Aa(o.e,o.c),t.Za(o.f),t.Ba(o.a),uw[i.M()].call(t,i,null)})}},em.zd=function(t,e){var o,i,n=t.d;for(o=0,i=n.length;o<i;++o){var r=n[o];uw[r.M()].call(this,r,e)}},em.kb=function(t){var e=t.j;t=t.s,null===this.f||Ip(this,e,e.length),""!==this.d&&Dp(this,e,e.length,t)},em.jb=function(t){var e=t.j;t=t.s,null===this.f||Ip(this,e,e.length),""!==this.d&&Dp(this,e,e.length,t)},em.zb=function(t){if(ro(this.e,t.G())){if(null!==this.b){Gp(this,this.b);var e=this.c,o=t.j;e.beginPath(),Fp(this,o,0,o.length,t.s,!1),e.stroke()}""!==this.d&&(t=bl(t),Dp(this,t,2,2))}},em.vc=function(t){var e=t.G();if(ro(this.e,e)){if(null!==this.b){Gp(this,this.b);var e=this.c,o=t.j,i=0,n=t.c,r=t.s;e.beginPath();var s,a;for(s=0,a=n.length;s<a;++s)i=Fp(this,o,i,n[s],r,!1);e.stroke()}""!==this.d&&(t=Sl(t),Dp(this,t,t.length,2))}},em.Rb=function(t){if(ro(this.e,t.G())){if(null!==this.b||null!==this.a){null===this.a||Up(this,this.a),null===this.b||Gp(this,this.b);var e=this.c;e.beginPath(),Op(this,Ba(t),0,t.c,t.s),null===this.a||e.fill(),null===this.b||e.stroke()}""!==this.d&&(t=Oa(t),Dp(this,t,2,2))}},em.wc=function(t){if(ro(this.e,t.G())){if(null!==this.b||null!==this.a){null===this.a||Up(this,this.a),null===this.b||Gp(this,this.b);var e,o,i=this.c,n=kl(t),r=0,s=t.c,a=t.s;for(e=0,o=s.length;e<o;++e){var p=s[e];i.beginPath(),r=Op(this,n,r,p,a),null===this.a||i.fill(),null===this.b||i.stroke()}}""!==this.d&&(t=El(t),Dp(this,t,t.length,2))}},em.Aa=function(e,o){if(null===e)this.a=null;else{var i=e.b;this.a={fillStyle:ni(null===i?ow:i)}}if(null===o)this.b=null;else{var i=o.b,n=o.d,r=o.c,s=o.e,a=o.a,p=o.f;this.b={lineCap:t(n)?n:"round",lineDash:null!=r?r:iw,lineJoin:t(s)?s:"round",lineWidth:this.n*(t(a)?a:1),miterLimit:t(p)?p:10,strokeStyle:ni(null===i?nw:i)}}},em.Za=function(t){if(null===t)this.f=null;else{var e=t.mb(),o=t.Lb(1),i=t.rb(),n=t.Xa();this.J=e[0],this.L=e[1],this.N=n[1],this.f=o,this.o=t.U,this.Fa=i[0],this.Ga=i[1],this.Ra=t.V,this.rc=t.q,this.g=t.l,this.vb=t.n,this.T=n[0]}},em.Ba=function(e){if(null===e)this.d="";else{var o=e.b;null===o?this.i=null:(o=o.b,this.i={fillStyle:ni(null===o?ow:o)});var i=e.f;if(null===i)this.l=null;else{var o=i.b,n=i.d,r=i.c,s=i.e,a=i.a,i=i.f;this.l={lineCap:t(n)?n:"round",lineDash:null!=r?r:iw,lineJoin:t(s)?s:"round",lineWidth:t(a)?a:1,miterLimit:t(i)?i:10,strokeStyle:ni(null===o?nw:o)}}var o=e.d,n=e.q,r=e.l,s=e.e,a=e.a,i=e.c,p=e.g;e=e.i,this.sa={font:t(o)?o:"10px sans-serif",textAlign:t(p)?p:"center",textBaseline:t(e)?e:"middle"},this.d=t(i)?i:"",this.wb=t(n)?this.n*n:0,this.xb=t(r)?this.n*r:0,this.p=t(s)?s:0,this.q=this.n*(t(a)?a:1)}};var uw={Point:Np.prototype.kb,LineString:Np.prototype.zb,Polygon:Np.prototype.Rb,MultiPoint:Np.prototype.jb,MultiLineString:Np.prototype.vc,MultiPolygon:Np.prototype.wc,GeometryCollection:Np.prototype.zd,Circle:Np.prototype.uc},cw=["Polygon","LineString","Image","Text"];v(qp,qa),qp.prototype.de=o,qp.prototype.Pe=function(){return this.T},v(zp,qp),zp.prototype.kb=function(t,e){if(null!==this.i){Hp(this,e);var o=t.j,i=this.coordinates.length,o=$p(this,o,0,o.length,t.s,!1);this.a.push([4,i,o,this.i,this.c,this.f,this.g,this.q,this.l,this.o,this.U,this.V,this.n,this.p,this.H]),this.b.push([4,i,o,this.N,this.c,this.f,this.g,this.q,this.l,this.o,this.U,this.V,this.n,this.p,this.H]),Kp(this,e)}},zp.prototype.jb=function(t,e){if(null!==this.i){Hp(this,e);var o=t.j,i=this.coordinates.length,o=$p(this,o,0,o.length,t.s,!1);this.a.push([4,i,o,this.i,this.c,this.f,this.g,this.q,this.l,this.o,this.U,this.V,this.n,this.p,this.H]),this.b.push([4,i,o,this.N,this.c,this.f,this.g,this.q,this.l,this.o,this.U,this.V,this.n,this.p,this.H]),Kp(this,e)}},zp.prototype.de=function(){Wp(this),this.f=this.c=void 0,this.i=this.N=null,this.H=this.p=this.V=this.U=this.o=this.l=this.q=this.n=this.g=void 0},zp.prototype.Za=function(t){var e=t.mb(),o=t.Xa(),i=t.he(1),n=t.Lb(1),r=t.rb();this.c=e[0],this.f=e[1],this.N=i,this.i=n,this.g=o[1],this.q=t.U,this.l=r[0],this.o=r[1],this.U=t.V,this.V=t.q,this.n=t.l,this.p=t.n,this.H=o[0]},v(Vp,qp),em=Vp.prototype,em.Pe=function(){return null===this.d&&(this.d=Fe(this.T),0<this.e&&De(this.d,this.resolution*(this.e+1)/2,this.d)),this.d},em.zb=function(e,o){var i=this.c,n=i.lineWidth;t(i.strokeStyle)&&t(n)&&(Zp(this),Hp(this,o),this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash],[1]),i=e.j,Yp(this,i,0,i.length,e.s),this.b.push([12]),Kp(this,o))},em.vc=function(e,o){var i=this.c,n=i.lineWidth;if(t(i.strokeStyle)&&t(n)){Zp(this),Hp(this,o),this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash],[1]);var r,s,i=e.c,n=e.j,a=e.s,p=0;for(r=0,s=i.length;r<s;++r)p=Yp(this,n,p,i[r],a);this.b.push([12]),Kp(this,o)}},em.de=function(){this.c.Ze!=this.coordinates.length&&this.a.push([12]),Wp(this),this.c=null},em.Aa=function(e,o){var i=o.b;this.c.strokeStyle=ni(null===i?nw:i),i=o.d,this.c.lineCap=t(i)?i:"round",i=o.c,this.c.lineDash=null===i?iw:i,i=o.e,this.c.lineJoin=t(i)?i:"round",i=o.a,this.c.lineWidth=t(i)?i:1,i=o.f,this.c.miterLimit=t(i)?i:10,this.c.lineWidth>this.e&&(this.e=this.c.lineWidth,this.d=null)},v(_p,qp),em=_p.prototype,em.uc=function(e,o){var i=this.c,n=i.strokeStyle;if(t(i.fillStyle)||t(n)){Qp(this),Hp(this,o),this.b.push([9,ni(ow)]),t(i.strokeStyle)&&this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash]);var r=e.j,n=this.coordinates.length;$p(this,r,0,r.length,e.s,!1),r=[1],n=[2,n],this.a.push(r,n),this.b.push(r,n),n=[7],this.b.push(n),t(i.fillStyle)&&this.a.push(n),t(i.strokeStyle)&&(i=[12],this.a.push(i),this.b.push(i)),Kp(this,o)}},em.Rb=function(e,o){var i=this.c,n=i.strokeStyle;(t(i.fillStyle)||t(n))&&(Qp(this),Hp(this,o),this.b.push([9,ni(ow)]),t(i.strokeStyle)&&this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash]),i=e.c,n=Ba(e),Jp(this,n,0,i,e.s),Kp(this,o))},em.wc=function(e,o){var i=this.c,n=i.strokeStyle;if(t(i.fillStyle)||t(n)){Qp(this),Hp(this,o),this.b.push([9,ni(ow)]),t(i.strokeStyle)&&this.b.push([10,i.strokeStyle,i.lineWidth,i.lineCap,i.lineJoin,i.miterLimit,i.lineDash]);var r,s,i=e.c,n=kl(e),a=e.s,p=0;for(r=0,s=i.length;r<s;++r)p=Jp(this,n,p,i[r],a);Kp(this,o)}},em.de=function(){Wp(this),this.c=null;var t=this.oa;if(0!==t){var e,o,i=this.coordinates;for(e=0,o=i.length;e<o;++e)i[e]=t*Math.round(i[e]/t)}},em.Pe=function(){return null===this.d&&(this.d=Fe(this.T),0<this.e&&De(this.d,this.resolution*(this.e+1)/2,this.d)),this.d},em.Aa=function(e,o){var i=this.c;if(null===e)i.fillStyle=void 0;else{var n=e.b;i.fillStyle=ni(null===n?ow:n)}null===o?(i.strokeStyle=void 0,i.lineCap=void 0,i.lineDash=null,i.lineJoin=void 0,i.lineWidth=void 0,i.miterLimit=void 0):(n=o.b,i.strokeStyle=ni(null===n?nw:n),n=o.d,i.lineCap=t(n)?n:"round",n=o.c,i.lineDash=null===n?iw:n.slice(),n=o.e,i.lineJoin=t(n)?n:"round",n=o.a,i.lineWidth=t(n)?n:1,n=o.f,i.miterLimit=t(n)?n:10,i.lineWidth>this.e&&(this.e=i.lineWidth,this.d=null))},v(tl,qp),tl.prototype.lb=function(t,e,o,i,n,r){if(""!==this.i&&null!==this.g&&(null!==this.c||null!==this.f)){if(null!==this.c){n=this.c;var s=this.V;if(null===s||s.fillStyle!=n.fillStyle){var a=[9,n.fillStyle];this.a.push(a),this.b.push(a),null===s?this.V={fillStyle:n.fillStyle}:s.fillStyle=n.fillStyle}}null!==this.f&&(n=this.f,s=this.n,null===s||s.lineCap!=n.lineCap||s.lineDash!=n.lineDash||s.lineJoin!=n.lineJoin||s.lineWidth!=n.lineWidth||s.miterLimit!=n.miterLimit||s.strokeStyle!=n.strokeStyle)&&(a=[10,n.strokeStyle,n.lineWidth,n.lineCap,n.lineJoin,n.miterLimit,n.lineDash,!1],this.a.push(a),this.b.push(a),null===s?this.n={lineCap:n.lineCap,lineDash:n.lineDash,lineJoin:n.lineJoin,lineWidth:n.lineWidth,miterLimit:n.miterLimit,strokeStyle:n.strokeStyle}:(s.lineCap=n.lineCap,s.lineDash=n.lineDash,s.lineJoin=n.lineJoin,s.lineWidth=n.lineWidth,s.miterLimit=n.miterLimit,s.strokeStyle=n.strokeStyle)),n=this.g,s=this.p,null!==s&&s.font==n.font&&s.textAlign==n.textAlign&&s.textBaseline==n.textBaseline||(a=[11,n.font,n.textAlign,n.textBaseline],this.a.push(a),this.b.push(a),null===s?this.p={font:n.font,textAlign:n.textAlign,textBaseline:n.textBaseline}:(s.font=n.font,s.textAlign=n.textAlign,s.textBaseline=n.textBaseline)),Hp(this,r),n=this.coordinates.length,t=$p(this,t,e,o,i,!1),t=[5,n,t,this.i,this.q,this.l,this.o,this.U,null!==this.c,null!==this.f],this.a.push(t),this.b.push(t),Kp(this,r)}},tl.prototype.Ba=function(e){if(null===e)this.i="";else{var o=e.b;null===o?this.c=null:(o=o.b,o=ni(null===o?ow:o),null===this.c?this.c={fillStyle:o}:this.c.fillStyle=o);var i=e.f;if(null===i)this.f=null;else{var o=i.b,n=i.d,r=i.c,s=i.e,a=i.a,i=i.f,n=t(n)?n:"round",r=null!=r?r.slice():iw,s=t(s)?s:"round",a=t(a)?a:1,i=t(i)?i:10,o=ni(null===o?nw:o);if(null===this.f)this.f={lineCap:n,lineDash:r,lineJoin:s,lineWidth:a,miterLimit:i,strokeStyle:o};else{var p=this.f;p.lineCap=n,p.lineDash=r,p.lineJoin=s,p.lineWidth=a,p.miterLimit=i,p.strokeStyle=o}}var l=e.d,o=e.q,n=e.l,r=e.e,a=e.a,i=e.c,s=e.g,p=e.i;e=t(l)?l:"10px sans-serif",s=t(s)?s:"center",p=t(p)?p:"middle",null===this.g?this.g={font:e,textAlign:s,textBaseline:p}:(l=this.g,l.font=e,l.textAlign=s,l.textBaseline=p),this.i=t(i)?i:"",this.q=t(o)?o:0,this.l=t(n)?n:0,this.o=t(r)?r:0,this.U=t(a)?a:1}},el.prototype.c=function(e,o,i,n,r){var s=this.g;Jr(s,.5,.5,1/o,-1/o,-i,-e[0],-e[1]);var a=this.f;a.clearRect(0,0,1,1);var p;return t(this.e)&&(p=qe(),Ke(p,e),De(p,o*this.e,p)),nl(this,a,s,i,n,function(t){if(0<a.getImageData(0,0,1,1).data[3]){if(t=r(t))return t;a.clearRect(0,0,1,1)}},p)},el.prototype.b=function(e,o){var i=t(e)?e.toString():"0",n=this.a[i];return t(n)||(n={},this.a[i]=n),i=n[o],t(i)||(i=new fw[o](this.q,this.d,this.i),n[o]=i),i},el.prototype.la=function(){return Q(this.a)};var fw={Image:zp,LineString:Vp,Polygon:_p,Text:tl};v(rl,es),rl.prototype.o=function(e,o,i){sl(this,"precompose",i,e,void 0);var n=this.fe();if(null!==n){var r=o.extent,s=t(r);if(s){var a=e.pixelRatio,p=oo(r),l=io(r),h=Ze(r),r=Ye(r);ts(e.coordinateToPixelMatrix,p,p),ts(e.coordinateToPixelMatrix,l,l),ts(e.coordinateToPixelMatrix,h,h),ts(e.coordinateToPixelMatrix,r,r),i.save(),i.beginPath(),i.moveTo(p[0]*a,p[1]*a),i.lineTo(l[0]*a,l[1]*a),i.lineTo(h[0]*a,h[1]*a),i.lineTo(r[0]*a,r[1]*a),i.clip()}a=this.Xf(),p=i.globalAlpha,i.globalAlpha=o.opacity,0===e.viewState.rotation?(o=a[13],l=n.width*a[0],h=n.height*a[5],i.drawImage(n,0,0,+n.width,+n.height,Math.round(a[12]),Math.round(o),Math.round(l),Math.round(h))):(i.setTransform(a[0],a[1],a[4],a[5],a[12],a[13]),i.drawImage(n,0,0),i.setTransform(1,0,0,1,0,0)),i.globalAlpha=p,s&&i.restore()}sl(this,"postcompose",i,e,void 0)};var yw=function(){var t=null,e=null;return function(o){if(null===t){t=mr(1,1),e=t.createImageData(1,1);var i=e.data;i[0]=42,i[1]=84,i[2]=126,i[3]=255}var i=t.canvas,n=o[0]<=i.width&&o[1]<=i.height;return n||(i.width=o[0],i.height=o[1],i=o[0]-1,o=o[1]-1,t.putImageData(e,i,o),o=t.getImageData(i,o,1,1),n=G(e.data,o.data)),n}}();v(ll,ea),em=ll.prototype,em.clone=function(){var t=new ll(null);return ia(t,this.a,this.j.slice()),t.k(),t},em.Sa=function(t,e,o,i){var n=this.j;t-=n[0];var r=e-n[1];if(e=t*t+r*r,e<i){if(0===e)for(i=0;i<this.s;++i)o[i]=n[i];else for(i=this.zg()/Math.sqrt(e),o[0]=n[0]+i*t,o[1]=n[1]+i*r,i=2;i<this.s;++i)o[i]=n[i];return o.length=this.s,e}return i},em.Jb=function(t,e){var o=this.j,i=t-o[0],o=e-o[1];return i*i+o*o<=hl(this)},em.dd=function(){return this.j.slice(0,this.s)},em.wd=function(t){var e=this.j,o=e[this.s]-e[0];return $e(e[0]-o,e[1]-o,e[0]+o,e[1]+o,t)},em.zg=function(){return Math.sqrt(hl(this))},em.M=function(){return"Circle"},em.pl=function(t){var e=this.s,o=t.slice();o[e]=o[0]+(this.j[e]-this.j[0]);var i;for(i=1;i<e;++i)o[e+i]=t[i];ia(this,this.a,o),this.k()},em.uh=function(t,e,o){if(null===t)ia(this,"XY",null);else{na(this,o,t,0),null===this.j&&(this.j=[]),o=this.j,t=ya(o,t),o[t++]=o[0]+e;var i;for(e=1,i=this.s;e<i;++e)o[t++]=o[e];o.length=t}this.k()},em.Ag=function(t){this.j[this.s]=this.j[0]+t,this.k()},v(ul,Qs),em=ul.prototype,em.clone=function(){var t=new ul(null);return t.xh(this.d),t},em.Sa=function(t,e,o,i){if(i<Oe(this.G(),t,e))return i;var n,r,s=this.d;for(n=0,r=s.length;n<r;++n)i=s[n].Sa(t,e,o,i);return i},em.Jb=function(t,e){var o,i,n=this.d;for(o=0,i=n.length;o<i;++o)if(n[o].Jb(t,e))return!0;return!1},em.wd=function(t){$e(1/0,1/0,-(1/0),-(1/0),t);for(var e=this.d,o=0,i=e.length;o<i;++o)We(t,e[o].G());return t},em.Vf=function(){return cl(this.d)},em.Ve=function(t){if(this.l!=this.b&&(tt(this.f),this.g=0,this.l=this.b),0>t||0!==this.g&&t<this.g)return this;var e=t.toString();if(this.f.hasOwnProperty(e))return this.f[e];var o,i,n=[],r=this.d,s=!1;for(o=0,i=r.length;o<i;++o){var a=r[o],p=a.Ve(t);n.push(p),p!==a&&(s=!0)}return s?(t=new ul(null),fl(t),t.d=n,yl(t),t.k(),this.f[e]=t):(this.g=t,this)},em.M=function(){return"GeometryCollection"},em.ra=function(t){var e,o,i=this.d;for(e=0,o=i.length;e<o;++e)if(i[e].ra(t))return!0;return!1},em.la=function(){return 0==this.d.length},em.xh=function(t){t=cl(t),fl(this),this.d=t,yl(this),this.k()},em.qa=function(t){var e,o,i=this.d;for(e=0,o=i.length;e<o;++e)i[e].qa(t);this.k()},em.Oa=function(t,e){var o,i,n=this.d;for(o=0,i=n.length;o<i;++o)n[o].Oa(t,e);this.k()},em.O=function(){fl(this),ul.S.O.call(this)},v(ml,ea),em=ml.prototype,em.ui=function(t){null===this.j?this.j=t.slice():F(this.j,t),this.k()},em.clone=function(){var t=new ml(null);return wl(t,this.a,this.j.slice()),t},em.Sa=function(t,e,o,i){return i<Oe(this.G(),t,e)?i:(this.p!=this.b&&(this.H=Math.sqrt(ha(this.j,0,this.j.length,this.s,0)),this.p=this.b),ca(this.j,0,this.j.length,this.s,this.H,!1,t,e,o,i))},em.Ji=function(t,e){return Aa(this.j,0,this.j.length,this.s,t,e)},em.ql=function(e,o){return"XYM"!=this.a&&"XYZM"!=this.a?null:gl(this.j,0,this.j.length,this.s,e,!!t(o)&&o)},em.K=function(){return va(this.j,0,this.j.length,this.s)},em.Bg=function(){var t,e=this.j,o=this.s,i=e[0],n=e[1],r=0;for(t=0+o;t<this.j.length;t+=o)var s=e[t],a=e[t+1],r=r+Math.sqrt((s-i)*(s-i)+(a-n)*(a-n)),i=s,n=a;return r},em.xc=function(t){var e=[];return e.length=ba(this.j,0,this.j.length,this.s,t,e,0),t=new ml(null),wl(t,"XY",e),t},em.M=function(){return"LineString"},em.ra=function(t){return Ra(this.j,0,this.j.length,this.s,t)},em.W=function(t,e){null===t?wl(this,"XY",null):(na(this,e,t,1),null===this.j&&(this.j=[]),this.j.length=da(this.j,0,t,this.s),this.k())},v(xl,ea),em=xl.prototype,em.vi=function(t){null===this.j?this.j=t.j.slice():F(this.j,t.j.slice()),this.c.push(this.j.length),this.k()},em.clone=function(){var t=new xl(null);return Tl(t,this.a,this.j.slice(),this.c.slice()),t},em.Sa=function(t,e,o,i){return i<Oe(this.G(),t,e)?i:(this.i!=this.b&&(this.p=Math.sqrt(ua(this.j,0,this.c,this.s,0)),this.i=this.b),fa(this.j,0,this.c,this.s,this.p,!1,t,e,o,i))},em.sl=function(e,o,i){return"XYM"!=this.a&&"XYZM"!=this.a||0===this.j.length?null:vl(this.j,this.c,this.s,e,!!t(o)&&o,!!t(i)&&i)},em.K=function(){return ma(this.j,0,this.c,this.s)},em.gj=function(t){if(0>t||this.c.length<=t)return null;var e=new ml(null);return wl(e,this.a,this.j.slice(0===t?0:this.c[t-1],this.c[t])),e},em.ad=function(){var t,e,o=this.j,i=this.c,n=this.a,r=[],s=0;for(t=0,e=i.length;t<e;++t){var a=i[t],p=new ml(null);wl(p,n,o.slice(s,a)),r.push(p),s=a}return r},em.xc=function(t){var e,o,i=[],n=[],r=this.j,s=this.c,a=this.s,p=0,l=0;for(e=0,o=s.length;e<o;++e){var h=s[e],l=ba(r,p,h,a,t,i,l);n.push(l),p=h}return i.length=l,t=new xl(null),Tl(t,"XY",i,n),t},em.M=function(){return"MultiLineString"},em.ra=function(t){t:{var e,o,i=this.j,n=this.c,r=this.s,s=0;for(e=0,o=n.length;e<o;++e){if(Ra(i,s,n[e],r,t)){t=!0;break t}s=n[e]}t=!1}return t},em.W=function(t,e){if(null===t)Tl(this,"XY",null,this.c);else{na(this,e,t,2),null===this.j&&(this.j=[]);var o=ga(this.j,0,t,this.s,this.c);this.j.length=0===o.length?0:o[o.length-1],this.k()}},v(Ml,ea),em=Ml.prototype,em.xi=function(t){null===this.j?this.j=t.j.slice():F(this.j,t.j),this.k()},em.clone=function(){var t=new Ml(null);return ia(t,this.a,this.j.slice()),t.k(),t},em.Sa=function(t,e,o,i){if(i<Oe(this.G(),t,e))return i;var n,r,s,a=this.j,p=this.s;for(n=0,r=a.length;n<r;n+=p)if(s=pa(t,e,a[n],a[n+1]),s<i){for(i=s,s=0;s<p;++s)o[s]=a[n+s];o.length=p}return i},em.K=function(){return va(this.j,0,this.j.length,this.s)},em.qj=function(t){var e=null===this.j?0:this.j.length/this.s;return 0>t||e<=t?null:(e=new Ta(null),Ca(e,this.a,this.j.slice(t*this.s,(t+1)*this.s)),e)},em.ce=function(){var t,e,o=this.j,i=this.a,n=this.s,r=[];for(t=0,e=o.length;t<e;t+=n){var s=new Ta(null);Ca(s,i,o.slice(t,t+n)),r.push(s)}return r},em.M=function(){return"MultiPoint"},em.ra=function(t){var e,o,i,n,r=this.j,s=this.s;for(e=0,o=r.length;e<o;e+=s)if(i=r[e],n=r[e+1],Ue(t,i,n))return!0;return!1},em.W=function(t,e){null===t?ia(this,"XY",null):(na(this,e,t,1),null===this.j&&(this.j=[]),this.j.length=da(this.j,0,t,this.s)),this.k()},v(Pl,ea),em=Pl.prototype,em.yi=function(t){if(null===this.j)this.j=t.j.slice(),t=t.c.slice(),this.c.push();else{var e=this.j.length;F(this.j,t.j),t=t.c.slice();var o,i;for(o=0,i=t.length;o<i;++o)t[o]+=e}this.c.push(t),this.k()},em.clone=function(){var t=new Pl(null);return Al(t,this.a,this.j.slice(),this.c.slice()),t},em.Sa=function(e,o,i,n){if(n<Oe(this.G(),e,o))return n;if(this.J!=this.b){var r,s,a=this.c,p=0,l=0;for(r=0,s=a.length;r<s;++r)var h=a[r],l=ua(this.j,p,h,this.s,l),p=h[h.length-1];this.L=Math.sqrt(l),this.J=this.b}a=kl(this),p=this.c,l=this.s,r=this.L,s=0;var u,c,h=t(void 0)?void 0:[NaN,NaN];for(u=0,c=p.length;u<c;++u){var f=p[u];n=fa(a,s,f,l,r,!0,e,o,i,n,h),s=f[f.length-1]}return n},em.Jb=function(t,e){var o;t:{o=kl(this);var i=this.c,n=0;if(0!==i.length){var r,s;for(r=0,s=i.length;r<s;++r){var a=i[r];if(Ea(o,n,a,this.s,t,e)){o=!0;break t}n=a[a.length-1]}}o=!1}return o},em.tl=function(){var t,e,o=kl(this),i=this.c,n=0,r=0;for(t=0,e=i.length;t<e;++t)var s=i[t],r=r+sa(o,n,s,this.s),n=s[s.length-1];return r},em.K=function(e){var o;t(e)?(o=kl(this).slice(),Da(o,this.c,this.s,e)):o=this.j,e=o,o=this.c;var i,n,r=this.s,s=0,a=t(void 0)?void 0:[],p=0;for(i=0,n=o.length;i<n;++i){var l=o[i];a[p++]=ma(e,s,l,r,a[p]),s=l[l.length-1]}return a.length=p,a},em.dj=function(){var t=new Ml(null),e=El(this).slice();return ia(t,"XY",e),t.k(),t},em.xc=function(t){var e=[],o=[],i=this.j,n=this.c,r=this.s;t=Math.sqrt(t);var s,a,p=0,l=0;for(s=0,a=n.length;s<a;++s){var h=n[s],u=[],l=wa(i,p,h,r,t,e,l,u);o.push(u),p=h[h.length-1]}return e.length=l,i=new Pl(null),Al(i,"XY",e,o),i},em.sj=function(t){if(0>t||this.c.length<=t)return null;var e;0===t?e=0:(e=this.c[t-1],e=e[e.length-1]),t=this.c[t].slice();var o=t[t.length-1];if(0!==e){var i,n;for(i=0,n=t.length;i<n;++i)t[i]-=e}return i=new Fa(null),Ua(i,this.a,this.j.slice(e,o),t),i},em.Id=function(){var t,e,o,i,n=this.a,r=this.j,s=this.c,a=[],p=0;for(t=0,e=s.length;t<e;++t){var l=s[t].slice(),h=l[l.length-1];if(0!==p)for(o=0,i=l.length;o<i;++o)l[o]-=p;o=new Fa(null),Ua(o,n,r.slice(p,h),l),a.push(o),p=h}return a},em.M=function(){return"MultiPolygon"},em.ra=function(t){t:{var e,o,i=kl(this),n=this.c,r=this.s,s=0;for(e=0,o=n.length;e<o;++e){var a=n[e];if(ja(i,s,a,r,t)){t=!0;break t}s=a[a.length-1]}t=!1}return t},em.W=function(e,o){if(null===e)Al(this,"XY",null,this.c);else{na(this,o,e,3),null===this.j&&(this.j=[]);var i,n,r=this.j,s=this.s,a=this.c,p=0,a=t(a)?a:[],l=0;for(i=0,n=e.length;i<n;++i)p=ga(r,p,e[i],s,a[l]),a[l++]=p,p=p[p.length-1];a.length=l,0===a.length?this.j.length=0:(r=a[a.length-1],this.j.length=0===r.length?0:r[r.length-1]),this.k()}};var dw={Point:function(t,e,o,i){var n=o.f;if(null!==n){if(2!=n.gd())return;var r=t.b(o.b,"Image");r.Za(n),r.kb(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),t.lb(e.K(),0,2,2,e,i))},LineString:function(t,e,o,i){var n=o.c;if(null!==n){var r=t.b(o.b,"LineString");r.Aa(null,n),r.zb(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),t.lb(bl(e),0,2,2,e,i))},Polygon:function(t,e,o,i){var n=o.e,r=o.c;if(null!==n||null!==r){var s=t.b(o.b,"Polygon");s.Aa(n,r),s.Rb(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),t.lb(Oa(e),0,2,2,e,i))},MultiPoint:function(t,e,o,i){var n=o.f;if(null!==n){if(2!=n.gd())return;var r=t.b(o.b,"Image");r.Za(n),r.jb(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),o=e.j,t.lb(o,0,o.length,e.s,e,i))},MultiLineString:function(t,e,o,i){var n=o.c;if(null!==n){var r=t.b(o.b,"LineString");r.Aa(null,n),r.vc(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),o=Sl(e),t.lb(o,0,o.length,2,e,i))},MultiPolygon:function(t,e,o,i){var n=o.e,r=o.c;if(null!==r||null!==n){var s=t.b(o.b,"Polygon");s.Aa(n,r),s.wc(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),o=El(e),t.lb(o,0,o.length,2,e,i))},GeometryCollection:function(t,e,o,i){e=e.d;var n,r;for(n=0,r=e.length;n<r;++n)(0,dw[e[n].M()])(t,e[n],o,i)},Circle:function(t,e,o,i){var n=o.e,r=o.c;if(null!==n||null!==r){var s=t.b(o.b,"Polygon");s.Aa(n,r),s.uc(e,i)}n=o.a,null!==n&&(t=t.b(o.b,"Text"),t.Ba(n),t.lb(e.dd(),0,2,2,e,i))}};v(Il,_r),Il.prototype.b=function(){return this.a},v(Dl,sn),Dl.prototype.i=function(t){switch(t=t.target,t.state){case 1:this.dispatchEvent(new Bl(gw,t));break;case 2:this.dispatchEvent(new Bl(vw,t));break;case 3:this.dispatchEvent(new Bl(mw,t))}},v(Bl,Pt);var gw="imageloadstart",vw="imageloadend",mw="imageloaderror";v(Ul,Dl),Ul.prototype.Cc=function(t,e,o,i){e=Fl(this,e);var n=this.J;return null!==n&&this.N==this.b&&n.resolution==e&&n.e==o&&Be(n.G(),t)?n:(t=t.slice(),ao(t,this.X),i=this.T(t,e,o,[no(t)/e*o,to(t)/e*o],i),null===i||(n=new Il(t,e,o,this.d,i)),this.J=n,this.N=this.b,n)};var bw,ww=!1,xw=[],Sw=0,Tw=2,Cw=3;Kl.prototype.then=function(t,e,o){return Yl(this,h(t)?t:null,h(e)?e:null,o)},Gl(Kl),Kl.prototype.cancel=function(t){this.a==Sw&&$l(function(){var e=new eh(t);zl(this,e)},this)},Kl.prototype.g=function(t){this.a=Sw,Zl(this,Tw,t)},Kl.prototype.i=function(t){this.a=Sw,Zl(this,Cw,t)},Kl.prototype.q=function(){for(;this.b&&this.b.length;){var t=this.b;this.b=[];for(var e=0;e<t.length;e++)Ql(this,t[e],this.a,this.f)}this.e=!1};var Mw=Vn;v(eh,m),eh.prototype.name="cancel";var Pw=sm.JSON.parse,Ew=sm.JSON.stringify;ih.prototype.b=null;var kw;v(rh,ih),kw=new rh;var Aw=/^(?:([^:\/?#.]+):)?(?:\/\/(?:([^\/?#]*)@)?([^\/#?]*?)(?::([0-9]+))?(?=[\/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/,Rw=Em;v(fh,Qt);var jw="",Lw=/^https?$/i,Nw=["POST","PUT"];em=fh.prototype,em.send=function(t,e,o,i){if(this.Y)throw Error("[goog.net.XhrIo] Object is active with another request="+this.o+"; newUri="+t);e=e?e.toUpperCase():"GET",this.o=t,this.e="",this.q=!1,this.b=!0,this.Y=sh(this.i?this.i:kw),
+this.g=nh(this.i?this.i:kw),this.Y.onreadystatechange=d(this.Xg,this);try{this.l=!0,this.Y.open(e,String(t),!0),this.l=!1}catch(n){return void gh(this,n)}t=o||"";var r=this.H.clone();i&&Jn(i,function(t,e){r.set(e,t)}),i=R(r.C(),dh),o=sm.FormData&&t instanceof sm.FormData,!L(Nw,e)||i||o||r.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),r.forEach(function(t,e){this.Y.setRequestHeader(e,t)},this),this.n&&(this.Y.responseType=this.n),"withCredentials"in this.Y&&(this.Y.withCredentials=this.J);try{wh(this),0<this.f&&((this.p=yh(this.Y))?(this.Y.timeout=this.f,this.Y.ontimeout=d(this.oc,this)):this.c=oh(this.oc,this.f,this)),this.d=!0,this.Y.send(t),this.d=!1}catch(s){gh(this,s)}},em.oc=function(){"undefined"!=typeof rm&&this.Y&&(this.e="Timed out after "+this.f+"ms, aborting",this.dispatchEvent("timeout"),this.Y&&this.b&&(this.b=!1,this.a=!0,this.Y.abort(),this.a=!1,this.dispatchEvent("complete"),this.dispatchEvent("abort"),bh(this)))},em.O=function(){this.Y&&(this.b&&(this.b=!1,this.a=!0,this.Y.abort(),this.a=!1),bh(this,!0)),fh.S.O.call(this)},em.Xg=function(){this.U||(this.l||this.d||this.a?mh(this):this.dn())},em.dn=function(){mh(this)};var Iw;t:{if(!document.implementation||!document.implementation.createDocument){if("undefined"!=typeof ActiveXObject){var Dw=new ActiveXObject("MSXML2.DOMDocument");if(Dw){Dw.resolveExternals=!1,Dw.validateOnParse=!1;try{Dw.setProperty("ProhibitDTD",!0),Dw.setProperty("MaxXMLSize",2048),Dw.setProperty("MaxElementDepth",256)}catch(Fw){}}if(Dw){Iw=Dw;break t}}throw Error("Your browser does not support creating new documents")}Iw=document.implementation.createDocument("","",null)}var Ow,Bw=Iw,Uw=document.implementation&&document.implementation.createDocument?Ph:Eh,Gw=Mm?jh:Rh,qw=Mm?Nh:Lh,$w=Mm?Dh:Ih,Hw=document.implementation&&document.implementation.createDocument?Fh:Oh,Xw=document.implementation&&document.implementation.createDocument?Bh:Uh,Ww=document.implementation&&document.implementation.createDocument?Gh:qh,Kw=_h();!function(){var t={Qf:{}};!function(){function e(t,o){return this instanceof e?(this.Fe=Math.max(4,t||9),this.Hf=Math.max(2,Math.ceil(.4*this.Fe)),o&&this.qi(o),void this.clear()):new e(t,o)}function o(t,e){t.bbox=i(t,0,t.children.length,e)}function i(t,e,o,i){for(var r,s=[1/0,1/0,-(1/0),-(1/0)];e<o;e++)r=t.children[e],n(s,t.wa?i(r):r.bbox);return s}function n(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.min(t[1],e[1]),t[2]=Math.max(t[2],e[2]),t[3]=Math.max(t[3],e[3])}function r(t,e){return t.bbox[0]-e.bbox[0]}function s(t,e){return t.bbox[1]-e.bbox[1]}function a(t){return(t[2]-t[0])*(t[3]-t[1])}function p(t){return t[2]-t[0]+(t[3]-t[1])}function l(t,e){return t[0]<=e[0]&&t[1]<=e[1]&&e[2]<=t[2]&&e[3]<=t[3]}function h(t,e){return e[0]<=t[2]&&e[1]<=t[3]&&e[2]>=t[0]&&e[3]>=t[1]}function u(t,e,o,i,n){for(var r,s=[e,o];s.length;)o=s.pop(),e=s.pop(),o-e<=i||(r=e+Math.ceil((o-e)/i/2)*i,c(t,e,o,r,n),s.push(e,r,r,o))}function c(t,e,o,i,n){for(var r,s,a,p,l;o>e;){for(600<o-e&&(r=o-e+1,s=i-e+1,a=Math.log(r),p=.5*Math.exp(2*a/3),l=.5*Math.sqrt(a*p*(r-p)/r)*(0>s-r/2?-1:1),a=Math.max(e,Math.floor(i-s*p/r+l)),s=Math.min(o,Math.floor(i+(r-s)*p/r+l)),c(t,a,s,i,n)),r=t[i],s=e,p=o,f(t,e,i),0<n(t[o],r)&&f(t,e,o);s<p;){for(f(t,s,p),s++,p--;0>n(t[s],r);)s++;for(;0<n(t[p],r);)p--}0===n(t[e],r)?f(t,e,p):(p++,f(t,p,o)),p<=i&&(e=p+1),i<=p&&(o=p-1)}}function f(t,e,o){var i=t[e];t[e]=t[o],t[o]=i}e.prototype={all:function(){return this.Df(this.data,[])},search:function(t){var e=this.data,o=[],i=this.Ea;if(!h(t,e.bbox))return o;for(var n,r,s,a,p=[];e;){for(n=0,r=e.children.length;n<r;n++)s=e.children[n],a=e.wa?i(s):s.bbox,h(t,a)&&(e.wa?o.push(s):l(t,a)?this.Df(s,o):p.push(s));e=p.pop()}return o},load:function(t){if(!t||!t.length)return this;if(t.length<this.Hf){for(var e=0,o=t.length;e<o;e++)this.ha(t[e]);return this}return t=this.Ff(t.slice(),0,t.length-1,0),this.data.children.length?this.data.height===t.height?this.If(this.data,t):(this.data.height<t.height&&(e=this.data,this.data=t,t=e),this.Gf(t,this.data.height-t.height-1,!0)):this.data=t,this},ha:function(t){return t&&this.Gf(t,this.data.height-1),this},clear:function(){return this.data={children:[],height:1,bbox:[1/0,1/0,-(1/0),-(1/0)],wa:!0},this},remove:function(t){if(!t)return this;for(var e,o,i,n,r=this.data,s=this.Ea(t),a=[],p=[];r||a.length;){if(r||(r=a.pop(),o=a[a.length-1],e=p.pop(),n=!0),r.wa&&(i=r.children.indexOf(t),-1!==i)){r.children.splice(i,1),a.push(r),this.pi(a);break}n||r.wa||!l(r.bbox,s)?o?(e++,r=o.children[e],n=!1):r=null:(a.push(r),p.push(e),e=0,o=r,r=r.children[0])}return this},Ea:function(t){return t},Ie:function(t,e){return t[0]-e[0]},Je:function(t,e){return t[1]-e[1]},toJSON:function(){return this.data},Df:function(t,e){for(var o=[];t;)t.wa?e.push.apply(e,t.children):o.push.apply(o,t.children),t=o.pop();return e},Ff:function(t,e,i,n){var r,s=i-e+1,a=this.Fe;if(s<=a)return r={children:t.slice(e,i+1),height:1,bbox:null,wa:!0},o(r,this.Ea),r;n||(n=Math.ceil(Math.log(s)/Math.log(a)),a=Math.ceil(s/Math.pow(a,n-1))),r={children:[],height:n,bbox:null};var p,l,h,s=Math.ceil(s/a),a=s*Math.ceil(Math.sqrt(a));for(u(t,e,i,a,this.Ie);e<=i;e+=a)for(l=Math.min(e+a-1,i),u(t,e,l,s,this.Je),p=e;p<=l;p+=s)h=Math.min(p+s-1,l),r.children.push(this.Ff(t,p,h,n-1));return o(r,this.Ea),r},oi:function(t,e,o,i){for(var n,r,s,p,l,h,u,c;i.push(e),!e.wa&&i.length-1!==o;){for(u=c=1/0,n=0,r=e.children.length;n<r;n++){s=e.children[n],l=a(s.bbox),h=t;var f=s.bbox;h=(Math.max(f[2],h[2])-Math.min(f[0],h[0]))*(Math.max(f[3],h[3])-Math.min(f[1],h[1]))-l,h<c?(c=h,u=l<u?l:u,p=s):h===c&&l<u&&(u=l,p=s)}e=p}return e},Gf:function(t,e,o){var i=this.Ea;o=o?t.bbox:i(t);var i=[],r=this.oi(o,this.data,e,i);for(r.children.push(t),n(r.bbox,o);0<=e&&i[e].children.length>this.Fe;)this.ri(i,e),e--;this.li(o,i,e)},ri:function(t,e){var i=t[e],n=i.children.length,r=this.Hf;this.mi(i,r,n),n={children:i.children.splice(this.ni(i,r,n)),height:i.height},i.wa&&(n.wa=!0),o(i,this.Ea),o(n,this.Ea),e?t[e-1].children.push(n):this.If(i,n)},If:function(t,e){this.data={children:[t,e],height:t.height+1},o(this.data,this.Ea)},ni:function(t,e,o){var n,r,s,p,l,h,u;for(l=h=1/0,n=e;n<=o-e;n++){r=i(t,0,n,this.Ea),s=i(t,n,o,this.Ea);var c=r,f=s;p=Math.max(c[0],f[0]);var y=Math.max(c[1],f[1]),d=Math.min(c[2],f[2]),c=Math.min(c[3],f[3]);p=Math.max(0,d-p)*Math.max(0,c-y),r=a(r)+a(s),p<l?(l=p,u=n,h=r<h?r:h):p===l&&r<h&&(h=r,u=n)}return u},mi:function(t,e,o){var i=t.wa?this.Ie:r,n=t.wa?this.Je:s,a=this.Ef(t,e,o,i);e=this.Ef(t,e,o,n),a<e&&t.children.sort(i)},Ef:function(t,e,o,r){t.children.sort(r),r=this.Ea;var s,a,l=i(t,0,e,r),h=i(t,o-e,o,r),u=p(l)+p(h);for(s=e;s<o-e;s++)a=t.children[s],n(l,t.wa?r(a):a.bbox),u+=p(l);for(s=o-e-1;s>=e;s--)a=t.children[s],n(h,t.wa?r(a):a.bbox),u+=p(h);return u},li:function(t,e,o){for(;0<=o;o--)n(e[o].bbox,t)},pi:function(t){for(var e,i=t.length-1;0<=i;i--)0===t[i].children.length?0<i?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():o(t[i],this.Ea)},qi:function(t){var e=["return a"," - b",";"];this.Ie=new Function("a","b",e.join(t[0])),this.Je=new Function("a","b",e.join(t[1])),this.Ea=new Function("a","return [a"+t.join(", a")+"];")}},"function"==typeof define&&define.Lo?define("rbush",function(){return e}):"undefined"!=typeof t?t.Qf=e:"undefined"!=typeof self?self.b=e:window.b=e}(),Ow=t.Qf}(),em=au.prototype,em.ha=function(t,e){var o=[t[0],t[1],t[2],t[3],e];this.a.ha(o),this.b[c(e)]=o},em.load=function(t,e){for(var o=Array(e.length),i=0,n=e.length;i<n;i++){var r=t[i],s=e[i],r=[r[0],r[1],r[2],r[3],s];o[i]=r,this.b[c(s)]=r}this.a.load(o)},em.remove=function(t){t=c(t);var e=this.b[t];return et(this.b,t),null!==this.a.remove(e)},em.update=function(t,e){var o=c(e);Xe(this.b[o].slice(0,4),t)||(this.remove(e),this.ha(t,e))},em.forEach=function(t,e){return uu(pu(this),t,e)},em.la=function(){return Q(this.b)},em.clear=function(){this.a.clear(),this.b={}},em.G=function(){return this.a.data.bbox},v(cu,sn),em=cu.prototype,em.jf=function(t){var e=c(t).toString();if(yu(this,e,t)){fu(this,e,t);var o=t.Q();null!=o?(e=o.G(),this.a.ha(e,t)):this.c[e]=t,this.dispatchEvent(new mu("addfeature",t))}this.k()},em.Oc=function(t){du(this,t),this.k()},em.clear=function(t){if(t){for(var e in this.i)P(this.i[e],Kt);this.i={},this.e={},this.g={}}else t=this.ph,this.a.forEach(t,this),W(this.c,t,this);this.a.clear(),this.N.clear(),this.c={},this.dispatchEvent(new mu("clear")),this.k()},em.Rf=function(t,e){return this.a.forEach(t,e)},em.$c=function(t,e,o){return hu(this.a,t,e,o)},em.Ab=function(t,e,o,i){return this.$c(t,o,i)},em.Oe=function(t,e,o){return this.$c(t,function(i){if(i.Q().ra(t)&&(i=e.call(o,i)))return i})},em.Dc=function(){var t=pu(this.a);return Q(this.c)||F(t,V(this.c)),t},em.Re=function(t){var e=[];return gu(this,t,function(t){e.push(t)}),e},em.Se=function(t){return lu(this.a,t)},em.Tf=function(t){var e=t[0],o=t[1],i=null,n=[NaN,NaN],r=1/0,s=[-(1/0),-(1/0),1/0,1/0];return hu(this.a,s,function(t){var a=t.Q(),p=r;r=a.Sa(e,o,n,r),r<p&&(i=t,t=Math.sqrt(r),s[0]=e-t,s[1]=o-t,s[2]=e+t,s[3]=o+t)}),i},em.G=function(){return this.a.G()},em.Qe=function(e){return e=this.e[e.toString()],t(e)?e:null},em.Pg=function(e){e=e.target;var o=c(e).toString(),i=e.Q();null!=i?(i=i.G(),o in this.c?(delete this.c[o],this.a.ha(i,e)):this.a.update(i,e)):o in this.c||(this.a.remove(e),this.c[o]=e),i=e.$,t(i)?(i=i.toString(),o in this.g?(delete this.g[o],this.e[i]=e):this.e[i]!==e&&(vu(this,e),this.e[i]=e)):o in this.g||(vu(this,e),this.g[o]=e),this.k(),this.dispatchEvent(new mu("changefeature",e))},em.la=function(){return this.a.la()&&Q(this.c)},em.ac=function(t,e,o){var i=this.N;t=this.oa(t,e);var n,r;for(n=0,r=t.length;n<r;++n){var s=t[n];hu(i,s,function(t){return Be(t.extent,s)})||(this.J.call(this,s,e,o),i.ha(s,{extent:s.slice()}))}},em.Qg=function(t){var e=c(t).toString();e in this.c?delete this.c[e]:this.a.remove(t),this.ph(t),this.k()},em.ph=function(e){var o=c(e).toString();P(this.i[o],Kt),delete this.i[o];var i=e.$;t(i)?delete this.e[i.toString()]:delete this.g[o],this.dispatchEvent(new mu("removefeature",e))},v(mu,Pt),v(bu,Ul),em=bu.prototype,em.zi=function(e,o,i,n,r){var s=new el(.5*o/i,e,o);this.a.ac(e,o,r);var a=!1;return this.a.Ab(e,o,function(e){var n;if(!(n=a)){var r;if(t(e.c)?r=e.c.call(e,o):t(this.g)&&(r=this.g(e,o)),null!=r){var p,l=!1;for(n=0,p=r.length;n<p;++n)l=Nl(s,e,r[n],Ll(o,i),this.$l,this)||l;n=l}else n=!1}a=n},this),ol(s),a?null:(this.e[0]!=n[0]||this.e[1]!=n[1]?(this.c.canvas.width=n[0],this.c.canvas.height=n[1],this.e[0]=n[0],this.e[1]=n[1]):this.c.clearRect(0,0,n[0],n[1]),e=wu(this,_e(e),o,i,n),il(s,this.c,i,e,0,{}),this.n=s,this.c.canvas)},em.ge=function(t,e,o,i,n){if(null!==this.n){var r={};return this.n.c(t,e,0,i,function(t){var e=c(t).toString();if(!(e in r))return r[e]=!0,n(t)})}},em.Xl=function(){return this.a},em.Yl=function(){return this.p},em.Zl=function(){return this.g},em.$l=function(){this.k()},em.am=function(){pn(this,this.a.o)},em.Mg=function(e){this.p=t(e)?e:rp,this.g=null===e?void 0:np(this.p),this.k()},v(xu,rl),em=xu.prototype,em.Pa=function(t,e,o,i){var n=this.a;return n.da().ge(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,n)})},em.dc=function(t,e,o,i){if(!r(this.fe()))if(this.a.da()instanceof bu){if(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t),this.Pa(t,e,lb,this))return o.call(i,this.a)}else if(null===this.d&&(this.d=Te(),Ae(this.f,this.d)),e=pl(t,this.d),null===this.c&&(this.c=mr(1,1)),this.c.clearRect(0,0,1,1),this.c.drawImage(this.fe(),e[0],e[1],1,1,0,0,1,1),0<this.c.getImageData(0,0,1,1).data[3])return o.call(i,this.a)},em.fe=function(){return null===this.e?null:this.e.b()},em.Xf=function(){return this.f},em.ff=function(e,o){var i,n=e.pixelRatio,r=e.viewState,s=r.center,a=r.resolution,p=r.rotation,l=this.a.da(),h=e.viewHints;if(i=e.extent,t(o.extent)&&(i=eo(i,o.extent)),h[0]||h[1]||so(i)||(r=r.projection,h=l.f,null===h||(r=h),i=l.Cc(i,a,n,r),null!==i&&os(this,i)&&(this.e=i)),null!==this.e){i=this.e;var r=i.G(),h=i.resolution,u=i.e,a=n*h/(a*u);Jr(this.f,n*e.size[0]/2,n*e.size[1]/2,a,a,p,u*(r[0]-s[0])/h,u*(s[1]-r[3])/h),this.d=null,rs(e.attributions,i.f),ss(e,l)}return!0},v(Su,rl),Su.prototype.fe=function(){return this.f},Su.prototype.Xf=function(){return this.l},Su.prototype.ff=function(e,o){var i,n=e.pixelRatio,r=e.viewState,s=r.projection,a=this.a,p=a.da(),l=kn(p,s),h=p.Cd(),u=Sn(l,r.resolution),c=p.Xb(u,e.pixelRatio,s),f=c[0]/he(l.na(u),this.L)[0],y=l.ma(u),f=y/f,d=r.center;if(y==r.resolution?(d=ps(d,y,e.size),i=Qe(d,y,r.rotation,e.size)):i=e.extent,t(o.extent)&&(i=eo(i,o.extent)),so(i))return!1;var g,v,m=dn(l,i,y),b=c[0]*_o(m),w=c[1]*(m.a-m.c+1);null===this.f?(v=mr(b,w),this.f=v.canvas,this.c=[b,w],this.g=v,this.q=!yw(this.c)):(g=this.f,v=this.g,this.c[0]<b||this.c[1]<w||this.H!==c[0]||this.p!==c[1]||this.q&&(this.c[0]>b||this.c[1]>w)?(g.width=b,g.height=w,this.c=[b,w],this.q=!yw(this.c),this.d=null):(b=this.c[0],w=this.c[1],(g=u!=this.n)||(g=this.d,g=!(g.b<=m.b&&m.d<=g.d&&g.c<=m.c&&m.a<=g.a)),g&&(this.d=null)));var x,S;null===this.d?(b/=c[0],w/=c[1],x=m.b-Math.floor((b-_o(m))/2),S=m.c-Math.floor((w-(m.a-m.c+1))/2),this.n=u,this.H=c[0],this.p=c[1],this.d=new zo(x,x+b-1,S,S+w-1),this.i=Array(b*w),w=this.d):(w=this.d,b=_o(w)),g={},g[u]={};var T,C,M,P=[],E=this.yd(p,g),A=a.c(),R=qe(),j=new zo(0,0,0,0);for(S=m.b;S<=m.d;++S)for(M=m.c;M<=m.a;++M)C=p.Vb(u,S,M,n,s),x=C.state,2==x||4==x||3==x&&!A?g[u][Ko(C.b)]=C:(T=l.Ad(C.b,E,null,j,R),T||(P.push(C),T=l.Ld(C.b,j,R),null===T||E(u+1,T)));for(E=0,T=P.length;E<T;++E)C=P[E],S=c[0]*(C.b[1]-w.b),M=c[1]*(w.a-C.b[2]),v.clearRect(S,M,c[0],c[1]);P=k(Y(g),Number),U(P);var L,N,I,D,F,O,B=p.X,G=oo(mn(l,[u,w.b,w.a],R)),E=0;for(T=P.length;E<T;++E)if(L=P[E],c=p.Xb(L,n,s),D=g[L],L==u)for(I in D)C=D[I],N=(C.b[2]-w.c)*b+(C.b[1]-w.b),this.i[N]!=C&&(S=c[0]*(C.b[1]-w.b),M=c[1]*(w.a-C.b[2]),x=C.state,4!=x&&(3!=x||A)&&B||v.clearRect(S,M,c[0],c[1]),2==x&&v.drawImage(C.Ma(),h,h,c[0],c[1],S,M,c[0],c[1]),this.i[N]=C);else for(I in L=l.ma(L)/y,D)for(C=D[I],N=mn(l,C.b,R),S=(N[0]-G[0])/f,M=(G[1]-N[3])/f,O=L*c[0],F=L*c[1],x=C.state,4!=x&&B||v.clearRect(S,M,O,F),2==x&&v.drawImage(C.Ma(),h,h,c[0],c[1],S,M,O,F),C=gn(l,N,u,j),x=Math.max(C.b,w.b),M=Math.min(C.d,w.d),S=Math.max(C.c,w.c),C=Math.min(C.a,w.a);x<=M;++x)for(F=S;F<=C;++F)N=(F-w.c)*b+(x-w.b),this.i[N]=void 0;return as(e.usedTiles,p,u,m),ls(e,p,l,n,s,i,u,a.a()),ns(e,p),ss(e,p),Jr(this.l,n*e.size[0]/2,n*e.size[1]/2,n*f/r.resolution,n*f/r.resolution,r.rotation,(G[0]-d[0])/f,(d[1]-G[1])/f),this.e=null,!0},Su.prototype.dc=function(t,e,o,i){if(null!==this.g&&(null===this.e&&(this.e=Te(),Ae(this.l,this.e)),t=pl(t,this.e),0<this.g.getImageData(t[0],t[1],1,1).data[3]))return o.call(i,this.a)},v(Tu,rl),Tu.prototype.o=function(t,e,o){var i=t.extent,n=t.focus,r=t.pixelRatio,s=t.skippedFeatureUids,a=t.viewState,p=a.projection,a=a.rotation,l=p.G(),h=this.a.da(),u=al(this,t,0);sl(this,"precompose",o,t,u);var c=this.c;if(null!==c&&!c.la()){var f;ee(this.a,"render")?(this.e.canvas.width=o.canvas.width,this.e.canvas.height=o.canvas.height,f=this.e):f=o;var y=f.globalAlpha;if(f.globalAlpha=e.opacity,e={},n=n[0],h.H&&p.c&&!Be(l,i)){p=l[0],h=l[2],il(c,f,r,u,a,p<=n&&n<=h?s:e);for(var d,g=i[0],v=no(l),m=0;g<l[0];)--m,d=v*m,u=al(this,t,d),il(c,f,r,u,a,p+d<=n&&n<=h+d?s:e),g+=v;for(m=0,g=i[2];g>l[2];)++m,d=v*m,u=al(this,t,d),il(c,f,r,u,a,p+d<=n&&n<=h+d?s:e),g-=v}else il(c,f,r,u,a,s);f!=o&&(sl(this,"render",f,t,u),o.drawImage(f.canvas,0,0)),f.globalAlpha=y}sl(this,"postcompose",o,t,u)},Tu.prototype.Pa=function(t,e,o,i){if(null!==this.c){var n=this.a,r={};return this.c.c(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){var e=c(t).toString();if(!(e in r))return r[e]=!0,o.call(i,t,n)})}},Tu.prototype.l=function(){is(this)},Tu.prototype.ff=function(e){function o(e){var o;if(t(e.c)?o=e.c.call(e,h):t(i.a)&&(o=(0,i.a)(e,h)),null!=o){if(null!=o){var n,r,s=!1;for(n=0,r=o.length;n<r;++n)s=Nl(f,e,o[n],Ll(h,u),this.l,this)||s;e=s}else e=!1;this.d=this.d||e}}var i=this.a,n=i.da();rs(e.attributions,n.d),ss(e,n);var r=e.viewHints[0],s=e.viewHints[1],a=i.o,p=i.n;if(!this.d&&!a&&r||!p&&s)return!0;var l=e.extent,r=e.viewState,s=r.projection,h=r.resolution,u=e.pixelRatio,a=i.b,c=i.c,p=i.get("renderOrder");if(t(p)||(p=jl),l=De(l,c*h),c=r.projection.G(),n.H&&r.projection.c&&!Be(c,e.extent)&&(l[0]=c[0],l[2]=c[2]),!this.d&&this.i==h&&this.q==a&&this.g==p&&Be(this.f,l))return!0;Mt(this.c),this.c=null,this.d=!1;var f=new el(.5*h/u,l,h,i.c);if(n.ac(l,h,s),null===p)n.Ab(l,h,o,this);else{var y=[];n.Ab(l,h,function(t){y.push(t)},this),U(y,p),P(y,o,this)}return ol(f),this.i=h,this.q=a,this.g=p,this.f=l,this.c=f,!0},v(Cu,ys),Cu.prototype.Ke=function(t){return t instanceof Rp?new xu(t):t instanceof jp?new Su(t):t instanceof Lp?new Tu(t):null},Cu.prototype.M=function(){return"canvas"},Cu.prototype.ue=function(t){if(null===t)this.a&&(Wi(this.b,!1),this.a=!1);else{var e=this.d,o=t.size[0]*t.pixelRatio,i=t.size[1]*t.pixelRatio;this.b.width!=o||this.b.height!=i?(this.b.width=o,this.b.height=i):e.clearRect(0,0,this.b.width,this.b.height),ds(t),Mu(this,"precompose",t);var n,r,s,a,o=t.layerStatesArray,i=t.viewState.resolution;for(n=0,r=o.length;n<r;++n)a=o[n],s=a.layer,s=vs(this,s),Zr(a,i)&&"ready"==a.i&&s.ff(t,a)&&s.o(t,a,e);Mu(this,"postcompose",t),this.a||(Wi(this.b,!0),this.a=!0),ms(this,t),t.postRenderFunctions.push(gs)}},v(Pu,es),Pu.prototype.e=o,Pu.prototype.i=o,v(Eu,Pu),Eu.prototype.Pa=function(t,e,o,i){var n=this.a;return n.da().ge(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,n)})},Eu.prototype.e=function(){mi(this.target),this.c=null},Eu.prototype.f=function(e,o){var i=e.viewState,n=i.center,r=i.resolution,s=i.rotation,a=this.c,p=this.a.da(),l=e.viewHints,h=e.extent;return t(o.extent)&&(h=eo(h,o.extent)),l[0]||l[1]||so(h)||(i=i.projection,l=p.f,null===l||(i=l),h=p.Cc(h,r,e.pixelRatio,i),null===h||os(this,h)&&(a=h)),null!==a&&(i=a.G(),l=a.resolution,h=Te(),Jr(h,e.size[0]/2,e.size[1]/2,l/r,l/r,s,(i[0]-n[0])/l,(n[1]-i[3])/l),a!=this.c&&(n=a.b(this),n.style.maxWidth="none",n.style.position="absolute",mi(this.target),this.target.appendChild(n),this.c=a),Qr(h,this.d)||(wr(this.target,h),Pe(this.d,h)),rs(e.attributions,a.f),ss(e,p)),!0},v(ku,Pu),ku.prototype.e=function(){mi(this.target),this.g=0},ku.prototype.f=function(e,o){if(!o.visible)return this.d&&(Wi(this.target,!1),this.d=!1),!0;var i,n=e.pixelRatio,r=e.viewState,s=r.projection,a=this.a,p=a.da(),l=kn(p,s),h=p.Cd(),u=Sn(l,r.resolution),c=l.ma(u),f=r.center;c==r.resolution?(f=ps(f,c,e.size),i=Qe(f,c,r.rotation,e.size)):i=e.extent,t(o.extent)&&(i=eo(i,o.extent));var c=dn(l,i,c),y={};y[u]={};var d,g,v,m,b=this.yd(p,y),w=a.c(),x=qe(),S=new zo(0,0,0,0);for(v=c.b;v<=c.d;++v)for(m=c.c;m<=c.a;++m)d=p.Vb(u,v,m,n,s),g=d.state,2==g?y[u][Ko(d.b)]=d:4==g||3==g&&!w||(g=l.Ad(d.b,b,null,S,x),g||(d=l.Ld(d.b,S,x),null===d||b(u+1,d)));var T;if(this.g!=p.b){for(T in this.c)w=this.c[+T],wi(w.target);this.c={},this.g=p.b}x=k(Y(y),Number),U(x);var C,b={};for(v=0,m=x.length;v<m;++v){T=x[v],T in this.c?w=this.c[T]:(w=l.cd(f,T),w=new Au(l,w),b[T]=!0,this.c[T]=w),T=y[T];for(C in T){d=w,g=T[C];var M=h,P=g.b,E=P[0],A=P[1],R=P[2],P=Ko(P);if(!(P in d.a)){var E=he(d.d.na(E),d.i),j=g.Ma(d),L=j.style;L.maxWidth="none";var N=void 0,I=void 0;0<M?(N=gi("DIV"),I=N.style,I.overflow="hidden",I.width=E[0]+"px",I.height=E[1]+"px",L.position="absolute",L.left=-M+"px",L.top=-M+"px",L.width=E[0]+2*M+"px",L.height=E[1]+2*M+"px",N.appendChild(j)):(L.width=E[0]+"px",L.height=E[1]+"px",N=j,I=L),I.position="absolute",I.left=(A-d.c[1])*E[0]+"px",I.top=(d.c[2]-R)*E[1]+"px",null===d.b&&(d.b=document.createDocumentFragment()),d.b.appendChild(N),d.a[P]=g}}null!==w.b&&(w.target.appendChild(w.b),w.b=null)}for(h=k(Y(this.c),Number),U(h),v=Te(),C=0,x=h.length;C<x;++C)if(T=h[C],w=this.c[T],T in y){if(d=w.g,m=w.f,Jr(v,e.size[0]/2,e.size[1]/2,d/r.resolution,d/r.resolution,r.rotation,(m[0]-f[0])/d,(f[1]-m[1])/d),m=w,d=v,Qr(d,m.e)||(wr(m.target,d),Pe(m.e,d)),T in b){for(--T;0<=T;--T)if(T in this.c){m=this.c[T].target,m.parentNode&&m.parentNode.insertBefore(w.target,m.nextSibling);break}0>T&&bi(this.target,w.target,0)}else if(!e.viewHints[0]&&!e.viewHints[1]){g=gn(w.d,i,w.c[0],S),T=[],d=m=void 0;for(d in w.a)m=w.a[d],g.contains(m.b)||T.push(m);for(M=g=void 0,g=0,M=T.length;g<M;++g)m=T[g],d=Ko(m.b),wi(m.Ma(w)),delete w.a[d]}}else wi(w.target),delete this.c[T];return o.opacity!=this.q&&(this.q=this.target.style.opacity=o.opacity),o.visible&&!this.d&&(Wi(this.target,!0),this.d=!0),as(e.usedTiles,p,u,c),ls(e,p,l,n,s,i,u,a.a()),ns(e,p),ss(e,p),!0},v(Ru,Pu),Ru.prototype.i=function(t,e){var o=t.viewState,i=o.center,n=o.rotation,r=o.resolution,o=t.pixelRatio,s=t.size[0],a=t.size[1],p=s*o,l=a*o,i=Jr(this.H,o*s/2,o*a/2,o/r,-o/r,-n,-i[0],-i[1]),r=this.g;r.canvas.width=p,r.canvas.height=l,s=Jr(this.p,0,0,1/o,1/o,0,-(p-s)/2*o,-(l-a)/2*o),wr(r.canvas,s),ju(this,"precompose",t,i),s=this.c,null===s||s.la()||(r.globalAlpha=e.opacity,il(s,r,o,i,n,t.skippedFeatureUids),ju(this,"render",t,i)),ju(this,"postcompose",t,i)},Ru.prototype.Pa=function(t,e,o,i){if(null!==this.c){var n=this.a,r={};return this.c.c(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){var e=c(t).toString();if(!(e in r))return r[e]=!0,o.call(i,t,n)})}},Ru.prototype.J=function(){is(this)},Ru.prototype.f=function(e){function o(e){var o;if(t(e.c)?o=e.c.call(e,l):t(i.a)&&(o=(0,i.a)(e,l)),null!=o){if(null!=o){var n,r,s=!1;for(n=0,r=o.length;n<r;++n)s=Nl(u,e,o[n],Ll(l,h),this.J,this)||s;e=s}else e=!1;this.d=this.d||e}}var i=this.a,n=i.da();rs(e.attributions,n.d),ss(e,n);var r=e.viewHints[0],s=e.viewHints[1],a=i.o,p=i.n;if(!this.d&&!a&&r||!p&&s)return!0;var s=e.extent,a=e.viewState,r=a.projection,l=a.resolution,h=e.pixelRatio;if(e=i.b,p=i.c,a=i.get("renderOrder"),t(a)||(a=jl),s=De(s,p*l),!this.d&&this.o==l&&this.n==e&&this.l==a&&Be(this.q,s))return!0;Mt(this.c),this.c=null,this.d=!1;var u=new el(.5*l/h,s,l,i.c);if(n.ac(s,l,r),null===a)n.Ab(s,l,o,this);else{var c=[];n.Ab(s,l,function(t){c.push(t)},this),U(c,a),P(c,o,this)}return ol(u),this.o=l,this.n=e,this.l=a,this.q=s,this.c=u,!0},v(Lu,ys),Lu.prototype.O=function(){wi(this.b),Lu.S.O.call(this)},Lu.prototype.Ke=function(t){if(t instanceof Rp)t=new Eu(t);else if(t instanceof jp)t=new ku(t);else{if(!(t instanceof Lp))return null;t=new Ru(t)}return t},Lu.prototype.M=function(){return"dom"},Lu.prototype.ue=function(t){if(null===t)this.d&&(Wi(this.b,!1),this.d=!1);else{var e;e=function(t,e){bi(this.b,t,e)};var o=this.g;if(ee(o,"precompose")||ee(o,"postcompose")){var o=this.a.canvas,i=t.pixelRatio;o.width=t.size[0]*i,o.height=t.size[1]*i}Nu(this,"precompose",t);var n,r,s,a,o=t.layerStatesArray,i=t.viewState.resolution;for(n=0,r=o.length;n<r;++n)a=o[n],s=a.layer,s=vs(this,s),e.call(this,s.target,n),Zr(a,i)&&"ready"==a.i?s.f(t,a)&&s.i(t,a):s.e();e=t.layerStates;for(var p in this.f)p in e||(s=this.f[p],wi(s.target));this.d||(Wi(this.b,!0),this.d=!0),ds(t),ms(this,t),t.postRenderFunctions.push(gs),Nu(this,"postcompose",t)}},v(Du,Iu),Du.prototype.M=function(){return 35632},v(Fu,Iu),Fu.prototype.M=function(){return 35633},v(Ou,Du),i(Ou),v(Bu,Fu),i(Bu),v(Gu,Du),i(Gu),v(qu,Fu),i(qu),em=Xu.prototype,em.O=function(){var t=this.b;t.isContextLost()||(W(this.a,function(e){t.deleteBuffer(e.buffer)}),W(this.e,function(e){t.deleteProgram(e)}),W(this.f,function(e){t.deleteShader(e)}),t.deleteFramebuffer(this.d),t.deleteRenderbuffer(this.i),t.deleteTexture(this.q))},em.Xm=function(){return this.b},em.Te=function(){if(null===this.d){var t=this.b,e=t.createFramebuffer();t.bindFramebuffer(t.FRAMEBUFFER,e);var o=Zu(t,1,1),i=t.createRenderbuffer();t.bindRenderbuffer(t.RENDERBUFFER,i),t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_COMPONENT16,1,1),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,o,0),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,i),t.bindTexture(t.TEXTURE_2D,null),t.bindRenderbuffer(t.RENDERBUFFER,null),t.bindFramebuffer(t.FRAMEBUFFER,null),this.d=e,this.q=o,this.i=i}return this.d},em.Ym=function(){tt(this.a),tt(this.f),tt(this.e),this.i=this.q=this.d=this.g=null},em.Zm=function(){},em.oe=function(t){return t!=this.g&&(this.b.useProgram(t),this.g=t,!0)},v(Ju,qa),Ju.prototype.jb=function(t,e){this.c.push(this.a.length),this.l.push(e);var o=t.j;tc(this,o,o.length,t.s)},Ju.prototype.kb=function(t,e){this.c.push(this.a.length),this.l.push(e);var o=t.j;tc(this,o,o.length,t.s)},Ju.prototype.Za=function(t){var e=t.mb(),o=t.Lb(1),i=t.Dd(),n=t.he(1),r=t.U,s=t.rb(),a=t.V,p=t.q,l=t.Xa();t=t.l;var h;0===this.e.length?this.e.push(o):(h=this.e[this.e.length-1],c(h)!=c(o)&&(this.U.push(this.a.length),this.e.push(o))),0===this.d.length?this.d.push(n):(h=this.d[this.d.length-1],c(h)!=c(n)&&(this.f.push(this.a.length),this.d.push(n))),this.V=e[0],this.n=e[1],this.J=l[1],this.L=i[1],this.N=i[0],this.T=r,this.sa=s[0],this.X=s[1],this.oa=p,this.ba=a,this.Fa=t,this.Ga=l[0]},rc.prototype.b=function(e,o){var i=this.a[o];return t(i)||(i=new zw[o](this.f,this.e),this.a[o]=i),i},rc.prototype.la=function(){return Q(this.a)},rc.prototype.c=function(e,o,i,n,r,s,a,p,l,h,u,c,f,y){var d=o.b;d.bindFramebuffer(d.FRAMEBUFFER,o.Te());var g;return t(this.d)&&(g=De(He(e),n*this.d)),pc(this,o,e,n,r,p,l,h,u,c,f,function(t){var e=new Uint8Array(4);if(d.readPixels(0,0,1,1,d.RGBA,d.UNSIGNED_BYTE,e),0<e[3]&&(t=y(t)))return t},!0,g)};var zw={Image:Ju},Vw=[1,1];v(hc,qa),em=hc.prototype,em.tc=function(e,o){var i=e.toString(),n=this.b[i];t(n)?n.push(o):this.b[i]=[o]},em.uc=function(){},em.Le=function(e,o){var i=(0,o.d)(e);if(null!=i&&ro(this.d,i.G())){var n=o.b;t(n)||(n=0),this.tc(n,function(t){t.Aa(o.e,o.c),t.Za(o.f),t.Ba(o.a);var e=Yw[i.M()];e&&e.call(t,i,null)})}},em.zd=function(t,e){var o,i,n=t.d;for(o=0,i=n.length;o<i;++o){var r=n[o],s=Yw[r.M()];s&&s.call(this,r,e)}},em.kb=function(t,e){var o=this.a,i=new rc(1,this.d).b(0,"Image");i.Za(this.c),i.kb(t,e),ec(i,o),ic(i,this.a,this.e,this.f,this.g,this.i,1,0,1,0,1,{},void 0,!1),Qu(i,o)()},em.zb=function(){},em.vc=function(){},em.jb=function(t,e){var o=this.a,i=new rc(1,this.d).b(0,"Image");i.Za(this.c),i.jb(t,e),ec(i,o),ic(i,this.a,this.e,this.f,this.g,this.i,1,0,1,0,1,{},void 0,!1),Qu(i,o)()},em.wc=function(){},em.Rb=function(){},em.lb=function(){},em.Aa=function(){},em.Za=function(t){this.c=t},em.Ba=function(){};var Yw={Point:hc.prototype.kb,MultiPoint:hc.prototype.jb,GeometryCollection:hc.prototype.zd};v(uc,Du),i(uc),v(cc,Fu),i(cc),v(yc,Du),i(yc),v(dc,Fu),i(dc),v(vc,es),vc.prototype.Lg=function(t,e,o){bc(this,"precompose",o,t),Wu(o,34962,this.N);var i,n,r=o.b,s=e.brightness||1!=e.contrast||e.hue||1!=e.saturation;s?(i=uc.Ia(),n=cc.Ia()):(i=yc.Ia(),n=dc.Ia()),i=Vu(o,i,n),s?null===this.l?this.l=n=new fc(r,i):n=this.l:null===this.o?this.o=n=new gc(r,i):n=this.o,o.oe(i)&&(r.enableVertexAttribArray(n.b),r.vertexAttribPointer(n.b,2,5126,!1,16,0),r.enableVertexAttribArray(n.a),r.vertexAttribPointer(n.a,2,5126,!1,16,8),r.uniform1i(n.e,0)),r.uniformMatrix4fv(n.f,!1,this.q),r.uniformMatrix4fv(n.d,!1,this.n),s&&r.uniformMatrix4fv(n.g,!1,ai(this.T,e.brightness,e.contrast,e.hue,e.saturation)),r.uniform1f(n.c,e.opacity),r.bindTexture(3553,this.Qa),r.drawArrays(5,0,4),bc(this,"postcompose",o,t)},vc.prototype.gf=function(){this.e=this.Qa=null,this.f=void 0},v(wc,vc),wc.prototype.Pa=function(t,e,o,i){var n=this.a;return n.da().ge(t,e.viewState.resolution,e.viewState.rotation,e.skippedFeatureUids,function(t){return o.call(i,t,n)})},wc.prototype.hf=function(e,o){var i=this.c.e,n=e.pixelRatio,r=e.viewState,s=r.center,a=r.resolution,p=r.rotation,l=this.d,h=this.Qa,u=this.a.da(),c=e.viewHints,f=e.extent;return t(o.extent)&&(f=eo(f,o.extent)),c[0]||c[1]||so(f)||(r=r.projection,c=u.f,null===c||(r=c),f=u.Cc(f,a,n,r),null!==f&&os(this,f)&&(l=f,h=xc(this,f),null===this.Qa||e.postRenderFunctions.push(g(function(t,e){t.isContextLost()||t.deleteTexture(e)},i,this.Qa)))),null!==l&&(i=this.c.d.l,Sc(this,i.width,i.height,n,s,a,p,l.G()),this.i=null,n=this.q,Ee(n),je(n,1,-1),Re(n,0,-1),this.d=l,this.Qa=h,rs(e.attributions,l.f),ss(e,u)),!0},wc.prototype.ee=function(e,o){var i=this.Pa(e,o,lb,this);return t(i)},wc.prototype.dc=function(t,e,o,i){if(null!==this.d&&!r(this.d.b()))if(this.a.da()instanceof bu){if(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t),this.Pa(t,e,lb,this))return o.call(i,this.a)}else{var n=[this.d.b().width,this.d.b().height];if(null===this.i){var s=e.size;e=Te(),Ee(e),Re(e,-1,-1),je(e,2/s[0],2/s[1]),Re(e,0,s[1]),je(e,1,-1),s=Te(),Ae(this.n,s);var a=Te();Ee(a),Re(a,0,n[1]),je(a,1,-1),je(a,n[0]/2,n[1]/2),Re(a,1,1);var p=Te();ke(a,s,p),ke(p,e,p),this.i=p}if(e=[0,0],ts(this.i,t,e),!(0>e[0]||e[0]>n[0]||0>e[1]||e[1]>n[1])&&(null===this.g&&(this.g=mr(1,1)),this.g.clearRect(0,0,1,1),this.g.drawImage(this.d.b(),e[0],e[1],1,1,0,0,1,1),0<this.g.getImageData(0,0,1,1).data[3]))return o.call(i,this.a)}},v(Tc,Du),i(Tc),v(Cc,Fu),i(Cc),v(Pc,vc),em=Pc.prototype,em.O=function(){Ku(this.c.d,this.H),Pc.S.O.call(this)},em.yd=function(t,e){var o=this.c;return function(i,n){return En(t,i,n,function(t){var n=tn(o.a,t.gb());return n&&(e[i]||(e[i]={}),e[i][t.b.toString()]=t),n})}},em.gf=function(){Pc.S.gf.call(this),this.d=null},em.hf=function(e,o,i){var n,r=this.c,s=i.b,a=e.viewState,p=a.projection,l=this.a,h=l.da(),u=kn(h,p),c=Sn(u,a.resolution),f=u.ma(c),y=h.Xb(c,e.pixelRatio,p),d=y[0]/he(u.na(c),this.L)[0],g=f/d,v=h.Cd(),m=a.center;if(f==a.resolution?(m=ps(m,f,e.size),n=Qe(m,f,a.rotation,e.size)):n=e.extent,f=dn(u,n,f),null!==this.g&&Zo(this.g,f)&&this.i==h.b)g=this.p;else{var b=[_o(f),f.a-f.c+1],b=Math.max(b[0]*y[0],b[1]*y[1]),w=Math.pow(2,Math.ceil(Math.log(b)/Math.LN2)),b=g*w,x=u.Mb(c),S=x[0]+f.b*y[0]*g,g=x[1]+f.c*y[1]*g,g=[S,g,S+b,g+b];mc(this,e,w),s.viewport(0,0,w,w),s.clearColor(0,0,0,0),s.clear(16384),s.disable(3042),w=Vu(i,this.J,this.X),i.oe(w),null===this.d&&(this.d=new Mc(s,w)),Wu(i,34962,this.H),s.enableVertexAttribArray(this.d.b),s.vertexAttribPointer(this.d.b,2,5126,!1,16,0),s.enableVertexAttribArray(this.d.a),s.vertexAttribPointer(this.d.a,2,5126,!1,16,8),s.uniform1i(this.d.c,0),i={},i[c]={};var T,C,M,P=this.yd(h,i),E=l.c(),w=!0,S=qe(),A=new zo(0,0,0,0);for(C=f.b;C<=f.d;++C)for(M=f.c;M<=f.a;++M)if(x=h.Vb(c,C,M,d,p),!t(o.extent)||(T=mn(u,x.b,S),ro(T,o.extent))){if(T=x.state,2==T){if(tn(r.a,x.gb())){i[c][Ko(x.b)]=x;continue}}else if(4==T||3==T&&!E)continue;w=!1,T=u.Ad(x.b,P,null,A,S),T||(x=u.Ld(x.b,A,S),null===x||P(c+1,x))}o=k(Y(i),Number),U(o);for(var R,j,L,P=new Float32Array(4),E=0,A=o.length;E<A;++E)for(R in j=i[o[E]])x=j[R],T=mn(u,x.b,S),C=2*(T[2]-T[0])/b,M=2*(T[3]-T[1])/b,L=2*(T[0]-g[0])/b-1,T=2*(T[1]-g[1])/b-1,Se(P,C,M,L,T),s.uniform4fv(this.d.d,P),Ac(r,x,y,v*d),s.drawArrays(5,0,4);w?(this.g=f,this.p=g,this.i=h.b):(this.p=this.g=null,this.i=-1,e.animate=!0)}as(e.usedTiles,h,c,f);var N=r.q;return ls(e,h,u,d,p,n,c,l.a(),function(t){var e;(e=2!=t.state||tn(r.a,t.gb()))||(e=t.gb()in N.c),e||xs(N,[t,vn(u,t.b),u.ma(t.b[0]),y,v*d])},this),ns(e,h),ss(e,h),s=this.q,Ee(s),Re(s,(m[0]-g[0])/(g[2]-g[0]),(m[1]-g[1])/(g[3]-g[1])),0!==a.rotation&&Le(s,a.rotation),je(s,e.size[0]*a.resolution/(g[2]-g[0]),e.size[1]*a.resolution/(g[3]-g[1])),Re(s,-.5,-.5),!0},em.dc=function(t,e,o,i){if(null!==this.e){var n=[0,0];if(ts(this.q,[t[0]/e.size[0],(e.size[1]-t[1])/e.size[1]],n),t=[n[0]*this.f,n[1]*this.f],e=this.c.d.b,e.bindFramebuffer(e.FRAMEBUFFER,this.e),n=new Uint8Array(4),e.readPixels(t[0],t[1],1,1,e.RGBA,e.UNSIGNED_BYTE,n),0<n[3])return o.call(i,this.a)}},v(Ec,vc),em=Ec.prototype,em.Lg=function(e,o,i){this.g=o;var n=e.viewState,r=this.d;if(null!==r&&!r.la()){var s=n.center,a=n.resolution,n=n.rotation,p=e.size,l=o.opacity,h=o.brightness,u=o.contrast,c=o.hue;o=o.saturation,e=e.skippedFeatureUids;var f,y,d;for(f=0,y=cw.length;f<y;++f)d=r.a[cw[f]],t(d)&&ic(d,i,s,a,n,p,l,h,u,c,o,e,void 0,!1)}},em.O=function(){var t=this.d;null!==t&&(sc(t,this.c.d)(),this.d=null),Ec.S.O.call(this)},em.Pa=function(t,e,o,i){if(null!==this.d&&null!==this.g){var n=e.viewState,r=this.a,s=this.g,a={};return this.d.c(t,this.c.d,n.center,n.resolution,n.rotation,e.size,e.pixelRatio,s.opacity,s.brightness,s.contrast,s.hue,s.saturation,e.skippedFeatureUids,function(t){
+var e=c(t).toString();if(!(e in a))return a[e]=!0,o.call(i,t,r)})}},em.ee=function(t,e){if(null===this.d||null===this.g)return!1;var o=e.viewState,i=this.g;return lc(this.d,t,this.c.d,o.resolution,o.rotation,i.opacity,i.brightness,i.contrast,i.hue,i.saturation,e.skippedFeatureUids)},em.dc=function(t,e,o,i){if(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t),this.ee(t,e))return o.call(i,this.a)},em.Rl=function(){is(this)},em.hf=function(e,o,i){function n(e){var o;if(t(e.c)?o=e.c.call(e,h):t(r.a)&&(o=(0,r.a)(e,h)),null!=o){if(null!=o){var i,n,s=!1;for(i=0,n=o.length;i<n;++i)s=Nl(f,e,o[i],Ll(h,u),this.Rl,this)||s;e=s}else e=!1;this.i=this.i||e}}var r=this.a;o=r.da(),rs(e.attributions,o.d),ss(e,o);var s=e.viewHints[0],a=e.viewHints[1],p=r.o,l=r.n;if(!this.i&&!p&&s||!l&&a)return!0;var a=e.extent,p=e.viewState,s=p.projection,h=p.resolution,u=e.pixelRatio,p=r.b,c=r.c,l=r.get("renderOrder");if(t(l)||(l=jl),a=De(a,c*h),!this.i&&this.J==h&&this.L==p&&this.H==l&&Be(this.p,a))return!0;null===this.d||e.postRenderFunctions.push(sc(this.d,i)),this.i=!1;var f=new rc(.5*h/u,a,r.c);if(o.ac(a,h,s),null===l)o.Ab(a,h,n,this);else{var y=[];o.Ab(a,h,function(t){y.push(t)},this),U(y,l),P(y,n,this)}return ac(f,i),this.J=h,this.L=p,this.H=l,this.p=a,this.d=f,!0},v(kc,ys),em=kc.prototype,em.Ke=function(t){return t instanceof Rp?new wc(this,t):t instanceof jp?new Pc(this,t):t instanceof Lp?new Ec(this,t):null},em.O=function(){var t=this.e;t.isContextLost()||this.a.forEach(function(e){null===e||t.deleteTexture(e.Qa)}),Mt(this.d),kc.S.O.call(this)},em.Ci=function(t,e){for(var o,i=this.e;1024<this.a.Tb()-this.i;){if(o=this.a.b.qc,null===o){if(+this.a.b.Wd==e.index)break;--this.i}else i.deleteTexture(o.Qa);this.a.pop()}},em.M=function(){return"webgl"},em.Pl=function(t){t.preventDefault(),this.a.clear(),this.i=0,W(this.f,function(t){t.gf()})},em.Ql=function(){jc(this),this.g.render()},em.ue=function(t){var e=this.d,o=this.e;if(o.isContextLost())return!1;if(null===t)return this.l&&(Wi(this.b,!1),this.l=!1),!1;this.n=t.focus,this.a.set((-t.index).toString(),null),++this.i;var i,n,r,s,a=[],p=t.layerStatesArray,l=t.viewState.resolution;for(i=0,n=p.length;i<n;++i)s=p[i],Zr(s,l)&&"ready"==s.i&&(r=vs(this,s.layer),r.hf(t,s,e)&&a.push(s));for(p=t.size[0]*t.pixelRatio,l=t.size[1]*t.pixelRatio,this.b.width==p&&this.b.height==l||(this.b.width=p,this.b.height=l),o.bindFramebuffer(36160,null),o.clearColor(0,0,0,0),o.clear(16384),o.enable(3042),o.viewport(0,0,this.b.width,this.b.height),Rc(this,"precompose",t),i=0,n=a.length;i<n;++i)s=a[i],r=vs(this,s.layer),r.Lg(t,s,e);this.l||(Wi(this.b,!0),this.l=!0),ds(t),1024<this.a.Tb()-this.i&&t.postRenderFunctions.push(d(this.Ci,this)),this.q.la()||(t.postRenderFunctions.push(this.L),t.animate=!0),Rc(this,"postcompose",t),ms(this,t),t.postRenderFunctions.push(gs)},em.ef=function(t,e,o,i,n,r){var s;if(this.e.isContextLost())return!1;var a=this.d,p=e.viewState;if(null!==this.c){var l={},h=Zw;if(s=this.c.c(t,a,p.center,p.resolution,p.rotation,e.size,e.pixelRatio,h.opacity,h.brightness,h.contrast,h.hue,h.saturation,{},function(t){var e=c(t).toString();if(!(e in l))return l[e]=!0,o.call(i,t,null)}))return s}for(a=e.layerStatesArray,h=a.length-1;0<=h;--h){s=a[h];var u=s.layer;if(Zr(s,p.resolution)&&n.call(r,u)&&(s=vs(this,u).Pa(t,e,o,i)))return s}},em.Kg=function(t,e,o,i){var n=!1;if(this.e.isContextLost())return!1;var r=this.d,s=e.viewState;if(null!==this.c&&(n=Zw,n=lc(this.c,t,r,s.resolution,s.rotation,n.opacity,n.brightness,n.contrast,n.hue,n.saturation,{})))return!0;var a,r=e.layerStatesArray;for(a=r.length-1;0<=a;--a){var p=r[a],l=p.layer;if(Zr(p,s.resolution)&&o.call(i,l)&&(n=vs(this,l).ee(t,e)))return!0}return n},em.Jg=function(t,e,o,i,n){if(this.e.isContextLost())return!1;var r,s=this.d,a=e.viewState;if(null!==this.c){var p=Zw;if(r=this.g.ka(t),lc(this.c,r,s,a.resolution,a.rotation,p.opacity,p.brightness,p.contrast,p.hue,p.saturation,{})&&(r=o.call(i,null)))return r}for(s=e.layerStatesArray,p=s.length-1;0<=p;--p){r=s[p];var l=r.layer;if(Zr(r,a.resolution)&&n.call(i,l)&&(r=vs(this,l).dc(t,e,o,i)))return r}};var Zw={opacity:1,brightness:0,contrast:1,hue:0,saturation:1},_w=["canvas","webgl","dom"];v(Lc,re),em=Lc.prototype,em.si=function(t){this.e.push(t)},em.ti=function(t){this.d.push(t)},em.Jf=function(t){this.Ub().Bc().push(t)},em.Kf=function(t){this.f.push(t)},em.Ha=function(t){this.render(),Array.prototype.push.apply(this.H,arguments)},em.O=function(){wi(this.a),Lc.S.O.call(this)},em.Ne=function(e,o,i,n,r){if(null!==this.c)return e=this.ka(e),this.i.ef(e,this.c,o,t(i)?i:null,t(n)?n:lb,t(r)?r:null)},em.al=function(e,o,i,n,r){if(null!==this.c)return this.i.Jg(e,this.c,o,t(i)?i:null,t(n)?n:lb,t(r)?r:null)},em.ok=function(e,o,i){return null!==this.c&&(e=this.ka(e),this.i.Kg(e,this.c,t(o)?o:lb,t(i)?i:null))},em.Ui=function(t){return this.ka(this.Bd(t))},em.Bd=function(e){if(t(e.changedTouches)){var o=e.changedTouches[0];return e=qi(this.a),[o.clientX-e.x,o.clientY-e.y]}return o=this.a,e=qi(e),o=qi(o),o=new pi(e.x-o.x,e.y-o.y),[o.x,o.y]},em.df=function(){return this.get("target")},em.bd=function(){var e=this.df();return t(e)?ui(e):null},em.ka=function(t){var e=this.c;return null===e?null:(t=t.slice(),ts(e.pixelToCoordinateMatrix,t,t))},em.Si=function(){return this.e},em.oj=function(){return this.f},em.bj=function(){return this.d},em.Ub=function(){return this.get("layergroup")},em.vg=function(){return this.Ub().Bc()},em.ta=function(t){var e=this.c;return null===e?null:(t=t.slice(0,2),ts(e.coordinateToPixelMatrix,t,t))},em.xa=function(){return this.get("size")},em.R=function(){return this.get("view")},em.Bj=function(){return this.a},em.zj=function(t,e,o,i){var n=this.c;return null!==n&&e in n.wantedTiles&&n.wantedTiles[e][Ko(t.b)]?(t=o[0]-n.focus[0],o=o[1]-n.focus[1],65536*Math.log(i)+Math.sqrt(t*t+o*o)/i):1/0},em.dg=function(t,e){var o=new $r(e||t.type,this,t);this.eg(o)},em.eg=function(t){if(null!==this.c){this.L=t.coordinate,t.frameState=this.c;var e,o=this.d.a;if(!1!==this.dispatchEvent(t))for(e=o.length-1;0<=e;e--){var i=o[e];if(i.c()&&!i.handleEvent(t))break}}},em.gk=function(){var t=this.c,e=this.Fa;if(!e.la()){var o=16,i=o,n=0;if(null!==t&&(n=t.viewHints,n[0]&&(o=this.wb?8:0,i=2),n[1]&&(o=this.xb?8:0,i=2),n=z(t.wantedTiles)),o*=n,i*=n,e.d<o){for(Cs(e),o=Math.min(o-e.d,i,e.Tb()),i=0;i<o;++i)n=ws(e)[0],qt(n,"change",e.f,!1,e),n.load();e.d+=o}}for(e=this.ba,o=0,i=e.length;o<i;++o)e[o](this,t);e.length=0},em.jk=function(){this.render()},em.lk=function(){var t=this.bd();hr(this.n),null===t?(wi(this.a),null!==this.l&&(Kt(this.l),this.l=null)):(t.appendChild(this.a),lr(this.n,null===this.T?t:this.T),null===this.l&&(this.l=qt(this.Ga,"resize",this.Kc,!1,this))),this.Kc()},em.bl=function(){this.render()},em.nk=function(){this.render()},em.mk=function(){null!==this.J&&(Kt(this.J),this.J=null);var t=this.R();null!==t&&(this.J=qt(t,"propertychange",this.nk,!1,this)),this.render()},em.Rj=function(){this.render()},em.Sj=function(){this.render()},em.Qj=function(){if(null!==this.g){for(var t=this.g.length,e=0;e<t;++e)Kt(this.g[e]);this.g=null}t=this.Ub(),null!=t&&(this.g=[qt(t,"propertychange",this.Sj,!1,this),qt(t,"change",this.Rj,!1,this)]),this.render()},em.Rn=function(){var t=this.o;Wn(t),t.Pf()},em.render=function(){null!=this.o.$||this.o.start()},em.Ln=function(e){if(t(this.e.remove(e)))return e},em.Mn=function(e){var o;return t(this.d.remove(e))&&(o=e),o},em.Nn=function(t){return this.Ub().Bc().remove(t)},em.On=function(e){if(t(this.f.remove(e)))return e},em.Qn=function(e){var o,i,n,r=this.xa(),s=this.R(),a=null;if(t(r)&&0<r[0]&&0<r[1]&&null!==s&&Io(s)){var a=s.c.slice(),p=this.Ub().Ue(),l={};for(o=0,i=p.length;o<i;++o)l[c(p[o].layer)]=p[o];n=No(s),a={animate:!1,attributions:{},coordinateToPixelMatrix:this.Ra,extent:null,focus:null===this.L?n.center:this.L,index:this.vb++,layerStates:l,layerStatesArray:p,logos:nt(this.sc),pixelRatio:this.Nc,pixelToCoordinateMatrix:this.Ee,postRenderFunctions:[],size:r,skippedFeatureUids:this.N,tileQueue:this.Fa,time:e,usedTiles:{},viewState:n,viewHints:a,wantedTiles:{}}}if(null!==a){for(e=this.H,o=r=0,i=e.length;o<i;++o)s=e[o],s(this,a)&&(e[r++]=s);e.length=r,a.extent=Qe(n.center,n.resolution,n.rotation,a.size)}this.c=a,this.i.ue(a),null!==a&&(a.animate&&this.render(),Array.prototype.push.apply(this.ba,a.postRenderFunctions),0!==this.H.length||a.viewHints[0]||a.viewHints[1]||Xe(a.extent,this.oa)||(this.dispatchEvent(new _i("moveend",this,a)),Fe(a.extent,this.oa))),this.dispatchEvent(new _i("postrender",this,a)),Yn(this.gk,this)},em.zh=function(t){this.set("layergroup",t)},em.vf=function(t){this.set("size",t)},em.cl=function(t){this.set("target",t)},em.jo=function(t){this.set("view",t)},em.Eh=function(t){t=c(t).toString(),this.N[t]=!0,this.render()},em.Kc=function(){var t=this.bd();if(null===t)this.vf(void 0);else{var e=Ci(t),o=Mm&&t.currentStyle;o&&Ei(hi(e))&&"auto"!=o.width&&"auto"!=o.height&&!o.boxSizing?(e=Ki(t,o.width,"width","pixelWidth"),t=Ki(t,o.height,"height","pixelHeight"),t=new li(e,t)):(o=new li(t.offsetWidth,t.offsetHeight),e=Vi(t,"padding"),t=Zi(t),t=new li(o.width-t.left-e.left-e.right-t.right,o.height-t.top-e.top-e.bottom-t.bottom)),this.vf([t.width,t.height])}},em.Ih=function(t){t=c(t).toString(),delete this.N[t],this.render()},Ap(),v(Ic,re),em=Ic.prototype,em.$d=function(){return this.get("element")},em.ae=function(){return this.get("map")},em.Yf=function(){return this.get("offset")},em.wg=function(){return this.get("position")},em.ag=function(){return this.get("positioning")},em.Kj=function(){mi(this.Z);var t=this.$d();null!=t&&vi(this.Z,t)},em.Yj=function(){null!==this.c&&(wi(this.Z),Kt(this.c),this.c=null);var t=this.ae();null!=t&&(this.c=qt(t,"postrender",this.render,!1,this),Fc(this),t=this.i?t.p:t.X,this.g?bi(t,this.Z,0):vi(t,this.Z))},em.render=function(){Fc(this)},em.ck=function(){Fc(this)},em.ek=function(){if(Fc(this),t(this.get("position"))&&this.f){var e=this.ae();if(t(e)&&!r(e.bd())){var o=Dc(e.bd(),e.xa()),i=this.$d(),n=i.offsetWidth,s=i.currentStyle||window.getComputedStyle(i),n=n+(parseInt(s.marginLeft,10)+parseInt(s.marginRight,10)),s=i.offsetHeight,a=i.currentStyle||window.getComputedStyle(i),s=s+(parseInt(a.marginTop,10)+parseInt(a.marginBottom,10)),p=Dc(i,[n,s]),i=this.e;Be(o,p)||(n=p[0]-o[0],s=o[2]-p[2],a=p[1]-o[1],p=o[3]-p[3],o=[0,0],0>n?o[0]=n-i:0>s&&(o[0]=Math.abs(s)+i),0>a?o[1]=a-i:0>p&&(o[1]=Math.abs(p)+i),0===o[0]&&0===o[1])||(i=e.R().Ca(),n=e.ta(i),o=[n[0]+o[0],n[1]+o[1]],null!==this.d&&(this.d.source=i,e.Ha(Go(this.d))),e.R().Na(e.ka(o)))}}},em.fk=function(){Fc(this)},em.wh=function(t){this.set("element",t)},em.setMap=function(t){this.set("map",t)},em.Bh=function(t){this.set("offset",t)},em.uf=function(t){this.set("position",t)},em.Ch=function(t){this.set("positioning",t)},v(Oc,Ji),em=Oc.prototype,em.setMap=function(t){var e=this.a;t!==e&&(e&&(e=e.R())&&Wt(e,se("rotation"),this.Rd,!1,this),Oc.S.setMap.call(this,t),t&&(this.l.push(qt(t,"propertychange",this.Zj,!1,this)),0===this.d.vg().Ib()&&this.d.zh(t.Ub()),t=t.R()))&&(qt(t,se("rotation"),this.Rd,!1,this),Io(t)&&(this.d.Kc(),Uc(this)))},em.Zj=function(t){"view"===t.key&&((t=t.oldValue)&&Wt(t,se("rotation"),this.Rd,!1,this),t=this.a.R(),qt(t,se("rotation"),this.Rd,!1,this))},em.Rd=function(){this.d.R().be(this.a.R().Da())},em.ml=function(t){t.preventDefault(),qc(this)},em.ll=function(){return this.g},em.ol=function(t){this.g!==t&&(this.g=t,Ni(this.element,"ol-uncollapsible"),!t&&this.f&&qc(this))},em.nl=function(t){this.g&&this.f!==t&&qc(this)},em.kl=function(){return this.f},v($c,Ji);var Jw=[1,2,5];$c.prototype.p=function(){return this.get("units")},$c.prototype.N=function(){Xc(this)},$c.prototype.J=function(t){this.set("units",t)},v(Wc,Tt);var Qw=[];Wc.prototype.Ka=function(t,e,o,i){s(e)||(e&&(Qw[0]=e.toString()),e=Qw);for(var n=0;n<e.length;n++){var r=qt(t,e[n],o||this.handleEvent,i||!1,this.a||this);if(!r)break;this.b[r.key]=r}return this},Wc.prototype.wf=function(t,e,o,i,n){if(s(e))for(var r=0;r<e.length;r++)this.wf(t,e[r],o,i,n);else o=o||this.handleEvent,n=n||this.a||this,o=Jt(o),i=!!i,e=Nt(t)?Bt(t.ab,String(e),o,i,n):t&&(t=_t(t))?Bt(t,e,o,i,n):null,e&&(Kt(e),delete this.b[e.key]);return this},Wc.prototype.O=function(){Wc.S.O.call(this),Kc(this)},Wc.prototype.handleEvent=function(){throw Error("EventHandler.handleEvent not implemented")},v(zc,Qt);var tx=Mm||Pm&&pt("1.9.3");em=zc.prototype,em.clientX=0,em.clientY=0,em.screenX=0,em.screenY=0,em.Fh=0,em.Gh=0,em.yc=0,em.zc=0,em.Zb=!1,em.O=function(){zc.S.O.call(this),Wt(this.handle,["touchstart","mousedown"],this.cg,!1,this),Kc(this.a),tx&&this.c.releaseCapture(),this.handle=this.target=null},em.cg=function(t){var e="mousedown"==t.type;if(this.Zb||e&&!Lt(t))this.dispatchEvent("earlycancel");else if(Vc(t),this.dispatchEvent(new Qc("start",this,t.clientX,t.clientY))){this.Zb=!0,t.preventDefault();var e=this.c,o=e.documentElement,i=!tx;this.a.Ka(e,["touchmove","mousemove"],this.bk,i),this.a.Ka(e,["touchend","mouseup"],this.Od,i),tx?(o.setCapture(!1),this.a.Ka(o,"losecapture",this.Od)):this.a.Ka(e?e.parentWindow||e.defaultView:window,"blur",this.Od),this.e&&this.a.Ka(this.e,"scroll",this.en,i),this.clientX=this.Fh=t.clientX,this.clientY=this.Gh=t.clientY,this.screenX=t.screenX,this.screenY=t.screenY,this.yc=this.target.offsetLeft,this.zc=this.target.offsetTop,this.d=ki(hi(this.c)),lm()}},em.Od=function(t){if(Kc(this.a),tx&&this.c.releaseCapture(),this.Zb){Vc(t),this.Zb=!1;var e=_c(this,this.yc),o=Jc(this,this.zc);this.dispatchEvent(new Qc("end",this,t.clientX,t.clientY,0,e,o))}else this.dispatchEvent("earlycancel")},em.bk=function(t){Vc(t);var e=1*(t.clientX-this.clientX),o=t.clientY-this.clientY;if(this.clientX=t.clientX,this.clientY=t.clientY,this.screenX=t.screenX,this.screenY=t.screenY,!this.Zb){var i=this.Fh-this.clientX,n=this.Gh-this.clientY;if(0<i*i+n*n){if(!this.dispatchEvent(new Qc("start",this,t.clientX,t.clientY)))return void(this.U||this.Od(t));this.Zb=!0}}o=Yc(this,e,o),e=o.x,o=o.y,this.Zb&&this.dispatchEvent(new Qc("beforedrag",this,t.clientX,t.clientY,0,e,o))&&(Zc(this,t,e,o),t.preventDefault())},em.en=function(t){var e=Yc(this,0,0);t.clientX=this.clientX,t.clientY=this.clientY,Zc(this,t,e.x,e.y)},v(Qc,Pt),v(tf,Ji);var ex=0;em=tf.prototype,em.setMap=function(t){tf.S.setMap.call(this,t),null===t||t.render()},em.Gj=function(t){var e=this.a,o=e.R(),i=o.ya();e.Ha($o({resolution:i,duration:this.o,easing:Fo})),t=of(this,t.offsetX-this.i[0]/2,t.offsetY-this.i[1]/2),t=nf(this,t),o.tb(o.constrainResolution(t))},em.Jj=function(){Do(this.a.R(),1)},em.Hj=function(t){t=of(this,t.left,t.top),this.f=nf(this,t),this.a.R().tb(this.f)},em.Ij=function(){var t=this.a,e=t.R();Do(e,-1),t.Ha($o({resolution:this.f,duration:this.o,easing:Fo})),t=e.constrainResolution(this.f),e.tb(t)},v(rf,Ji),rf.prototype.f=function(t){t.preventDefault();var e=this.a;t=e.R();var o=null===this.d?t.e.G():this.d,e=e.xa();t.Me(o,e)},v(sf,re),em=sf.prototype,em.O=function(){this.bf(!1),sf.S.O.call(this)},em.fn=function(t){if(t=t.b,null!=t.alpha){var e=ct(t.alpha);this.set("alpha",e),"boolean"==typeof t.absolute&&t.absolute?this.set("heading",e):null!=t.webkitCompassHeading&&null!=t.webkitCompassAccuracy&&-1!=t.webkitCompassAccuracy&&this.set("heading",ct(t.webkitCompassHeading))}null!=t.beta&&this.set("beta",ct(t.beta)),null!=t.gamma&&this.set("gamma",ct(t.gamma)),this.k()},em.Mi=function(){return this.get("alpha")},em.Pi=function(){return this.get("beta")},em.Yi=function(){return this.get("gamma")},em.Ik=function(){return this.get("heading")},em.og=function(){return this.get("tracking")},em.Jk=function(){if(Ab){var t=this.og();t&&null===this.a?this.a=qt(sm,"deviceorientation",this.fn,!1,this):t||null===this.a||(Kt(this.a),this.a=null)}},em.bf=function(t){this.set("tracking",t)},v(af,re),em=af.prototype,em.clone=function(){var t=new af(this.D());t.Ic(this.a);var e=this.Q();return null!=e&&t.La(e.clone()),e=this.e,null===e||t.cf(e),t},em.Q=function(){return this.get(this.a)},em.aj=function(){return this.$},em.$i=function(){return this.a},em.Qk=function(){return this.e},em.Rk=function(){return this.c},em.Sk=function(){this.k()},em.Pd=function(){null!==this.d&&(Kt(this.d),this.d=null);var t=this.Q();null!=t&&(this.d=qt(t,"change",this.Sk,!1,this)),this.k()},em.La=function(t){this.set(this.a,t)},em.cf=function(t){this.e=t,null===t?t=void 0:h(t)||(t=s(t)?t:[t],t=ln(t)),this.c=t,this.k()},em.Qb=function(t){this.$=t,this.k()},em.Ic=function(t){Wt(this,se(this.a),this.Pd,!1,this),this.a=t,qt(this,se(this.a),this.Pd,!1,this),this.Pd()},em=pf.prototype,em.pg=function(t){this.b.push(t)},em.Kk=function(){return this.b},em.Lk=function(){return this.d},em.qg=function(){lf(this)},em.Mj=function(t){t=t.element,this.a[c(t).toString()]=qt(t,"change",this.qg,!1,this),lf(this)},em.Nj=function(t){t=c(t.element).toString(),Kt(this.a[t]),delete this.a[t],lf(this)},em.Ok=function(){lf(this)},em.Pk=function(e){if(null!==this.b){var o=this.f;t(o)||(o=rp);var i=e.b;e=e.frameState;var n,r,s,a,p=e.viewState.resolution,l=Ll(p,e.pixelRatio);this.b.forEach(function(e){if(a=e.c,s=t(a)?a.call(e,p):o(e,p),null!=s)for(r=s.length,n=0;n<r;++n)Nl(i,e,s[n],l,this.Ok,this)},this)}},em.Yd=function(t){this.b.remove(t)},em.ld=function(t){null!==this.c&&(P(this.c,Kt),this.c=null),null!==this.a&&(P(V(this.a),Kt),this.a=null),this.b=t,null!==t&&(this.c=[qt(t,"add",this.Mj,!1,this),qt(t,"remove",this.Nj,!1,this)],this.a={},t.forEach(function(t){this.a[c(t).toString()]=qt(t,"change",this.qg,!1,this)},this)),lf(this)},em.setMap=function(t){null!==this.e&&(Kt(this.e),this.e=null),lf(this),this.d=t,null!==t&&(this.e=qt(t,"postcompose",this.Pk,!1,this),t.render())},em.rg=function(t){this.g=t,this.f=np(t),lf(this)},em.Mk=function(){return this.g},em.Nk=function(){return this.f},v(yf,hf),em=yf.prototype,em.M=function(){return"json"},em.sb=function(t,e){return this.Fc(df(t),uf(this,t,e))},em.ja=function(t,e){return this.of(df(t),uf(this,t,e))},em.Gc=function(t,e){return this.hh(df(t),uf(this,t,e))},em.za=function(t){return this.nh(df(t))},em.qd=function(t,e){return Ew(this.Lc(t,e))},em.ub=function(t,e){return Ew(this.ze(t,e))},em.Mc=function(t,e){return Ew(this.Be(t,e))},v(gf,yf);var ox={Point:function(t){return null!=t.m&&null!=t.z?new Ta([t.x,t.y,t.z,t.m],"XYZM"):null!=t.z?new Ta([t.x,t.y,t.z],"XYZ"):null!=t.m?new Ta([t.x,t.y,t.m],"XYM"):new Ta([t.x,t.y])},LineString:function(t){return new ml(t.paths[0],mf(t))},Polygon:function(t){return new Fa(t.rings,mf(t))},MultiPoint:function(t){return new Ml(t.points,mf(t))},MultiLineString:function(t){return new xl(t.paths,mf(t))},MultiPolygon:function(t){return new Pl(t.rings,mf(t))}},ix={Point:function(t){var e=t.K();return t=t.a,"XYZ"===t?{x:e[0],y:e[1],z:e[2]}:"XYM"===t?{x:e[0],y:e[1],m:e[2]}:"XYZM"===t?{x:e[0],y:e[1],z:e[2],m:e[3]}:"XY"===t?{x:e[0],y:e[1]}:void 0},LineString:function(t){var e=bf(t);return{hasZ:e.hasZ,hasM:e.hasM,paths:[t.K()]}},Polygon:function(t){var e=bf(t);return{hasZ:e.hasZ,hasM:e.hasM,rings:t.K(!1)}},MultiPoint:function(t){var e=bf(t);return{hasZ:e.hasZ,hasM:e.hasM,points:t.K()}},MultiLineString:function(t){var e=bf(t);return{hasZ:e.hasZ,hasM:e.hasM,paths:t.K()}},MultiPolygon:function(t){var e=bf(t);t=t.K(!1);for(var o=[],i=0;i<t.length;i++)for(var n=t[i].length-1;0<=n;n--)o.push(t[i][n]);return{hasZ:e.hasZ,hasM:e.hasM,rings:o}}};em=gf.prototype,em.Fc=function(e,o){var i=vf(e.geometry,o),n=new af;return t(this.b)&&n.Ic(this.b),n.La(i),t(o)&&t(o.Xe)&&t(e.attributes[o.Xe])&&n.Qb(e.attributes[o.Xe]),t(e.attributes)&&n.t(e.attributes),n},em.of=function(e,o){var i=t(o)?o:{};if(null!=e.features){var n,r,s=[],a=e.features;for(i.Xe=e.objectIdFieldName,n=0,r=a.length;n<r;++n)s.push(this.Fc(a[n],i));return s}return[this.Fc(e,i)]},em.hh=function(t,e){return vf(t,e)},em.nh=function(t){return null!=t.spatialReference&&null!=t.spatialReference.wkid?xo("EPSG:"+t.spatialReference.wkid):null},em.Be=function(t,e){return wf(t,cf(this,e))},em.Lc=function(e,o){o=cf(this,o);var i={},n=e.Q();return null!=n&&(i.geometry=wf(n,o)),n=e.D(),et(n,e.a),i.attributes=Q(n)?{}:n,t(o)&&t(o.featureProjection)&&(i.spatialReference={wkid:xo(o.featureProjection).b.split(":").pop()}),i},em.ze=function(t,e){e=cf(this,e);var o,i,n=[];for(o=0,i=t.length;o<i;++o)n.push(this.Lc(t[o],e));return{features:n}},v(xf,yf);var nx={Point:function(t){return new Ta(t.coordinates)},LineString:function(t){return new ml(t.coordinates)},Polygon:function(t){return new Fa(t.coordinates)},MultiPoint:function(t){return new Ml(t.coordinates)},MultiLineString:function(t){return new xl(t.coordinates)},MultiPolygon:function(t){return new Pl(t.coordinates)},GeometryCollection:function(t,e){var o=k(t.geometries,function(t){return Sf(t,e)});return new ul(o)}},rx={Point:function(t){return{type:"Point",coordinates:t.K()}},LineString:function(t){return{type:"LineString",coordinates:t.K()}},Polygon:function(e,o){var i;return t(o)&&(i=o.rightHanded),{type:"Polygon",coordinates:e.K(i)}},MultiPoint:function(t){return{type:"MultiPoint",coordinates:t.K()}},MultiLineString:function(t){return{type:"MultiLineString",coordinates:t.K()}},MultiPolygon:function(e,o){var i;return t(o)&&(i=o.rightHanded),{type:"MultiPolygon",coordinates:e.K(i)}},GeometryCollection:function(t,e){return{type:"GeometryCollection",geometries:k(t.d,function(t){return Tf(t,e)})}},Circle:function(){return{type:"GeometryCollection",geometries:[]}}};em=xf.prototype,em.Fc=function(e,o){var i=Sf(e.geometry,o),n=new af;return t(this.b)&&n.Ic(this.b),n.La(i),t(e.id)&&n.Qb(e.id),t(e.properties)&&n.t(e.properties),n},em.of=function(t,e){if("Feature"==t.type)return[this.Fc(t,e)];if("FeatureCollection"==t.type){var o,i,n=[],r=t.features;for(o=0,i=r.length;o<i;++o)n.push(this.Fc(r[o],e));return n}return[]},em.hh=function(t,e){return Sf(t,e)},em.nh=function(t){return t=t.crs,null!=t?"name"==t.type?xo(t.properties.name):"EPSG"==t.type?xo("EPSG:"+t.properties.code):null:this.defaultDataProjection},em.Lc=function(t,e){e=cf(this,e);var o={type:"Feature"},i=t.$;return null!=i&&(o.id=i),i=t.Q(),null!=i&&(o.geometry=Tf(i,e)),i=t.D(),et(i,t.a),o.properties=Q(i)?null:i,o},em.ze=function(t,e){e=cf(this,e);var o,i,n=[];for(o=0,i=t.length;o<i;++o)n.push(this.Lc(t[o],e));return{type:"FeatureCollection",features:n}},em.Be=function(t,e){return Tf(t,cf(this,e))},v(Cf,hf),em=Cf.prototype,em.M=function(){return"xml"},em.sb=function(t,e){if(qw(t))return Mf(this,t,e);if($w(t))return this.fh(t,e);if(p(t)){var o=$h(t);return Mf(this,o,e)}return null},em.ja=function(t,e){if(qw(t))return Pf(this,t,e);if($w(t))return this.Ob(t,e);if(p(t)){var o=$h(t);return Pf(this,o,e)}return[]},em.Gc=function(e,o){if(qw(e))return this.l(e,o);if($w(e)){var i=this.qe(e,[uf(this,e,t(o)?o:{})]);return t(i)?i:null}return p(e)?(i=$h(e),this.l(i,o)):null},em.za=function(t){return qw(t)?this.sf(t):$w(t)?this.te(t):p(t)?(t=$h(t),this.sf(t)):null},em.sf=function(){return this.defaultDataProjection},em.te=function(){return this.defaultDataProjection},em.qd=function(t,e){var o=this.U(t,e);return Mh(o)},em.ub=function(t,e){var o=this.a(t,e);return Mh(o)},em.Mc=function(t,e){var o=this.q(t,e);return Mh(o)},v(Ef,Cf),em=Ef.prototype,em.jd=function(e,o){var i,n=Gw(e);if("FeatureCollection"==n)i="http://www.opengis.net/wfs"===e.namespaceURI?eu([],this.b,e,o,this):eu(null,this.b,e,o,this);else if("featureMembers"==n||"featureMember"==n){var r=o[0],a=r.featureType;i=r.featureNS;var l,h;if(!t(a)&&null!=e.childNodes){for(a=[],i={},l=0,h=e.childNodes.length;l<h;++l){var u=e.childNodes[l];if(1===u.nodeType){var c=u.nodeName.split(":").pop();if(-1===M(a,c)){var f;_(i,u.namespaceURI)?f=J(i,function(t){return t===u.namespaceURI}):(f="p"+z(i),i[f]=u.namespaceURI),a.push(f+":"+c)}}}r.featureType=a,r.featureNS=i}p(i)&&(l=i,i={},i.p0=l);var y,r={},a=s(a)?a:[a];for(y in i){for(c={},l=0,h=a.length;l<h;++l)(-1===a[l].indexOf(":")?"p0":a[l].split(":")[0])===y&&(c[a[l].split(":").pop()]="featureMembers"==n?Xh(this.nf,this):Wh(this.nf,this));r[i[y]]=c}i=eu([],r,e,o)}return t(i)||(i=[]),i},em.qe=function(t,e){var o=e[0];o.srsName=t.firstElementChild.getAttribute("srsName");var i=eu(null,this.Cf,t,e,this);if(null!=i)return ff(i,!1,o)},em.nf=function(e,o){var i,n,r=e.getAttribute("fid")||Hw(e,"http://www.opengis.net/gml","id"),s={};for(i=e.firstElementChild;null!==i;i=i.nextElementSibling){var a=Gw(i);if(0===i.childNodes.length||1===i.childNodes.length&&3===i.firstChild.nodeType){var p=kh(i,!1);/^[\s\xa0]*$/.test(p)&&(p=void 0),s[a]=p}else"boundedBy"!==a&&(n=a),s[a]=this.qe(i,o)}return i=new af(s),t(n)&&i.Ic(n),r&&i.Qb(r),i},em.mh=function(t,e){var o=this.pe(t,e);if(null!=o){var i=new Ta(null);return Ca(i,"XYZ",o),i}},em.kh=function(e,o){var i=eu([],this.ai,e,o,this);if(t(i))return new Ml(i)},em.jh=function(e,o){var i=eu([],this.$h,e,o,this);if(t(i)){var n=new xl(null);return Cl(n,i),n}},em.lh=function(e,o){var i=eu([],this.bi,e,o,this);if(t(i)){var n=new Pl(null);return Rl(n,i),n}},em.$g=function(t,e){tu(this.ei,t,e,this)},em.kg=function(t,e){tu(this.Yh,t,e,this)},em.ah=function(t,e){tu(this.fi,t,e,this)},em.re=function(t,e){var o=this.pe(t,e);if(null!=o){var i=new ml(null);return wl(i,"XYZ",o),i}},em.yn=function(t,e){var o=eu(null,this.sd,t,e,this);if(null!=o)return o},em.ih=function(e,o){var i=this.pe(e,o);if(t(i)){var n=new xa(null);return Sa(n,"XYZ",i),n}},em.se=function(e,o){var i=eu([null],this.De,e,o,this);if(t(i)&&null!==i[0]){var n,r,s=new Fa(null),a=i[0],p=[a.length];for(n=1,r=i.length;n<r;++n)F(a,i[n]),p.push(a.length);return Ua(s,"XYZ",a,p),s}},em.pe=function(t,e){return eu(null,this.sd,t,e,this)},em.ai=Object({"http://www.opengis.net/gml":{pointMember:Xh(Ef.prototype.$g),pointMembers:Xh(Ef.prototype.$g)}}),em.$h=Object({"http://www.opengis.net/gml":{lineStringMember:Xh(Ef.prototype.kg),lineStringMembers:Xh(Ef.prototype.kg)}}),em.bi=Object({"http://www.opengis.net/gml":{polygonMember:Xh(Ef.prototype.ah),polygonMembers:Xh(Ef.prototype.ah)}}),em.ei=Object({"http://www.opengis.net/gml":{Point:Xh(Ef.prototype.pe)}}),em.Yh=Object({"http://www.opengis.net/gml":{LineString:Xh(Ef.prototype.re)}}),em.fi=Object({"http://www.opengis.net/gml":{Polygon:Xh(Ef.prototype.se)}}),em.td=Object({"http://www.opengis.net/gml":{LinearRing:Wh(Ef.prototype.yn)}}),em.Ob=function(e,o){var i={featureType:this.featureType,featureNS:this.featureNS};return t(o)&&rt(i,uf(this,e,o)),this.jd(e,[i])},em.te=function(e){return xo(t(this.o)?this.o:e.firstElementChild.getAttribute("srsName"))},v(Gf,Ef),em=Gf.prototype,em.Bn=function(e,o){var i=eu([],this.Zh,e,o,this);if(t(i)){var n=new xl(null);return Cl(n,i),n}},em.Cn=function(e,o){var i=eu([],this.ci,e,o,this);if(t(i)){var n=new Pl(null);return Rl(n,i),n}},em.Nf=function(t,e){tu(this.Vh,t,e,this)},em.Hh=function(t,e){tu(this.ji,t,e,this)},em.Fn=function(t,e){return eu([null],this.di,t,e,this)},em.Hn=function(t,e){return eu([null],this.ii,t,e,this)},em.Gn=function(t,e){return eu([null],this.De,t,e,this)},em.An=function(t,e){return eu([null],this.sd,t,e,this)},em.rk=function(e,o){var i=eu(void 0,this.td,e,o,this);t(i)&&o[o.length-1].push(i)},em.Di=function(e,o){var i=eu(void 0,this.td,e,o,this);t(i)&&(o[o.length-1][0]=i)},em.oh=function(e,o){var i=eu([null],this.ki,e,o,this);if(t(i)&&null!==i[0]){var n,r,s=new Fa(null),a=i[0],p=[a.length];for(n=1,r=i.length;n<r;++n)F(a,i[n]),p.push(a.length);return Ua(s,"XYZ",a,p),s}},em.dh=function(e,o){var i=eu([null],this.Wh,e,o,this);if(t(i)){var n=new ml(null);return wl(n,"XYZ",i),n}},em.xn=function(t,e){var o=eu([null],this.Xh,t,e,this);return $e(o[1][0],o[1][1],o[2][0],o[2][1])},em.zn=function(t,e){for(var o,i=kh(t,!1),n=/^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/,r=[];o=n.exec(i);)r.push(parseFloat(o[1])),i=i.substr(o[0].length);if(""===i){if(i=e[0].srsName,n="enu",null===i||(n=uo(xo(i))),"neu"===n)for(i=0,n=r.length;i<n;i+=3)o=r[i],r[i]=r[i+1],r[i+1]=o;return i=r.length,2==i&&r.push(0),0===i?void 0:r}},em.qf=function(t,e){var o=kh(t,!1).replace(/^\s*|\s*$/g,""),i=e[0].srsName,n=t.parentNode.getAttribute("srsDimension"),s="enu";null===i||(s=uo(xo(i))),o=o.split(/\s+/),i=2,r(t.getAttribute("srsDimension"))?r(t.getAttribute("dimension"))?null===n||(i=If(n)):i=If(t.getAttribute("dimension")):i=If(t.getAttribute("srsDimension"));for(var a,p,l=[],h=0,u=o.length;h<u;h+=i)n=parseFloat(o[h]),a=parseFloat(o[h+1]),p=3===i?parseFloat(o[h+2]):0,"en"===s.substr(0,2)?l.push(n,a,p):l.push(a,n,p);return l},em.sd=Object({"http://www.opengis.net/gml":{pos:Wh(Gf.prototype.zn),posList:Wh(Gf.prototype.qf)}}),em.De=Object({"http://www.opengis.net/gml":{interior:Gf.prototype.rk,exterior:Gf.prototype.Di}}),em.Cf=Object({"http://www.opengis.net/gml":{Point:Wh(Ef.prototype.mh),MultiPoint:Wh(Ef.prototype.kh),LineString:Wh(Ef.prototype.re),MultiLineString:Wh(Ef.prototype.jh),LinearRing:Wh(Ef.prototype.ih),Polygon:Wh(Ef.prototype.se),MultiPolygon:Wh(Ef.prototype.lh),Surface:Wh(Gf.prototype.oh),MultiSurface:Wh(Gf.prototype.Cn),Curve:Wh(Gf.prototype.dh),MultiCurve:Wh(Gf.prototype.Bn),Envelope:Wh(Gf.prototype.xn)}}),em.Zh=Object({"http://www.opengis.net/gml":{curveMember:Xh(Gf.prototype.Nf),curveMembers:Xh(Gf.prototype.Nf)}}),em.ci=Object({"http://www.opengis.net/gml":{surfaceMember:Xh(Gf.prototype.Hh),surfaceMembers:Xh(Gf.prototype.Hh)}}),em.Vh=Object({"http://www.opengis.net/gml":{LineString:Xh(Ef.prototype.re),Curve:Xh(Gf.prototype.dh)}}),em.ji=Object({"http://www.opengis.net/gml":{Polygon:Xh(Ef.prototype.se),Surface:Xh(Gf.prototype.oh)}}),em.ki=Object({"http://www.opengis.net/gml":{patches:Wh(Gf.prototype.Fn)}}),em.Wh=Object({"http://www.opengis.net/gml":{segments:Wh(Gf.prototype.Hn)}}),em.Xh=Object({"http://www.opengis.net/gml":{lowerCorner:Xh(Gf.prototype.qf),upperCorner:Xh(Gf.prototype.qf)}}),em.di=Object({"http://www.opengis.net/gml":{PolygonPatch:Wh(Gf.prototype.Gn)}}),em.ii=Object({"http://www.opengis.net/gml":{LineStringSegment:Wh(Gf.prototype.An)}}),em.Rh=function(t,e,o){var i=o[o.length-1].srsName;null!=i&&t.setAttribute("srsName",i),i=Uw(t.namespaceURI,"pos"),t.appendChild(i),o=o[o.length-1].srsName,t="enu",null!=o&&(t=uo(xo(o))),e=e.K(),Uf(i,"en"===t.substr(0,2)?e[0]+" "+e[1]:e[1]+" "+e[0])};var sx={"http://www.opengis.net/gml":{lowerCorner:Yh(Uf),upperCorner:Yh(Uf)}};em=Gf.prototype,em.wo=function(e,o,i){var n=i[i.length-1].srsName;t(n)&&e.setAttribute("srsName",n),iu({P:e},sx,Kw,[o[0]+" "+o[1],o[2]+" "+o[3]],i,["lowerCorner","upperCorner"],this)},em.Oh=function(t,e,o){var i=o[o.length-1].srsName;null!=i&&t.setAttribute("srsName",i),i=Uw(t.namespaceURI,"posList"),t.appendChild(i),qf(i,e,o)},em.hi=function(e,o){var i=o[o.length-1],n=i.P,r=i.exteriorWritten;return t(r)||(i.exteriorWritten=!0),Uw(n.namespaceURI,t(r)?"interior":"exterior")},em.Ce=function(t,e,o){var i=o[o.length-1].srsName;"PolygonPatch"!==t.nodeName&&null!=i&&t.setAttribute("srsName",i),"Polygon"===t.nodeName||"PolygonPatch"===t.nodeName?(e=e.Ed(),iu({P:t,srsName:i},hx,this.hi,e,o,void 0,this)):"Surface"===t.nodeName&&(i=Uw(t.namespaceURI,"patches"),t.appendChild(i),t=Uw(i.namespaceURI,"PolygonPatch"),i.appendChild(t),this.Ce(t,e,o))},em.xe=function(t,e,o){var i=o[o.length-1].srsName;"LineStringSegment"!==t.nodeName&&null!=i&&t.setAttribute("srsName",i),"LineString"===t.nodeName||"LineStringSegment"===t.nodeName?(i=Uw(t.namespaceURI,"posList"),t.appendChild(i),qf(i,e,o)):"Curve"===t.nodeName&&(i=Uw(t.namespaceURI,"segments"),t.appendChild(i),t=Uw(i.namespaceURI,"LineStringSegment"),i.appendChild(t),this.xe(t,e,o))},em.Qh=function(t,e,o){var i=o[o.length-1],n=i.srsName,i=i.surface;null!=n&&t.setAttribute("srsName",n),e=e.Id(),iu({P:t,srsName:n,surface:i},ax,this.d,e,o,void 0,this)},em.xo=function(t,e,o){var i=o[o.length-1].srsName;null!=i&&t.setAttribute("srsName",i),e=e.ce(),iu({P:t,srsName:i},px,_h("pointMember"),e,o,void 0,this)},em.Ph=function(t,e,o){var i=o[o.length-1],n=i.srsName,i=i.curve;null!=n&&t.setAttribute("srsName",n),e=e.ad(),iu({P:t,srsName:n,curve:i},lx,this.d,e,o,void 0,this)},em.Sh=function(t,e,o){var i=Uw(t.namespaceURI,"LinearRing");t.appendChild(i),this.Oh(i,e,o)},em.Th=function(e,o,i){var n=this.c(o,i);t(n)&&(e.appendChild(n),this.Ce(n,o,i))},em.yo=function(t,e,o){var i=Uw(t.namespaceURI,"Point");t.appendChild(i),
+this.Rh(i,e,o)},em.Nh=function(e,o,i){var n=this.c(o,i);t(n)&&(e.appendChild(n),this.xe(n,o,i))},em.Ae=function(e,o,i){var n=i[i.length-1],r=nt(n);r.P=e;var a;a=s(o)?t(n.dataProjection)?ko(o,n.featureProjection,n.dataProjection):o:ff(o,!0,n),iu(r,ux,this.c,[a],i,void 0,this)},em.Lh=function(e,o,i){var n=o.$;t(n)&&e.setAttribute("fid",n);var n=i[i.length-1],r=n.featureNS,s=o.a;t(n.fc)||(n.fc={},n.fc[r]={});var a=o.D();o=[];var p,l=[];for(p in a){var h=a[p];null!==h&&(o.push(p),l.push(h),p==s?p in n.fc[r]||(n.fc[r][p]=Yh(this.Ae,this)):p in n.fc[r]||(n.fc[r][p]=Yh(Uf)))}p=nt(n),p.P=e,iu(p,n.fc,_h(void 0,r),l,i,o)};var ax={"http://www.opengis.net/gml":{surfaceMember:Yh(Gf.prototype.Th),polygonMember:Yh(Gf.prototype.Th)}},px={"http://www.opengis.net/gml":{pointMember:Yh(Gf.prototype.yo)}},lx={"http://www.opengis.net/gml":{lineStringMember:Yh(Gf.prototype.Nh),curveMember:Yh(Gf.prototype.Nh)}},hx={"http://www.opengis.net/gml":{exterior:Yh(Gf.prototype.Sh),interior:Yh(Gf.prototype.Sh)}},ux={"http://www.opengis.net/gml":{Curve:Yh(Gf.prototype.xe),MultiCurve:Yh(Gf.prototype.Ph),Point:Yh(Gf.prototype.Rh),MultiPoint:Yh(Gf.prototype.xo),LineString:Yh(Gf.prototype.xe),MultiLineString:Yh(Gf.prototype.Ph),LinearRing:Yh(Gf.prototype.Oh),Polygon:Yh(Gf.prototype.Ce),MultiPolygon:Yh(Gf.prototype.Qh),Surface:Yh(Gf.prototype.Ce),MultiSurface:Yh(Gf.prototype.Qh),Envelope:Yh(Gf.prototype.wo)}},cx={MultiLineString:"lineStringMember",MultiCurve:"curveMember",MultiPolygon:"polygonMember",MultiSurface:"surfaceMember"};Gf.prototype.d=function(t,e){return Uw("http://www.opengis.net/gml",cx[e[e.length-1].P.nodeName])},Gf.prototype.c=function(t,e){var o,i=e[e.length-1],n=i.multiSurface,r=i.surface,a=i.curve,i=i.multiCurve;return s(t)?o="Envelope":(o=t.M(),"MultiPolygon"===o&&!0===n?o="MultiSurface":"Polygon"===o&&!0===r?o="Surface":"LineString"===o&&!0===a?o="Curve":"MultiLineString"===o&&!0===i&&(o="MultiCurve")),Uw("http://www.opengis.net/gml",o)},Gf.prototype.q=function(e,o){o=cf(this,o);var i=Uw("http://www.opengis.net/gml","geom"),n={P:i,srsName:this.srsName,curve:this.e,surface:this.i,multiSurface:this.g,multiCurve:this.f};return t(o)&&rt(n,o),this.Ae(i,e,[n]),i},Gf.prototype.a=function(e,o){o=cf(this,o);var i=Uw("http://www.opengis.net/gml","featureMembers");Ww(i,"http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.schemaLocation);var n={srsName:this.srsName,curve:this.e,surface:this.i,multiSurface:this.g,multiCurve:this.f,featureNS:this.featureNS,featureType:this.featureType};t(o)&&rt(n,o);var n=[n],r=n[n.length-1],s=r.featureType,a=r.featureNS,p={};return p[a]={},p[a][s]=Yh(this.Lh,this),r=nt(r),r.P=i,iu(r,p,_h(s,a),e,n),i},v($f,Ef),em=$f.prototype,em.gh=function(t,e){var o=kh(t,!1).replace(/^\s*|\s*$/g,""),i=e[0].srsName,n=t.parentNode.getAttribute("srsDimension"),s="enu";null===i||(s=uo(xo(i))),o=o.split(/[\s,]+/),i=2,r(t.getAttribute("srsDimension"))?r(t.getAttribute("dimension"))?null===n||(i=If(n)):i=If(t.getAttribute("dimension")):i=If(t.getAttribute("srsDimension"));for(var a,p,l=[],h=0,u=o.length;h<u;h+=i)n=parseFloat(o[h]),a=parseFloat(o[h+1]),p=3===i?parseFloat(o[h+2]):0,"en"===s.substr(0,2)?l.push(n,a,p):l.push(a,n,p);return l},em.wn=function(t,e){var o=eu([null],this.Uh,t,e,this);return $e(o[1][0],o[1][1],o[1][3],o[1][4])},em.pk=function(e,o){var i=eu(void 0,this.td,e,o,this);t(i)&&o[o.length-1].push(i)},em.gn=function(e,o){var i=eu(void 0,this.td,e,o,this);t(i)&&(o[o.length-1][0]=i)},em.sd=Object({"http://www.opengis.net/gml":{coordinates:Wh($f.prototype.gh)}}),em.De=Object({"http://www.opengis.net/gml":{innerBoundaryIs:$f.prototype.pk,outerBoundaryIs:$f.prototype.gn}}),em.Uh=Object({"http://www.opengis.net/gml":{coordinates:Xh($f.prototype.gh)}}),em.Cf=Object({"http://www.opengis.net/gml":{Point:Wh(Ef.prototype.mh),MultiPoint:Wh(Ef.prototype.kh),LineString:Wh(Ef.prototype.re),MultiLineString:Wh(Ef.prototype.jh),LinearRing:Wh(Ef.prototype.ih),Polygon:Wh(Ef.prototype.se),MultiPolygon:Wh(Ef.prototype.lh),Box:Wh($f.prototype.wn)}}),v(Hf,Cf);var fx=[null,"http://www.topografix.com/GPX/1/0","http://www.topografix.com/GPX/1/1"],yx={rte:zf,trk:Vf,wpt:Yf},dx=Vh(fx,{rte:Xh(zf),trk:Xh(Vf),wpt:Xh(Yf)}),gx=Vh(fx,{text:zh(Df,"linkText"),type:zh(Df,"linkType")}),vx=Vh(fx,{name:zh(Df),cmt:zh(Df),desc:zh(Df),src:zh(Df),link:Wf,number:zh(Nf),extensions:Kf,type:zh(Df),rtept:function(e,o){var i=eu({},mx,e,o);t(i)&&Xf(o[o.length-1].flatCoordinates,e,i)}}),mx=Vh(fx,{ele:zh(jf),time:zh(Rf)}),bx=Vh(fx,{name:zh(Df),cmt:zh(Df),desc:zh(Df),src:zh(Df),link:Wf,number:zh(Nf),type:zh(Df),extensions:Kf,trkseg:function(t,e){var o=e[e.length-1];tu(wx,t,e),o.ends.push(o.flatCoordinates.length)}}),wx=Vh(fx,{trkpt:function(e,o){var i=eu({},xx,e,o);t(i)&&Xf(o[o.length-1].flatCoordinates,e,i)}}),xx=Vh(fx,{ele:zh(jf),time:zh(Rf)}),Sx=Vh(fx,{ele:zh(jf),time:zh(Rf),magvar:zh(jf),geoidheight:zh(jf),name:zh(Df),cmt:zh(Df),desc:zh(Df),src:zh(Df),link:Wf,sym:zh(Df),type:zh(Df),fix:zh(Df),sat:zh(Nf),hdop:zh(jf),vdop:zh(jf),pdop:zh(jf),ageofdgpsdata:zh(jf),dgpsid:zh(Nf),extensions:Kf});Hf.prototype.fh=function(e,o){if(!L(fx,e.namespaceURI))return null;var i=yx[e.localName];return t(i)?(i=i(e,[uf(this,e,o)]),t(i)?(Zf(this,[i]),i):null):null},Hf.prototype.Ob=function(e,o){if(!L(fx,e.namespaceURI))return[];if("gpx"==e.localName){var i=eu([],dx,e,[uf(this,e,o)]);if(t(i))return Zf(this,i),i}return[]};var Tx=["text","type"],Cx=Qh(fx,{text:Yh(Uf),type:Yh(Uf)}),Mx=Qh(fx,"name cmt desc src link number type rtept".split(" ")),Px=Qh(fx,{name:Yh(Uf),cmt:Yh(Uf),desc:Yh(Uf),src:Yh(Uf),link:Yh(_f),number:Yh(Bf),type:Yh(Uf),rtept:Zh(Yh(Jf))}),Ex=Qh(fx,"name cmt desc src link number type trkseg".split(" ")),kx=Qh(fx,{name:Yh(Uf),cmt:Yh(Uf),desc:Yh(Uf),src:Yh(Uf),link:Yh(_f),number:Yh(Bf),type:Yh(Uf),trkseg:Zh(Yh(function(t,e,o){iu({P:t,geometryLayout:e.a,properties:{}},Rx,Ax,e.K(),o)}))}),Ax=_h("trkpt"),Rx=Qh(fx,{trkpt:Yh(Jf)}),jx=Qh(fx,"ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),Lx=Qh(fx,{ele:Yh(Of),time:Yh(function(t,e){var o=new Date(1e3*e),o=o.getUTCFullYear()+"-"+S(o.getUTCMonth()+1)+"-"+S(o.getUTCDate())+"T"+S(o.getUTCHours())+":"+S(o.getUTCMinutes())+":"+S(o.getUTCSeconds())+"Z";t.appendChild(Bw.createTextNode(o))}),magvar:Yh(Of),geoidheight:Yh(Of),name:Yh(Uf),cmt:Yh(Uf),desc:Yh(Uf),src:Yh(Uf),link:Yh(_f),sym:Yh(Uf),type:Yh(Uf),fix:Yh(Uf),sat:Yh(Bf),hdop:Yh(Of),vdop:Yh(Of),pdop:Yh(Of),ageofdgpsdata:Yh(Of),dgpsid:Yh(Bf)}),Nx={Point:"wpt",LineString:"rte",MultiLineString:"trk"},Ix=Qh(fx,{rte:Yh(function(e,o,i){var n=i[0],r=o.D();e={P:e,properties:r},o=o.Q(),t(o)&&(o=ff(o,!0,n),e.geometryLayout=o.a,r.rtept=o.K()),n=Mx[i[i.length-1].P.namespaceURI],r=Jh(r,n),iu(e,Px,Kw,r,i,n)}),trk:Yh(function(e,o,i){var n=i[0],r=o.D();e={P:e,properties:r},o=o.Q(),t(o)&&(o=ff(o,!0,n),r.trkseg=o.ad()),n=Ex[i[i.length-1].P.namespaceURI],r=Jh(r,n),iu(e,kx,Kw,r,i,n)}),wpt:Yh(function(e,o,i){var n=i[0],r=i[i.length-1];r.properties=o.D(),o=o.Q(),t(o)&&(o=ff(o,!0,n),r.geometryLayout=o.a,Jf(e,o.K(),i))})});Hf.prototype.a=function(t,e){e=cf(this,e);var o=Uw("http://www.topografix.com/GPX/1/1","gpx");return iu({P:o},Ix,Qf,t,[e]),o},v(iy,hf),em=iy.prototype,em.M=function(){return"text"},em.sb=function(t,e){return this.hd(p(t)?t:"",cf(this,e))},em.ja=function(t,e){return this.pf(p(t)?t:"",cf(this,e))},em.Gc=function(t,e){return this.kd(p(t)?t:"",cf(this,e))},em.za=function(){return this.defaultDataProjection},em.qd=function(t,e){return this.ye(t,cf(this,e))},em.ub=function(t,e){return this.Mh(t,cf(this,e))},em.Mc=function(t,e){return this.rd(t,cf(this,e))},v(ny,iy);var Dx=/^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,Fx=/^H.([A-Z]{3}).*?:(.*)/,Ox=/^HFDTE(\d{2})(\d{2})(\d{2})/;ny.prototype.hd=function(t,e){var o,i,n=this.b,r=ty(t),s={},a=[],p=2e3,l=0,h=1;for(o=0,i=r.length;o<i;++o){var u,c=r[o];if("B"==c.charAt(0)){if(u=Dx.exec(c)){var c=parseInt(u[1],10),f=parseInt(u[2],10),y=parseInt(u[3],10),d=parseInt(u[4],10)+parseInt(u[5],10)/6e4;"S"==u[6]&&(d=-d);var g=parseInt(u[7],10)+parseInt(u[8],10)/6e4;"W"==u[9]&&(g=-g),a.push(g,d),"none"!=n&&a.push("gps"==n?parseInt(u[11],10):"barometric"==n?parseInt(u[12],10):0),a.push(Date.UTC(p,l,h,c,f,y)/1e3)}}else"H"==c.charAt(0)&&((u=Ox.exec(c))?(h=parseInt(u[1],10),l=parseInt(u[2],10)-1,p=2e3+parseInt(u[3],10)):(u=Fx.exec(c))&&(s[u[1]]=cm(u[2]),Ox.exec(c)))}return 0===a.length?null:(r=new ml(null),wl(r,"none"==n?"XYM":"XYZM",a),n=new af(ff(r,!1,e)),n.t(s),n)},ny.prototype.pf=function(t,e){var o=this.hd(t,e);return null===o?[]:[o]},em=ry.prototype,em.Pb="",em.pc="",em.ib="",em.Ec=null,em.hb="",em.Sb="",em.Yb=!1,em.toString=function(){var t=[],e=this.Pb;if(e&&t.push(cy(e,Bx,!0),":"),e=this.ib){t.push("//");var o=this.pc;o&&t.push(cy(o,Bx,!0),"@"),t.push(encodeURIComponent(String(e)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),e=this.Ec,null!=e&&t.push(":",String(e))}return(e=this.hb)&&(this.ib&&"/"!=e.charAt(0)&&t.push("/"),t.push(cy(e,"/"==e.charAt(0)?Gx:Ux,!0))),(e=this.b.toString())&&t.push("?",e),(e=this.Sb)&&t.push("#",cy(e,$x)),t.join("")},em.clone=function(){return new ry(this)};var Bx=/[#\/\?@]/g,Ux=/[\#\?:]/g,Gx=/[\#\?]/g,qx=/[\#\?@]/g,$x=/#/g;em=yy.prototype,em.ia=null,em.va=null,em.Tb=function(){return dy(this),this.va},em.add=function(t,e){dy(this),this.b=null,t=my(this,t);var o=this.ia.get(t);return o||this.ia.set(t,o=[]),o.push(e),this.va++,this},em.remove=function(t){return dy(this),t=my(this,t),!!er(this.ia.a,t)&&(this.b=null,this.va-=this.ia.get(t).length,this.ia.remove(t))},em.clear=function(){this.ia=this.b=null,this.va=0},em.la=function(){return dy(this),0==this.va},em.C=function(){dy(this);for(var t=this.ia.cb(),e=this.ia.C(),o=[],i=0;i<e.length;i++)for(var n=t[i],r=0;r<n.length;r++)o.push(e[i]);return o},em.cb=function(t){dy(this);var e=[];if(p(t))gy(this,t)&&(e=I(e,this.ia.get(my(this,t))));else{t=this.ia.cb();for(var o=0;o<t.length;o++)e=I(e,t[o])}return e},em.set=function(t,e){return dy(this),this.b=null,t=my(this,t),gy(this,t)&&(this.va-=this.ia.get(t).length),this.ia.set(t,[e]),this.va++,this},em.get=function(t,e){var o=t?this.cb(t):[];return 0<o.length?String(o[0]):e},em.toString=function(){if(this.b)return this.b;if(!this.ia)return"";for(var t=[],e=this.ia.C(),o=0;o<e.length;o++)for(var i=e[o],n=encodeURIComponent(String(i)),i=this.cb(i),r=0;r<i.length;r++){var s=n;""!==i[r]&&(s+="="+encodeURIComponent(String(i[r]))),t.push(s)}return this.b=t.join("&")},em.clone=function(){var t=new yy;return t.b=this.b,this.ia&&(t.ia=this.ia.clone(),t.va=this.va),t},em=wy.prototype,em.Wi=function(){return this.d},em.mj=function(){return this.q},em.nj=function(){return this.l},em.Qm=function(){return this.b},em.Rm=function(){return this.e},em.Sm=function(){return this.a},em.Tm=function(){return this.f},em.Um=function(){return this.c},em.xj=function(){return this.g},em.yj=function(){return this.i},em.Wn=function(t){this.d=t},em.Vn=function(t){this.b=t},em.Vm=function(t){this.e=t},em.Wm=function(t){this.a=t},em.eo=function(t){this.f=t},em.fo=function(t){this.c=t},em.ho=function(t){this.g=t},em.io=function(t){this.i=t},v(xy,Cf);var Hx=["http://www.google.com/kml/ext/2.2"],Xx=[null,"http://earth.google.com/kml/2.0","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.2","http://www.opengis.net/kml/2.2"],Wx=[255,255,255,1],Kx=new ep({color:Wx}),zx=[20,2],Vx=[64,64],Yx=new us({anchor:zx,anchorOrigin:"bottom-left",anchorXUnits:"pixels",anchorYUnits:"pixels",crossOrigin:"anonymous",rotation:0,scale:.5,size:Vx,src:"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"}),Zx=new tp({color:Wx,width:1}),_x=new wy({font:"normal 16px Helvetica",fill:Kx,stroke:Zx,scale:1}),Jx=[new ip({fill:Kx,image:Yx,text:_x,stroke:Zx,zIndex:0})],Qx={fraction:"fraction",pixels:"pixels"},tS=Vh(Xx,{value:Wh(Df)}),eS=Vh(Xx,{Data:function(e,o){var i=e.getAttribute("name");if(null!==i){var n=eu(void 0,tS,e,o);t(n)&&(o[o.length-1][i]=n)}},SchemaData:function(t,e){tu(wS,t,e)}}),oS=Vh(Xx,{extrude:zh(kf),altitudeMode:zh(Df)}),iS=Vh(Xx,{coordinates:Wh(Ty)}),nS=Vh(Xx,{innerBoundaryIs:function(e,o){var i=eu(void 0,lS,e,o);t(i)&&o[o.length-1].push(i)},outerBoundaryIs:function(e,o){var i=eu(void 0,gS,e,o);t(i)&&(o[o.length-1][0]=i)}}),rS=Vh(Xx,{when:function(e,o){var i=o[o.length-1].Kh,n=kh(e,!1);if(n=/^\s*(\d{4})($|-(\d{2})($|-(\d{2})($|T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?)))))\s*$/.exec(n)){var r=Date.UTC(parseInt(n[1],10),t(n[3])?parseInt(n[3],10)-1:0,t(n[5])?parseInt(n[5],10):1,t(n[7])?parseInt(n[7],10):0,t(n[8])?parseInt(n[8],10):0,t(n[9])?parseInt(n[9],10):0);if(t(n[10])&&"Z"!=n[10]){var s="-"==n[11]?-1:1,r=r+60*s*parseInt(n[12],10);t(n[13])&&(r+=3600*s*parseInt(n[13],10))}i.push(r)}else i.push(0)}},Vh(Hx,{coord:function(t,e){var o=e[e.length-1].j,i=kh(t,!1);(i=/^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(i))?o.push(parseFloat(i[1]),parseFloat(i[2]),parseFloat(i[3]),0):o.push(0,0,0,0)}})),sS=Vh(Xx,{coordinates:Wh(Ty)}),aS=Vh(Xx,{href:zh(Cy)},Vh(Hx,{x:zh(jf),y:zh(jf),w:zh(jf),h:zh(jf)})),pS=Vh(Xx,{Icon:zh(function(e,o){var i=eu({},aS,e,o);return t(i)?i:null}),heading:zh(jf),hotSpot:zh(function(t){var e=t.getAttribute("xunits"),o=t.getAttribute("yunits");return{x:parseFloat(t.getAttribute("x")),Af:Qx[e],y:parseFloat(t.getAttribute("y")),Bf:Qx[o]}}),scale:zh(My)}),lS=Vh(Xx,{LinearRing:Wh(Py)}),hS=Vh(Xx,{color:zh(Sy),scale:zh(My)}),uS=Vh(Xx,{color:zh(Sy),width:zh(jf)}),cS=Vh(Xx,{LineString:Xh(ky),LinearRing:Xh(Ay),MultiGeometry:Xh(Ry),Point:Xh(jy),Polygon:Xh(Ly)}),fS=Vh(Hx,{Track:Xh(Ey)}),yS=Vh(Xx,{ExtendedData:Dy,Link:function(t,e){tu(dS,t,e)},address:zh(Df),description:zh(Df),name:zh(Df),open:zh(kf),phoneNumber:zh(Df),visibility:zh(kf)}),dS=Vh(Xx,{href:zh(Cy)}),gS=Vh(Xx,{LinearRing:Wh(Py)}),vS=Vh(Xx,{Style:zh(Ny),key:zh(Df),styleUrl:zh(function(t){var e=cm(kh(t,!1));return null!=t.baseURI?hy(t.baseURI,e).toString():e})}),mS=Vh(Xx,{ExtendedData:Dy,MultiGeometry:zh(Ry,"geometry"),LineString:zh(ky,"geometry"),LinearRing:zh(Ay,"geometry"),Point:zh(jy,"geometry"),Polygon:zh(Ly,"geometry"),Style:zh(Ny),StyleMap:function(e,o){var i=eu(void 0,SS,e,o);if(t(i)){var n=o[o.length-1];s(i)?n.Style=i:p(i)&&(n.styleUrl=i)}},address:zh(Df),description:zh(Df),name:zh(Df),open:zh(kf),phoneNumber:zh(Df),styleUrl:zh(Cy),visibility:zh(kf)},Vh(Hx,{MultiTrack:zh(function(e,o){var i=eu([],fS,e,o);if(t(i)){var n=new xl(null);return Cl(n,i),n}},"geometry"),Track:zh(Ey,"geometry")})),bS=Vh(Xx,{color:zh(Sy),fill:zh(kf),outline:zh(kf)}),wS=Vh(Xx,{SimpleData:function(t,e){var o=t.getAttribute("name");if(null!==o){var i=Df(t);e[e.length-1][o]=i}}}),xS=Vh(Xx,{IconStyle:function(e,o){var i=eu({},pS,e,o);if(t(i)){var n,r=o[o.length-1],s=ot(i,"Icon",{});n=s.href,n=t(n)?n:"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png";var a,p,l,h=i.hotSpot;t(h)?(a=[h.x,h.y],p=h.Af,l=h.Bf):"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"===n?(a=zx,l=p="pixels"):/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(n)&&(a=[.5,0],l=p="fraction");var u,h=s.x,c=s.y;t(h)&&t(c)&&(u=[h,c]);var f,h=s.w,s=s.h;t(h)&&t(s)&&(f=[h,s]);var y,s=i.heading;t(s)&&(y=ct(s)),i=i.scale,"https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"==n&&(f=Vx),a=new us({anchor:a,anchorOrigin:"bottom-left",anchorXUnits:p,anchorYUnits:l,crossOrigin:"anonymous",offset:u,offsetOrigin:"bottom-left",rotation:y,scale:i,size:f,src:n}),r.imageStyle=a}},LabelStyle:function(e,o){var i=eu({},hS,e,o);t(i)&&(o[o.length-1].textStyle=new wy({fill:new ep({color:ot(i,"color",Wx)}),scale:i.scale}))},LineStyle:function(e,o){var i=eu({},uS,e,o);t(i)&&(o[o.length-1].strokeStyle=new tp({color:ot(i,"color",Wx),width:ot(i,"width",1)}))},PolyStyle:function(e,o){var i=eu({},bS,e,o);if(t(i)){var n=o[o.length-1];n.fillStyle=new ep({color:ot(i,"color",Wx)});var r=i.fill;t(r)&&(n.fill=r),i=i.outline,t(i)&&(n.outline=i)}}}),SS=Vh(Xx,{Pair:function(e,o){var i=eu({},vS,e,o);if(t(i)){var n=i.key;t(n)&&"normal"==n&&(n=i.styleUrl,t(n)&&(o[o.length-1]=n),i=i.Style,t(i)&&(o[o.length-1]=i))}}});em=xy.prototype,em.eh=function(e,o){Gw(e);var i=Vh(Xx,{Folder:Hh(this.eh,this),Placemark:Xh(this.rf,this),Style:d(this.Jn,this),StyleMap:d(this.In,this)}),i=eu([],i,e,o,this);if(t(i))return i},em.rf=function(e,o){var i=eu({geometry:null},mS,e,o);if(t(i)){var n=new af,r=e.getAttribute("id");return null===r||n.Qb(r),r=o[0],null!=i.geometry&&ff(i.geometry,!1,r),n.t(i),this.c&&n.cf(this.d),n}},em.Jn=function(e,o){var i=e.getAttribute("id");if(null!==i){var n=Ny(e,o);t(n)&&(i=null!=e.baseURI?hy(e.baseURI,"#"+i).toString():"#"+i,this.b[i]=n)}},em.In=function(e,o){var i=e.getAttribute("id");if(null!==i){var n=eu(void 0,SS,e,o);t(n)&&(i=null!=e.baseURI?hy(e.baseURI,"#"+i).toString():"#"+i,this.b[i]=n)}},em.fh=function(e,o){if(!L(Xx,e.namespaceURI))return null;var i=this.rf(e,[uf(this,e,o)]);return t(i)?i:null},em.Ob=function(e,o){if(!L(Xx,e.namespaceURI))return[];var i;if(i=Gw(e),"Document"==i||"Folder"==i)return i=this.eh(e,[uf(this,e,o)]),t(i)?i:[];if("Placemark"==i)return i=this.rf(e,[uf(this,e,o)]),t(i)?[i]:[];if("kml"==i){i=[];var n;for(n=e.firstElementChild;null!==n;n=n.nextElementSibling){var r=this.Ob(n,o);t(r)&&F(i,r)}return i}return[]},em.Dn=function(t){return qw(t)?Fy(this,t):$w(t)?Oy(this,t):p(t)?(t=$h(t),Fy(this,t)):void 0},em.En=function(t){var e=[];return qw(t)?F(e,By(this,t)):$w(t)?F(e,Uy(this,t)):p(t)&&(t=$h(t),F(e,By(this,t))),e};var TS=Qh(Xx,["Document","Placemark"]),CS=Qh(Xx,{Document:Yh(function(t,e,o){iu({P:t},MS,zy,e,o)}),Placemark:Yh($y)}),MS=Qh(Xx,{Placemark:Yh($y)}),PS={Point:"Point",LineString:"LineString",LinearRing:"LinearRing",Polygon:"Polygon",MultiPoint:"MultiGeometry",MultiLineString:"MultiGeometry",MultiPolygon:"MultiGeometry"},ES=Qh(Xx,["href"],Qh(Hx,["x","y","w","h"])),kS=Qh(Xx,{href:Yh(Uf)},Qh(Hx,{x:Yh(Of),y:Yh(Of),w:Yh(Of),h:Yh(Of)})),AS=Qh(Xx,["scale","heading","Icon","hotSpot"]),RS=Qh(Xx,{Icon:Yh(function(t,e,o){t={P:t};var i=ES[o[o.length-1].P.namespaceURI],n=Jh(e,i);iu(t,kS,Kw,n,o,i),i=ES[Hx[0]],n=Jh(e,i),iu(t,kS,Ky,n,o,i)}),heading:Yh(Of),hotSpot:Yh(function(t,e){t.setAttribute("x",e.x),t.setAttribute("y",e.y),t.setAttribute("xunits",e.Af),t.setAttribute("yunits",e.Bf)}),scale:Yh(Wy)}),jS=Qh(Xx,["color","scale"]),LS=Qh(Xx,{color:Yh(Gy),scale:Yh(Wy)}),NS=Qh(Xx,["color","width"]),IS=Qh(Xx,{color:Yh(Gy),width:Yh(Of)}),DS=Qh(Xx,{LinearRing:Yh(Hy)}),FS=Qh(Xx,{LineString:Yh(Hy),Point:Yh(Hy),Polygon:Yh(Xy)}),OS=Qh(Xx,"name open visibility address phoneNumber description styleUrl Style".split(" ")),BS=Qh(Xx,{MultiGeometry:Yh(function(t,e,o){t={P:t};var i,n,r=e.M();"MultiPoint"==r?(i=e.ce(),n=zS):"MultiLineString"==r?(i=e.ad(),n=VS):"MultiPolygon"==r&&(i=e.Id(),n=ZS),iu(t,FS,n,i,o)}),LineString:Yh(Hy),LinearRing:Yh(Hy),Point:Yh(Hy),Polygon:Yh(Xy),Style:Yh(function(t,e,o){t={P:t};var i={},n=e.e,r=e.c,s=e.f;e=e.a,null===s||(i.IconStyle=s),null===e||(i.LabelStyle=e),null===r||(i.LineStyle=r),null===n||(i.PolyStyle=n),e=$S[o[o.length-1].P.namespaceURI],i=Jh(i,e),iu(t,HS,Kw,i,o,e)}),address:Yh(Uf),description:Yh(Uf),name:Yh(Uf),open:Yh(Ff),phoneNumber:Yh(Uf),styleUrl:Yh(Uf),visibility:Yh(Ff)}),US=Qh(Xx,{coordinates:Yh(function(t,e,o){o=o[o.length-1];var i=o.layout;o=o.stride;var n;"XY"==i||"XYM"==i?n=2:("XYZ"==i||"XYZM"==i)&&(n=3);var r,s=e.length,a="";if(0<s){for(a+=e[0],i=1;i<n;++i)a+=","+e[i];for(r=o;r<s;r+=o)for(a+=" "+e[r],i=1;i<n;++i)a+=","+e[r+i]}Uf(t,a)})}),GS=Qh(Xx,{outerBoundaryIs:Yh(qy),innerBoundaryIs:Yh(qy)}),qS=Qh(Xx,{color:Yh(Gy)}),$S=Qh(Xx,["IconStyle","LabelStyle","LineStyle","PolyStyle"]),HS=Qh(Xx,{IconStyle:Yh(function(t,e,o){t={P:t};var i={},n=e.Xa(),r=e.Dd(),s={href:e.b.f};if(null!==n){s.w=n[0],s.h=n[1];var a=e.mb(),p=e.rb();null!==p&&null!==r&&0!==p[0]&&p[1]!==n[1]&&(s.x=p[0],s.y=r[1]-(p[1]+n[1])),null===a||0===a[0]||a[1]===n[1]||(i.hotSpot={x:a[0],Af:"pixels",y:n[1]-a[1],Bf:"pixels"})}i.Icon=s,n=e.l,1!==n&&(i.scale=n),e=e.q,0!==e&&(i.heading=e),e=AS[o[o.length-1].P.namespaceURI],i=Jh(i,e),iu(t,RS,Kw,i,o,e)}),LabelStyle:Yh(function(e,o,i){e={P:e};var n={},r=o.b;null===r||(n.color=r.b),o=o.a,t(o)&&1!==o&&(n.scale=o),o=jS[i[i.length-1].P.namespaceURI],n=Jh(n,o),iu(e,LS,Kw,n,i,o)}),LineStyle:Yh(function(t,e,o){t={P:t};var i=NS[o[o.length-1].P.namespaceURI];e=Jh({color:e.b,width:e.a},i),iu(t,IS,Kw,e,o,i)}),PolyStyle:Yh(function(t,e,o){iu({P:t},qS,XS,[e.b],o)})}),XS=_h("color"),WS=_h("coordinates"),KS=_h("innerBoundaryIs"),zS=_h("Point"),VS=_h("LineString"),YS=_h("LinearRing"),ZS=_h("Polygon"),_S=_h("outerBoundaryIs");xy.prototype.a=function(t,e){e=cf(this,e);var o=Uw(Xx[4],"kml");Ww(o,"http://www.w3.org/2000/xmlns/","xmlns:gx",Hx[0]),Ww(o,"http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance"),Ww(o,"http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");var i={P:o},n={};1<t.length?n.Document=t:1==t.length&&(n.Placemark=t[0]);var r=TS[o.namespaceURI],n=Jh(n,r);return iu(i,CS,Kw,n,[e],r),o},v(Yy,Cf);var JS=[null],QS=Vh(JS,{nd:function(t,e){e[e.length-1].Ac.push(t.getAttribute("ref"))},tag:Zy}),tT=Vh(JS,{node:function(t,e){var o=e[0],i=e[e.length-1],n=t.getAttribute("id"),r=[parseFloat(t.getAttribute("lon")),parseFloat(t.getAttribute("lat"))];i.ng[n]=r;var s=eu({od:{}},eT,t,e);Q(s.od)||(r=new Ta(r),ff(r,!1,o),o=new af(r),o.Qb(n),o.t(s.od),i.features.push(o))},way:function(t,e){for(var o=e[0],i=t.getAttribute("id"),n=eu({Ac:[],od:{}},QS,t,e),r=e[e.length-1],s=[],a=0,p=n.Ac.length;a<p;a++)F(s,r.ng[n.Ac[a]]);n.Ac[0]==n.Ac[n.Ac.length-1]?(a=new Fa(null),Ua(a,"XY",s,[s.length])):(a=new ml(null),wl(a,"XY",s)),ff(a,!1,o),o=new af(a),o.Qb(i),o.t(n.od),r.features.push(o)}}),eT=Vh(JS,{tag:Zy});Yy.prototype.Ob=function(e,o){var i=uf(this,e,o);return"osm"==e.localName&&(i=eu({ng:{},features:[]},tT,e,[i]),t(i.features))?i.features:[]},Jy.prototype.c=function(t){return qw(t)?this.a(t):$w(t)?this.b(t):p(t)?(t=$h(t),this.a(t)):null},v(Qy,Jy),Qy.prototype.a=function(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return this.b(t);return null},Qy.prototype.b=function(e){return e=eu({},iT,e,[]),t(e)?e:null};var oT=[null,"http://www.opengis.net/ows/1.1"],iT=Vh(oT,{ServiceIdentification:zh(function(t,e){return eu({},dT,t,e)}),ServiceProvider:zh(function(t,e){return eu({},gT,t,e)}),OperationsMetadata:zh(function(t,e){return eu({},uT,t,e)})}),nT=Vh(oT,{DeliveryPoint:zh(Df),City:zh(Df),AdministrativeArea:zh(Df),PostalCode:zh(Df),Country:zh(Df),ElectronicMailAddress:zh(Df)}),rT=Vh(oT,{Value:Kh(function(t){return Df(t)})}),sT=Vh(oT,{AllowedValues:zh(function(t,e){return eu({},rT,t,e)})}),aT=Vh(oT,{Phone:zh(function(t,e){return eu({},cT,t,e)}),Address:zh(function(t,e){return eu({},nT,t,e)})}),pT=Vh(oT,{HTTP:zh(function(t,e){return eu({},lT,t,e)})}),lT=Vh(oT,{Get:Kh(function(e,o){var i=_y(e);return t(i)?eu({href:i},fT,e,o):void 0}),Post:void 0}),hT=Vh(oT,{DCP:zh(function(t,e){return eu({},pT,t,e)})}),uT=Vh(oT,{Operation:function(e,o){var i=e.getAttribute("name"),n=eu({},hT,e,o);t(n)&&(o[o.length-1][i]=n)}}),cT=Vh(oT,{Voice:zh(Df),Facsimile:zh(Df)}),fT=Vh(oT,{Constraint:Kh(function(e,o){var i=e.getAttribute("name");return t(i)?eu({name:i},sT,e,o):void 0})}),yT=Vh(oT,{IndividualName:zh(Df),PositionName:zh(Df),ContactInfo:zh(function(t,e){return eu({},aT,t,e)})}),dT=Vh(oT,{Title:zh(Df),ServiceTypeVersion:zh(Df),ServiceType:zh(Df)}),gT=Vh(oT,{ProviderName:zh(Df),ProviderSite:zh(_y),ServiceContact:zh(function(t,e){return eu({},yT,t,e)})});v(ed,iy),em=ed.prototype,em.hd=function(t,e){var o=this.kd(t,e);return new af(o)},em.pf=function(t,e){return[this.hd(t,e)]},em.kd=function(t,e){var o=oa(this.a),i=id(t,o,this.b);return td(i,i.length,o,i),o=va(i,0,i.length,o),ff(new ml(o,this.a),!1,cf(this,e))},em.ye=function(t,e){var o=t.Q();return null!=o?this.rd(o,e):""},em.Mh=function(t,e){return this.ye(t[0],e)},em.rd=function(t,e){t=ff(t,!0,cf(this,e));var o=t.j,i=t.s;return td(o,o.length,i,o),od(o,i,this.b)},v(sd,yf),sd.prototype.of=function(e,o){if("Topology"==e.type){var i,n=null,r=null;t(e.transform)&&(i=e.transform,n=i.scale,r=i.translate);var s=e.arcs;if(t(i)){i=n;var a,p,l=r;for(a=0,p=s.length;a<p;++a)for(var h=s[a],u=i,c=l,f=0,y=0,d=void 0,g=void 0,v=void 0,g=0,v=h.length;g<v;++g)d=h[g],f+=d[0],y+=d[1],d[0]=f,d[1]=y,hd(d,u,c)}for(i=[],l=V(e.objects),a=0,p=l.length;a<p;++a)"GeometryCollection"===l[a].type?(h=l[a],i.push.apply(i,pd(h,s,n,r,o))):(h=l[a],i.push(ld(h,s,n,r,o)));return i}return[]},sd.prototype.za=function(){return this.defaultDataProjection};var vT={Point:function(t,e,o){return t=t.coordinates,null===e||null===o||hd(t,e,o),new Ta(t)},LineString:function(t,e){var o=ad(t.arcs,e);return new ml(o)},Polygon:function(t,e){var o,i,n=[];for(o=0,i=t.arcs.length;o<i;++o)n[o]=ad(t.arcs[o],e);return new Fa(n)},MultiPoint:function(t,e,o){t=t.coordinates;var i,n;if(null!==e&&null!==o)for(i=0,n=t.length;i<n;++i)hd(t[i],e,o);return new Ml(t)},MultiLineString:function(t,e){var o,i,n=[];for(o=0,i=t.arcs.length;o<i;++o)n[o]=ad(t.arcs[o],e);return new xl(n)},MultiPolygon:function(t,e){var o,i,n,r,s,a,p=[];for(s=0,a=t.arcs.length;s<a;++s){for(o=t.arcs[s],i=[],n=0,r=o.length;n<r;++n)i[n]=ad(o[n],e);p[s]=i}return new Pl(p)}};v(ud,Cf),ud.prototype.Ob=function(e,o){var i={featureType:this.e,featureNS:this.c};return rt(i,uf(this,e,t(o)?o:{})),i=[i],this.b.b["http://www.opengis.net/gml"].featureMember=Xh(Ef.prototype.jd),i=eu([],this.b.b,e,i,this.b),t(i)||(i=[]),i},ud.prototype.g=function(t){return qw(t)?yd(t):$w(t)?eu({},ST,t,[]):p(t)?(t=$h(t),yd(t)):void 0},ud.prototype.f=function(t){return qw(t)?cd(this,t):$w(t)?fd(this,t):p(t)?(t=$h(t),cd(this,t)):void 0};var mT={"http://www.opengis.net/gml":{boundedBy:zh(Ef.prototype.qe,"bounds")}},bT={"http://www.opengis.net/wfs":{totalInserted:zh(Nf),totalUpdated:zh(Nf),totalDeleted:zh(Nf)}},wT={"http://www.opengis.net/ogc":{FeatureId:Xh(function(t){return t.getAttribute("fid")})}},xT={"http://www.opengis.net/wfs":{Feature:function(t,e){tu(wT,t,e)}}},ST={"http://www.opengis.net/wfs":{TransactionSummary:zh(function(t,e){return eu({},bT,t,e)},"transactionSummary"),InsertResults:zh(function(t,e){return eu([],xT,t,e)},"insertIds")}},TT={"http://www.opengis.net/wfs":{PropertyName:Yh(Uf)}},CT={"http://www.opengis.net/wfs":{Insert:Yh(function(t,e,o){var i=o[o.length-1],i=Uw(i.featureNS,i.featureType);t.appendChild(i),Gf.prototype.Lh(i,e,o)}),Update:Yh(function(e,o,i){var n=i[i.length-1],r=n.featureType,s=n.featurePrefix,s=t(s)?s:"feature",a=n.featureNS;if(e.setAttribute("typeName",s+":"+r),Ww(e,"http://www.w3.org/2000/xmlns/","xmlns:"+s,a),r=o.$,t(r)){for(var s=o.C(),a=[],p=0,l=s.length;p<l;p++){var h=o.get(s[p]);t(h)&&a.push({name:s[p],value:h})}iu({P:e,srsName:n.srsName},CT,_h("Property"),a,i),dd(e,r)}}),Delete:Yh(function(e,o,i){var n=i[i.length-1];i=n.featureType;var r=n.featurePrefix,r=t(r)?r:"feature",n=n.featureNS;e.setAttribute("typeName",r+":"+i),Ww(e,"http://www.w3.org/2000/xmlns/","xmlns:"+r,n),o=o.$,t(o)&&dd(e,o)}),Property:Yh(function(t,e,o){var i=Uw("http://www.opengis.net/wfs","Name");t.appendChild(i),Uf(i,e.name),null!=e.value&&(i=Uw("http://www.opengis.net/wfs","Value"),t.appendChild(i),e.value instanceof Qs?Gf.prototype.Ae(i,e.value,o):Uf(i,e.value))}),Native:Yh(function(e,o){t(o.vo)&&e.setAttribute("vendorId",o.vo),t(o.Tn)&&e.setAttribute("safeToIgnore",o.Tn),t(o.value)&&Uf(e,o.value)})}},MT={"http://www.opengis.net/wfs":{Query:Yh(function(e,o,i){var n=i[i.length-1],r=n.featurePrefix,s=n.featureNS,a=n.propertyNames,p=n.srsName;e.setAttribute("typeName",(t(r)?r+":":"")+o),t(p)&&e.setAttribute("srsName",p),t(s)&&Ww(e,"http://www.w3.org/2000/xmlns/","xmlns:"+r,s),o=nt(n),o.P=e,iu(o,TT,_h("PropertyName"),a,i),n=n.bbox,t(n)&&(a=Uw("http://www.opengis.net/ogc","Filter"),o=i[i.length-1].geometryName,r=Uw("http://www.opengis.net/ogc","BBOX"),a.appendChild(r),s=Uw("http://www.opengis.net/ogc","PropertyName"),Uf(s,o),r.appendChild(s),Gf.prototype.Ae(r,n,i),e.appendChild(a))})}};ud.prototype.i=function(e){var o=Uw("http://www.opengis.net/wfs","GetFeature");o.setAttribute("service","WFS"),o.setAttribute("version","1.1.0"),t(e)&&(t(e.handle)&&o.setAttribute("handle",e.handle),t(e.outputFormat)&&o.setAttribute("outputFormat",e.outputFormat),t(e.maxFeatures)&&o.setAttribute("maxFeatures",e.maxFeatures),t(e.resultType)&&o.setAttribute("resultType",e.resultType),t(e.oo)&&o.setAttribute("startIndex",e.oo),t(e.count)&&o.setAttribute("count",e.count)),Ww(o,"http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.d);var i=e.featureTypes;e=[{P:o,srsName:e.srsName,featureNS:t(e.featureNS)?e.featureNS:this.c,featurePrefix:e.featurePrefix,geometryName:e.geometryName,bbox:e.bbox,bh:t(e.bh)?e.bh:[]}];var n=nt(e[e.length-1]);return n.P=o,iu(n,MT,_h("Query"),i,e),o},ud.prototype.o=function(e,o,i,n){var r=[],s=Uw("http://www.opengis.net/wfs","Transaction");s.setAttribute("service","WFS"),s.setAttribute("version","1.1.0");var a,p;return t(n)&&(a=t(n.gmlOptions)?n.gmlOptions:{},t(n.handle)&&s.setAttribute("handle",n.handle)),Ww(s,"http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.d),null!=e&&(p={P:s,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:n.featurePrefix},rt(p,a),iu(p,CT,_h("Insert"),e,r)),null!=o&&(p={P:s,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:n.featurePrefix},rt(p,a),iu(p,CT,_h("Update"),o,r)),null!=i&&iu({P:s,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:n.featurePrefix},CT,_h("Delete"),i,r),t(n.nativeElements)&&iu({P:s,featureNS:n.featureNS,featureType:n.featureType,featurePrefix:n.featurePrefix},CT,_h("Native"),n.nativeElements,r),s},ud.prototype.sf=function(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return this.te(t);return null},ud.prototype.te=function(t){if(null!=t.firstElementChild&&null!=t.firstElementChild.firstElementChild)for(t=t.firstElementChild.firstElementChild,t=t.firstElementChild;null!==t;t=t.nextElementSibling)if(0!==t.childNodes.length&&(1!==t.childNodes.length||3!==t.firstChild.nodeType)){var e=[{}];return this.b.qe(t,e),xo(e.pop().srsName)}return null},v(gd,iy);var PT={Point:vd,LineString:md,Polygon:bd,MultiPoint:function(t){var e=[];t=t.ce();for(var o=0,i=t.length;o<i;++o)e.push("("+vd(t[o])+")");return e.join(",")},MultiLineString:function(t){var e=[];t=t.ad();for(var o=0,i=t.length;o<i;++o)e.push("("+md(t[o])+")");return e.join(",")},MultiPolygon:function(t){var e=[];t=t.Id();for(var o=0,i=t.length;o<i;++o)e.push("("+bd(t[o])+")");return e.join(",")},GeometryCollection:function(t){var e=[];t=t.Vf();for(var o=0,i=t.length;o<i;++o)e.push(wd(t[o]));return e.join(",")}};em=gd.prototype,em.hd=function(e,o){var i=this.kd(e,o);if(t(i)){var n=new af;return n.La(i),n}return null},em.pf=function(t,e){var o=[],i=this.kd(t,e);o=this.b&&"GeometryCollection"==i.M()?i.d:[i];for(var n=[],r=0,s=o.length;r<s;++r)i=new af,i.La(o[r]),n.push(i);return n},em.kd=function(e,o){var i;return i=new Cd(new xd(e)),i.b=Td(i.a),i=Md(i),t(i)?ff(i,!1,o):null},em.ye=function(e,o){var i=e.Q();return t(i)?this.rd(i,o):""},em.Mh=function(t,e){if(1==t.length)return this.ye(t[0],e);for(var o=[],i=0,n=t.length;i<n;++i)o.push(t[i].Q());return o=new ul(o),this.rd(o,e)},em.rd=function(t,e){return wd(ff(t,!0,e))},em=Cd.prototype,em.match=function(t){return(t=this.b.type==t)&&(this.b=Td(this.a)),t},em.lf=function(){if(this.match(2)){var t=Pd(this);if(this.match(3))return t}else if(Ad(this))return null;throw Error(Rd(this))},em.kf=function(){if(this.match(2)){var t=Ed(this);if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this))},em.mf=function(){if(this.match(2)){var t=kd(this);if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this))},em.kn=function(){if(this.match(2)){var t;if(2==this.b.type)for(t=[this.lf()];this.match(5);)t.push(this.lf());else t=Ed(this);if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this))},em.jn=function(){if(this.match(2)){var t=kd(this);if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this));
+},em.ln=function(){if(this.match(2)){for(var t=[this.mf()];this.match(5);)t.push(this.mf());if(this.match(3))return t}else if(Ad(this))return[];throw Error(Rd(this))};var ET={POINT:Ta,LINESTRING:ml,POLYGON:Fa,MULTIPOINT:Ml,MULTILINESTRING:xl,MULTIPOLYGON:Pl},kT={POINT:Cd.prototype.lf,LINESTRING:Cd.prototype.kf,POLYGON:Cd.prototype.mf,MULTIPOINT:Cd.prototype.kn,MULTILINESTRING:Cd.prototype.jn,MULTIPOLYGON:Cd.prototype.ln};v(jd,Jy),jd.prototype.a=function(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return this.b(t);return null},jd.prototype.b=function(e){return this.version=cm(e.getAttribute("version")),e=eu({version:this.version},RT,e,[]),t(e)?e:null};var AT=[null,"http://www.opengis.net/wms"],RT=Vh(AT,{Service:zh(function(t,e){return eu({},LT,t,e)}),Capability:zh(function(t,e){return eu({},jT,t,e)})}),jT=Vh(AT,{Request:zh(function(t,e){return eu({},GT,t,e)}),Exception:zh(function(t,e){return eu([],FT,t,e)}),Layer:zh(function(t,e){return eu({},OT,t,e)})}),LT=Vh(AT,{Name:zh(Df),Title:zh(Df),Abstract:zh(Df),KeywordList:zh(Dd),OnlineResource:zh(_y),ContactInformation:zh(function(t,e){return eu({},NT,t,e)}),Fees:zh(Df),AccessConstraints:zh(Df),LayerLimit:zh(Nf),MaxWidth:zh(Nf),MaxHeight:zh(Nf)}),NT=Vh(AT,{ContactPersonPrimary:zh(function(t,e){return eu({},IT,t,e)}),ContactPosition:zh(Df),ContactAddress:zh(function(t,e){return eu({},DT,t,e)}),ContactVoiceTelephone:zh(Df),ContactFacsimileTelephone:zh(Df),ContactElectronicMailAddress:zh(Df)}),IT=Vh(AT,{ContactPerson:zh(Df),ContactOrganization:zh(Df)}),DT=Vh(AT,{AddressType:zh(Df),Address:zh(Df),City:zh(Df),StateOrProvince:zh(Df),PostCode:zh(Df),Country:zh(Df)}),FT=Vh(AT,{Format:Xh(Df)}),OT=Vh(AT,{Name:zh(Df),Title:zh(Df),Abstract:zh(Df),KeywordList:zh(Dd),CRS:Kh(Df),EX_GeographicBoundingBox:zh(function(e,o){var i=eu({},UT,e,o);if(t(i)){var n=i.westBoundLongitude,r=i.southBoundLatitude,s=i.eastBoundLongitude,i=i.northBoundLatitude;return t(n)&&t(r)&&t(s)&&t(i)?[n,r,s,i]:void 0}}),BoundingBox:Kh(function(t){var e=[Lf(t.getAttribute("minx")),Lf(t.getAttribute("miny")),Lf(t.getAttribute("maxx")),Lf(t.getAttribute("maxy"))],o=[Lf(t.getAttribute("resx")),Lf(t.getAttribute("resy"))];return{crs:t.getAttribute("CRS"),extent:e,res:o}}),Dimension:Kh(function(t){return{name:t.getAttribute("name"),units:t.getAttribute("units"),unitSymbol:t.getAttribute("unitSymbol"),"default":t.getAttribute("default"),multipleValues:Af(t.getAttribute("multipleValues")),nearestValue:Af(t.getAttribute("nearestValue")),current:Af(t.getAttribute("current")),values:Df(t)}}),Attribution:zh(function(t,e){return eu({},BT,t,e)}),AuthorityURL:Kh(function(e,o){var i=Ld(e,o);if(t(i))return i.name=e.getAttribute("name"),i}),Identifier:Kh(Df),MetadataURL:Kh(function(e,o){var i=Ld(e,o);if(t(i))return i.type=e.getAttribute("type"),i}),DataURL:Kh(Ld),FeatureListURL:Kh(Ld),Style:Kh(function(t,e){return eu({},XT,t,e)}),MinScaleDenominator:zh(jf),MaxScaleDenominator:zh(jf),Layer:Kh(function(e,o){var i=o[o.length-1],n=eu({},OT,e,o);if(t(n)){var r=Af(e.getAttribute("queryable"));return t(r)||(r=i.queryable),n.queryable=!!t(r)&&r,r=If(e.getAttribute("cascaded")),t(r)||(r=i.cascaded),n.cascaded=r,r=Af(e.getAttribute("opaque")),t(r)||(r=i.opaque),n.opaque=!!t(r)&&r,r=Af(e.getAttribute("noSubsets")),t(r)||(r=i.noSubsets),n.noSubsets=!!t(r)&&r,r=Lf(e.getAttribute("fixedWidth")),t(r)||(r=i.fixedWidth),n.fixedWidth=r,r=Lf(e.getAttribute("fixedHeight")),t(r)||(r=i.fixedHeight),n.fixedHeight=r,P(["Style","CRS","AuthorityURL"],function(e){var o=i[e];if(t(o)){var r=it(n,e),r=r.concat(o);n[e]=r}}),P("EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" "),function(e){t(n[e])||(n[e]=i[e])}),n}})}),BT=Vh(AT,{Title:zh(Df),OnlineResource:zh(_y),LogoURL:zh(Id)}),UT=Vh(AT,{westBoundLongitude:zh(jf),eastBoundLongitude:zh(jf),southBoundLatitude:zh(jf),northBoundLatitude:zh(jf)}),GT=Vh(AT,{GetCapabilities:zh(Nd),GetMap:zh(Nd),GetFeatureInfo:zh(Nd)}),qT=Vh(AT,{Format:Kh(Df),DCPType:Kh(function(t,e){return eu({},$T,t,e)})}),$T=Vh(AT,{HTTP:zh(function(t,e){return eu({},HT,t,e)})}),HT=Vh(AT,{Get:zh(Ld),Post:zh(Ld)}),XT=Vh(AT,{Name:zh(Df),Title:zh(Df),Abstract:zh(Df),LegendURL:Kh(Id),StyleSheetURL:zh(Ld),StyleURL:zh(Ld)}),WT=Vh(AT,{Format:zh(Df),OnlineResource:zh(_y)}),KT=Vh(AT,{Keyword:Xh(Df)});v(Fd,Cf),Fd.prototype.Ob=function(e,o){var i={featureType:this.featureType,featureNS:this.featureNS};return t(o)&&rt(i,uf(this,e,o)),Od(this,e,[i])},v(Bd,Jy),Bd.prototype.a=function(t){for(t=t.firstChild;null!==t;t=t.nextSibling)if(1==t.nodeType)return this.b(t);return null},Bd.prototype.b=function(e){this.version=cm(e.getAttribute("version"));var o=this.d.b(e);return t(o)?(o.version=this.version,o=eu(o,YT,e,[]),t(o)?o:null):null};var zT=[null,"http://www.opengis.net/wmts/1.0"],VT=[null,"http://www.opengis.net/ows/1.1"],YT=Vh(zT,{Contents:zh(function(t,e){return eu({},ZT,t,e)})}),ZT=Vh(zT,{Layer:Kh(function(t,e){return eu({},_T,t,e)}),TileMatrixSet:Kh(function(t,e){return eu({},eC,t,e)})}),_T=Vh(zT,{Style:Kh(function(e,o){var i=eu({},JT,e,o);if(t(i)){var n="true"===e.getAttribute("isDefault");return i.isDefault=n,i}}),Format:Kh(Df),TileMatrixSetLink:Kh(function(t,e){return eu({},QT,t,e)}),ResourceURL:Kh(function(e){var o=e.getAttribute("format"),i=e.getAttribute("template");e=e.getAttribute("resourceType");var n={};return t(o)&&(n.format=o),t(i)&&(n.template=i),t(e)&&(n.resourceType=e),n})},Vh(VT,{Title:zh(Df),Abstract:zh(Df),WGS84BoundingBox:zh(function(t,e){var o=eu([],tC,t,e);return 2!=o.length?void 0:Ne(o)}),Identifier:zh(Df)})),JT=Vh(zT,{LegendURL:Kh(function(t){var e={};return e.format=t.getAttribute("format"),e.href=_y(t),e})},Vh(VT,{Title:zh(Df),Identifier:zh(Df)})),QT=Vh(zT,{TileMatrixSet:zh(Df)}),tC=Vh(VT,{LowerCorner:Xh(Ud),UpperCorner:Xh(Ud)}),eC=Vh(zT,{WellKnownScaleSet:zh(Df),TileMatrix:Kh(function(t,e){return eu({},oC,t,e)})},Vh(VT,{SupportedCRS:zh(Df),Identifier:zh(Df)})),oC=Vh(zT,{TopLeftCorner:zh(Ud),ScaleDenominator:zh(jf),TileWidth:zh(Nf),TileHeight:zh(Nf),MatrixWidth:zh(Nf),MatrixHeight:zh(Nf)},Vh(VT,{Identifier:zh(Df)})),iC=new lo(6378137);v(Gd,re),em=Gd.prototype,em.O=function(){this.Zd(!1),Gd.S.O.call(this)},em.Vk=function(){var t=this.sg();null!=t&&(this.d=Co(xo("EPSG:4326"),t),null===this.a||this.set("position",this.d(this.a)))},em.Wk=function(){if(Rb){var e=this.tg();e&&!t(this.c)?this.c=sm.navigator.geolocation.watchPosition(d(this.tn,this),d(this.vn,this),this.bg()):!e&&t(this.c)&&(sm.navigator.geolocation.clearWatch(this.c),this.c=void 0)}},em.tn=function(t){t=t.coords,this.set("accuracy",t.accuracy),this.set("altitude",null===t.altitude?void 0:t.altitude),this.set("altitudeAccuracy",null===t.altitudeAccuracy?void 0:t.altitudeAccuracy),this.set("heading",null===t.heading?void 0:ct(t.heading)),null===this.a?this.a=[t.longitude,t.latitude]:(this.a[0]=t.longitude,this.a[1]=t.latitude);var e=this.d(this.a);this.set("position",e),this.set("speed",null===t.speed?void 0:t.speed),t=Ga(iC,this.a,t.accuracy),t.qa(this.d),this.set("accuracyGeometry",t),this.k()},em.vn=function(t){t.type="error",this.Zd(!1),this.dispatchEvent(t)},em.Ki=function(){return this.get("accuracy")},em.Li=function(){return this.get("accuracyGeometry")||null},em.Ni=function(){return this.get("altitude")},em.Oi=function(){return this.get("altitudeAccuracy")},em.Tk=function(){return this.get("heading")},em.Uk=function(){return this.get("position")},em.sg=function(){return this.get("projection")},em.vj=function(){return this.get("speed")},em.tg=function(){return this.get("tracking")},em.bg=function(){return this.get("trackingOptions")},em.ug=function(t){this.set("projection",t)},em.Zd=function(t){this.set("tracking",t)},em.Dh=function(t){this.set("trackingOptions",t)};var nC=new tp({color:"rgba(0,0,0,0.2)"}),rC=[90,45,30,20,10,5,2,1,.5,.2,.1,.05,.01,.005,.002,.001];em=Xd.prototype,em.Xk=function(){return this.g},em.kj=function(){return this.b},em.pj=function(){return this.a},em.gg=function(t){var e=t.vectorContext,o=t.frameState;t=o.extent;var i=o.viewState,n=i.center,r=i.projection,i=i.resolution,o=o.pixelRatio,o=i*i/(4*o*o);if(null===this.i||!So(this.i,r)){var s=r.G(),a=r.g,p=a[2],l=a[1],h=a[0];this.c=a[3],this.d=p,this.e=l,this.f=h,a=xo("EPSG:4326"),this.q=To(a,r),this.o=To(r,a),this.l=this.o(_e(s)),this.i=r}for(var u,r=this.l[0],s=this.l[1],a=-1,l=Math.pow(this.n*i,2),h=[],c=[],i=0,p=rC.length;i<p&&(u=rC[i]/2,h[0]=r-u,h[1]=s-u,c[0]=r+u,c[1]=s+u,this.q(h,h),this.q(c,c),u=Math.pow(c[0]-h[0],2)+Math.pow(c[1]-h[1],2),!(u<=l));++i)a=rC[i];if(i=a,-1==i)this.b.length=this.a.length=0;else{for(r=this.o(n),n=r[0],r=r[1],s=this.U,n=Math.floor(n/i)*i,l=lt(n,this.f,this.d),p=Wd(this,l,o,t,0),a=0;l!=this.f&&a++<s;)l=Math.max(l-i,this.f),p=Wd(this,l,o,t,p);for(l=lt(n,this.f,this.d),a=0;l!=this.d&&a++<s;)l=Math.min(l+i,this.d),p=Wd(this,l,o,t,p);for(this.b.length=p,r=Math.floor(r/i)*i,n=lt(r,this.e,this.c),p=Kd(this,n,o,t,0),a=0;n!=this.e&&a++<s;)n=Math.max(n-i,this.e),p=Kd(this,n,o,t,p);for(n=lt(r,this.e,this.c),a=0;n!=this.c&&a++<s;)n=Math.min(n+i,this.c),p=Kd(this,n,o,t,p);this.a.length=p}for(e.Aa(null,this.V),t=0,o=this.b.length;t<o;++t)n=this.b[t],e.zb(n,null);for(t=0,o=this.a.length;t<o;++t)n=this.a[t],e.zb(n,null)},em.setMap=function(t){null!==this.g&&(this.g.u("postcompose",this.gg,this),this.g.render()),null!==t&&(t.r("postcompose",this.gg,this),t.render()),this.g=t},v(zd,_r),zd.prototype.b=function(e){if(t(e)){var o=c(e);return o in this.d?this.d[o]:(e=Q(this.d)?this.a:this.a.cloneNode(!1),this.d[o]=e)}return this.a},zd.prototype.q=function(){this.state=3,P(this.c,Kt),this.c=null,this.dispatchEvent("change")},zd.prototype.l=function(){t(this.resolution)||(this.resolution=to(this.extent)/this.a.height),this.state=2,P(this.c,Kt),this.c=null,this.dispatchEvent("change")},zd.prototype.load=function(){0==this.state&&(this.state=1,this.dispatchEvent("change"),this.c=[Xt(this.a,"error",this.q,!1,this),Xt(this.a,"load",this.l,!1,this)],this.g(this,this.i))},v(Vd,nn),em=Vd.prototype,em.O=function(){1==this.state&&Yd(this),Vd.S.O.call(this)},em.Ma=function(e){if(t(e)){var o=c(e);return o in this.c?this.c[o]:(e=Q(this.c)?this.a:this.a.cloneNode(!1),this.c[o]=e)}return this.a},em.gb=function(){return this.g},em.Yk=function(){this.state=3,Yd(this),rn(this)},em.Zk=function(){this.state=this.a.naturalWidth&&this.a.naturalHeight?2:4,Yd(this),rn(this)},em.load=function(){0==this.state&&(this.state=1,rn(this),this.e=[Xt(this.a,"error",this.Yk,!1,this),Xt(this.a,"load",this.Zk,!1,this)],this.i(this,this.g))},v(Jd,Qt),em=Jd.prototype,em.Zc=!1,em.O=function(){Jd.S.O.call(this),this.b.Yc()},em.$m=function(t){var e=t.b.dataTransfer;(this.Zc=!(!e||!(e.types&&(L(e.types,"Files")||L(e.types,"public.file-url"))||e.files&&0<e.files.length)))&&t.preventDefault()},em.an=function(t){this.Zc&&(t.preventDefault(),t.b.dataTransfer.dropEffect="none")},em.bn=function(t){this.Zc&&(t.preventDefault(),t.fb(),t=t.b.dataTransfer,t.effectAllowed="all",t.dropEffect="copy")},em.cn=function(t){this.Zc&&(t.preventDefault(),t.fb(),t=new Rt(t.b),t.type="drop",this.dispatchEvent(t))},Qd.prototype.cancel=function(t){if(this.b)this.c instanceof Qd&&this.c.cancel();else{if(this.a){var e=this.a;delete this.a,t?e.cancel(t):(e.i--,0>=e.i&&e.cancel())}this.U?this.U.call(this.o,this):this.q=!0,this.b||(t=new sg,eg(this),tg(this,!1,t))}},Qd.prototype.l=function(t,e){this.g=!1,tg(this,t,e)},Qd.prototype.then=function(t,e,o){var i,n,r=new Kl(function(t,e){i=t,n=e});return og(this,i,function(t){t instanceof sg?r.cancel():n(t)}),r.then(t,e,o)},Gl(Qd),v(rg,m),rg.prototype.message="Deferred has already fired",rg.prototype.name="AlreadyCalledError",v(sg,m),sg.prototype.message="Deferred was canceled",sg.prototype.name="CanceledError",ag.prototype.a=function(){throw delete sC[this.$],this.b};var sC={};v(pg,m);var aC={AbortError:3,EncodingError:5,InvalidModificationError:9,InvalidStateError:7,NotFoundError:1,NotReadableError:4,NoModificationAllowedError:6,PathExistsError:12,QuotaExceededError:10,SecurityError:2,SyntaxError:8,TypeMismatchError:11};v(hg,Pt),v(ug,Qt),ug.prototype.getError=function(){return this.Ya.error&&new pg(this.Ya.error,"reading file")},ug.prototype.b=function(t){this.dispatchEvent(new hg(t,this))},ug.prototype.O=function(){ug.S.O.call(this),delete this.Ya},v(fg,As),fg.prototype.O=function(){t(this.a)&&Kt(this.a),fg.S.O.call(this)},fg.prototype.g=function(t){t=t.b.dataTransfer.files;var e,o,i;for(e=0,o=t.length;e<o;++e){var n=i=t[e],r=new ug,s=cg(r);r.Ya.readAsText(n,""),og(s,g(this.i,i),null,this)}},fg.prototype.i=function(t,e){var o=this.l,i=this.o;null===i&&(i=o.R().e);var n,r,o=this.f,s=[];for(n=0,r=o.length;n<r;++n){var a,p=new o[n];try{a=p.ja(e)}catch(l){a=null}if(null!==a){var h,u,p=p.za(e),p=To(p,i);for(h=0,u=a.length;h<u;++h){var c=a[h],f=c.Q();null!=f&&f.qa(p),s.push(c)}}}this.dispatchEvent(new yg(pC,this,t,s,i))},fg.prototype.setMap=function(e){t(this.a)&&(Kt(this.a),this.a=void 0),null!==this.e&&(Mt(this.e),this.e=null),fg.S.setMap.call(this,e),null!==e&&(this.e=new Jd(e.a),this.a=qt(this.e,"drop",this.g,!1,this))};var pC="addfeatures";v(yg,Pt),v(dg,pi),dg.prototype.clone=function(){return new dg(this.x,this.y)},dg.prototype.scale=pi.prototype.scale,dg.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},dg.prototype.rotate=function(t){var e=Math.cos(t);t=Math.sin(t);var o=this.y*e+this.x*t;return this.x=this.x*e-this.y*t,this.y=o,this},v(gg,$s),v(wg,Pt),v(xg,$s),xg.prototype.setMap=function(t){xg.S.setMap.call(this,t),this.Ra()},xg.prototype.X=function(){var t,e=Rg(this),o=e.Q();this.a===lC?t=o.K():this.a===hC?(t=o.K(),t.pop(),o.W(t)):this.a===uC&&(this.f[0].pop(),this.f[0].push(this.f[0][0]),o.W(this.f),t=o.K()),"MultiPoint"===this.L?e.La(new Ml([t])):"MultiLineString"===this.L?e.La(new xl([t])):"MultiPolygon"===this.L&&e.La(new Pl([t])),this.dispatchEvent(new wg("drawend",e)),null===this.oa||this.oa.push(e),null===this.Ga||this.Ga.jf(e)},xg.prototype.nc=pb,xg.prototype.Ra=function(){var t=this.l,e=this.c();null!==t&&e||Rg(this),this.T.setMap(e?t:null)};var lC="Point",hC="LineString",uC="Polygon",cC="Circle";v(Lg,$s),em=Lg.prototype,em.Cg=function(e){var o=e.Q();t(this.H[o.M()])&&this.H[o.M()].call(this,e,o),e=this.l,null===e||Ug(this,this.L,e)},em.setMap=function(t){this.n.setMap(t),Lg.S.setMap.call(this,t)},em.vl=function(t){this.Cg(t.element)},em.wl=function(t){var e=t.element;t=this.a;var o,i=[];for(hu(t,e.Q().G(),function(t){e===t.feature&&i.push(t)}),o=i.length-1;0<=o;--o)t.remove(i[o]);null!==this.f&&0===this.p.Ib()&&(this.n.Yd(this.f),this.f=null)},em.Bl=function(t,e){var o=e.K(),o={feature:t,geometry:e,aa:[o,o]};this.a.ha(e.G(),o)},em.zl=function(t,e){var o,i,n,r=e.K();for(i=0,n=r.length;i<n;++i)o=r[i],o={feature:t,geometry:e,depth:[i],index:i,aa:[o,o]},this.a.ha(e.G(),o)},em.Dg=function(t,e){var o,i,n,r,s=e.K();for(o=0,i=s.length-1;o<i;++o)n=s.slice(o,o+2),r={feature:t,geometry:e,index:o,aa:n},this.a.ha(Ne(n),r)},em.yl=function(t,e){var o,i,n,r,s,a,p,l=e.K();for(r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)a=o.slice(i,i+2),p={feature:t,geometry:e,depth:[r],index:i,aa:a},this.a.ha(Ne(a),p)},em.Cl=function(t,e){var o,i,n,r,s,a,p,l=e.K();for(r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)a=o.slice(i,i+2),p={feature:t,geometry:e,depth:[r],index:i,aa:a},this.a.ha(Ne(a),p)},em.Al=function(t,e){var o,i,n,r,s,a,p,l,h,u,c=e.K();for(a=0,p=c.length;a<p;++a)for(l=c[a],r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)h=o.slice(i,i+2),u={feature:t,geometry:e,depth:[r,a],index:i,aa:h},this.a.ha(Ne(h),u)},em.xl=function(t,e){var o,i=e.d;for(o=0;o<i.length;++o)this.H[i[o].M()].call(this,t,i[o])},em.qk=function(t,e){for(var o,i=t.aa,n=t.feature,r=t.geometry,s=t.depth,a=t.index;e.length<r.s;)e.push(0);switch(r.M()){case"MultiLineString":o=r.K(),o[s[0]].splice(a+1,0,e);break;case"Polygon":o=r.K(),o[s[0]].splice(a+1,0,e);break;case"MultiPolygon":o=r.K(),o[s[1]][s[0]].splice(a+1,0,e);break;case"LineString":o=r.K(),o.splice(a+1,0,e);break;default:return}r.W(o),o=this.a,o.remove(t),Gg(this,r,a,s,1);var p={aa:[i[0],e],feature:n,geometry:r,depth:s,index:a};o.ha(Ne(p.aa),p),this.g.push([p,1]),i={aa:[e,i[1]],feature:n,geometry:r,depth:s,index:a+1},o.ha(Ne(i.aa),i),this.g.push([i,0])},v($g,Pt),v(Hg,As),Hg.prototype.p=function(){return this.a.b},Hg.prototype.setMap=function(t){var e=this.l,o=this.a.b;null===e||o.forEach(e.Ih,e),Hg.S.setMap.call(this,t),this.a.setMap(t),null===t||o.forEach(t.Eh,t)},Hg.prototype.n=function(t){t=t.element;var e=this.l;null===e||e.Eh(t)},Hg.prototype.J=function(t){t=t.element;var e=this.l;null===e||e.Ih(t)},v(Kg,$s),em=Kg.prototype,em.ed=function(e,o){var i=!t(o)||o,n=e.Q(),r=this.T[n.M()];if(t(r)){var s=c(e);this.N[s]=n.G(qe()),r.call(this,e,n),i&&(this.H[s]=n.r("change",d(this.Oj,this,e),this),this.p[s]=e.r(se(e.a),this.Dl,this))}},em.Hi=function(t){this.ed(t)},em.Ii=function(t){this.fd(t)},em.Eg=function(t){var e;t instanceof mu?e=t.feature:t instanceof ti&&(e=t.element),this.ed(e)},em.Fg=function(t){var e;t instanceof mu?e=t.feature:t instanceof ti&&(e=t.element),this.fd(e)},em.Dl=function(t){t=t.c,this.fd(t,!0),this.ed(t,!0)},em.Oj=function(t){if(this.o){var e=c(t);e in this.n||(this.n[e]=t)}else this.Jh(t)},em.fd=function(e,o){var i=!t(o)||o,n=c(e),r=this.N[n];if(r){var s=this.a,a=[];for(hu(s,r,function(t){e===t.feature&&a.push(t)}),r=a.length-1;0<=r;--r)s.remove(a[r]);i&&(Kt(this.H[n]),delete this.H[n],Kt(this.p[n]),delete this.p[n])}},em.setMap=function(t){var e,o=this.l,i=this.X;null===this.g?null===this.i||(e=this.i.Dc()):e=this.g,o&&(P(i,ie),i.length=0,e.forEach(this.Ii,this)),Kg.S.setMap.call(this,t),t&&(null!==this.g?(i.push(this.g.r("add",this.Eg,this)),i.push(this.g.r("remove",this.Fg,this))):null!==this.i&&(i.push(this.i.r("addfeature",this.Eg,this)),i.push(this.i.r("removefeature",this.Fg,this))),e.forEach(this.Hi,this))},em.nc=pb,em.Jh=function(t){this.fd(t,!1),this.ed(t,!1)},em.El=function(t,e){var o,i=e.d;for(o=0;o<i.length;++o)this.T[i[o].M()].call(this,t,i[o])},em.Gg=function(t,e){var o,i,n,r,s=e.K();for(o=0,i=s.length-1;o<i;++o)n=s.slice(o,o+2),r={feature:t,aa:n},this.a.ha(Ne(n),r)},em.Fl=function(t,e){var o,i,n,r,s,a,p,l=e.K();for(r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)a=o.slice(i,i+2),p={feature:t,aa:a},this.a.ha(Ne(a),p)},em.Gl=function(t,e){var o,i,n,r=e.K();for(i=0,n=r.length;i<n;++i)o=r[i],o={feature:t,aa:[o,o]},this.a.ha(e.G(),o)},em.Hl=function(t,e){var o,i,n,r,s,a,p,l,h,u,c=e.K();for(a=0,p=c.length;a<p;++a)for(l=c[a],r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)h=o.slice(i,i+2),u={feature:t,aa:h},this.a.ha(Ne(h),u)},em.Il=function(t,e){var o=e.K(),o={feature:t,aa:[o,o]};this.a.ha(e.G(),o)},em.Jl=function(t,e){var o,i,n,r,s,a,p,l=e.K();for(r=0,s=l.length;r<s;++r)for(o=l[r],i=0,n=o.length-1;i<n;++i)a=o.slice(i,i+2),p={feature:t,aa:a},this.a.ha(Ne(a),p)},v(Zg,Lp);var fC=["#00f","#0ff","#0f0","#ff0","#f00"];em=Zg.prototype,em.Sf=function(){return this.get("blur")},em.Wf=function(){return this.get("gradient")},em.Hg=function(){return this.get("radius")},em.Pj=function(){for(var t=this.Wf(),e=mr(1,256),o=e.createLinearGradient(0,0,1,256),i=1/(t.length-1),n=0,r=t.length;n<r;++n)o.addColorStop(n*i,t[n]);e.fillStyle=o,e.fillRect(0,0,1,256),this.d=e.getImageData(0,0,1,256).data},em.hg=function(){var t=this.Hg(),e=this.Sf(),o=t+e+1,i=2*o,i=mr(i,i);i.shadowOffsetX=i.shadowOffsetY=this.L,i.shadowBlur=e,i.shadowColor="#000",i.beginPath(),e=o-this.L,i.arc(e,e,t,0,2*Math.PI,!0),i.fill(),this.p=i.canvas.toDataURL(),this.l=Array(256),this.k()},em.hk=function(t){t=t.context;var e,o,i,n=t.canvas,n=t.getImageData(0,0,n.width,n.height),r=n.data;for(e=0,o=r.length;e<o;e+=4)(i=4*r[e+3])&&(r[e]=this.d[i],r[e+1]=this.d[i+1],r[e+2]=this.d[i+2]);t.putImageData(n,0,0)},em.th=function(t){this.set("blur",t)},em.yh=function(t){this.set("gradient",t)},em.Ig=function(t){this.set("radius",t)};var yC=0,dC=1;v(ev,m);var gC=0;ov.prototype.send=function(t,e,o,i){t=t||null,i=i||"_"+(gC++).toString(36)+lm().toString(36),sm._callbacks_||(sm._callbacks_={});var n=this.a.clone();if(t)for(var r in t)if(!t.hasOwnProperty||t.hasOwnProperty(r)){var a=n,p=r,l=t[r];s(l)||(l=[String(l)]),vy(a.b,p,l)}return e&&(sm._callbacks_[i]=nv(i,e),e=this.b,r="_callbacks_."+i,s(r)||(r=[String(r)]),vy(n.b,e,r)),e=_g(n.toString(),{timeout:this.oc,Bi:!0}),og(e,null,iv(i,t,o),void 0),{$:i,Of:e}},ov.prototype.cancel=function(t){t&&(t.Of&&t.Of.cancel(),t.$&&rv(t.$,!1))},v(cv,Pn),em=cv.prototype,em.Vb=function(e,o,i,n,r){var s=this.bb(e,o,i);if(tn(this.a,s))return this.a.get(s);e=[e,o,i],o=t(r)?r:this.f,i=kn(this,o);var a,p=this.H;if(a=t(p)){a=e[0];var l=xn(i,a);if(t(l)){var h=Tn(o),u=o.G();a=he(i.na(a),i.a)[0]*l==h.na(a)*_o(gn(h,u,a))}else a=o.e}return a?p?(p=e[0],a=e[1],o=wn(i,p,o),a<o.b||a>o.d?(a=ht(a,_o(o)),o=[p,a,e[2]]):o=e):(p=e[1],o=wn(i,e[0],o),o=p<o.b||p>o.d?null:e):o=e,n=null===o?void 0:this.tileUrlFunction(o,n,r),n=new this.tileClass(e,t(n)?0:4,t(n)?n:"",this.crossOrigin,this.tileLoadFunction),qt(n,"change",this.nm,!1,this),this.a.set(s,n),n},em.Ua=function(){return this.tileLoadFunction},em.Va=function(){return this.tileUrlFunction},em.nm=function(t){switch(t=t.target,t.state){case 1:this.dispatchEvent(new An("tileloadstart",t));break;case 2:this.dispatchEvent(new An("tileloadend",t));break;case 3:this.dispatchEvent(new An("tileloaderror",t))}},em.$a=function(t){this.a.clear(),this.tileLoadFunction=t,this.k()},em.pa=function(t){this.a.clear(),this.tileUrlFunction=t,this.k()},em.yf=function(t,e,o){t=this.bb(t,e,o),tn(this.a,t)&&this.a.get(t)},v(yv,yn),yv.prototype.yb=function(e){e=t(e)?e:{};var o=this.minZoom,i=this.maxZoom,n=null;if(t(e.extent)){var r,n=Array(i+1);for(r=0;r<=i;++r)n[r]=r<o?null:gn(this,e.extent,r)}return function(t,e,r){if(e=t[0],e<o||i<e)return null;var s=t[1];return t=t[2],t<-Math.pow(2,e)||-1<t||null!==n&&!Yo(n[e],s,t)?null:Ho(e,s,-t-1,r)}},yv.prototype.Ld=function(t,e){if(t[0]<this.maxZoom){var o=2*t[1],i=2*t[2];return Vo(o,o+1,i,i+1,e)}return null},yv.prototype.Ad=function(t,e,o,i){for(i=Vo(0,t[1],0,t[2],i),t=t[0]-1;t>=this.minZoom;--t)if(i.b=i.d>>=1,i.c=i.a>>=1,e.call(o,t,i))return!0;return!1},v(dv,cv);var vC=new Qo({html:'<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'});dv.prototype.i=function(t){if(200!=t.statusCode||"OK"!=t.statusDescription||"ValidCredentials"!=t.authenticationResultCode||1!=t.resourceSets.length||1!=t.resourceSets[0].resources.length)pn(this,"error");else{var e=t.brandLogoUri;-1==e.indexOf("https")&&(e=e.replace("http","https"));var o=t.resourceSets[0].resources[0],i=-1==this.e?o.zoomMax:this.e,n=new yv({extent:Mn(this.f),minZoom:o.zoomMin,maxZoom:i,tileSize:o.imageWidth==o.imageHeight?o.imageWidth:[o.imageWidth,o.imageHeight]});this.tileGrid=n;var r=this.g;if(this.tileUrlFunction=hv(n.yb(),pv(k(o.imageUrlSubdomains,function(t){var e=o.imageUrl.replace("{subdomain}",t).replace("{culture}",r);return function(t){return null===t?void 0:e.replace("{quadkey}",Wo(t))}}))),o.imageryProviders){var s=Co(xo("EPSG:4326"),this.f);t=k(o.imageryProviders,function(t){var e=t.attribution,o={};return P(t.coverageAreas,function(t){var e=t.zoomMin,r=Math.min(t.zoomMax,i);t=t.bbox,t=po([t[1],t[0],t[3],t[2]],s);var a,p;for(a=e;a<=r;++a)p=a.toString(),e=gn(n,t,a),p in o?o[p].push(e):o[p]=[e]}),new Qo({html:e,tileRanges:o})}),t.push(vC),this.d=t}this.L=e,pn(this,"ready")}},v(gv,cu),gv.prototype.X=function(){return this.l},gv.prototype.ac=function(t,e,o){e!==this.p&&(this.clear(),this.p=e,this.l.ac(t,e,o),vv(this),this.Oc(this.n))},gv.prototype.ba=function(){this.clear(),vv(this),this.Oc(this.n),this.k()},v(bv,Dl),em=bv.prototype,em.Tl=function(){return this.e},em.Cc=function(e,o,i,n){o=Fl(this,o),i=this.X?i:1;var r=this.c;return null!==r&&this.p==this.b&&r.resolution==o&&r.e==i&&Be(r.G(),e)?r:(1!=this.n&&(e=e.slice(),ao(e,this.n)),n=this.J(e,[no(e)/o*i,to(e)/o*i],n),t(n)?(r=new zd(e,o,i,this.d,n,this.T,this.a),qt(r,"change",this.i,!1,this)):r=null,this.c=r,this.p=this.b,r)},em.Sl=function(){return this.a},em.Wl=function(t){rt(this.e,t),this.k()},em.Ul=function(t,e,o,i){var n;n=this.N;var r=no(o),s=to(o),a=i[0],p=i[1],l=.0254/this.g;return n=p*r>a*s?r*n/(a*l):s*n/(p*l),o=_e(o),i={OPERATION:this.ba?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.g,SETDISPLAYWIDTH:Math.round(i[0]),SETDISPLAYHEIGHT:Math.round(i[1]),SETVIEWSCALE:n,SETVIEWCENTERX:o[0],SETVIEWCENTERY:o[1]},rt(i,e),hh(ch([t],i))},em.Vl=function(t){this.c=null,this.a=t,this.k()},v(wv,Dl),wv.prototype.Cc=function(t){return ro(t,this.a.G())?this.a:null},v(xv,Dl);var mC=[101,101];em=xv.prototype,em.bm=function(e,o,i,n){if(t(this.e)){var r=Qe(e,o,0,mC),s={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.c.LAYERS};return rt(s,this.c,n),n=Math.floor((r[3]-e[1])/o),s[this.g?"I":"X"]=Math.floor((e[0]-r[0])/o),s[this.g?"J":"Y"]=n,Sv(this,r,mC,1,xo(i),s)}},em.dm=function(){return this.c},em.Cc=function(e,o,i,n){if(!t(this.e))return null;o=Fl(this,o),1==i||this.ba&&t(this.T)||(i=1);var r=this.a;if(null!==r&&this.N==this.b&&r.resolution==o&&r.e==i&&Be(r.G(),e))return r;r={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0},rt(r,this.c),e=e.slice();var s=(e[0]+e[2])/2,a=(e[1]+e[3])/2;if(1!=this.J){var p=this.J*no(e)/2,l=this.J*to(e)/2;e[0]=s-p,e[1]=a-l,e[2]=s+p,e[3]=a+l}var p=o/i,l=Math.ceil(no(e)/p),h=Math.ceil(to(e)/p);return e[0]=s-p*l/2,e[2]=s+p*l/2,e[1]=a-p*h/2,e[3]=a+p*h/2,this.p[0]=l,this.p[1]=h,n=Sv(this,e,this.p,i,n,r),this.a=new zd(e,o,i,this.d,n,this.X,this.n),this.N=this.b,qt(this.a,"change",this.i,!1,this),this.a},em.cm=function(){return this.n},em.em=function(){return this.e},em.fm=function(t){this.a=null,this.n=t,this.k()},em.gm=function(t){t!=this.e&&(this.e=t,this.a=null,this.k())},em.hm=function(t){rt(this.c,t),Tv(this),this.a=null,this.k()},v(Cv,cv),Cv.prototype.pa=function(t){Cv.S.pa.call(this,hv(this.l,t))},Cv.prototype.e=function(t){this.pa(av(uv(t)))},v(Mv,Cv);var bC=new Qo({html:'&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});v(Pv,Cv);var wC=new Qo({html:'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'}),xC={osm:{maxZoom:19,attributions:[wC,bC]},sat:{maxZoom:18,attributions:[wC,new Qo({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,attributions:[wC,bC]}};Pv.prototype.i=function(){return this.g};var SC={terrain:{Ta:"jpg",opaque:!0},"terrain-background":{Ta:"jpg",opaque:!0},"terrain-labels":{Ta:"png",opaque:!1},"terrain-lines":{Ta:"png",opaque:!1},"toner-background":{Ta:"png",opaque:!0},toner:{Ta:"png",opaque:!0},"toner-hybrid":{Ta:"png",opaque:!1},"toner-labels":{Ta:"png",opaque:!1},"toner-lines":{Ta:"png",opaque:!1},"toner-lite":{Ta:"png",opaque:!0},watercolor:{Ta:"jpg",opaque:!0}},TC={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:3,maxZoom:16}};v(Ev,Cv);var CC=[new Qo({html:'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'}),bC];return v(kv,cv),em=kv.prototype,em.im=function(){return this.e},em.Xb=function(t,e,o){return t=kv.S.Xb.call(this,t,e,o),1==e?t:le(t,e,this.c)},em.jm=function(){return this.g},em.km=function(e){e=t(e)?uv(e):null,this.Ng(e)},em.Ng=function(t){this.g=null!=t?t:[],this.k()},em.lm=function(t,e,o){var i=this.tileGrid;if(null===i&&(i=kn(this,o)),!(i.b.length<=t[0])){var n=mn(i,t,this.i),r=he(i.na(t[0]),this.c);1!=e&&(r=le(r,e,this.c)),i={F:"image",FORMAT:"PNG32",TRANSPARENT:!0},rt(i,this.e);var s=this.g;return 0==s.length?t=void 0:(o=o.b.split(":").pop(),i.SIZE=r[0]+","+r[1],i.BBOX=n.join(","),i.BBOXSR=o,i.IMAGESR=o,i.DPI=90*e,t=1==s.length?s[0]:s[ht((t[1]<<t[0])+t[2],s.length)],b(t,"/")||(t+="/"),b(t,"MapServer/")?t+="export":b(t,"ImageServer/")&&(t+="exportImage"),t=hh(ch([t],i))),t}},em.mm=function(t){rt(this.e,t),this.k()},v(Av,nn),Av.prototype.Ma=function(e){if(e=t(e)?c(e):-1,e in this.a)return this.a[e];var o=this.c,i=mr(o[0],o[1]);return i.strokeStyle="black",i.strokeRect(.5,.5,o[0]+.5,o[1]+.5),i.fillStyle="black",i.textAlign="center",i.textBaseline="middle",i.font="24px sans-serif",i.fillText(Ko(this.b),o[0]/2,o[1]/2),this.a[e]=i.canvas},v(Rv,Pn),Rv.prototype.Vb=function(t,e,o){var i=this.bb(t,e,o);return tn(this.a,i)?this.a.get(i):(t=new Av([t,e,o],this.tileGrid),this.a.set(i,t),t)},v(jv,cv),jv.prototype.e=function(e){var o,i=xo("EPSG:4326"),n=this.f;t(e.bounds)&&(o=po(e.bounds,Co(i,n)));var r=e.minzoom||0,s=e.maxzoom||22;if(this.tileGrid=n=new yv({extent:Mn(n),maxZoom:s,minZoom:r}),this.tileUrlFunction=hv(n.yb({extent:o}),av(e.tiles)),t(e.attribution)&&null===this.d){i=t(o)?o:i.G(),o={};for(var a;r<=s;++r)a=r.toString(),o[a]=[gn(n,i,r)];this.d=[new Qo({html:e.attribution,tileRanges:o})]}pn(this,"ready")},v(Lv,Pn),em=Lv.prototype,em.wj=function(){return this.g},em.Gi=function(t,e,o,i,n){null===this.tileGrid?!0===n?Yn(function(){o.call(i,null)}):o.call(i,null):(e=this.tileGrid.Wb(t,e),Dv(this.Vb(e[0],e[1],e[2],1,this.f),t,o,i,n))},em.om=function(e){var o,i=xo("EPSG:4326"),n=this.f;t(e.bounds)&&(o=po(e.bounds,Co(i,n)));var r=e.minzoom||0,s=e.maxzoom||22;this.tileGrid=n=new yv({extent:Mn(n),maxZoom:s,minZoom:r}),this.g=e.template;var a=e.grids;if(null!=a){if(this.e=hv(n.yb({extent:o}),av(a)),t(e.attribution)){for(i=t(o)?o:i.G(),o={};r<=s;++r)a=r.toString(),o[a]=[gn(n,i,r)];this.d=[new Qo({html:e.attribution,tileRanges:o})]}pn(this,"ready")}else pn(this,"error")},em.Vb=function(e,o,i,n,r){var s=this.bb(e,o,i);return tn(this.a,s)?this.a.get(s):(e=[e,o,i],n=this.e(e,n,r),n=new Nv(e,t(n)?0:4,t(n)?n:"",mn(this.tileGrid,e),this.i),this.a.set(s,n),n)},em.yf=function(t,e,o){t=this.bb(t,e,o),tn(this.a,t)&&this.a.get(t)},v(Nv,nn),em=Nv.prototype,em.Ma=function(){return null},em.gb=function(){return this.g},em.Lj=function(){this.state=3,rn(this)},em.Xj=function(t){this.c=t.grid,this.e=t.keys,this.d=t.data,this.state=4,rn(this)},em.load=function(){this.i&&Fv(this)},v(Ov,cu),em=Ov.prototype,em.clear=function(){tt(this.l)},em.Ab=function(e,o,i,n){var r=this.n,s=this.l;o=Sn(r,o),e=gn(r,e,o);for(var a,r=e.b;r<=e.d;++r)for(a=e.c;a<=e.a;++a){var p=s[o+"/"+r+"/"+a];if(t(p)){var l,h;for(l=0,h=p.length;l<h;++l){var u=i.call(n,p[l]);if(u)return u}}}},em.Dc=function(){var t,e=this.l,o=[];for(t in e)F(o,e[t]);return o},em.Vi=function(t,e){var o=[];return Bv(this,t,e,function(t){o.push(t)}),o},em.ac=function(e,o,i){function n(t,e){h[t]=e,this.k()}var r,s,a=this.X,p=this.n,l=this.p,h=this.l,u=Sn(p,o),p=gn(p,e,u),c=[u,0,0];for(r=p.b;r<=p.d;++r)for(s=p.c;s<=p.a;++s){var f=u+"/"+r+"/"+s;if(!(f in h)){c[0]=u,c[1]=r,c[2]=s,a(c,i,c);var y=l(c,1,i);t(y)&&(h[f]=[],nu(y,this.T,g(n,f)).call(this,e,o,i))}}},v(Uv,cv),em=Uv.prototype,em.pm=function(t,e,o,i){o=xo(o);var n=this.tileGrid;if(null===n&&(n=kn(this,o)),e=n.Wb(t,e),!(n.b.length<=e[0])){var r=n.ma(e[0]),s=mn(n,e,this.N),n=he(n.na(e[0]),this.c),a=this.l;return 0!==a&&(n=pe(n,a,this.c),s=De(s,r*a,s)),a={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.e.LAYERS},rt(a,this.e,i),i=Math.floor((s[3]-t[1])/r),a[this.i?"I":"X"]=Math.floor((t[0]-s[0])/r),a[this.i?"J":"Y"]=i,Gv(this,e,n,s,1,o,a)}},em.Cd=function(){return this.l},em.bb=function(t,e,o){return this.p+Uv.S.bb.call(this,t,e,o)},em.qm=function(){return this.e},em.Xb=function(e,o,i){return e=Uv.S.Xb.call(this,e,o,i),1!=o&&this.J&&t(this.n)?le(e,o,this.c):e},em.rm=function(){return this.g},em.sm=function(e){e=t(e)?uv(e):null,this.Og(e)},em.Og=function(t){this.g=null!=t?t:[],qv(this),this.k()},em.tm=function(e,o,i){var n=this.tileGrid;if(null===n&&(n=kn(this,i)),!(n.b.length<=e[0])){1==o||this.J&&t(this.n)||(o=1);var r=n.ma(e[0]),s=mn(n,e,this.N),n=he(n.na(e[0]),this.c),a=this.l;return 0!==a&&(n=pe(n,a,this.c),s=De(s,r*a,s)),1!=o&&(n=le(n,o,this.c)),r={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",
+TRANSPARENT:!0},rt(r,this.e),Gv(this,e,n,s,o,i,r)}},em.um=function(t){rt(this.e,t),qv(this),$v(this),this.k()},v(Hv,yn),Hv.prototype.q=function(){return this.e},v(Wv,cv),em=Wv.prototype,em.Ti=function(){return this.e},em.Xi=function(){return this.n},em.bb=function(t,e,o){return this.l+Wv.S.bb.call(this,t,e,o)},em.vm=function(){return this.p},em.jj=function(){return this.i},em.uj=function(){return this.T},em.wm=function(){return this.J},em.xm=function(){return this.g},em.Aj=function(){return this.N},em.uo=function(t){rt(this.e,t),Kv(this),this.k()},v(zv,yn),zv.prototype.yb=function(e){e=t(e)?e:{};var o=this.minZoom,i=this.maxZoom,n=null;if(t(e.extent)){var r,n=Array(i+1);for(r=0;r<=i;++r)n[r]=r<o?null:gn(this,e.extent,r)}return function(t,e,r){if(e=t[0],e<o||i<e)return null;var s=Math.pow(2,e),a=t[1];return 0>a||s<=a?null:(t=t[2],t<-s||-1<t||null!==n&&!Yo(n[e],a,-t-1)?null:Ho(e,a,-t-1,r))}},v(Vv,cv),v(Yv,Vd),Yv.prototype.Ma=function(e){var o=t(e)?c(e).toString():"";if(o in this.d)return this.d[o];if(e=Yv.S.Ma.call(this,e),2==this.state){if(256==e.width&&256==e.height)return this.d[o]=e;var i=mr(256,256);return i.drawImage(e,0,0),this.d[o]=i.canvas}return e},Zv.prototype.add=function(e,o,i,n,r,s){return o+this.b>this.c||i+this.b>this.c?null:(n=_v(this,!1,e,o,i,n,s),null===n?null:(e=_v(this,!0,e,o,i,t(r)?r:hb,s),{offsetX:n.offsetX,offsetY:n.offsetY,image:n.image,ig:e.image}))},Jv.prototype.get=function(t){return ot(this.d,t,null)},Jv.prototype.add=function(t,e,o,i,n){var r,s,a;for(s=0,a=this.a.length;s<a;++s)if(r=this.a[s],r.width>=e+this.b&&r.height>=o+this.b)return a={offsetX:r.x+this.b,offsetY:r.y+this.b,image:this.c},this.d[t]=a,i.call(n,this.e,r.x+this.b,r.y+this.b),t=s,e+=this.b,o+=this.b,n=i=void 0,r.width-e>r.height-o?(i={x:r.x+e,y:r.y,width:r.width-e,height:r.height},n={x:r.x,y:r.y+o,width:e,height:r.height-o},Qv(this,t,i,n)):(i={x:r.x+e,y:r.y,width:r.width-e,height:o},n={x:r.x,y:r.y+o,width:r.width,height:r.height-o},Qv(this,t,i,n)),a;return null},v(tm,hs),em=tm.prototype,em.mb=function(){return this.p},em.Cm=function(){return this.g},em.Dm=function(){return this.i},em.he=function(){return this.o},em.Lb=function(){return this.d},em.Dd=function(){return this.H},em.gd=function(){return 2},em.rb=function(){return this.J},em.Em=function(){return this.b},em.Fm=function(){return this.c},em.tj=function(){return this.f},em.Xa=function(){return this.L},em.Gm=function(){return this.a},em.$e=o,em.load=o,em.xf=o,em.Ug=function(t,e,o,i){var n;for(e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),this.f!==this.c&&(this.b*=2),o=0;o<=this.b;o++)i=2*o*Math.PI/this.b-Math.PI/2+this.g,n=0===o%2?this.c:this.f,e.lineTo(t.size/2+n*Math.cos(i),t.size/2+n*Math.sin(i));null!==this.i&&(e.fillStyle=ni(this.i.b),e.fill()),null!==this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.md,null===t.lineDash||e.setLineDash(t.lineDash),e.lineCap=t.lineCap,e.lineJoin=t.lineJoin,e.miterLimit=t.miterLimit,e.stroke()),e.closePath()},em.Tg=function(t,e,o,i){e.setTransform(1,0,0,1,0,0),e.translate(o,i),e.beginPath(),this.f!==this.c&&(this.b*=2);var n;for(o=0;o<=this.b;o++)n=2*o*Math.PI/this.b-Math.PI/2+this.g,i=0===o%2?this.c:this.f,e.lineTo(t.size/2+i*Math.cos(n),t.size/2+i*Math.sin(n));e.fillStyle=ow,e.fill(),null!==this.a&&(e.strokeStyle=t.strokeStyle,e.lineWidth=t.md,null===t.lineDash||e.setLineDash(t.lineDash),e.stroke()),e.closePath()},em.nb=function(){var e=null===this.a?"-":this.a.nb(),o=null===this.i?"-":this.i.nb();return null!==this.e&&e==this.e[1]&&o==this.e[2]&&this.c==this.e[3]&&this.f==this.e[4]&&this.g==this.e[5]&&this.b==this.e[6]||(this.e=["r"+e+o+(t(this.c)?this.c.toString():"-")+(t(this.f)?this.f.toString():"-")+(t(this.g)?this.g.toString():"-")+(t(this.b)?this.b.toString():"-"),e,o,this.c,this.f,this.g,this.b]),this.e[0]},e("ol.animation.bounce",function(e){var o=e.resolution,i=t(e.start)?e.start:lm(),n=t(e.duration)?e.duration:1e3,r=t(e.easing)?e.easing:Uo;return function(t,e){if(e.time<i)return e.animate=!0,e.viewHints[0]+=1,!0;if(e.time<i+n){var s=r((e.time-i)/n),a=o-e.viewState.resolution;return e.animate=!0,e.viewState.resolution+=s*a,e.viewHints[0]+=1,!0}return!1}},nm),e("ol.animation.pan",Go,nm),e("ol.animation.rotate",qo,nm),e("ol.animation.zoom",$o,nm),e("ol.Attribution",Qo,nm),Qo.prototype.getHTML=Qo.prototype.c,ti.prototype.element=ti.prototype.element,e("ol.Collection",ei,nm),ei.prototype.clear=ei.prototype.clear,ei.prototype.extend=ei.prototype.af,ei.prototype.forEach=ei.prototype.forEach,ei.prototype.getArray=ei.prototype.Hk,ei.prototype.item=ei.prototype.item,ei.prototype.getLength=ei.prototype.Ib,ei.prototype.insertAt=ei.prototype.Td,ei.prototype.pop=ei.prototype.pop,ei.prototype.push=ei.prototype.push,ei.prototype.remove=ei.prototype.remove,ei.prototype.removeAt=ei.prototype.tf,ei.prototype.setAt=ei.prototype.Un,e("ol.coordinate.add",ue,nm),e("ol.coordinate.createStringXY",function(t){return function(e){return be(e,t)}},nm),e("ol.coordinate.format",ye,nm),e("ol.coordinate.rotate",ge,nm),e("ol.coordinate.toStringHDMS",function(e){return t(e)?fe(e[1],"NS")+" "+fe(e[0],"EW"):""},nm),e("ol.coordinate.toStringXY",be,nm),e("ol.DeviceOrientation",sf,nm),sf.prototype.getAlpha=sf.prototype.Mi,sf.prototype.getBeta=sf.prototype.Pi,sf.prototype.getGamma=sf.prototype.Yi,sf.prototype.getHeading=sf.prototype.Ik,sf.prototype.getTracking=sf.prototype.og,sf.prototype.setTracking=sf.prototype.bf,e("ol.easing.easeIn",function(t){return Math.pow(t,3)},nm),e("ol.easing.easeOut",Fo,nm),e("ol.easing.inAndOut",Oo,nm),e("ol.easing.linear",Bo,nm),e("ol.easing.upAndDown",Uo,nm),e("ol.extent.boundingExtent",Ne,nm),e("ol.extent.buffer",De,nm),e("ol.extent.containsCoordinate",function(t,e){return Ue(t,e[0],e[1])},nm),e("ol.extent.containsExtent",Be,nm),e("ol.extent.containsXY",Ue,nm),e("ol.extent.createEmpty",qe,nm),e("ol.extent.equals",Xe,nm),e("ol.extent.extend",We,nm),e("ol.extent.getBottomLeft",Ye,nm),e("ol.extent.getBottomRight",Ze,nm),e("ol.extent.getCenter",_e,nm),e("ol.extent.getHeight",to,nm),e("ol.extent.getIntersection",eo,nm),e("ol.extent.getSize",function(t){return[t[2]-t[0],t[3]-t[1]]},nm),e("ol.extent.getTopLeft",oo,nm),e("ol.extent.getTopRight",io,nm),e("ol.extent.getWidth",no,nm),e("ol.extent.intersects",ro,nm),e("ol.extent.isEmpty",so,nm),e("ol.extent.applyTransform",po,nm),e("ol.Feature",af,nm),af.prototype.clone=af.prototype.clone,af.prototype.getGeometry=af.prototype.Q,af.prototype.getId=af.prototype.aj,af.prototype.getGeometryName=af.prototype.$i,af.prototype.getStyle=af.prototype.Qk,af.prototype.getStyleFunction=af.prototype.Rk,af.prototype.setGeometry=af.prototype.La,af.prototype.setStyle=af.prototype.cf,af.prototype.setId=af.prototype.Qb,af.prototype.setGeometryName=af.prototype.Ic,e("ol.featureloader.xhr",ru,nm),e("ol.FeatureOverlay",pf,nm),pf.prototype.addFeature=pf.prototype.pg,pf.prototype.getFeatures=pf.prototype.Kk,pf.prototype.getMap=pf.prototype.Lk,pf.prototype.removeFeature=pf.prototype.Yd,pf.prototype.setFeatures=pf.prototype.ld,pf.prototype.setMap=pf.prototype.setMap,pf.prototype.setStyle=pf.prototype.rg,pf.prototype.getStyle=pf.prototype.Mk,pf.prototype.getStyleFunction=pf.prototype.Nk,e("ol.Geolocation",Gd,nm),Gd.prototype.getAccuracy=Gd.prototype.Ki,Gd.prototype.getAccuracyGeometry=Gd.prototype.Li,Gd.prototype.getAltitude=Gd.prototype.Ni,Gd.prototype.getAltitudeAccuracy=Gd.prototype.Oi,Gd.prototype.getHeading=Gd.prototype.Tk,Gd.prototype.getPosition=Gd.prototype.Uk,Gd.prototype.getProjection=Gd.prototype.sg,Gd.prototype.getSpeed=Gd.prototype.vj,Gd.prototype.getTracking=Gd.prototype.tg,Gd.prototype.getTrackingOptions=Gd.prototype.bg,Gd.prototype.setProjection=Gd.prototype.ug,Gd.prototype.setTracking=Gd.prototype.Zd,Gd.prototype.setTrackingOptions=Gd.prototype.Dh,e("ol.Graticule",Xd,nm),Xd.prototype.getMap=Xd.prototype.Xk,Xd.prototype.getMeridians=Xd.prototype.kj,Xd.prototype.getParallels=Xd.prototype.pj,Xd.prototype.setMap=Xd.prototype.setMap,e("ol.has.DEVICE_PIXEL_RATIO",Pb,nm),e("ol.has.CANVAS",kb,nm),e("ol.has.DEVICE_ORIENTATION",Ab,nm),e("ol.has.GEOLOCATION",Rb,nm),e("ol.has.TOUCH",jb,nm),e("ol.has.WEBGL",xb,nm),zd.prototype.getImage=zd.prototype.b,Vd.prototype.getImage=Vd.prototype.Ma,e("ol.Kinetic",Ps,nm),e("ol.loadingstrategy.all",su,nm),e("ol.loadingstrategy.bbox",function(t){return[t]},nm),e("ol.loadingstrategy.tile",function(t){return function(e,o){var i=Sn(t,o),n=gn(t,e,i),r=[],i=[i,0,0];for(i[1]=n.b;i[1]<=n.d;++i[1])for(i[2]=n.c;i[2]<=n.a;++i[2])r.push(mn(t,i));return r}},nm),e("ol.Map",Lc,nm),Lc.prototype.addControl=Lc.prototype.si,Lc.prototype.addInteraction=Lc.prototype.ti,Lc.prototype.addLayer=Lc.prototype.Jf,Lc.prototype.addOverlay=Lc.prototype.Kf,Lc.prototype.beforeRender=Lc.prototype.Ha,Lc.prototype.forEachFeatureAtPixel=Lc.prototype.Ne,Lc.prototype.forEachLayerAtPixel=Lc.prototype.al,Lc.prototype.hasFeatureAtPixel=Lc.prototype.ok,Lc.prototype.getEventCoordinate=Lc.prototype.Ui,Lc.prototype.getEventPixel=Lc.prototype.Bd,Lc.prototype.getTarget=Lc.prototype.df,Lc.prototype.getTargetElement=Lc.prototype.bd,Lc.prototype.getCoordinateFromPixel=Lc.prototype.ka,Lc.prototype.getControls=Lc.prototype.Si,Lc.prototype.getOverlays=Lc.prototype.oj,Lc.prototype.getInteractions=Lc.prototype.bj,Lc.prototype.getLayerGroup=Lc.prototype.Ub,Lc.prototype.getLayers=Lc.prototype.vg,Lc.prototype.getPixelFromCoordinate=Lc.prototype.ta,Lc.prototype.getSize=Lc.prototype.xa,Lc.prototype.getView=Lc.prototype.R,Lc.prototype.getViewport=Lc.prototype.Bj,Lc.prototype.renderSync=Lc.prototype.Rn,Lc.prototype.render=Lc.prototype.render,Lc.prototype.removeControl=Lc.prototype.Ln,Lc.prototype.removeInteraction=Lc.prototype.Mn,Lc.prototype.removeLayer=Lc.prototype.Nn,Lc.prototype.removeOverlay=Lc.prototype.On,Lc.prototype.setLayerGroup=Lc.prototype.zh,Lc.prototype.setSize=Lc.prototype.vf,Lc.prototype.setTarget=Lc.prototype.cl,Lc.prototype.setView=Lc.prototype.jo,Lc.prototype.updateSize=Lc.prototype.Kc,$r.prototype.originalEvent=$r.prototype.originalEvent,$r.prototype.pixel=$r.prototype.pixel,$r.prototype.coordinate=$r.prototype.coordinate,$r.prototype.dragging=$r.prototype.dragging,$r.prototype.preventDefault=$r.prototype.preventDefault,$r.prototype.stopPropagation=$r.prototype.fb,_i.prototype.map=_i.prototype.map,_i.prototype.frameState=_i.prototype.frameState,ne.prototype.key=ne.prototype.key,ne.prototype.oldValue=ne.prototype.oldValue,e("ol.Object",re,nm),re.prototype.get=re.prototype.get,re.prototype.getKeys=re.prototype.C,re.prototype.getProperties=re.prototype.D,re.prototype.set=re.prototype.set,re.prototype.setProperties=re.prototype.t,re.prototype.unset=re.prototype.I,e("ol.Observable",oe,nm),e("ol.Observable.unByKey",ie,nm),oe.prototype.changed=oe.prototype.k,oe.prototype.getRevision=oe.prototype.v,oe.prototype.on=oe.prototype.r,oe.prototype.once=oe.prototype.A,oe.prototype.un=oe.prototype.u,oe.prototype.unByKey=oe.prototype.B,e("ol.inherits",v,nm),e("ol.Overlay",Ic,nm),Ic.prototype.getElement=Ic.prototype.$d,Ic.prototype.getMap=Ic.prototype.ae,Ic.prototype.getOffset=Ic.prototype.Yf,Ic.prototype.getPosition=Ic.prototype.wg,Ic.prototype.getPositioning=Ic.prototype.ag,Ic.prototype.setElement=Ic.prototype.wh,Ic.prototype.setMap=Ic.prototype.setMap,Ic.prototype.setOffset=Ic.prototype.Bh,Ic.prototype.setPosition=Ic.prototype.uf,Ic.prototype.setPositioning=Ic.prototype.Ch,e("ol.size.toSize",he,nm),nn.prototype.getTileCoord=nn.prototype.f,e("ol.View",Ao,nm),Ao.prototype.constrainCenter=Ao.prototype.xd,Ao.prototype.constrainResolution=Ao.prototype.constrainResolution,Ao.prototype.constrainRotation=Ao.prototype.constrainRotation,Ao.prototype.getCenter=Ao.prototype.Ca,Ao.prototype.calculateExtent=Ao.prototype.Pc,Ao.prototype.getProjection=Ao.prototype.dl,Ao.prototype.getResolution=Ao.prototype.ya,Ao.prototype.getRotation=Ao.prototype.Da,Ao.prototype.getZoom=Ao.prototype.Ej,Ao.prototype.fitExtent=Ao.prototype.Me,Ao.prototype.fitGeometry=Ao.prototype.Fi,Ao.prototype.centerOn=Ao.prototype.Ai,Ao.prototype.rotate=Ao.prototype.rotate,Ao.prototype.setCenter=Ao.prototype.Na,Ao.prototype.setResolution=Ao.prototype.tb,Ao.prototype.setRotation=Ao.prototype.be,Ao.prototype.setZoom=Ao.prototype.no,e("ol.xml.getAllTextContent",kh,nm),e("ol.xml.parse",$h,nm),e("ol.webgl.Context",Xu,nm),Xu.prototype.getGL=Xu.prototype.Xm,Xu.prototype.getHitDetectionFramebuffer=Xu.prototype.Te,Xu.prototype.useProgram=Xu.prototype.oe,e("ol.tilegrid.TileGrid",yn,nm),yn.prototype.getMaxZoom=yn.prototype.Fd,yn.prototype.getMinZoom=yn.prototype.Hd,yn.prototype.getOrigin=yn.prototype.Mb,yn.prototype.getResolution=yn.prototype.ma,yn.prototype.getResolutions=yn.prototype.ne,yn.prototype.getTileCoordForCoordAndResolution=yn.prototype.Wb,yn.prototype.getTileCoordForCoordAndZ=yn.prototype.cd,yn.prototype.getTileSize=yn.prototype.na,e("ol.tilegrid.WMTS",Hv,nm),Hv.prototype.getMatrixIds=Hv.prototype.q,e("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet",Xv,nm),e("ol.tilegrid.XYZ",yv,nm),e("ol.tilegrid.Zoomify",zv,nm),e("ol.style.AtlasManager",Zv,nm),e("ol.style.Circle",op,nm),op.prototype.getAnchor=op.prototype.mb,op.prototype.getFill=op.prototype.ym,op.prototype.getImage=op.prototype.Lb,op.prototype.getOrigin=op.prototype.rb,op.prototype.getRadius=op.prototype.zm,op.prototype.getSize=op.prototype.Xa,op.prototype.getStroke=op.prototype.Am,e("ol.style.Fill",ep,nm),ep.prototype.getColor=ep.prototype.c,ep.prototype.setColor=ep.prototype.d,e("ol.style.Icon",us,nm),us.prototype.getAnchor=us.prototype.mb,us.prototype.getImage=us.prototype.Lb,us.prototype.getOrigin=us.prototype.rb,us.prototype.getSrc=us.prototype.Bm,us.prototype.getSize=us.prototype.Xa,e("ol.style.Image",hs,nm),hs.prototype.getOpacity=hs.prototype.ie,hs.prototype.getRotateWithView=hs.prototype.Jd,hs.prototype.getRotation=hs.prototype.je,hs.prototype.getScale=hs.prototype.ke,hs.prototype.getSnapToPixel=hs.prototype.Kd,hs.prototype.setRotation=hs.prototype.le,hs.prototype.setScale=hs.prototype.me,e("ol.style.RegularShape",tm,nm),tm.prototype.getAnchor=tm.prototype.mb,tm.prototype.getAngle=tm.prototype.Cm,tm.prototype.getFill=tm.prototype.Dm,tm.prototype.getImage=tm.prototype.Lb,tm.prototype.getOrigin=tm.prototype.rb,tm.prototype.getPoints=tm.prototype.Em,tm.prototype.getRadius=tm.prototype.Fm,tm.prototype.getRadius2=tm.prototype.tj,tm.prototype.getSize=tm.prototype.Xa,tm.prototype.getStroke=tm.prototype.Gm,e("ol.style.Stroke",tp,nm),tp.prototype.getColor=tp.prototype.Hm,tp.prototype.getLineCap=tp.prototype.ej,tp.prototype.getLineDash=tp.prototype.Im,tp.prototype.getLineJoin=tp.prototype.fj,tp.prototype.getMiterLimit=tp.prototype.lj,tp.prototype.getWidth=tp.prototype.Jm,tp.prototype.setColor=tp.prototype.Km,tp.prototype.setLineCap=tp.prototype.Zn,tp.prototype.setLineDash=tp.prototype.Lm,tp.prototype.setLineJoin=tp.prototype.$n,tp.prototype.setMiterLimit=tp.prototype.ao,tp.prototype.setWidth=tp.prototype.ko,e("ol.style.Style",ip,nm),ip.prototype.getGeometry=ip.prototype.Q,ip.prototype.getGeometryFunction=ip.prototype.Zi,ip.prototype.getFill=ip.prototype.Mm,ip.prototype.getImage=ip.prototype.Nm,ip.prototype.getStroke=ip.prototype.Om,ip.prototype.getText=ip.prototype.Pm,ip.prototype.getZIndex=ip.prototype.Dj,ip.prototype.setGeometry=ip.prototype.Vg,ip.prototype.setZIndex=ip.prototype.mo,e("ol.style.Text",wy,nm),wy.prototype.getFont=wy.prototype.Wi,wy.prototype.getOffsetX=wy.prototype.mj,wy.prototype.getOffsetY=wy.prototype.nj,wy.prototype.getFill=wy.prototype.Qm,wy.prototype.getRotation=wy.prototype.Rm,wy.prototype.getScale=wy.prototype.Sm,wy.prototype.getStroke=wy.prototype.Tm,wy.prototype.getText=wy.prototype.Um,wy.prototype.getTextAlign=wy.prototype.xj,wy.prototype.getTextBaseline=wy.prototype.yj,wy.prototype.setFont=wy.prototype.Wn,wy.prototype.setFill=wy.prototype.Vn,wy.prototype.setRotation=wy.prototype.Vm,wy.prototype.setScale=wy.prototype.Wm,wy.prototype.setStroke=wy.prototype.eo,wy.prototype.setText=wy.prototype.fo,wy.prototype.setTextAlign=wy.prototype.ho,wy.prototype.setTextBaseline=wy.prototype.io,e("ol.Sphere",lo,nm),lo.prototype.geodesicArea=lo.prototype.a,lo.prototype.haversineDistance=lo.prototype.b,e("ol.source.BingMaps",dv,nm),e("ol.source.BingMaps.TOS_ATTRIBUTION",vC,nm),e("ol.source.Cluster",gv,nm),gv.prototype.getSource=gv.prototype.X,e("ol.source.ImageCanvas",Ul,nm),e("ol.source.ImageMapGuide",bv,nm),bv.prototype.getParams=bv.prototype.Tl,bv.prototype.getImageLoadFunction=bv.prototype.Sl,bv.prototype.updateParams=bv.prototype.Wl,bv.prototype.setImageLoadFunction=bv.prototype.Vl,e("ol.source.Image",Dl,nm),Bl.prototype.image=Bl.prototype.image,e("ol.source.ImageStatic",wv,nm),e("ol.source.ImageVector",bu,nm),bu.prototype.getSource=bu.prototype.Xl,bu.prototype.getStyle=bu.prototype.Yl,bu.prototype.getStyleFunction=bu.prototype.Zl,bu.prototype.setStyle=bu.prototype.Mg,e("ol.source.ImageWMS",xv,nm),xv.prototype.getGetFeatureInfoUrl=xv.prototype.bm,xv.prototype.getParams=xv.prototype.dm,xv.prototype.getImageLoadFunction=xv.prototype.cm,xv.prototype.getUrl=xv.prototype.em,xv.prototype.setImageLoadFunction=xv.prototype.fm,xv.prototype.setUrl=xv.prototype.gm,xv.prototype.updateParams=xv.prototype.hm,e("ol.source.MapQuest",Pv,nm),Pv.prototype.getLayer=Pv.prototype.i,e("ol.source.OSM",Mv,nm),e("ol.source.OSM.ATTRIBUTION",bC,nm),e("ol.source.Source",sn,nm),sn.prototype.getAttributions=sn.prototype.ea,sn.prototype.getLogo=sn.prototype.ca,sn.prototype.getProjection=sn.prototype.fa,sn.prototype.getState=sn.prototype.ga,e("ol.source.Stamen",Ev,nm),e("ol.source.TileArcGISRest",kv,nm),kv.prototype.getParams=kv.prototype.im,kv.prototype.getUrls=kv.prototype.jm,kv.prototype.setUrl=kv.prototype.km,kv.prototype.setUrls=kv.prototype.Ng,kv.prototype.updateParams=kv.prototype.mm,e("ol.source.TileDebug",Rv,nm),e("ol.source.TileImage",cv,nm),cv.prototype.getTileLoadFunction=cv.prototype.Ua,cv.prototype.getTileUrlFunction=cv.prototype.Va,cv.prototype.setTileLoadFunction=cv.prototype.$a,cv.prototype.setTileUrlFunction=cv.prototype.pa,e("ol.source.TileJSON",jv,nm),e("ol.source.Tile",Pn,nm),Pn.prototype.getTileGrid=Pn.prototype.ua,An.prototype.tile=An.prototype.tile,e("ol.source.TileUTFGrid",Lv,nm),Lv.prototype.getTemplate=Lv.prototype.wj,Lv.prototype.forDataAtCoordinateAndResolution=Lv.prototype.Gi,e("ol.source.TileVector",Ov,nm),Ov.prototype.getFeatures=Ov.prototype.Dc,Ov.prototype.getFeaturesAtCoordinateAndResolution=Ov.prototype.Vi,e("ol.source.TileWMS",Uv,nm),Uv.prototype.getGetFeatureInfoUrl=Uv.prototype.pm,Uv.prototype.getParams=Uv.prototype.qm,Uv.prototype.getUrls=Uv.prototype.rm,Uv.prototype.setUrl=Uv.prototype.sm,Uv.prototype.setUrls=Uv.prototype.Og,Uv.prototype.updateParams=Uv.prototype.um,e("ol.source.Vector",cu,nm),cu.prototype.addFeature=cu.prototype.jf,cu.prototype.addFeatures=cu.prototype.Oc,cu.prototype.clear=cu.prototype.clear,cu.prototype.forEachFeature=cu.prototype.Rf,cu.prototype.forEachFeatureInExtent=cu.prototype.$c,cu.prototype.forEachFeatureIntersectingExtent=cu.prototype.Oe,cu.prototype.getFeatures=cu.prototype.Dc,cu.prototype.getFeaturesAtCoordinate=cu.prototype.Re,cu.prototype.getFeaturesInExtent=cu.prototype.Se,cu.prototype.getClosestFeatureToCoordinate=cu.prototype.Tf,cu.prototype.getExtent=cu.prototype.G,cu.prototype.getFeatureById=cu.prototype.Qe,cu.prototype.removeFeature=cu.prototype.Qg,mu.prototype.feature=mu.prototype.feature,e("ol.source.WMTS",Wv,nm),Wv.prototype.getDimensions=Wv.prototype.Ti,Wv.prototype.getFormat=Wv.prototype.Xi,Wv.prototype.getLayer=Wv.prototype.vm,Wv.prototype.getMatrixSet=Wv.prototype.jj,Wv.prototype.getRequestEncoding=Wv.prototype.uj,Wv.prototype.getStyle=Wv.prototype.wm,Wv.prototype.getUrls=Wv.prototype.xm,Wv.prototype.getVersion=Wv.prototype.Aj,Wv.prototype.updateDimensions=Wv.prototype.uo,e("ol.source.WMTS.optionsFromCapabilities",function(e,o){var i,n,r,s=R(e.Contents.Layer,function(t){return t.Identifier==o.layer});i=1<s.TileMatrixSetLink.length?j(s.TileMatrixSetLink,function(t){return t.TileMatrixSet==o.matrixSet}):t(o.projection)?j(s.TileMatrixSetLink,function(t){return t.TileMatrixSet.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")==o.projection}):0,0>i&&(i=0),n=s.TileMatrixSetLink[i].TileMatrixSet,i=s.WGS84BoundingBox,t(i)&&(r=xo("EPSG:4326").G(),r=i[0]==r[0]&&i[2]==r[2]);var a=s.Format[0];t(o.format)&&(a=o.format),i=j(s.Style,function(e){return t(o.style)?e.Title==o.style:e.isDefault}),0>i&&(i=0),i=s.Style[i].Identifier;var p={};t(s.Dimension)&&P(s.Dimension,function(e){var o=e.Identifier,i=e["default"];t(i)||(i=e.values[0]),p[o]=i});var l=R(e.Contents.TileMatrixSet,function(t){return t.Identifier==n}),h=Xv(l),l=xo(t(o.projection)?o.projection:l.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")),u=[],c=o.requestEncoding,c=t(c)?c:"";if(e.OperationsMetadata.hasOwnProperty("GetTile")&&0!=c.lastIndexOf("REST",0))for(var s=e.OperationsMetadata.GetTile.DCP.HTTP.Get,f=0,y=s.length;f<y;++f){var d=R(s[f].Constraint,function(t){return"GetEncoding"==t.name}).AllowedValues.Value;0<d.length&&L(d,"KVP")&&(c="KVP",u.push(s[f].href))}else c="REST",P(s.ResourceURL,function(t){"tile"==t.resourceType&&(a=t.format,u.push(t.template))});return{urls:u,layer:o.layer,matrixSet:n,format:a,projection:l,requestEncoding:c,tileGrid:h,style:i,dimensions:p,wrapX:r}},nm),e("ol.source.XYZ",Cv,nm),Cv.prototype.setTileUrlFunction=Cv.prototype.pa,Cv.prototype.setUrl=Cv.prototype.e,e("ol.source.Zoomify",Vv,nm),$a.prototype.vectorContext=$a.prototype.vectorContext,$a.prototype.frameState=$a.prototype.frameState,$a.prototype.context=$a.prototype.context,$a.prototype.glContext=$a.prototype.glContext,e("ol.render.VectorContext",qa,nm),hc.prototype.drawAsync=hc.prototype.tc,hc.prototype.drawCircleGeometry=hc.prototype.uc,hc.prototype.drawFeature=hc.prototype.Le,hc.prototype.drawGeometryCollectionGeometry=hc.prototype.zd,hc.prototype.drawPointGeometry=hc.prototype.kb,hc.prototype.drawLineStringGeometry=hc.prototype.zb,hc.prototype.drawMultiLineStringGeometry=hc.prototype.vc,hc.prototype.drawMultiPointGeometry=hc.prototype.jb,hc.prototype.drawMultiPolygonGeometry=hc.prototype.wc,hc.prototype.drawPolygonGeometry=hc.prototype.Rb,hc.prototype.drawText=hc.prototype.lb,hc.prototype.setFillStrokeStyle=hc.prototype.Aa,hc.prototype.setImageStyle=hc.prototype.Za,hc.prototype.setTextStyle=hc.prototype.Ba,Np.prototype.drawAsync=Np.prototype.tc,Np.prototype.drawCircleGeometry=Np.prototype.uc,Np.prototype.drawFeature=Np.prototype.Le,Np.prototype.drawPointGeometry=Np.prototype.kb,Np.prototype.drawMultiPointGeometry=Np.prototype.jb,Np.prototype.drawLineStringGeometry=Np.prototype.zb,Np.prototype.drawMultiLineStringGeometry=Np.prototype.vc,Np.prototype.drawPolygonGeometry=Np.prototype.Rb,Np.prototype.drawMultiPolygonGeometry=Np.prototype.wc,Np.prototype.setFillStrokeStyle=Np.prototype.Aa,Np.prototype.setImageStyle=Np.prototype.Za,Np.prototype.setTextStyle=Np.prototype.Ba,e("ol.proj.common.add",Ap,nm),e("ol.proj.METERS_PER_UNIT",Jm,nm),e("ol.proj.Projection",ho,nm),ho.prototype.getCode=ho.prototype.Ri,ho.prototype.getExtent=ho.prototype.G,ho.prototype.getUnits=ho.prototype.Ll,ho.prototype.getMetersPerUnit=ho.prototype.Gd,ho.prototype.getWorldExtent=ho.prototype.Cj,ho.prototype.isGlobal=ho.prototype.Ml,ho.prototype.setGlobal=ho.prototype.Yn,ho.prototype.setExtent=ho.prototype.Nl,ho.prototype.setWorldExtent=ho.prototype.lo,ho.prototype.setGetPointResolution=ho.prototype.Xn,ho.prototype.getPointResolution=ho.prototype.getPointResolution,e("ol.proj.addEquivalentProjections",co,nm),e("ol.proj.addProjection",yo,nm),e("ol.proj.addCoordinateTransforms",bo,nm),e("ol.proj.fromLonLat",function(e,o){return Eo(e,"EPSG:4326",t(o)?o:"EPSG:3857")},nm),e("ol.proj.toLonLat",function(e,o){return Eo(e,t(o)?o:"EPSG:3857","EPSG:4326")},nm),e("ol.proj.get",xo,nm),e("ol.proj.getTransform",To,nm),e("ol.proj.transform",Eo,nm),e("ol.proj.transformExtent",ko,nm),e("ol.layer.Heatmap",Zg,nm),Zg.prototype.getBlur=Zg.prototype.Sf,Zg.prototype.getGradient=Zg.prototype.Wf,Zg.prototype.getRadius=Zg.prototype.Hg,Zg.prototype.setBlur=Zg.prototype.th,Zg.prototype.setGradient=Zg.prototype.yh,Zg.prototype.setRadius=Zg.prototype.Ig,e("ol.layer.Image",Rp,nm),Rp.prototype.getSource=Rp.prototype.da,e("ol.layer.Layer",Yr,nm),Yr.prototype.getSource=Yr.prototype.da,Yr.prototype.setSource=Yr.prototype.Jc,e("ol.layer.Base",zr,nm),zr.prototype.getBrightness=zr.prototype.Bb,zr.prototype.getContrast=zr.prototype.Cb,zr.prototype.getHue=zr.prototype.Db,zr.prototype.getExtent=zr.prototype.G,zr.prototype.getMaxResolution=zr.prototype.Eb,zr.prototype.getMinResolution=zr.prototype.Fb,zr.prototype.getOpacity=zr.prototype.Kb,zr.prototype.getSaturation=zr.prototype.Gb,zr.prototype.getVisible=zr.prototype.eb,zr.prototype.setBrightness=zr.prototype.gc,zr.prototype.setContrast=zr.prototype.hc,zr.prototype.setHue=zr.prototype.ic,zr.prototype.setExtent=zr.prototype.bc,zr.prototype.setMaxResolution=zr.prototype.jc,zr.prototype.setMinResolution=zr.prototype.kc,zr.prototype.setOpacity=zr.prototype.cc,zr.prototype.setSaturation=zr.prototype.lc,zr.prototype.setVisible=zr.prototype.mc,e("ol.layer.Group",Cp,nm),Cp.prototype.getLayers=Cp.prototype.Bc,Cp.prototype.setLayers=Cp.prototype.Ah,e("ol.layer.Tile",jp,nm),jp.prototype.getPreload=jp.prototype.a,jp.prototype.getSource=jp.prototype.da,jp.prototype.setPreload=jp.prototype.d,jp.prototype.getUseInterimTilesOnError=jp.prototype.c,jp.prototype.setUseInterimTilesOnError=jp.prototype.e,e("ol.layer.Vector",Lp,nm),Lp.prototype.getSource=Lp.prototype.da,Lp.prototype.getStyle=Lp.prototype.H,Lp.prototype.getStyleFunction=Lp.prototype.J,Lp.prototype.setStyle=Lp.prototype.e,e("ol.interaction.DoubleClickZoom",Ns,nm),e("ol.interaction.DoubleClickZoom.handleEvent",Is,nm),e("ol.interaction.DragAndDrop",fg,nm),e("ol.interaction.DragAndDrop.handleEvent",lb,nm),yg.prototype.features=yg.prototype.features,yg.prototype.file=yg.prototype.file,yg.prototype.projection=yg.prototype.projection,Ka.prototype.coordinate=Ka.prototype.coordinate,e("ol.interaction.DragBox",za,nm),za.prototype.getGeometry=za.prototype.Q,e("ol.interaction.DragPan",Ws,nm),e("ol.interaction.DragRotateAndZoom",gg,nm),e("ol.interaction.DragRotate",Ys,nm),e("ol.interaction.DragZoom",pp,nm),wg.prototype.feature=wg.prototype.feature,e("ol.interaction.Draw",xg,nm),e("ol.interaction.Draw.handleEvent",Tg,nm),xg.prototype.finishDrawing=xg.prototype.X,e("ol.interaction.Interaction",As,nm),As.prototype.getActive=As.prototype.c,As.prototype.setActive=As.prototype.d,e("ol.interaction.defaults",Tp,nm),e("ol.interaction.KeyboardPan",lp,nm),e("ol.interaction.KeyboardPan.handleEvent",hp,nm),e("ol.interaction.KeyboardZoom",up,nm),e("ol.interaction.KeyboardZoom.handleEvent",cp,nm),e("ol.interaction.Modify",Lg,nm),e("ol.interaction.Modify.handleEvent",Bg,nm),e("ol.interaction.MouseWheelZoom",fp,nm),e("ol.interaction.MouseWheelZoom.handleEvent",yp,nm),e("ol.interaction.PinchRotate",dp,nm),e("ol.interaction.PinchZoom",bp,nm),e("ol.interaction.Pointer",$s,nm),e("ol.interaction.Pointer.handleEvent",Xs,nm),$g.prototype.selected=$g.prototype.selected,$g.prototype.deselected=$g.prototype.deselected,e("ol.interaction.Select",Hg,nm),Hg.prototype.getFeatures=Hg.prototype.p,e("ol.interaction.Select.handleEvent",Xg,nm),Hg.prototype.setMap=Hg.prototype.setMap,e("ol.interaction.Snap",Kg,nm),Kg.prototype.addFeature=Kg.prototype.ed,Kg.prototype.removeFeature=Kg.prototype.fd,e("ol.geom.Circle",ll,nm),ll.prototype.clone=ll.prototype.clone,ll.prototype.getCenter=ll.prototype.dd,ll.prototype.getRadius=ll.prototype.zg,ll.prototype.getType=ll.prototype.M,ll.prototype.setCenter=ll.prototype.pl,ll.prototype.setCenterAndRadius=ll.prototype.uh,ll.prototype.setRadius=ll.prototype.Ag,ll.prototype.transform=ll.prototype.transform,e("ol.geom.Geometry",Qs,nm),Qs.prototype.getClosestPoint=Qs.prototype.e,Qs.prototype.getExtent=Qs.prototype.G,e("ol.geom.GeometryCollection",ul,nm),ul.prototype.clone=ul.prototype.clone,ul.prototype.getGeometries=ul.prototype.Vf,ul.prototype.getType=ul.prototype.M,ul.prototype.intersectsExtent=ul.prototype.ra,ul.prototype.setGeometries=ul.prototype.xh,ul.prototype.applyTransform=ul.prototype.qa,ul.prototype.translate=ul.prototype.Oa,e("ol.geom.LinearRing",xa,nm),xa.prototype.clone=xa.prototype.clone,xa.prototype.getArea=xa.prototype.rl,xa.prototype.getCoordinates=xa.prototype.K,xa.prototype.getType=xa.prototype.M,xa.prototype.setCoordinates=xa.prototype.W,e("ol.geom.LineString",ml,nm),ml.prototype.appendCoordinate=ml.prototype.ui,ml.prototype.clone=ml.prototype.clone,ml.prototype.forEachSegment=ml.prototype.Ji,ml.prototype.getCoordinateAtM=ml.prototype.ql,ml.prototype.getCoordinates=ml.prototype.K,ml.prototype.getLength=ml.prototype.Bg,ml.prototype.getType=ml.prototype.M,ml.prototype.intersectsExtent=ml.prototype.ra,ml.prototype.setCoordinates=ml.prototype.W,e("ol.geom.MultiLineString",xl,nm),xl.prototype.appendLineString=xl.prototype.vi,xl.prototype.clone=xl.prototype.clone,xl.prototype.getCoordinateAtM=xl.prototype.sl,xl.prototype.getCoordinates=xl.prototype.K,xl.prototype.getLineString=xl.prototype.gj,xl.prototype.getLineStrings=xl.prototype.ad,xl.prototype.getType=xl.prototype.M,xl.prototype.intersectsExtent=xl.prototype.ra,xl.prototype.setCoordinates=xl.prototype.W,e("ol.geom.MultiPoint",Ml,nm),Ml.prototype.appendPoint=Ml.prototype.xi,Ml.prototype.clone=Ml.prototype.clone,Ml.prototype.getCoordinates=Ml.prototype.K,Ml.prototype.getPoint=Ml.prototype.qj,Ml.prototype.getPoints=Ml.prototype.ce,Ml.prototype.getType=Ml.prototype.M,Ml.prototype.intersectsExtent=Ml.prototype.ra,Ml.prototype.setCoordinates=Ml.prototype.W,e("ol.geom.MultiPolygon",Pl,nm),Pl.prototype.appendPolygon=Pl.prototype.yi,Pl.prototype.clone=Pl.prototype.clone,Pl.prototype.getArea=Pl.prototype.tl,Pl.prototype.getCoordinates=Pl.prototype.K,Pl.prototype.getInteriorPoints=Pl.prototype.dj,Pl.prototype.getPolygon=Pl.prototype.sj,Pl.prototype.getPolygons=Pl.prototype.Id,Pl.prototype.getType=Pl.prototype.M,Pl.prototype.intersectsExtent=Pl.prototype.ra,Pl.prototype.setCoordinates=Pl.prototype.W,e("ol.geom.Point",Ta,nm),Ta.prototype.clone=Ta.prototype.clone,Ta.prototype.getCoordinates=Ta.prototype.K,Ta.prototype.getType=Ta.prototype.M,Ta.prototype.intersectsExtent=Ta.prototype.ra,Ta.prototype.setCoordinates=Ta.prototype.W,e("ol.geom.Polygon",Fa,nm),Fa.prototype.appendLinearRing=Fa.prototype.wi,Fa.prototype.clone=Fa.prototype.clone,Fa.prototype.getArea=Fa.prototype.ul,Fa.prototype.getCoordinates=Fa.prototype.K,Fa.prototype.getInteriorPoint=Fa.prototype.cj,Fa.prototype.getLinearRingCount=Fa.prototype.ij,Fa.prototype.getLinearRing=Fa.prototype.hj,Fa.prototype.getLinearRings=Fa.prototype.Ed,Fa.prototype.getType=Fa.prototype.M,Fa.prototype.intersectsExtent=Fa.prototype.ra,Fa.prototype.setCoordinates=Fa.prototype.W,e("ol.geom.Polygon.circular",Ga,nm),e("ol.geom.Polygon.fromExtent",function(t){var e=t[0],o=t[1],i=t[2];return t=t[3],e=[e,o,e,t,i,t,i,o,e,o],o=new Fa(null),Ua(o,"XY",e,[e.length]),o},nm),e("ol.geom.SimpleGeometry",ea,nm),ea.prototype.getFirstCoordinate=ea.prototype.ob,ea.prototype.getLastCoordinate=ea.prototype.pb,ea.prototype.getLayout=ea.prototype.qb,ea.prototype.applyTransform=ea.prototype.qa,ea.prototype.translate=ea.prototype.Oa,e("ol.format.EsriJSON",gf,nm),gf.prototype.readFeature=gf.prototype.sb,gf.prototype.readFeatures=gf.prototype.ja,gf.prototype.readGeometry=gf.prototype.Gc,gf.prototype.readProjection=gf.prototype.za,gf.prototype.writeGeometry=gf.prototype.Mc,gf.prototype.writeGeometryObject=gf.prototype.Be,gf.prototype.writeFeature=gf.prototype.qd,gf.prototype.writeFeatureObject=gf.prototype.Lc,gf.prototype.writeFeatures=gf.prototype.ub,gf.prototype.writeFeaturesObject=gf.prototype.ze,e("ol.format.Feature",hf,nm),e("ol.format.GeoJSON",xf,nm),xf.prototype.readFeature=xf.prototype.sb,xf.prototype.readFeatures=xf.prototype.ja,xf.prototype.readGeometry=xf.prototype.Gc,xf.prototype.readProjection=xf.prototype.za,xf.prototype.writeFeature=xf.prototype.qd,xf.prototype.writeFeatureObject=xf.prototype.Lc,xf.prototype.writeFeatures=xf.prototype.ub,xf.prototype.writeFeaturesObject=xf.prototype.ze,xf.prototype.writeGeometry=xf.prototype.Mc,xf.prototype.writeGeometryObject=xf.prototype.Be,
+e("ol.format.GPX",Hf,nm),Hf.prototype.readFeature=Hf.prototype.sb,Hf.prototype.readFeatures=Hf.prototype.ja,Hf.prototype.readProjection=Hf.prototype.za,Hf.prototype.writeFeatures=Hf.prototype.ub,Hf.prototype.writeFeaturesNode=Hf.prototype.a,e("ol.format.IGC",ny,nm),ny.prototype.readFeature=ny.prototype.sb,ny.prototype.readFeatures=ny.prototype.ja,ny.prototype.readProjection=ny.prototype.za,e("ol.format.KML",xy,nm),xy.prototype.readFeature=xy.prototype.sb,xy.prototype.readFeatures=xy.prototype.ja,xy.prototype.readName=xy.prototype.Dn,xy.prototype.readNetworkLinks=xy.prototype.En,xy.prototype.readProjection=xy.prototype.za,xy.prototype.writeFeatures=xy.prototype.ub,xy.prototype.writeFeaturesNode=xy.prototype.a,e("ol.format.OSMXML",Yy,nm),Yy.prototype.readFeatures=Yy.prototype.ja,Yy.prototype.readProjection=Yy.prototype.za,e("ol.format.Polyline",ed,nm),e("ol.format.Polyline.encodeDeltas",od,nm),e("ol.format.Polyline.decodeDeltas",id,nm),e("ol.format.Polyline.encodeFloats",nd,nm),e("ol.format.Polyline.decodeFloats",rd,nm),ed.prototype.readFeature=ed.prototype.sb,ed.prototype.readFeatures=ed.prototype.ja,ed.prototype.readGeometry=ed.prototype.Gc,ed.prototype.readProjection=ed.prototype.za,ed.prototype.writeGeometry=ed.prototype.Mc,e("ol.format.TopoJSON",sd,nm),sd.prototype.readFeatures=sd.prototype.ja,sd.prototype.readProjection=sd.prototype.za,e("ol.format.WFS",ud,nm),ud.prototype.readFeatures=ud.prototype.ja,ud.prototype.readTransactionResponse=ud.prototype.g,ud.prototype.readFeatureCollectionMetadata=ud.prototype.f,ud.prototype.writeGetFeature=ud.prototype.i,ud.prototype.writeTransaction=ud.prototype.o,ud.prototype.readProjection=ud.prototype.za,e("ol.format.WKT",gd,nm),gd.prototype.readFeature=gd.prototype.sb,gd.prototype.readFeatures=gd.prototype.ja,gd.prototype.readGeometry=gd.prototype.Gc,gd.prototype.writeFeature=gd.prototype.qd,gd.prototype.writeFeatures=gd.prototype.ub,gd.prototype.writeGeometry=gd.prototype.Mc,e("ol.format.WMSCapabilities",jd,nm),jd.prototype.read=jd.prototype.c,e("ol.format.WMSGetFeatureInfo",Fd,nm),Fd.prototype.readFeatures=Fd.prototype.ja,e("ol.format.WMTSCapabilities",Bd,nm),Bd.prototype.read=Bd.prototype.c,e("ol.format.GML2",$f,nm),e("ol.format.GML3",Gf,nm),Gf.prototype.writeGeometryNode=Gf.prototype.q,Gf.prototype.writeFeatures=Gf.prototype.ub,Gf.prototype.writeFeaturesNode=Gf.prototype.a,e("ol.format.GML",Gf,nm),Gf.prototype.writeFeatures=Gf.prototype.ub,Gf.prototype.writeFeaturesNode=Gf.prototype.a,Ef.prototype.readFeatures=Ef.prototype.ja,e("ol.events.condition.altKeyOnly",function(t){return t=t.b,t.a&&!t.g&&!t.d},nm),e("ol.events.condition.altShiftKeysOnly",Ds,nm),e("ol.events.condition.always",lb,nm),e("ol.events.condition.click",function(t){return t.type==Vb},nm),e("ol.events.condition.never",pb,nm),e("ol.events.condition.pointerMove",Fs,nm),e("ol.events.condition.singleClick",Os,nm),e("ol.events.condition.noModifierKeys",Bs,nm),e("ol.events.condition.platformModifierKeyOnly",function(t){return t=t.b,!t.a&&t.g&&!t.d},nm),e("ol.events.condition.shiftKeyOnly",Us,nm),e("ol.events.condition.targetNotEditable",Gs,nm),e("ol.events.condition.mouseOnly",qs,nm),e("ol.control.Attribution",Rn,nm),e("ol.control.Attribution.render",jn,nm),Rn.prototype.getCollapsible=Rn.prototype.fl,Rn.prototype.setCollapsible=Rn.prototype.il,Rn.prototype.setCollapsed=Rn.prototype.hl,Rn.prototype.getCollapsed=Rn.prototype.el,e("ol.control.Control",Ji,nm),Ji.prototype.getMap=Ji.prototype.e,Ji.prototype.setMap=Ji.prototype.setMap,Ji.prototype.setTarget=Ji.prototype.c,e("ol.control.defaults",Fn,nm),e("ol.control.FullScreen",Gn,nm),e("ol.control.MousePosition",qn,nm),e("ol.control.MousePosition.render",$n,nm),qn.prototype.getCoordinateFormat=qn.prototype.Uf,qn.prototype.getProjection=qn.prototype.xg,qn.prototype.setMap=qn.prototype.setMap,qn.prototype.setCoordinateFormat=qn.prototype.vh,qn.prototype.setProjection=qn.prototype.yg,e("ol.control.OverviewMap",Oc,nm),Oc.prototype.setMap=Oc.prototype.setMap,e("ol.control.OverviewMap.render",Bc,nm),Oc.prototype.getCollapsible=Oc.prototype.ll,Oc.prototype.setCollapsible=Oc.prototype.ol,Oc.prototype.setCollapsed=Oc.prototype.nl,Oc.prototype.getCollapsed=Oc.prototype.kl,e("ol.control.Rotate",Nn,nm),e("ol.control.Rotate.render",In,nm),e("ol.control.ScaleLine",$c,nm),$c.prototype.getUnits=$c.prototype.p,e("ol.control.ScaleLine.render",Hc,nm),$c.prototype.setUnits=$c.prototype.J,e("ol.control.Zoom",Dn,nm),e("ol.control.ZoomSlider",tf,nm),e("ol.control.ZoomSlider.render",ef,nm),e("ol.control.ZoomToExtent",rf,nm),e("ol.color.asArray",ii,nm),e("ol.color.asString",ni,nm),re.prototype.changed=re.prototype.k,re.prototype.getRevision=re.prototype.v,re.prototype.on=re.prototype.r,re.prototype.once=re.prototype.A,re.prototype.un=re.prototype.u,re.prototype.unByKey=re.prototype.B,ei.prototype.get=ei.prototype.get,ei.prototype.getKeys=ei.prototype.C,ei.prototype.getProperties=ei.prototype.D,ei.prototype.set=ei.prototype.set,ei.prototype.setProperties=ei.prototype.t,ei.prototype.unset=ei.prototype.I,ei.prototype.changed=ei.prototype.k,ei.prototype.getRevision=ei.prototype.v,ei.prototype.on=ei.prototype.r,ei.prototype.once=ei.prototype.A,ei.prototype.un=ei.prototype.u,ei.prototype.unByKey=ei.prototype.B,sf.prototype.get=sf.prototype.get,sf.prototype.getKeys=sf.prototype.C,sf.prototype.getProperties=sf.prototype.D,sf.prototype.set=sf.prototype.set,sf.prototype.setProperties=sf.prototype.t,sf.prototype.unset=sf.prototype.I,sf.prototype.changed=sf.prototype.k,sf.prototype.getRevision=sf.prototype.v,sf.prototype.on=sf.prototype.r,sf.prototype.once=sf.prototype.A,sf.prototype.un=sf.prototype.u,sf.prototype.unByKey=sf.prototype.B,af.prototype.get=af.prototype.get,af.prototype.getKeys=af.prototype.C,af.prototype.getProperties=af.prototype.D,af.prototype.set=af.prototype.set,af.prototype.setProperties=af.prototype.t,af.prototype.unset=af.prototype.I,af.prototype.changed=af.prototype.k,af.prototype.getRevision=af.prototype.v,af.prototype.on=af.prototype.r,af.prototype.once=af.prototype.A,af.prototype.un=af.prototype.u,af.prototype.unByKey=af.prototype.B,Gd.prototype.get=Gd.prototype.get,Gd.prototype.getKeys=Gd.prototype.C,Gd.prototype.getProperties=Gd.prototype.D,Gd.prototype.set=Gd.prototype.set,Gd.prototype.setProperties=Gd.prototype.t,Gd.prototype.unset=Gd.prototype.I,Gd.prototype.changed=Gd.prototype.k,Gd.prototype.getRevision=Gd.prototype.v,Gd.prototype.on=Gd.prototype.r,Gd.prototype.once=Gd.prototype.A,Gd.prototype.un=Gd.prototype.u,Gd.prototype.unByKey=Gd.prototype.B,Vd.prototype.getTileCoord=Vd.prototype.f,Lc.prototype.get=Lc.prototype.get,Lc.prototype.getKeys=Lc.prototype.C,Lc.prototype.getProperties=Lc.prototype.D,Lc.prototype.set=Lc.prototype.set,Lc.prototype.setProperties=Lc.prototype.t,Lc.prototype.unset=Lc.prototype.I,Lc.prototype.changed=Lc.prototype.k,Lc.prototype.getRevision=Lc.prototype.v,Lc.prototype.on=Lc.prototype.r,Lc.prototype.once=Lc.prototype.A,Lc.prototype.un=Lc.prototype.u,Lc.prototype.unByKey=Lc.prototype.B,$r.prototype.map=$r.prototype.map,$r.prototype.frameState=$r.prototype.frameState,Hr.prototype.originalEvent=Hr.prototype.originalEvent,Hr.prototype.pixel=Hr.prototype.pixel,Hr.prototype.coordinate=Hr.prototype.coordinate,Hr.prototype.dragging=Hr.prototype.dragging,Hr.prototype.preventDefault=Hr.prototype.preventDefault,Hr.prototype.stopPropagation=Hr.prototype.fb,Hr.prototype.map=Hr.prototype.map,Hr.prototype.frameState=Hr.prototype.frameState,Ic.prototype.get=Ic.prototype.get,Ic.prototype.getKeys=Ic.prototype.C,Ic.prototype.getProperties=Ic.prototype.D,Ic.prototype.set=Ic.prototype.set,Ic.prototype.setProperties=Ic.prototype.t,Ic.prototype.unset=Ic.prototype.I,Ic.prototype.changed=Ic.prototype.k,Ic.prototype.getRevision=Ic.prototype.v,Ic.prototype.on=Ic.prototype.r,Ic.prototype.once=Ic.prototype.A,Ic.prototype.un=Ic.prototype.u,Ic.prototype.unByKey=Ic.prototype.B,Ao.prototype.get=Ao.prototype.get,Ao.prototype.getKeys=Ao.prototype.C,Ao.prototype.getProperties=Ao.prototype.D,Ao.prototype.set=Ao.prototype.set,Ao.prototype.setProperties=Ao.prototype.t,Ao.prototype.unset=Ao.prototype.I,Ao.prototype.changed=Ao.prototype.k,Ao.prototype.getRevision=Ao.prototype.v,Ao.prototype.on=Ao.prototype.r,Ao.prototype.once=Ao.prototype.A,Ao.prototype.un=Ao.prototype.u,Ao.prototype.unByKey=Ao.prototype.B,Hv.prototype.getMaxZoom=Hv.prototype.Fd,Hv.prototype.getMinZoom=Hv.prototype.Hd,Hv.prototype.getOrigin=Hv.prototype.Mb,Hv.prototype.getResolution=Hv.prototype.ma,Hv.prototype.getResolutions=Hv.prototype.ne,Hv.prototype.getTileCoordForCoordAndResolution=Hv.prototype.Wb,Hv.prototype.getTileCoordForCoordAndZ=Hv.prototype.cd,Hv.prototype.getTileSize=Hv.prototype.na,yv.prototype.getMaxZoom=yv.prototype.Fd,yv.prototype.getMinZoom=yv.prototype.Hd,yv.prototype.getOrigin=yv.prototype.Mb,yv.prototype.getResolution=yv.prototype.ma,yv.prototype.getResolutions=yv.prototype.ne,yv.prototype.getTileCoordForCoordAndResolution=yv.prototype.Wb,yv.prototype.getTileCoordForCoordAndZ=yv.prototype.cd,yv.prototype.getTileSize=yv.prototype.na,zv.prototype.getMaxZoom=zv.prototype.Fd,zv.prototype.getMinZoom=zv.prototype.Hd,zv.prototype.getOrigin=zv.prototype.Mb,zv.prototype.getResolution=zv.prototype.ma,zv.prototype.getResolutions=zv.prototype.ne,zv.prototype.getTileCoordForCoordAndResolution=zv.prototype.Wb,zv.prototype.getTileCoordForCoordAndZ=zv.prototype.cd,zv.prototype.getTileSize=zv.prototype.na,op.prototype.getOpacity=op.prototype.ie,op.prototype.getRotateWithView=op.prototype.Jd,op.prototype.getRotation=op.prototype.je,op.prototype.getScale=op.prototype.ke,op.prototype.getSnapToPixel=op.prototype.Kd,op.prototype.setRotation=op.prototype.le,op.prototype.setScale=op.prototype.me,us.prototype.getOpacity=us.prototype.ie,us.prototype.getRotateWithView=us.prototype.Jd,us.prototype.getRotation=us.prototype.je,us.prototype.getScale=us.prototype.ke,us.prototype.getSnapToPixel=us.prototype.Kd,us.prototype.setRotation=us.prototype.le,us.prototype.setScale=us.prototype.me,tm.prototype.getOpacity=tm.prototype.ie,tm.prototype.getRotateWithView=tm.prototype.Jd,tm.prototype.getRotation=tm.prototype.je,tm.prototype.getScale=tm.prototype.ke,tm.prototype.getSnapToPixel=tm.prototype.Kd,tm.prototype.setRotation=tm.prototype.le,tm.prototype.setScale=tm.prototype.me,sn.prototype.get=sn.prototype.get,sn.prototype.getKeys=sn.prototype.C,sn.prototype.getProperties=sn.prototype.D,sn.prototype.set=sn.prototype.set,sn.prototype.setProperties=sn.prototype.t,sn.prototype.unset=sn.prototype.I,sn.prototype.changed=sn.prototype.k,sn.prototype.getRevision=sn.prototype.v,sn.prototype.on=sn.prototype.r,sn.prototype.once=sn.prototype.A,sn.prototype.un=sn.prototype.u,sn.prototype.unByKey=sn.prototype.B,Pn.prototype.getAttributions=Pn.prototype.ea,Pn.prototype.getLogo=Pn.prototype.ca,Pn.prototype.getProjection=Pn.prototype.fa,Pn.prototype.getState=Pn.prototype.ga,Pn.prototype.get=Pn.prototype.get,Pn.prototype.getKeys=Pn.prototype.C,Pn.prototype.getProperties=Pn.prototype.D,Pn.prototype.set=Pn.prototype.set,Pn.prototype.setProperties=Pn.prototype.t,Pn.prototype.unset=Pn.prototype.I,Pn.prototype.changed=Pn.prototype.k,Pn.prototype.getRevision=Pn.prototype.v,Pn.prototype.on=Pn.prototype.r,Pn.prototype.once=Pn.prototype.A,Pn.prototype.un=Pn.prototype.u,Pn.prototype.unByKey=Pn.prototype.B,cv.prototype.getTileGrid=cv.prototype.ua,cv.prototype.getAttributions=cv.prototype.ea,cv.prototype.getLogo=cv.prototype.ca,cv.prototype.getProjection=cv.prototype.fa,cv.prototype.getState=cv.prototype.ga,cv.prototype.get=cv.prototype.get,cv.prototype.getKeys=cv.prototype.C,cv.prototype.getProperties=cv.prototype.D,cv.prototype.set=cv.prototype.set,cv.prototype.setProperties=cv.prototype.t,cv.prototype.unset=cv.prototype.I,cv.prototype.changed=cv.prototype.k,cv.prototype.getRevision=cv.prototype.v,cv.prototype.on=cv.prototype.r,cv.prototype.once=cv.prototype.A,cv.prototype.un=cv.prototype.u,cv.prototype.unByKey=cv.prototype.B,dv.prototype.getTileLoadFunction=dv.prototype.Ua,dv.prototype.getTileUrlFunction=dv.prototype.Va,dv.prototype.setTileLoadFunction=dv.prototype.$a,dv.prototype.setTileUrlFunction=dv.prototype.pa,dv.prototype.getTileGrid=dv.prototype.ua,dv.prototype.getAttributions=dv.prototype.ea,dv.prototype.getLogo=dv.prototype.ca,dv.prototype.getProjection=dv.prototype.fa,dv.prototype.getState=dv.prototype.ga,dv.prototype.get=dv.prototype.get,dv.prototype.getKeys=dv.prototype.C,dv.prototype.getProperties=dv.prototype.D,dv.prototype.set=dv.prototype.set,dv.prototype.setProperties=dv.prototype.t,dv.prototype.unset=dv.prototype.I,dv.prototype.changed=dv.prototype.k,dv.prototype.getRevision=dv.prototype.v,dv.prototype.on=dv.prototype.r,dv.prototype.once=dv.prototype.A,dv.prototype.un=dv.prototype.u,dv.prototype.unByKey=dv.prototype.B,cu.prototype.getAttributions=cu.prototype.ea,cu.prototype.getLogo=cu.prototype.ca,cu.prototype.getProjection=cu.prototype.fa,cu.prototype.getState=cu.prototype.ga,cu.prototype.get=cu.prototype.get,cu.prototype.getKeys=cu.prototype.C,cu.prototype.getProperties=cu.prototype.D,cu.prototype.set=cu.prototype.set,cu.prototype.setProperties=cu.prototype.t,cu.prototype.unset=cu.prototype.I,cu.prototype.changed=cu.prototype.k,cu.prototype.getRevision=cu.prototype.v,cu.prototype.on=cu.prototype.r,cu.prototype.once=cu.prototype.A,cu.prototype.un=cu.prototype.u,cu.prototype.unByKey=cu.prototype.B,gv.prototype.addFeature=gv.prototype.jf,gv.prototype.addFeatures=gv.prototype.Oc,gv.prototype.clear=gv.prototype.clear,gv.prototype.forEachFeature=gv.prototype.Rf,gv.prototype.forEachFeatureInExtent=gv.prototype.$c,gv.prototype.forEachFeatureIntersectingExtent=gv.prototype.Oe,gv.prototype.getFeatures=gv.prototype.Dc,gv.prototype.getFeaturesAtCoordinate=gv.prototype.Re,gv.prototype.getFeaturesInExtent=gv.prototype.Se,gv.prototype.getClosestFeatureToCoordinate=gv.prototype.Tf,gv.prototype.getExtent=gv.prototype.G,gv.prototype.getFeatureById=gv.prototype.Qe,gv.prototype.removeFeature=gv.prototype.Qg,gv.prototype.getAttributions=gv.prototype.ea,gv.prototype.getLogo=gv.prototype.ca,gv.prototype.getProjection=gv.prototype.fa,gv.prototype.getState=gv.prototype.ga,gv.prototype.get=gv.prototype.get,gv.prototype.getKeys=gv.prototype.C,gv.prototype.getProperties=gv.prototype.D,gv.prototype.set=gv.prototype.set,gv.prototype.setProperties=gv.prototype.t,gv.prototype.unset=gv.prototype.I,gv.prototype.changed=gv.prototype.k,gv.prototype.getRevision=gv.prototype.v,gv.prototype.on=gv.prototype.r,gv.prototype.once=gv.prototype.A,gv.prototype.un=gv.prototype.u,gv.prototype.unByKey=gv.prototype.B,Dl.prototype.getAttributions=Dl.prototype.ea,Dl.prototype.getLogo=Dl.prototype.ca,Dl.prototype.getProjection=Dl.prototype.fa,Dl.prototype.getState=Dl.prototype.ga,Dl.prototype.get=Dl.prototype.get,Dl.prototype.getKeys=Dl.prototype.C,Dl.prototype.getProperties=Dl.prototype.D,Dl.prototype.set=Dl.prototype.set,Dl.prototype.setProperties=Dl.prototype.t,Dl.prototype.unset=Dl.prototype.I,Dl.prototype.changed=Dl.prototype.k,Dl.prototype.getRevision=Dl.prototype.v,Dl.prototype.on=Dl.prototype.r,Dl.prototype.once=Dl.prototype.A,Dl.prototype.un=Dl.prototype.u,Dl.prototype.unByKey=Dl.prototype.B,Ul.prototype.getAttributions=Ul.prototype.ea,Ul.prototype.getLogo=Ul.prototype.ca,Ul.prototype.getProjection=Ul.prototype.fa,Ul.prototype.getState=Ul.prototype.ga,Ul.prototype.get=Ul.prototype.get,Ul.prototype.getKeys=Ul.prototype.C,Ul.prototype.getProperties=Ul.prototype.D,Ul.prototype.set=Ul.prototype.set,Ul.prototype.setProperties=Ul.prototype.t,Ul.prototype.unset=Ul.prototype.I,Ul.prototype.changed=Ul.prototype.k,Ul.prototype.getRevision=Ul.prototype.v,Ul.prototype.on=Ul.prototype.r,Ul.prototype.once=Ul.prototype.A,Ul.prototype.un=Ul.prototype.u,Ul.prototype.unByKey=Ul.prototype.B,bv.prototype.getAttributions=bv.prototype.ea,bv.prototype.getLogo=bv.prototype.ca,bv.prototype.getProjection=bv.prototype.fa,bv.prototype.getState=bv.prototype.ga,bv.prototype.get=bv.prototype.get,bv.prototype.getKeys=bv.prototype.C,bv.prototype.getProperties=bv.prototype.D,bv.prototype.set=bv.prototype.set,bv.prototype.setProperties=bv.prototype.t,bv.prototype.unset=bv.prototype.I,bv.prototype.changed=bv.prototype.k,bv.prototype.getRevision=bv.prototype.v,bv.prototype.on=bv.prototype.r,bv.prototype.once=bv.prototype.A,bv.prototype.un=bv.prototype.u,bv.prototype.unByKey=bv.prototype.B,wv.prototype.getAttributions=wv.prototype.ea,wv.prototype.getLogo=wv.prototype.ca,wv.prototype.getProjection=wv.prototype.fa,wv.prototype.getState=wv.prototype.ga,wv.prototype.get=wv.prototype.get,wv.prototype.getKeys=wv.prototype.C,wv.prototype.getProperties=wv.prototype.D,wv.prototype.set=wv.prototype.set,wv.prototype.setProperties=wv.prototype.t,wv.prototype.unset=wv.prototype.I,wv.prototype.changed=wv.prototype.k,wv.prototype.getRevision=wv.prototype.v,wv.prototype.on=wv.prototype.r,wv.prototype.once=wv.prototype.A,wv.prototype.un=wv.prototype.u,wv.prototype.unByKey=wv.prototype.B,bu.prototype.getAttributions=bu.prototype.ea,bu.prototype.getLogo=bu.prototype.ca,bu.prototype.getProjection=bu.prototype.fa,bu.prototype.getState=bu.prototype.ga,bu.prototype.get=bu.prototype.get,bu.prototype.getKeys=bu.prototype.C,bu.prototype.getProperties=bu.prototype.D,bu.prototype.set=bu.prototype.set,bu.prototype.setProperties=bu.prototype.t,bu.prototype.unset=bu.prototype.I,bu.prototype.changed=bu.prototype.k,bu.prototype.getRevision=bu.prototype.v,bu.prototype.on=bu.prototype.r,bu.prototype.once=bu.prototype.A,bu.prototype.un=bu.prototype.u,bu.prototype.unByKey=bu.prototype.B,xv.prototype.getAttributions=xv.prototype.ea,xv.prototype.getLogo=xv.prototype.ca,xv.prototype.getProjection=xv.prototype.fa,xv.prototype.getState=xv.prototype.ga,xv.prototype.get=xv.prototype.get,xv.prototype.getKeys=xv.prototype.C,xv.prototype.getProperties=xv.prototype.D,xv.prototype.set=xv.prototype.set,xv.prototype.setProperties=xv.prototype.t,xv.prototype.unset=xv.prototype.I,xv.prototype.changed=xv.prototype.k,xv.prototype.getRevision=xv.prototype.v,xv.prototype.on=xv.prototype.r,xv.prototype.once=xv.prototype.A,xv.prototype.un=xv.prototype.u,xv.prototype.unByKey=xv.prototype.B,Cv.prototype.getTileLoadFunction=Cv.prototype.Ua,Cv.prototype.getTileUrlFunction=Cv.prototype.Va,Cv.prototype.setTileLoadFunction=Cv.prototype.$a,Cv.prototype.getTileGrid=Cv.prototype.ua,Cv.prototype.getAttributions=Cv.prototype.ea,Cv.prototype.getLogo=Cv.prototype.ca,Cv.prototype.getProjection=Cv.prototype.fa,Cv.prototype.getState=Cv.prototype.ga,Cv.prototype.get=Cv.prototype.get,Cv.prototype.getKeys=Cv.prototype.C,Cv.prototype.getProperties=Cv.prototype.D,Cv.prototype.set=Cv.prototype.set,Cv.prototype.setProperties=Cv.prototype.t,Cv.prototype.unset=Cv.prototype.I,Cv.prototype.changed=Cv.prototype.k,Cv.prototype.getRevision=Cv.prototype.v,Cv.prototype.on=Cv.prototype.r,Cv.prototype.once=Cv.prototype.A,Cv.prototype.un=Cv.prototype.u,Cv.prototype.unByKey=Cv.prototype.B,Pv.prototype.setTileUrlFunction=Pv.prototype.pa,Pv.prototype.setUrl=Pv.prototype.e,Pv.prototype.getTileLoadFunction=Pv.prototype.Ua,Pv.prototype.getTileUrlFunction=Pv.prototype.Va,Pv.prototype.setTileLoadFunction=Pv.prototype.$a,Pv.prototype.getTileGrid=Pv.prototype.ua,Pv.prototype.getAttributions=Pv.prototype.ea,Pv.prototype.getLogo=Pv.prototype.ca,Pv.prototype.getProjection=Pv.prototype.fa,Pv.prototype.getState=Pv.prototype.ga,Pv.prototype.get=Pv.prototype.get,Pv.prototype.getKeys=Pv.prototype.C,Pv.prototype.getProperties=Pv.prototype.D,Pv.prototype.set=Pv.prototype.set,Pv.prototype.setProperties=Pv.prototype.t,Pv.prototype.unset=Pv.prototype.I,Pv.prototype.changed=Pv.prototype.k,Pv.prototype.getRevision=Pv.prototype.v,Pv.prototype.on=Pv.prototype.r,Pv.prototype.once=Pv.prototype.A,Pv.prototype.un=Pv.prototype.u,Pv.prototype.unByKey=Pv.prototype.B,Mv.prototype.setTileUrlFunction=Mv.prototype.pa,Mv.prototype.setUrl=Mv.prototype.e,Mv.prototype.getTileLoadFunction=Mv.prototype.Ua,Mv.prototype.getTileUrlFunction=Mv.prototype.Va,Mv.prototype.setTileLoadFunction=Mv.prototype.$a,Mv.prototype.getTileGrid=Mv.prototype.ua,Mv.prototype.getAttributions=Mv.prototype.ea,Mv.prototype.getLogo=Mv.prototype.ca,Mv.prototype.getProjection=Mv.prototype.fa,Mv.prototype.getState=Mv.prototype.ga,Mv.prototype.get=Mv.prototype.get,Mv.prototype.getKeys=Mv.prototype.C,Mv.prototype.getProperties=Mv.prototype.D,Mv.prototype.set=Mv.prototype.set,Mv.prototype.setProperties=Mv.prototype.t,Mv.prototype.unset=Mv.prototype.I,Mv.prototype.changed=Mv.prototype.k,Mv.prototype.getRevision=Mv.prototype.v,Mv.prototype.on=Mv.prototype.r,Mv.prototype.once=Mv.prototype.A,Mv.prototype.un=Mv.prototype.u,Mv.prototype.unByKey=Mv.prototype.B,Ev.prototype.setTileUrlFunction=Ev.prototype.pa,Ev.prototype.setUrl=Ev.prototype.e,Ev.prototype.getTileLoadFunction=Ev.prototype.Ua,Ev.prototype.getTileUrlFunction=Ev.prototype.Va,Ev.prototype.setTileLoadFunction=Ev.prototype.$a,Ev.prototype.getTileGrid=Ev.prototype.ua,Ev.prototype.getAttributions=Ev.prototype.ea,Ev.prototype.getLogo=Ev.prototype.ca,Ev.prototype.getProjection=Ev.prototype.fa,Ev.prototype.getState=Ev.prototype.ga,Ev.prototype.get=Ev.prototype.get,Ev.prototype.getKeys=Ev.prototype.C,Ev.prototype.getProperties=Ev.prototype.D,Ev.prototype.set=Ev.prototype.set,Ev.prototype.setProperties=Ev.prototype.t,Ev.prototype.unset=Ev.prototype.I,Ev.prototype.changed=Ev.prototype.k,Ev.prototype.getRevision=Ev.prototype.v,Ev.prototype.on=Ev.prototype.r,Ev.prototype.once=Ev.prototype.A,Ev.prototype.un=Ev.prototype.u,Ev.prototype.unByKey=Ev.prototype.B,kv.prototype.getTileLoadFunction=kv.prototype.Ua,kv.prototype.getTileUrlFunction=kv.prototype.Va,kv.prototype.setTileLoadFunction=kv.prototype.$a,kv.prototype.setTileUrlFunction=kv.prototype.pa,kv.prototype.getTileGrid=kv.prototype.ua,kv.prototype.getAttributions=kv.prototype.ea,kv.prototype.getLogo=kv.prototype.ca,kv.prototype.getProjection=kv.prototype.fa,kv.prototype.getState=kv.prototype.ga,kv.prototype.get=kv.prototype.get,kv.prototype.getKeys=kv.prototype.C,kv.prototype.getProperties=kv.prototype.D,kv.prototype.set=kv.prototype.set,kv.prototype.setProperties=kv.prototype.t,kv.prototype.unset=kv.prototype.I,kv.prototype.changed=kv.prototype.k,kv.prototype.getRevision=kv.prototype.v,kv.prototype.on=kv.prototype.r,kv.prototype.once=kv.prototype.A,kv.prototype.un=kv.prototype.u,kv.prototype.unByKey=kv.prototype.B,Rv.prototype.getTileGrid=Rv.prototype.ua,Rv.prototype.getAttributions=Rv.prototype.ea,Rv.prototype.getLogo=Rv.prototype.ca,Rv.prototype.getProjection=Rv.prototype.fa,Rv.prototype.getState=Rv.prototype.ga,Rv.prototype.get=Rv.prototype.get,Rv.prototype.getKeys=Rv.prototype.C,Rv.prototype.getProperties=Rv.prototype.D,Rv.prototype.set=Rv.prototype.set,Rv.prototype.setProperties=Rv.prototype.t,Rv.prototype.unset=Rv.prototype.I,Rv.prototype.changed=Rv.prototype.k,Rv.prototype.getRevision=Rv.prototype.v,Rv.prototype.on=Rv.prototype.r,Rv.prototype.once=Rv.prototype.A,Rv.prototype.un=Rv.prototype.u,Rv.prototype.unByKey=Rv.prototype.B,jv.prototype.getTileLoadFunction=jv.prototype.Ua,jv.prototype.getTileUrlFunction=jv.prototype.Va,jv.prototype.setTileLoadFunction=jv.prototype.$a,jv.prototype.setTileUrlFunction=jv.prototype.pa,jv.prototype.getTileGrid=jv.prototype.ua,jv.prototype.getAttributions=jv.prototype.ea,jv.prototype.getLogo=jv.prototype.ca,jv.prototype.getProjection=jv.prototype.fa,jv.prototype.getState=jv.prototype.ga,jv.prototype.get=jv.prototype.get,jv.prototype.getKeys=jv.prototype.C,jv.prototype.getProperties=jv.prototype.D,jv.prototype.set=jv.prototype.set,jv.prototype.setProperties=jv.prototype.t,jv.prototype.unset=jv.prototype.I,jv.prototype.changed=jv.prototype.k,jv.prototype.getRevision=jv.prototype.v,jv.prototype.on=jv.prototype.r,jv.prototype.once=jv.prototype.A,jv.prototype.un=jv.prototype.u,jv.prototype.unByKey=jv.prototype.B,Lv.prototype.getTileGrid=Lv.prototype.ua,Lv.prototype.getAttributions=Lv.prototype.ea,Lv.prototype.getLogo=Lv.prototype.ca,Lv.prototype.getProjection=Lv.prototype.fa,Lv.prototype.getState=Lv.prototype.ga,Lv.prototype.get=Lv.prototype.get,Lv.prototype.getKeys=Lv.prototype.C,Lv.prototype.getProperties=Lv.prototype.D,Lv.prototype.set=Lv.prototype.set,Lv.prototype.setProperties=Lv.prototype.t,Lv.prototype.unset=Lv.prototype.I,Lv.prototype.changed=Lv.prototype.k,Lv.prototype.getRevision=Lv.prototype.v,Lv.prototype.on=Lv.prototype.r,Lv.prototype.once=Lv.prototype.A,Lv.prototype.un=Lv.prototype.u,Lv.prototype.unByKey=Lv.prototype.B,Ov.prototype.forEachFeatureIntersectingExtent=Ov.prototype.Oe,Ov.prototype.getFeaturesAtCoordinate=Ov.prototype.Re,Ov.prototype.getFeatureById=Ov.prototype.Qe,Ov.prototype.getAttributions=Ov.prototype.ea,Ov.prototype.getLogo=Ov.prototype.ca,Ov.prototype.getProjection=Ov.prototype.fa,Ov.prototype.getState=Ov.prototype.ga,Ov.prototype.get=Ov.prototype.get,Ov.prototype.getKeys=Ov.prototype.C,Ov.prototype.getProperties=Ov.prototype.D,Ov.prototype.set=Ov.prototype.set,Ov.prototype.setProperties=Ov.prototype.t,Ov.prototype.unset=Ov.prototype.I,Ov.prototype.changed=Ov.prototype.k,Ov.prototype.getRevision=Ov.prototype.v,Ov.prototype.on=Ov.prototype.r,Ov.prototype.once=Ov.prototype.A,Ov.prototype.un=Ov.prototype.u,Ov.prototype.unByKey=Ov.prototype.B,Uv.prototype.getTileLoadFunction=Uv.prototype.Ua,Uv.prototype.getTileUrlFunction=Uv.prototype.Va,Uv.prototype.setTileLoadFunction=Uv.prototype.$a,Uv.prototype.setTileUrlFunction=Uv.prototype.pa,Uv.prototype.getTileGrid=Uv.prototype.ua,Uv.prototype.getAttributions=Uv.prototype.ea,Uv.prototype.getLogo=Uv.prototype.ca,Uv.prototype.getProjection=Uv.prototype.fa,Uv.prototype.getState=Uv.prototype.ga,Uv.prototype.get=Uv.prototype.get,Uv.prototype.getKeys=Uv.prototype.C,Uv.prototype.getProperties=Uv.prototype.D,Uv.prototype.set=Uv.prototype.set,Uv.prototype.setProperties=Uv.prototype.t,Uv.prototype.unset=Uv.prototype.I,Uv.prototype.changed=Uv.prototype.k,Uv.prototype.getRevision=Uv.prototype.v,Uv.prototype.on=Uv.prototype.r,Uv.prototype.once=Uv.prototype.A,Uv.prototype.un=Uv.prototype.u,Uv.prototype.unByKey=Uv.prototype.B,Wv.prototype.getTileLoadFunction=Wv.prototype.Ua,Wv.prototype.getTileUrlFunction=Wv.prototype.Va,Wv.prototype.setTileLoadFunction=Wv.prototype.$a,Wv.prototype.setTileUrlFunction=Wv.prototype.pa,Wv.prototype.getTileGrid=Wv.prototype.ua,Wv.prototype.getAttributions=Wv.prototype.ea,Wv.prototype.getLogo=Wv.prototype.ca,Wv.prototype.getProjection=Wv.prototype.fa,Wv.prototype.getState=Wv.prototype.ga,Wv.prototype.get=Wv.prototype.get,Wv.prototype.getKeys=Wv.prototype.C,Wv.prototype.getProperties=Wv.prototype.D,Wv.prototype.set=Wv.prototype.set,Wv.prototype.setProperties=Wv.prototype.t,Wv.prototype.unset=Wv.prototype.I,Wv.prototype.changed=Wv.prototype.k,Wv.prototype.getRevision=Wv.prototype.v,Wv.prototype.on=Wv.prototype.r,Wv.prototype.once=Wv.prototype.A,Wv.prototype.un=Wv.prototype.u,Wv.prototype.unByKey=Wv.prototype.B,Vv.prototype.getTileLoadFunction=Vv.prototype.Ua,Vv.prototype.getTileUrlFunction=Vv.prototype.Va,Vv.prototype.setTileLoadFunction=Vv.prototype.$a,Vv.prototype.setTileUrlFunction=Vv.prototype.pa,Vv.prototype.getTileGrid=Vv.prototype.ua,Vv.prototype.getAttributions=Vv.prototype.ea,Vv.prototype.getLogo=Vv.prototype.ca,Vv.prototype.getProjection=Vv.prototype.fa,Vv.prototype.getState=Vv.prototype.ga,Vv.prototype.get=Vv.prototype.get,Vv.prototype.getKeys=Vv.prototype.C,Vv.prototype.getProperties=Vv.prototype.D,Vv.prototype.set=Vv.prototype.set,Vv.prototype.setProperties=Vv.prototype.t,Vv.prototype.unset=Vv.prototype.I,Vv.prototype.changed=Vv.prototype.k,Vv.prototype.getRevision=Vv.prototype.v,Vv.prototype.on=Vv.prototype.r,Vv.prototype.once=Vv.prototype.A,Vv.prototype.un=Vv.prototype.u,Vv.prototype.unByKey=Vv.prototype.B,es.prototype.changed=es.prototype.k,es.prototype.getRevision=es.prototype.v,es.prototype.on=es.prototype.r,es.prototype.once=es.prototype.A,es.prototype.un=es.prototype.u,es.prototype.unByKey=es.prototype.B,vc.prototype.changed=vc.prototype.k,vc.prototype.getRevision=vc.prototype.v,vc.prototype.on=vc.prototype.r,vc.prototype.once=vc.prototype.A,vc.prototype.un=vc.prototype.u,vc.prototype.unByKey=vc.prototype.B,wc.prototype.changed=wc.prototype.k,wc.prototype.getRevision=wc.prototype.v,wc.prototype.on=wc.prototype.r,wc.prototype.once=wc.prototype.A,wc.prototype.un=wc.prototype.u,wc.prototype.unByKey=wc.prototype.B,Pc.prototype.changed=Pc.prototype.k,Pc.prototype.getRevision=Pc.prototype.v,Pc.prototype.on=Pc.prototype.r,Pc.prototype.once=Pc.prototype.A,Pc.prototype.un=Pc.prototype.u,Pc.prototype.unByKey=Pc.prototype.B,Ec.prototype.changed=Ec.prototype.k,Ec.prototype.getRevision=Ec.prototype.v,Ec.prototype.on=Ec.prototype.r,Ec.prototype.once=Ec.prototype.A,Ec.prototype.un=Ec.prototype.u,Ec.prototype.unByKey=Ec.prototype.B,Pu.prototype.changed=Pu.prototype.k,Pu.prototype.getRevision=Pu.prototype.v,Pu.prototype.on=Pu.prototype.r,Pu.prototype.once=Pu.prototype.A,Pu.prototype.un=Pu.prototype.u,Pu.prototype.unByKey=Pu.prototype.B,Eu.prototype.changed=Eu.prototype.k,Eu.prototype.getRevision=Eu.prototype.v,Eu.prototype.on=Eu.prototype.r,Eu.prototype.once=Eu.prototype.A,Eu.prototype.un=Eu.prototype.u,Eu.prototype.unByKey=Eu.prototype.B,ku.prototype.changed=ku.prototype.k,ku.prototype.getRevision=ku.prototype.v,ku.prototype.on=ku.prototype.r,ku.prototype.once=ku.prototype.A,ku.prototype.un=ku.prototype.u,ku.prototype.unByKey=ku.prototype.B,Ru.prototype.changed=Ru.prototype.k,Ru.prototype.getRevision=Ru.prototype.v,Ru.prototype.on=Ru.prototype.r,Ru.prototype.once=Ru.prototype.A,Ru.prototype.un=Ru.prototype.u,Ru.prototype.unByKey=Ru.prototype.B,rl.prototype.changed=rl.prototype.k,rl.prototype.getRevision=rl.prototype.v,rl.prototype.on=rl.prototype.r,rl.prototype.once=rl.prototype.A,rl.prototype.un=rl.prototype.u,rl.prototype.unByKey=rl.prototype.B,xu.prototype.changed=xu.prototype.k,xu.prototype.getRevision=xu.prototype.v,xu.prototype.on=xu.prototype.r,xu.prototype.once=xu.prototype.A,xu.prototype.un=xu.prototype.u,xu.prototype.unByKey=xu.prototype.B,Su.prototype.changed=Su.prototype.k,Su.prototype.getRevision=Su.prototype.v,Su.prototype.on=Su.prototype.r,Su.prototype.once=Su.prototype.A,Su.prototype.un=Su.prototype.u,Su.prototype.unByKey=Su.prototype.B,Tu.prototype.changed=Tu.prototype.k,Tu.prototype.getRevision=Tu.prototype.v,Tu.prototype.on=Tu.prototype.r,Tu.prototype.once=Tu.prototype.A,Tu.prototype.un=Tu.prototype.u,Tu.prototype.unByKey=Tu.prototype.B,zr.prototype.get=zr.prototype.get,zr.prototype.getKeys=zr.prototype.C,zr.prototype.getProperties=zr.prototype.D,zr.prototype.set=zr.prototype.set,zr.prototype.setProperties=zr.prototype.t,zr.prototype.unset=zr.prototype.I,zr.prototype.changed=zr.prototype.k,zr.prototype.getRevision=zr.prototype.v,zr.prototype.on=zr.prototype.r,zr.prototype.once=zr.prototype.A,zr.prototype.un=zr.prototype.u,zr.prototype.unByKey=zr.prototype.B,Yr.prototype.getBrightness=Yr.prototype.Bb,Yr.prototype.getContrast=Yr.prototype.Cb,Yr.prototype.getHue=Yr.prototype.Db,Yr.prototype.getExtent=Yr.prototype.G,Yr.prototype.getMaxResolution=Yr.prototype.Eb,Yr.prototype.getMinResolution=Yr.prototype.Fb,Yr.prototype.getOpacity=Yr.prototype.Kb,Yr.prototype.getSaturation=Yr.prototype.Gb,Yr.prototype.getVisible=Yr.prototype.eb,Yr.prototype.setBrightness=Yr.prototype.gc,Yr.prototype.setContrast=Yr.prototype.hc,Yr.prototype.setHue=Yr.prototype.ic,Yr.prototype.setExtent=Yr.prototype.bc,Yr.prototype.setMaxResolution=Yr.prototype.jc,Yr.prototype.setMinResolution=Yr.prototype.kc,Yr.prototype.setOpacity=Yr.prototype.cc,Yr.prototype.setSaturation=Yr.prototype.lc,Yr.prototype.setVisible=Yr.prototype.mc,Yr.prototype.get=Yr.prototype.get,Yr.prototype.getKeys=Yr.prototype.C,Yr.prototype.getProperties=Yr.prototype.D,Yr.prototype.set=Yr.prototype.set,Yr.prototype.setProperties=Yr.prototype.t,Yr.prototype.unset=Yr.prototype.I,Yr.prototype.changed=Yr.prototype.k,Yr.prototype.getRevision=Yr.prototype.v,Yr.prototype.on=Yr.prototype.r,Yr.prototype.once=Yr.prototype.A,Yr.prototype.un=Yr.prototype.u,Yr.prototype.unByKey=Yr.prototype.B,Lp.prototype.setSource=Lp.prototype.Jc,Lp.prototype.getBrightness=Lp.prototype.Bb,Lp.prototype.getContrast=Lp.prototype.Cb,
+Lp.prototype.getHue=Lp.prototype.Db,Lp.prototype.getExtent=Lp.prototype.G,Lp.prototype.getMaxResolution=Lp.prototype.Eb,Lp.prototype.getMinResolution=Lp.prototype.Fb,Lp.prototype.getOpacity=Lp.prototype.Kb,Lp.prototype.getSaturation=Lp.prototype.Gb,Lp.prototype.getVisible=Lp.prototype.eb,Lp.prototype.setBrightness=Lp.prototype.gc,Lp.prototype.setContrast=Lp.prototype.hc,Lp.prototype.setHue=Lp.prototype.ic,Lp.prototype.setExtent=Lp.prototype.bc,Lp.prototype.setMaxResolution=Lp.prototype.jc,Lp.prototype.setMinResolution=Lp.prototype.kc,Lp.prototype.setOpacity=Lp.prototype.cc,Lp.prototype.setSaturation=Lp.prototype.lc,Lp.prototype.setVisible=Lp.prototype.mc,Lp.prototype.get=Lp.prototype.get,Lp.prototype.getKeys=Lp.prototype.C,Lp.prototype.getProperties=Lp.prototype.D,Lp.prototype.set=Lp.prototype.set,Lp.prototype.setProperties=Lp.prototype.t,Lp.prototype.unset=Lp.prototype.I,Lp.prototype.changed=Lp.prototype.k,Lp.prototype.getRevision=Lp.prototype.v,Lp.prototype.on=Lp.prototype.r,Lp.prototype.once=Lp.prototype.A,Lp.prototype.un=Lp.prototype.u,Lp.prototype.unByKey=Lp.prototype.B,Zg.prototype.getSource=Zg.prototype.da,Zg.prototype.getStyle=Zg.prototype.H,Zg.prototype.getStyleFunction=Zg.prototype.J,Zg.prototype.setStyle=Zg.prototype.e,Zg.prototype.setSource=Zg.prototype.Jc,Zg.prototype.getBrightness=Zg.prototype.Bb,Zg.prototype.getContrast=Zg.prototype.Cb,Zg.prototype.getHue=Zg.prototype.Db,Zg.prototype.getExtent=Zg.prototype.G,Zg.prototype.getMaxResolution=Zg.prototype.Eb,Zg.prototype.getMinResolution=Zg.prototype.Fb,Zg.prototype.getOpacity=Zg.prototype.Kb,Zg.prototype.getSaturation=Zg.prototype.Gb,Zg.prototype.getVisible=Zg.prototype.eb,Zg.prototype.setBrightness=Zg.prototype.gc,Zg.prototype.setContrast=Zg.prototype.hc,Zg.prototype.setHue=Zg.prototype.ic,Zg.prototype.setExtent=Zg.prototype.bc,Zg.prototype.setMaxResolution=Zg.prototype.jc,Zg.prototype.setMinResolution=Zg.prototype.kc,Zg.prototype.setOpacity=Zg.prototype.cc,Zg.prototype.setSaturation=Zg.prototype.lc,Zg.prototype.setVisible=Zg.prototype.mc,Zg.prototype.get=Zg.prototype.get,Zg.prototype.getKeys=Zg.prototype.C,Zg.prototype.getProperties=Zg.prototype.D,Zg.prototype.set=Zg.prototype.set,Zg.prototype.setProperties=Zg.prototype.t,Zg.prototype.unset=Zg.prototype.I,Zg.prototype.changed=Zg.prototype.k,Zg.prototype.getRevision=Zg.prototype.v,Zg.prototype.on=Zg.prototype.r,Zg.prototype.once=Zg.prototype.A,Zg.prototype.un=Zg.prototype.u,Zg.prototype.unByKey=Zg.prototype.B,Rp.prototype.setSource=Rp.prototype.Jc,Rp.prototype.getBrightness=Rp.prototype.Bb,Rp.prototype.getContrast=Rp.prototype.Cb,Rp.prototype.getHue=Rp.prototype.Db,Rp.prototype.getExtent=Rp.prototype.G,Rp.prototype.getMaxResolution=Rp.prototype.Eb,Rp.prototype.getMinResolution=Rp.prototype.Fb,Rp.prototype.getOpacity=Rp.prototype.Kb,Rp.prototype.getSaturation=Rp.prototype.Gb,Rp.prototype.getVisible=Rp.prototype.eb,Rp.prototype.setBrightness=Rp.prototype.gc,Rp.prototype.setContrast=Rp.prototype.hc,Rp.prototype.setHue=Rp.prototype.ic,Rp.prototype.setExtent=Rp.prototype.bc,Rp.prototype.setMaxResolution=Rp.prototype.jc,Rp.prototype.setMinResolution=Rp.prototype.kc,Rp.prototype.setOpacity=Rp.prototype.cc,Rp.prototype.setSaturation=Rp.prototype.lc,Rp.prototype.setVisible=Rp.prototype.mc,Rp.prototype.get=Rp.prototype.get,Rp.prototype.getKeys=Rp.prototype.C,Rp.prototype.getProperties=Rp.prototype.D,Rp.prototype.set=Rp.prototype.set,Rp.prototype.setProperties=Rp.prototype.t,Rp.prototype.unset=Rp.prototype.I,Rp.prototype.changed=Rp.prototype.k,Rp.prototype.getRevision=Rp.prototype.v,Rp.prototype.on=Rp.prototype.r,Rp.prototype.once=Rp.prototype.A,Rp.prototype.un=Rp.prototype.u,Rp.prototype.unByKey=Rp.prototype.B,Cp.prototype.getBrightness=Cp.prototype.Bb,Cp.prototype.getContrast=Cp.prototype.Cb,Cp.prototype.getHue=Cp.prototype.Db,Cp.prototype.getExtent=Cp.prototype.G,Cp.prototype.getMaxResolution=Cp.prototype.Eb,Cp.prototype.getMinResolution=Cp.prototype.Fb,Cp.prototype.getOpacity=Cp.prototype.Kb,Cp.prototype.getSaturation=Cp.prototype.Gb,Cp.prototype.getVisible=Cp.prototype.eb,Cp.prototype.setBrightness=Cp.prototype.gc,Cp.prototype.setContrast=Cp.prototype.hc,Cp.prototype.setHue=Cp.prototype.ic,Cp.prototype.setExtent=Cp.prototype.bc,Cp.prototype.setMaxResolution=Cp.prototype.jc,Cp.prototype.setMinResolution=Cp.prototype.kc,Cp.prototype.setOpacity=Cp.prototype.cc,Cp.prototype.setSaturation=Cp.prototype.lc,Cp.prototype.setVisible=Cp.prototype.mc,Cp.prototype.get=Cp.prototype.get,Cp.prototype.getKeys=Cp.prototype.C,Cp.prototype.getProperties=Cp.prototype.D,Cp.prototype.set=Cp.prototype.set,Cp.prototype.setProperties=Cp.prototype.t,Cp.prototype.unset=Cp.prototype.I,Cp.prototype.changed=Cp.prototype.k,Cp.prototype.getRevision=Cp.prototype.v,Cp.prototype.on=Cp.prototype.r,Cp.prototype.once=Cp.prototype.A,Cp.prototype.un=Cp.prototype.u,Cp.prototype.unByKey=Cp.prototype.B,jp.prototype.setSource=jp.prototype.Jc,jp.prototype.getBrightness=jp.prototype.Bb,jp.prototype.getContrast=jp.prototype.Cb,jp.prototype.getHue=jp.prototype.Db,jp.prototype.getExtent=jp.prototype.G,jp.prototype.getMaxResolution=jp.prototype.Eb,jp.prototype.getMinResolution=jp.prototype.Fb,jp.prototype.getOpacity=jp.prototype.Kb,jp.prototype.getSaturation=jp.prototype.Gb,jp.prototype.getVisible=jp.prototype.eb,jp.prototype.setBrightness=jp.prototype.gc,jp.prototype.setContrast=jp.prototype.hc,jp.prototype.setHue=jp.prototype.ic,jp.prototype.setExtent=jp.prototype.bc,jp.prototype.setMaxResolution=jp.prototype.jc,jp.prototype.setMinResolution=jp.prototype.kc,jp.prototype.setOpacity=jp.prototype.cc,jp.prototype.setSaturation=jp.prototype.lc,jp.prototype.setVisible=jp.prototype.mc,jp.prototype.get=jp.prototype.get,jp.prototype.getKeys=jp.prototype.C,jp.prototype.getProperties=jp.prototype.D,jp.prototype.set=jp.prototype.set,jp.prototype.setProperties=jp.prototype.t,jp.prototype.unset=jp.prototype.I,jp.prototype.changed=jp.prototype.k,jp.prototype.getRevision=jp.prototype.v,jp.prototype.on=jp.prototype.r,jp.prototype.once=jp.prototype.A,jp.prototype.un=jp.prototype.u,jp.prototype.unByKey=jp.prototype.B,As.prototype.get=As.prototype.get,As.prototype.getKeys=As.prototype.C,As.prototype.getProperties=As.prototype.D,As.prototype.set=As.prototype.set,As.prototype.setProperties=As.prototype.t,As.prototype.unset=As.prototype.I,As.prototype.changed=As.prototype.k,As.prototype.getRevision=As.prototype.v,As.prototype.on=As.prototype.r,As.prototype.once=As.prototype.A,As.prototype.un=As.prototype.u,As.prototype.unByKey=As.prototype.B,Ns.prototype.getActive=Ns.prototype.c,Ns.prototype.setActive=Ns.prototype.d,Ns.prototype.get=Ns.prototype.get,Ns.prototype.getKeys=Ns.prototype.C,Ns.prototype.getProperties=Ns.prototype.D,Ns.prototype.set=Ns.prototype.set,Ns.prototype.setProperties=Ns.prototype.t,Ns.prototype.unset=Ns.prototype.I,Ns.prototype.changed=Ns.prototype.k,Ns.prototype.getRevision=Ns.prototype.v,Ns.prototype.on=Ns.prototype.r,Ns.prototype.once=Ns.prototype.A,Ns.prototype.un=Ns.prototype.u,Ns.prototype.unByKey=Ns.prototype.B,fg.prototype.getActive=fg.prototype.c,fg.prototype.setActive=fg.prototype.d,fg.prototype.get=fg.prototype.get,fg.prototype.getKeys=fg.prototype.C,fg.prototype.getProperties=fg.prototype.D,fg.prototype.set=fg.prototype.set,fg.prototype.setProperties=fg.prototype.t,fg.prototype.unset=fg.prototype.I,fg.prototype.changed=fg.prototype.k,fg.prototype.getRevision=fg.prototype.v,fg.prototype.on=fg.prototype.r,fg.prototype.once=fg.prototype.A,fg.prototype.un=fg.prototype.u,fg.prototype.unByKey=fg.prototype.B,$s.prototype.getActive=$s.prototype.c,$s.prototype.setActive=$s.prototype.d,$s.prototype.get=$s.prototype.get,$s.prototype.getKeys=$s.prototype.C,$s.prototype.getProperties=$s.prototype.D,$s.prototype.set=$s.prototype.set,$s.prototype.setProperties=$s.prototype.t,$s.prototype.unset=$s.prototype.I,$s.prototype.changed=$s.prototype.k,$s.prototype.getRevision=$s.prototype.v,$s.prototype.on=$s.prototype.r,$s.prototype.once=$s.prototype.A,$s.prototype.un=$s.prototype.u,$s.prototype.unByKey=$s.prototype.B,za.prototype.getActive=za.prototype.c,za.prototype.setActive=za.prototype.d,za.prototype.get=za.prototype.get,za.prototype.getKeys=za.prototype.C,za.prototype.getProperties=za.prototype.D,za.prototype.set=za.prototype.set,za.prototype.setProperties=za.prototype.t,za.prototype.unset=za.prototype.I,za.prototype.changed=za.prototype.k,za.prototype.getRevision=za.prototype.v,za.prototype.on=za.prototype.r,za.prototype.once=za.prototype.A,za.prototype.un=za.prototype.u,za.prototype.unByKey=za.prototype.B,Ws.prototype.getActive=Ws.prototype.c,Ws.prototype.setActive=Ws.prototype.d,Ws.prototype.get=Ws.prototype.get,Ws.prototype.getKeys=Ws.prototype.C,Ws.prototype.getProperties=Ws.prototype.D,Ws.prototype.set=Ws.prototype.set,Ws.prototype.setProperties=Ws.prototype.t,Ws.prototype.unset=Ws.prototype.I,Ws.prototype.changed=Ws.prototype.k,Ws.prototype.getRevision=Ws.prototype.v,Ws.prototype.on=Ws.prototype.r,Ws.prototype.once=Ws.prototype.A,Ws.prototype.un=Ws.prototype.u,Ws.prototype.unByKey=Ws.prototype.B,gg.prototype.getActive=gg.prototype.c,gg.prototype.setActive=gg.prototype.d,gg.prototype.get=gg.prototype.get,gg.prototype.getKeys=gg.prototype.C,gg.prototype.getProperties=gg.prototype.D,gg.prototype.set=gg.prototype.set,gg.prototype.setProperties=gg.prototype.t,gg.prototype.unset=gg.prototype.I,gg.prototype.changed=gg.prototype.k,gg.prototype.getRevision=gg.prototype.v,gg.prototype.on=gg.prototype.r,gg.prototype.once=gg.prototype.A,gg.prototype.un=gg.prototype.u,gg.prototype.unByKey=gg.prototype.B,Ys.prototype.getActive=Ys.prototype.c,Ys.prototype.setActive=Ys.prototype.d,Ys.prototype.get=Ys.prototype.get,Ys.prototype.getKeys=Ys.prototype.C,Ys.prototype.getProperties=Ys.prototype.D,Ys.prototype.set=Ys.prototype.set,Ys.prototype.setProperties=Ys.prototype.t,Ys.prototype.unset=Ys.prototype.I,Ys.prototype.changed=Ys.prototype.k,Ys.prototype.getRevision=Ys.prototype.v,Ys.prototype.on=Ys.prototype.r,Ys.prototype.once=Ys.prototype.A,Ys.prototype.un=Ys.prototype.u,Ys.prototype.unByKey=Ys.prototype.B,pp.prototype.getGeometry=pp.prototype.Q,pp.prototype.getActive=pp.prototype.c,pp.prototype.setActive=pp.prototype.d,pp.prototype.get=pp.prototype.get,pp.prototype.getKeys=pp.prototype.C,pp.prototype.getProperties=pp.prototype.D,pp.prototype.set=pp.prototype.set,pp.prototype.setProperties=pp.prototype.t,pp.prototype.unset=pp.prototype.I,pp.prototype.changed=pp.prototype.k,pp.prototype.getRevision=pp.prototype.v,pp.prototype.on=pp.prototype.r,pp.prototype.once=pp.prototype.A,pp.prototype.un=pp.prototype.u,pp.prototype.unByKey=pp.prototype.B,xg.prototype.getActive=xg.prototype.c,xg.prototype.setActive=xg.prototype.d,xg.prototype.get=xg.prototype.get,xg.prototype.getKeys=xg.prototype.C,xg.prototype.getProperties=xg.prototype.D,xg.prototype.set=xg.prototype.set,xg.prototype.setProperties=xg.prototype.t,xg.prototype.unset=xg.prototype.I,xg.prototype.changed=xg.prototype.k,xg.prototype.getRevision=xg.prototype.v,xg.prototype.on=xg.prototype.r,xg.prototype.once=xg.prototype.A,xg.prototype.un=xg.prototype.u,xg.prototype.unByKey=xg.prototype.B,lp.prototype.getActive=lp.prototype.c,lp.prototype.setActive=lp.prototype.d,lp.prototype.get=lp.prototype.get,lp.prototype.getKeys=lp.prototype.C,lp.prototype.getProperties=lp.prototype.D,lp.prototype.set=lp.prototype.set,lp.prototype.setProperties=lp.prototype.t,lp.prototype.unset=lp.prototype.I,lp.prototype.changed=lp.prototype.k,lp.prototype.getRevision=lp.prototype.v,lp.prototype.on=lp.prototype.r,lp.prototype.once=lp.prototype.A,lp.prototype.un=lp.prototype.u,lp.prototype.unByKey=lp.prototype.B,up.prototype.getActive=up.prototype.c,up.prototype.setActive=up.prototype.d,up.prototype.get=up.prototype.get,up.prototype.getKeys=up.prototype.C,up.prototype.getProperties=up.prototype.D,up.prototype.set=up.prototype.set,up.prototype.setProperties=up.prototype.t,up.prototype.unset=up.prototype.I,up.prototype.changed=up.prototype.k,up.prototype.getRevision=up.prototype.v,up.prototype.on=up.prototype.r,up.prototype.once=up.prototype.A,up.prototype.un=up.prototype.u,up.prototype.unByKey=up.prototype.B,Lg.prototype.getActive=Lg.prototype.c,Lg.prototype.setActive=Lg.prototype.d,Lg.prototype.get=Lg.prototype.get,Lg.prototype.getKeys=Lg.prototype.C,Lg.prototype.getProperties=Lg.prototype.D,Lg.prototype.set=Lg.prototype.set,Lg.prototype.setProperties=Lg.prototype.t,Lg.prototype.unset=Lg.prototype.I,Lg.prototype.changed=Lg.prototype.k,Lg.prototype.getRevision=Lg.prototype.v,Lg.prototype.on=Lg.prototype.r,Lg.prototype.once=Lg.prototype.A,Lg.prototype.un=Lg.prototype.u,Lg.prototype.unByKey=Lg.prototype.B,fp.prototype.getActive=fp.prototype.c,fp.prototype.setActive=fp.prototype.d,fp.prototype.get=fp.prototype.get,fp.prototype.getKeys=fp.prototype.C,fp.prototype.getProperties=fp.prototype.D,fp.prototype.set=fp.prototype.set,fp.prototype.setProperties=fp.prototype.t,fp.prototype.unset=fp.prototype.I,fp.prototype.changed=fp.prototype.k,fp.prototype.getRevision=fp.prototype.v,fp.prototype.on=fp.prototype.r,fp.prototype.once=fp.prototype.A,fp.prototype.un=fp.prototype.u,fp.prototype.unByKey=fp.prototype.B,dp.prototype.getActive=dp.prototype.c,dp.prototype.setActive=dp.prototype.d,dp.prototype.get=dp.prototype.get,dp.prototype.getKeys=dp.prototype.C,dp.prototype.getProperties=dp.prototype.D,dp.prototype.set=dp.prototype.set,dp.prototype.setProperties=dp.prototype.t,dp.prototype.unset=dp.prototype.I,dp.prototype.changed=dp.prototype.k,dp.prototype.getRevision=dp.prototype.v,dp.prototype.on=dp.prototype.r,dp.prototype.once=dp.prototype.A,dp.prototype.un=dp.prototype.u,dp.prototype.unByKey=dp.prototype.B,bp.prototype.getActive=bp.prototype.c,bp.prototype.setActive=bp.prototype.d,bp.prototype.get=bp.prototype.get,bp.prototype.getKeys=bp.prototype.C,bp.prototype.getProperties=bp.prototype.D,bp.prototype.set=bp.prototype.set,bp.prototype.setProperties=bp.prototype.t,bp.prototype.unset=bp.prototype.I,bp.prototype.changed=bp.prototype.k,bp.prototype.getRevision=bp.prototype.v,bp.prototype.on=bp.prototype.r,bp.prototype.once=bp.prototype.A,bp.prototype.un=bp.prototype.u,bp.prototype.unByKey=bp.prototype.B,Hg.prototype.getActive=Hg.prototype.c,Hg.prototype.setActive=Hg.prototype.d,Hg.prototype.get=Hg.prototype.get,Hg.prototype.getKeys=Hg.prototype.C,Hg.prototype.getProperties=Hg.prototype.D,Hg.prototype.set=Hg.prototype.set,Hg.prototype.setProperties=Hg.prototype.t,Hg.prototype.unset=Hg.prototype.I,Hg.prototype.changed=Hg.prototype.k,Hg.prototype.getRevision=Hg.prototype.v,Hg.prototype.on=Hg.prototype.r,Hg.prototype.once=Hg.prototype.A,Hg.prototype.un=Hg.prototype.u,Hg.prototype.unByKey=Hg.prototype.B,Kg.prototype.getActive=Kg.prototype.c,Kg.prototype.setActive=Kg.prototype.d,Kg.prototype.get=Kg.prototype.get,Kg.prototype.getKeys=Kg.prototype.C,Kg.prototype.getProperties=Kg.prototype.D,Kg.prototype.set=Kg.prototype.set,Kg.prototype.setProperties=Kg.prototype.t,Kg.prototype.unset=Kg.prototype.I,Kg.prototype.changed=Kg.prototype.k,Kg.prototype.getRevision=Kg.prototype.v,Kg.prototype.on=Kg.prototype.r,Kg.prototype.once=Kg.prototype.A,Kg.prototype.un=Kg.prototype.u,Kg.prototype.unByKey=Kg.prototype.B,Qs.prototype.get=Qs.prototype.get,Qs.prototype.getKeys=Qs.prototype.C,Qs.prototype.getProperties=Qs.prototype.D,Qs.prototype.set=Qs.prototype.set,Qs.prototype.setProperties=Qs.prototype.t,Qs.prototype.unset=Qs.prototype.I,Qs.prototype.changed=Qs.prototype.k,Qs.prototype.getRevision=Qs.prototype.v,Qs.prototype.on=Qs.prototype.r,Qs.prototype.once=Qs.prototype.A,Qs.prototype.un=Qs.prototype.u,Qs.prototype.unByKey=Qs.prototype.B,ea.prototype.getClosestPoint=ea.prototype.e,ea.prototype.getExtent=ea.prototype.G,ea.prototype.get=ea.prototype.get,ea.prototype.getKeys=ea.prototype.C,ea.prototype.getProperties=ea.prototype.D,ea.prototype.set=ea.prototype.set,ea.prototype.setProperties=ea.prototype.t,ea.prototype.unset=ea.prototype.I,ea.prototype.changed=ea.prototype.k,ea.prototype.getRevision=ea.prototype.v,ea.prototype.on=ea.prototype.r,ea.prototype.once=ea.prototype.A,ea.prototype.un=ea.prototype.u,ea.prototype.unByKey=ea.prototype.B,ll.prototype.getFirstCoordinate=ll.prototype.ob,ll.prototype.getLastCoordinate=ll.prototype.pb,ll.prototype.getLayout=ll.prototype.qb,ll.prototype.applyTransform=ll.prototype.qa,ll.prototype.translate=ll.prototype.Oa,ll.prototype.getClosestPoint=ll.prototype.e,ll.prototype.getExtent=ll.prototype.G,ll.prototype.get=ll.prototype.get,ll.prototype.getKeys=ll.prototype.C,ll.prototype.getProperties=ll.prototype.D,ll.prototype.set=ll.prototype.set,ll.prototype.setProperties=ll.prototype.t,ll.prototype.unset=ll.prototype.I,ll.prototype.changed=ll.prototype.k,ll.prototype.getRevision=ll.prototype.v,ll.prototype.on=ll.prototype.r,ll.prototype.once=ll.prototype.A,ll.prototype.un=ll.prototype.u,ll.prototype.unByKey=ll.prototype.B,ul.prototype.getClosestPoint=ul.prototype.e,ul.prototype.getExtent=ul.prototype.G,ul.prototype.get=ul.prototype.get,ul.prototype.getKeys=ul.prototype.C,ul.prototype.getProperties=ul.prototype.D,ul.prototype.set=ul.prototype.set,ul.prototype.setProperties=ul.prototype.t,ul.prototype.unset=ul.prototype.I,ul.prototype.changed=ul.prototype.k,ul.prototype.getRevision=ul.prototype.v,ul.prototype.on=ul.prototype.r,ul.prototype.once=ul.prototype.A,ul.prototype.un=ul.prototype.u,ul.prototype.unByKey=ul.prototype.B,xa.prototype.getFirstCoordinate=xa.prototype.ob,xa.prototype.getLastCoordinate=xa.prototype.pb,xa.prototype.getLayout=xa.prototype.qb,xa.prototype.applyTransform=xa.prototype.qa,xa.prototype.translate=xa.prototype.Oa,xa.prototype.getClosestPoint=xa.prototype.e,xa.prototype.getExtent=xa.prototype.G,xa.prototype.get=xa.prototype.get,xa.prototype.getKeys=xa.prototype.C,xa.prototype.getProperties=xa.prototype.D,xa.prototype.set=xa.prototype.set,xa.prototype.setProperties=xa.prototype.t,xa.prototype.unset=xa.prototype.I,xa.prototype.changed=xa.prototype.k,xa.prototype.getRevision=xa.prototype.v,xa.prototype.on=xa.prototype.r,xa.prototype.once=xa.prototype.A,xa.prototype.un=xa.prototype.u,xa.prototype.unByKey=xa.prototype.B,ml.prototype.getFirstCoordinate=ml.prototype.ob,ml.prototype.getLastCoordinate=ml.prototype.pb,ml.prototype.getLayout=ml.prototype.qb,ml.prototype.applyTransform=ml.prototype.qa,ml.prototype.translate=ml.prototype.Oa,ml.prototype.getClosestPoint=ml.prototype.e,ml.prototype.getExtent=ml.prototype.G,ml.prototype.get=ml.prototype.get,ml.prototype.getKeys=ml.prototype.C,ml.prototype.getProperties=ml.prototype.D,ml.prototype.set=ml.prototype.set,ml.prototype.setProperties=ml.prototype.t,ml.prototype.unset=ml.prototype.I,ml.prototype.changed=ml.prototype.k,ml.prototype.getRevision=ml.prototype.v,ml.prototype.on=ml.prototype.r,ml.prototype.once=ml.prototype.A,ml.prototype.un=ml.prototype.u,ml.prototype.unByKey=ml.prototype.B,xl.prototype.getFirstCoordinate=xl.prototype.ob,xl.prototype.getLastCoordinate=xl.prototype.pb,xl.prototype.getLayout=xl.prototype.qb,xl.prototype.applyTransform=xl.prototype.qa,xl.prototype.translate=xl.prototype.Oa,xl.prototype.getClosestPoint=xl.prototype.e,xl.prototype.getExtent=xl.prototype.G,xl.prototype.get=xl.prototype.get,xl.prototype.getKeys=xl.prototype.C,xl.prototype.getProperties=xl.prototype.D,xl.prototype.set=xl.prototype.set,xl.prototype.setProperties=xl.prototype.t,xl.prototype.unset=xl.prototype.I,xl.prototype.changed=xl.prototype.k,xl.prototype.getRevision=xl.prototype.v,xl.prototype.on=xl.prototype.r,xl.prototype.once=xl.prototype.A,xl.prototype.un=xl.prototype.u,xl.prototype.unByKey=xl.prototype.B,Ml.prototype.getFirstCoordinate=Ml.prototype.ob,Ml.prototype.getLastCoordinate=Ml.prototype.pb,Ml.prototype.getLayout=Ml.prototype.qb,Ml.prototype.applyTransform=Ml.prototype.qa,Ml.prototype.translate=Ml.prototype.Oa,Ml.prototype.getClosestPoint=Ml.prototype.e,Ml.prototype.getExtent=Ml.prototype.G,Ml.prototype.get=Ml.prototype.get,Ml.prototype.getKeys=Ml.prototype.C,Ml.prototype.getProperties=Ml.prototype.D,Ml.prototype.set=Ml.prototype.set,Ml.prototype.setProperties=Ml.prototype.t,Ml.prototype.unset=Ml.prototype.I,Ml.prototype.changed=Ml.prototype.k,Ml.prototype.getRevision=Ml.prototype.v,Ml.prototype.on=Ml.prototype.r,Ml.prototype.once=Ml.prototype.A,Ml.prototype.un=Ml.prototype.u,Ml.prototype.unByKey=Ml.prototype.B,Pl.prototype.getFirstCoordinate=Pl.prototype.ob,Pl.prototype.getLastCoordinate=Pl.prototype.pb,Pl.prototype.getLayout=Pl.prototype.qb,Pl.prototype.applyTransform=Pl.prototype.qa,Pl.prototype.translate=Pl.prototype.Oa,Pl.prototype.getClosestPoint=Pl.prototype.e,Pl.prototype.getExtent=Pl.prototype.G,Pl.prototype.get=Pl.prototype.get,Pl.prototype.getKeys=Pl.prototype.C,Pl.prototype.getProperties=Pl.prototype.D,Pl.prototype.set=Pl.prototype.set,Pl.prototype.setProperties=Pl.prototype.t,Pl.prototype.unset=Pl.prototype.I,Pl.prototype.changed=Pl.prototype.k,Pl.prototype.getRevision=Pl.prototype.v,Pl.prototype.on=Pl.prototype.r,Pl.prototype.once=Pl.prototype.A,Pl.prototype.un=Pl.prototype.u,Pl.prototype.unByKey=Pl.prototype.B,Ta.prototype.getFirstCoordinate=Ta.prototype.ob,Ta.prototype.getLastCoordinate=Ta.prototype.pb,Ta.prototype.getLayout=Ta.prototype.qb,Ta.prototype.applyTransform=Ta.prototype.qa,Ta.prototype.translate=Ta.prototype.Oa,Ta.prototype.getClosestPoint=Ta.prototype.e,Ta.prototype.getExtent=Ta.prototype.G,Ta.prototype.get=Ta.prototype.get,Ta.prototype.getKeys=Ta.prototype.C,Ta.prototype.getProperties=Ta.prototype.D,Ta.prototype.set=Ta.prototype.set,Ta.prototype.setProperties=Ta.prototype.t,Ta.prototype.unset=Ta.prototype.I,Ta.prototype.changed=Ta.prototype.k,Ta.prototype.getRevision=Ta.prototype.v,Ta.prototype.on=Ta.prototype.r,Ta.prototype.once=Ta.prototype.A,Ta.prototype.un=Ta.prototype.u,Ta.prototype.unByKey=Ta.prototype.B,Fa.prototype.getFirstCoordinate=Fa.prototype.ob,Fa.prototype.getLastCoordinate=Fa.prototype.pb,Fa.prototype.getLayout=Fa.prototype.qb,Fa.prototype.applyTransform=Fa.prototype.qa,Fa.prototype.translate=Fa.prototype.Oa,Fa.prototype.getClosestPoint=Fa.prototype.e,Fa.prototype.getExtent=Fa.prototype.G,Fa.prototype.get=Fa.prototype.get,Fa.prototype.getKeys=Fa.prototype.C,Fa.prototype.getProperties=Fa.prototype.D,Fa.prototype.set=Fa.prototype.set,Fa.prototype.setProperties=Fa.prototype.t,Fa.prototype.unset=Fa.prototype.I,Fa.prototype.changed=Fa.prototype.k,Fa.prototype.getRevision=Fa.prototype.v,Fa.prototype.on=Fa.prototype.r,Fa.prototype.once=Fa.prototype.A,Fa.prototype.un=Fa.prototype.u,Fa.prototype.unByKey=Fa.prototype.B,$f.prototype.readFeatures=$f.prototype.ja,Gf.prototype.readFeatures=Gf.prototype.ja,Gf.prototype.readFeatures=Gf.prototype.ja,Ji.prototype.get=Ji.prototype.get,Ji.prototype.getKeys=Ji.prototype.C,Ji.prototype.getProperties=Ji.prototype.D,Ji.prototype.set=Ji.prototype.set,Ji.prototype.setProperties=Ji.prototype.t,Ji.prototype.unset=Ji.prototype.I,Ji.prototype.changed=Ji.prototype.k,Ji.prototype.getRevision=Ji.prototype.v,Ji.prototype.on=Ji.prototype.r,Ji.prototype.once=Ji.prototype.A,Ji.prototype.un=Ji.prototype.u,Ji.prototype.unByKey=Ji.prototype.B,Rn.prototype.getMap=Rn.prototype.e,Rn.prototype.setMap=Rn.prototype.setMap,Rn.prototype.setTarget=Rn.prototype.c,Rn.prototype.get=Rn.prototype.get,Rn.prototype.getKeys=Rn.prototype.C,Rn.prototype.getProperties=Rn.prototype.D,Rn.prototype.set=Rn.prototype.set,Rn.prototype.setProperties=Rn.prototype.t,Rn.prototype.unset=Rn.prototype.I,Rn.prototype.changed=Rn.prototype.k,Rn.prototype.getRevision=Rn.prototype.v,Rn.prototype.on=Rn.prototype.r,Rn.prototype.once=Rn.prototype.A,Rn.prototype.un=Rn.prototype.u,Rn.prototype.unByKey=Rn.prototype.B,Gn.prototype.getMap=Gn.prototype.e,Gn.prototype.setMap=Gn.prototype.setMap,Gn.prototype.setTarget=Gn.prototype.c,Gn.prototype.get=Gn.prototype.get,Gn.prototype.getKeys=Gn.prototype.C,Gn.prototype.getProperties=Gn.prototype.D,Gn.prototype.set=Gn.prototype.set,Gn.prototype.setProperties=Gn.prototype.t,Gn.prototype.unset=Gn.prototype.I,Gn.prototype.changed=Gn.prototype.k,Gn.prototype.getRevision=Gn.prototype.v,Gn.prototype.on=Gn.prototype.r,Gn.prototype.once=Gn.prototype.A,Gn.prototype.un=Gn.prototype.u,Gn.prototype.unByKey=Gn.prototype.B,qn.prototype.getMap=qn.prototype.e,qn.prototype.setTarget=qn.prototype.c,qn.prototype.get=qn.prototype.get,qn.prototype.getKeys=qn.prototype.C,qn.prototype.getProperties=qn.prototype.D,qn.prototype.set=qn.prototype.set,qn.prototype.setProperties=qn.prototype.t,qn.prototype.unset=qn.prototype.I,qn.prototype.changed=qn.prototype.k,qn.prototype.getRevision=qn.prototype.v,qn.prototype.on=qn.prototype.r,qn.prototype.once=qn.prototype.A,qn.prototype.un=qn.prototype.u,qn.prototype.unByKey=qn.prototype.B,Oc.prototype.getMap=Oc.prototype.e,Oc.prototype.setTarget=Oc.prototype.c,Oc.prototype.get=Oc.prototype.get,Oc.prototype.getKeys=Oc.prototype.C,Oc.prototype.getProperties=Oc.prototype.D,Oc.prototype.set=Oc.prototype.set,Oc.prototype.setProperties=Oc.prototype.t,Oc.prototype.unset=Oc.prototype.I,Oc.prototype.changed=Oc.prototype.k,Oc.prototype.getRevision=Oc.prototype.v,Oc.prototype.on=Oc.prototype.r,Oc.prototype.once=Oc.prototype.A,Oc.prototype.un=Oc.prototype.u,Oc.prototype.unByKey=Oc.prototype.B,Nn.prototype.getMap=Nn.prototype.e,Nn.prototype.setMap=Nn.prototype.setMap,Nn.prototype.setTarget=Nn.prototype.c,Nn.prototype.get=Nn.prototype.get,Nn.prototype.getKeys=Nn.prototype.C,Nn.prototype.getProperties=Nn.prototype.D,Nn.prototype.set=Nn.prototype.set,Nn.prototype.setProperties=Nn.prototype.t,Nn.prototype.unset=Nn.prototype.I,Nn.prototype.changed=Nn.prototype.k,Nn.prototype.getRevision=Nn.prototype.v,Nn.prototype.on=Nn.prototype.r,Nn.prototype.once=Nn.prototype.A,Nn.prototype.un=Nn.prototype.u,Nn.prototype.unByKey=Nn.prototype.B,$c.prototype.getMap=$c.prototype.e,$c.prototype.setMap=$c.prototype.setMap,$c.prototype.setTarget=$c.prototype.c,$c.prototype.get=$c.prototype.get,$c.prototype.getKeys=$c.prototype.C,$c.prototype.getProperties=$c.prototype.D,$c.prototype.set=$c.prototype.set,$c.prototype.setProperties=$c.prototype.t,$c.prototype.unset=$c.prototype.I,$c.prototype.changed=$c.prototype.k,$c.prototype.getRevision=$c.prototype.v,$c.prototype.on=$c.prototype.r,$c.prototype.once=$c.prototype.A,$c.prototype.un=$c.prototype.u,$c.prototype.unByKey=$c.prototype.B,Dn.prototype.getMap=Dn.prototype.e,Dn.prototype.setMap=Dn.prototype.setMap,Dn.prototype.setTarget=Dn.prototype.c,Dn.prototype.get=Dn.prototype.get,Dn.prototype.getKeys=Dn.prototype.C,Dn.prototype.getProperties=Dn.prototype.D,Dn.prototype.set=Dn.prototype.set,Dn.prototype.setProperties=Dn.prototype.t,Dn.prototype.unset=Dn.prototype.I,Dn.prototype.changed=Dn.prototype.k,Dn.prototype.getRevision=Dn.prototype.v,Dn.prototype.on=Dn.prototype.r,Dn.prototype.once=Dn.prototype.A,Dn.prototype.un=Dn.prototype.u,Dn.prototype.unByKey=Dn.prototype.B,tf.prototype.getMap=tf.prototype.e,tf.prototype.setTarget=tf.prototype.c,tf.prototype.get=tf.prototype.get,tf.prototype.getKeys=tf.prototype.C,tf.prototype.getProperties=tf.prototype.D,tf.prototype.set=tf.prototype.set,tf.prototype.setProperties=tf.prototype.t,tf.prototype.unset=tf.prototype.I,tf.prototype.changed=tf.prototype.k,tf.prototype.getRevision=tf.prototype.v,tf.prototype.on=tf.prototype.r,tf.prototype.once=tf.prototype.A,tf.prototype.un=tf.prototype.u,tf.prototype.unByKey=tf.prototype.B,rf.prototype.getMap=rf.prototype.e,rf.prototype.setMap=rf.prototype.setMap,rf.prototype.setTarget=rf.prototype.c,rf.prototype.get=rf.prototype.get,rf.prototype.getKeys=rf.prototype.C,rf.prototype.getProperties=rf.prototype.D,rf.prototype.set=rf.prototype.set,rf.prototype.setProperties=rf.prototype.t,rf.prototype.unset=rf.prototype.I,rf.prototype.changed=rf.prototype.k,rf.prototype.getRevision=rf.prototype.v,rf.prototype.on=rf.prototype.r,rf.prototype.once=rf.prototype.A,rf.prototype.un=rf.prototype.u,rf.prototype.unByKey=rf.prototype.B,nm.ol});var map,extent,overlays=[],vectorSource=new ol.source.Vector,lastClick,popupOverlay,vectorLayer;$(document).ready(function(){initMap(),$("#closer").click(function(){toggleResults()}),map.on("singleclick",function(t){var e=t.coordinate;lastClick=e}),$(window).resize(function(){updateResultsPosition(),updateCloserPosition()})});var options={enableHighAccuracy:!0,timeout:5e3,maximumAge:0};$(document).ready(function(){boundings||receiveLocation(),$("#clearInput").click(function(){$("#search input[name=q]").val(""),$("#search input[name=q]").focus(),$("#results > .result").remove(),$("#results").addClass("hidden"),$.each(overlays,function(t,e){map.removeOverlay(e),$("#popup-closer").click()})}),$("#search input[name=q]").on("keydown",function(t){13==t.which&&$("#doSearch").click()}),$("#doSearch").click(function(){updateMapExtent();var t=$("#search input[name=q]").val();t=encodeURI(t),$("#clearInput").html('<img src="/img/ajax-loader.gif" />');var e="/"+t+"/"+encodeURI(extent[0])+"/"+encodeURI(extent[1])+"/"+encodeURI(extent[2])+"/"+encodeURI(extent[3]);$.getScript(e).fail(function(t,e,o){}),$("#search input[name=q]").blur()}),map.on("moveend",function(){var t=$("#search input[name=q]").val();if(""!==t){updateMapExtent();var t=$("#search input[name=q]").val();t=encodeURI(t),$("#clearInput").html('<img src="/img/ajax-loader.gif" />');var e="/"+t+"/"+encodeURI(extent[0])+"/"+encodeURI(extent[1])+"/"+encodeURI(extent[2])+"/"+encodeURI(extent[3]+"/"+!1+"/50");$.getScript(e)}},map)});
\ No newline at end of file
diff --git a/resources/assets/css/_ol.css b/resources/assets/css/_ol.css
deleted file mode 100644
index 28bb8f733dc6aef5f65cb5c53cbeaa5c18facb74..0000000000000000000000000000000000000000
--- a/resources/assets/css/_ol.css
+++ /dev/null
@@ -1,250 +0,0 @@
-
-.ol-mouse-position {
-  top: 8px;
-  right: 8px;
-  position: absolute;
-}
-
-.ol-scale-line {
-  background: #95b9e6;
-  background: rgba(0,60,136,0.3);
-  border-radius: 4px;
-  bottom: 8px;
-  left: 8px;
-  padding: 2px;
-  position: absolute;
-}
-.ol-scale-line-inner {
-  border: 1px solid #eeeeee;
-  border-top: none;
-  color: #eeeeee;
-  font-size: 10px;
-  text-align: center;
-  margin: 1px;
-  will-change: contents, width;
-}
-.ol-overlay-container {
-  will-change: left,right,top,bottom;
-}
-
-.ol-unsupported {
-  display: none;
-}
-.ol-viewport .ol-unselectable {
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-  -khtml-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-  -webkit-tap-highlight-color: rgba(0,0,0,0);
-}
-
-.ol-control {
-  position: absolute;
-  background-color: #eee;
-  background-color: rgba(255,255,255,0.4);
-  border-radius: 4px;
-  padding: 2px;
-}
-.ol-control:hover {
-  background-color: rgba(255,255,255,0.6);
-}
-.ol-zoom {
-  top: .5em;
-  left: .5em;
-}
-.ol-rotate {
-  top: .5em;
-  right: .5em;
-  transition: opacity .25s linear, visibility 0s linear;
-}
-.ol-rotate.ol-hidden {
-  opacity: 0;
-  visibility: hidden;
-  transition: opacity .25s linear, visibility 0s linear .25s;
-}
-.ol-zoom-extent {
-  top: 4.643em;
-  left: .5em;
-}
-.ol-full-screen {
-  right: .5em;
-  top: .5em;
-}
-@media print {
-  .ol-control {
-    display: none;
-  }
-}
-
-.ol-control button {
-  display: block;
-  margin: 1px;
-  padding: 0;
-  color: white;
-  font-size: 1.14em;
-  font-weight: bold;
-  text-decoration: none;
-  text-align: center;
-  height: 1.375em;
-  width: 1.375em;
-  line-height: .4em;
-  background-color: #7b98bc;
-  background-color: rgba(0,60,136,0.5);
-  border: none;
-  border-radius: 2px;
-}
-.ol-control button::-moz-focus-inner {
-  border: none;
-  padding: 0;
-}
-.ol-zoom-extent button {
-  line-height: 1.4em;
-}
-.ol-compass {
-  display: block;
-  font-weight: normal;
-  font-size: 1.2em;
-  will-change: transform;
-}
-.ol-touch .ol-control button {
-  font-size: 1.5em;
-}
-.ol-touch .ol-zoom-extent {
-  top: 5.5em;
-}
-.ol-control button:hover,
-.ol-control button:focus {
-  text-decoration: none;
-  background-color: #4c6079;
-  background-color: rgba(0,60,136,0.7);
-}
-.ol-zoom .ol-zoom-in {
-  border-radius: 2px 2px 0 0;
-}
-.ol-zoom .ol-zoom-out {
-  border-radius: 0 0 2px 2px;
-}
-
-
-.ol-attribution {
-  text-align: right;
-  bottom: .5em;
-  right: .5em;
-  max-width: calc(100% - 1.3em);
-}
-
-.ol-attribution ul {
-  margin: 0;
-  padding: 0 .5em;
-  font-size: .7rem;
-  line-height: 1.375em;
-  color: #000;
-  text-shadow: 0 0 2px #fff;
-}
-.ol-attribution li {
-  display: inline;
-  list-style: none;
-  line-height: inherit;
-}
-.ol-attribution li:not(:last-child):after {
-  content: " ";
-}
-.ol-attribution img {
-  max-height: 2em;
-  max-width: inherit;
-}
-.ol-attribution ul, .ol-attribution button {
-  display: inline-block;
-}
-.ol-attribution.ol-collapsed ul {
-  display: none;
-}
-.ol-attribution.ol-logo-only ul {
-  display: block;
-}
-.ol-attribution:not(.ol-collapsed) {
-  background: rgba(255,255,255,0.8);
-}
-.ol-attribution.ol-uncollapsible {
-  bottom: 0;
-  right: 0;
-  border-radius: 4px 0 0;
-  height: 1.1em;
-  line-height: 1em;
-}
-.ol-attribution.ol-logo-only {
-  background: transparent;
-  bottom: .4em;
-  height: 1.1em;
-  line-height: 1em;
-}
-.ol-attribution.ol-uncollapsible img {
-  margin-top: -.2em;
-  max-height: 1.6em;
-}
-.ol-attribution.ol-logo-only button,
-.ol-attribution.ol-uncollapsible button {
-  display: none;
-}
-
-.ol-zoomslider {
-  top: 4.5em;
-  left: .5em;
-  width: 24px;
-  height: 200px;
-}
-.ol-zoomslider-thumb {
-  position: absolute;
-  background: #7b98bc;
-  background: rgba(0,60,136,0.5);
-  border-radius: 2px;
-  cursor: pointer;
-  height: 10px;
-  width: 22px;
-  margin: 3px;
-}
-
-.ol-touch .ol-zoomslider {
-  top: 5.5em;
-  width: 2.052em;
-}
-.ol-touch .ol-zoomslider-thumb {
-  width: 1.8em;
-}
-
-.ol-overviewmap {
-  left: 0.5em;
-  bottom: 0.5em;
-}
-.ol-overviewmap.ol-uncollapsible {
-  bottom: 0;
-  left: 0;
-  border-radius: 0 4px 0 0;
-}
-.ol-overviewmap .ol-overviewmap-map,
-.ol-overviewmap button {
-  display: inline-block;
-}
-.ol-overviewmap .ol-overviewmap-map {
-  border: 1px solid #7b98bc;
-  height: 150px;
-  margin: 2px;
-  width: 150px;
-}
-.ol-overviewmap:not(.ol-collapsed) button{
-  bottom: 1px;
-  left: 2px;
-  position: absolute;
-}
-.ol-overviewmap.ol-collapsed .ol-overviewmap-map,
-.ol-overviewmap.ol-uncollapsible button {
-  display: none;
-}
-.ol-overviewmap:not(.ol-collapsed) {
-  background: rgba(255,255,255,0.8);
-}
-.ol-overviewmap-box {
-  border: 2px dotted rgba(0,60,136,0.7);
-}
diff --git a/resources/assets/css/ol.css b/resources/assets/css/ol.css
index ea50e7ebe3f9adab875f19b050005bc07e70e081..28bb8f733dc6aef5f65cb5c53cbeaa5c18facb74 100644
--- a/resources/assets/css/ol.css
+++ b/resources/assets/css/ol.css
@@ -1 +1,250 @@
-.ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}
\ No newline at end of file
+
+.ol-mouse-position {
+  top: 8px;
+  right: 8px;
+  position: absolute;
+}
+
+.ol-scale-line {
+  background: #95b9e6;
+  background: rgba(0,60,136,0.3);
+  border-radius: 4px;
+  bottom: 8px;
+  left: 8px;
+  padding: 2px;
+  position: absolute;
+}
+.ol-scale-line-inner {
+  border: 1px solid #eeeeee;
+  border-top: none;
+  color: #eeeeee;
+  font-size: 10px;
+  text-align: center;
+  margin: 1px;
+  will-change: contents, width;
+}
+.ol-overlay-container {
+  will-change: left,right,top,bottom;
+}
+
+.ol-unsupported {
+  display: none;
+}
+.ol-viewport .ol-unselectable {
+  -webkit-touch-callout: none;
+  -webkit-user-select: none;
+  -khtml-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  -webkit-tap-highlight-color: rgba(0,0,0,0);
+}
+
+.ol-control {
+  position: absolute;
+  background-color: #eee;
+  background-color: rgba(255,255,255,0.4);
+  border-radius: 4px;
+  padding: 2px;
+}
+.ol-control:hover {
+  background-color: rgba(255,255,255,0.6);
+}
+.ol-zoom {
+  top: .5em;
+  left: .5em;
+}
+.ol-rotate {
+  top: .5em;
+  right: .5em;
+  transition: opacity .25s linear, visibility 0s linear;
+}
+.ol-rotate.ol-hidden {
+  opacity: 0;
+  visibility: hidden;
+  transition: opacity .25s linear, visibility 0s linear .25s;
+}
+.ol-zoom-extent {
+  top: 4.643em;
+  left: .5em;
+}
+.ol-full-screen {
+  right: .5em;
+  top: .5em;
+}
+@media print {
+  .ol-control {
+    display: none;
+  }
+}
+
+.ol-control button {
+  display: block;
+  margin: 1px;
+  padding: 0;
+  color: white;
+  font-size: 1.14em;
+  font-weight: bold;
+  text-decoration: none;
+  text-align: center;
+  height: 1.375em;
+  width: 1.375em;
+  line-height: .4em;
+  background-color: #7b98bc;
+  background-color: rgba(0,60,136,0.5);
+  border: none;
+  border-radius: 2px;
+}
+.ol-control button::-moz-focus-inner {
+  border: none;
+  padding: 0;
+}
+.ol-zoom-extent button {
+  line-height: 1.4em;
+}
+.ol-compass {
+  display: block;
+  font-weight: normal;
+  font-size: 1.2em;
+  will-change: transform;
+}
+.ol-touch .ol-control button {
+  font-size: 1.5em;
+}
+.ol-touch .ol-zoom-extent {
+  top: 5.5em;
+}
+.ol-control button:hover,
+.ol-control button:focus {
+  text-decoration: none;
+  background-color: #4c6079;
+  background-color: rgba(0,60,136,0.7);
+}
+.ol-zoom .ol-zoom-in {
+  border-radius: 2px 2px 0 0;
+}
+.ol-zoom .ol-zoom-out {
+  border-radius: 0 0 2px 2px;
+}
+
+
+.ol-attribution {
+  text-align: right;
+  bottom: .5em;
+  right: .5em;
+  max-width: calc(100% - 1.3em);
+}
+
+.ol-attribution ul {
+  margin: 0;
+  padding: 0 .5em;
+  font-size: .7rem;
+  line-height: 1.375em;
+  color: #000;
+  text-shadow: 0 0 2px #fff;
+}
+.ol-attribution li {
+  display: inline;
+  list-style: none;
+  line-height: inherit;
+}
+.ol-attribution li:not(:last-child):after {
+  content: " ";
+}
+.ol-attribution img {
+  max-height: 2em;
+  max-width: inherit;
+}
+.ol-attribution ul, .ol-attribution button {
+  display: inline-block;
+}
+.ol-attribution.ol-collapsed ul {
+  display: none;
+}
+.ol-attribution.ol-logo-only ul {
+  display: block;
+}
+.ol-attribution:not(.ol-collapsed) {
+  background: rgba(255,255,255,0.8);
+}
+.ol-attribution.ol-uncollapsible {
+  bottom: 0;
+  right: 0;
+  border-radius: 4px 0 0;
+  height: 1.1em;
+  line-height: 1em;
+}
+.ol-attribution.ol-logo-only {
+  background: transparent;
+  bottom: .4em;
+  height: 1.1em;
+  line-height: 1em;
+}
+.ol-attribution.ol-uncollapsible img {
+  margin-top: -.2em;
+  max-height: 1.6em;
+}
+.ol-attribution.ol-logo-only button,
+.ol-attribution.ol-uncollapsible button {
+  display: none;
+}
+
+.ol-zoomslider {
+  top: 4.5em;
+  left: .5em;
+  width: 24px;
+  height: 200px;
+}
+.ol-zoomslider-thumb {
+  position: absolute;
+  background: #7b98bc;
+  background: rgba(0,60,136,0.5);
+  border-radius: 2px;
+  cursor: pointer;
+  height: 10px;
+  width: 22px;
+  margin: 3px;
+}
+
+.ol-touch .ol-zoomslider {
+  top: 5.5em;
+  width: 2.052em;
+}
+.ol-touch .ol-zoomslider-thumb {
+  width: 1.8em;
+}
+
+.ol-overviewmap {
+  left: 0.5em;
+  bottom: 0.5em;
+}
+.ol-overviewmap.ol-uncollapsible {
+  bottom: 0;
+  left: 0;
+  border-radius: 0 4px 0 0;
+}
+.ol-overviewmap .ol-overviewmap-map,
+.ol-overviewmap button {
+  display: inline-block;
+}
+.ol-overviewmap .ol-overviewmap-map {
+  border: 1px solid #7b98bc;
+  height: 150px;
+  margin: 2px;
+  width: 150px;
+}
+.ol-overviewmap:not(.ol-collapsed) button{
+  bottom: 1px;
+  left: 2px;
+  position: absolute;
+}
+.ol-overviewmap.ol-collapsed .ol-overviewmap-map,
+.ol-overviewmap.ol-uncollapsible button {
+  display: none;
+}
+.ol-overviewmap:not(.ol-collapsed) {
+  background: rgba(255,255,255,0.8);
+}
+.ol-overviewmap-box {
+  border: 2px dotted rgba(0,60,136,0.7);
+}
diff --git a/resources/assets/js/_ol.js b/resources/assets/js/_ol.js
deleted file mode 100644
index 6aa50b147a7104a310580d236622a9d3a052e57d..0000000000000000000000000000000000000000
--- a/resources/assets/js/_ol.js
+++ /dev/null
@@ -1,23937 +0,0 @@
-// OpenLayers 3. See http://openlayers.org/
-// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
-// Version: v3.5.0
-(function(root, factory) {
-    if (typeof define === "function" && define.amd) {
-        define([], factory);
-    } else if (typeof exports === "object") {
-        module.exports = factory();
-    } else {
-        root.ol = factory();
-    }
-}(this, function() {
-    var OPENLAYERS = {};
-    var l, aa = aa || {},
-        ba = this;
-
-    function m(a) {
-        return void 0 !== a
-    }
-
-    function v(a, c, d) {
-        a = a.split(".");
-        d = d || ba;
-        a[0] in d || !d.execScript || d.execScript("var " + a[0]);
-        for (var e; a.length && (e = a.shift());) !a.length && m(c) ? d[e] = c : d[e] ? d = d[e] : d = d[e] = {}
-    }
-
-    function ca() {}
-
-    function da(a) {
-        a.Ia = function() {
-            return a.jg ? a.jg : a.jg = new a
-        }
-    }
-
-    function ea(a) {
-        var c = typeof a;
-        if ("object" == c)
-            if (a) {
-                if (a instanceof Array) return "array";
-                if (a instanceof Object) return c;
-                var d = Object.prototype.toString.call(a);
-                if ("[object Window]" == d) return "object";
-                if ("[object Array]" == d || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array";
-                if ("[object Function]" == d || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function"
-            } else return "null";
-        else if ("function" == c && "undefined" == typeof a.call) return "object";
-        return c
-    }
-
-    function fa(a) {
-        return null === a
-    }
-
-    function ga(a) {
-        return "array" == ea(a)
-    }
-
-    function ha(a) {
-        var c = ea(a);
-        return "array" == c || "object" == c && "number" == typeof a.length
-    }
-
-    function ia(a) {
-        return "string" == typeof a
-    }
-
-    function ja(a) {
-        return "number" == typeof a
-    }
-
-    function ka(a) {
-        return "function" == ea(a)
-    }
-
-    function la(a) {
-        var c = typeof a;
-        return "object" == c && null != a || "function" == c
-    }
-
-    function ma(a) {
-        return a[na] || (a[na] = ++oa)
-    }
-    var na = "closure_uid_" + (1E9 * Math.random() >>> 0),
-        oa = 0;
-
-    function pa(a, c, d) {
-        return a.call.apply(a.bind, arguments)
-    }
-
-    function qa(a, c, d) {
-        if (!a) throw Error();
-        if (2 < arguments.length) {
-            var e = Array.prototype.slice.call(arguments, 2);
-            return function() {
-                var d = Array.prototype.slice.call(arguments);
-                Array.prototype.unshift.apply(d, e);
-                return a.apply(c, d)
-            }
-        }
-        return function() {
-            return a.apply(c, arguments)
-        }
-    }
-
-    function ra(a, c, d) {
-        ra = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? pa : qa;
-        return ra.apply(null, arguments)
-    }
-
-    function ta(a, c) {
-        var d = Array.prototype.slice.call(arguments, 1);
-        return function() {
-            var c = d.slice();
-            c.push.apply(c, arguments);
-            return a.apply(this, c)
-        }
-    }
-    var ua = Date.now || function() {
-        return +new Date
-    };
-
-    function w(a, c) {
-        function d() {}
-        d.prototype = c.prototype;
-        a.S = c.prototype;
-        a.prototype = new d;
-        a.prototype.constructor = a;
-        a.Mo = function(a, d, g) {
-            for (var h = Array(arguments.length - 2), k = 2; k < arguments.length; k++) h[k - 2] = arguments[k];
-            return c.prototype[d].apply(a, h)
-        }
-    };
-    var va, wa;
-
-    function xa(a) {
-        if (Error.captureStackTrace) Error.captureStackTrace(this, xa);
-        else {
-            var c = Error().stack;
-            c && (this.stack = c)
-        }
-        a && (this.message = String(a))
-    }
-    w(xa, Error);
-    xa.prototype.name = "CustomError";
-    var ya;
-
-    function Aa(a, c) {
-        var d = a.length - c.length;
-        return 0 <= d && a.indexOf(c, d) == d
-    }
-
-    function Ba(a, c) {
-        for (var d = a.split("%s"), e = "", f = Array.prototype.slice.call(arguments, 1); f.length && 1 < d.length;) e += d.shift() + f.shift();
-        return e + d.join("%s")
-    }
-    var Ca = String.prototype.trim ? function(a) {
-        return a.trim()
-    } : function(a) {
-        return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "")
-    };
-
-    function Da(a) {
-        if (!Ea.test(a)) return a; - 1 != a.indexOf("&") && (a = a.replace(Fa, "&amp;")); - 1 != a.indexOf("<") && (a = a.replace(Ha, "&lt;")); - 1 != a.indexOf(">") && (a = a.replace(Ia, "&gt;")); - 1 != a.indexOf('"') && (a = a.replace(Ja, "&quot;")); - 1 != a.indexOf("'") && (a = a.replace(Ka, "&#39;")); - 1 != a.indexOf("\x00") && (a = a.replace(La, "&#0;"));
-        return a
-    }
-    var Fa = /&/g,
-        Ha = /</g,
-        Ia = />/g,
-        Ja = /"/g,
-        Ka = /'/g,
-        La = /\x00/g,
-        Ea = /[\x00&<>"']/;
-
-    function Ma(a) {
-        a = m(void 0) ? a.toFixed(void 0) : String(a);
-        var c = a.indexOf("."); - 1 == c && (c = a.length);
-        c = Math.max(0, 2 - c);
-        return Array(c + 1).join("0") + a
-    }
-
-    function Na(a, c) {
-        for (var d = 0, e = Ca(String(a)).split("."), f = Ca(String(c)).split("."), g = Math.max(e.length, f.length), h = 0; 0 == d && h < g; h++) {
-            var k = e[h] || "",
-                n = f[h] || "",
-                p = RegExp("(\\d*)(\\D*)", "g"),
-                q = RegExp("(\\d*)(\\D*)", "g");
-            do {
-                var r = p.exec(k) || ["", "", ""],
-                    t = q.exec(n) || ["", "", ""];
-                if (0 == r[0].length && 0 == t[0].length) break;
-                d = Pa(0 == r[1].length ? 0 : parseInt(r[1], 10), 0 == t[1].length ? 0 : parseInt(t[1], 10)) || Pa(0 == r[2].length, 0 == t[2].length) || Pa(r[2], t[2])
-            } while (0 == d)
-        }
-        return d
-    }
-
-    function Pa(a, c) {
-        return a < c ? -1 : a > c ? 1 : 0
-    };
-    var Qa = Array.prototype;
-
-    function Ra(a, c) {
-        return Qa.indexOf.call(a, c, void 0)
-    }
-
-    function Sa(a, c, d) {
-        Qa.forEach.call(a, c, d)
-    }
-
-    function Ta(a, c) {
-        return Qa.filter.call(a, c, void 0)
-    }
-
-    function Ua(a, c, d) {
-        return Qa.map.call(a, c, d)
-    }
-
-    function Va(a, c) {
-        return Qa.some.call(a, c, void 0)
-    }
-
-    function Wa(a, c) {
-        var d = Xa(a, c, void 0);
-        return 0 > d ? null : ia(a) ? a.charAt(d) : a[d]
-    }
-
-    function Xa(a, c, d) {
-        for (var e = a.length, f = ia(a) ? a.split("") : a, g = 0; g < e; g++)
-            if (g in f && c.call(d, f[g], g, a)) return g;
-        return -1
-    }
-
-    function Ya(a, c) {
-        return 0 <= Ra(a, c)
-    }
-
-    function Za(a, c) {
-        var d = Ra(a, c),
-            e;
-        (e = 0 <= d) && Qa.splice.call(a, d, 1);
-        return e
-    }
-
-    function ab(a) {
-        return Qa.concat.apply(Qa, arguments)
-    }
-
-    function bb(a) {
-        var c = a.length;
-        if (0 < c) {
-            for (var d = Array(c), e = 0; e < c; e++) d[e] = a[e];
-            return d
-        }
-        return []
-    }
-
-    function db(a, c) {
-        for (var d = 1; d < arguments.length; d++) {
-            var e = arguments[d];
-            if (ha(e)) {
-                var f = a.length || 0,
-                    g = e.length || 0;
-                a.length = f + g;
-                for (var h = 0; h < g; h++) a[f + h] = e[h]
-            } else a.push(e)
-        }
-    }
-
-    function eb(a, c, d, e) {
-        Qa.splice.apply(a, fb(arguments, 1))
-    }
-
-    function fb(a, c, d) {
-        return 2 >= arguments.length ? Qa.slice.call(a, c) : Qa.slice.call(a, c, d)
-    }
-
-    function gb(a, c) {
-        a.sort(c || hb)
-    }
-
-    function ib(a, c) {
-        if (!ha(a) || !ha(c) || a.length != c.length) return !1;
-        for (var d = a.length, e = jb, f = 0; f < d; f++)
-            if (!e(a[f], c[f])) return !1;
-        return !0
-    }
-
-    function hb(a, c) {
-        return a > c ? 1 : a < c ? -1 : 0
-    }
-
-    function jb(a, c) {
-        return a === c
-    }
-
-    function kb(a) {
-        for (var c = [], d = 0; d < arguments.length; d++) {
-            var e = arguments[d];
-            if (ga(e))
-                for (var f = 0; f < e.length; f += 8192)
-                    for (var g = kb.apply(null, fb(e, f, f + 8192)), h = 0; h < g.length; h++) c.push(g[h]);
-            else c.push(e)
-        }
-        return c
-    };
-    var lb;
-    a: {
-        var mb = ba.navigator;
-        if (mb) {
-            var nb = mb.userAgent;
-            if (nb) {
-                lb = nb;
-                break a
-            }
-        }
-        lb = ""
-    }
-
-    function ob(a) {
-        return -1 != lb.indexOf(a)
-    };
-
-    function pb(a, c, d) {
-        for (var e in a) c.call(d, a[e], e, a)
-    }
-
-    function qb(a, c) {
-        for (var d in a)
-            if (c.call(void 0, a[d], d, a)) return !0;
-        return !1
-    }
-
-    function rb(a) {
-        var c = 0,
-            d;
-        for (d in a) c++;
-        return c
-    }
-
-    function sb(a) {
-        var c = [],
-            d = 0,
-            e;
-        for (e in a) c[d++] = a[e];
-        return c
-    }
-
-    function tb(a) {
-        var c = [],
-            d = 0,
-            e;
-        for (e in a) c[d++] = e;
-        return c
-    }
-
-    function ub(a, c) {
-        return c in a
-    }
-
-    function vb(a, c) {
-        for (var d in a)
-            if (a[d] == c) return !0;
-        return !1
-    }
-
-    function wb(a, c) {
-        for (var d in a)
-            if (c.call(void 0, a[d], d, a)) return d
-    }
-
-    function xb(a) {
-        for (var c in a) return !1;
-        return !0
-    }
-
-    function yb(a) {
-        for (var c in a) delete a[c]
-    }
-
-    function zb(a, c) {
-        c in a && delete a[c]
-    }
-
-    function Ab(a, c, d) {
-        return c in a ? a[c] : d
-    }
-
-    function Cb(a, c) {
-        var d = [];
-        return c in a ? a[c] : a[c] = d
-    }
-
-    function Db(a) {
-        var c = {},
-            d;
-        for (d in a) c[d] = a[d];
-        return c
-    }
-    var Eb = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
-
-    function Fb(a, c) {
-        for (var d, e, f = 1; f < arguments.length; f++) {
-            e = arguments[f];
-            for (d in e) a[d] = e[d];
-            for (var g = 0; g < Eb.length; g++) d = Eb[g], Object.prototype.hasOwnProperty.call(e, d) && (a[d] = e[d])
-        }
-    }
-
-    function Gb(a) {
-        var c = arguments.length;
-        if (1 == c && ga(arguments[0])) return Gb.apply(null, arguments[0]);
-        for (var d = {}, e = 0; e < c; e++) d[arguments[e]] = !0;
-        return d
-    };
-    var Hb = ob("Opera") || ob("OPR"),
-        Ib = ob("Trident") || ob("MSIE"),
-        Jb = ob("Gecko") && -1 == lb.toLowerCase().indexOf("webkit") && !(ob("Trident") || ob("MSIE")),
-        Kb = -1 != lb.toLowerCase().indexOf("webkit"),
-        Lb = ob("Macintosh"),
-        Mb = ob("Windows"),
-        Nb = ob("Linux") || ob("CrOS");
-
-    function Ob() {
-        var a = ba.document;
-        return a ? a.documentMode : void 0
-    }
-    var Pb = function() {
-            var a = "",
-                c;
-            if (Hb && ba.opera) return a = ba.opera.version, ka(a) ? a() : a;
-            Jb ? c = /rv\:([^\);]+)(\)|;)/ : Ib ? c = /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/ : Kb && (c = /WebKit\/(\S+)/);
-            c && (a = (a = c.exec(lb)) ? a[1] : "");
-            return Ib && (c = Ob(), c > parseFloat(a)) ? String(c) : a
-        }(),
-        Qb = {};
-
-    function Rb(a) {
-        return Qb[a] || (Qb[a] = 0 <= Na(Pb, a))
-    }
-    var Sb = ba.document,
-        Tb = Sb && Ib ? Ob() || ("CSS1Compat" == Sb.compatMode ? parseInt(Pb, 10) : 5) : void 0;
-    var Ub = Ib && !Rb("9.0") && "" !== Pb;
-
-    function Vb(a, c, d) {
-        return Math.min(Math.max(a, c), d)
-    }
-
-    function Wb(a, c) {
-        var d = a % c;
-        return 0 > d * c ? d + c : d
-    }
-
-    function Xb(a, c, d) {
-        return a + d * (c - a)
-    }
-
-    function Yb(a) {
-        return a * Math.PI / 180
-    };
-
-    function Zb(a) {
-        return function(c) {
-            if (m(c)) return [Vb(c[0], a[0], a[2]), Vb(c[1], a[1], a[3])]
-        }
-    }
-
-    function $b(a) {
-        return a
-    };
-
-    function ac(a, c, d) {
-        var e = a.length;
-        if (a[0] <= c) return 0;
-        if (!(c <= a[e - 1]))
-            if (0 < d)
-                for (d = 1; d < e; ++d) {
-                    if (a[d] < c) return d - 1
-                } else if (0 > d)
-                    for (d = 1; d < e; ++d) {
-                        if (a[d] <= c) return d
-                    } else
-                        for (d = 1; d < e; ++d) {
-                            if (a[d] == c) return d;
-                            if (a[d] < c) return a[d - 1] - c < c - a[d] ? d - 1 : d
-                        }
-        return e - 1
-    };
-
-    function bc(a) {
-        return function(c, d, e) {
-            if (m(c)) return c = ac(a, c, e), c = Vb(c + d, 0, a.length - 1), a[c]
-        }
-    }
-
-    function cc(a, c, d) {
-        return function(e, f, g) {
-            if (m(e)) return g = 0 < g ? 0 : 0 > g ? 1 : .5, e = Math.floor(Math.log(c / e) / Math.log(a) + g), f = Math.max(e + f, 0), m(d) && (f = Math.min(f, d)), c / Math.pow(a, f)
-        }
-    };
-
-    function dc(a) {
-        if (m(a)) return 0
-    }
-
-    function ec(a, c) {
-        if (m(a)) return a + c
-    }
-
-    function fc(a) {
-        var c = 2 * Math.PI / a;
-        return function(a, e) {
-            if (m(a)) return a = Math.floor((a + e) / c + .5) * c
-        }
-    }
-
-    function gc() {
-        var a = Yb(5);
-        return function(c, d) {
-            if (m(c)) return Math.abs(c + d) <= a ? 0 : c + d
-        }
-    };
-
-    function hc(a, c, d) {
-        this.center = a;
-        this.resolution = c;
-        this.rotation = d
-    };
-    var ic = !Ib || Ib && 9 <= Tb,
-        jc = !Ib || Ib && 9 <= Tb,
-        kc = Ib && !Rb("9");
-    !Kb || Rb("528");
-    Jb && Rb("1.9b") || Ib && Rb("8") || Hb && Rb("9.5") || Kb && Rb("528");
-    Jb && !Rb("8") || Ib && Rb("9");
-
-    function mc() {
-        0 != nc && (oc[ma(this)] = this);
-        this.U = this.U;
-        this.V = this.V
-    }
-    var nc = 0,
-        oc = {};
-    mc.prototype.U = !1;
-    mc.prototype.Yc = function() {
-        if (!this.U && (this.U = !0, this.O(), 0 != nc)) {
-            var a = ma(this);
-            delete oc[a]
-        }
-    };
-
-    function pc(a, c) {
-        var d = ta(qc, c);
-        a.U ? d.call(void 0) : (a.V || (a.V = []), a.V.push(m(void 0) ? ra(d, void 0) : d))
-    }
-    mc.prototype.O = function() {
-        if (this.V)
-            for (; this.V.length;) this.V.shift()()
-    };
-
-    function qc(a) {
-        a && "function" == typeof a.Yc && a.Yc()
-    };
-
-    function rc(a, c) {
-        this.type = a;
-        this.c = this.target = c;
-        this.f = !1;
-        this.rh = !0
-    }
-    rc.prototype.fb = function() {
-        this.f = !0
-    };
-    rc.prototype.preventDefault = function() {
-        this.rh = !1
-    };
-
-    function sc(a) {
-        a.fb()
-    }
-
-    function tc(a) {
-        a.preventDefault()
-    };
-    var uc = Ib ? "focusout" : "DOMFocusOut";
-
-    function vc(a) {
-        vc[" "](a);
-        return a
-    }
-    vc[" "] = ca;
-
-    function wc(a, c) {
-        rc.call(this, a ? a.type : "");
-        this.relatedTarget = this.c = this.target = null;
-        this.q = this.e = this.button = this.screenY = this.screenX = this.clientY = this.clientX = this.offsetY = this.offsetX = 0;
-        this.l = this.d = this.a = this.i = !1;
-        this.state = null;
-        this.g = !1;
-        this.b = null;
-        a && xc(this, a, c)
-    }
-    w(wc, rc);
-    var yc = [1, 4, 2];
-
-    function xc(a, c, d) {
-        a.b = c;
-        var e = a.type = c.type;
-        a.target = c.target || c.srcElement;
-        a.c = d;
-        if (d = c.relatedTarget) {
-            if (Jb) {
-                var f;
-                a: {
-                    try {
-                        vc(d.nodeName);
-                        f = !0;
-                        break a
-                    } catch (g) {}
-                    f = !1
-                }
-                f || (d = null)
-            }
-        } else "mouseover" == e ? d = c.fromElement : "mouseout" == e && (d = c.toElement);
-        a.relatedTarget = d;
-        Object.defineProperties ? Object.defineProperties(a, {
-            offsetX: {
-                configurable: !0,
-                enumerable: !0,
-                get: a.Zf,
-                set: a.bo
-            },
-            offsetY: {
-                configurable: !0,
-                enumerable: !0,
-                get: a.$f,
-                set: a.co
-            }
-        }) : (a.offsetX = a.Zf(), a.offsetY = a.$f());
-        a.clientX = void 0 !== c.clientX ? c.clientX : c.pageX;
-        a.clientY = void 0 !== c.clientY ? c.clientY : c.pageY;
-        a.screenX = c.screenX || 0;
-        a.screenY = c.screenY || 0;
-        a.button = c.button;
-        a.e = c.keyCode || 0;
-        a.q = c.charCode || ("keypress" == e ? c.keyCode : 0);
-        a.i = c.ctrlKey;
-        a.a = c.altKey;
-        a.d = c.shiftKey;
-        a.l = c.metaKey;
-        a.g = Lb ? c.metaKey : c.ctrlKey;
-        a.state = c.state;
-        c.defaultPrevented && a.preventDefault()
-    }
-
-    function zc(a) {
-        return (ic ? 0 == a.b.button : "click" == a.type ? !0 : !!(a.b.button & yc[0])) && !(Kb && Lb && a.i)
-    }
-    l = wc.prototype;
-    l.fb = function() {
-        wc.S.fb.call(this);
-        this.b.stopPropagation ? this.b.stopPropagation() : this.b.cancelBubble = !0
-    };
-    l.preventDefault = function() {
-        wc.S.preventDefault.call(this);
-        var a = this.b;
-        if (a.preventDefault) {} //a.preventDefault();
-        else if (a.returnValue = !1, kc) try {
-            if (a.ctrlKey || 112 <= a.keyCode && 123 >= a.keyCode) a.keyCode = -1
-        } catch (c) {}
-    };
-    l.Qi = function() {
-        return this.b
-    };
-    l.Zf = function() {
-        return Kb || void 0 !== this.b.offsetX ? this.b.offsetX : this.b.layerX
-    };
-    l.bo = function(a) {
-        Object.defineProperties(this, {
-            offsetX: {
-                writable: !0,
-                enumerable: !0,
-                configurable: !0,
-                value: a
-            }
-        })
-    };
-    l.$f = function() {
-        return Kb || void 0 !== this.b.offsetY ? this.b.offsetY : this.b.layerY
-    };
-    l.co = function(a) {
-        Object.defineProperties(this, {
-            offsetY: {
-                writable: !0,
-                enumerable: !0,
-                configurable: !0,
-                value: a
-            }
-        })
-    };
-    var Ac = "closure_listenable_" + (1E6 * Math.random() | 0);
-
-    function Bc(a) {
-        return !(!a || !a[Ac])
-    }
-    var Cc = 0;
-
-    function Dc(a, c, d, e, f) {
-        this.$b = a;
-        this.b = null;
-        this.src = c;
-        this.type = d;
-        this.Qc = !!e;
-        this.Sd = f;
-        this.key = ++Cc;
-        this.Hc = this.vd = !1
-    }
-
-    function Ec(a) {
-        a.Hc = !0;
-        a.$b = null;
-        a.b = null;
-        a.src = null;
-        a.Sd = null
-    };
-
-    function Fc(a) {
-        this.src = a;
-        this.b = {};
-        this.a = 0
-    }
-    Fc.prototype.add = function(a, c, d, e, f) {
-        var g = a.toString();
-        a = this.b[g];
-        a || (a = this.b[g] = [], this.a++);
-        var h = Gc(a, c, e, f); - 1 < h ? (c = a[h], d || (c.vd = !1)) : (c = new Dc(c, this.src, g, !!e, f), c.vd = d, a.push(c));
-        return c
-    };
-    Fc.prototype.remove = function(a, c, d, e) {
-        a = a.toString();
-        if (!(a in this.b)) return !1;
-        var f = this.b[a];
-        c = Gc(f, c, d, e);
-        return -1 < c ? (Ec(f[c]), Qa.splice.call(f, c, 1), 0 == f.length && (delete this.b[a], this.a--), !0) : !1
-    };
-
-    function Hc(a, c) {
-        var d = c.type;
-        if (!(d in a.b)) return !1;
-        var e = Za(a.b[d], c);
-        e && (Ec(c), 0 == a.b[d].length && (delete a.b[d], a.a--));
-        return e
-    }
-
-    function Jc(a, c, d, e, f) {
-        a = a.b[c.toString()];
-        c = -1;
-        a && (c = Gc(a, d, e, f));
-        return -1 < c ? a[c] : null
-    }
-
-    function Kc(a, c, d) {
-        var e = m(c),
-            f = e ? c.toString() : "",
-            g = m(d);
-        return qb(a.b, function(a) {
-            for (var c = 0; c < a.length; ++c)
-                if (!(e && a[c].type != f || g && a[c].Qc != d)) return !0;
-            return !1
-        })
-    }
-
-    function Gc(a, c, d, e) {
-        for (var f = 0; f < a.length; ++f) {
-            var g = a[f];
-            if (!g.Hc && g.$b == c && g.Qc == !!d && g.Sd == e) return f
-        }
-        return -1
-    };
-    var Lc = "closure_lm_" + (1E6 * Math.random() | 0),
-        Mc = {},
-        Nc = 0;
-
-    function x(a, c, d, e, f) {
-        if (ga(c)) {
-            for (var g = 0; g < c.length; g++) x(a, c[g], d, e, f);
-            return null
-        }
-        d = Oc(d);
-        return Bc(a) ? a.Ka(c, d, e, f) : Pc(a, c, d, !1, e, f)
-    }
-
-    function Pc(a, c, d, e, f, g) {
-        if (!c) throw Error("Invalid event type");
-        var h = !!f,
-            k = Qc(a);
-        k || (a[Lc] = k = new Fc(a));
-        d = k.add(c, d, e, f, g);
-        if (d.b) return d;
-        e = Rc();
-        d.b = e;
-        e.src = a;
-        e.$b = d;
-        a.addEventListener ? a.addEventListener(c.toString(), e, h) : a.attachEvent(Sc(c.toString()), e);
-        Nc++;
-        return d
-    }
-
-    function Rc() {
-        var a = Tc,
-            c = jc ? function(d) {
-                return a.call(c.src, c.$b, d)
-            } : function(d) {
-                d = a.call(c.src, c.$b, d);
-                if (!d) return d
-            };
-        return c
-    }
-
-    function Uc(a, c, d, e, f) {
-        if (ga(c)) {
-            for (var g = 0; g < c.length; g++) Uc(a, c[g], d, e, f);
-            return null
-        }
-        d = Oc(d);
-        return Bc(a) ? a.ab.add(String(c), d, !0, e, f) : Pc(a, c, d, !0, e, f)
-    }
-
-    function Vc(a, c, d, e, f) {
-        if (ga(c))
-            for (var g = 0; g < c.length; g++) Vc(a, c[g], d, e, f);
-        else d = Oc(d), Bc(a) ? a.wf(c, d, e, f) : a && (a = Qc(a)) && (c = Jc(a, c, d, !!e, f)) && Wc(c)
-    }
-
-    function Wc(a) {
-        if (ja(a) || !a || a.Hc) return !1;
-        var c = a.src;
-        if (Bc(c)) return Hc(c.ab, a);
-        var d = a.type,
-            e = a.b;
-        c.removeEventListener ? c.removeEventListener(d, e, a.Qc) : c.detachEvent && c.detachEvent(Sc(d), e);
-        Nc--;
-        (d = Qc(c)) ? (Hc(d, a), 0 == d.a && (d.src = null, c[Lc] = null)) : Ec(a);
-        return !0
-    }
-
-    function Sc(a) {
-        return a in Mc ? Mc[a] : Mc[a] = "on" + a
-    }
-
-    function Xc(a, c, d, e) {
-        var f = !0;
-        if (a = Qc(a))
-            if (c = a.b[c.toString()])
-                for (c = c.concat(), a = 0; a < c.length; a++) {
-                    var g = c[a];
-                    g && g.Qc == d && !g.Hc && (g = Yc(g, e), f = f && !1 !== g)
-                }
-        return f
-    }
-
-    function Yc(a, c) {
-        var d = a.$b,
-            e = a.Sd || a.src;
-        a.vd && Wc(a);
-        return d.call(e, c)
-    }
-
-    function Tc(a, c) {
-        if (a.Hc) return !0;
-        if (!jc) {
-            var d;
-            if (!(d = c)) a: {
-                d = ["window", "event"];
-                for (var e = ba, f; f = d.shift();)
-                    if (null != e[f]) e = e[f];
-                    else {
-                        d = null;
-                        break a
-                    }
-                d = e
-            }
-            f = d;
-            d = new wc(f, this);
-            e = !0;
-            if (!(0 > f.keyCode || void 0 != f.returnValue)) {
-                a: {
-                    var g = !1;
-                    if (0 == f.keyCode) try {
-                        f.keyCode = -1;
-                        break a
-                    } catch (h) {
-                        g = !0
-                    }
-                    if (g || void 0 == f.returnValue) f.returnValue = !0
-                }
-                f = [];
-                for (g = d.c; g; g = g.parentNode) f.push(g);
-                for (var g = a.type, k = f.length - 1; !d.f && 0 <= k; k--) {
-                    d.c = f[k];
-                    var n = Xc(f[k], g, !0, d),
-                        e = e && n
-                }
-                for (k = 0; !d.f && k < f.length; k++) d.c = f[k],
-                n = Xc(f[k], g, !1, d),
-                e = e && n
-            }
-            return e
-        }
-        return Yc(a, new wc(c, this))
-    }
-
-    function Qc(a) {
-        a = a[Lc];
-        return a instanceof Fc ? a : null
-    }
-    var Zc = "__closure_events_fn_" + (1E9 * Math.random() >>> 0);
-
-    function Oc(a) {
-        if (ka(a)) return a;
-        a[Zc] || (a[Zc] = function(c) {
-            return a.handleEvent(c)
-        });
-        return a[Zc]
-    };
-
-    function $c() {
-        mc.call(this);
-        this.ab = new Fc(this);
-        this.rc = this;
-        this.sa = null
-    }
-    w($c, mc);
-    $c.prototype[Ac] = !0;
-    l = $c.prototype;
-    l.addEventListener = function(a, c, d, e) {
-        x(this, a, c, d, e)
-    };
-    l.removeEventListener = function(a, c, d, e) {
-        Vc(this, a, c, d, e)
-    };
-    l.dispatchEvent = function(a) {
-        var c, d = this.sa;
-        if (d)
-            for (c = []; d; d = d.sa) c.push(d);
-        var d = this.rc,
-            e = a.type || a;
-        if (ia(a)) a = new rc(a, d);
-        else if (a instanceof rc) a.target = a.target || d;
-        else {
-            var f = a;
-            a = new rc(e, d);
-            Fb(a, f)
-        }
-        var f = !0,
-            g;
-        if (c)
-            for (var h = c.length - 1; !a.f && 0 <= h; h--) g = a.c = c[h], f = ad(g, e, !0, a) && f;
-        a.f || (g = a.c = d, f = ad(g, e, !0, a) && f, a.f || (f = ad(g, e, !1, a) && f));
-        if (c)
-            for (h = 0; !a.f && h < c.length; h++) g = a.c = c[h], f = ad(g, e, !1, a) && f;
-        return f
-    };
-    l.O = function() {
-        $c.S.O.call(this);
-        if (this.ab) {
-            var a = this.ab,
-                c = 0,
-                d;
-            for (d in a.b) {
-                for (var e = a.b[d], f = 0; f < e.length; f++) ++c, Ec(e[f]);
-                delete a.b[d];
-                a.a--
-            }
-        }
-        this.sa = null
-    };
-    l.Ka = function(a, c, d, e) {
-        return this.ab.add(String(a), c, !1, d, e)
-    };
-    l.wf = function(a, c, d, e) {
-        return this.ab.remove(String(a), c, d, e)
-    };
-
-    function ad(a, c, d, e) {
-        c = a.ab.b[String(c)];
-        if (!c) return !0;
-        c = c.concat();
-        for (var f = !0, g = 0; g < c.length; ++g) {
-            var h = c[g];
-            if (h && !h.Hc && h.Qc == d) {
-                var k = h.$b,
-                    n = h.Sd || h.src;
-                h.vd && Hc(a.ab, h);
-                f = !1 !== k.call(n, e) && f
-            }
-        }
-        return f && 0 != e.rh
-    }
-
-    function bd(a, c, d) {
-        return Kc(a.ab, m(c) ? String(c) : void 0, d)
-    };
-
-    function cd() {
-        $c.call(this);
-        this.b = 0
-    }
-    w(cd, $c);
-
-    function dd(a) {
-        Wc(a)
-    }
-    l = cd.prototype;
-    l.k = function() {
-        ++this.b;
-        this.dispatchEvent("change")
-    };
-    l.v = function() {
-        return this.b
-    };
-    l.r = function(a, c, d) {
-        return x(this, a, c, !1, d)
-    };
-    l.A = function(a, c, d) {
-        return Uc(this, a, c, !1, d)
-    };
-    l.u = function(a, c, d) {
-        Vc(this, a, c, !1, d)
-    };
-    l.B = dd;
-
-    function ed(a, c, d) {
-        rc.call(this, a);
-        this.key = c;
-        this.oldValue = d
-    }
-    w(ed, rc);
-
-    function fd(a) {
-        cd.call(this);
-        ma(this);
-        this.q = {};
-        m(a) && this.t(a)
-    }
-    w(fd, cd);
-    var gd = {};
-
-    function hd(a) {
-        return gd.hasOwnProperty(a) ? gd[a] : gd[a] = "change:" + a
-    }
-    l = fd.prototype;
-    l.get = function(a) {
-        var c;
-        this.q.hasOwnProperty(a) && (c = this.q[a]);
-        return c
-    };
-    l.C = function() {
-        return tb(this.q)
-    };
-    l.D = function() {
-        var a = {},
-            c;
-        for (c in this.q) a[c] = this.q[c];
-        return a
-    };
-
-    function id(a, c, d) {
-        var e;
-        e = hd(c);
-        a.dispatchEvent(new ed(e, c, d));
-        a.dispatchEvent(new ed("propertychange", c, d))
-    }
-    l.set = function(a, c) {
-        var d = this.q[a];
-        this.q[a] = c;
-        id(this, a, d)
-    };
-    l.t = function(a) {
-        for (var c in a) this.set(c, a[c])
-    };
-    l.I = function(a) {
-        if (a in this.q) {
-            var c = this.q[a];
-            delete this.q[a];
-            id(this, a, c)
-        }
-    };
-
-    function jd(a, c, d) {
-        m(d) || (d = [0, 0]);
-        d[0] = a[0] + 2 * c;
-        d[1] = a[1] + 2 * c;
-        return d
-    }
-
-    function kd(a, c, d) {
-        m(d) || (d = [0, 0]);
-        d[0] = a[0] * c + .5 | 0;
-        d[1] = a[1] * c + .5 | 0;
-        return d
-    }
-
-    function ld(a, c) {
-        if (ga(a)) return a;
-        m(c) ? (c[0] = a, c[1] = a) : c = [a, a];
-        return c
-    };
-
-    function md(a, c) {
-        a[0] += c[0];
-        a[1] += c[1];
-        return a
-    }
-
-    function nd(a, c) {
-        var d = a[0],
-            e = a[1],
-            f = c[0],
-            g = c[1],
-            h = f[0],
-            f = f[1],
-            k = g[0],
-            g = g[1],
-            n = k - h,
-            p = g - f,
-            d = 0 === n && 0 === p ? 0 : (n * (d - h) + p * (e - f)) / (n * n + p * p || 0);
-        0 >= d || (1 <= d ? (h = k, f = g) : (h += d * n, f += d * p));
-        return [h, f]
-    }
-
-    function od(a, c) {
-        var d = Wb(a + 180, 360) - 180,
-            e = Math.abs(Math.round(3600 * d));
-        return Math.floor(e / 3600) + "\u00b0 " + Math.floor(e / 60 % 60) + "\u2032 " + Math.floor(e % 60) + "\u2033 " + c.charAt(0 > d ? 1 : 0)
-    }
-
-    function pd(a, c, d) {
-        return m(a) ? c.replace("{x}", a[0].toFixed(d)).replace("{y}", a[1].toFixed(d)) : ""
-    }
-
-    function qd(a, c) {
-        for (var d = !0, e = a.length - 1; 0 <= e; --e)
-            if (a[e] != c[e]) {
-                d = !1;
-                break
-            }
-        return d
-    }
-
-    function rd(a, c) {
-        var d = Math.cos(c),
-            e = Math.sin(c),
-            f = a[1] * d + a[0] * e;
-        a[0] = a[0] * d - a[1] * e;
-        a[1] = f;
-        return a
-    }
-
-    function sd(a, c) {
-        var d = a[0] - c[0],
-            e = a[1] - c[1];
-        return d * d + e * e
-    }
-
-    function td(a, c) {
-        return sd(a, nd(a, c))
-    }
-
-    function ud(a, c) {
-        return pd(a, "{x}, {y}", c)
-    };
-
-    function vd(a) {
-        this.length = a.length || a;
-        for (var c = 0; c < this.length; c++) this[c] = a[c] || 0
-    }
-    vd.prototype.b = 4;
-    vd.prototype.set = function(a, c) {
-        c = c || 0;
-        for (var d = 0; d < a.length && c + d < this.length; d++) this[c + d] = a[d]
-    };
-    vd.prototype.toString = Array.prototype.join;
-    "undefined" == typeof Float32Array && (vd.BYTES_PER_ELEMENT = 4, vd.prototype.BYTES_PER_ELEMENT = vd.prototype.b, vd.prototype.set = vd.prototype.set, vd.prototype.toString = vd.prototype.toString, v("Float32Array", vd, void 0));
-
-    function wd(a) {
-        this.length = a.length || a;
-        for (var c = 0; c < this.length; c++) this[c] = a[c] || 0
-    }
-    wd.prototype.b = 8;
-    wd.prototype.set = function(a, c) {
-        c = c || 0;
-        for (var d = 0; d < a.length && c + d < this.length; d++) this[c + d] = a[d]
-    };
-    wd.prototype.toString = Array.prototype.join;
-    if ("undefined" == typeof Float64Array) {
-        try {
-            wd.BYTES_PER_ELEMENT = 8
-        } catch (xd) {}
-        wd.prototype.BYTES_PER_ELEMENT = wd.prototype.b;
-        wd.prototype.set = wd.prototype.set;
-        wd.prototype.toString = wd.prototype.toString;
-        v("Float64Array", wd, void 0)
-    };
-
-    function yd(a, c, d, e, f) {
-        a[0] = c;
-        a[1] = d;
-        a[2] = e;
-        a[3] = f
-    };
-
-    function zd() {
-        var a = Array(16);
-        Ad(a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
-        return a
-    }
-
-    function Bd() {
-        var a = Array(16);
-        Ad(a, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
-        return a
-    }
-
-    function Ad(a, c, d, e, f, g, h, k, n, p, q, r, t, u, A, z, D) {
-        a[0] = c;
-        a[1] = d;
-        a[2] = e;
-        a[3] = f;
-        a[4] = g;
-        a[5] = h;
-        a[6] = k;
-        a[7] = n;
-        a[8] = p;
-        a[9] = q;
-        a[10] = r;
-        a[11] = t;
-        a[12] = u;
-        a[13] = A;
-        a[14] = z;
-        a[15] = D
-    }
-
-    function Cd(a, c) {
-        a[0] = c[0];
-        a[1] = c[1];
-        a[2] = c[2];
-        a[3] = c[3];
-        a[4] = c[4];
-        a[5] = c[5];
-        a[6] = c[6];
-        a[7] = c[7];
-        a[8] = c[8];
-        a[9] = c[9];
-        a[10] = c[10];
-        a[11] = c[11];
-        a[12] = c[12];
-        a[13] = c[13];
-        a[14] = c[14];
-        a[15] = c[15]
-    }
-
-    function Dd(a) {
-        a[0] = 1;
-        a[1] = 0;
-        a[2] = 0;
-        a[3] = 0;
-        a[4] = 0;
-        a[5] = 1;
-        a[6] = 0;
-        a[7] = 0;
-        a[8] = 0;
-        a[9] = 0;
-        a[10] = 1;
-        a[11] = 0;
-        a[12] = 0;
-        a[13] = 0;
-        a[14] = 0;
-        a[15] = 1
-    }
-
-    function Ed(a, c, d) {
-        var e = a[0],
-            f = a[1],
-            g = a[2],
-            h = a[3],
-            k = a[4],
-            n = a[5],
-            p = a[6],
-            q = a[7],
-            r = a[8],
-            t = a[9],
-            u = a[10],
-            A = a[11],
-            z = a[12],
-            D = a[13],
-            B = a[14];
-        a = a[15];
-        var y = c[0],
-            K = c[1],
-            J = c[2],
-            H = c[3],
-            P = c[4],
-            sa = c[5],
-            Oa = c[6],
-            N = c[7],
-            za = c[8],
-            cb = c[9],
-            Ga = c[10],
-            Bb = c[11],
-            $a = c[12],
-            Ic = c[13],
-            lc = c[14];
-        c = c[15];
-        d[0] = e * y + k * K + r * J + z * H;
-        d[1] = f * y + n * K + t * J + D * H;
-        d[2] = g * y + p * K + u * J + B * H;
-        d[3] = h * y + q * K + A * J + a * H;
-        d[4] = e * P + k * sa + r * Oa + z * N;
-        d[5] = f * P + n * sa + t * Oa + D * N;
-        d[6] = g * P + p * sa + u * Oa + B * N;
-        d[7] = h * P + q * sa + A * Oa + a * N;
-        d[8] = e * za + k * cb + r * Ga + z * Bb;
-        d[9] = f * za + n * cb + t * Ga + D * Bb;
-        d[10] = g * za + p * cb + u * Ga + B * Bb;
-        d[11] = h * za + q * cb + A * Ga + a * Bb;
-        d[12] = e * $a + k * Ic + r * lc + z * c;
-        d[13] = f * $a + n * Ic + t * lc + D * c;
-        d[14] = g * $a + p * Ic + u * lc + B * c;
-        d[15] = h * $a + q * Ic + A * lc + a * c
-    }
-
-    function Fd(a, c) {
-        var d = a[0],
-            e = a[1],
-            f = a[2],
-            g = a[3],
-            h = a[4],
-            k = a[5],
-            n = a[6],
-            p = a[7],
-            q = a[8],
-            r = a[9],
-            t = a[10],
-            u = a[11],
-            A = a[12],
-            z = a[13],
-            D = a[14],
-            B = a[15],
-            y = d * k - e * h,
-            K = d * n - f * h,
-            J = d * p - g * h,
-            H = e * n - f * k,
-            P = e * p - g * k,
-            sa = f * p - g * n,
-            Oa = q * z - r * A,
-            N = q * D - t * A,
-            za = q * B - u * A,
-            cb = r * D - t * z,
-            Ga = r * B - u * z,
-            Bb = t * B - u * D,
-            $a = y * Bb - K * Ga + J * cb + H * za - P * N + sa * Oa;
-        0 != $a && ($a = 1 / $a, c[0] = (k * Bb - n * Ga + p * cb) * $a, c[1] = (-e * Bb + f * Ga - g * cb) * $a, c[2] = (z * sa - D * P + B * H) * $a, c[3] = (-r * sa + t * P - u * H) * $a, c[4] = (-h * Bb + n * za - p * N) * $a, c[5] = (d * Bb - f * za + g * N) * $a, c[6] = (-A * sa + D * J - B * K) * $a, c[7] = (q * sa - t * J + u * K) * $a, c[8] = (h * Ga - k * za + p * Oa) * $a, c[9] = (-d * Ga + e * za - g * Oa) * $a, c[10] = (A * P - z * J + B * y) * $a, c[11] = (-q * P + r * J - u * y) * $a, c[12] = (-h * cb + k * N - n * Oa) * $a, c[13] = (d * cb - e * N + f * Oa) * $a, c[14] = (-A * H + z * K - D * y) * $a, c[15] = (q * H - r * K + t * y) * $a)
-    }
-
-    function Gd(a, c, d) {
-        var e = a[1] * c + a[5] * d + 0 * a[9] + a[13],
-            f = a[2] * c + a[6] * d + 0 * a[10] + a[14],
-            g = a[3] * c + a[7] * d + 0 * a[11] + a[15];
-        a[12] = a[0] * c + a[4] * d + 0 * a[8] + a[12];
-        a[13] = e;
-        a[14] = f;
-        a[15] = g
-    }
-
-    function Hd(a, c, d) {
-        Ad(a, a[0] * c, a[1] * c, a[2] * c, a[3] * c, a[4] * d, a[5] * d, a[6] * d, a[7] * d, 1 * a[8], 1 * a[9], 1 * a[10], 1 * a[11], a[12], a[13], a[14], a[15])
-    }
-
-    function Id(a, c) {
-        var d = a[0],
-            e = a[1],
-            f = a[2],
-            g = a[3],
-            h = a[4],
-            k = a[5],
-            n = a[6],
-            p = a[7],
-            q = Math.cos(c),
-            r = Math.sin(c);
-        a[0] = d * q + h * r;
-        a[1] = e * q + k * r;
-        a[2] = f * q + n * r;
-        a[3] = g * q + p * r;
-        a[4] = d * -r + h * q;
-        a[5] = e * -r + k * q;
-        a[6] = f * -r + n * q;
-        a[7] = g * -r + p * q
-    }
-    new Float64Array(3);
-    new Float64Array(3);
-    new Float64Array(4);
-    new Float64Array(4);
-    new Float64Array(4);
-    new Float64Array(16);
-
-    function Jd(a) {
-        for (var c = Kd(), d = 0, e = a.length; d < e; ++d) Ld(c, a[d]);
-        return c
-    }
-
-    function Md(a, c, d) {
-        var e = Math.min.apply(null, a),
-            f = Math.min.apply(null, c);
-        a = Math.max.apply(null, a);
-        c = Math.max.apply(null, c);
-        return Nd(e, f, a, c, d)
-    }
-
-    function Od(a, c, d) {
-        return m(d) ? (d[0] = a[0] - c, d[1] = a[1] - c, d[2] = a[2] + c, d[3] = a[3] + c, d) : [a[0] - c, a[1] - c, a[2] + c, a[3] + c]
-    }
-
-    function Pd(a, c) {
-        return m(c) ? (c[0] = a[0], c[1] = a[1], c[2] = a[2], c[3] = a[3], c) : a.slice()
-    }
-
-    function Qd(a, c, d) {
-        c = c < a[0] ? a[0] - c : a[2] < c ? c - a[2] : 0;
-        a = d < a[1] ? a[1] - d : a[3] < d ? d - a[3] : 0;
-        return c * c + a * a
-    }
-
-    function Rd(a, c) {
-        return a[0] <= c[0] && c[2] <= a[2] && a[1] <= c[1] && c[3] <= a[3]
-    }
-
-    function Sd(a, c, d) {
-        return a[0] <= c && c <= a[2] && a[1] <= d && d <= a[3]
-    }
-
-    function Td(a, c) {
-        var d = a[1],
-            e = a[2],
-            f = a[3],
-            g = c[0],
-            h = c[1],
-            k = 0;
-        g < a[0] ? k = k | 16 : g > e && (k = k | 4);
-        h < d ? k |= 8 : h > f && (k |= 2);
-        0 === k && (k = 1);
-        return k
-    }
-
-    function Kd() {
-        return [Infinity, Infinity, -Infinity, -Infinity]
-    }
-
-    function Nd(a, c, d, e, f) {
-        return m(f) ? (f[0] = a, f[1] = c, f[2] = d, f[3] = e, f) : [a, c, d, e]
-    }
-
-    function Ud(a, c) {
-        var d = a[0],
-            e = a[1];
-        return Nd(d, e, d, e, c)
-    }
-
-    function Vd(a, c) {
-        return a[0] == c[0] && a[2] == c[2] && a[1] == c[1] && a[3] == c[3]
-    }
-
-    function Wd(a, c) {
-        c[0] < a[0] && (a[0] = c[0]);
-        c[2] > a[2] && (a[2] = c[2]);
-        c[1] < a[1] && (a[1] = c[1]);
-        c[3] > a[3] && (a[3] = c[3]);
-        return a
-    }
-
-    function Ld(a, c) {
-        c[0] < a[0] && (a[0] = c[0]);
-        c[0] > a[2] && (a[2] = c[0]);
-        c[1] < a[1] && (a[1] = c[1]);
-        c[1] > a[3] && (a[3] = c[1])
-    }
-
-    function Xd(a, c, d, e, f) {
-        for (; d < e; d += f) {
-            var g = a,
-                h = c[d],
-                k = c[d + 1];
-            g[0] = Math.min(g[0], h);
-            g[1] = Math.min(g[1], k);
-            g[2] = Math.max(g[2], h);
-            g[3] = Math.max(g[3], k)
-        }
-        return a
-    }
-
-    function Yd(a, c) {
-        var d;
-        return (d = c.call(void 0, Zd(a))) || (d = c.call(void 0, $d(a))) || (d = c.call(void 0, ae(a))) ? d : (d = c.call(void 0, be(a))) ? d : !1
-    }
-
-    function Zd(a) {
-        return [a[0], a[1]]
-    }
-
-    function $d(a) {
-        return [a[2], a[1]]
-    }
-
-    function ce(a) {
-        return [(a[0] + a[2]) / 2, (a[1] + a[3]) / 2]
-    }
-
-    function de(a, c) {
-        var d;
-        "bottom-left" === c ? d = Zd(a) : "bottom-right" === c ? d = $d(a) : "top-left" === c ? d = be(a) : "top-right" === c && (d = ae(a));
-        return d
-    }
-
-    function ee(a, c, d, e) {
-        var f = c * e[0] / 2;
-        e = c * e[1] / 2;
-        c = Math.cos(d);
-        d = Math.sin(d);
-        f = [-f, -f, f, f];
-        e = [-e, e, -e, e];
-        var g, h, k;
-        for (g = 0; 4 > g; ++g) h = f[g], k = e[g], f[g] = a[0] + h * c - k * d, e[g] = a[1] + h * d + k * c;
-        return Md(f, e, void 0)
-    }
-
-    function fe(a) {
-        return a[3] - a[1]
-    }
-
-    function ge(a, c, d) {
-        d = m(d) ? d : Kd();
-        he(a, c) && (d[0] = a[0] > c[0] ? a[0] : c[0], d[1] = a[1] > c[1] ? a[1] : c[1], d[2] = a[2] < c[2] ? a[2] : c[2], d[3] = a[3] < c[3] ? a[3] : c[3]);
-        return d
-    }
-
-    function be(a) {
-        return [a[0], a[3]]
-    }
-
-    function ae(a) {
-        return [a[2], a[3]]
-    }
-
-    function ie(a) {
-        return a[2] - a[0]
-    }
-
-    function he(a, c) {
-        return a[0] <= c[2] && a[2] >= c[0] && a[1] <= c[3] && a[3] >= c[1]
-    }
-
-    function je(a) {
-        return a[2] < a[0] || a[3] < a[1]
-    }
-
-    function ke(a, c) {
-        var d = (a[2] - a[0]) / 2 * (c - 1),
-            e = (a[3] - a[1]) / 2 * (c - 1);
-        a[0] -= d;
-        a[2] += d;
-        a[1] -= e;
-        a[3] += e
-    }
-
-    function le(a, c, d) {
-        a = [a[0], a[1], a[0], a[3], a[2], a[1], a[2], a[3]];
-        c(a, a, 2);
-        return Md([a[0], a[2], a[4], a[6]], [a[1], a[3], a[5], a[7]], d)
-    };
-    /*
-
-     Latitude/longitude spherical geodesy formulae taken from
-     http://www.movable-type.co.uk/scripts/latlong.html
-     Licensed under CC-BY-3.0.
-    */
-    function me(a) {
-        this.radius = a
-    }
-    me.prototype.a = function(a) {
-        for (var c = 0, d = a.length, e = a[d - 1][0], f = a[d - 1][1], g = 0; g < d; g++) var h = a[g][0],
-            k = a[g][1],
-            c = c + Yb(h - e) * (2 + Math.sin(Yb(f)) + Math.sin(Yb(k))),
-            e = h,
-            f = k;
-        return c * this.radius * this.radius / 2
-    };
-    me.prototype.b = function(a, c) {
-        var d = Yb(a[1]),
-            e = Yb(c[1]),
-            f = (e - d) / 2,
-            g = Yb(c[0] - a[0]) / 2,
-            d = Math.sin(f) * Math.sin(f) + Math.sin(g) * Math.sin(g) * Math.cos(d) * Math.cos(e);
-        return 2 * this.radius * Math.atan2(Math.sqrt(d), Math.sqrt(1 - d))
-    };
-    me.prototype.offset = function(a, c, d) {
-        var e = Yb(a[1]);
-        c /= this.radius;
-        var f = Math.asin(Math.sin(e) * Math.cos(c) + Math.cos(e) * Math.sin(c) * Math.cos(d));
-        return [180 * (Yb(a[0]) + Math.atan2(Math.sin(d) * Math.sin(c) * Math.cos(e), Math.cos(c) - Math.sin(e) * Math.sin(f))) / Math.PI, 180 * f / Math.PI]
-    };
-    var ne = new me(6370997);
-    var oe = {};
-    oe.degrees = 2 * Math.PI * ne.radius / 360;
-    oe.ft = .3048;
-    oe.m = 1;
-    oe["us-ft"] = 1200 / 3937;
-
-    function pe(a) {
-        this.b = a.code;
-        this.a = a.units;
-        this.f = m(a.extent) ? a.extent : null;
-        this.g = m(a.worldExtent) ? a.worldExtent : null;
-        this.d = m(a.axisOrientation) ? a.axisOrientation : "enu";
-        this.c = (this.e = m(a.global) ? a.global : !1) && null !== this.f;
-        this.q = m(a.getPointResolution) ? a.getPointResolution : this.rj;
-        this.i = null;
-        if ("function" == typeof proj4) {
-            var c = a.code,
-                d = proj4.defs(c);
-            if (m(d)) {
-                m(d.axis) && !m(a.axisOrientation) && (this.d = d.axis);
-                m(a.units) || (a = d.units, !m(a) && m(d.to_meter) && (a = d.to_meter.toString(), oe[a] = d.to_meter), this.a = a);
-                a = qe;
-                var e, f;
-                for (e in a) f = proj4.defs(e), m(f) && (a = re(e), f === d ? se([a, this]) : (f = proj4(e, c), te(a, this, f.forward, f.inverse)))
-            }
-        }
-    }
-    l = pe.prototype;
-    l.Ri = function() {
-        return this.b
-    };
-    l.G = function() {
-        return this.f
-    };
-    l.Ll = function() {
-        return this.a
-    };
-    l.Gd = function() {
-        return oe[this.a]
-    };
-    l.Cj = function() {
-        return this.g
-    };
-
-    function ue(a) {
-        return a.d
-    }
-    l.Ml = function() {
-        return this.e
-    };
-    l.Yn = function(a) {
-        this.c = (this.e = a) && null !== this.f
-    };
-    l.Nl = function(a) {
-        this.f = a;
-        this.c = this.e && null !== a
-    };
-    l.lo = function(a) {
-        this.g = a
-    };
-    l.Xn = function(a) {
-        this.q = a
-    };
-    l.rj = function(a, c) {
-        if ("degrees" == this.a) return a;
-        var d = ve(this, re("EPSG:4326")),
-            e = [c[0] - a / 2, c[1], c[0] + a / 2, c[1], c[0], c[1] - a / 2, c[0], c[1] + a / 2],
-            e = d(e, e, 2),
-            d = (ne.b(e.slice(0, 2), e.slice(2, 4)) + ne.b(e.slice(4, 6), e.slice(6, 8))) / 2,
-            e = this.Gd();
-        m(e) && (d /= e);
-        return d
-    };
-    l.getPointResolution = function(a, c) {
-        return this.q(a, c)
-    };
-    var qe = {},
-        we = {};
-
-    function se(a) {
-        xe(a);
-        Sa(a, function(c) {
-            Sa(a, function(a) {
-                c !== a && ye(c, a, ze)
-            })
-        })
-    }
-
-    function Ae() {
-        var a = Be,
-            c = Ce,
-            d = De;
-        Sa(Ee, function(e) {
-            Sa(a, function(a) {
-                ye(e, a, c);
-                ye(a, e, d)
-            })
-        })
-    }
-
-    function Fe(a) {
-        qe[a.b] = a;
-        ye(a, a, ze)
-    }
-
-    function xe(a) {
-        var c = [];
-        Sa(a, function(a) {
-            c.push(Fe(a))
-        })
-    }
-
-    function Ge(a) {
-        return null != a ? ia(a) ? re(a) : a : re("EPSG:3857")
-    }
-
-    function ye(a, c, d) {
-        a = a.b;
-        c = c.b;
-        a in we || (we[a] = {});
-        we[a][c] = d
-    }
-
-    function te(a, c, d, e) {
-        a = re(a);
-        c = re(c);
-        ye(a, c, He(d));
-        ye(c, a, He(e))
-    }
-
-    function He(a) {
-        return function(c, d, e) {
-            var f = c.length;
-            e = m(e) ? e : 2;
-            d = m(d) ? d : Array(f);
-            var g, h;
-            for (h = 0; h < f; h += e)
-                for (g = a([c[h], c[h + 1]]), d[h] = g[0], d[h + 1] = g[1], g = e - 1; 2 <= g; --g) d[h + g] = c[h + g];
-            return d
-        }
-    }
-
-    function re(a) {
-        var c;
-        a instanceof pe ? c = a : ia(a) ? (c = qe[a], !m(c) && "function" == typeof proj4 && m(proj4.defs(a)) && (c = new pe({
-            code: a
-        }), Fe(c))) : c = null;
-        return c
-    }
-
-    function Ie(a, c) {
-        return a === c ? !0 : a.b === c.b ? !0 : a.a != c.a ? !1 : ve(a, c) === ze
-    }
-
-    function Je(a, c) {
-        var d = re(a),
-            e = re(c);
-        return ve(d, e)
-    }
-
-    function ve(a, c) {
-        var d = a.b,
-            e = c.b,
-            f;
-        d in we && e in we[d] && (f = we[d][e]);
-        m(f) || (f = Ke);
-        return f
-    }
-
-    function Ke(a, c) {
-        if (m(c) && a !== c) {
-            for (var d = 0, e = a.length; d < e; ++d) c[d] = a[d];
-            a = c
-        }
-        return a
-    }
-
-    function ze(a, c) {
-        var d;
-        if (m(c)) {
-            d = 0;
-            for (var e = a.length; d < e; ++d) c[d] = a[d];
-            d = c
-        } else d = a.slice();
-        return d
-    }
-
-    function Le(a, c, d) {
-        return Je(c, d)(a, void 0, a.length)
-    }
-
-    function Me(a, c, d) {
-        c = Je(c, d);
-        return le(a, c)
-    };
-
-    function Ne(a) {
-        fd.call(this);
-        a = m(a) ? a : {};
-        this.c = [0, 0];
-        var c = {};
-        c.center = m(a.center) ? a.center : null;
-        this.e = Ge(a.projection);
-        var d, e, f, g = m(a.minZoom) ? a.minZoom : 0;
-        d = m(a.maxZoom) ? a.maxZoom : 28;
-        var h = m(a.zoomFactor) ? a.zoomFactor : 2;
-        if (m(a.resolutions)) d = a.resolutions, e = d[0], f = d[d.length - 1], d = bc(d);
-        else {
-            e = Ge(a.projection);
-            f = e.G();
-            var k = (null === f ? 360 * oe.degrees / oe[e.a] : Math.max(ie(f), fe(f))) / 256 / Math.pow(2, 0),
-                n = k / Math.pow(2, 28);
-            e = a.maxResolution;
-            m(e) ? g = 0 : e = k / Math.pow(h, g);
-            f = a.minResolution;
-            m(f) || (f = m(a.maxZoom) ? m(a.maxResolution) ? e / Math.pow(h, d) : k / Math.pow(h, d) : n);
-            d = g + Math.floor(Math.log(e / f) / Math.log(h));
-            f = e / Math.pow(h, d - g);
-            d = cc(h, e, d - g)
-        }
-        this.a = e;
-        this.g = f;
-        this.d = g;
-        g = m(a.extent) ? Zb(a.extent) : $b;
-        (m(a.enableRotation) ? a.enableRotation : 1) ? (e = a.constrainRotation, e = m(e) && !0 !== e ? !1 === e ? ec : ja(e) ? fc(e) : ec : gc()) : e = dc;
-        this.f = new hc(g, d, e);
-        m(a.resolution) ? c.resolution = a.resolution : m(a.zoom) && (c.resolution = this.constrainResolution(this.a, a.zoom - this.d));
-        c.rotation = m(a.rotation) ? a.rotation : 0;
-        this.t(c)
-    }
-    w(Ne, fd);
-    l = Ne.prototype;
-    l.xd = function(a) {
-        return this.f.center(a)
-    };
-    l.constrainResolution = function(a, c, d) {
-        return this.f.resolution(a, c || 0, d || 0)
-    };
-    l.constrainRotation = function(a, c) {
-        return this.f.rotation(a, c || 0)
-    };
-    l.Ca = function() {
-        return this.get("center")
-    };
-    l.Pc = function(a) {
-        var c = this.Ca(),
-            d = this.ya();
-        return [c[0] - d * a[0] / 2, c[1] - d * a[1] / 2, c[0] + d * a[0] / 2, c[1] + d * a[1] / 2]
-    };
-    l.dl = function() {
-        return this.e
-    };
-    l.ya = function() {
-        return this.get("resolution")
-    };
-
-    function Oe(a, c) {
-        return Math.max(ie(a) / c[0], fe(a) / c[1])
-    }
-
-    function Qe(a) {
-        var c = a.a,
-            d = Math.log(c / a.g) / Math.log(2);
-        return function(a) {
-            return c / Math.pow(2, a * d)
-        }
-    }
-    l.Da = function() {
-        return this.get("rotation")
-    };
-
-    function Re(a) {
-        var c = a.a,
-            d = Math.log(c / a.g) / Math.log(2);
-        return function(a) {
-            return Math.log(c / a) / Math.log(2) / d
-        }
-    }
-
-    function Se(a) {
-        var c = a.Ca(),
-            d = a.e,
-            e = a.ya();
-        a = a.Da();
-        return {
-            center: c.slice(),
-            projection: m(d) ? d : null,
-            resolution: e,
-            rotation: a
-        }
-    }
-    l.Ej = function() {
-        var a, c = this.ya();
-        if (m(c)) {
-            var d, e = 0;
-            do {
-                d = this.constrainResolution(this.a, e);
-                if (d == c) {
-                    a = e;
-                    break
-                }++e
-            } while (d > this.g)
-        }
-        return m(a) ? this.d + a : a
-    };
-    l.Me = function(a, c) {
-        if (!je(a)) {
-            this.Na(ce(a));
-            var d = Oe(a, c),
-                e = this.constrainResolution(d, 0, 0);
-            e < d && (e = this.constrainResolution(e, -1, 0));
-            this.tb(e)
-        }
-    };
-    l.Fi = function(a, c, d) {
-        var e = m(d) ? d : {};
-        d = m(e.padding) ? e.padding : [0, 0, 0, 0];
-        var f = m(e.constrainResolution) ? e.constrainResolution : !0,
-            g = m(e.nearest) ? e.nearest : !1,
-            h;
-        m(e.minResolution) ? h = e.minResolution : m(e.maxZoom) ? h = this.constrainResolution(this.a, e.maxZoom - this.d, 0) : h = 0;
-        var k = a.j,
-            n = this.Da(),
-            e = Math.cos(-n),
-            n = Math.sin(-n),
-            p = Infinity,
-            q = Infinity,
-            r = -Infinity,
-            t = -Infinity;
-        a = a.s;
-        for (var u = 0, A = k.length; u < A; u += a) var z = k[u] * e - k[u + 1] * n,
-            D = k[u] * n + k[u + 1] * e,
-            p = Math.min(p, z),
-            q = Math.min(q, D),
-            r = Math.max(r, z),
-            t = Math.max(t, D);
-        c = Oe([p, q, r, t], [c[0] - d[1] - d[3], c[1] - d[0] - d[2]]);
-        c = isNaN(c) ? h : Math.max(c, h);
-        f && (h = this.constrainResolution(c, 0, 0), !g && h < c && (h = this.constrainResolution(h, -1, 0)), c = h);
-        this.tb(c);
-        n = -n;
-        g = (p + r) / 2 + (d[1] - d[3]) / 2 * c;
-        d = (q + t) / 2 + (d[0] - d[2]) / 2 * c;
-        this.Na([g * e - d * n, d * e + g * n])
-    };
-    l.Ai = function(a, c, d) {
-        var e = this.Da(),
-            f = Math.cos(-e),
-            e = Math.sin(-e),
-            g = a[0] * f - a[1] * e;
-        a = a[1] * f + a[0] * e;
-        var h = this.ya(),
-            g = g + (c[0] / 2 - d[0]) * h;
-        a += (d[1] - c[1] / 2) * h;
-        e = -e;
-        this.Na([g * f - a * e, a * f + g * e])
-    };
-
-    function Te(a) {
-        return null != a.Ca() && m(a.ya())
-    }
-    l.rotate = function(a, c) {
-        if (m(c)) {
-            var d, e = this.Ca();
-            m(e) && (d = [e[0] - c[0], e[1] - c[1]], rd(d, a - this.Da()), md(d, c));
-            this.Na(d)
-        }
-        this.be(a)
-    };
-    l.Na = function(a) {
-        this.set("center", a)
-    };
-
-    function Ue(a, c) {
-        a.c[1] += c
-    }
-    l.tb = function(a) {
-        this.set("resolution", a)
-    };
-    l.be = function(a) {
-        this.set("rotation", a)
-    };
-    l.no = function(a) {
-        a = this.constrainResolution(this.a, a - this.d, 0);
-        this.tb(a)
-    };
-
-    function Ve(a) {
-        return 1 - Math.pow(1 - a, 3)
-    };
-
-    function We(a) {
-        return 3 * a * a - 2 * a * a * a
-    }
-
-    function Xe(a) {
-        return a
-    }
-
-    function Ye(a) {
-        return .5 > a ? We(2 * a) : 1 - We(2 * (a - .5))
-    };
-
-    function Ze(a) {
-        var c = a.source,
-            d = m(a.start) ? a.start : ua(),
-            e = c[0],
-            f = c[1],
-            g = m(a.duration) ? a.duration : 1E3,
-            h = m(a.easing) ? a.easing : We;
-        return function(a, c) {
-            if (c.time < d) return c.animate = !0, c.viewHints[0] += 1, !0;
-            if (c.time < d + g) {
-                var p = 1 - h((c.time - d) / g),
-                    q = e - c.viewState.center[0],
-                    r = f - c.viewState.center[1];
-                c.animate = !0;
-                c.viewState.center[0] += p * q;
-                c.viewState.center[1] += p * r;
-                c.viewHints[0] += 1;
-                return !0
-            }
-            return !1
-        }
-    }
-
-    function $e(a) {
-        var c = m(a.rotation) ? a.rotation : 0,
-            d = m(a.start) ? a.start : ua(),
-            e = m(a.duration) ? a.duration : 1E3,
-            f = m(a.easing) ? a.easing : We,
-            g = m(a.anchor) ? a.anchor : null;
-        return function(a, k) {
-            if (k.time < d) return k.animate = !0, k.viewHints[0] += 1, !0;
-            if (k.time < d + e) {
-                var n = 1 - f((k.time - d) / e),
-                    n = (c - k.viewState.rotation) * n;
-                k.animate = !0;
-                k.viewState.rotation += n;
-                if (null !== g) {
-                    var p = k.viewState.center;
-                    p[0] -= g[0];
-                    p[1] -= g[1];
-                    rd(p, n);
-                    md(p, g)
-                }
-                k.viewHints[0] += 1;
-                return !0
-            }
-            return !1
-        }
-    }
-
-    function af(a) {
-        var c = a.resolution,
-            d = m(a.start) ? a.start : ua(),
-            e = m(a.duration) ? a.duration : 1E3,
-            f = m(a.easing) ? a.easing : We;
-        return function(a, h) {
-            if (h.time < d) return h.animate = !0, h.viewHints[0] += 1, !0;
-            if (h.time < d + e) {
-                var k = 1 - f((h.time - d) / e),
-                    n = c - h.viewState.resolution;
-                h.animate = !0;
-                h.viewState.resolution += k * n;
-                h.viewHints[0] += 1;
-                return !0
-            }
-            return !1
-        }
-    };
-
-    function bf(a, c, d, e) {
-        return m(e) ? (e[0] = a, e[1] = c, e[2] = d, e) : [a, c, d]
-    }
-
-    function cf(a, c, d) {
-        return a + "/" + c + "/" + d
-    }
-
-    function df(a) {
-        var c = a[0],
-            d = Array(c),
-            e = 1 << c - 1,
-            f, g;
-        for (f = 0; f < c; ++f) g = 48, a[1] & e && (g += 1), a[2] & e && (g += 2), d[f] = String.fromCharCode(g), e >>= 1;
-        return d.join("")
-    }
-
-    function ef(a) {
-        return cf(a[0], a[1], a[2])
-    };
-
-    function ff(a, c, d, e) {
-        this.b = a;
-        this.d = c;
-        this.c = d;
-        this.a = e
-    }
-
-    function gf(a, c, d, e, f) {
-        return m(f) ? (f.b = a, f.d = c, f.c = d, f.a = e, f) : new ff(a, c, d, e)
-    }
-    ff.prototype.contains = function(a) {
-        return hf(this, a[1], a[2])
-    };
-
-    function hf(a, c, d) {
-        return a.b <= c && c <= a.d && a.c <= d && d <= a.a
-    }
-
-    function jf(a, c) {
-        return a.b == c.b && a.c == c.c && a.d == c.d && a.a == c.a
-    }
-
-    function kf(a) {
-        return a.d - a.b + 1
-    }
-
-    function lf(a, c) {
-        return a.b <= c.d && a.d >= c.b && a.c <= c.a && a.a >= c.c
-    };
-
-    function mf(a) {
-        this.a = a.html;
-        this.b = m(a.tileRanges) ? a.tileRanges : null
-    }
-    mf.prototype.c = function() {
-        return this.a
-    };
-
-    function nf(a, c, d) {
-        rc.call(this, a, d);
-        this.element = c
-    }
-    w(nf, rc);
-
-    function of(a) {
-        fd.call(this);
-        this.a = m(a) ? a : [];
-        pf(this)
-    }
-    w(of, fd);
-    l = of.prototype;
-    l.clear = function() {
-        for (; 0 < this.Ib();) this.pop()
-    };
-    l.af = function(a) {
-        var c, d;
-        c = 0;
-        for (d = a.length; c < d; ++c) this.push(a[c]);
-        return this
-    };
-    l.forEach = function(a, c) {
-        Sa(this.a, a, c)
-    };
-    l.Hk = function() {
-        return this.a
-    };
-    l.item = function(a) {
-        return this.a[a]
-    };
-    l.Ib = function() {
-        return this.get("length")
-    };
-    l.Td = function(a, c) {
-        eb(this.a, a, 0, c);
-        pf(this);
-        this.dispatchEvent(new nf("add", c, this))
-    };
-    l.pop = function() {
-        return this.tf(this.Ib() - 1)
-    };
-    l.push = function(a) {
-        var c = this.a.length;
-        this.Td(c, a);
-        return c
-    };
-    l.remove = function(a) {
-        var c = this.a,
-            d, e;
-        d = 0;
-        for (e = c.length; d < e; ++d)
-            if (c[d] === a) return this.tf(d)
-    };
-    l.tf = function(a) {
-        var c = this.a[a];
-        Qa.splice.call(this.a, a, 1);
-        pf(this);
-        this.dispatchEvent(new nf("remove", c, this));
-        return c
-    };
-    l.Un = function(a, c) {
-        var d = this.Ib();
-        if (a < d) d = this.a[a], this.a[a] = c, this.dispatchEvent(new nf("remove", d, this)), this.dispatchEvent(new nf("add", c, this));
-        else {
-            for (; d < a; ++d) this.Td(d, void 0);
-            this.Td(a, c)
-        }
-    };
-
-    function pf(a) {
-        a.set("length", a.a.length)
-    };
-    var qf = /^#(?:[0-9a-f]{3}){1,2}$/i,
-        rf = /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,
-        sf = /^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;
-
-    function tf(a) {
-        return ga(a) ? a : uf(a)
-    }
-
-    function vf(a) {
-        if (!ia(a)) {
-            var c = a[0];
-            c != (c | 0) && (c = c + .5 | 0);
-            var d = a[1];
-            d != (d | 0) && (d = d + .5 | 0);
-            var e = a[2];
-            e != (e | 0) && (e = e + .5 | 0);
-            a = "rgba(" + c + "," + d + "," + e + "," + a[3] + ")"
-        }
-        return a
-    }
-    var uf = function() {
-        var a = {},
-            c = 0;
-        return function(d) {
-            var e;
-            if (a.hasOwnProperty(d)) e = a[d];
-            else {
-                if (1024 <= c) {
-                    e = 0;
-                    for (var f in a) 0 === (e++ & 3) && (delete a[f], --c)
-                }
-                var g, h;
-                qf.exec(d) ? (h = 3 == d.length - 1 ? 1 : 2, e = parseInt(d.substr(1 + 0 * h, h), 16), f = parseInt(d.substr(1 + 1 * h, h), 16), g = parseInt(d.substr(1 + 2 * h, h), 16), 1 == h && (e = (e << 4) + e, f = (f << 4) + f, g = (g << 4) + g), e = [e, f, g, 1]) : (h = sf.exec(d)) ? (e = Number(h[1]), f = Number(h[2]), g = Number(h[3]), h = Number(h[4]), e = [e, f, g, h], e = wf(e, e)) : (h = rf.exec(d)) ? (e = Number(h[1]), f = Number(h[2]), g = Number(h[3]), e = [e, f, g, 1], e = wf(e, e)) : e = void 0;
-                a[d] = e;
-                ++c
-            }
-            return e
-        }
-    }();
-
-    function wf(a, c) {
-        var d = m(c) ? c : [];
-        d[0] = Vb(a[0] + .5 | 0, 0, 255);
-        d[1] = Vb(a[1] + .5 | 0, 0, 255);
-        d[2] = Vb(a[2] + .5 | 0, 0, 255);
-        d[3] = Vb(a[3], 0, 1);
-        return d
-    };
-
-    function xf() {
-        this.g = zd();
-        this.a = void 0;
-        this.b = zd();
-        this.d = void 0;
-        this.c = zd();
-        this.f = void 0;
-        this.e = zd();
-        this.q = void 0;
-        this.i = zd()
-    }
-
-    function yf(a, c, d, e, f) {
-        var g = !1;
-        m(c) && c !== a.a && (g = a.b, Dd(g), g[12] = c, g[13] = c, g[14] = c, g[15] = 1, a.a = c, g = !0);
-        if (m(d) && d !== a.d) {
-            g = a.c;
-            Dd(g);
-            g[0] = d;
-            g[5] = d;
-            g[10] = d;
-            g[15] = 1;
-            var h = -.5 * d + .5;
-            g[12] = h;
-            g[13] = h;
-            g[14] = h;
-            g[15] = 1;
-            a.d = d;
-            g = !0
-        }
-        m(e) && e !== a.f && (g = Math.cos(e), h = Math.sin(e), Ad(a.e, .213 + .787 * g - .213 * h, .213 - .213 * g + .143 * h, .213 - .213 * g - .787 * h, 0, .715 - .715 * g - .715 * h, .715 + .285 * g + .14 * h, .715 - .715 * g + .715 * h, 0, .072 - .072 * g + .928 * h, .072 - .072 * g - .283 * h, .072 + .928 * g + .072 * h, 0, 0, 0, 0, 1), a.f = e, g = !0);
-        m(f) && f !== a.q && (Ad(a.i, .213 + .787 * f, .213 - .213 * f, .213 - .213 * f, 0, .715 - .715 * f, .715 + .285 * f, .715 - .715 * f, 0, .072 - .072 * f, .072 - .072 * f, .072 + .928 * f, 0, 0, 0, 0, 1), a.q = f, g = !0);
-        g && (g = a.g, Dd(g), m(d) && Ed(g, a.c, g), m(c) && Ed(g, a.b, g), m(f) && Ed(g, a.i, g), m(e) && Ed(g, a.e, g));
-        return a.g
-    };
-    var zf = !Ib || Ib && 9 <= Tb;
-    !Jb && !Ib || Ib && Ib && 9 <= Tb || Jb && Rb("1.9.1");
-    Ib && Rb("9");
-    Gb("area base br col command embed hr img input keygen link meta param source track wbr".split(" "));
-
-    function Af(a, c) {
-        this.x = m(a) ? a : 0;
-        this.y = m(c) ? c : 0
-    }
-    l = Af.prototype;
-    l.clone = function() {
-        return new Af(this.x, this.y)
-    };
-    l.ceil = function() {
-        this.x = Math.ceil(this.x);
-        this.y = Math.ceil(this.y);
-        return this
-    };
-    l.floor = function() {
-        this.x = Math.floor(this.x);
-        this.y = Math.floor(this.y);
-        return this
-    };
-    l.round = function() {
-        this.x = Math.round(this.x);
-        this.y = Math.round(this.y);
-        return this
-    };
-    l.scale = function(a, c) {
-        var d = ja(c) ? c : a;
-        this.x *= a;
-        this.y *= d;
-        return this
-    };
-
-    function Bf(a, c) {
-        this.width = a;
-        this.height = c
-    }
-    l = Bf.prototype;
-    l.clone = function() {
-        return new Bf(this.width, this.height)
-    };
-    l.la = function() {
-        return !(this.width * this.height)
-    };
-    l.ceil = function() {
-        this.width = Math.ceil(this.width);
-        this.height = Math.ceil(this.height);
-        return this
-    };
-    l.floor = function() {
-        this.width = Math.floor(this.width);
-        this.height = Math.floor(this.height);
-        return this
-    };
-    l.round = function() {
-        this.width = Math.round(this.width);
-        this.height = Math.round(this.height);
-        return this
-    };
-    l.scale = function(a, c) {
-        var d = ja(c) ? c : a;
-        this.width *= a;
-        this.height *= d;
-        return this
-    };
-
-    function Cf(a) {
-        return a ? new Df(Ef(a)) : ya || (ya = new Df)
-    }
-
-    function Ff(a) {
-        var c = document;
-        return ia(a) ? c.getElementById(a) : a
-    }
-
-    function Gf(a, c) {
-        pb(c, function(c, e) {
-            "style" == e ? a.style.cssText = c : "class" == e ? a.className = c : "for" == e ? a.htmlFor = c : e in Hf ? a.setAttribute(Hf[e], c) : 0 == e.lastIndexOf("aria-", 0) || 0 == e.lastIndexOf("data-", 0) ? a.setAttribute(e, c) : a[e] = c
-        })
-    }
-    var Hf = {
-        cellpadding: "cellPadding",
-        cellspacing: "cellSpacing",
-        colspan: "colSpan",
-        frameborder: "frameBorder",
-        height: "height",
-        maxlength: "maxLength",
-        role: "role",
-        rowspan: "rowSpan",
-        type: "type",
-        usemap: "useMap",
-        valign: "vAlign",
-        width: "width"
-    };
-
-    function If(a) {
-        a = a.document.documentElement;
-        return new Bf(a.clientWidth, a.clientHeight)
-    }
-
-    function Jf(a, c, d) {
-        var e = arguments,
-            f = document,
-            g = e[0],
-            h = e[1];
-        if (!zf && h && (h.name || h.type)) {
-            g = ["<", g];
-            h.name && g.push(' name="', Da(h.name), '"');
-            if (h.type) {
-                g.push(' type="', Da(h.type), '"');
-                var k = {};
-                Fb(k, h);
-                delete k.type;
-                h = k
-            }
-            g.push(">");
-            g = g.join("")
-        }
-        g = f.createElement(g);
-        h && (ia(h) ? g.className = h : ga(h) ? g.className = h.join(" ") : Gf(g, h));
-        2 < e.length && Kf(f, g, e, 2);
-        return g
-    }
-
-    function Kf(a, c, d, e) {
-        function f(d) {
-            d && c.appendChild(ia(d) ? a.createTextNode(d) : d)
-        }
-        for (; e < d.length; e++) {
-            var g = d[e];
-            !ha(g) || la(g) && 0 < g.nodeType ? f(g) : Sa(Lf(g) ? bb(g) : g, f)
-        }
-    }
-
-    function Mf(a) {
-        return document.createElement(a)
-    }
-
-    function Nf(a, c) {
-        Kf(Ef(a), a, arguments, 1)
-    }
-
-    function Of(a) {
-        for (var c; c = a.firstChild;) a.removeChild(c)
-    }
-
-    function Pf(a, c, d) {
-        a.insertBefore(c, a.childNodes[d] || null)
-    }
-
-    function Qf(a) {
-        a && a.parentNode && a.parentNode.removeChild(a)
-    }
-
-    function Rf(a, c) {
-        var d = c.parentNode;
-        d && d.replaceChild(a, c)
-    }
-
-    function Sf(a) {
-        if (void 0 != a.firstElementChild) a = a.firstElementChild;
-        else
-            for (a = a.firstChild; a && 1 != a.nodeType;) a = a.nextSibling;
-        return a
-    }
-
-    function Tf(a, c) {
-        if (a.contains && 1 == c.nodeType) return a == c || a.contains(c);
-        if ("undefined" != typeof a.compareDocumentPosition) return a == c || Boolean(a.compareDocumentPosition(c) & 16);
-        for (; c && a != c;) c = c.parentNode;
-        return c == a
-    }
-
-    function Ef(a) {
-        return 9 == a.nodeType ? a : a.ownerDocument || a.document
-    }
-
-    function Lf(a) {
-        if (a && "number" == typeof a.length) {
-            if (la(a)) return "function" == typeof a.item || "string" == typeof a.item;
-            if (ka(a)) return "function" == typeof a.item
-        }
-        return !1
-    }
-
-    function Df(a) {
-        this.b = a || ba.document || document
-    }
-
-    function Uf() {
-        return !0
-    }
-
-    function Wf(a) {
-        var c = a.b;
-        a = Kb ? c.body || c.documentElement : c.documentElement;
-        c = c.parentWindow || c.defaultView;
-        return Ib && Rb("10") && c.pageYOffset != a.scrollTop ? new Af(a.scrollLeft, a.scrollTop) : new Af(c.pageXOffset || a.scrollLeft, c.pageYOffset || a.scrollTop)
-    }
-    Df.prototype.appendChild = function(a, c) {
-        a.appendChild(c)
-    };
-    Df.prototype.contains = Tf;
-
-    function Xf(a) {
-        if (a.classList) return a.classList;
-        a = a.className;
-        return ia(a) && a.match(/\S+/g) || []
-    }
-
-    function Yf(a, c) {
-        return a.classList ? a.classList.contains(c) : Ya(Xf(a), c)
-    }
-
-    function Zf(a, c) {
-        a.classList ? a.classList.add(c) : Yf(a, c) || (a.className += 0 < a.className.length ? " " + c : c)
-    }
-
-    function $f(a, c) {
-        a.classList ? a.classList.remove(c) : Yf(a, c) && (a.className = Ta(Xf(a), function(a) {
-            return a != c
-        }).join(" "))
-    }
-
-    function ag(a, c) {
-        Yf(a, c) ? $f(a, c) : Zf(a, c)
-    };
-
-    function bg(a, c, d, e) {
-        this.top = a;
-        this.right = c;
-        this.bottom = d;
-        this.left = e
-    }
-    l = bg.prototype;
-    l.clone = function() {
-        return new bg(this.top, this.right, this.bottom, this.left)
-    };
-    l.contains = function(a) {
-        return this && a ? a instanceof bg ? a.left >= this.left && a.right <= this.right && a.top >= this.top && a.bottom <= this.bottom : a.x >= this.left && a.x <= this.right && a.y >= this.top && a.y <= this.bottom : !1
-    };
-    l.ceil = function() {
-        this.top = Math.ceil(this.top);
-        this.right = Math.ceil(this.right);
-        this.bottom = Math.ceil(this.bottom);
-        this.left = Math.ceil(this.left);
-        return this
-    };
-    l.floor = function() {
-        this.top = Math.floor(this.top);
-        this.right = Math.floor(this.right);
-        this.bottom = Math.floor(this.bottom);
-        this.left = Math.floor(this.left);
-        return this
-    };
-    l.round = function() {
-        this.top = Math.round(this.top);
-        this.right = Math.round(this.right);
-        this.bottom = Math.round(this.bottom);
-        this.left = Math.round(this.left);
-        return this
-    };
-    l.scale = function(a, c) {
-        var d = ja(c) ? c : a;
-        this.left *= a;
-        this.right *= a;
-        this.top *= d;
-        this.bottom *= d;
-        return this
-    };
-
-    function cg(a, c, d, e) {
-        this.left = a;
-        this.top = c;
-        this.width = d;
-        this.height = e
-    }
-    l = cg.prototype;
-    l.clone = function() {
-        return new cg(this.left, this.top, this.width, this.height)
-    };
-    l.contains = function(a) {
-        return a instanceof cg ? this.left <= a.left && this.left + this.width >= a.left + a.width && this.top <= a.top && this.top + this.height >= a.top + a.height : a.x >= this.left && a.x <= this.left + this.width && a.y >= this.top && a.y <= this.top + this.height
-    };
-
-    function dg(a, c) {
-        var d = c.x < a.left ? a.left - c.x : Math.max(c.x - (a.left + a.width), 0),
-            e = c.y < a.top ? a.top - c.y : Math.max(c.y - (a.top + a.height), 0);
-        return d * d + e * e
-    }
-    l.distance = function(a) {
-        return Math.sqrt(dg(this, a))
-    };
-    l.ceil = function() {
-        this.left = Math.ceil(this.left);
-        this.top = Math.ceil(this.top);
-        this.width = Math.ceil(this.width);
-        this.height = Math.ceil(this.height);
-        return this
-    };
-    l.floor = function() {
-        this.left = Math.floor(this.left);
-        this.top = Math.floor(this.top);
-        this.width = Math.floor(this.width);
-        this.height = Math.floor(this.height);
-        return this
-    };
-    l.round = function() {
-        this.left = Math.round(this.left);
-        this.top = Math.round(this.top);
-        this.width = Math.round(this.width);
-        this.height = Math.round(this.height);
-        return this
-    };
-    l.scale = function(a, c) {
-        var d = ja(c) ? c : a;
-        this.left *= a;
-        this.width *= a;
-        this.top *= d;
-        this.height *= d;
-        return this
-    };
-
-    function eg(a, c) {
-        var d = Ef(a);
-        return d.defaultView && d.defaultView.getComputedStyle && (d = d.defaultView.getComputedStyle(a, null)) ? d[c] || d.getPropertyValue(c) || "" : ""
-    }
-
-    function fg(a, c) {
-        return eg(a, c) || (a.currentStyle ? a.currentStyle[c] : null) || a.style && a.style[c]
-    }
-
-    function gg(a, c, d) {
-        var e;
-        c instanceof Af ? (e = c.x, c = c.y) : (e = c, c = d);
-        a.style.left = hg(e);
-        a.style.top = hg(c)
-    }
-
-    function ig(a) {
-        var c;
-        try {
-            c = a.getBoundingClientRect()
-        } catch (d) {
-            return {
-                left: 0,
-                top: 0,
-                right: 0,
-                bottom: 0
-            }
-        }
-        Ib && a.ownerDocument.body && (a = a.ownerDocument, c.left -= a.documentElement.clientLeft + a.body.clientLeft, c.top -= a.documentElement.clientTop + a.body.clientTop);
-        return c
-    }
-
-    function jg(a) {
-        if (1 == a.nodeType) return a = ig(a), new Af(a.left, a.top);
-        var c = ka(a.Qi),
-            d = a;
-        a.targetTouches && a.targetTouches.length ? d = a.targetTouches[0] : c && a.b.targetTouches && a.b.targetTouches.length && (d = a.b.targetTouches[0]);
-        return new Af(d.clientX, d.clientY)
-    }
-
-    function hg(a) {
-        "number" == typeof a && (a = a + "px");
-        return a
-    }
-
-    function kg(a) {
-        var c = lg;
-        if ("none" != fg(a, "display")) return c(a);
-        var d = a.style,
-            e = d.display,
-            f = d.visibility,
-            g = d.position;
-        d.visibility = "hidden";
-        d.position = "absolute";
-        d.display = "inline";
-        a = c(a);
-        d.display = e;
-        d.position = g;
-        d.visibility = f;
-        return a
-    }
-
-    function lg(a) {
-        var c = a.offsetWidth,
-            d = a.offsetHeight,
-            e = Kb && !c && !d;
-        return m(c) && !e || !a.getBoundingClientRect ? new Bf(c, d) : (a = ig(a), new Bf(a.right - a.left, a.bottom - a.top))
-    }
-
-    function mg(a, c) {
-        a.style.display = c ? "" : "none"
-    }
-
-    function ng(a, c, d, e) {
-        if (/^\d+px?$/.test(c)) return parseInt(c, 10);
-        var f = a.style[d],
-            g = a.runtimeStyle[d];
-        a.runtimeStyle[d] = a.currentStyle[d];
-        a.style[d] = c;
-        c = a.style[e];
-        a.style[d] = f;
-        a.runtimeStyle[d] = g;
-        return c
-    }
-
-    function og(a, c) {
-        var d = a.currentStyle ? a.currentStyle[c] : null;
-        return d ? ng(a, d, "left", "pixelLeft") : 0
-    }
-
-    function pg(a, c) {
-        if (Ib) {
-            var d = og(a, c + "Left"),
-                e = og(a, c + "Right"),
-                f = og(a, c + "Top"),
-                g = og(a, c + "Bottom");
-            return new bg(f, e, g, d)
-        }
-        d = eg(a, c + "Left");
-        e = eg(a, c + "Right");
-        f = eg(a, c + "Top");
-        g = eg(a, c + "Bottom");
-        return new bg(parseFloat(f), parseFloat(e), parseFloat(g), parseFloat(d))
-    }
-    var qg = {
-        thin: 2,
-        medium: 4,
-        thick: 6
-    };
-
-    function rg(a, c) {
-        if ("none" == (a.currentStyle ? a.currentStyle[c + "Style"] : null)) return 0;
-        var d = a.currentStyle ? a.currentStyle[c + "Width"] : null;
-        return d in qg ? qg[d] : ng(a, d, "left", "pixelLeft")
-    }
-
-    function sg(a) {
-        if (Ib && !(Ib && 9 <= Tb)) {
-            var c = rg(a, "borderLeft"),
-                d = rg(a, "borderRight"),
-                e = rg(a, "borderTop");
-            a = rg(a, "borderBottom");
-            return new bg(e, d, a, c)
-        }
-        c = eg(a, "borderLeftWidth");
-        d = eg(a, "borderRightWidth");
-        e = eg(a, "borderTopWidth");
-        a = eg(a, "borderBottomWidth");
-        return new bg(parseFloat(e), parseFloat(d), parseFloat(a), parseFloat(c))
-    };
-
-    function tg(a, c, d) {
-        rc.call(this, a);
-        this.map = c;
-        this.frameState = m(d) ? d : null
-    }
-    w(tg, rc);
-
-    function ug(a) {
-        fd.call(this);
-        this.element = m(a.element) ? a.element : null;
-        this.a = this.L = null;
-        this.l = [];
-        this.render = m(a.render) ? a.render : ca;
-        m(a.target) && this.c(a.target)
-    }
-    w(ug, fd);
-    ug.prototype.O = function() {
-        Qf(this.element);
-        ug.S.O.call(this)
-    };
-    ug.prototype.e = function() {
-        return this.a
-    };
-    ug.prototype.setMap = function(a) {
-        null === this.a || Qf(this.element);
-        0 != this.l.length && (Sa(this.l, Wc), this.l.length = 0);
-        this.a = a;
-        null !== this.a && ((null === this.L ? a.p : this.L).appendChild(this.element), this.render !== ca && this.l.push(x(a, "postrender", this.render, !1, this)), a.render())
-    };
-    ug.prototype.c = function(a) {
-        this.L = Ff(a)
-    };
-
-    function vg() {
-        this.c = 0;
-        this.d = {};
-        this.a = this.b = null
-    }
-    l = vg.prototype;
-    l.clear = function() {
-        this.c = 0;
-        this.d = {};
-        this.a = this.b = null
-    };
-
-    function wg(a, c) {
-        return a.d.hasOwnProperty(c)
-    }
-    l.forEach = function(a, c) {
-        for (var d = this.b; null !== d;) a.call(c, d.qc, d.Wd, this), d = d.Wa
-    };
-    l.get = function(a) {
-        a = this.d[a];
-        if (a === this.a) return a.qc;
-        a === this.b ? (this.b = this.b.Wa, this.b.Nb = null) : (a.Wa.Nb = a.Nb, a.Nb.Wa = a.Wa);
-        a.Wa = null;
-        a.Nb = this.a;
-        this.a = this.a.Wa = a;
-        return a.qc
-    };
-    l.Tb = function() {
-        return this.c
-    };
-    l.C = function() {
-        var a = Array(this.c),
-            c = 0,
-            d;
-        for (d = this.a; null !== d; d = d.Nb) a[c++] = d.Wd;
-        return a
-    };
-    l.cb = function() {
-        var a = Array(this.c),
-            c = 0,
-            d;
-        for (d = this.a; null !== d; d = d.Nb) a[c++] = d.qc;
-        return a
-    };
-    l.pop = function() {
-        var a = this.b;
-        delete this.d[a.Wd];
-        null !== a.Wa && (a.Wa.Nb = null);
-        this.b = a.Wa;
-        null === this.b && (this.a = null);
-        --this.c;
-        return a.qc
-    };
-    l.set = function(a, c) {
-        var d = {
-            Wd: a,
-            Wa: null,
-            Nb: this.a,
-            qc: c
-        };
-        null === this.a ? this.b = d : this.a.Wa = d;
-        this.a = d;
-        this.d[a] = d;
-        ++this.c
-    };
-
-    function xg(a) {
-        vg.call(this);
-        this.e = m(a) ? a : 2048
-    }
-    w(xg, vg);
-
-    function yg(a) {
-        return a.Tb() > a.e
-    };
-
-    function zg(a, c) {
-        $c.call(this);
-        this.b = a;
-        this.state = c
-    }
-    w(zg, $c);
-
-    function Ag(a) {
-        a.dispatchEvent("change")
-    }
-    zg.prototype.gb = function() {
-        return ma(this).toString()
-    };
-    zg.prototype.f = function() {
-        return this.b
-    };
-
-    function Bg(a) {
-        fd.call(this);
-        this.f = re(a.projection);
-        this.d = m(a.attributions) ? a.attributions : null;
-        this.L = a.logo;
-        this.o = m(a.state) ? a.state : "ready";
-        this.H = a.wrapX
-    }
-    w(Bg, fd);
-    l = Bg.prototype;
-    l.ge = ca;
-    l.ea = function() {
-        return this.d
-    };
-    l.ca = function() {
-        return this.L
-    };
-    l.fa = function() {
-        return this.f
-    };
-    l.ga = function() {
-        return this.o
-    };
-
-    function Cg(a) {
-        return a.H
-    }
-
-    function Dg(a, c) {
-        a.o = c;
-        a.k()
-    };
-
-    function Eg(a) {
-        return function() {
-            return a
-        }
-    }
-    var Fg = Eg(!1),
-        Gg = Eg(!0),
-        Hg = Eg(null);
-
-    function Ig(a) {
-        return a
-    }
-
-    function Jg(a) {
-        var c;
-        c = c || 0;
-        return function() {
-            return a.apply(this, Array.prototype.slice.call(arguments, 0, c))
-        }
-    }
-
-    function Kg(a) {
-        var c = arguments,
-            d = c.length;
-        return function() {
-            for (var a, f = 0; f < d; f++) a = c[f].apply(this, arguments);
-            return a
-        }
-    }
-
-    function Lg(a) {
-        var c = arguments,
-            d = c.length;
-        return function() {
-            for (var a = 0; a < d; a++)
-                if (!c[a].apply(this, arguments)) return !1;
-            return !0
-        }
-    };
-
-    function Mg(a) {
-        this.minZoom = m(a.minZoom) ? a.minZoom : 0;
-        this.b = a.resolutions;
-        this.maxZoom = this.b.length - 1;
-        this.f = m(a.origin) ? a.origin : null;
-        this.i = null;
-        m(a.origins) && (this.i = a.origins);
-        this.c = null;
-        m(a.tileSizes) && (this.c = a.tileSizes);
-        this.g = m(a.tileSize) ? a.tileSize : null === this.c ? 256 : null;
-        this.a = [0, 0];
-        this.d = null;
-        m(a.widths) && (this.d = a.widths)
-    }
-    var Ng = [0, 0, 0];
-    l = Mg.prototype;
-    l.yb = function() {
-        return Ig
-    };
-    l.Ad = function(a, c, d, e, f) {
-        f = Og(this, a, f);
-        for (a = a[0] - 1; a >= this.minZoom;) {
-            if (c.call(d, a, Pg(this, f, a, e))) return !0;
-            --a
-        }
-        return !1
-    };
-    l.Fd = function() {
-        return this.maxZoom
-    };
-    l.Hd = function() {
-        return this.minZoom
-    };
-    l.Mb = function(a) {
-        return null === this.f ? this.i[a] : this.f
-    };
-    l.ma = function(a) {
-        return this.b[a]
-    };
-    l.ne = function() {
-        return this.b
-    };
-    l.Ld = function(a, c, d) {
-        return a[0] < this.maxZoom ? (d = Og(this, a, d), Pg(this, d, a[0] + 1, c)) : null
-    };
-
-    function Qg(a, c, d, e) {
-        Rg(a, c[0], c[1], d, !1, Ng);
-        var f = Ng[1],
-            g = Ng[2];
-        Rg(a, c[2], c[3], d, !0, Ng);
-        return gf(f, Ng[1], g, Ng[2], e)
-    }
-
-    function Pg(a, c, d, e) {
-        return Qg(a, c, a.ma(d), e)
-    }
-
-    function Sg(a, c) {
-        var d = a.Mb(c[0]),
-            e = a.ma(c[0]),
-            f = ld(a.na(c[0]), a.a);
-        return [d[0] + (c[1] + .5) * f[0] * e, d[1] + (c[2] + .5) * f[1] * e]
-    }
-
-    function Og(a, c, d) {
-        var e = a.Mb(c[0]),
-            f = a.ma(c[0]);
-        a = ld(a.na(c[0]), a.a);
-        var g = e[0] + c[1] * a[0] * f;
-        c = e[1] + c[2] * a[1] * f;
-        return Nd(g, c, g + a[0] * f, c + a[1] * f, d)
-    }
-    l.Wb = function(a, c, d) {
-        return Rg(this, a[0], a[1], c, !1, d)
-    };
-
-    function Rg(a, c, d, e, f, g) {
-        var h = Tg(a, e),
-            k = e / a.ma(h),
-            n = a.Mb(h);
-        a = ld(a.na(h), a.a);
-        c = k * (c - n[0]) / (e * a[0]);
-        d = k * (d - n[1]) / (e * a[1]);
-        f ? (c = Math.ceil(c) - 1, d = Math.ceil(d) - 1) : (c = Math.floor(c), d = Math.floor(d));
-        return bf(h, c, d, g)
-    }
-    l.cd = function(a, c, d) {
-        return Rg(this, a[0], a[1], this.ma(c), !1, d)
-    };
-
-    function Ug(a, c, d) {
-        d = Pg(a, Vg(d), c);
-        a = Wg(a, c);
-        m(a) || (a = kf(d));
-        return gf(0, a - 1, 0, d.a - d.c + 1, void 0)
-    }
-    l.na = function(a) {
-        return null === this.g ? this.c[a] : this.g
-    };
-
-    function Wg(a, c) {
-        if (null !== a.d) return a.d[c]
-    }
-
-    function Tg(a, c) {
-        var d = ac(a.b, c, 0);
-        return Vb(d, a.minZoom, a.maxZoom)
-    }
-
-    function Xg(a) {
-        var c = a.i;
-        if (null === c) {
-            for (var c = Vg(a), d = m(void 0) ? ld(void 0) : ld(256), e = m(void 0) ? void 0 : "bottom-left", f = Yg(c, void 0, ld(d)), g = Array(f.length), h = ie(c), k = f.length - 1; 0 <= k; --k) g[k] = h / d[0] / f[k];
-            c = new Mg({
-                origin: de(c, e),
-                resolutions: f,
-                tileSize: m(void 0) ? void 0 : 256,
-                widths: g
-            });
-            a.i = c
-        }
-        return c
-    }
-
-    function Yg(a, c, d) {
-        c = m(c) ? c : 42;
-        var e = fe(a);
-        a = ie(a);
-        d = m(d) ? d : ld(256);
-        d = Math.max(a / d[0], e / d[1]);
-        c += 1;
-        e = Array(c);
-        for (a = 0; a < c; ++a) e[a] = d / Math.pow(2, a);
-        return e
-    }
-
-    function Vg(a) {
-        a = re(a);
-        var c = a.G();
-        null === c && (a = 180 * oe.degrees / a.Gd(), c = Nd(-a, -a, a, a));
-        return c
-    };
-
-    function Zg(a) {
-        Bg.call(this, {
-            attributions: a.attributions,
-            extent: a.extent,
-            logo: a.logo,
-            projection: a.projection,
-            state: a.state,
-            wrapX: a.wrapX
-        });
-        this.X = m(a.opaque) ? a.opaque : !1;
-        this.ba = m(a.tilePixelRatio) ? a.tilePixelRatio : 1;
-        this.tileGrid = m(a.tileGrid) ? a.tileGrid : null;
-        this.a = new xg;
-        this.c = [0, 0]
-    }
-    w(Zg, Bg);
-
-    function $g(a, c, d, e) {
-        for (var f = !0, g, h, k = d.b; k <= d.d; ++k)
-            for (var n = d.c; n <= d.a; ++n) g = a.bb(c, k, n), h = !1, wg(a.a, g) && (g = a.a.get(g), (h = 2 === g.state) && (h = !1 !== e(g))), h || (f = !1);
-        return f
-    }
-    l = Zg.prototype;
-    l.Cd = function() {
-        return 0
-    };
-    l.bb = cf;
-    l.ua = function() {
-        return this.tileGrid
-    };
-
-    function ah(a, c) {
-        return null === a.tileGrid ? Xg(c) : a.tileGrid
-    }
-    l.Xb = function(a, c, d) {
-        c = ah(this, d);
-        return kd(ld(c.na(a), this.c), this.ba, this.c)
-    };
-    l.yf = ca;
-
-    function bh(a, c) {
-        rc.call(this, a);
-        this.tile = c
-    }
-    w(bh, rc);
-
-    function ch(a) {
-        a = m(a) ? a : {};
-        this.p = Mf("UL");
-        this.o = Mf("LI");
-        this.p.appendChild(this.o);
-        mg(this.o, !1);
-        this.d = m(a.collapsed) ? a.collapsed : !0;
-        this.g = m(a.collapsible) ? a.collapsible : !0;
-        this.g || (this.d = !1);
-        var c = m(a.className) ? a.className : "ol-attribution",
-            d = m(a.tipLabel) ? a.tipLabel : "Attributions",
-            e = m(a.collapseLabel) ? a.collapseLabel : "\u00bb";
-        this.H = ia(e) ? Jf("SPAN", {}, e) : e;
-        e = m(a.label) ? a.label : "i";
-        this.J = ia(e) ? Jf("SPAN", {}, e) : e;
-        d = Jf("BUTTON", {
-            type: "button",
-            title: d
-        }, this.g && !this.d ? this.H : this.J);
-        x(d, "click", this.gl, !1, this);
-        x(d, ["mouseout", uc], function() {
-            this.blur()
-        }, !1);
-        c = Jf("DIV", c + " ol-unselectable ol-control" + (this.d && this.g ? " ol-collapsed" : "") + (this.g ? "" : " ol-uncollapsible"), this.p, d);
-        ug.call(this, {
-            element: c,
-            render: m(a.render) ? a.render : dh,
-            target: a.target
-        });
-        this.n = !0;
-        this.i = {};
-        this.f = {};
-        this.N = {}
-    }
-    w(ch, ug);
-
-    function dh(a) {
-        a = a.frameState;
-        if (null === a) this.n && (mg(this.element, !1), this.n = !1);
-        else {
-            var c, d, e, f, g, h, k, n, p, q, r, t = a.layerStatesArray,
-                u = Db(a.attributions),
-                A = {},
-                z = a.viewState.projection;
-            d = 0;
-            for (c = t.length; d < c; d++)
-                if (h = t[d].layer.da(), null !== h && (q = ma(h).toString(), p = h.d, null !== p))
-                    for (e = 0, f = p.length; e < f; e++)
-                        if (k = p[e], n = ma(k).toString(), !(n in u)) {
-                            g = a.usedTiles[q];
-                            if (m(g)) {
-                                var D = ah(h, z);
-                                a: {
-                                    r = k;
-                                    var B = z;
-                                    if (null === r.b) r = !0;
-                                    else {
-                                        var y = void 0,
-                                            K = void 0,
-                                            J = void 0,
-                                            H = void 0;
-                                        for (H in g)
-                                            if (H in r.b)
-                                                for (var J = g[H],
-                                                        P, y = 0, K = r.b[H].length; y < K; ++y) {
-                                                    P = r.b[H][y];
-                                                    if (lf(P, J)) {
-                                                        r = !0;
-                                                        break a
-                                                    }
-                                                    var sa = Ug(D, parseInt(H, 10), B),
-                                                        Oa = kf(sa);
-                                                    if (J.b < sa.b || J.d > sa.d)
-                                                        if (lf(P, new ff(Wb(J.b, Oa), Wb(J.d, Oa), J.c, J.a)) || kf(J) > Oa && lf(P, sa)) {
-                                                            r = !0;
-                                                            break a
-                                                        }
-                                                }
-                                        r = !1
-                                    }
-                                }
-                            } else r = !1;
-                            r ? (n in A && delete A[n], u[n] = k) : A[n] = k
-                        }
-            c = [u, A];
-            d = c[0];
-            c = c[1];
-            for (var N in this.i) N in d ? (this.f[N] || (mg(this.i[N], !0), this.f[N] = !0), delete d[N]) : N in c ? (this.f[N] && (mg(this.i[N], !1), delete this.f[N]), delete c[N]) : (Qf(this.i[N]), delete this.i[N], delete this.f[N]);
-            for (N in d) e = Mf("LI"), e.innerHTML = d[N].a, this.p.appendChild(e), this.i[N] = e, this.f[N] = !0;
-            for (N in c) e = Mf("LI"), e.innerHTML = c[N].a, mg(e, !1), this.p.appendChild(e), this.i[N] = e;
-            N = !xb(this.f) || !xb(a.logos);
-            this.n != N && (mg(this.element, N), this.n = N);
-            N && xb(this.f) ? Zf(this.element, "ol-logo-only") : $f(this.element, "ol-logo-only");
-            var za;
-            a = a.logos;
-            N = this.N;
-            for (za in N) za in a || (Qf(N[za]), delete N[za]);
-            for (var cb in a) cb in N || (za = new Image, za.src = cb, d = a[cb], "" === d ? d = za : (d = Jf("A", {
-                href: d
-            }), d.appendChild(za)), this.o.appendChild(d), N[cb] = d);
-            mg(this.o, !xb(a))
-        }
-    }
-    l = ch.prototype;
-    l.gl = function(a) {
-        a.preventDefault();
-        eh(this)
-    };
-
-    function eh(a) {
-        ag(a.element, "ol-collapsed");
-        a.d ? Rf(a.H, a.J) : Rf(a.J, a.H);
-        a.d = !a.d
-    }
-    l.fl = function() {
-        return this.g
-    };
-    l.il = function(a) {
-        this.g !== a && (this.g = a, ag(this.element, "ol-uncollapsible"), !a && this.d && eh(this))
-    };
-    l.hl = function(a) {
-        this.g && this.d !== a && eh(this)
-    };
-    l.el = function() {
-        return this.d
-    };
-
-    function fh(a) {
-        a = m(a) ? a : {};
-        var c = m(a.className) ? a.className : "ol-rotate",
-            d = m(a.label) ? a.label : "\u21e7";
-        this.d = null;
-        ia(d) ? this.d = Jf("SPAN", "ol-compass", d) : (this.d = d, Zf(this.d, "ol-compass"));
-        d = Jf("BUTTON", {
-            "class": c + "-reset",
-            type: "button",
-            title: m(a.tipLabel) ? a.tipLabel : "Reset rotation"
-        }, this.d);
-        x(d, "click", fh.prototype.o, !1, this);
-        x(d, ["mouseout", uc], function() {
-            this.blur()
-        }, !1);
-        c = Jf("DIV", c + " ol-unselectable ol-control", d);
-        ug.call(this, {
-            element: c,
-            render: m(a.render) ? a.render : gh,
-            target: a.target
-        });
-        this.g = m(a.duration) ? a.duration : 250;
-        this.f = m(a.autoHide) ? a.autoHide : !0;
-        this.i = void 0;
-        this.f && Zf(this.element, "ol-hidden")
-    }
-    w(fh, ug);
-    fh.prototype.o = function(a) {
-        a.preventDefault();
-        a = this.a;
-        var c = a.R();
-        if (null !== c) {
-            for (var d = c.Da(); d < -Math.PI;) d += 2 * Math.PI;
-            for (; d > Math.PI;) d -= 2 * Math.PI;
-            m(d) && (0 < this.g && a.Ha($e({
-                rotation: d,
-                duration: this.g,
-                easing: Ve
-            })), c.be(0))
-        }
-    };
-
-    function gh(a) {
-        a = a.frameState;
-        if (null !== a) {
-            a = a.viewState.rotation;
-            if (a != this.i) {
-                var c = "rotate(" + 180 * a / Math.PI + "deg)";
-                if (this.f) {
-                    var d = this.element;
-                    0 === a ? Zf(d, "ol-hidden") : $f(d, "ol-hidden")
-                }
-                this.d.style.msTransform = c;
-                this.d.style.webkitTransform = c;
-                this.d.style.transform = c
-            }
-            this.i = a
-        }
-    };
-
-    function hh(a) {
-        a = m(a) ? a : {};
-        var c = m(a.className) ? a.className : "ol-zoom",
-            d = m(a.delta) ? a.delta : 1,
-            e = m(a.zoomOutLabel) ? a.zoomOutLabel : "\u2212",
-            f = m(a.zoomOutTipLabel) ? a.zoomOutTipLabel : "Zoom out",
-            g = Jf("BUTTON", {
-                "class": c + "-in",
-                type: "button",
-                title: m(a.zoomInTipLabel) ? a.zoomInTipLabel : "Zoom in"
-            }, m(a.zoomInLabel) ? a.zoomInLabel : "+");
-        x(g, "click", ta(hh.prototype.f, d), !1, this);
-        x(g, ["mouseout", uc], function() {
-            this.blur()
-        }, !1);
-        e = Jf("BUTTON", {
-            "class": c + "-out",
-            type: "button",
-            title: f
-        }, e);
-        x(e, "click", ta(hh.prototype.f, -d), !1, this);
-        x(e, ["mouseout", uc], function() {
-            this.blur()
-        }, !1);
-        c = Jf("DIV", c + " ol-unselectable ol-control", g, e);
-        ug.call(this, {
-            element: c,
-            target: a.target
-        });
-        this.d = m(a.duration) ? a.duration : 250
-    }
-    w(hh, ug);
-    hh.prototype.f = function(a, c) {
-        c.preventDefault();
-        var d = this.a,
-            e = d.R();
-        if (null !== e) {
-            var f = e.ya();
-            m(f) && (0 < this.d && d.Ha(af({
-                resolution: f,
-                duration: this.d,
-                easing: Ve
-            })), d = e.constrainResolution(f, a), e.tb(d))
-        }
-    };
-
-    function ih(a) {
-        a = m(a) ? a : {};
-        var c = new of;
-        (m(a.zoom) ? a.zoom : 1) && c.push(new hh(a.zoomOptions));
-        (m(a.rotate) ? a.rotate : 1) && c.push(new fh(a.rotateOptions));
-        (m(a.attribution) ? a.attribution : 1) && c.push(new ch(a.attributionOptions));
-        return c
-    };
-    var jh = Kb ? "webkitfullscreenchange" : Jb ? "mozfullscreenchange" : Ib ? "MSFullscreenChange" : "fullscreenchange";
-
-    function kh() {
-        var a = Cf().b,
-            c = a.body;
-        return !!(c.webkitRequestFullscreen || c.mozRequestFullScreen && a.mozFullScreenEnabled || c.msRequestFullscreen && a.msFullscreenEnabled || c.requestFullscreen && a.fullscreenEnabled)
-    }
-
-    function lh(a) {
-        a.webkitRequestFullscreen ? a.webkitRequestFullscreen() : a.mozRequestFullScreen ? a.mozRequestFullScreen() : a.msRequestFullscreen ? a.msRequestFullscreen() : a.requestFullscreen && a.requestFullscreen()
-    }
-
-    function mh() {
-        var a = Cf().b;
-        return !!(a.webkitIsFullScreen || a.mozFullScreen || a.msFullscreenElement || a.fullscreenElement)
-    };
-
-    function nh(a) {
-        a = m(a) ? a : {};
-        this.d = m(a.className) ? a.className : "ol-full-screen";
-        var c = m(a.label) ? a.label : "\u2194";
-        this.f = ia(c) ? document.createTextNode(String(c)) : c;
-        c = m(a.labelActive) ? a.labelActive : "\u00d7";
-        this.g = ia(c) ? document.createTextNode(String(c)) : c;
-        c = m(a.tipLabel) ? a.tipLabel : "Toggle full-screen";
-        c = Jf("BUTTON", {
-            "class": this.d + "-" + mh(),
-            type: "button",
-            title: c
-        }, this.f);
-        x(c, "click", this.n, !1, this);
-        x(c, ["mouseout", uc], function() {
-            this.blur()
-        }, !1);
-        x(ba.document, jh, this.i, !1, this);
-        var d = this.d + " ol-unselectable ol-control " + (kh() ? "" : "ol-unsupported"),
-            c = Jf("DIV", d, c);
-        ug.call(this, {
-            element: c,
-            target: a.target
-        });
-        this.o = m(a.keys) ? a.keys : !1
-    }
-    w(nh, ug);
-    nh.prototype.n = function(a) {
-        a.preventDefault();
-        kh() && (a = this.a, null !== a && (mh() ? (a = Cf().b, a.webkitCancelFullScreen ? a.webkitCancelFullScreen() : a.mozCancelFullScreen ? a.mozCancelFullScreen() : a.msExitFullscreen ? a.msExitFullscreen() : a.exitFullscreen && a.exitFullscreen()) : (a = a.df(), a = Ff(a), this.o ? a.mozRequestFullScreenWithKeys ? a.mozRequestFullScreenWithKeys() : a.webkitRequestFullscreen ? a.webkitRequestFullscreen() : lh(a) : lh(a))))
-    };
-    nh.prototype.i = function() {
-        var a = this.d + "-true",
-            c = this.d + "-false",
-            d = Sf(this.element),
-            e = this.a;
-        mh() ? (Yf(d, c) && ($f(d, c), Zf(d, a)), Rf(this.g, this.f)) : (Yf(d, a) && ($f(d, a), Zf(d, c)), Rf(this.f, this.g));
-        null === e || e.Kc()
-    };
-
-    function oh(a) {
-        a = m(a) ? a : {};
-        var c = Jf("DIV", m(a.className) ? a.className : "ol-mouse-position");
-        ug.call(this, {
-            element: c,
-            render: m(a.render) ? a.render : ph,
-            target: a.target
-        });
-        x(this, hd("projection"), this.jl, !1, this);
-        m(a.coordinateFormat) && this.vh(a.coordinateFormat);
-        m(a.projection) && this.yg(re(a.projection));
-        this.o = m(a.undefinedHTML) ? a.undefinedHTML : "";
-        this.i = c.innerHTML;
-        this.g = this.f = this.d = null
-    }
-    w(oh, ug);
-
-    function ph(a) {
-        a = a.frameState;
-        null === a ? this.d = null : this.d != a.viewState.projection && (this.d = a.viewState.projection, this.f = null);
-        qh(this, this.g)
-    }
-    l = oh.prototype;
-    l.jl = function() {
-        this.f = null
-    };
-    l.Uf = function() {
-        return this.get("coordinateFormat")
-    };
-    l.xg = function() {
-        return this.get("projection")
-    };
-    l.$j = function(a) {
-        this.g = this.a.Bd(a.b);
-        qh(this, this.g)
-    };
-    l.ak = function() {
-        qh(this, null);
-        this.g = null
-    };
-    l.setMap = function(a) {
-        oh.S.setMap.call(this, a);
-        null !== a && (a = a.a, this.l.push(x(a, "mousemove", this.$j, !1, this), x(a, "mouseout", this.ak, !1, this)))
-    };
-    l.vh = function(a) {
-        this.set("coordinateFormat", a)
-    };
-    l.yg = function(a) {
-        this.set("projection", a)
-    };
-
-    function qh(a, c) {
-        var d = a.o;
-        if (null !== c && null !== a.d) {
-            if (null === a.f) {
-                var e = a.xg();
-                a.f = m(e) ? ve(a.d, e) : Ke
-            }
-            e = a.a.ka(c);
-            null !== e && (a.f(e, e), d = a.Uf(), d = m(d) ? d(e) : e.toString())
-        }
-        m(a.i) && d == a.i || (a.element.innerHTML = d, a.i = d)
-    };
-
-    function rh(a, c, d) {
-        mc.call(this);
-        this.d = a;
-        this.c = d;
-        this.b = c || window;
-        this.a = ra(this.Pf, this)
-    }
-    w(rh, mc);
-    l = rh.prototype;
-    l.$ = null;
-    l.zf = !1;
-    l.start = function() {
-        sh(this);
-        this.zf = !1;
-        var a = th(this),
-            c = uh(this);
-        a && !c && this.b.mozRequestAnimationFrame ? (this.$ = x(this.b, "MozBeforePaint", this.a), this.b.mozRequestAnimationFrame(null), this.zf = !0) : this.$ = a && c ? a.call(this.b, this.a) : this.b.setTimeout(Jg(this.a), 20)
-    };
-
-    function sh(a) {
-        if (null != a.$) {
-            var c = th(a),
-                d = uh(a);
-            c && !d && a.b.mozRequestAnimationFrame ? Wc(a.$) : c && d ? d.call(a.b, a.$) : a.b.clearTimeout(a.$)
-        }
-        a.$ = null
-    }
-    l.Pf = function() {
-        this.zf && this.$ && Wc(this.$);
-        this.$ = null;
-        this.d.call(this.c, ua())
-    };
-    l.O = function() {
-        sh(this);
-        rh.S.O.call(this)
-    };
-
-    function th(a) {
-        a = a.b;
-        return a.requestAnimationFrame || a.webkitRequestAnimationFrame || a.mozRequestAnimationFrame || a.oRequestAnimationFrame || a.msRequestAnimationFrame || null
-    }
-
-    function uh(a) {
-        a = a.b;
-        return a.cancelAnimationFrame || a.cancelRequestAnimationFrame || a.webkitCancelRequestAnimationFrame || a.mozCancelRequestAnimationFrame || a.oCancelRequestAnimationFrame || a.msCancelRequestAnimationFrame || null
-    };
-
-    function vh(a) {
-        ba.setTimeout(function() {
-            throw a;
-        }, 0)
-    }
-
-    function wh(a, c) {
-        var d = a;
-        c && (d = ra(a, c));
-        d = xh(d);
-        !ka(ba.setImmediate) || ba.Window && ba.Window.prototype.setImmediate == ba.setImmediate ? (yh || (yh = zh()), yh(d)) : ba.setImmediate(d)
-    }
-    var yh;
-
-    function zh() {
-        var a = ba.MessageChannel;
-        "undefined" === typeof a && "undefined" !== typeof window && window.postMessage && window.addEventListener && (a = function() {
-            var a = document.createElement("iframe");
-            a.style.display = "none";
-            a.src = "";
-            document.documentElement.appendChild(a);
-            var c = a.contentWindow,
-                a = c.document;
-            a.open();
-            a.write("");
-            a.close();
-            var d = "callImmediate" + Math.random(),
-                e = "file:" == c.location.protocol ? "*" : c.location.protocol + "//" + c.location.host,
-                a = ra(function(a) {
-                    if (("*" == e || a.origin == e) && a.data == d) this.port1.onmessage()
-                }, this);
-            c.addEventListener("message", a, !1);
-            this.port1 = {};
-            this.port2 = {
-                postMessage: function() {
-                    c.postMessage(d, e)
-                }
-            }
-        });
-        if ("undefined" !== typeof a && !ob("Trident") && !ob("MSIE")) {
-            var c = new a,
-                d = {},
-                e = d;
-            c.port1.onmessage = function() {
-                if (m(d.next)) {
-                    d = d.next;
-                    var a = d.Lf;
-                    d.Lf = null;
-                    a()
-                }
-            };
-            return function(a) {
-                e.next = {
-                    Lf: a
-                };
-                e = e.next;
-                c.port2.postMessage(0)
-            }
-        }
-        return "undefined" !== typeof document && "onreadystatechange" in document.createElement("script") ? function(a) {
-            var c = document.createElement("script");
-            c.onreadystatechange = function() {
-                c.onreadystatechange = null;
-                c.parentNode.removeChild(c);
-                c = null;
-                a();
-                a = null
-            };
-            document.documentElement.appendChild(c)
-        } : function(a) {
-            ba.setTimeout(a, 0)
-        }
-    }
-    var xh = Ig;
-
-    function Ah(a) {
-        if ("function" == typeof a.cb) return a.cb();
-        if (ia(a)) return a.split("");
-        if (ha(a)) {
-            for (var c = [], d = a.length, e = 0; e < d; e++) c.push(a[e]);
-            return c
-        }
-        return sb(a)
-    }
-
-    function Bh(a, c) {
-        if ("function" == typeof a.forEach) a.forEach(c, void 0);
-        else if (ha(a) || ia(a)) Sa(a, c, void 0);
-        else {
-            var d;
-            if ("function" == typeof a.C) d = a.C();
-            else if ("function" != typeof a.cb)
-                if (ha(a) || ia(a)) {
-                    d = [];
-                    for (var e = a.length, f = 0; f < e; f++) d.push(f)
-                } else d = tb(a);
-            else d = void 0;
-            for (var e = Ah(a), f = e.length, g = 0; g < f; g++) c.call(void 0, e[g], d && d[g], a)
-        }
-    };
-
-    function Ch(a, c) {
-        this.a = {};
-        this.b = [];
-        this.c = 0;
-        var d = arguments.length;
-        if (1 < d) {
-            if (d % 2) throw Error("Uneven number of arguments");
-            for (var e = 0; e < d; e += 2) this.set(arguments[e], arguments[e + 1])
-        } else if (a) {
-            a instanceof Ch ? (d = a.C(), e = a.cb()) : (d = tb(a), e = sb(a));
-            for (var f = 0; f < d.length; f++) this.set(d[f], e[f])
-        }
-    }
-    l = Ch.prototype;
-    l.Tb = function() {
-        return this.c
-    };
-    l.cb = function() {
-        Dh(this);
-        for (var a = [], c = 0; c < this.b.length; c++) a.push(this.a[this.b[c]]);
-        return a
-    };
-    l.C = function() {
-        Dh(this);
-        return this.b.concat()
-    };
-    l.la = function() {
-        return 0 == this.c
-    };
-    l.clear = function() {
-        this.a = {};
-        this.c = this.b.length = 0
-    };
-    l.remove = function(a) {
-        return Eh(this.a, a) ? (delete this.a[a], this.c--, this.b.length > 2 * this.c && Dh(this), !0) : !1
-    };
-
-    function Dh(a) {
-        if (a.c != a.b.length) {
-            for (var c = 0, d = 0; c < a.b.length;) {
-                var e = a.b[c];
-                Eh(a.a, e) && (a.b[d++] = e);
-                c++
-            }
-            a.b.length = d
-        }
-        if (a.c != a.b.length) {
-            for (var f = {}, d = c = 0; c < a.b.length;) e = a.b[c], Eh(f, e) || (a.b[d++] = e, f[e] = 1), c++;
-            a.b.length = d
-        }
-    }
-    l.get = function(a, c) {
-        return Eh(this.a, a) ? this.a[a] : c
-    };
-    l.set = function(a, c) {
-        Eh(this.a, a) || (this.c++, this.b.push(a));
-        this.a[a] = c
-    };
-    l.forEach = function(a, c) {
-        for (var d = this.C(), e = 0; e < d.length; e++) {
-            var f = d[e],
-                g = this.get(f);
-            a.call(c, g, f, this)
-        }
-    };
-    l.clone = function() {
-        return new Ch(this)
-    };
-
-    function Eh(a, c) {
-        return Object.prototype.hasOwnProperty.call(a, c)
-    };
-
-    function Fh() {
-        this.b = ua()
-    }
-    new Fh;
-    Fh.prototype.set = function(a) {
-        this.b = a
-    };
-    Fh.prototype.get = function() {
-        return this.b
-    };
-
-    function Gh(a) {
-        $c.call(this);
-        this.pd = a || window;
-        this.Md = x(this.pd, "resize", this.ik, !1, this);
-        this.Nd = If(this.pd || window)
-    }
-    w(Gh, $c);
-    l = Gh.prototype;
-    l.Md = null;
-    l.pd = null;
-    l.Nd = null;
-    l.O = function() {
-        Gh.S.O.call(this);
-        this.Md && (Wc(this.Md), this.Md = null);
-        this.Nd = this.pd = null
-    };
-    l.ik = function() {
-        var a = If(this.pd || window),
-            c = this.Nd;
-        a == c || a && c && a.width == c.width && a.height == c.height || (this.Nd = a, this.dispatchEvent("resize"))
-    };
-
-    function Hh(a, c, d, e, f) {
-        if (!(Ib || Kb && Rb("525"))) return !0;
-        if (Lb && f) return Ih(a);
-        if (f && !e) return !1;
-        ja(c) && (c = Jh(c));
-        if (!d && (17 == c || 18 == c || Lb && 91 == c)) return !1;
-        if (Kb && e && d) switch (a) {
-            case 220:
-            case 219:
-            case 221:
-            case 192:
-            case 186:
-            case 189:
-            case 187:
-            case 188:
-            case 190:
-            case 191:
-            case 192:
-            case 222:
-                return !1
-        }
-        if (Ib && e && c == a) return !1;
-        switch (a) {
-            case 13:
-                return !0;
-            case 27:
-                return !Kb
-        }
-        return Ih(a)
-    }
-
-    function Ih(a) {
-        if (48 <= a && 57 >= a || 96 <= a && 106 >= a || 65 <= a && 90 >= a || Kb && 0 == a) return !0;
-        switch (a) {
-            case 32:
-            case 63:
-            case 107:
-            case 109:
-            case 110:
-            case 111:
-            case 186:
-            case 59:
-            case 189:
-            case 187:
-            case 61:
-            case 188:
-            case 190:
-            case 191:
-            case 192:
-            case 222:
-            case 219:
-            case 220:
-            case 221:
-                return !0;
-            default:
-                return !1
-        }
-    }
-
-    function Jh(a) {
-        if (Jb) a = Kh(a);
-        else if (Lb && Kb) a: switch (a) {
-            case 93:
-                a = 91;
-                break a
-        }
-        return a
-    }
-
-    function Kh(a) {
-        switch (a) {
-            case 61:
-                return 187;
-            case 59:
-                return 186;
-            case 173:
-                return 189;
-            case 224:
-                return 91;
-            case 0:
-                return 224;
-            default:
-                return a
-        }
-    };
-
-    function Lh(a, c) {
-        $c.call(this);
-        a && Mh(this, a, c)
-    }
-    w(Lh, $c);
-    l = Lh.prototype;
-    l.Z = null;
-    l.Ud = null;
-    l.Ye = null;
-    l.Vd = null;
-    l.Ja = -1;
-    l.Hb = -1;
-    l.Ge = !1;
-    var Nh = {
-            3: 13,
-            12: 144,
-            63232: 38,
-            63233: 40,
-            63234: 37,
-            63235: 39,
-            63236: 112,
-            63237: 113,
-            63238: 114,
-            63239: 115,
-            63240: 116,
-            63241: 117,
-            63242: 118,
-            63243: 119,
-            63244: 120,
-            63245: 121,
-            63246: 122,
-            63247: 123,
-            63248: 44,
-            63272: 46,
-            63273: 36,
-            63275: 35,
-            63276: 33,
-            63277: 34,
-            63289: 144,
-            63302: 45
-        },
-        Oh = {
-            Up: 38,
-            Down: 40,
-            Left: 37,
-            Right: 39,
-            Enter: 13,
-            F1: 112,
-            F2: 113,
-            F3: 114,
-            F4: 115,
-            F5: 116,
-            F6: 117,
-            F7: 118,
-            F8: 119,
-            F9: 120,
-            F10: 121,
-            F11: 122,
-            F12: 123,
-            "U+007F": 46,
-            Home: 36,
-            End: 35,
-            PageUp: 33,
-            PageDown: 34,
-            Insert: 45
-        },
-        Ph = Ib || Kb && Rb("525"),
-        Qh = Lb && Jb;
-    Lh.prototype.b = function(a) {
-        Kb && (17 == this.Ja && !a.i || 18 == this.Ja && !a.a || Lb && 91 == this.Ja && !a.l) && (this.Hb = this.Ja = -1); - 1 == this.Ja && (a.i && 17 != a.e ? this.Ja = 17 : a.a && 18 != a.e ? this.Ja = 18 : a.l && 91 != a.e && (this.Ja = 91));
-        Ph && !Hh(a.e, this.Ja, a.d, a.i, a.a) ? this.handleEvent(a) : (this.Hb = Jh(a.e), Qh && (this.Ge = a.a))
-    };
-    Lh.prototype.a = function(a) {
-        this.Hb = this.Ja = -1;
-        this.Ge = a.a
-    };
-    Lh.prototype.handleEvent = function(a) {
-        var c = a.b,
-            d, e, f = c.altKey;
-        Ib && "keypress" == a.type ? (d = this.Hb, e = 13 != d && 27 != d ? c.keyCode : 0) : Kb && "keypress" == a.type ? (d = this.Hb, e = 0 <= c.charCode && 63232 > c.charCode && Ih(d) ? c.charCode : 0) : Hb ? (d = this.Hb, e = Ih(d) ? c.keyCode : 0) : (d = c.keyCode || this.Hb, e = c.charCode || 0, Qh && (f = this.Ge), Lb && 63 == e && 224 == d && (d = 191));
-        var g = d = Jh(d),
-            h = c.keyIdentifier;
-        d ? 63232 <= d && d in Nh ? g = Nh[d] : 25 == d && a.d && (g = 9) : h && h in Oh && (g = Oh[h]);
-        this.Ja = g;
-        a = new Rh(g, e, 0, c);
-        a.a = f;
-        this.dispatchEvent(a)
-    };
-
-    function Mh(a, c, d) {
-        a.Vd && Sh(a);
-        a.Z = c;
-        a.Ud = x(a.Z, "keypress", a, d);
-        a.Ye = x(a.Z, "keydown", a.b, d, a);
-        a.Vd = x(a.Z, "keyup", a.a, d, a)
-    }
-
-    function Sh(a) {
-        a.Ud && (Wc(a.Ud), Wc(a.Ye), Wc(a.Vd), a.Ud = null, a.Ye = null, a.Vd = null);
-        a.Z = null;
-        a.Ja = -1;
-        a.Hb = -1
-    }
-    Lh.prototype.O = function() {
-        Lh.S.O.call(this);
-        Sh(this)
-    };
-
-    function Rh(a, c, d, e) {
-        wc.call(this, e);
-        this.type = "key";
-        this.e = a;
-        this.q = c
-    }
-    w(Rh, wc);
-
-    function Th(a, c) {
-        $c.call(this);
-        var d = this.Z = a;
-        (d = la(d) && 1 == d.nodeType ? this.Z : this.Z ? this.Z.body : null) && fg(d, "direction");
-        this.b = x(this.Z, Jb ? "DOMMouseScroll" : "mousewheel", this, c)
-    }
-    w(Th, $c);
-    Th.prototype.handleEvent = function(a) {
-        var c = 0,
-            d = 0,
-            e = 0;
-        a = a.b;
-        if ("mousewheel" == a.type) {
-            d = 1;
-            if (Ib || Kb && (Mb || Rb("532.0"))) d = 40;
-            e = Uh(-a.wheelDelta, d);
-            m(a.wheelDeltaX) ? (c = Uh(-a.wheelDeltaX, d), d = Uh(-a.wheelDeltaY, d)) : d = e
-        } else e = a.detail, 100 < e ? e = 3 : -100 > e && (e = -3), m(a.axis) && a.axis === a.HORIZONTAL_AXIS ? c = e : d = e;
-        ja(this.a) && Vb(c, -this.a, this.a);
-        ja(this.c) && (d = Vb(d, -this.c, this.c));
-        c = new Vh(e, a, 0, d);
-        this.dispatchEvent(c)
-    };
-
-    function Uh(a, c) {
-        return Kb && (Lb || Nb) && 0 != a % c ? a : a / c
-    }
-    Th.prototype.O = function() {
-        Th.S.O.call(this);
-        Wc(this.b);
-        this.b = null
-    };
-
-    function Vh(a, c, d, e) {
-        wc.call(this, c);
-        this.type = "mousewheel";
-        this.detail = a;
-        this.o = e
-    }
-    w(Vh, wc);
-
-    function Wh(a, c, d) {
-        rc.call(this, a);
-        this.b = c;
-        a = m(d) ? d : {};
-        this.buttons = Xh(a);
-        this.pressure = Yh(a, this.buttons);
-        this.bubbles = Ab(a, "bubbles", !1);
-        this.cancelable = Ab(a, "cancelable", !1);
-        this.view = Ab(a, "view", null);
-        this.detail = Ab(a, "detail", null);
-        this.screenX = Ab(a, "screenX", 0);
-        this.screenY = Ab(a, "screenY", 0);
-        this.clientX = Ab(a, "clientX", 0);
-        this.clientY = Ab(a, "clientY", 0);
-        this.button = Ab(a, "button", 0);
-        this.relatedTarget = Ab(a, "relatedTarget", null);
-        this.pointerId = Ab(a, "pointerId", 0);
-        this.width = Ab(a, "width", 0);
-        this.height = Ab(a, "height", 0);
-        this.pointerType = Ab(a, "pointerType", "");
-        this.isPrimary = Ab(a, "isPrimary", !1);
-        c.preventDefault && (this.preventDefault = function() {
-            c.preventDefault()
-        })
-    }
-    w(Wh, rc);
-
-    function Xh(a) {
-        if (a.buttons || Zh) a = a.buttons;
-        else switch (a.which) {
-            case 1:
-                a = 1;
-                break;
-            case 2:
-                a = 4;
-                break;
-            case 3:
-                a = 2;
-                break;
-            default:
-                a = 0
-        }
-        return a
-    }
-
-    function Yh(a, c) {
-        var d = 0;
-        a.pressure ? d = a.pressure : d = c ? .5 : 0;
-        return d
-    }
-    var Zh = !1;
-    try {
-        Zh = 1 === (new MouseEvent("click", {
-            buttons: 1
-        })).buttons
-    } catch ($h) {};
-
-    function ai(a, c) {
-        var d = Mf("CANVAS");
-        m(a) && (d.width = a);
-        m(c) && (d.height = c);
-        return d.getContext("2d")
-    }
-    var ci = function() {
-            var a;
-            return function() {
-                if (!m(a))
-                    if (ba.getComputedStyle) {
-                        var c = Mf("P"),
-                            d, e = {
-                                webkitTransform: "-webkit-transform",
-                                OTransform: "-o-transform",
-                                msTransform: "-ms-transform",
-                                MozTransform: "-moz-transform",
-                                transform: "transform"
-                            };
-                        document.body.appendChild(c);
-                        for (var f in e) f in c.style && (c.style[f] = "translate(1px,1px)", d = ba.getComputedStyle(c).getPropertyValue(e[f]));
-                        Qf(c);
-                        a = d && "none" !== d
-                    } else a = !1;
-                return a
-            }
-        }(),
-        di = function() {
-            var a;
-            return function() {
-                if (!m(a))
-                    if (ba.getComputedStyle) {
-                        var c = Mf("P"),
-                            d, e = {
-                                webkitTransform: "-webkit-transform",
-                                OTransform: "-o-transform",
-                                msTransform: "-ms-transform",
-                                MozTransform: "-moz-transform",
-                                transform: "transform"
-                            };
-                        document.body.appendChild(c);
-                        for (var f in e) f in c.style && (c.style[f] = "translate3d(1px,1px,1px)", d = ba.getComputedStyle(c).getPropertyValue(e[f]));
-                        Qf(c);
-                        a = d && "none" !== d
-                    } else a = !1;
-                return a
-            }
-        }();
-
-    function ei(a, c) {
-        var d = a.style;
-        d.WebkitTransform = c;
-        d.MozTransform = c;
-        d.b = c;
-        d.msTransform = c;
-        d.transform = c;
-        Ib && !Ub && (a.style.transformOrigin = "0 0")
-    }
-
-    function fi(a, c) {
-        var d;
-        if (di()) {
-            if (m(6)) {
-                var e = Array(16);
-                for (d = 0; 16 > d; ++d) e[d] = c[d].toFixed(6);
-                d = e.join(",")
-            } else d = c.join(",");
-            ei(a, "matrix3d(" + d + ")")
-        } else if (ci()) {
-            e = [c[0], c[1], c[4], c[5], c[12], c[13]];
-            if (m(6)) {
-                var f = Array(6);
-                for (d = 0; 6 > d; ++d) f[d] = e[d].toFixed(6);
-                d = f.join(",")
-            } else d = e.join(",");
-            ei(a, "matrix(" + d + ")")
-        } else a.style.left = Math.round(c[12]) + "px", a.style.top = Math.round(c[13]) + "px"
-    };
-    var gi = ["experimental-webgl", "webgl", "webkit-3d", "moz-webgl"];
-
-    function hi(a, c) {
-        var d, e, f = gi.length;
-        for (e = 0; e < f; ++e) try {
-            if (d = a.getContext(gi[e], c), null !== d) return d
-        } catch (g) {}
-        return null
-    };
-    var ii, ji = ba.devicePixelRatio || 1,
-        ki = !1,
-        li = function() {
-            if (!("HTMLCanvasElement" in ba)) return !1;
-            try {
-                var a = ai();
-                if (null === a) return !1;
-                m(a.setLineDash) && (ki = !0);
-                return !0
-            } catch (c) {
-                return !1
-            }
-        }(),
-        mi = "DeviceOrientationEvent" in ba,
-        ni = "geolocation" in ba.navigator,
-        oi = "ontouchstart" in ba,
-        pi = "PointerEvent" in ba,
-        qi = !!ba.navigator.msPointerEnabled,
-        ri = !1,
-        si, ti = [];
-    if ("WebGLRenderingContext" in ba) try {
-        var ui = hi(Mf("CANVAS"), {
-            Ei: !0
-        });
-        null !== ui && (ri = !0, si = ui.getParameter(ui.MAX_TEXTURE_SIZE), ti = ui.getSupportedExtensions())
-    } catch (vi) {}
-    ii = ri;
-    wa = ti;
-    va = si;
-
-    function wi(a, c) {
-        this.b = a;
-        this.e = c
-    };
-
-    function xi(a) {
-        wi.call(this, a, {
-            mousedown: this.tk,
-            mousemove: this.uk,
-            mouseup: this.xk,
-            mouseover: this.wk,
-            mouseout: this.vk
-        });
-        this.a = a.a;
-        this.c = []
-    }
-    w(xi, wi);
-
-    function yi(a, c) {
-        for (var d = a.c, e = c.clientX, f = c.clientY, g = 0, h = d.length, k; g < h && (k = d[g]); g++) {
-            var n = Math.abs(f - k[1]);
-            if (25 >= Math.abs(e - k[0]) && 25 >= n) return !0
-        }
-        return !1
-    }
-
-    function zi(a) {
-        var c = Ai(a, a.b),
-            d = c.preventDefault;
-        c.preventDefault = function() {
-            a.preventDefault();
-            d()
-        };
-        c.pointerId = 1;
-        c.isPrimary = !0;
-        c.pointerType = "mouse";
-        return c
-    }
-    l = xi.prototype;
-    l.tk = function(a) {
-        if (!yi(this, a)) {
-            (1).toString() in this.a && this.cancel(a);
-            var c = zi(a);
-            this.a[(1).toString()] = a;
-            Bi(this.b, Ci, c, a)
-        }
-    };
-    l.uk = function(a) {
-        if (!yi(this, a)) {
-            var c = zi(a);
-            Bi(this.b, Di, c, a)
-        }
-    };
-    l.xk = function(a) {
-        if (!yi(this, a)) {
-            var c = this.a[(1).toString()];
-            c && c.button === a.button && (c = zi(a), Bi(this.b, Ei, c, a), zb(this.a, (1).toString()))
-        }
-    };
-    l.wk = function(a) {
-        if (!yi(this, a)) {
-            var c = zi(a);
-            Fi(this.b, c, a)
-        }
-    };
-    l.vk = function(a) {
-        if (!yi(this, a)) {
-            var c = zi(a);
-            Gi(this.b, c, a)
-        }
-    };
-    l.cancel = function(a) {
-        var c = zi(a);
-        this.b.cancel(c, a);
-        zb(this.a, (1).toString())
-    };
-
-    function Hi(a) {
-        wi.call(this, a, {
-            MSPointerDown: this.Ck,
-            MSPointerMove: this.Dk,
-            MSPointerUp: this.Gk,
-            MSPointerOut: this.Ek,
-            MSPointerOver: this.Fk,
-            MSPointerCancel: this.Bk,
-            MSGotPointerCapture: this.zk,
-            MSLostPointerCapture: this.Ak
-        });
-        this.a = a.a;
-        this.c = ["", "unavailable", "touch", "pen", "mouse"]
-    }
-    w(Hi, wi);
-
-    function Ii(a, c) {
-        var d = c;
-        ja(c.b.pointerType) && (d = Ai(c, c.b), d.pointerType = a.c[c.b.pointerType]);
-        return d
-    }
-    l = Hi.prototype;
-    l.Ck = function(a) {
-        this.a[a.b.pointerId] = a;
-        var c = Ii(this, a);
-        Bi(this.b, Ci, c, a)
-    };
-    l.Dk = function(a) {
-        var c = Ii(this, a);
-        Bi(this.b, Di, c, a)
-    };
-    l.Gk = function(a) {
-        var c = Ii(this, a);
-        Bi(this.b, Ei, c, a);
-        zb(this.a, a.b.pointerId)
-    };
-    l.Ek = function(a) {
-        var c = Ii(this, a);
-        Gi(this.b, c, a)
-    };
-    l.Fk = function(a) {
-        var c = Ii(this, a);
-        Fi(this.b, c, a)
-    };
-    l.Bk = function(a) {
-        var c = Ii(this, a);
-        this.b.cancel(c, a);
-        zb(this.a, a.b.pointerId)
-    };
-    l.Ak = function(a) {
-        this.b.dispatchEvent(new Wh("lostpointercapture", a, a.b))
-    };
-    l.zk = function(a) {
-        this.b.dispatchEvent(new Wh("gotpointercapture", a, a.b))
-    };
-
-    function Ji(a) {
-        wi.call(this, a, {
-            pointerdown: this.nn,
-            pointermove: this.pn,
-            pointerup: this.sn,
-            pointerout: this.qn,
-            pointerover: this.rn,
-            pointercancel: this.mn,
-            gotpointercapture: this.Fj,
-            lostpointercapture: this.sk
-        })
-    }
-    w(Ji, wi);
-    l = Ji.prototype;
-    l.nn = function(a) {
-        Ki(this.b, a)
-    };
-    l.pn = function(a) {
-        Ki(this.b, a)
-    };
-    l.sn = function(a) {
-        Ki(this.b, a)
-    };
-    l.qn = function(a) {
-        Ki(this.b, a)
-    };
-    l.rn = function(a) {
-        Ki(this.b, a)
-    };
-    l.mn = function(a) {
-        Ki(this.b, a)
-    };
-    l.sk = function(a) {
-        Ki(this.b, a)
-    };
-    l.Fj = function(a) {
-        Ki(this.b, a)
-    };
-
-    function Li(a, c) {
-        wi.call(this, a, {
-            touchstart: this.so,
-            touchmove: this.ro,
-            touchend: this.qo,
-            touchcancel: this.po
-        });
-        this.a = a.a;
-        this.g = c;
-        this.c = void 0;
-        this.f = 0;
-        this.d = void 0
-    }
-    w(Li, wi);
-    l = Li.prototype;
-    l.qh = function() {
-        this.f = 0;
-        this.d = void 0
-    };
-
-    function Mi(a, c, d) {
-        c = Ai(c, d);
-        c.pointerId = d.identifier + 2;
-        c.bubbles = !0;
-        c.cancelable = !0;
-        c.detail = a.f;
-        c.button = 0;
-        c.buttons = 1;
-        c.width = d.webkitRadiusX || d.radiusX || 0;
-        c.height = d.webkitRadiusY || d.radiusY || 0;
-        c.pressure = d.webkitForce || d.force || .5;
-        c.isPrimary = a.c === d.identifier;
-        c.pointerType = "touch";
-        c.clientX = d.clientX;
-        c.clientY = d.clientY;
-        c.screenX = d.screenX;
-        c.screenY = d.screenY;
-        return c
-    }
-
-    function Ni(a, c, d) {
-        function e() {
-            c.preventDefault()
-        }
-        var f = Array.prototype.slice.call(c.b.changedTouches),
-            g = f.length,
-            h, k;
-        for (h = 0; h < g; ++h) k = Mi(a, c, f[h]), k.preventDefault = e, d.call(a, c, k)
-    }
-    l.so = function(a) {
-        var c = a.b.touches,
-            d = tb(this.a),
-            e = d.length;
-        if (e >= c.length) {
-            var f = [],
-                g, h, k;
-            for (g = 0; g < e; ++g) {
-                h = d[g];
-                k = this.a[h];
-                var n;
-                if (!(n = 1 == h)) a: {
-                    n = c.length;
-                    for (var p = void 0, q = 0; q < n; q++)
-                        if (p = c[q], p.identifier === h - 2) {
-                            n = !0;
-                            break a
-                        }
-                    n = !1
-                }
-                n || f.push(k.ec)
-            }
-            for (g = 0; g < f.length; ++g) this.He(a, f[g])
-        }
-        c = rb(this.a);
-        if (0 === c || 1 === c && (1).toString() in this.a) this.c = a.b.changedTouches[0].identifier, m(this.d) && ba.clearTimeout(this.d);
-        Oi(this, a);
-        this.f++;
-        Ni(this, a, this.hn)
-    };
-    l.hn = function(a, c) {
-        this.a[c.pointerId] = {
-            target: c.target,
-            ec: c,
-            Zg: c.target
-        };
-        var d = this.b;
-        c.bubbles = !0;
-        Bi(d, Pi, c, a);
-        d = this.b;
-        c.bubbles = !1;
-        Bi(d, Qi, c, a);
-        Bi(this.b, Ci, c, a)
-    };
-    l.ro = function(a) {
-        a.preventDefault();
-        Ni(this, a, this.yk)
-    };
-    l.yk = function(a, c) {
-        var d = this.a[c.pointerId];
-        if (d) {
-            var e = d.ec,
-                f = d.Zg;
-            Bi(this.b, Di, c, a);
-            e && f !== c.target && (e.relatedTarget = c.target, c.relatedTarget = f, e.target = f, c.target ? (Gi(this.b, e, a), Fi(this.b, c, a)) : (c.target = f, c.relatedTarget = null, this.He(a, c)));
-            d.ec = c;
-            d.Zg = c.target
-        }
-    };
-    l.qo = function(a) {
-        Oi(this, a);
-        Ni(this, a, this.to)
-    };
-    l.to = function(a, c) {
-        Bi(this.b, Ei, c, a);
-        this.b.ec(c, a);
-        var d = this.b;
-        c.bubbles = !1;
-        Bi(d, Ri, c, a);
-        zb(this.a, c.pointerId);
-        c.isPrimary && (this.c = void 0, this.d = ba.setTimeout(ra(this.qh, this), 200))
-    };
-    l.po = function(a) {
-        Ni(this, a, this.He)
-    };
-    l.He = function(a, c) {
-        this.b.cancel(c, a);
-        this.b.ec(c, a);
-        var d = this.b;
-        c.bubbles = !1;
-        Bi(d, Ri, c, a);
-        zb(this.a, c.pointerId);
-        c.isPrimary && (this.c = void 0, this.d = ba.setTimeout(ra(this.qh, this), 200))
-    };
-
-    function Oi(a, c) {
-        var d = a.g.c,
-            e = c.b.changedTouches[0];
-        if (a.c === e.identifier) {
-            var f = [e.clientX, e.clientY];
-            d.push(f);
-            ba.setTimeout(function() {
-                Za(d, f)
-            }, 2500)
-        }
-    };
-
-    function Si(a) {
-        $c.call(this);
-        this.Z = a;
-        this.a = {};
-        this.c = {};
-        this.b = [];
-        pi ? Ti(this, new Ji(this)) : qi ? Ti(this, new Hi(this)) : (a = new xi(this), Ti(this, a), oi && Ti(this, new Li(this, a)));
-        a = this.b.length;
-        for (var c, d = 0; d < a; d++) c = this.b[d], Ui(this, tb(c.e))
-    }
-    w(Si, $c);
-
-    function Ti(a, c) {
-        var d = tb(c.e);
-        d && (Sa(d, function(a) {
-            var d = c.e[a];
-            d && (this.c[a] = ra(d, c))
-        }, a), a.b.push(c))
-    }
-    Si.prototype.d = function(a) {
-        var c = this.c[a.type];
-        c && c(a)
-    };
-
-    function Ui(a, c) {
-        Sa(c, function(a) {
-            x(this.Z, a, this.d, !1, this)
-        }, a)
-    }
-
-    function Vi(a, c) {
-        Sa(c, function(a) {
-            Vc(this.Z, a, this.d, !1, this)
-        }, a)
-    }
-
-    function Ai(a, c) {
-        for (var d = {}, e, f = 0, g = Wi.length; f < g; f++) e = Wi[f][0], d[e] = a[e] || c[e] || Wi[f][1];
-        return d
-    }
-    Si.prototype.ec = function(a, c) {
-        a.bubbles = !0;
-        Bi(this, Xi, a, c)
-    };
-    Si.prototype.cancel = function(a, c) {
-        Bi(this, Yi, a, c)
-    };
-
-    function Gi(a, c, d) {
-        a.ec(c, d);
-        var e = c.relatedTarget;
-        null !== e && Tf(c.target, e) || (c.bubbles = !1, Bi(a, Ri, c, d))
-    }
-
-    function Fi(a, c, d) {
-        c.bubbles = !0;
-        Bi(a, Pi, c, d);
-        var e = c.relatedTarget;
-        null !== e && Tf(c.target, e) || (c.bubbles = !1, Bi(a, Qi, c, d))
-    }
-
-    function Bi(a, c, d, e) {
-        a.dispatchEvent(new Wh(c, e, d))
-    }
-
-    function Ki(a, c) {
-        a.dispatchEvent(new Wh(c.type, c, c.b))
-    }
-    Si.prototype.O = function() {
-        for (var a = this.b.length, c, d = 0; d < a; d++) c = this.b[d], Vi(this, tb(c.e));
-        Si.S.O.call(this)
-    };
-    var Di = "pointermove",
-        Ci = "pointerdown",
-        Ei = "pointerup",
-        Pi = "pointerover",
-        Xi = "pointerout",
-        Qi = "pointerenter",
-        Ri = "pointerleave",
-        Yi = "pointercancel",
-        Wi = [
-            ["bubbles", !1],
-            ["cancelable", !1],
-            ["view", null],
-            ["detail", null],
-            ["screenX", 0],
-            ["screenY", 0],
-            ["clientX", 0],
-            ["clientY", 0],
-            ["ctrlKey", !1],
-            ["altKey", !1],
-            ["shiftKey", !1],
-            ["metaKey", !1],
-            ["button", 0],
-            ["relatedTarget", null],
-            ["buttons", 0],
-            ["pointerId", 0],
-            ["width", 0],
-            ["height", 0],
-            ["pressure", 0],
-            ["tiltX", 0],
-            ["tiltY", 0],
-            ["pointerType", ""],
-            ["hwTimestamp", 0],
-            ["isPrimary", !1],
-            ["type", ""],
-            ["target", null],
-            ["currentTarget", null],
-            ["which", 0]
-        ];
-
-    function Zi(a, c, d, e, f) {
-        tg.call(this, a, c, f);
-        this.b = d;
-        this.originalEvent = d.b;
-        this.pixel = c.Bd(this.originalEvent);
-        this.coordinate = c.ka(this.pixel);
-        this.dragging = m(e) ? e : !1
-    }
-    w(Zi, tg);
-    Zi.prototype.preventDefault = function() {
-        Zi.S.preventDefault.call(this);
-        this.b.preventDefault()
-    };
-    Zi.prototype.fb = function() {
-        Zi.S.fb.call(this);
-        this.b.fb()
-    };
-
-    function $i(a, c, d, e, f) {
-        Zi.call(this, a, c, d.b, e, f);
-        this.a = d
-    }
-    w($i, Zi);
-
-    function aj(a) {
-        $c.call(this);
-        this.c = a;
-        this.f = 0;
-        this.g = !1;
-        this.a = this.i = this.d = null;
-        a = this.c.a;
-        this.o = 0;
-        this.l = {};
-        this.e = new Si(a);
-        this.b = null;
-        this.i = x(this.e, Ci, this.dk, !1, this);
-        this.q = x(this.e, Di, this.Kn, !1, this)
-    }
-    w(aj, $c);
-
-    function bj(a, c) {
-        var d;
-        d = new $i(cj, a.c, c);
-        a.dispatchEvent(d);
-        0 !== a.f ? (ba.clearTimeout(a.f), a.f = 0, d = new $i(dj, a.c, c), a.dispatchEvent(d)) : a.f = ba.setTimeout(ra(function() {
-            this.f = 0;
-            var a = new $i(ej, this.c, c);
-            this.dispatchEvent(a)
-        }, a), 250)
-    }
-
-    function fj(a, c) {
-        c.type == gj || c.type == hj ? delete a.l[c.pointerId] : c.type == ij && (a.l[c.pointerId] = !0);
-        a.o = rb(a.l)
-    }
-    l = aj.prototype;
-    l.fg = function(a) {
-        fj(this, a);
-        var c = new $i(gj, this.c, a);
-        this.dispatchEvent(c);
-        !this.g && 0 === a.button && bj(this, this.a);
-        0 === this.o && (Sa(this.d, Wc), this.d = null, this.g = !1, this.a = null, qc(this.b), this.b = null)
-    };
-    l.dk = function(a) {
-        fj(this, a);
-        var c = new $i(ij, this.c, a);
-        this.dispatchEvent(c);
-        this.a = a;
-        null === this.d && (this.b = new Si(document), this.d = [x(this.b, jj, this.$k, !1, this), x(this.b, gj, this.fg, !1, this), x(this.e, hj, this.fg, !1, this)])
-    };
-    l.$k = function(a) {
-        if (a.clientX != this.a.clientX || a.clientY != this.a.clientY) {
-            this.g = !0;
-            var c = new $i(kj, this.c, a, this.g);
-            this.dispatchEvent(c)
-        }
-        a.preventDefault()
-    };
-    l.Kn = function(a) {
-        this.dispatchEvent(new $i(a.type, this.c, a, null !== this.a && (a.clientX != this.a.clientX || a.clientY != this.a.clientY)))
-    };
-    l.O = function() {
-        null !== this.q && (Wc(this.q), this.q = null);
-        null !== this.i && (Wc(this.i), this.i = null);
-        null !== this.d && (Sa(this.d, Wc), this.d = null);
-        null !== this.b && (qc(this.b), this.b = null);
-        null !== this.e && (qc(this.e), this.e = null);
-        aj.S.O.call(this)
-    };
-    var ej = "singleclick",
-        cj = "click",
-        dj = "dblclick",
-        kj = "pointerdrag",
-        jj = "pointermove",
-        ij = "pointerdown",
-        gj = "pointerup",
-        hj = "pointercancel",
-        lj = {
-            Ko: ej,
-            zo: cj,
-            Ao: dj,
-            Do: kj,
-            Go: jj,
-            Co: ij,
-            Jo: gj,
-            Io: "pointerover",
-            Ho: "pointerout",
-            Eo: "pointerenter",
-            Fo: "pointerleave",
-            Bo: hj
-        };
-
-    function mj(a) {
-        fd.call(this);
-        var c = Db(a);
-        c.brightness = m(a.brightness) ? a.brightness : 0;
-        c.contrast = m(a.contrast) ? a.contrast : 1;
-        c.hue = m(a.hue) ? a.hue : 0;
-        c.opacity = m(a.opacity) ? a.opacity : 1;
-        c.saturation = m(a.saturation) ? a.saturation : 1;
-        c.visible = m(a.visible) ? a.visible : !0;
-        c.maxResolution = m(a.maxResolution) ? a.maxResolution : Infinity;
-        c.minResolution = m(a.minResolution) ? a.minResolution : 0;
-        this.t(c)
-    }
-    w(mj, fd);
-    l = mj.prototype;
-    l.Bb = function() {
-        return this.get("brightness")
-    };
-    l.Cb = function() {
-        return this.get("contrast")
-    };
-    l.Db = function() {
-        return this.get("hue")
-    };
-
-    function nj(a) {
-        var c = a.Bb(),
-            d = a.Cb(),
-            e = a.Db(),
-            f = a.Kb(),
-            g = a.Gb(),
-            h = a.We(),
-            k = a.eb(),
-            n = a.G(),
-            p = a.Eb(),
-            q = a.Fb();
-        return {
-            layer: a,
-            brightness: Vb(c, -1, 1),
-            contrast: Math.max(d, 0),
-            hue: e,
-            opacity: Vb(f, 0, 1),
-            saturation: Math.max(g, 0),
-            i: h,
-            visible: k,
-            extent: n,
-            maxResolution: p,
-            minResolution: Math.max(q, 0)
-        }
-    }
-    l.G = function() {
-        return this.get("extent")
-    };
-    l.Eb = function() {
-        return this.get("maxResolution")
-    };
-    l.Fb = function() {
-        return this.get("minResolution")
-    };
-    l.Kb = function() {
-        return this.get("opacity")
-    };
-    l.Gb = function() {
-        return this.get("saturation")
-    };
-    l.eb = function() {
-        return this.get("visible")
-    };
-    l.gc = function(a) {
-        this.set("brightness", a)
-    };
-    l.hc = function(a) {
-        this.set("contrast", a)
-    };
-    l.ic = function(a) {
-        this.set("hue", a)
-    };
-    l.bc = function(a) {
-        this.set("extent", a)
-    };
-    l.jc = function(a) {
-        this.set("maxResolution", a)
-    };
-    l.kc = function(a) {
-        this.set("minResolution", a)
-    };
-    l.cc = function(a) {
-        this.set("opacity", a)
-    };
-    l.lc = function(a) {
-        this.set("saturation", a)
-    };
-    l.mc = function(a) {
-        this.set("visible", a)
-    };
-
-    function C(a) {
-        var c = Db(a);
-        delete c.source;
-        mj.call(this, c);
-        this.f = null;
-        x(this, hd("source"), this.kk, !1, this);
-        this.Jc(m(a.source) ? a.source : null)
-    }
-    w(C, mj);
-
-    function oj(a, c) {
-        return a.visible && c >= a.minResolution && c < a.maxResolution
-    }
-    l = C.prototype;
-    l.Ue = function(a) {
-        a = m(a) ? a : [];
-        a.push(nj(this));
-        return a
-    };
-    l.da = function() {
-        var a = this.get("source");
-        return m(a) ? a : null
-    };
-    l.We = function() {
-        var a = this.da();
-        return null === a ? "undefined" : a.o
-    };
-    l.Kl = function() {
-        this.k()
-    };
-    l.kk = function() {
-        null !== this.f && (Wc(this.f), this.f = null);
-        var a = this.da();
-        null !== a && (this.f = x(a, "change", this.Kl, !1, this));
-        this.k()
-    };
-    l.Jc = function(a) {
-        this.set("source", a)
-    };
-
-    function pj(a, c, d, e, f) {
-        $c.call(this);
-        this.f = f;
-        this.extent = a;
-        this.e = d;
-        this.resolution = c;
-        this.state = e
-    }
-    w(pj, $c);
-    pj.prototype.G = function() {
-        return this.extent
-    };
-
-    function qj(a, c, d, e, f, g, h, k) {
-        Dd(a);
-        0 === c && 0 === d || Gd(a, c, d);
-        1 == e && 1 == f || Hd(a, e, f);
-        0 !== g && Id(a, g);
-        0 === h && 0 === k || Gd(a, h, k);
-        return a
-    }
-
-    function rj(a, c) {
-        return a[0] == c[0] && a[1] == c[1] && a[4] == c[4] && a[5] == c[5] && a[12] == c[12] && a[13] == c[13]
-    }
-
-    function sj(a, c, d) {
-        var e = a[1],
-            f = a[5],
-            g = a[13],
-            h = c[0];
-        c = c[1];
-        d[0] = a[0] * h + a[4] * c + a[12];
-        d[1] = e * h + f * c + g;
-        return d
-    };
-
-    function uj(a) {
-        cd.call(this);
-        this.a = a
-    }
-    w(uj, cd);
-    l = uj.prototype;
-    l.Pa = ca;
-    l.dc = function(a, c, d, e) {
-        a = a.slice();
-        sj(c.pixelToCoordinateMatrix, a, a);
-        if (this.Pa(a, c, Gg, this)) return d.call(e, this.a)
-    };
-    l.ee = Fg;
-    l.yd = function(a, c) {
-        return function(d, e) {
-            return $g(a, d, e, function(a) {
-                c[d] || (c[d] = {});
-                c[d][a.b.toString()] = a
-            })
-        }
-    };
-    l.Ol = function(a) {
-        2 === a.target.state && vj(this)
-    };
-
-    function wj(a, c) {
-        var d = c.state;
-        2 != d && 3 != d && x(c, "change", a.Ol, !1, a);
-        0 == d && (c.load(), d = c.state);
-        return 2 == d
-    }
-
-    function vj(a) {
-        var c = a.a;
-        c.eb() && "ready" == c.We() && a.k()
-    }
-
-    function xj(a, c) {
-        yg(c.a) && a.postRenderFunctions.push(ta(function(a, c, f) {
-            c = ma(a).toString();
-            a = a.a;
-            f = f.usedTiles[c];
-            for (var g; yg(a) && !(c = a.b.qc, g = c.b[0].toString(), g in f && f[g].contains(c.b));) a.pop().Yc()
-        }, c))
-    }
-
-    function yj(a, c) {
-        if (null != c) {
-            var d, e, f;
-            e = 0;
-            for (f = c.length; e < f; ++e) d = c[e], a[ma(d).toString()] = d
-        }
-    }
-
-    function zj(a, c) {
-        var d = c.L;
-        m(d) && (ia(d) ? a.logos[d] = "" : la(d) && (a.logos[d.src] = d.href))
-    }
-
-    function Aj(a, c, d, e) {
-        c = ma(c).toString();
-        d = d.toString();
-        c in a ? d in a[c] ? (a = a[c][d], e.b < a.b && (a.b = e.b), e.d > a.d && (a.d = e.d), e.c < a.c && (a.c = e.c), e.a > a.a && (a.a = e.a)) : a[c][d] = e : (a[c] = {}, a[c][d] = e)
-    }
-
-    function Bj(a, c, d) {
-        return [c * (Math.round(a[0] / c) + d[0] % 2 / 2), c * (Math.round(a[1] / c) + d[1] % 2 / 2)]
-    }
-
-    function Cj(a, c, d, e, f, g, h, k, n, p) {
-        var q = ma(c).toString();
-        q in a.wantedTiles || (a.wantedTiles[q] = {});
-        var r = a.wantedTiles[q];
-        a = a.tileQueue;
-        var t = d.minZoom,
-            u, A, z, D, B, y;
-        for (y = h; y >= t; --y)
-            for (A = Pg(d, g, y, A), z = d.ma(y), D = A.b; D <= A.d; ++D)
-                for (B = A.c; B <= A.a; ++B) h - y <= k ? (u = c.Vb(y, D, B, e, f), 0 == u.state && (r[ef(u.b)] = !0, u.gb() in a.c || Dj(a, [u, q, Sg(d, u.b), z])), m(n) && n.call(p, u)) : c.yf(y, D, B)
-    };
-
-    function Ej(a) {
-        this.U = a.opacity;
-        this.V = a.rotateWithView;
-        this.q = a.rotation;
-        this.l = a.scale;
-        this.n = a.snapToPixel
-    }
-    l = Ej.prototype;
-    l.ie = function() {
-        return this.U
-    };
-    l.Jd = function() {
-        return this.V
-    };
-    l.je = function() {
-        return this.q
-    };
-    l.ke = function() {
-        return this.l
-    };
-    l.Kd = function() {
-        return this.n
-    };
-    l.le = function(a) {
-        this.q = a
-    };
-    l.me = function(a) {
-        this.l = a
-    };
-
-    function Fj(a) {
-        a = m(a) ? a : {};
-        this.e = m(a.anchor) ? a.anchor : [.5, .5];
-        this.d = null;
-        this.a = m(a.anchorOrigin) ? a.anchorOrigin : "top-left";
-        this.g = m(a.anchorXUnits) ? a.anchorXUnits : "fraction";
-        this.i = m(a.anchorYUnits) ? a.anchorYUnits : "fraction";
-        var c = m(a.crossOrigin) ? a.crossOrigin : null,
-            d = m(a.img) ? a.img : null,
-            e = m(a.imgSize) ? a.imgSize : null,
-            f = a.src;
-        m(f) && 0 !== f.length || null === d || (f = d.src);
-        var g = m(a.src) ? 0 : 2,
-            h = Gj.Ia(),
-            k = h.get(f, c);
-        null === k && (k = new Hj(d, f, e, c, g), h.set(f, c, k));
-        this.b = k;
-        this.p = m(a.offset) ? a.offset : [0, 0];
-        this.c = m(a.offsetOrigin) ? a.offsetOrigin : "top-left";
-        this.f = null;
-        this.o = m(a.size) ? a.size : null;
-        Ej.call(this, {
-            opacity: m(a.opacity) ? a.opacity : 1,
-            rotation: m(a.rotation) ? a.rotation : 0,
-            scale: m(a.scale) ? a.scale : 1,
-            snapToPixel: m(a.snapToPixel) ? a.snapToPixel : !0,
-            rotateWithView: m(a.rotateWithView) ? a.rotateWithView : !1
-        })
-    }
-    w(Fj, Ej);
-    l = Fj.prototype;
-    l.mb = function() {
-        if (null !== this.d) return this.d;
-        var a = this.e,
-            c = this.Xa();
-        if ("fraction" == this.g || "fraction" == this.i) {
-            if (null === c) return null;
-            a = this.e.slice();
-            "fraction" == this.g && (a[0] *= c[0]);
-            "fraction" == this.i && (a[1] *= c[1])
-        }
-        if ("top-left" != this.a) {
-            if (null === c) return null;
-            a === this.e && (a = this.e.slice());
-            if ("top-right" == this.a || "bottom-right" == this.a) a[0] = -a[0] + c[0];
-            if ("bottom-left" == this.a || "bottom-right" == this.a) a[1] = -a[1] + c[1]
-        }
-        return this.d = a
-    };
-    l.Lb = function() {
-        return this.b.b
-    };
-    l.Dd = function() {
-        return this.b.a
-    };
-    l.gd = function() {
-        return this.b.c
-    };
-    l.he = function() {
-        var a = this.b;
-        if (null === a.e)
-            if (a.i) {
-                var c = a.a[0],
-                    d = a.a[1],
-                    e = ai(c, d);
-                e.fillRect(0, 0, c, d);
-                a.e = e.canvas
-            } else a.e = a.b;
-        return a.e
-    };
-    l.rb = function() {
-        if (null !== this.f) return this.f;
-        var a = this.p;
-        if ("top-left" != this.c) {
-            var c = this.Xa(),
-                d = this.b.a;
-            if (null === c || null === d) return null;
-            a = a.slice();
-            if ("top-right" == this.c || "bottom-right" == this.c) a[0] = d[0] - c[0] - a[0];
-            if ("bottom-left" == this.c || "bottom-right" == this.c) a[1] = d[1] - c[1] - a[1]
-        }
-        return this.f = a
-    };
-    l.Bm = function() {
-        return this.b.f
-    };
-    l.Xa = function() {
-        return null === this.o ? this.b.a : this.o
-    };
-    l.$e = function(a, c) {
-        return x(this.b, "change", a, !1, c)
-    };
-    l.load = function() {
-        this.b.load()
-    };
-    l.xf = function(a, c) {
-        Vc(this.b, "change", a, !1, c)
-    };
-
-    function Hj(a, c, d, e, f) {
-        $c.call(this);
-        this.e = null;
-        this.b = null === a ? new Image : a;
-        null !== e && (this.b.crossOrigin = e);
-        this.d = null;
-        this.c = f;
-        this.a = d;
-        this.f = c;
-        this.i = !1
-    }
-    w(Hj, $c);
-    Hj.prototype.g = function() {
-        this.c = 3;
-        Sa(this.d, Wc);
-        this.d = null;
-        this.dispatchEvent("change")
-    };
-    Hj.prototype.q = function() {
-        this.c = 2;
-        this.a = [this.b.width, this.b.height];
-        Sa(this.d, Wc);
-        this.d = null;
-        var a = ai(1, 1);
-        a.drawImage(this.b, 0, 0);
-        try {
-            a.getImageData(0, 0, 1, 1)
-        } catch (c) {
-            this.i = !0
-        }
-        this.dispatchEvent("change")
-    };
-    Hj.prototype.load = function() {
-        if (0 == this.c) {
-            this.c = 1;
-            this.d = [Uc(this.b, "error", this.g, !1, this), Uc(this.b, "load", this.q, !1, this)];
-            try {
-                this.b.src = this.f
-            } catch (a) {
-                this.g()
-            }
-        }
-    };
-
-    function Gj() {
-        this.b = {};
-        this.a = 0
-    }
-    da(Gj);
-    Gj.prototype.clear = function() {
-        this.b = {};
-        this.a = 0
-    };
-    Gj.prototype.get = function(a, c) {
-        var d = c + ":" + a;
-        return d in this.b ? this.b[d] : null
-    };
-    Gj.prototype.set = function(a, c, d) {
-        this.b[c + ":" + a] = d;
-        ++this.a
-    };
-
-    function Ij(a, c) {
-        mc.call(this);
-        this.g = c;
-        this.c = null;
-        this.f = {};
-        this.o = {}
-    }
-    w(Ij, mc);
-
-    function Jj(a) {
-        var c = a.viewState,
-            d = a.coordinateToPixelMatrix;
-        qj(d, a.size[0] / 2, a.size[1] / 2, 1 / c.resolution, -1 / c.resolution, -c.rotation, -c.center[0], -c.center[1]);
-        Fd(d, a.pixelToCoordinateMatrix)
-    }
-    l = Ij.prototype;
-    l.O = function() {
-        pb(this.f, qc);
-        Ij.S.O.call(this)
-    };
-
-    function Kj() {
-        var a = Gj.Ia();
-        if (32 < a.a) {
-            var c = 0,
-                d, e;
-            for (d in a.b) {
-                e = a.b[d];
-                var f;
-                if (f = 0 === (c++ & 3)) Bc(e) ? e = bd(e, void 0, void 0) : (e = Qc(e), e = !!e && Kc(e, void 0, void 0)), f = !e;
-                f && (delete a.b[d], --a.a)
-            }
-        }
-    }
-    l.ef = function(a, c, d, e, f, g) {
-        function h(a) {
-            var c = ma(a).toString();
-            if (!(c in r)) return r[c] = !0, d.call(e, a, null)
-        }
-        var k, n = c.viewState,
-            p = n.resolution,
-            q = n.rotation,
-            r = {},
-            t = n.projection,
-            n = a;
-        if (t.c) {
-            var u = t.G(),
-                t = ie(u);
-            k = a[0];
-            if (k < u[0] || k > u[2]) n = Math.ceil((u[0] - k) / t), n = [k + t * n, a[1]]
-        }
-        if (null !== this.c && (k = this.c.c(n, p, q, {}, h))) return k;
-        q = c.layerStatesArray;
-        for (t = q.length - 1; 0 <= t; --t)
-            if (k = q[t], u = k.layer, oj(k, p) && f.call(g, u) && (k = Lj(this, u).Pa(Cg(u.da()) ? n : a, c, d, e))) return k
-    };
-    l.Jg = function(a, c, d, e, f, g) {
-        var h, k = c.viewState,
-            n = k.resolution,
-            k = k.rotation;
-        if (null !== this.c) {
-            var p = this.g.ka(a);
-            if (this.c.c(p, n, k, {}, Gg) && (h = d.call(e, null))) return h
-        }
-        k = c.layerStatesArray;
-        for (p = k.length - 1; 0 <= p; --p) {
-            h = k[p];
-            var q = h.layer;
-            if (oj(h, n) && f.call(g, q) && (h = Lj(this, q).dc(a, c, d, e))) return h
-        }
-    };
-    l.Kg = function(a, c, d, e) {
-        a = this.ef(a, c, Gg, this, d, e);
-        return m(a)
-    };
-
-    function Lj(a, c) {
-        var d = ma(c).toString();
-        if (d in a.f) return a.f[d];
-        var e = a.Ke(c);
-        a.f[d] = e;
-        a.o[d] = x(e, "change", a.Tj, !1, a);
-        return e
-    }
-    l.Tj = function() {
-        this.g.render()
-    };
-    l.ue = ca;
-    l.Pn = function(a, c) {
-        for (var d in this.f)
-            if (!(null !== c && d in c.layerStates)) {
-                var e = d,
-                    f = this.f[e];
-                delete this.f[e];
-                Wc(this.o[e]);
-                delete this.o[e];
-                qc(f)
-            }
-    };
-
-    function Mj(a, c) {
-        for (var d in a.f)
-            if (!(d in c.layerStates)) {
-                c.postRenderFunctions.push(ra(a.Pn, a));
-                break
-            }
-    };
-
-    function Nj(a, c) {
-        this.g = a;
-        this.e = c;
-        this.b = [];
-        this.a = [];
-        this.c = {}
-    }
-    Nj.prototype.clear = function() {
-        this.b.length = 0;
-        this.a.length = 0;
-        yb(this.c)
-    };
-
-    function Oj(a) {
-        var c = a.b,
-            d = a.a,
-            e = c[0];
-        1 == c.length ? (c.length = 0, d.length = 0) : (c[0] = c.pop(), d[0] = d.pop(), Pj(a, 0));
-        c = a.e(e);
-        delete a.c[c];
-        return e
-    }
-
-    function Dj(a, c) {
-        var d = a.g(c);
-        Infinity != d && (a.b.push(c), a.a.push(d), a.c[a.e(c)] = !0, Qj(a, 0, a.b.length - 1))
-    }
-    Nj.prototype.Tb = function() {
-        return this.b.length
-    };
-    Nj.prototype.la = function() {
-        return 0 === this.b.length
-    };
-
-    function Pj(a, c) {
-        for (var d = a.b, e = a.a, f = d.length, g = d[c], h = e[c], k = c; c < f >> 1;) {
-            var n = 2 * c + 1,
-                p = 2 * c + 2,
-                n = p < f && e[p] < e[n] ? p : n;
-            d[c] = d[n];
-            e[c] = e[n];
-            c = n
-        }
-        d[c] = g;
-        e[c] = h;
-        Qj(a, k, c)
-    }
-
-    function Qj(a, c, d) {
-        var e = a.b;
-        a = a.a;
-        for (var f = e[d], g = a[d]; d > c;) {
-            var h = d - 1 >> 1;
-            if (a[h] > g) e[d] = e[h], a[d] = a[h], d = h;
-            else break
-        }
-        e[d] = f;
-        a[d] = g
-    }
-
-    function Rj(a) {
-        var c = a.g,
-            d = a.b,
-            e = a.a,
-            f = 0,
-            g = d.length,
-            h, k, n;
-        for (k = 0; k < g; ++k) h = d[k], n = c(h), Infinity == n ? delete a.c[a.e(h)] : (e[f] = n, d[f++] = h);
-        d.length = f;
-        e.length = f;
-        for (c = (a.b.length >> 1) - 1; 0 <= c; c--) Pj(a, c)
-    };
-
-    function Sj(a, c) {
-        Nj.call(this, function(c) {
-            return a.apply(null, c)
-        }, function(a) {
-            return a[0].gb()
-        });
-        this.i = c;
-        this.d = 0
-    }
-    w(Sj, Nj);
-    Sj.prototype.f = function(a) {
-        a = a.target;
-        var c = a.state;
-        if (2 === c || 3 === c || 4 === c) Vc(a, "change", this.f, !1, this), --this.d, this.i()
-    };
-
-    function Tj(a, c, d) {
-        this.d = a;
-        this.c = c;
-        this.f = d;
-        this.b = [];
-        this.a = this.e = 0
-    }
-    Tj.prototype.update = function(a, c) {
-        this.b.push(a, c, ua())
-    };
-
-    function Uj(a, c) {
-        var d = a.d,
-            e = a.a,
-            f = a.c - e,
-            g = Vj(a);
-        return Ze({
-            source: c,
-            duration: g,
-            easing: function(a) {
-                return e * (Math.exp(d * a * g) - 1) / f
-            }
-        })
-    }
-
-    function Vj(a) {
-        return Math.log(a.c / a.a) / a.d
-    };
-
-    function Wj(a) {
-        fd.call(this);
-        this.l = null;
-        this.d(!0);
-        this.handleEvent = a.handleEvent
-    }
-    w(Wj, fd);
-    Wj.prototype.c = function() {
-        return this.get("active")
-    };
-    Wj.prototype.d = function(a) {
-        this.set("active", a)
-    };
-    Wj.prototype.setMap = function(a) {
-        this.l = a
-    };
-
-    function Xj(a, c, d, e, f) {
-        if (null != d) {
-            var g = c.Da(),
-                h = c.Ca();
-            m(g) && m(h) && m(f) && 0 < f && (a.Ha($e({
-                rotation: g,
-                duration: f,
-                easing: Ve
-            })), m(e) && a.Ha(Ze({
-                source: h,
-                duration: f,
-                easing: Ve
-            })));
-            c.rotate(d, e)
-        }
-    }
-
-    function Yj(a, c, d, e, f) {
-        var g = c.ya();
-        d = c.constrainResolution(g, d, 0);
-        Zj(a, c, d, e, f)
-    }
-
-    function Zj(a, c, d, e, f) {
-        if (null != d) {
-            var g = c.ya(),
-                h = c.Ca();
-            m(g) && m(h) && m(f) && 0 < f && (a.Ha(af({
-                resolution: g,
-                duration: f,
-                easing: Ve
-            })), m(e) && a.Ha(Ze({
-                source: h,
-                duration: f,
-                easing: Ve
-            })));
-            if (null != e) {
-                var k;
-                a = c.Ca();
-                f = c.ya();
-                m(a) && m(f) && (k = [e[0] - d * (e[0] - a[0]) / f, e[1] - d * (e[1] - a[1]) / f]);
-                c.Na(k)
-            }
-            c.tb(d)
-        }
-    };
-
-    function ak(a) {
-        a = m(a) ? a : {};
-        this.a = m(a.delta) ? a.delta : 1;
-        Wj.call(this, {
-            handleEvent: bk
-        });
-        this.e = m(a.duration) ? a.duration : 250
-    }
-    w(ak, Wj);
-
-    function bk(a) {
-        var c = !1,
-            d = a.b;
-        if (a.type == dj) {
-            var c = a.map,
-                e = a.coordinate,
-                d = d.d ? -this.a : this.a,
-                f = c.R();
-            Yj(c, f, d, e, this.e);
-            a.preventDefault();
-            c = !0
-        }
-        return !c
-    };
-
-    function ck(a) {
-        a = a.b;
-        return a.a && !a.g && a.d
-    }
-
-    function dk(a) {
-        return "pointermove" == a.type
-    }
-
-    function ek(a) {
-        return a.type == ej
-    }
-
-    function fk(a) {
-        a = a.b;
-        return !a.a && !a.g && !a.d
-    }
-
-    function gk(a) {
-        a = a.b;
-        return !a.a && !a.g && a.d
-    }
-
-    function hk(a) {
-        a = a.b.target.tagName;
-        return "INPUT" !== a && "SELECT" !== a && "TEXTAREA" !== a
-    }
-
-    function ik(a) {
-        return 1 == a.a.pointerId
-    };
-
-    function jk(a) {
-        a = m(a) ? a : {};
-        Wj.call(this, {
-            handleEvent: m(a.handleEvent) ? a.handleEvent : kk
-        });
-        this.vb = m(a.handleDownEvent) ? a.handleDownEvent : Fg;
-        this.wb = m(a.handleDragEvent) ? a.handleDragEvent : ca;
-        this.xb = m(a.handleMoveEvent) ? a.handleMoveEvent : ca;
-        this.sc = m(a.handleUpEvent) ? a.handleUpEvent : Fg;
-        this.o = !1;
-        this.J = {};
-        this.e = []
-    }
-    w(jk, Wj);
-
-    function lk(a) {
-        for (var c = a.length, d = 0, e = 0, f = 0; f < c; f++) d += a[f].clientX, e += a[f].clientY;
-        return [d / c, e / c]
-    }
-
-    function kk(a) {
-        if (!(a instanceof $i)) return !0;
-        var c = !1,
-            d = a.type;
-        if (d === ij || d === kj || d === gj) d = a.a, a.type == gj ? delete this.J[d.pointerId] : a.type == ij ? this.J[d.pointerId] = d : d.pointerId in this.J && (this.J[d.pointerId] = d), this.e = sb(this.J);
-        this.o && (a.type == kj ? this.wb(a) : a.type == gj && (this.o = this.sc(a)));
-        a.type == ij ? (this.o = a = this.vb(a), c = this.nc(a)) : a.type == jj && this.xb(a);
-        return !c
-    }
-    jk.prototype.nc = Ig;
-
-    function mk(a) {
-        jk.call(this, {
-            handleDownEvent: nk,
-            handleDragEvent: ok,
-            handleUpEvent: pk
-        });
-        a = m(a) ? a : {};
-        this.a = a.kinetic;
-        this.f = this.g = null;
-        this.n = m(a.condition) ? a.condition : fk;
-        this.i = !1
-    }
-    w(mk, jk);
-
-    function ok(a) {
-        var c = lk(this.e);
-        this.a && this.a.update(c[0], c[1]);
-        if (null !== this.f) {
-            var d = this.f[0] - c[0],
-                e = c[1] - this.f[1];
-            a = a.map;
-            var f = a.R(),
-                g = Se(f),
-                e = d = [d, e],
-                h = g.resolution;
-            e[0] *= h;
-            e[1] *= h;
-            rd(d, g.rotation);
-            md(d, g.center);
-            d = f.xd(d);
-            a.render();
-            f.Na(d)
-        }
-        this.f = c
-    }
-
-    function pk(a) {
-        a = a.map;
-        var c = a.R();
-        if (0 === this.e.length) {
-            var d;
-            if (d = !this.i && this.a)
-                if (d = this.a, 6 > d.b.length) d = !1;
-                else {
-                    var e = ua() - d.f,
-                        f = d.b.length - 3;
-                    if (d.b[f + 2] < e) d = !1;
-                    else {
-                        for (var g = f - 3; 0 < g && d.b[g + 2] > e;) g -= 3;
-                        var e = d.b[f + 2] - d.b[g + 2],
-                            h = d.b[f] - d.b[g],
-                            f = d.b[f + 1] - d.b[g + 1];
-                        d.e = Math.atan2(f, h);
-                        d.a = Math.sqrt(h * h + f * f) / e;
-                        d = d.a > d.c
-                    }
-                }
-            d && (d = this.a, d = (d.c - d.a) / d.d, f = this.a.e, g = c.Ca(), this.g = Uj(this.a, g), a.Ha(this.g), g = a.ta(g), d = a.ka([g[0] - d * Math.cos(f), g[1] - d * Math.sin(f)]), d = c.xd(d), c.Na(d));
-            Ue(c, -1);
-            a.render();
-            return !1
-        }
-        this.f = null;
-        return !0
-    }
-
-    function nk(a) {
-        if (0 < this.e.length && this.n(a)) {
-            var c = a.map,
-                d = c.R();
-            this.f = null;
-            this.o || Ue(d, 1);
-            c.render();
-            null !== this.g && Za(c.H, this.g) && (d.Na(a.frameState.viewState.center), this.g = null);
-            this.a && (a = this.a, a.b.length = 0, a.e = 0, a.a = 0);
-            this.i = 1 < this.e.length;
-            return !0
-        }
-        return !1
-    }
-    mk.prototype.nc = Fg;
-
-    function qk(a) {
-        a = m(a) ? a : {};
-        jk.call(this, {
-            handleDownEvent: rk,
-            handleDragEvent: sk,
-            handleUpEvent: tk
-        });
-        this.f = m(a.condition) ? a.condition : ck;
-        this.a = void 0;
-        this.g = m(a.duration) ? a.duration : 250
-    }
-    w(qk, jk);
-
-    function sk(a) {
-        if (ik(a)) {
-            var c = a.map,
-                d = c.xa();
-            a = a.pixel;
-            d = Math.atan2(d[1] / 2 - a[1], a[0] - d[0] / 2);
-            if (m(this.a)) {
-                a = d - this.a;
-                var e = c.R(),
-                    f = e.Da();
-                c.render();
-                Xj(c, e, f - a)
-            }
-            this.a = d
-        }
-    }
-
-    function tk(a) {
-        if (!ik(a)) return !0;
-        a = a.map;
-        var c = a.R();
-        Ue(c, -1);
-        var d = c.Da(),
-            e = this.g,
-            d = c.constrainRotation(d, 0);
-        Xj(a, c, d, void 0, e);
-        return !1
-    }
-
-    function rk(a) {
-        return ik(a) && zc(a.b) && this.f(a) ? (a = a.map, Ue(a.R(), 1), a.render(), this.a = void 0, !0) : !1
-    }
-    qk.prototype.nc = Fg;
-
-    function uk() {
-        fd.call(this);
-        this.o = Kd();
-        this.n = -1;
-        this.f = {};
-        this.l = this.g = 0
-    }
-    w(uk, fd);
-    uk.prototype.e = function(a, c) {
-        var d = m(c) ? c : [NaN, NaN];
-        this.Sa(a[0], a[1], d, Infinity);
-        return d
-    };
-    uk.prototype.Jb = Fg;
-    uk.prototype.G = function(a) {
-        this.n != this.b && (this.o = this.wd(this.o), this.n = this.b);
-        var c = this.o;
-        m(a) ? (a[0] = c[0], a[1] = c[1], a[2] = c[2], a[3] = c[3]) : a = c;
-        return a
-    };
-    uk.prototype.transform = function(a, c) {
-        this.qa(Je(a, c));
-        return this
-    };
-
-    function vk(a, c, d, e, f, g) {
-        var h = f[0],
-            k = f[1],
-            n = f[4],
-            p = f[5],
-            q = f[12];
-        f = f[13];
-        for (var r = m(g) ? g : [], t = 0; c < d; c += e) {
-            var u = a[c],
-                A = a[c + 1];
-            r[t++] = h * u + n * A + q;
-            r[t++] = k * u + p * A + f
-        }
-        m(g) && r.length != t && (r.length = t);
-        return r
-    };
-
-    function wk() {
-        uk.call(this);
-        this.a = "XY";
-        this.s = 2;
-        this.j = null
-    }
-    w(wk, uk);
-
-    function xk(a) {
-        if ("XY" == a) return 2;
-        if ("XYZ" == a || "XYM" == a) return 3;
-        if ("XYZM" == a) return 4
-    }
-    l = wk.prototype;
-    l.Jb = Fg;
-    l.wd = function(a) {
-        var c = this.j,
-            d = this.j.length,
-            e = this.s;
-        a = Nd(Infinity, Infinity, -Infinity, -Infinity, a);
-        return Xd(a, c, 0, d, e)
-    };
-    l.ob = function() {
-        return this.j.slice(0, this.s)
-    };
-    l.pb = function() {
-        return this.j.slice(this.j.length - this.s)
-    };
-    l.qb = function() {
-        return this.a
-    };
-    l.Ve = function(a) {
-        this.l != this.b && (yb(this.f), this.g = 0, this.l = this.b);
-        if (0 > a || 0 !== this.g && a <= this.g) return this;
-        var c = a.toString();
-        if (this.f.hasOwnProperty(c)) return this.f[c];
-        var d = this.xc(a);
-        if (d.j.length < this.j.length) return this.f[c] = d;
-        this.g = a;
-        return this
-    };
-    l.xc = function() {
-        return this
-    };
-
-    function yk(a, c, d) {
-        a.s = xk(c);
-        a.a = c;
-        a.j = d
-    }
-
-    function zk(a, c, d, e) {
-        if (m(c)) d = xk(c);
-        else {
-            for (c = 0; c < e; ++c) {
-                if (0 === d.length) {
-                    a.a = "XY";
-                    a.s = 2;
-                    return
-                }
-                d = d[0]
-            }
-            d = d.length;
-            c = 2 == d ? "XY" : 3 == d ? "XYZ" : 4 == d ? "XYZM" : void 0
-        }
-        a.a = c;
-        a.s = d
-    }
-    l.qa = function(a) {
-        null !== this.j && (a(this.j, this.j, this.s), this.k())
-    };
-    l.Oa = function(a, c) {
-        var d = this.j;
-        if (null !== d) {
-            var e = d.length,
-                f = this.s,
-                g = m(d) ? d : [],
-                h = 0,
-                k, n;
-            for (k = 0; k < e; k += f)
-                for (g[h++] = d[k] + a, g[h++] = d[k + 1] + c, n = k + 2; n < k + f; ++n) g[h++] = d[n];
-            m(d) && g.length != h && (g.length = h);
-            this.k()
-        }
-    };
-
-    function Ak(a, c, d, e) {
-        for (var f = 0, g = a[d - e], h = a[d - e + 1]; c < d; c += e) var k = a[c],
-            n = a[c + 1],
-            f = f + (h * k - g * n),
-            g = k,
-            h = n;
-        return f / 2
-    }
-
-    function Bk(a, c, d, e) {
-        var f = 0,
-            g, h;
-        g = 0;
-        for (h = d.length; g < h; ++g) {
-            var k = d[g],
-                f = f + Ak(a, c, k, e);
-            c = k
-        }
-        return f
-    };
-
-    function Ck(a, c, d, e, f, g) {
-        var h = f - d,
-            k = g - e;
-        if (0 !== h || 0 !== k) {
-            var n = ((a - d) * h + (c - e) * k) / (h * h + k * k);
-            1 < n ? (d = f, e = g) : 0 < n && (d += h * n, e += k * n)
-        }
-        return Dk(a, c, d, e)
-    }
-
-    function Dk(a, c, d, e) {
-        a = d - a;
-        c = e - c;
-        return a * a + c * c
-    };
-
-    function Ek(a, c, d, e, f, g, h) {
-        var k = a[c],
-            n = a[c + 1],
-            p = a[d] - k,
-            q = a[d + 1] - n;
-        if (0 !== p || 0 !== q)
-            if (g = ((f - k) * p + (g - n) * q) / (p * p + q * q), 1 < g) c = d;
-            else if (0 < g) {
-            for (f = 0; f < e; ++f) h[f] = Xb(a[c + f], a[d + f], g);
-            h.length = e;
-            return
-        }
-        for (f = 0; f < e; ++f) h[f] = a[c + f];
-        h.length = e
-    }
-
-    function Fk(a, c, d, e, f) {
-        var g = a[c],
-            h = a[c + 1];
-        for (c += e; c < d; c += e) {
-            var k = a[c],
-                n = a[c + 1],
-                g = Dk(g, h, k, n);
-            g > f && (f = g);
-            g = k;
-            h = n
-        }
-        return f
-    }
-
-    function Gk(a, c, d, e, f) {
-        var g, h;
-        g = 0;
-        for (h = d.length; g < h; ++g) {
-            var k = d[g];
-            f = Fk(a, c, k, e, f);
-            c = k
-        }
-        return f
-    }
-
-    function Hk(a, c, d, e, f, g, h, k, n, p, q) {
-        if (c == d) return p;
-        var r;
-        if (0 === f) {
-            r = Dk(h, k, a[c], a[c + 1]);
-            if (r < p) {
-                for (q = 0; q < e; ++q) n[q] = a[c + q];
-                n.length = e;
-                return r
-            }
-            return p
-        }
-        for (var t = m(q) ? q : [NaN, NaN], u = c + e; u < d;)
-            if (Ek(a, u - e, u, e, h, k, t), r = Dk(h, k, t[0], t[1]), r < p) {
-                p = r;
-                for (q = 0; q < e; ++q) n[q] = t[q];
-                n.length = e;
-                u += e
-            } else u += e * Math.max((Math.sqrt(r) - Math.sqrt(p)) / f | 0, 1);
-        if (g && (Ek(a, d - e, c, e, h, k, t), r = Dk(h, k, t[0], t[1]), r < p)) {
-            p = r;
-            for (q = 0; q < e; ++q) n[q] = t[q];
-            n.length = e
-        }
-        return p
-    }
-
-    function Ik(a, c, d, e, f, g, h, k, n, p, q) {
-        q = m(q) ? q : [NaN, NaN];
-        var r, t;
-        r = 0;
-        for (t = d.length; r < t; ++r) {
-            var u = d[r];
-            p = Hk(a, c, u, e, f, g, h, k, n, p, q);
-            c = u
-        }
-        return p
-    };
-
-    function Jk(a, c) {
-        var d = 0,
-            e, f;
-        e = 0;
-        for (f = c.length; e < f; ++e) a[d++] = c[e];
-        return d
-    }
-
-    function Kk(a, c, d, e) {
-        var f, g;
-        f = 0;
-        for (g = d.length; f < g; ++f) {
-            var h = d[f],
-                k;
-            for (k = 0; k < e; ++k) a[c++] = h[k]
-        }
-        return c
-    }
-
-    function Lk(a, c, d, e, f) {
-        f = m(f) ? f : [];
-        var g = 0,
-            h, k;
-        h = 0;
-        for (k = d.length; h < k; ++h) c = Kk(a, c, d[h], e), f[g++] = c;
-        f.length = g;
-        return f
-    };
-
-    function Mk(a, c, d, e, f) {
-        f = m(f) ? f : [];
-        for (var g = 0; c < d; c += e) f[g++] = a.slice(c, c + e);
-        f.length = g;
-        return f
-    }
-
-    function Nk(a, c, d, e, f) {
-        f = m(f) ? f : [];
-        var g = 0,
-            h, k;
-        h = 0;
-        for (k = d.length; h < k; ++h) {
-            var n = d[h];
-            f[g++] = Mk(a, c, n, e, f[g]);
-            c = n
-        }
-        f.length = g;
-        return f
-    };
-
-    function Ok(a, c, d, e, f, g, h) {
-        var k = (d - c) / e;
-        if (3 > k) {
-            for (; c < d; c += e) g[h++] = a[c], g[h++] = a[c + 1];
-            return h
-        }
-        var n = Array(k);
-        n[0] = 1;
-        n[k - 1] = 1;
-        d = [c, d - e];
-        for (var p = 0, q; 0 < d.length;) {
-            var r = d.pop(),
-                t = d.pop(),
-                u = 0,
-                A = a[t],
-                z = a[t + 1],
-                D = a[r],
-                B = a[r + 1];
-            for (q = t + e; q < r; q += e) {
-                var y = Ck(a[q], a[q + 1], A, z, D, B);
-                y > u && (p = q, u = y)
-            }
-            u > f && (n[(p - c) / e] = 1, t + e < p && d.push(t, p), p + e < r && d.push(p, r))
-        }
-        for (q = 0; q < k; ++q) n[q] && (g[h++] = a[c + q * e], g[h++] = a[c + q * e + 1]);
-        return h
-    }
-
-    function Pk(a, c, d, e, f, g, h, k) {
-        var n, p;
-        n = 0;
-        for (p = d.length; n < p; ++n) {
-            var q = d[n];
-            a: {
-                var r = a,
-                    t = q,
-                    u = e,
-                    A = f,
-                    z = g;
-                if (c != t) {
-                    var D = A * Math.round(r[c] / A),
-                        B = A * Math.round(r[c + 1] / A);
-                    c += u;
-                    z[h++] = D;
-                    z[h++] = B;
-                    var y = void 0,
-                        K = void 0;
-                    do
-                        if (y = A * Math.round(r[c] / A), K = A * Math.round(r[c + 1] / A), c += u, c == t) {
-                            z[h++] = y;
-                            z[h++] = K;
-                            break a
-                        }
-                    while (y == D && K == B);
-                    for (; c < t;) {
-                        var J, H;
-                        J = A * Math.round(r[c] / A);
-                        H = A * Math.round(r[c + 1] / A);
-                        c += u;
-                        if (J != y || H != K) {
-                            var P = y - D,
-                                sa = K - B,
-                                Oa = J - D,
-                                N = H - B;
-                            P * N == sa * Oa && (0 > P && Oa < P || P == Oa || 0 < P && Oa > P) && (0 > sa && N < sa || sa == N || 0 < sa && N > sa) || (z[h++] = y, z[h++] = K, D = y, B = K);
-                            y = J;
-                            K = H
-                        }
-                    }
-                    z[h++] = y;
-                    z[h++] = K
-                }
-            }
-            k.push(h);
-            c = q
-        }
-        return h
-    };
-
-    function Qk(a, c) {
-        wk.call(this);
-        this.c = this.i = -1;
-        this.W(a, c)
-    }
-    w(Qk, wk);
-    l = Qk.prototype;
-    l.clone = function() {
-        var a = new Qk(null);
-        Rk(a, this.a, this.j.slice());
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        if (e < Qd(this.G(), a, c)) return e;
-        this.c != this.b && (this.i = Math.sqrt(Fk(this.j, 0, this.j.length, this.s, 0)), this.c = this.b);
-        return Hk(this.j, 0, this.j.length, this.s, this.i, !0, a, c, d, e)
-    };
-    l.rl = function() {
-        return Ak(this.j, 0, this.j.length, this.s)
-    };
-    l.K = function() {
-        return Mk(this.j, 0, this.j.length, this.s)
-    };
-    l.xc = function(a) {
-        var c = [];
-        c.length = Ok(this.j, 0, this.j.length, this.s, a, c, 0);
-        a = new Qk(null);
-        Rk(a, "XY", c);
-        return a
-    };
-    l.M = function() {
-        return "LinearRing"
-    };
-    l.W = function(a, c) {
-        null === a ? Rk(this, "XY", null) : (zk(this, c, a, 1), null === this.j && (this.j = []), this.j.length = Kk(this.j, 0, a, this.s), this.k())
-    };
-
-    function Rk(a, c, d) {
-        yk(a, c, d);
-        a.k()
-    };
-
-    function E(a, c) {
-        wk.call(this);
-        this.W(a, c)
-    }
-    w(E, wk);
-    l = E.prototype;
-    l.clone = function() {
-        var a = new E(null);
-        Sk(a, this.a, this.j.slice());
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        var f = this.j;
-        a = Dk(a, c, f[0], f[1]);
-        if (a < e) {
-            e = this.s;
-            for (c = 0; c < e; ++c) d[c] = f[c];
-            d.length = e;
-            return a
-        }
-        return e
-    };
-    l.K = function() {
-        return null === this.j ? [] : this.j.slice()
-    };
-    l.wd = function(a) {
-        return Ud(this.j, a)
-    };
-    l.M = function() {
-        return "Point"
-    };
-    l.ra = function(a) {
-        return Sd(a, this.j[0], this.j[1])
-    };
-    l.W = function(a, c) {
-        null === a ? Sk(this, "XY", null) : (zk(this, c, a, 0), null === this.j && (this.j = []), this.j.length = Jk(this.j, a), this.k())
-    };
-
-    function Sk(a, c, d) {
-        yk(a, c, d);
-        a.k()
-    };
-
-    function Tk(a, c, d, e, f) {
-        return !Yd(f, function(f) {
-            return !Uk(a, c, d, e, f[0], f[1])
-        })
-    }
-
-    function Uk(a, c, d, e, f, g) {
-        for (var h = !1, k = a[d - e], n = a[d - e + 1]; c < d; c += e) {
-            var p = a[c],
-                q = a[c + 1];
-            n > g != q > g && f < (p - k) * (g - n) / (q - n) + k && (h = !h);
-            k = p;
-            n = q
-        }
-        return h
-    }
-
-    function Vk(a, c, d, e, f, g) {
-        if (0 === d.length || !Uk(a, c, d[0], e, f, g)) return !1;
-        var h;
-        c = 1;
-        for (h = d.length; c < h; ++c)
-            if (Uk(a, d[c - 1], d[c], e, f, g)) return !1;
-        return !0
-    };
-
-    function Wk(a, c, d, e, f, g, h) {
-        var k, n, p, q, r, t = f[g + 1],
-            u = [],
-            A = d[0];
-        p = a[A - e];
-        r = a[A - e + 1];
-        for (k = c; k < A; k += e) {
-            q = a[k];
-            n = a[k + 1];
-            if (t <= r && n <= t || r <= t && t <= n) p = (t - r) / (n - r) * (q - p) + p, u.push(p);
-            p = q;
-            r = n
-        }
-        A = NaN;
-        r = -Infinity;
-        u.sort();
-        p = u[0];
-        k = 1;
-        for (n = u.length; k < n; ++k) {
-            q = u[k];
-            var z = Math.abs(q - p);
-            z > r && (p = (p + q) / 2, Vk(a, c, d, e, p, t) && (A = p, r = z));
-            p = q
-        }
-        isNaN(A) && (A = f[g]);
-        return m(h) ? (h.push(A, t), h) : [A, t]
-    };
-
-    function Xk(a, c, d, e, f, g) {
-        for (var h = [a[c], a[c + 1]], k = [], n; c + e < d; c += e) {
-            k[0] = a[c + e];
-            k[1] = a[c + e + 1];
-            if (n = f.call(g, h, k)) return n;
-            h[0] = k[0];
-            h[1] = k[1]
-        }
-        return !1
-    };
-
-    function Yk(a, c, d, e, f) {
-        var g = Xd(Kd(), a, c, d, e);
-        return he(f, g) ? Rd(f, g) || g[0] >= f[0] && g[2] <= f[2] || g[1] >= f[1] && g[3] <= f[3] ? !0 : Xk(a, c, d, e, function(a, c) {
-            var d = !1,
-                e = Td(f, a),
-                g = Td(f, c);
-            if (1 === e || 1 === g) d = !0;
-            else {
-                var r = f[0],
-                    t = f[1],
-                    u = f[2],
-                    A = f[3],
-                    z = c[0],
-                    D = c[1],
-                    B = (D - a[1]) / (z - a[0]);
-                g & 2 && !(e & 2) && (d = z - (D - A) / B, d = d >= r && d <= u);
-                d || !(g & 4) || e & 4 || (d = D - (z - u) * B, d = d >= t && d <= A);
-                d || !(g & 8) || e & 8 || (d = z - (D - t) / B, d = d >= r && d <= u);
-                d || !(g & 16) || e & 16 || (d = D - (z - r) * B, d = d >= t && d <= A)
-            }
-            return d
-        }) : !1
-    }
-
-    function Zk(a, c, d, e, f) {
-        var g = d[0];
-        if (!(Yk(a, c, g, e, f) || Uk(a, c, g, e, f[0], f[1]) || Uk(a, c, g, e, f[0], f[3]) || Uk(a, c, g, e, f[2], f[1]) || Uk(a, c, g, e, f[2], f[3]))) return !1;
-        if (1 === d.length) return !0;
-        c = 1;
-        for (g = d.length; c < g; ++c)
-            if (Tk(a, d[c - 1], d[c], e, f)) return !1;
-        return !0
-    };
-
-    function $k(a, c, d, e) {
-        for (var f = 0, g = a[d - e], h = a[d - e + 1]; c < d; c += e) var k = a[c],
-            n = a[c + 1],
-            f = f + (k - g) * (n + h),
-            g = k,
-            h = n;
-        return 0 < f
-    }
-
-    function al(a, c, d, e) {
-        var f = 0;
-        e = m(e) ? e : !1;
-        var g, h;
-        g = 0;
-        for (h = c.length; g < h; ++g) {
-            var k = c[g],
-                f = $k(a, f, k, d);
-            if (0 === g) {
-                if (e && f || !e && !f) return !1
-            } else if (e && !f || !e && f) return !1;
-            f = k
-        }
-        return !0
-    }
-
-    function bl(a, c, d, e, f) {
-        f = m(f) ? f : !1;
-        var g, h;
-        g = 0;
-        for (h = d.length; g < h; ++g) {
-            var k = d[g],
-                n = $k(a, c, k, e);
-            if (0 === g ? f && n || !f && !n : f && !n || !f && n)
-                for (var n = a, p = k, q = e; c < p - q;) {
-                    var r;
-                    for (r = 0; r < q; ++r) {
-                        var t = n[c + r];
-                        n[c + r] = n[p - q + r];
-                        n[p - q + r] = t
-                    }
-                    c += q;
-                    p -= q
-                }
-            c = k
-        }
-        return c
-    }
-
-    function cl(a, c, d, e) {
-        var f = 0,
-            g, h;
-        g = 0;
-        for (h = c.length; g < h; ++g) f = bl(a, f, c[g], d, e);
-        return f
-    };
-
-    function F(a, c) {
-        wk.call(this);
-        this.c = [];
-        this.p = -1;
-        this.H = null;
-        this.N = this.J = this.L = -1;
-        this.i = null;
-        this.W(a, c)
-    }
-    w(F, wk);
-    l = F.prototype;
-    l.wi = function(a) {
-        null === this.j ? this.j = a.j.slice() : db(this.j, a.j);
-        this.c.push(this.j.length);
-        this.k()
-    };
-    l.clone = function() {
-        var a = new F(null);
-        dl(a, this.a, this.j.slice(), this.c.slice());
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        if (e < Qd(this.G(), a, c)) return e;
-        this.J != this.b && (this.L = Math.sqrt(Gk(this.j, 0, this.c, this.s, 0)), this.J = this.b);
-        return Ik(this.j, 0, this.c, this.s, this.L, !0, a, c, d, e)
-    };
-    l.Jb = function(a, c) {
-        return Vk(el(this), 0, this.c, this.s, a, c)
-    };
-    l.ul = function() {
-        return Bk(el(this), 0, this.c, this.s)
-    };
-    l.K = function(a) {
-        var c;
-        m(a) ? (c = el(this).slice(), bl(c, 0, this.c, this.s, a)) : c = this.j;
-        return Nk(c, 0, this.c, this.s)
-    };
-
-    function fl(a) {
-        if (a.p != a.b) {
-            var c = ce(a.G());
-            a.H = Wk(el(a), 0, a.c, a.s, c, 0);
-            a.p = a.b
-        }
-        return a.H
-    }
-    l.cj = function() {
-        return new E(fl(this))
-    };
-    l.ij = function() {
-        return this.c.length
-    };
-    l.hj = function(a) {
-        if (0 > a || this.c.length <= a) return null;
-        var c = new Qk(null);
-        Rk(c, this.a, this.j.slice(0 === a ? 0 : this.c[a - 1], this.c[a]));
-        return c
-    };
-    l.Ed = function() {
-        var a = this.a,
-            c = this.j,
-            d = this.c,
-            e = [],
-            f = 0,
-            g, h;
-        g = 0;
-        for (h = d.length; g < h; ++g) {
-            var k = d[g],
-                n = new Qk(null);
-            Rk(n, a, c.slice(f, k));
-            e.push(n);
-            f = k
-        }
-        return e
-    };
-
-    function el(a) {
-        if (a.N != a.b) {
-            var c = a.j;
-            al(c, a.c, a.s) ? a.i = c : (a.i = c.slice(), a.i.length = bl(a.i, 0, a.c, a.s));
-            a.N = a.b
-        }
-        return a.i
-    }
-    l.xc = function(a) {
-        var c = [],
-            d = [];
-        c.length = Pk(this.j, 0, this.c, this.s, Math.sqrt(a), c, 0, d);
-        a = new F(null);
-        dl(a, "XY", c, d);
-        return a
-    };
-    l.M = function() {
-        return "Polygon"
-    };
-    l.ra = function(a) {
-        return Zk(el(this), 0, this.c, this.s, a)
-    };
-    l.W = function(a, c) {
-        if (null === a) dl(this, "XY", null, this.c);
-        else {
-            zk(this, c, a, 2);
-            null === this.j && (this.j = []);
-            var d = Lk(this.j, 0, a, this.s, this.c);
-            this.j.length = 0 === d.length ? 0 : d[d.length - 1];
-            this.k()
-        }
-    };
-
-    function dl(a, c, d, e) {
-        yk(a, c, d);
-        a.c = e;
-        a.k()
-    }
-
-    function gl(a, c, d, e) {
-        var f = m(e) ? e : 32;
-        e = [];
-        var g;
-        for (g = 0; g < f; ++g) db(e, a.offset(c, d, 2 * Math.PI * g / f));
-        e.push(e[0], e[1]);
-        a = new F(null);
-        dl(a, "XY", e, [e.length]);
-        return a
-    };
-
-    function hl() {};
-
-    function il(a, c, d, e, f, g, h) {
-        rc.call(this, a, c);
-        this.vectorContext = d;
-        this.b = e;
-        this.frameState = f;
-        this.context = g;
-        this.glContext = h
-    }
-    w(il, rc);
-
-    function jl(a) {
-        this.c = this.a = this.e = this.d = this.b = null;
-        this.f = a
-    }
-    w(jl, mc);
-
-    function kl(a) {
-        var c = a.e,
-            d = a.a;
-        a = Ua([c, [c[0], d[1]], d, [d[0], c[1]]], a.b.ka, a.b);
-        a[4] = a[0].slice();
-        return new F([a])
-    }
-    jl.prototype.O = function() {
-        this.setMap(null)
-    };
-    jl.prototype.g = function(a) {
-        var c = this.c,
-            d = this.f;
-        a.vectorContext.tc(Infinity, function(a) {
-            a.Aa(d.e, d.c);
-            a.Ba(d.a);
-            a.Rb(c, null)
-        })
-    };
-    jl.prototype.Q = function() {
-        return this.c
-    };
-
-    function ll(a) {
-        null === a.b || null === a.e || null === a.a || a.b.render()
-    }
-    jl.prototype.setMap = function(a) {
-        null !== this.d && (Wc(this.d), this.d = null, this.b.render(), this.b = null);
-        this.b = a;
-        null !== this.b && (this.d = x(a, "postcompose", this.g, !1, this), ll(this))
-    };
-
-    function ml(a, c) {
-        rc.call(this, a);
-        this.coordinate = c
-    }
-    w(ml, rc);
-
-    function nl(a) {
-        jk.call(this, {
-            handleDownEvent: pl,
-            handleDragEvent: ql,
-            handleUpEvent: rl
-        });
-        a = m(a) ? a : {};
-        this.f = new jl(m(a.style) ? a.style : null);
-        this.a = null;
-        this.i = m(a.condition) ? a.condition : Gg
-    }
-    w(nl, jk);
-
-    function ql(a) {
-        if (ik(a)) {
-            var c = this.f;
-            a = a.pixel;
-            c.e = this.a;
-            c.a = a;
-            c.c = kl(c);
-            ll(c)
-        }
-    }
-    nl.prototype.Q = function() {
-        return this.f.Q()
-    };
-    nl.prototype.g = ca;
-
-    function rl(a) {
-        if (!ik(a)) return !0;
-        this.f.setMap(null);
-        var c = a.pixel[0] - this.a[0],
-            d = a.pixel[1] - this.a[1];
-        64 <= c * c + d * d && (this.g(a), this.dispatchEvent(new ml("boxend", a.coordinate)));
-        return !1
-    }
-
-    function pl(a) {
-        if (ik(a) && zc(a.b) && this.i(a)) {
-            this.a = a.pixel;
-            this.f.setMap(a.map);
-            var c = this.f,
-                d = this.a;
-            c.e = this.a;
-            c.a = d;
-            c.c = kl(c);
-            ll(c);
-            this.dispatchEvent(new ml("boxstart", a.coordinate));
-            return !0
-        }
-        return !1
-    };
-
-    function sl() {
-        this.a = -1
-    };
-
-    function tl() {
-        this.a = -1;
-        this.a = 64;
-        this.b = Array(4);
-        this.e = Array(this.a);
-        this.d = this.c = 0;
-        this.b[0] = 1732584193;
-        this.b[1] = 4023233417;
-        this.b[2] = 2562383102;
-        this.b[3] = 271733878;
-        this.d = this.c = 0
-    }
-    w(tl, sl);
-
-    function ul(a, c, d) {
-        d || (d = 0);
-        var e = Array(16);
-        if (ia(c))
-            for (var f = 0; 16 > f; ++f) e[f] = c.charCodeAt(d++) | c.charCodeAt(d++) << 8 | c.charCodeAt(d++) << 16 | c.charCodeAt(d++) << 24;
-        else
-            for (f = 0; 16 > f; ++f) e[f] = c[d++] | c[d++] << 8 | c[d++] << 16 | c[d++] << 24;
-        c = a.b[0];
-        d = a.b[1];
-        var f = a.b[2],
-            g = a.b[3],
-            h = 0,
-            h = c + (g ^ d & (f ^ g)) + e[0] + 3614090360 & 4294967295;
-        c = d + (h << 7 & 4294967295 | h >>> 25);
-        h = g + (f ^ c & (d ^ f)) + e[1] + 3905402710 & 4294967295;
-        g = c + (h << 12 & 4294967295 | h >>> 20);
-        h = f + (d ^ g & (c ^ d)) + e[2] + 606105819 & 4294967295;
-        f = g + (h << 17 & 4294967295 | h >>> 15);
-        h = d + (c ^ f & (g ^ c)) + e[3] + 3250441966 & 4294967295;
-        d = f + (h << 22 & 4294967295 | h >>> 10);
-        h = c + (g ^ d & (f ^ g)) + e[4] + 4118548399 & 4294967295;
-        c = d + (h << 7 & 4294967295 | h >>> 25);
-        h = g + (f ^ c & (d ^ f)) + e[5] + 1200080426 & 4294967295;
-        g = c + (h << 12 & 4294967295 | h >>> 20);
-        h = f + (d ^ g & (c ^ d)) + e[6] + 2821735955 & 4294967295;
-        f = g + (h << 17 & 4294967295 | h >>> 15);
-        h = d + (c ^ f & (g ^ c)) + e[7] + 4249261313 & 4294967295;
-        d = f + (h << 22 & 4294967295 | h >>> 10);
-        h = c + (g ^ d & (f ^ g)) + e[8] + 1770035416 & 4294967295;
-        c = d + (h << 7 & 4294967295 | h >>> 25);
-        h = g + (f ^ c & (d ^ f)) + e[9] + 2336552879 & 4294967295;
-        g = c + (h << 12 & 4294967295 | h >>> 20);
-        h = f + (d ^ g & (c ^ d)) + e[10] + 4294925233 & 4294967295;
-        f = g + (h << 17 & 4294967295 | h >>> 15);
-        h = d + (c ^ f & (g ^ c)) + e[11] + 2304563134 & 4294967295;
-        d = f + (h << 22 & 4294967295 | h >>> 10);
-        h = c + (g ^ d & (f ^ g)) + e[12] + 1804603682 & 4294967295;
-        c = d + (h << 7 & 4294967295 | h >>> 25);
-        h = g + (f ^ c & (d ^ f)) + e[13] + 4254626195 & 4294967295;
-        g = c + (h << 12 & 4294967295 | h >>> 20);
-        h = f + (d ^ g & (c ^ d)) + e[14] + 2792965006 & 4294967295;
-        f = g + (h << 17 & 4294967295 | h >>> 15);
-        h = d + (c ^ f & (g ^ c)) + e[15] + 1236535329 & 4294967295;
-        d = f + (h << 22 & 4294967295 | h >>> 10);
-        h = c + (f ^ g & (d ^ f)) + e[1] + 4129170786 & 4294967295;
-        c = d + (h << 5 & 4294967295 | h >>> 27);
-        h = g + (d ^ f & (c ^ d)) + e[6] + 3225465664 & 4294967295;
-        g = c + (h << 9 & 4294967295 | h >>> 23);
-        h = f + (c ^ d & (g ^ c)) + e[11] + 643717713 & 4294967295;
-        f = g + (h << 14 & 4294967295 | h >>> 18);
-        h = d + (g ^ c & (f ^ g)) + e[0] + 3921069994 & 4294967295;
-        d = f + (h << 20 & 4294967295 | h >>> 12);
-        h = c + (f ^ g & (d ^ f)) + e[5] + 3593408605 & 4294967295;
-        c = d + (h << 5 & 4294967295 | h >>> 27);
-        h = g + (d ^ f & (c ^ d)) + e[10] + 38016083 & 4294967295;
-        g = c + (h << 9 & 4294967295 | h >>> 23);
-        h = f + (c ^ d & (g ^ c)) + e[15] + 3634488961 & 4294967295;
-        f = g + (h << 14 & 4294967295 | h >>> 18);
-        h = d + (g ^ c & (f ^ g)) + e[4] + 3889429448 & 4294967295;
-        d = f + (h << 20 & 4294967295 | h >>> 12);
-        h = c + (f ^ g & (d ^ f)) + e[9] + 568446438 & 4294967295;
-        c = d + (h << 5 & 4294967295 | h >>> 27);
-        h = g + (d ^ f & (c ^ d)) + e[14] + 3275163606 & 4294967295;
-        g = c + (h << 9 & 4294967295 | h >>> 23);
-        h = f + (c ^ d & (g ^ c)) + e[3] + 4107603335 & 4294967295;
-        f = g + (h << 14 & 4294967295 | h >>> 18);
-        h = d + (g ^ c & (f ^ g)) + e[8] + 1163531501 & 4294967295;
-        d = f + (h << 20 & 4294967295 | h >>> 12);
-        h = c + (f ^ g & (d ^ f)) + e[13] + 2850285829 & 4294967295;
-        c = d + (h << 5 & 4294967295 | h >>> 27);
-        h = g + (d ^ f & (c ^ d)) + e[2] + 4243563512 & 4294967295;
-        g = c + (h << 9 & 4294967295 | h >>> 23);
-        h = f + (c ^ d & (g ^ c)) + e[7] + 1735328473 & 4294967295;
-        f = g + (h << 14 & 4294967295 | h >>> 18);
-        h = d + (g ^ c & (f ^ g)) + e[12] + 2368359562 & 4294967295;
-        d = f + (h << 20 & 4294967295 | h >>> 12);
-        h = c + (d ^ f ^ g) + e[5] + 4294588738 & 4294967295;
-        c = d + (h << 4 & 4294967295 | h >>> 28);
-        h = g + (c ^ d ^ f) + e[8] + 2272392833 & 4294967295;
-        g = c + (h << 11 & 4294967295 | h >>> 21);
-        h = f + (g ^ c ^ d) + e[11] + 1839030562 & 4294967295;
-        f = g + (h << 16 & 4294967295 | h >>> 16);
-        h = d + (f ^ g ^ c) + e[14] + 4259657740 & 4294967295;
-        d = f + (h << 23 & 4294967295 | h >>> 9);
-        h = c + (d ^ f ^ g) + e[1] + 2763975236 & 4294967295;
-        c = d + (h << 4 & 4294967295 | h >>> 28);
-        h = g + (c ^ d ^ f) + e[4] + 1272893353 & 4294967295;
-        g = c + (h << 11 & 4294967295 | h >>> 21);
-        h = f + (g ^ c ^ d) + e[7] + 4139469664 & 4294967295;
-        f = g + (h << 16 & 4294967295 | h >>> 16);
-        h = d + (f ^ g ^ c) + e[10] + 3200236656 & 4294967295;
-        d = f + (h << 23 & 4294967295 | h >>> 9);
-        h = c + (d ^ f ^ g) + e[13] + 681279174 & 4294967295;
-        c = d + (h << 4 & 4294967295 | h >>> 28);
-        h = g + (c ^ d ^ f) + e[0] + 3936430074 & 4294967295;
-        g = c + (h << 11 & 4294967295 | h >>> 21);
-        h = f + (g ^ c ^ d) + e[3] + 3572445317 & 4294967295;
-        f = g + (h << 16 & 4294967295 | h >>> 16);
-        h = d + (f ^ g ^ c) + e[6] + 76029189 & 4294967295;
-        d = f + (h << 23 & 4294967295 | h >>> 9);
-        h = c + (d ^ f ^ g) + e[9] + 3654602809 & 4294967295;
-        c = d + (h << 4 & 4294967295 | h >>> 28);
-        h = g + (c ^ d ^ f) + e[12] + 3873151461 & 4294967295;
-        g = c + (h << 11 & 4294967295 | h >>> 21);
-        h = f + (g ^ c ^ d) + e[15] + 530742520 & 4294967295;
-        f = g + (h << 16 & 4294967295 | h >>> 16);
-        h = d + (f ^ g ^ c) + e[2] + 3299628645 & 4294967295;
-        d = f + (h << 23 & 4294967295 | h >>> 9);
-        h = c + (f ^ (d | ~g)) + e[0] + 4096336452 & 4294967295;
-        c = d + (h << 6 & 4294967295 | h >>> 26);
-        h = g + (d ^ (c | ~f)) + e[7] + 1126891415 & 4294967295;
-        g = c + (h << 10 & 4294967295 | h >>> 22);
-        h = f + (c ^ (g | ~d)) + e[14] + 2878612391 & 4294967295;
-        f = g + (h << 15 & 4294967295 | h >>> 17);
-        h = d + (g ^ (f | ~c)) + e[5] + 4237533241 & 4294967295;
-        d = f + (h << 21 & 4294967295 | h >>> 11);
-        h = c + (f ^ (d | ~g)) + e[12] + 1700485571 & 4294967295;
-        c = d + (h << 6 & 4294967295 | h >>> 26);
-        h = g + (d ^ (c | ~f)) + e[3] + 2399980690 & 4294967295;
-        g = c + (h << 10 & 4294967295 | h >>> 22);
-        h = f + (c ^ (g | ~d)) + e[10] + 4293915773 & 4294967295;
-        f = g + (h << 15 & 4294967295 | h >>> 17);
-        h = d + (g ^ (f | ~c)) + e[1] + 2240044497 & 4294967295;
-        d = f + (h << 21 & 4294967295 | h >>> 11);
-        h = c + (f ^ (d | ~g)) + e[8] + 1873313359 & 4294967295;
-        c = d + (h << 6 & 4294967295 | h >>> 26);
-        h = g + (d ^ (c | ~f)) + e[15] + 4264355552 & 4294967295;
-        g = c + (h << 10 & 4294967295 | h >>> 22);
-        h = f + (c ^ (g | ~d)) + e[6] + 2734768916 & 4294967295;
-        f = g + (h << 15 & 4294967295 | h >>> 17);
-        h = d + (g ^ (f | ~c)) + e[13] + 1309151649 & 4294967295;
-        d = f + (h << 21 & 4294967295 | h >>> 11);
-        h = c + (f ^ (d | ~g)) + e[4] + 4149444226 & 4294967295;
-        c = d + (h << 6 & 4294967295 | h >>> 26);
-        h = g + (d ^ (c | ~f)) + e[11] + 3174756917 & 4294967295;
-        g = c + (h << 10 & 4294967295 | h >>> 22);
-        h = f + (c ^ (g | ~d)) + e[2] + 718787259 & 4294967295;
-        f = g + (h << 15 & 4294967295 | h >>> 17);
-        h = d + (g ^ (f | ~c)) + e[9] + 3951481745 & 4294967295;
-        a.b[0] = a.b[0] + c & 4294967295;
-        a.b[1] = a.b[1] + (f + (h << 21 & 4294967295 | h >>> 11)) & 4294967295;
-        a.b[2] = a.b[2] + f & 4294967295;
-        a.b[3] = a.b[3] + g & 4294967295
-    }
-    tl.prototype.update = function(a, c) {
-        m(c) || (c = a.length);
-        for (var d = c - this.a, e = this.e, f = this.c, g = 0; g < c;) {
-            if (0 == f)
-                for (; g <= d;) ul(this, a, g), g += this.a;
-            if (ia(a))
-                for (; g < c;) {
-                    if (e[f++] = a.charCodeAt(g++), f == this.a) {
-                        ul(this, e);
-                        f = 0;
-                        break
-                    }
-                } else
-                    for (; g < c;)
-                        if (e[f++] = a[g++], f == this.a) {
-                            ul(this, e);
-                            f = 0;
-                            break
-                        }
-        }
-        this.c = f;
-        this.d += c
-    };
-
-    function vl(a) {
-        a = m(a) ? a : {};
-        this.b = m(a.color) ? a.color : null;
-        this.d = a.lineCap;
-        this.c = m(a.lineDash) ? a.lineDash : null;
-        this.e = a.lineJoin;
-        this.f = a.miterLimit;
-        this.a = a.width;
-        this.g = void 0
-    }
-    l = vl.prototype;
-    l.Hm = function() {
-        return this.b
-    };
-    l.ej = function() {
-        return this.d
-    };
-    l.Im = function() {
-        return this.c
-    };
-    l.fj = function() {
-        return this.e
-    };
-    l.lj = function() {
-        return this.f
-    };
-    l.Jm = function() {
-        return this.a
-    };
-    l.Km = function(a) {
-        this.b = a;
-        this.g = void 0
-    };
-    l.Zn = function(a) {
-        this.d = a;
-        this.g = void 0
-    };
-    l.Lm = function(a) {
-        this.c = a;
-        this.g = void 0
-    };
-    l.$n = function(a) {
-        this.e = a;
-        this.g = void 0
-    };
-    l.ao = function(a) {
-        this.f = a;
-        this.g = void 0
-    };
-    l.ko = function(a) {
-        this.a = a;
-        this.g = void 0
-    };
-    l.nb = function() {
-        if (!m(this.g)) {
-            var a = "s" + (null === this.b ? "-" : vf(this.b)) + "," + (m(this.d) ? this.d.toString() : "-") + "," + (null === this.c ? "-" : this.c.toString()) + "," + (m(this.e) ? this.e : "-") + "," + (m(this.f) ? this.f.toString() : "-") + "," + (m(this.a) ? this.a.toString() : "-"),
-                c = new tl;
-            c.update(a);
-            var d = Array((56 > c.c ? c.a : 2 * c.a) - c.c);
-            d[0] = 128;
-            for (a = 1; a < d.length - 8; ++a) d[a] = 0;
-            for (var e = 8 * c.d, a = d.length - 8; a < d.length; ++a) d[a] = e & 255, e /= 256;
-            c.update(d);
-            d = Array(16);
-            for (a = e = 0; 4 > a; ++a)
-                for (var f = 0; 32 > f; f += 8) d[e++] = c.b[a] >>> f & 255;
-            if (8192 > d.length) c = String.fromCharCode.apply(null, d);
-            else
-                for (c = "", a = 0; a < d.length; a += 8192) c += String.fromCharCode.apply(null, fb(d, a, a + 8192));
-            this.g = c
-        }
-        return this.g
-    };
-    var wl = [0, 0, 0, 1],
-        xl = [],
-        yl = [0, 0, 0, 1];
-
-    function zl(a) {
-        a = m(a) ? a : {};
-        this.b = m(a.color) ? a.color : null;
-        this.a = void 0
-    }
-    zl.prototype.c = function() {
-        return this.b
-    };
-    zl.prototype.d = function(a) {
-        this.b = a;
-        this.a = void 0
-    };
-    zl.prototype.nb = function() {
-        m(this.a) || (this.a = "f" + (null === this.b ? "-" : vf(this.b)));
-        return this.a
-    };
-
-    function Al(a) {
-        a = m(a) ? a : {};
-        this.f = this.b = this.e = null;
-        this.d = m(a.fill) ? a.fill : null;
-        this.a = m(a.stroke) ? a.stroke : null;
-        this.c = a.radius;
-        this.o = [0, 0];
-        this.i = this.p = this.g = null;
-        var c = a.atlasManager,
-            d, e = null,
-            f, g = 0;
-        null !== this.a && (f = vf(this.a.b), g = this.a.a, m(g) || (g = 1), e = this.a.c, ki || (e = null));
-        var h = 2 * (this.c + g) + 1;
-        f = {
-            strokeStyle: f,
-            md: g,
-            size: h,
-            lineDash: e
-        };
-        m(c) ? (h = Math.round(h), (e = null === this.d) && (d = ra(this.Rg, this, f)), g = this.nb(), f = c.add(g, h, h, ra(this.Sg, this, f), d), this.b = f.image, this.o = [f.offsetX, f.offsetY], d = f.image.width, this.f = e ? f.ig : this.b) : (this.b = Mf("CANVAS"), this.b.height = h, this.b.width = h, d = h = this.b.width, c = this.b.getContext("2d"), this.Sg(f, c, 0, 0), null === this.d ? (c = this.f = Mf("CANVAS"), c.height = f.size, c.width = f.size, c = c.getContext("2d"), this.Rg(f, c, 0, 0)) : this.f = this.b);
-        this.g = [h / 2, h / 2];
-        this.p = [h, h];
-        this.i = [d, d];
-        Ej.call(this, {
-            opacity: 1,
-            rotateWithView: !1,
-            rotation: 0,
-            scale: 1,
-            snapToPixel: m(a.snapToPixel) ? a.snapToPixel : !0
-        })
-    }
-    w(Al, Ej);
-    l = Al.prototype;
-    l.mb = function() {
-        return this.g
-    };
-    l.ym = function() {
-        return this.d
-    };
-    l.he = function() {
-        return this.f
-    };
-    l.Lb = function() {
-        return this.b
-    };
-    l.gd = function() {
-        return 2
-    };
-    l.Dd = function() {
-        return this.i
-    };
-    l.rb = function() {
-        return this.o
-    };
-    l.zm = function() {
-        return this.c
-    };
-    l.Xa = function() {
-        return this.p
-    };
-    l.Am = function() {
-        return this.a
-    };
-    l.$e = ca;
-    l.load = ca;
-    l.xf = ca;
-    l.Sg = function(a, c, d, e) {
-        c.setTransform(1, 0, 0, 1, 0, 0);
-        c.translate(d, e);
-        c.beginPath();
-        c.arc(a.size / 2, a.size / 2, this.c, 0, 2 * Math.PI, !0);
-        null !== this.d && (c.fillStyle = vf(this.d.b), c.fill());
-        null !== this.a && (c.strokeStyle = a.strokeStyle, c.lineWidth = a.md, null === a.lineDash || c.setLineDash(a.lineDash), c.stroke());
-        c.closePath()
-    };
-    l.Rg = function(a, c, d, e) {
-        c.setTransform(1, 0, 0, 1, 0, 0);
-        c.translate(d, e);
-        c.beginPath();
-        c.arc(a.size / 2, a.size / 2, this.c, 0, 2 * Math.PI, !0);
-        c.fillStyle = wl;
-        c.fill();
-        null !== this.a && (c.strokeStyle = a.strokeStyle, c.lineWidth = a.md, null === a.lineDash || c.setLineDash(a.lineDash), c.stroke());
-        c.closePath()
-    };
-    l.nb = function() {
-        var a = null === this.a ? "-" : this.a.nb(),
-            c = null === this.d ? "-" : this.d.nb();
-        if (null === this.e || a != this.e[1] || c != this.e[2] || this.c != this.e[3]) this.e = ["c" + a + c + (m(this.c) ? this.c.toString() : "-"), a, c, this.c];
-        return this.e[0]
-    };
-
-    function Bl(a) {
-        a = m(a) ? a : {};
-        this.g = null;
-        this.d = Cl;
-        m(a.geometry) && this.Vg(a.geometry);
-        this.e = m(a.fill) ? a.fill : null;
-        this.f = m(a.image) ? a.image : null;
-        this.c = m(a.stroke) ? a.stroke : null;
-        this.a = m(a.text) ? a.text : null;
-        this.b = a.zIndex
-    }
-    l = Bl.prototype;
-    l.Q = function() {
-        return this.g
-    };
-    l.Zi = function() {
-        return this.d
-    };
-    l.Mm = function() {
-        return this.e
-    };
-    l.Nm = function() {
-        return this.f
-    };
-    l.Om = function() {
-        return this.c
-    };
-    l.Pm = function() {
-        return this.a
-    };
-    l.Dj = function() {
-        return this.b
-    };
-    l.Vg = function(a) {
-        ka(a) ? this.d = a : ia(a) ? this.d = function(c) {
-            return c.get(a)
-        } : null === a ? this.d = Cl : m(a) && (this.d = function() {
-            return a
-        });
-        this.g = a
-    };
-    l.mo = function(a) {
-        this.b = a
-    };
-
-    function Dl(a) {
-        ka(a) || (a = ga(a) ? a : [a], a = Eg(a));
-        return a
-    }
-
-    function El() {
-        var a = new zl({
-                color: "rgba(255,255,255,0.4)"
-            }),
-            c = new vl({
-                color: "#3399CC",
-                width: 1.25
-            }),
-            d = [new Bl({
-                image: new Al({
-                    fill: a,
-                    stroke: c,
-                    radius: 5
-                }),
-                fill: a,
-                stroke: c
-            })];
-        El = function() {
-            return d
-        };
-        return d
-    }
-
-    function Fl() {
-        var a = {},
-            c = [255, 255, 255, 1],
-            d = [0, 153, 255, 1];
-        a.Polygon = [new Bl({
-            fill: new zl({
-                color: [255, 255, 255, .5]
-            })
-        })];
-        a.MultiPolygon = a.Polygon;
-        a.LineString = [new Bl({
-            stroke: new vl({
-                color: c,
-                width: 5
-            })
-        }), new Bl({
-            stroke: new vl({
-                color: d,
-                width: 3
-            })
-        })];
-        a.MultiLineString = a.LineString;
-        a.Circle = a.Polygon.concat(a.LineString);
-        a.Point = [new Bl({
-            image: new Al({
-                radius: 6,
-                fill: new zl({
-                    color: d
-                }),
-                stroke: new vl({
-                    color: c,
-                    width: 1.5
-                })
-            }),
-            zIndex: Infinity
-        })];
-        a.MultiPoint = a.Point;
-        a.GeometryCollection = a.Polygon.concat(a.Point);
-        return a
-    }
-
-    function Cl(a) {
-        return a.Q()
-    };
-
-    function Gl(a) {
-        var c = m(a) ? a : {};
-        a = m(c.condition) ? c.condition : gk;
-        this.n = m(c.duration) ? c.duration : 200;
-        c = m(c.style) ? c.style : new Bl({
-            stroke: new vl({
-                color: [0, 0, 255, 1]
-            })
-        });
-        nl.call(this, {
-            condition: a,
-            style: c
-        })
-    }
-    w(Gl, nl);
-    Gl.prototype.g = function() {
-        var a = this.l,
-            c = a.R(),
-            d = this.Q().G(),
-            e = ce(d),
-            f = a.xa(),
-            d = Oe(d, f),
-            f = this.n,
-            d = c.constrainResolution(d, 0, void 0);
-        Zj(a, c, d, e, f)
-    };
-
-    function Hl(a) {
-        Wj.call(this, {
-            handleEvent: Il
-        });
-        a = m(a) ? a : {};
-        this.a = m(a.condition) ? a.condition : Lg(fk, hk);
-        this.e = m(a.duration) ? a.duration : 100;
-        this.f = m(a.pixelDelta) ? a.pixelDelta : 128
-    }
-    w(Hl, Wj);
-
-    function Il(a) {
-        var c = !1;
-        if ("key" == a.type) {
-            var d = a.b.e;
-            if (this.a(a) && (40 == d || 37 == d || 39 == d || 38 == d)) {
-                var e = a.map,
-                    c = e.R(),
-                    f = Se(c),
-                    g = f.resolution * this.f,
-                    h = 0,
-                    k = 0;
-                40 == d ? k = -g : 37 == d ? h = -g : 39 == d ? h = g : k = g;
-                d = [h, k];
-                rd(d, f.rotation);
-                f = this.e;
-                g = c.Ca();
-                m(g) && (m(f) && 0 < f && e.Ha(Ze({
-                    source: g,
-                    duration: f,
-                    easing: Xe
-                })), e = c.xd([g[0] + d[0], g[1] + d[1]]), c.Na(e));
-                a.preventDefault();
-                c = !0
-            }
-        }
-        return !c
-    };
-
-    function Jl(a) {
-        Wj.call(this, {
-            handleEvent: Kl
-        });
-        a = m(a) ? a : {};
-        this.e = m(a.condition) ? a.condition : hk;
-        this.a = m(a.delta) ? a.delta : 1;
-        this.f = m(a.duration) ? a.duration : 100
-    }
-    w(Jl, Wj);
-
-    function Kl(a) {
-        var c = !1;
-        if ("key" == a.type) {
-            var d = a.b.q;
-            if (this.e(a) && (43 == d || 45 == d)) {
-                c = a.map;
-                d = 43 == d ? this.a : -this.a;
-                c.render();
-                var e = c.R();
-                Yj(c, e, d, void 0, this.f);
-                a.preventDefault();
-                c = !0
-            }
-        }
-        return !c
-    };
-
-    function Ll(a) {
-        Wj.call(this, {
-            handleEvent: Ml
-        });
-        a = m(a) ? a : {};
-        this.a = 0;
-        this.o = m(a.duration) ? a.duration : 250;
-        this.f = null;
-        this.g = this.e = void 0
-    }
-    w(Ll, Wj);
-
-    function Ml(a) {
-        var c = !1;
-        if ("mousewheel" == a.type) {
-            var c = a.map,
-                d = a.b;
-            this.f = a.coordinate;
-            this.a += d.o;
-            m(this.e) || (this.e = ua());
-            d = Math.max(80 - (ua() - this.e), 0);
-            ba.clearTimeout(this.g);
-            this.g = ba.setTimeout(ra(this.i, this, c), d);
-            a.preventDefault();
-            c = !0
-        }
-        return !c
-    }
-    Ll.prototype.i = function(a) {
-        var c = Vb(this.a, -1, 1),
-            d = a.R();
-        a.render();
-        Yj(a, d, -c, this.f, this.o);
-        this.a = 0;
-        this.f = null;
-        this.g = this.e = void 0
-    };
-
-    function Nl(a) {
-        jk.call(this, {
-            handleDownEvent: Ol,
-            handleDragEvent: Pl,
-            handleUpEvent: Ql
-        });
-        a = m(a) ? a : {};
-        this.f = null;
-        this.g = void 0;
-        this.a = !1;
-        this.i = 0;
-        this.p = m(a.threshold) ? a.threshold : .3;
-        this.n = m(a.duration) ? a.duration : 250
-    }
-    w(Nl, jk);
-
-    function Pl(a) {
-        var c = 0,
-            d = this.e[0],
-            e = this.e[1],
-            d = Math.atan2(e.clientY - d.clientY, e.clientX - d.clientX);
-        m(this.g) && (c = d - this.g, this.i += c, !this.a && Math.abs(this.i) > this.p && (this.a = !0));
-        this.g = d;
-        a = a.map;
-        d = jg(a.a);
-        e = lk(this.e);
-        e[0] -= d.x;
-        e[1] -= d.y;
-        this.f = a.ka(e);
-        this.a && (d = a.R(), e = d.Da(), a.render(), Xj(a, d, e + c, this.f))
-    }
-
-    function Ql(a) {
-        if (2 > this.e.length) {
-            a = a.map;
-            var c = a.R();
-            Ue(c, -1);
-            if (this.a) {
-                var d = c.Da(),
-                    e = this.f,
-                    f = this.n,
-                    d = c.constrainRotation(d, 0);
-                Xj(a, c, d, e, f)
-            }
-            return !1
-        }
-        return !0
-    }
-
-    function Ol(a) {
-        return 2 <= this.e.length ? (a = a.map, this.f = null, this.g = void 0, this.a = !1, this.i = 0, this.o || Ue(a.R(), 1), a.render(), !0) : !1
-    }
-    Nl.prototype.nc = Fg;
-
-    function Rl(a) {
-        jk.call(this, {
-            handleDownEvent: Sl,
-            handleDragEvent: Tl,
-            handleUpEvent: Ul
-        });
-        a = m(a) ? a : {};
-        this.f = null;
-        this.i = m(a.duration) ? a.duration : 400;
-        this.a = void 0;
-        this.g = 1
-    }
-    w(Rl, jk);
-
-    function Tl(a) {
-        var c = 1,
-            d = this.e[0],
-            e = this.e[1],
-            f = d.clientX - e.clientX,
-            d = d.clientY - e.clientY,
-            f = Math.sqrt(f * f + d * d);
-        m(this.a) && (c = this.a / f);
-        this.a = f;
-        1 != c && (this.g = c);
-        a = a.map;
-        var f = a.R(),
-            d = f.ya(),
-            e = jg(a.a),
-            g = lk(this.e);
-        g[0] -= e.x;
-        g[1] -= e.y;
-        this.f = a.ka(g);
-        a.render();
-        Zj(a, f, d * c, this.f)
-    }
-
-    function Ul(a) {
-        if (2 > this.e.length) {
-            a = a.map;
-            var c = a.R();
-            Ue(c, -1);
-            var d = c.ya(),
-                e = this.f,
-                f = this.i,
-                d = c.constrainResolution(d, 0, this.g - 1);
-            Zj(a, c, d, e, f);
-            return !1
-        }
-        return !0
-    }
-
-    function Sl(a) {
-        return 2 <= this.e.length ? (a = a.map, this.f = null, this.a = void 0, this.g = 1, this.o || Ue(a.R(), 1), a.render(), !0) : !1
-    }
-    Rl.prototype.nc = Fg;
-
-    function Vl(a) {
-        a = m(a) ? a : {};
-        var c = new of,
-            d = new Tj(-.005, .05, 100);
-        (m(a.altShiftDragRotate) ? a.altShiftDragRotate : 1) && c.push(new qk);
-        (m(a.doubleClickZoom) ? a.doubleClickZoom : 1) && c.push(new ak({
-            delta: a.zoomDelta,
-            duration: a.zoomDuration
-        }));
-        (m(a.dragPan) ? a.dragPan : 1) && c.push(new mk({
-            kinetic: d
-        }));
-        (m(a.pinchRotate) ? a.pinchRotate : 1) && c.push(new Nl);
-        (m(a.pinchZoom) ? a.pinchZoom : 1) && c.push(new Rl({
-            duration: a.zoomDuration
-        }));
-        if (m(a.keyboard) ? a.keyboard : 1) c.push(new Hl), c.push(new Jl({
-            delta: a.zoomDelta,
-            duration: a.zoomDuration
-        }));
-        (m(a.mouseWheelZoom) ? a.mouseWheelZoom : 1) && c.push(new Ll({
-            duration: a.zoomDuration
-        }));
-        (m(a.shiftDragZoom) ? a.shiftDragZoom : 1) && c.push(new Gl);
-        return c
-    };
-
-    function G(a) {
-        var c = m(a) ? a : {};
-        a = Db(c);
-        delete a.layers;
-        c = c.layers;
-        mj.call(this, a);
-        this.c = [];
-        this.a = {};
-        x(this, hd("layers"), this.Vj, !1, this);
-        null != c ? ga(c) && (c = new of(c.slice())) : c = new of;
-        this.Ah(c)
-    }
-    w(G, mj);
-    l = G.prototype;
-    l.Qd = function() {
-        this.eb() && this.k()
-    };
-    l.Vj = function() {
-        Sa(this.c, Wc);
-        this.c.length = 0;
-        var a = this.Bc();
-        this.c.push(x(a, "add", this.Uj, !1, this), x(a, "remove", this.Wj, !1, this));
-        pb(this.a, function(a) {
-            Sa(a, Wc)
-        });
-        yb(this.a);
-        var a = a.a,
-            c, d, e;
-        c = 0;
-        for (d = a.length; c < d; c++) e = a[c], this.a[ma(e).toString()] = [x(e, "propertychange", this.Qd, !1, this), x(e, "change", this.Qd, !1, this)];
-        this.k()
-    };
-    l.Uj = function(a) {
-        a = a.element;
-        var c = ma(a).toString();
-        this.a[c] = [x(a, "propertychange", this.Qd, !1, this), x(a, "change", this.Qd, !1, this)];
-        this.k()
-    };
-    l.Wj = function(a) {
-        a = ma(a.element).toString();
-        Sa(this.a[a], Wc);
-        delete this.a[a];
-        this.k()
-    };
-    l.Bc = function() {
-        return this.get("layers")
-    };
-    l.Ah = function(a) {
-        this.set("layers", a)
-    };
-    l.Ue = function(a) {
-        var c = m(a) ? a : [],
-            d = c.length;
-        this.Bc().forEach(function(a) {
-            a.Ue(c)
-        });
-        a = nj(this);
-        var e, f;
-        for (e = c.length; d < e; d++) f = c[d], f.brightness = Vb(f.brightness + a.brightness, -1, 1), f.contrast *= a.contrast, f.hue += a.hue, f.opacity *= a.opacity, f.saturation *= a.saturation, f.visible = f.visible && a.visible, f.maxResolution = Math.min(f.maxResolution, a.maxResolution), f.minResolution = Math.max(f.minResolution, a.minResolution), m(a.extent) && (f.extent = m(f.extent) ? ge(f.extent, a.extent) : a.extent);
-        return c
-    };
-    l.We = function() {
-        return "ready"
-    };
-
-    function Wl(a) {
-        pe.call(this, {
-            code: a,
-            units: "m",
-            extent: Xl,
-            global: !0,
-            worldExtent: Yl
-        })
-    }
-    w(Wl, pe);
-    Wl.prototype.getPointResolution = function(a, c) {
-        var d = c[1] / 6378137;
-        return a / ((Math.exp(d) + Math.exp(-d)) / 2)
-    };
-    var Zl = 6378137 * Math.PI,
-        Xl = [-Zl, -Zl, Zl, Zl],
-        Yl = [-180, -85, 180, 85],
-        Be = Ua("EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" "), function(a) {
-            return new Wl(a)
-        });
-
-    function Ce(a, c, d) {
-        var e = a.length;
-        d = 1 < d ? d : 2;
-        m(c) || (2 < d ? c = a.slice() : c = Array(e));
-        for (var f = 0; f < e; f += d) c[f] = 6378137 * Math.PI * a[f] / 180, c[f + 1] = 6378137 * Math.log(Math.tan(Math.PI * (a[f + 1] + 90) / 360));
-        return c
-    }
-
-    function De(a, c, d) {
-        var e = a.length;
-        d = 1 < d ? d : 2;
-        m(c) || (2 < d ? c = a.slice() : c = Array(e));
-        for (var f = 0; f < e; f += d) c[f] = 180 * a[f] / (6378137 * Math.PI), c[f + 1] = 360 * Math.atan(Math.exp(a[f + 1] / 6378137)) / Math.PI - 90;
-        return c
-    };
-
-    function $l(a, c) {
-        pe.call(this, {
-            code: a,
-            units: "degrees",
-            extent: am,
-            axisOrientation: c,
-            global: !0,
-            worldExtent: am
-        })
-    }
-    w($l, pe);
-    $l.prototype.getPointResolution = function(a) {
-        return a
-    };
-    var am = [-180, -90, 180, 90],
-        Ee = [new $l("CRS:84"), new $l("EPSG:4326", "neu"), new $l("urn:ogc:def:crs:EPSG::4326", "neu"), new $l("urn:ogc:def:crs:EPSG:6.6:4326", "neu"), new $l("urn:ogc:def:crs:OGC:1.3:CRS84"), new $l("urn:ogc:def:crs:OGC:2:84"), new $l("http://www.opengis.net/gml/srs/epsg.xml#4326", "neu"), new $l("urn:x-ogc:def:crs:EPSG:4326", "neu")];
-
-    function bm() {
-        se(Be);
-        se(Ee);
-        Ae()
-    };
-
-    function I(a) {
-        C.call(this, m(a) ? a : {})
-    }
-    w(I, C);
-
-    function L(a) {
-        a = m(a) ? a : {};
-        var c = Db(a);
-        delete c.preload;
-        delete c.useInterimTilesOnError;
-        C.call(this, c);
-        this.d(m(a.preload) ? a.preload : 0);
-        this.e(m(a.useInterimTilesOnError) ? a.useInterimTilesOnError : !0)
-    }
-    w(L, C);
-    L.prototype.a = function() {
-        return this.get("preload")
-    };
-    L.prototype.d = function(a) {
-        this.set("preload", a)
-    };
-    L.prototype.c = function() {
-        return this.get("useInterimTilesOnError")
-    };
-    L.prototype.e = function(a) {
-        this.set("useInterimTilesOnError", a)
-    };
-
-    function M(a) {
-        a = m(a) ? a : {};
-        var c = Db(a);
-        delete c.style;
-        delete c.renderBuffer;
-        delete c.updateWhileAnimating;
-        delete c.updateWhileInteracting;
-        C.call(this, c);
-        this.c = m(a.renderBuffer) ? a.renderBuffer : 100;
-        this.g = null;
-        this.a = void 0;
-        this.e(a.style);
-        this.o = m(a.updateWhileAnimating) ? a.updateWhileAnimating : !1;
-        this.n = m(a.updateWhileInteracting) ? a.updateWhileInteracting : !1
-    }
-    w(M, C);
-    M.prototype.H = function() {
-        return this.g
-    };
-    M.prototype.J = function() {
-        return this.a
-    };
-    M.prototype.e = function(a) {
-        this.g = m(a) ? a : El;
-        this.a = null === a ? void 0 : Dl(this.g);
-        this.k()
-    };
-
-    function cm(a, c, d, e, f) {
-        this.U = {};
-        this.c = a;
-        this.n = c;
-        this.e = d;
-        this.H = e;
-        this.Nc = f;
-        this.f = this.b = this.a = this.oa = this.ba = this.X = null;
-        this.Ga = this.Fa = this.o = this.N = this.L = this.J = 0;
-        this.Ra = !1;
-        this.g = this.rc = 0;
-        this.vb = !1;
-        this.T = 0;
-        this.d = "";
-        this.q = this.p = this.xb = this.wb = 0;
-        this.sa = this.l = this.i = null;
-        this.V = [];
-        this.sc = zd()
-    }
-
-    function dm(a, c, d) {
-        if (null !== a.f) {
-            c = vk(c, 0, d, 2, a.H, a.V);
-            d = a.c;
-            var e = a.sc,
-                f = d.globalAlpha;
-            1 != a.o && (d.globalAlpha = f * a.o);
-            var g = a.rc;
-            a.Ra && (g += a.Nc);
-            var h, k;
-            h = 0;
-            for (k = c.length; h < k; h += 2) {
-                var n = c[h] - a.J,
-                    p = c[h + 1] - a.L;
-                a.vb && (n = n + .5 | 0, p = p + .5 | 0);
-                if (0 !== g || 1 != a.g) {
-                    var q = n + a.J,
-                        r = p + a.L;
-                    qj(e, q, r, a.g, a.g, g, -q, -r);
-                    d.setTransform(e[0], e[1], e[4], e[5], e[12], e[13])
-                }
-                d.drawImage(a.f, a.Fa, a.Ga, a.T, a.N, n, p, a.T, a.N)
-            }
-            0 === g && 1 == a.g || d.setTransform(1, 0, 0, 1, 0, 0);
-            1 != a.o && (d.globalAlpha = f)
-        }
-    }
-
-    function em(a, c, d, e) {
-        var f = 0;
-        if (null !== a.sa && "" !== a.d) {
-            null === a.i || fm(a, a.i);
-            null === a.l || gm(a, a.l);
-            var g = a.sa,
-                h = a.c,
-                k = a.oa;
-            null === k ? (h.font = g.font, h.textAlign = g.textAlign, h.textBaseline = g.textBaseline, a.oa = {
-                font: g.font,
-                textAlign: g.textAlign,
-                textBaseline: g.textBaseline
-            }) : (k.font != g.font && (k.font = h.font = g.font), k.textAlign != g.textAlign && (k.textAlign = h.textAlign = g.textAlign), k.textBaseline != g.textBaseline && (k.textBaseline = h.textBaseline = g.textBaseline));
-            c = vk(c, f, d, e, a.H, a.V);
-            for (g = a.c; f < d; f += e) {
-                h = c[f] + a.wb;
-                k = c[f + 1] + a.xb;
-                if (0 !== a.p || 1 != a.q) {
-                    var n = qj(a.sc, h, k, a.q, a.q, a.p, -h, -k);
-                    g.setTransform(n[0], n[1], n[4], n[5], n[12], n[13])
-                }
-                null === a.l || g.strokeText(a.d, h, k);
-                null === a.i || g.fillText(a.d, h, k)
-            }
-            0 === a.p && 1 == a.q || g.setTransform(1, 0, 0, 1, 0, 0)
-        }
-    }
-
-    function hm(a, c, d, e, f, g) {
-        var h = a.c;
-        a = vk(c, d, e, f, a.H, a.V);
-        h.moveTo(a[0], a[1]);
-        for (c = 2; c < a.length; c += 2) h.lineTo(a[c], a[c + 1]);
-        g && h.lineTo(a[0], a[1]);
-        return e
-    }
-
-    function im(a, c, d, e, f) {
-        var g = a.c,
-            h, k;
-        h = 0;
-        for (k = e.length; h < k; ++h) d = hm(a, c, d, e[h], f, !0), g.closePath();
-        return d
-    }
-    l = cm.prototype;
-    l.tc = function(a, c) {
-        var d = a.toString(),
-            e = this.U[d];
-        m(e) ? e.push(c) : this.U[d] = [c]
-    };
-    l.uc = function(a) {
-        if (he(this.e, a.G())) {
-            if (null !== this.a || null !== this.b) {
-                null === this.a || fm(this, this.a);
-                null === this.b || gm(this, this.b);
-                var c;
-                c = a.j;
-                c = null === c ? null : vk(c, 0, c.length, a.s, this.H, this.V);
-                var d = c[2] - c[0],
-                    e = c[3] - c[1],
-                    d = Math.sqrt(d * d + e * e),
-                    e = this.c;
-                e.beginPath();
-                e.arc(c[0], c[1], d, 0, 2 * Math.PI);
-                null === this.a || e.fill();
-                null === this.b || e.stroke()
-            }
-            "" !== this.d && em(this, a.dd(), 2, 2)
-        }
-    };
-    l.Le = function(a, c) {
-        var d = (0, c.d)(a);
-        if (null != d && he(this.e, d.G())) {
-            var e = c.b;
-            m(e) || (e = 0);
-            this.tc(e, function(a) {
-                a.Aa(c.e, c.c);
-                a.Za(c.f);
-                a.Ba(c.a);
-                jm[d.M()].call(a, d, null)
-            })
-        }
-    };
-    l.zd = function(a, c) {
-        var d = a.d,
-            e, f;
-        e = 0;
-        for (f = d.length; e < f; ++e) {
-            var g = d[e];
-            jm[g.M()].call(this, g, c)
-        }
-    };
-    l.kb = function(a) {
-        var c = a.j;
-        a = a.s;
-        null === this.f || dm(this, c, c.length);
-        "" !== this.d && em(this, c, c.length, a)
-    };
-    l.jb = function(a) {
-        var c = a.j;
-        a = a.s;
-        null === this.f || dm(this, c, c.length);
-        "" !== this.d && em(this, c, c.length, a)
-    };
-    l.zb = function(a) {
-        if (he(this.e, a.G())) {
-            if (null !== this.b) {
-                gm(this, this.b);
-                var c = this.c,
-                    d = a.j;
-                c.beginPath();
-                hm(this, d, 0, d.length, a.s, !1);
-                c.stroke()
-            }
-            "" !== this.d && (a = km(a), em(this, a, 2, 2))
-        }
-    };
-    l.vc = function(a) {
-        var c = a.G();
-        if (he(this.e, c)) {
-            if (null !== this.b) {
-                gm(this, this.b);
-                var c = this.c,
-                    d = a.j,
-                    e = 0,
-                    f = a.c,
-                    g = a.s;
-                c.beginPath();
-                var h, k;
-                h = 0;
-                for (k = f.length; h < k; ++h) e = hm(this, d, e, f[h], g, !1);
-                c.stroke()
-            }
-            "" !== this.d && (a = lm(a), em(this, a, a.length, 2))
-        }
-    };
-    l.Rb = function(a) {
-        if (he(this.e, a.G())) {
-            if (null !== this.b || null !== this.a) {
-                null === this.a || fm(this, this.a);
-                null === this.b || gm(this, this.b);
-                var c = this.c;
-                c.beginPath();
-                im(this, el(a), 0, a.c, a.s);
-                null === this.a || c.fill();
-                null === this.b || c.stroke()
-            }
-            "" !== this.d && (a = fl(a), em(this, a, 2, 2))
-        }
-    };
-    l.wc = function(a) {
-        if (he(this.e, a.G())) {
-            if (null !== this.b || null !== this.a) {
-                null === this.a || fm(this, this.a);
-                null === this.b || gm(this, this.b);
-                var c = this.c,
-                    d = mm(a),
-                    e = 0,
-                    f = a.c,
-                    g = a.s,
-                    h, k;
-                h = 0;
-                for (k = f.length; h < k; ++h) {
-                    var n = f[h];
-                    c.beginPath();
-                    e = im(this, d, e, n, g);
-                    null === this.a || c.fill();
-                    null === this.b || c.stroke()
-                }
-            }
-            "" !== this.d && (a = nm(a), em(this, a, a.length, 2))
-        }
-    };
-
-    function om(a) {
-        var c = Ua(tb(a.U), Number);
-        gb(c);
-        var d, e, f, g, h;
-        d = 0;
-        for (e = c.length; d < e; ++d)
-            for (f = a.U[c[d].toString()], g = 0, h = f.length; g < h; ++g) f[g](a)
-    }
-
-    function fm(a, c) {
-        var d = a.c,
-            e = a.X;
-        null === e ? (d.fillStyle = c.fillStyle, a.X = {
-            fillStyle: c.fillStyle
-        }) : e.fillStyle != c.fillStyle && (e.fillStyle = d.fillStyle = c.fillStyle)
-    }
-
-    function gm(a, c) {
-        var d = a.c,
-            e = a.ba;
-        null === e ? (d.lineCap = c.lineCap, ki && d.setLineDash(c.lineDash), d.lineJoin = c.lineJoin, d.lineWidth = c.lineWidth, d.miterLimit = c.miterLimit, d.strokeStyle = c.strokeStyle, a.ba = {
-            lineCap: c.lineCap,
-            lineDash: c.lineDash,
-            lineJoin: c.lineJoin,
-            lineWidth: c.lineWidth,
-            miterLimit: c.miterLimit,
-            strokeStyle: c.strokeStyle
-        }) : (e.lineCap != c.lineCap && (e.lineCap = d.lineCap = c.lineCap), ki && !ib(e.lineDash, c.lineDash) && d.setLineDash(e.lineDash = c.lineDash), e.lineJoin != c.lineJoin && (e.lineJoin = d.lineJoin = c.lineJoin), e.lineWidth != c.lineWidth && (e.lineWidth = d.lineWidth = c.lineWidth), e.miterLimit != c.miterLimit && (e.miterLimit = d.miterLimit = c.miterLimit), e.strokeStyle != c.strokeStyle && (e.strokeStyle = d.strokeStyle = c.strokeStyle))
-    }
-    l.Aa = function(a, c) {
-        if (null === a) this.a = null;
-        else {
-            var d = a.b;
-            this.a = {
-                fillStyle: vf(null === d ? wl : d)
-            }
-        }
-        if (null === c) this.b = null;
-        else {
-            var d = c.b,
-                e = c.d,
-                f = c.c,
-                g = c.e,
-                h = c.a,
-                k = c.f;
-            this.b = {
-                lineCap: m(e) ? e : "round",
-                lineDash: null != f ? f : xl,
-                lineJoin: m(g) ? g : "round",
-                lineWidth: this.n * (m(h) ? h : 1),
-                miterLimit: m(k) ? k : 10,
-                strokeStyle: vf(null === d ? yl : d)
-            }
-        }
-    };
-    l.Za = function(a) {
-        if (null === a) this.f = null;
-        else {
-            var c = a.mb(),
-                d = a.Lb(1),
-                e = a.rb(),
-                f = a.Xa();
-            this.J = c[0];
-            this.L = c[1];
-            this.N = f[1];
-            this.f = d;
-            this.o = a.U;
-            this.Fa = e[0];
-            this.Ga = e[1];
-            this.Ra = a.V;
-            this.rc = a.q;
-            this.g = a.l;
-            this.vb = a.n;
-            this.T = f[0]
-        }
-    };
-    l.Ba = function(a) {
-        if (null === a) this.d = "";
-        else {
-            var c = a.b;
-            null === c ? this.i = null : (c = c.b, this.i = {
-                fillStyle: vf(null === c ? wl : c)
-            });
-            var d = a.f;
-            if (null === d) this.l = null;
-            else {
-                var c = d.b,
-                    e = d.d,
-                    f = d.c,
-                    g = d.e,
-                    h = d.a,
-                    d = d.f;
-                this.l = {
-                    lineCap: m(e) ? e : "round",
-                    lineDash: null != f ? f : xl,
-                    lineJoin: m(g) ? g : "round",
-                    lineWidth: m(h) ? h : 1,
-                    miterLimit: m(d) ? d : 10,
-                    strokeStyle: vf(null === c ? yl : c)
-                }
-            }
-            var c = a.d,
-                e = a.q,
-                f = a.l,
-                g = a.e,
-                h = a.a,
-                d = a.c,
-                k = a.g;
-            a = a.i;
-            this.sa = {
-                font: m(c) ? c : "10px sans-serif",
-                textAlign: m(k) ? k : "center",
-                textBaseline: m(a) ? a : "middle"
-            };
-            this.d = m(d) ? d : "";
-            this.wb = m(e) ? this.n * e : 0;
-            this.xb = m(f) ? this.n * f : 0;
-            this.p = m(g) ? g : 0;
-            this.q = this.n * (m(h) ? h : 1)
-        }
-    };
-    var jm = {
-        Point: cm.prototype.kb,
-        LineString: cm.prototype.zb,
-        Polygon: cm.prototype.Rb,
-        MultiPoint: cm.prototype.jb,
-        MultiLineString: cm.prototype.vc,
-        MultiPolygon: cm.prototype.wc,
-        GeometryCollection: cm.prototype.zd,
-        Circle: cm.prototype.uc
-    };
-    var pm = ["Polygon", "LineString", "Image", "Text"];
-
-    function qm(a, c, d) {
-        this.oa = a;
-        this.T = c;
-        this.d = null;
-        this.e = 0;
-        this.resolution = d;
-        this.L = this.J = null;
-        this.a = [];
-        this.coordinates = [];
-        this.X = zd();
-        this.b = [];
-        this.sa = [];
-        this.ba = zd()
-    }
-    w(qm, hl);
-
-    function rm(a, c, d, e, f, g) {
-        var h = a.coordinates.length,
-            k = a.Pe(),
-            n = [c[d], c[d + 1]],
-            p = [NaN, NaN],
-            q = !0,
-            r, t, u;
-        for (r = d + f; r < e; r += f) p[0] = c[r], p[1] = c[r + 1], u = Td(k, p), u !== t ? (q && (a.coordinates[h++] = n[0], a.coordinates[h++] = n[1]), a.coordinates[h++] = p[0], a.coordinates[h++] = p[1], q = !1) : 1 === u ? (a.coordinates[h++] = p[0], a.coordinates[h++] = p[1], q = !1) : q = !0, n[0] = p[0], n[1] = p[1], t = u;
-        r === d + f && (a.coordinates[h++] = n[0], a.coordinates[h++] = n[1]);
-        g && (a.coordinates[h++] = c[d], a.coordinates[h++] = c[d + 1]);
-        return h
-    }
-
-    function sm(a, c) {
-        a.J = [0, c, 0];
-        a.a.push(a.J);
-        a.L = [0, c, 0];
-        a.b.push(a.L)
-    }
-
-    function tm(a, c, d, e, f, g, h, k, n) {
-        var p;
-        rj(e, a.X) ? p = a.sa : (p = vk(a.coordinates, 0, a.coordinates.length, 2, e, a.sa), Cd(a.X, e));
-        e = 0;
-        var q = h.length,
-            r = 0,
-            t;
-        for (a = a.ba; e < q;) {
-            var u = h[e],
-                A, z, D, B;
-            switch (u[0]) {
-                case 0:
-                    r = u[1];
-                    t = ma(r).toString();
-                    m(g[t]) ? e = u[2] : m(n) && !he(n, r.Q().G()) ? e = u[2] : ++e;
-                    break;
-                case 1:
-                    c.beginPath();
-                    ++e;
-                    break;
-                case 2:
-                    r = u[1];
-                    t = p[r];
-                    var y = p[r + 1],
-                        K = p[r + 2] - t,
-                        r = p[r + 3] - y;
-                    c.arc(t, y, Math.sqrt(K * K + r * r), 0, 2 * Math.PI, !0);
-                    ++e;
-                    break;
-                case 3:
-                    c.closePath();
-                    ++e;
-                    break;
-                case 4:
-                    r = u[1];
-                    t = u[2];
-                    A = u[3];
-                    D = u[4] * d;
-                    var J = u[5] * d,
-                        H = u[6];
-                    z = u[7];
-                    var P = u[8],
-                        sa = u[9],
-                        y = u[11],
-                        K = u[12],
-                        Oa = u[13],
-                        N = u[14];
-                    for (u[10] && (y += f); r < t; r += 2) {
-                        u = p[r] - D;
-                        B = p[r + 1] - J;
-                        Oa && (u = u + .5 | 0, B = B + .5 | 0);
-                        if (1 != K || 0 !== y) {
-                            var za = u + D,
-                                cb = B + J;
-                            qj(a, za, cb, K, K, y, -za, -cb);
-                            c.setTransform(a[0], a[1], a[4], a[5], a[12], a[13])
-                        }
-                        za = c.globalAlpha;
-                        1 != z && (c.globalAlpha = za * z);
-                        c.drawImage(A, P, sa, N, H, u, B, N * d, H * d);
-                        1 != z && (c.globalAlpha = za);
-                        1 == K && 0 === y || c.setTransform(1, 0, 0, 1, 0, 0)
-                    }++e;
-                    break;
-                case 5:
-                    r = u[1];
-                    t = u[2];
-                    D = u[3];
-                    J = u[4] * d;
-                    H = u[5] * d;
-                    y = u[6];
-                    K = u[7] * d;
-                    A = u[8];
-                    for (z = u[9]; r < t; r += 2) {
-                        u = p[r] + J;
-                        B = p[r + 1] + H;
-                        if (1 != K || 0 !== y) qj(a, u, B, K, K, y, -u, -B), c.setTransform(a[0], a[1], a[4], a[5], a[12], a[13]);
-                        z && c.strokeText(D, u, B);
-                        A && c.fillText(D, u, B);
-                        1 == K && 0 === y || c.setTransform(1, 0, 0, 1, 0, 0)
-                    }++e;
-                    break;
-                case 6:
-                    if (m(k) && (r = u[1], r = k(r))) return r;
-                    ++e;
-                    break;
-                case 7:
-                    c.fill();
-                    ++e;
-                    break;
-                case 8:
-                    r = u[1];
-                    t = u[2];
-                    c.moveTo(p[r], p[r + 1]);
-                    for (r += 2; r < t; r += 2) c.lineTo(p[r], p[r + 1]);
-                    ++e;
-                    break;
-                case 9:
-                    c.fillStyle = u[1];
-                    ++e;
-                    break;
-                case 10:
-                    r = m(u[7]) ? u[7] : !0;
-                    t = u[2];
-                    c.strokeStyle = u[1];
-                    c.lineWidth = r ? t * d : t;
-                    c.lineCap = u[3];
-                    c.lineJoin = u[4];
-                    c.miterLimit = u[5];
-                    ki && c.setLineDash(u[6]);
-                    ++e;
-                    break;
-                case 11:
-                    c.font = u[1];
-                    c.textAlign = u[2];
-                    c.textBaseline = u[3];
-                    ++e;
-                    break;
-                case 12:
-                    c.stroke();
-                    ++e;
-                    break;
-                default:
-                    ++e
-            }
-        }
-    }
-
-    function vm(a) {
-        var c = a.b;
-        c.reverse();
-        var d, e = c.length,
-            f, g, h = -1;
-        for (d = 0; d < e; ++d)
-            if (f = c[d], g = f[0], 6 == g) h = d;
-            else if (0 == g) {
-            f[2] = d;
-            f = a.b;
-            for (g = d; h < g;) {
-                var k = f[h];
-                f[h] = f[g];
-                f[g] = k;
-                ++h;
-                --g
-            }
-            h = -1
-        }
-    }
-
-    function wm(a, c) {
-        a.J[2] = a.a.length;
-        a.J = null;
-        a.L[2] = a.b.length;
-        a.L = null;
-        var d = [6, c];
-        a.a.push(d);
-        a.b.push(d)
-    }
-    qm.prototype.de = ca;
-    qm.prototype.Pe = function() {
-        return this.T
-    };
-
-    function xm(a, c, d) {
-        qm.call(this, a, c, d);
-        this.i = this.N = null;
-        this.H = this.p = this.n = this.V = this.U = this.o = this.l = this.q = this.g = this.f = this.c = void 0
-    }
-    w(xm, qm);
-    xm.prototype.kb = function(a, c) {
-        if (null !== this.i) {
-            sm(this, c);
-            var d = a.j,
-                e = this.coordinates.length,
-                d = rm(this, d, 0, d.length, a.s, !1);
-            this.a.push([4, e, d, this.i, this.c, this.f, this.g, this.q, this.l, this.o, this.U, this.V, this.n, this.p, this.H]);
-            this.b.push([4, e, d, this.N, this.c, this.f, this.g, this.q, this.l, this.o, this.U, this.V, this.n, this.p, this.H]);
-            wm(this, c)
-        }
-    };
-    xm.prototype.jb = function(a, c) {
-        if (null !== this.i) {
-            sm(this, c);
-            var d = a.j,
-                e = this.coordinates.length,
-                d = rm(this, d, 0, d.length, a.s, !1);
-            this.a.push([4, e, d, this.i, this.c, this.f, this.g, this.q, this.l, this.o, this.U, this.V, this.n, this.p, this.H]);
-            this.b.push([4, e, d, this.N, this.c, this.f, this.g, this.q, this.l, this.o, this.U, this.V, this.n, this.p, this.H]);
-            wm(this, c)
-        }
-    };
-    xm.prototype.de = function() {
-        vm(this);
-        this.f = this.c = void 0;
-        this.i = this.N = null;
-        this.H = this.p = this.V = this.U = this.o = this.l = this.q = this.n = this.g = void 0
-    };
-    xm.prototype.Za = function(a) {
-        var c = a.mb(),
-            d = a.Xa(),
-            e = a.he(1),
-            f = a.Lb(1),
-            g = a.rb();
-        this.c = c[0];
-        this.f = c[1];
-        this.N = e;
-        this.i = f;
-        this.g = d[1];
-        this.q = a.U;
-        this.l = g[0];
-        this.o = g[1];
-        this.U = a.V;
-        this.V = a.q;
-        this.n = a.l;
-        this.p = a.n;
-        this.H = d[0]
-    };
-
-    function ym(a, c, d) {
-        qm.call(this, a, c, d);
-        this.c = {
-            Xc: void 0,
-            Sc: void 0,
-            Tc: null,
-            Uc: void 0,
-            Vc: void 0,
-            Wc: void 0,
-            Ze: 0,
-            strokeStyle: void 0,
-            lineCap: void 0,
-            lineDash: null,
-            lineJoin: void 0,
-            lineWidth: void 0,
-            miterLimit: void 0
-        }
-    }
-    w(ym, qm);
-
-    function zm(a, c, d, e, f) {
-        var g = a.coordinates.length;
-        c = rm(a, c, d, e, f, !1);
-        g = [8, g, c];
-        a.a.push(g);
-        a.b.push(g);
-        return e
-    }
-    l = ym.prototype;
-    l.Pe = function() {
-        null === this.d && (this.d = Pd(this.T), 0 < this.e && Od(this.d, this.resolution * (this.e + 1) / 2, this.d));
-        return this.d
-    };
-
-    function Am(a) {
-        var c = a.c,
-            d = c.strokeStyle,
-            e = c.lineCap,
-            f = c.lineDash,
-            g = c.lineJoin,
-            h = c.lineWidth,
-            k = c.miterLimit;
-        c.Xc == d && c.Sc == e && ib(c.Tc, f) && c.Uc == g && c.Vc == h && c.Wc == k || (c.Ze != a.coordinates.length && (a.a.push([12]), c.Ze = a.coordinates.length), a.a.push([10, d, h, e, g, k, f], [1]), c.Xc = d, c.Sc = e, c.Tc = f, c.Uc = g, c.Vc = h, c.Wc = k)
-    }
-    l.zb = function(a, c) {
-        var d = this.c,
-            e = d.lineWidth;
-        m(d.strokeStyle) && m(e) && (Am(this), sm(this, c), this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash], [1]), d = a.j, zm(this, d, 0, d.length, a.s), this.b.push([12]), wm(this, c))
-    };
-    l.vc = function(a, c) {
-        var d = this.c,
-            e = d.lineWidth;
-        if (m(d.strokeStyle) && m(e)) {
-            Am(this);
-            sm(this, c);
-            this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash], [1]);
-            var d = a.c,
-                e = a.j,
-                f = a.s,
-                g = 0,
-                h, k;
-            h = 0;
-            for (k = d.length; h < k; ++h) g = zm(this, e, g, d[h], f);
-            this.b.push([12]);
-            wm(this, c)
-        }
-    };
-    l.de = function() {
-        this.c.Ze != this.coordinates.length && this.a.push([12]);
-        vm(this);
-        this.c = null
-    };
-    l.Aa = function(a, c) {
-        var d = c.b;
-        this.c.strokeStyle = vf(null === d ? yl : d);
-        d = c.d;
-        this.c.lineCap = m(d) ? d : "round";
-        d = c.c;
-        this.c.lineDash = null === d ? xl : d;
-        d = c.e;
-        this.c.lineJoin = m(d) ? d : "round";
-        d = c.a;
-        this.c.lineWidth = m(d) ? d : 1;
-        d = c.f;
-        this.c.miterLimit = m(d) ? d : 10;
-        this.c.lineWidth > this.e && (this.e = this.c.lineWidth, this.d = null)
-    };
-
-    function Bm(a, c, d) {
-        qm.call(this, a, c, d);
-        this.c = {
-            Mf: void 0,
-            Xc: void 0,
-            Sc: void 0,
-            Tc: null,
-            Uc: void 0,
-            Vc: void 0,
-            Wc: void 0,
-            fillStyle: void 0,
-            strokeStyle: void 0,
-            lineCap: void 0,
-            lineDash: null,
-            lineJoin: void 0,
-            lineWidth: void 0,
-            miterLimit: void 0
-        }
-    }
-    w(Bm, qm);
-
-    function Cm(a, c, d, e, f) {
-        var g = a.c,
-            h = [1];
-        a.a.push(h);
-        a.b.push(h);
-        var k, h = 0;
-        for (k = e.length; h < k; ++h) {
-            var n = e[h],
-                p = a.coordinates.length;
-            d = rm(a, c, d, n, f, !0);
-            d = [8, p, d];
-            p = [3];
-            a.a.push(d, p);
-            a.b.push(d, p);
-            d = n
-        }
-        c = [7];
-        a.b.push(c);
-        m(g.fillStyle) && a.a.push(c);
-        m(g.strokeStyle) && (g = [12], a.a.push(g), a.b.push(g));
-        return d
-    }
-    l = Bm.prototype;
-    l.uc = function(a, c) {
-        var d = this.c,
-            e = d.strokeStyle;
-        if (m(d.fillStyle) || m(e)) {
-            Dm(this);
-            sm(this, c);
-            this.b.push([9, vf(wl)]);
-            m(d.strokeStyle) && this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash]);
-            var f = a.j,
-                e = this.coordinates.length;
-            rm(this, f, 0, f.length, a.s, !1);
-            f = [1];
-            e = [2, e];
-            this.a.push(f, e);
-            this.b.push(f, e);
-            e = [7];
-            this.b.push(e);
-            m(d.fillStyle) && this.a.push(e);
-            m(d.strokeStyle) && (d = [12], this.a.push(d), this.b.push(d));
-            wm(this, c)
-        }
-    };
-    l.Rb = function(a, c) {
-        var d = this.c,
-            e = d.strokeStyle;
-        if (m(d.fillStyle) || m(e)) Dm(this), sm(this, c), this.b.push([9, vf(wl)]), m(d.strokeStyle) && this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash]), d = a.c, e = el(a), Cm(this, e, 0, d, a.s), wm(this, c)
-    };
-    l.wc = function(a, c) {
-        var d = this.c,
-            e = d.strokeStyle;
-        if (m(d.fillStyle) || m(e)) {
-            Dm(this);
-            sm(this, c);
-            this.b.push([9, vf(wl)]);
-            m(d.strokeStyle) && this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash]);
-            var d = a.c,
-                e = mm(a),
-                f = a.s,
-                g = 0,
-                h, k;
-            h = 0;
-            for (k = d.length; h < k; ++h) g = Cm(this, e, g, d[h], f);
-            wm(this, c)
-        }
-    };
-    l.de = function() {
-        vm(this);
-        this.c = null;
-        var a = this.oa;
-        if (0 !== a) {
-            var c = this.coordinates,
-                d, e;
-            d = 0;
-            for (e = c.length; d < e; ++d) c[d] = a * Math.round(c[d] / a)
-        }
-    };
-    l.Pe = function() {
-        null === this.d && (this.d = Pd(this.T), 0 < this.e && Od(this.d, this.resolution * (this.e + 1) / 2, this.d));
-        return this.d
-    };
-    l.Aa = function(a, c) {
-        var d = this.c;
-        if (null === a) d.fillStyle = void 0;
-        else {
-            var e = a.b;
-            d.fillStyle = vf(null === e ? wl : e)
-        }
-        null === c ? (d.strokeStyle = void 0, d.lineCap = void 0, d.lineDash = null, d.lineJoin = void 0, d.lineWidth = void 0, d.miterLimit = void 0) : (e = c.b, d.strokeStyle = vf(null === e ? yl : e), e = c.d, d.lineCap = m(e) ? e : "round", e = c.c, d.lineDash = null === e ? xl : e.slice(), e = c.e, d.lineJoin = m(e) ? e : "round", e = c.a, d.lineWidth = m(e) ? e : 1, e = c.f, d.miterLimit = m(e) ? e : 10, d.lineWidth > this.e && (this.e = d.lineWidth, this.d = null))
-    };
-
-    function Dm(a) {
-        var c = a.c,
-            d = c.fillStyle,
-            e = c.strokeStyle,
-            f = c.lineCap,
-            g = c.lineDash,
-            h = c.lineJoin,
-            k = c.lineWidth,
-            n = c.miterLimit;
-        m(d) && c.Mf != d && (a.a.push([9, d]), c.Mf = c.fillStyle);
-        !m(e) || c.Xc == e && c.Sc == f && c.Tc == g && c.Uc == h && c.Vc == k && c.Wc == n || (a.a.push([10, e, k, f, h, n, g]), c.Xc = e, c.Sc = f, c.Tc = g, c.Uc = h, c.Vc = k, c.Wc = n)
-    }
-
-    function Em(a, c, d) {
-        qm.call(this, a, c, d);
-        this.p = this.n = this.V = null;
-        this.i = "";
-        this.U = this.o = this.l = this.q = 0;
-        this.g = this.f = this.c = null
-    }
-    w(Em, qm);
-    Em.prototype.lb = function(a, c, d, e, f, g) {
-        if ("" !== this.i && null !== this.g && (null !== this.c || null !== this.f)) {
-            if (null !== this.c) {
-                f = this.c;
-                var h = this.V;
-                if (null === h || h.fillStyle != f.fillStyle) {
-                    var k = [9, f.fillStyle];
-                    this.a.push(k);
-                    this.b.push(k);
-                    null === h ? this.V = {
-                        fillStyle: f.fillStyle
-                    } : h.fillStyle = f.fillStyle
-                }
-            }
-            null !== this.f && (f = this.f, h = this.n, null === h || h.lineCap != f.lineCap || h.lineDash != f.lineDash || h.lineJoin != f.lineJoin || h.lineWidth != f.lineWidth || h.miterLimit != f.miterLimit || h.strokeStyle != f.strokeStyle) && (k = [10,
-                f.strokeStyle, f.lineWidth, f.lineCap, f.lineJoin, f.miterLimit, f.lineDash, !1
-            ], this.a.push(k), this.b.push(k), null === h ? this.n = {
-                lineCap: f.lineCap,
-                lineDash: f.lineDash,
-                lineJoin: f.lineJoin,
-                lineWidth: f.lineWidth,
-                miterLimit: f.miterLimit,
-                strokeStyle: f.strokeStyle
-            } : (h.lineCap = f.lineCap, h.lineDash = f.lineDash, h.lineJoin = f.lineJoin, h.lineWidth = f.lineWidth, h.miterLimit = f.miterLimit, h.strokeStyle = f.strokeStyle));
-            f = this.g;
-            h = this.p;
-            if (null === h || h.font != f.font || h.textAlign != f.textAlign || h.textBaseline != f.textBaseline) k = [11, f.font, f.textAlign, f.textBaseline], this.a.push(k), this.b.push(k), null === h ? this.p = {
-                font: f.font,
-                textAlign: f.textAlign,
-                textBaseline: f.textBaseline
-            } : (h.font = f.font, h.textAlign = f.textAlign, h.textBaseline = f.textBaseline);
-            sm(this, g);
-            f = this.coordinates.length;
-            a = rm(this, a, c, d, e, !1);
-            a = [5, f, a, this.i, this.q, this.l, this.o, this.U, null !== this.c, null !== this.f];
-            this.a.push(a);
-            this.b.push(a);
-            wm(this, g)
-        }
-    };
-    Em.prototype.Ba = function(a) {
-        if (null === a) this.i = "";
-        else {
-            var c = a.b;
-            null === c ? this.c = null : (c = c.b, c = vf(null === c ? wl : c), null === this.c ? this.c = {
-                fillStyle: c
-            } : this.c.fillStyle = c);
-            var d = a.f;
-            if (null === d) this.f = null;
-            else {
-                var c = d.b,
-                    e = d.d,
-                    f = d.c,
-                    g = d.e,
-                    h = d.a,
-                    d = d.f,
-                    e = m(e) ? e : "round",
-                    f = null != f ? f.slice() : xl,
-                    g = m(g) ? g : "round",
-                    h = m(h) ? h : 1,
-                    d = m(d) ? d : 10,
-                    c = vf(null === c ? yl : c);
-                if (null === this.f) this.f = {
-                    lineCap: e,
-                    lineDash: f,
-                    lineJoin: g,
-                    lineWidth: h,
-                    miterLimit: d,
-                    strokeStyle: c
-                };
-                else {
-                    var k = this.f;
-                    k.lineCap = e;
-                    k.lineDash = f;
-                    k.lineJoin = g;
-                    k.lineWidth = h;
-                    k.miterLimit = d;
-                    k.strokeStyle = c
-                }
-            }
-            var n = a.d,
-                c = a.q,
-                e = a.l,
-                f = a.e,
-                h = a.a,
-                d = a.c,
-                g = a.g,
-                k = a.i;
-            a = m(n) ? n : "10px sans-serif";
-            g = m(g) ? g : "center";
-            k = m(k) ? k : "middle";
-            null === this.g ? this.g = {
-                font: a,
-                textAlign: g,
-                textBaseline: k
-            } : (n = this.g, n.font = a, n.textAlign = g, n.textBaseline = k);
-            this.i = m(d) ? d : "";
-            this.q = m(c) ? c : 0;
-            this.l = m(e) ? e : 0;
-            this.o = m(f) ? f : 0;
-            this.U = m(h) ? h : 1
-        }
-    };
-
-    function Fm(a, c, d, e) {
-        this.q = a;
-        this.d = c;
-        this.i = d;
-        this.e = e;
-        this.a = {};
-        this.f = ai(1, 1);
-        this.g = zd()
-    }
-
-    function Gm(a) {
-        for (var c in a.a) {
-            var d = a.a[c],
-                e;
-            for (e in d) d[e].de()
-        }
-    }
-    Fm.prototype.c = function(a, c, d, e, f) {
-        var g = this.g;
-        qj(g, .5, .5, 1 / c, -1 / c, -d, -a[0], -a[1]);
-        var h = this.f;
-        h.clearRect(0, 0, 1, 1);
-        var k;
-        m(this.e) && (k = Kd(), Ld(k, a), Od(k, c * this.e, k));
-        return Hm(this, h, g, d, e, function(a) {
-            if (0 < h.getImageData(0, 0, 1, 1).data[3]) {
-                if (a = f(a)) return a;
-                h.clearRect(0, 0, 1, 1)
-            }
-        }, k)
-    };
-    Fm.prototype.b = function(a, c) {
-        var d = m(a) ? a.toString() : "0",
-            e = this.a[d];
-        m(e) || (e = {}, this.a[d] = e);
-        d = e[c];
-        m(d) || (d = new Im[c](this.q, this.d, this.i), e[c] = d);
-        return d
-    };
-    Fm.prototype.la = function() {
-        return xb(this.a)
-    };
-
-    function Jm(a, c, d, e, f, g) {
-        var h = Ua(tb(a.a), Number);
-        gb(h);
-        var k = a.d,
-            n = k[0],
-            p = k[1],
-            q = k[2],
-            k = k[3],
-            n = [n, p, n, k, q, k, q, p];
-        vk(n, 0, 8, 2, e, n);
-        c.save();
-        c.beginPath();
-        c.moveTo(n[0], n[1]);
-        c.lineTo(n[2], n[3]);
-        c.lineTo(n[4], n[5]);
-        c.lineTo(n[6], n[7]);
-        c.closePath();
-        c.clip();
-        for (var r, t, n = 0, p = h.length; n < p; ++n)
-            for (r = a.a[h[n].toString()], q = 0, k = pm.length; q < k; ++q) t = r[pm[q]], m(t) && tm(t, c, d, e, f, g, t.a, void 0);
-        c.restore()
-    }
-
-    function Hm(a, c, d, e, f, g, h) {
-        var k = Ua(tb(a.a), Number);
-        gb(k, function(a, c) {
-            return c - a
-        });
-        var n, p, q, r, t;
-        n = 0;
-        for (p = k.length; n < p; ++n)
-            for (r = a.a[k[n].toString()], q = pm.length - 1; 0 <= q; --q)
-                if (t = r[pm[q]], m(t) && (t = tm(t, c, 1, d, e, f, t.b, g, h))) return t
-    }
-    var Im = {
-        Image: xm,
-        LineString: ym,
-        Polygon: Bm,
-        Text: Em
-    };
-
-    function Km(a) {
-        uj.call(this, a);
-        this.J = zd()
-    }
-    w(Km, uj);
-    Km.prototype.o = function(a, c, d) {
-        Lm(this, "precompose", d, a, void 0);
-        var e = this.fe();
-        if (null !== e) {
-            var f = c.extent,
-                g = m(f);
-            if (g) {
-                var h = a.pixelRatio,
-                    k = be(f),
-                    n = ae(f),
-                    p = $d(f),
-                    f = Zd(f);
-                sj(a.coordinateToPixelMatrix, k, k);
-                sj(a.coordinateToPixelMatrix, n, n);
-                sj(a.coordinateToPixelMatrix, p, p);
-                sj(a.coordinateToPixelMatrix, f, f);
-                d.save();
-                d.beginPath();
-                d.moveTo(k[0] * h, k[1] * h);
-                d.lineTo(n[0] * h, n[1] * h);
-                d.lineTo(p[0] * h, p[1] * h);
-                d.lineTo(f[0] * h, f[1] * h);
-                d.clip()
-            }
-            h = this.Xf();
-            k = d.globalAlpha;
-            d.globalAlpha = c.opacity;
-            0 === a.viewState.rotation ? (c = h[13], n = e.width * h[0], p = e.height * h[5], d.drawImage(e, 0, 0, +e.width, +e.height, Math.round(h[12]), Math.round(c), Math.round(n), Math.round(p))) : (d.setTransform(h[0], h[1], h[4], h[5], h[12], h[13]), d.drawImage(e, 0, 0), d.setTransform(1, 0, 0, 1, 0, 0));
-            d.globalAlpha = k;
-            g && d.restore()
-        }
-        Lm(this, "postcompose", d, a, void 0)
-    };
-
-    function Lm(a, c, d, e, f) {
-        var g = a.a;
-        bd(g, c) && (a = m(f) ? f : Mm(a, e, 0), a = new cm(d, e.pixelRatio, e.extent, a, e.viewState.rotation), g.dispatchEvent(new il(c, g, a, null, e, d, null)), om(a))
-    }
-
-    function Mm(a, c, d) {
-        var e = c.viewState,
-            f = c.pixelRatio;
-        return qj(a.J, f * c.size[0] / 2, f * c.size[1] / 2, f / e.resolution, -f / e.resolution, -e.rotation, -e.center[0] + d, -e.center[1])
-    }
-
-    function Nm(a, c) {
-        var d = [0, 0];
-        sj(c, a, d);
-        return d
-    }
-    var Om = function() {
-        var a = null,
-            c = null;
-        return function(d) {
-            if (null === a) {
-                a = ai(1, 1);
-                c = a.createImageData(1, 1);
-                var e = c.data;
-                e[0] = 42;
-                e[1] = 84;
-                e[2] = 126;
-                e[3] = 255
-            }
-            var e = a.canvas,
-                f = d[0] <= e.width && d[1] <= e.height;
-            f || (e.width = d[0], e.height = d[1], e = d[0] - 1, d = d[1] - 1, a.putImageData(c, e, d), d = a.getImageData(e, d, 1, 1), f = ib(c.data, d.data));
-            return f
-        }
-    }();
-
-    function Pm(a, c, d) {
-        wk.call(this);
-        this.uh(a, m(c) ? c : 0, d)
-    }
-    w(Pm, wk);
-    l = Pm.prototype;
-    l.clone = function() {
-        var a = new Pm(null);
-        yk(a, this.a, this.j.slice());
-        a.k();
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        var f = this.j;
-        a -= f[0];
-        var g = c - f[1];
-        c = a * a + g * g;
-        if (c < e) {
-            if (0 === c)
-                for (e = 0; e < this.s; ++e) d[e] = f[e];
-            else
-                for (e = this.zg() / Math.sqrt(c), d[0] = f[0] + e * a, d[1] = f[1] + e * g, e = 2; e < this.s; ++e) d[e] = f[e];
-            d.length = this.s;
-            return c
-        }
-        return e
-    };
-    l.Jb = function(a, c) {
-        var d = this.j,
-            e = a - d[0],
-            d = c - d[1];
-        return e * e + d * d <= Qm(this)
-    };
-    l.dd = function() {
-        return this.j.slice(0, this.s)
-    };
-    l.wd = function(a) {
-        var c = this.j,
-            d = c[this.s] - c[0];
-        return Nd(c[0] - d, c[1] - d, c[0] + d, c[1] + d, a)
-    };
-    l.zg = function() {
-        return Math.sqrt(Qm(this))
-    };
-
-    function Qm(a) {
-        var c = a.j[a.s] - a.j[0];
-        a = a.j[a.s + 1] - a.j[1];
-        return c * c + a * a
-    }
-    l.M = function() {
-        return "Circle"
-    };
-    l.pl = function(a) {
-        var c = this.s,
-            d = a.slice();
-        d[c] = d[0] + (this.j[c] - this.j[0]);
-        var e;
-        for (e = 1; e < c; ++e) d[c + e] = a[e];
-        yk(this, this.a, d);
-        this.k()
-    };
-    l.uh = function(a, c, d) {
-        if (null === a) yk(this, "XY", null);
-        else {
-            zk(this, d, a, 0);
-            null === this.j && (this.j = []);
-            d = this.j;
-            a = Jk(d, a);
-            d[a++] = d[0] + c;
-            var e;
-            c = 1;
-            for (e = this.s; c < e; ++c) d[a++] = d[c];
-            d.length = a
-        }
-        this.k()
-    };
-    l.Ag = function(a) {
-        this.j[this.s] = this.j[0] + a;
-        this.k()
-    };
-
-    function Rm(a) {
-        uk.call(this);
-        this.d = m(a) ? a : null;
-        Sm(this)
-    }
-    w(Rm, uk);
-
-    function Tm(a) {
-        var c = [],
-            d, e;
-        d = 0;
-        for (e = a.length; d < e; ++d) c.push(a[d].clone());
-        return c
-    }
-
-    function Um(a) {
-        var c, d;
-        if (null !== a.d)
-            for (c = 0, d = a.d.length; c < d; ++c) Vc(a.d[c], "change", a.k, !1, a)
-    }
-
-    function Sm(a) {
-        var c, d;
-        if (null !== a.d)
-            for (c = 0, d = a.d.length; c < d; ++c) x(a.d[c], "change", a.k, !1, a)
-    }
-    l = Rm.prototype;
-    l.clone = function() {
-        var a = new Rm(null);
-        a.xh(this.d);
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        if (e < Qd(this.G(), a, c)) return e;
-        var f = this.d,
-            g, h;
-        g = 0;
-        for (h = f.length; g < h; ++g) e = f[g].Sa(a, c, d, e);
-        return e
-    };
-    l.Jb = function(a, c) {
-        var d = this.d,
-            e, f;
-        e = 0;
-        for (f = d.length; e < f; ++e)
-            if (d[e].Jb(a, c)) return !0;
-        return !1
-    };
-    l.wd = function(a) {
-        Nd(Infinity, Infinity, -Infinity, -Infinity, a);
-        for (var c = this.d, d = 0, e = c.length; d < e; ++d) Wd(a, c[d].G());
-        return a
-    };
-    l.Vf = function() {
-        return Tm(this.d)
-    };
-    l.Ve = function(a) {
-        this.l != this.b && (yb(this.f), this.g = 0, this.l = this.b);
-        if (0 > a || 0 !== this.g && a < this.g) return this;
-        var c = a.toString();
-        if (this.f.hasOwnProperty(c)) return this.f[c];
-        var d = [],
-            e = this.d,
-            f = !1,
-            g, h;
-        g = 0;
-        for (h = e.length; g < h; ++g) {
-            var k = e[g],
-                n = k.Ve(a);
-            d.push(n);
-            n !== k && (f = !0)
-        }
-        if (f) return a = new Rm(null), Um(a), a.d = d, Sm(a), a.k(), this.f[c] = a;
-        this.g = a;
-        return this
-    };
-    l.M = function() {
-        return "GeometryCollection"
-    };
-    l.ra = function(a) {
-        var c = this.d,
-            d, e;
-        d = 0;
-        for (e = c.length; d < e; ++d)
-            if (c[d].ra(a)) return !0;
-        return !1
-    };
-    l.la = function() {
-        return 0 == this.d.length
-    };
-    l.xh = function(a) {
-        a = Tm(a);
-        Um(this);
-        this.d = a;
-        Sm(this);
-        this.k()
-    };
-    l.qa = function(a) {
-        var c = this.d,
-            d, e;
-        d = 0;
-        for (e = c.length; d < e; ++d) c[d].qa(a);
-        this.k()
-    };
-    l.Oa = function(a, c) {
-        var d = this.d,
-            e, f;
-        e = 0;
-        for (f = d.length; e < f; ++e) d[e].Oa(a, c);
-        this.k()
-    };
-    l.O = function() {
-        Um(this);
-        Rm.S.O.call(this)
-    };
-
-    function Vm(a, c, d, e, f) {
-        var g = NaN,
-            h = NaN,
-            k = (d - c) / e;
-        if (0 !== k)
-            if (1 == k) g = a[c], h = a[c + 1];
-            else if (2 == k) g = .5 * a[c] + .5 * a[c + e], h = .5 * a[c + 1] + .5 * a[c + e + 1];
-        else {
-            var h = a[c],
-                k = a[c + 1],
-                n = 0,
-                g = [0],
-                p;
-            for (p = c + e; p < d; p += e) {
-                var q = a[p],
-                    r = a[p + 1],
-                    n = n + Math.sqrt((q - h) * (q - h) + (r - k) * (r - k));
-                g.push(n);
-                h = q;
-                k = r
-            }
-            d = .5 * n;
-            for (var t, h = hb, k = 0, n = g.length; k < n;) p = k + n >> 1, q = h(d, g[p]), 0 < q ? k = p + 1 : (n = p, t = !q);
-            t = t ? k : ~k;
-            0 > t ? (d = (d - g[-t - 2]) / (g[-t - 1] - g[-t - 2]), c += (-t - 2) * e, g = Xb(a[c], a[c + e], d), h = Xb(a[c + 1], a[c + e + 1], d)) : (g = a[c + t * e], h = a[c + t * e + 1])
-        }
-        return null != f ? (f[0] = g, f[1] = h, f) : [g, h]
-    }
-
-    function Wm(a, c, d, e, f, g) {
-        if (d == c) return null;
-        if (f < a[c + e - 1]) return g ? (d = a.slice(c, c + e), d[e - 1] = f, d) : null;
-        if (a[d - 1] < f) return g ? (d = a.slice(d - e, d), d[e - 1] = f, d) : null;
-        if (f == a[c + e - 1]) return a.slice(c, c + e);
-        c /= e;
-        for (d /= e; c < d;) g = c + d >> 1, f < a[(g + 1) * e - 1] ? d = g : c = g + 1;
-        d = a[c * e - 1];
-        if (f == d) return a.slice((c - 1) * e, (c - 1) * e + e);
-        g = (f - d) / (a[(c + 1) * e - 1] - d);
-        d = [];
-        var h;
-        for (h = 0; h < e - 1; ++h) d.push(Xb(a[(c - 1) * e + h], a[c * e + h], g));
-        d.push(f);
-        return d
-    }
-
-    function Xm(a, c, d, e, f, g) {
-        var h = 0;
-        if (g) return Wm(a, h, c[c.length - 1], d, e, f);
-        if (e < a[d - 1]) return f ? (a = a.slice(0, d), a[d - 1] = e, a) : null;
-        if (a[a.length - 1] < e) return f ? (a = a.slice(a.length - d), a[d - 1] = e, a) : null;
-        f = 0;
-        for (g = c.length; f < g; ++f) {
-            var k = c[f];
-            if (h != k) {
-                if (e < a[h + d - 1]) break;
-                if (e <= a[k - 1]) return Wm(a, h, k, d, e, !1);
-                h = k
-            }
-        }
-        return null
-    };
-
-    function O(a, c) {
-        wk.call(this);
-        this.c = null;
-        this.p = this.H = this.i = -1;
-        this.W(a, c)
-    }
-    w(O, wk);
-    l = O.prototype;
-    l.ui = function(a) {
-        null === this.j ? this.j = a.slice() : db(this.j, a);
-        this.k()
-    };
-    l.clone = function() {
-        var a = new O(null);
-        Ym(a, this.a, this.j.slice());
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        if (e < Qd(this.G(), a, c)) return e;
-        this.p != this.b && (this.H = Math.sqrt(Fk(this.j, 0, this.j.length, this.s, 0)), this.p = this.b);
-        return Hk(this.j, 0, this.j.length, this.s, this.H, !1, a, c, d, e)
-    };
-    l.Ji = function(a, c) {
-        return Xk(this.j, 0, this.j.length, this.s, a, c)
-    };
-    l.ql = function(a, c) {
-        return "XYM" != this.a && "XYZM" != this.a ? null : Wm(this.j, 0, this.j.length, this.s, a, m(c) ? c : !1)
-    };
-    l.K = function() {
-        return Mk(this.j, 0, this.j.length, this.s)
-    };
-    l.Bg = function() {
-        var a = this.j,
-            c = this.s,
-            d = a[0],
-            e = a[1],
-            f = 0,
-            g;
-        for (g = 0 + c; g < this.j.length; g += c) var h = a[g],
-            k = a[g + 1],
-            f = f + Math.sqrt((h - d) * (h - d) + (k - e) * (k - e)),
-            d = h,
-            e = k;
-        return f
-    };
-
-    function km(a) {
-        a.i != a.b && (a.c = Vm(a.j, 0, a.j.length, a.s, a.c), a.i = a.b);
-        return a.c
-    }
-    l.xc = function(a) {
-        var c = [];
-        c.length = Ok(this.j, 0, this.j.length, this.s, a, c, 0);
-        a = new O(null);
-        Ym(a, "XY", c);
-        return a
-    };
-    l.M = function() {
-        return "LineString"
-    };
-    l.ra = function(a) {
-        return Yk(this.j, 0, this.j.length, this.s, a)
-    };
-    l.W = function(a, c) {
-        null === a ? Ym(this, "XY", null) : (zk(this, c, a, 1), null === this.j && (this.j = []), this.j.length = Kk(this.j, 0, a, this.s), this.k())
-    };
-
-    function Ym(a, c, d) {
-        yk(a, c, d);
-        a.k()
-    };
-
-    function Q(a, c) {
-        wk.call(this);
-        this.c = [];
-        this.i = this.p = -1;
-        this.W(a, c)
-    }
-    w(Q, wk);
-    l = Q.prototype;
-    l.vi = function(a) {
-        null === this.j ? this.j = a.j.slice() : db(this.j, a.j.slice());
-        this.c.push(this.j.length);
-        this.k()
-    };
-    l.clone = function() {
-        var a = new Q(null);
-        Zm(a, this.a, this.j.slice(), this.c.slice());
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        if (e < Qd(this.G(), a, c)) return e;
-        this.i != this.b && (this.p = Math.sqrt(Gk(this.j, 0, this.c, this.s, 0)), this.i = this.b);
-        return Ik(this.j, 0, this.c, this.s, this.p, !1, a, c, d, e)
-    };
-    l.sl = function(a, c, d) {
-        return "XYM" != this.a && "XYZM" != this.a || 0 === this.j.length ? null : Xm(this.j, this.c, this.s, a, m(c) ? c : !1, m(d) ? d : !1)
-    };
-    l.K = function() {
-        return Nk(this.j, 0, this.c, this.s)
-    };
-    l.gj = function(a) {
-        if (0 > a || this.c.length <= a) return null;
-        var c = new O(null);
-        Ym(c, this.a, this.j.slice(0 === a ? 0 : this.c[a - 1], this.c[a]));
-        return c
-    };
-    l.ad = function() {
-        var a = this.j,
-            c = this.c,
-            d = this.a,
-            e = [],
-            f = 0,
-            g, h;
-        g = 0;
-        for (h = c.length; g < h; ++g) {
-            var k = c[g],
-                n = new O(null);
-            Ym(n, d, a.slice(f, k));
-            e.push(n);
-            f = k
-        }
-        return e
-    };
-
-    function lm(a) {
-        var c = [],
-            d = a.j,
-            e = 0,
-            f = a.c;
-        a = a.s;
-        var g, h;
-        g = 0;
-        for (h = f.length; g < h; ++g) {
-            var k = f[g],
-                e = Vm(d, e, k, a);
-            db(c, e);
-            e = k
-        }
-        return c
-    }
-    l.xc = function(a) {
-        var c = [],
-            d = [],
-            e = this.j,
-            f = this.c,
-            g = this.s,
-            h = 0,
-            k = 0,
-            n, p;
-        n = 0;
-        for (p = f.length; n < p; ++n) {
-            var q = f[n],
-                k = Ok(e, h, q, g, a, c, k);
-            d.push(k);
-            h = q
-        }
-        c.length = k;
-        a = new Q(null);
-        Zm(a, "XY", c, d);
-        return a
-    };
-    l.M = function() {
-        return "MultiLineString"
-    };
-    l.ra = function(a) {
-        a: {
-            var c = this.j,
-                d = this.c,
-                e = this.s,
-                f = 0,
-                g, h;g = 0;
-            for (h = d.length; g < h; ++g) {
-                if (Yk(c, f, d[g], e, a)) {
-                    a = !0;
-                    break a
-                }
-                f = d[g]
-            }
-            a = !1
-        }
-        return a
-    };
-    l.W = function(a, c) {
-        if (null === a) Zm(this, "XY", null, this.c);
-        else {
-            zk(this, c, a, 2);
-            null === this.j && (this.j = []);
-            var d = Lk(this.j, 0, a, this.s, this.c);
-            this.j.length = 0 === d.length ? 0 : d[d.length - 1];
-            this.k()
-        }
-    };
-
-    function Zm(a, c, d, e) {
-        yk(a, c, d);
-        a.c = e;
-        a.k()
-    }
-
-    function $m(a, c) {
-        var d = "XY",
-            e = [],
-            f = [],
-            g, h;
-        g = 0;
-        for (h = c.length; g < h; ++g) {
-            var k = c[g];
-            0 === g && (d = k.a);
-            db(e, k.j);
-            f.push(e.length)
-        }
-        Zm(a, d, e, f)
-    };
-
-    function an(a, c) {
-        wk.call(this);
-        this.W(a, c)
-    }
-    w(an, wk);
-    l = an.prototype;
-    l.xi = function(a) {
-        null === this.j ? this.j = a.j.slice() : db(this.j, a.j);
-        this.k()
-    };
-    l.clone = function() {
-        var a = new an(null);
-        yk(a, this.a, this.j.slice());
-        a.k();
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        if (e < Qd(this.G(), a, c)) return e;
-        var f = this.j,
-            g = this.s,
-            h, k, n;
-        h = 0;
-        for (k = f.length; h < k; h += g)
-            if (n = Dk(a, c, f[h], f[h + 1]), n < e) {
-                e = n;
-                for (n = 0; n < g; ++n) d[n] = f[h + n];
-                d.length = g
-            }
-        return e
-    };
-    l.K = function() {
-        return Mk(this.j, 0, this.j.length, this.s)
-    };
-    l.qj = function(a) {
-        var c = null === this.j ? 0 : this.j.length / this.s;
-        if (0 > a || c <= a) return null;
-        c = new E(null);
-        Sk(c, this.a, this.j.slice(a * this.s, (a + 1) * this.s));
-        return c
-    };
-    l.ce = function() {
-        var a = this.j,
-            c = this.a,
-            d = this.s,
-            e = [],
-            f, g;
-        f = 0;
-        for (g = a.length; f < g; f += d) {
-            var h = new E(null);
-            Sk(h, c, a.slice(f, f + d));
-            e.push(h)
-        }
-        return e
-    };
-    l.M = function() {
-        return "MultiPoint"
-    };
-    l.ra = function(a) {
-        var c = this.j,
-            d = this.s,
-            e, f, g, h;
-        e = 0;
-        for (f = c.length; e < f; e += d)
-            if (g = c[e], h = c[e + 1], Sd(a, g, h)) return !0;
-        return !1
-    };
-    l.W = function(a, c) {
-        null === a ? yk(this, "XY", null) : (zk(this, c, a, 1), null === this.j && (this.j = []), this.j.length = Kk(this.j, 0, a, this.s));
-        this.k()
-    };
-
-    function R(a, c) {
-        wk.call(this);
-        this.c = [];
-        this.p = -1;
-        this.H = null;
-        this.N = this.J = this.L = -1;
-        this.i = null;
-        this.W(a, c)
-    }
-    w(R, wk);
-    l = R.prototype;
-    l.yi = function(a) {
-        if (null === this.j) this.j = a.j.slice(), a = a.c.slice(), this.c.push();
-        else {
-            var c = this.j.length;
-            db(this.j, a.j);
-            a = a.c.slice();
-            var d, e;
-            d = 0;
-            for (e = a.length; d < e; ++d) a[d] += c
-        }
-        this.c.push(a);
-        this.k()
-    };
-    l.clone = function() {
-        var a = new R(null);
-        bn(a, this.a, this.j.slice(), this.c.slice());
-        return a
-    };
-    l.Sa = function(a, c, d, e) {
-        if (e < Qd(this.G(), a, c)) return e;
-        if (this.J != this.b) {
-            var f = this.c,
-                g = 0,
-                h = 0,
-                k, n;
-            k = 0;
-            for (n = f.length; k < n; ++k) var p = f[k],
-                h = Gk(this.j, g, p, this.s, h),
-                g = p[p.length - 1];
-            this.L = Math.sqrt(h);
-            this.J = this.b
-        }
-        f = mm(this);
-        g = this.c;
-        h = this.s;
-        k = this.L;
-        n = 0;
-        var p = m(void 0) ? void 0 : [NaN, NaN],
-            q, r;
-        q = 0;
-        for (r = g.length; q < r; ++q) {
-            var t = g[q];
-            e = Ik(f, n, t, h, k, !0, a, c, d, e, p);
-            n = t[t.length - 1]
-        }
-        return e
-    };
-    l.Jb = function(a, c) {
-        var d;
-        a: {
-            d = mm(this);
-            var e = this.c,
-                f = 0;
-            if (0 !== e.length) {
-                var g, h;
-                g = 0;
-                for (h = e.length; g < h; ++g) {
-                    var k = e[g];
-                    if (Vk(d, f, k, this.s, a, c)) {
-                        d = !0;
-                        break a
-                    }
-                    f = k[k.length - 1]
-                }
-            }
-            d = !1
-        }
-        return d
-    };
-    l.tl = function() {
-        var a = mm(this),
-            c = this.c,
-            d = 0,
-            e = 0,
-            f, g;
-        f = 0;
-        for (g = c.length; f < g; ++f) var h = c[f],
-            e = e + Bk(a, d, h, this.s),
-            d = h[h.length - 1];
-        return e
-    };
-    l.K = function(a) {
-        var c;
-        m(a) ? (c = mm(this).slice(), cl(c, this.c, this.s, a)) : c = this.j;
-        a = c;
-        c = this.c;
-        var d = this.s,
-            e = 0,
-            f = m(void 0) ? void 0 : [],
-            g = 0,
-            h, k;
-        h = 0;
-        for (k = c.length; h < k; ++h) {
-            var n = c[h];
-            f[g++] = Nk(a, e, n, d, f[g]);
-            e = n[n.length - 1]
-        }
-        f.length = g;
-        return f
-    };
-
-    function nm(a) {
-        if (a.p != a.b) {
-            var c = a.j,
-                d = a.c,
-                e = a.s,
-                f = 0,
-                g = [],
-                h, k, n = Kd();
-            h = 0;
-            for (k = d.length; h < k; ++h) {
-                var p = d[h],
-                    n = Xd(Nd(Infinity, Infinity, -Infinity, -Infinity, void 0), c, f, p[0], e);
-                g.push((n[0] + n[2]) / 2, (n[1] + n[3]) / 2);
-                f = p[p.length - 1]
-            }
-            c = mm(a);
-            d = a.c;
-            e = a.s;
-            f = 0;
-            h = [];
-            k = 0;
-            for (n = d.length; k < n; ++k) p = d[k], h = Wk(c, f, p, e, g, 2 * k, h), f = p[p.length - 1];
-            a.H = h;
-            a.p = a.b
-        }
-        return a.H
-    }
-    l.dj = function() {
-        var a = new an(null),
-            c = nm(this).slice();
-        yk(a, "XY", c);
-        a.k();
-        return a
-    };
-
-    function mm(a) {
-        if (a.N != a.b) {
-            var c = a.j,
-                d;
-            a: {
-                d = a.c;
-                var e, f;e = 0;
-                for (f = d.length; e < f; ++e)
-                    if (!al(c, d[e], a.s, void 0)) {
-                        d = !1;
-                        break a
-                    }
-                d = !0
-            }
-            d ? a.i = c : (a.i = c.slice(), a.i.length = cl(a.i, a.c, a.s));
-            a.N = a.b
-        }
-        return a.i
-    }
-    l.xc = function(a) {
-        var c = [],
-            d = [],
-            e = this.j,
-            f = this.c,
-            g = this.s;
-        a = Math.sqrt(a);
-        var h = 0,
-            k = 0,
-            n, p;
-        n = 0;
-        for (p = f.length; n < p; ++n) {
-            var q = f[n],
-                r = [],
-                k = Pk(e, h, q, g, a, c, k, r);
-            d.push(r);
-            h = q[q.length - 1]
-        }
-        c.length = k;
-        e = new R(null);
-        bn(e, "XY", c, d);
-        return e
-    };
-    l.sj = function(a) {
-        if (0 > a || this.c.length <= a) return null;
-        var c;
-        0 === a ? c = 0 : (c = this.c[a - 1], c = c[c.length - 1]);
-        a = this.c[a].slice();
-        var d = a[a.length - 1];
-        if (0 !== c) {
-            var e, f;
-            e = 0;
-            for (f = a.length; e < f; ++e) a[e] -= c
-        }
-        e = new F(null);
-        dl(e, this.a, this.j.slice(c, d), a);
-        return e
-    };
-    l.Id = function() {
-        var a = this.a,
-            c = this.j,
-            d = this.c,
-            e = [],
-            f = 0,
-            g, h, k, n;
-        g = 0;
-        for (h = d.length; g < h; ++g) {
-            var p = d[g].slice(),
-                q = p[p.length - 1];
-            if (0 !== f)
-                for (k = 0, n = p.length; k < n; ++k) p[k] -= f;
-            k = new F(null);
-            dl(k, a, c.slice(f, q), p);
-            e.push(k);
-            f = q
-        }
-        return e
-    };
-    l.M = function() {
-        return "MultiPolygon"
-    };
-    l.ra = function(a) {
-        a: {
-            var c = mm(this),
-                d = this.c,
-                e = this.s,
-                f = 0,
-                g, h;g = 0;
-            for (h = d.length; g < h; ++g) {
-                var k = d[g];
-                if (Zk(c, f, k, e, a)) {
-                    a = !0;
-                    break a
-                }
-                f = k[k.length - 1]
-            }
-            a = !1
-        }
-        return a
-    };
-    l.W = function(a, c) {
-        if (null === a) bn(this, "XY", null, this.c);
-        else {
-            zk(this, c, a, 3);
-            null === this.j && (this.j = []);
-            var d = this.j,
-                e = this.s,
-                f = this.c,
-                g = 0,
-                f = m(f) ? f : [],
-                h = 0,
-                k, n;
-            k = 0;
-            for (n = a.length; k < n; ++k) g = Lk(d, g, a[k], e, f[h]), f[h++] = g, g = g[g.length - 1];
-            f.length = h;
-            0 === f.length ? this.j.length = 0 : (d = f[f.length - 1], this.j.length = 0 === d.length ? 0 : d[d.length - 1]);
-            this.k()
-        }
-    };
-
-    function bn(a, c, d, e) {
-        yk(a, c, d);
-        a.c = e;
-        a.k()
-    }
-
-    function cn(a, c) {
-        var d = "XY",
-            e = [],
-            f = [],
-            g, h, k;
-        g = 0;
-        for (h = c.length; g < h; ++g) {
-            var n = c[g];
-            0 === g && (d = n.a);
-            var p = e.length;
-            k = n.c;
-            var q, r;
-            q = 0;
-            for (r = k.length; q < r; ++q) k[q] += p;
-            db(e, n.j);
-            f.push(k)
-        }
-        bn(a, d, e, f)
-    };
-
-    function dn(a, c) {
-        return ma(a) - ma(c)
-    }
-
-    function en(a, c) {
-        var d = .5 * a / c;
-        return d * d
-    }
-
-    function fn(a, c, d, e, f, g) {
-        var h = !1,
-            k, n;
-        k = d.f;
-        null !== k && (n = k.gd(), 2 == n || 3 == n ? k.xf(f, g) : (0 == n && k.load(), k.$e(f, g), h = !0));
-        f = (0, d.d)(c);
-        null != f && (e = f.Ve(e), (0, gn[e.M()])(a, e, d, c));
-        return h
-    }
-    var gn = {
-        Point: function(a, c, d, e) {
-            var f = d.f;
-            if (null !== f) {
-                if (2 != f.gd()) return;
-                var g = a.b(d.b, "Image");
-                g.Za(f);
-                g.kb(c, e)
-            }
-            f = d.a;
-            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), a.lb(c.K(), 0, 2, 2, c, e))
-        },
-        LineString: function(a, c, d, e) {
-            var f = d.c;
-            if (null !== f) {
-                var g = a.b(d.b, "LineString");
-                g.Aa(null, f);
-                g.zb(c, e)
-            }
-            f = d.a;
-            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), a.lb(km(c), 0, 2, 2, c, e))
-        },
-        Polygon: function(a, c, d, e) {
-            var f = d.e,
-                g = d.c;
-            if (null !== f || null !== g) {
-                var h = a.b(d.b, "Polygon");
-                h.Aa(f, g);
-                h.Rb(c, e)
-            }
-            f = d.a;
-            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), a.lb(fl(c), 0, 2, 2, c, e))
-        },
-        MultiPoint: function(a, c, d, e) {
-            var f = d.f;
-            if (null !== f) {
-                if (2 != f.gd()) return;
-                var g = a.b(d.b, "Image");
-                g.Za(f);
-                g.jb(c, e)
-            }
-            f = d.a;
-            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), d = c.j, a.lb(d, 0, d.length, c.s, c, e))
-        },
-        MultiLineString: function(a, c, d, e) {
-            var f = d.c;
-            if (null !== f) {
-                var g = a.b(d.b, "LineString");
-                g.Aa(null, f);
-                g.vc(c, e)
-            }
-            f = d.a;
-            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), d = lm(c), a.lb(d, 0, d.length, 2, c, e))
-        },
-        MultiPolygon: function(a, c, d, e) {
-            var f = d.e,
-                g = d.c;
-            if (null !== g || null !== f) {
-                var h = a.b(d.b, "Polygon");
-                h.Aa(f, g);
-                h.wc(c, e)
-            }
-            f = d.a;
-            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), d = nm(c), a.lb(d, 0, d.length, 2, c, e))
-        },
-        GeometryCollection: function(a, c, d, e) {
-            c = c.d;
-            var f, g;
-            f = 0;
-            for (g = c.length; f < g; ++f)(0, gn[c[f].M()])(a, c[f], d, e)
-        },
-        Circle: function(a, c, d, e) {
-            var f = d.e,
-                g = d.c;
-            if (null !== f || null !== g) {
-                var h = a.b(d.b, "Polygon");
-                h.Aa(f, g);
-                h.uc(c, e)
-            }
-            f = d.a;
-            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), a.lb(c.dd(), 0, 2, 2, c, e))
-        }
-    };
-
-    function hn(a, c, d, e, f) {
-        pj.call(this, a, c, d, 2, e);
-        this.a = f
-    }
-    w(hn, pj);
-    hn.prototype.b = function() {
-        return this.a
-    };
-
-    function jn(a) {
-        Bg.call(this, {
-            attributions: a.attributions,
-            extent: a.extent,
-            logo: a.logo,
-            projection: a.projection,
-            state: a.state
-        });
-        this.l = m(a.resolutions) ? a.resolutions : null
-    }
-    w(jn, Bg);
-
-    function kn(a, c) {
-        if (null !== a.l) {
-            var d = ac(a.l, c, 0);
-            c = a.l[d]
-        }
-        return c
-    }
-    jn.prototype.i = function(a) {
-        a = a.target;
-        switch (a.state) {
-            case 1:
-                this.dispatchEvent(new ln(mn, a));
-                break;
-            case 2:
-                this.dispatchEvent(new ln(nn, a));
-                break;
-            case 3:
-                this.dispatchEvent(new ln(on, a))
-        }
-    };
-
-    function pn(a, c) {
-        a.b().src = c
-    }
-
-    function ln(a, c) {
-        rc.call(this, a);
-        this.image = c
-    }
-    w(ln, rc);
-    var mn = "imageloadstart",
-        nn = "imageloadend",
-        on = "imageloaderror";
-
-    function qn(a) {
-        jn.call(this, {
-            attributions: a.attributions,
-            logo: a.logo,
-            projection: a.projection,
-            resolutions: a.resolutions,
-            state: m(a.state) ? a.state : void 0
-        });
-        this.T = a.canvasFunction;
-        this.J = null;
-        this.N = 0;
-        this.X = m(a.ratio) ? a.ratio : 1.5
-    }
-    w(qn, jn);
-    qn.prototype.Cc = function(a, c, d, e) {
-        c = kn(this, c);
-        var f = this.J;
-        if (null !== f && this.N == this.b && f.resolution == c && f.e == d && Rd(f.G(), a)) return f;
-        a = a.slice();
-        ke(a, this.X);
-        e = this.T(a, c, d, [ie(a) / c * d, fe(a) / c * d], e);
-        null === e || (f = new hn(a, c, d, this.d, e));
-        this.J = f;
-        this.N = this.b;
-        return f
-    };
-
-    function rn(a) {
-        a.prototype.then = a.prototype.then;
-        a.prototype.$goog_Thenable = !0
-    }
-
-    function sn(a) {
-        if (!a) return !1;
-        try {
-            return !!a.$goog_Thenable
-        } catch (c) {
-            return !1
-        }
-    };
-
-    function tn(a, c) {
-        un || vn();
-        wn || (un(), wn = !0);
-        xn.push(new yn(a, c))
-    }
-    var un;
-
-    function vn() {
-        if (ba.Promise && ba.Promise.resolve) {
-            var a = ba.Promise.resolve();
-            un = function() {
-                a.then(zn)
-            }
-        } else un = function() {
-            wh(zn)
-        }
-    }
-    var wn = !1,
-        xn = [];
-
-    function zn() {
-        for (; xn.length;) {
-            var a = xn;
-            xn = [];
-            for (var c = 0; c < a.length; c++) {
-                var d = a[c];
-                try {
-                    d.b.call(d.a)
-                } catch (e) {
-                    vh(e)
-                }
-            }
-        }
-        wn = !1
-    }
-
-    function yn(a, c) {
-        this.b = a;
-        this.a = c
-    };
-
-    function An(a, c) {
-        this.a = Bn;
-        this.f = void 0;
-        this.b = this.c = null;
-        this.d = this.e = !1;
-        try {
-            var d = this;
-            a.call(c, function(a) {
-                Cn(d, Dn, a)
-            }, function(a) {
-                Cn(d, En, a)
-            })
-        } catch (e) {
-            Cn(this, En, e)
-        }
-    }
-    var Bn = 0,
-        Dn = 2,
-        En = 3;
-    An.prototype.then = function(a, c, d) {
-        return Fn(this, ka(a) ? a : null, ka(c) ? c : null, d)
-    };
-    rn(An);
-    An.prototype.cancel = function(a) {
-        this.a == Bn && tn(function() {
-            var c = new Gn(a);
-            Hn(this, c)
-        }, this)
-    };
-
-    function Hn(a, c) {
-        if (a.a == Bn)
-            if (a.c) {
-                var d = a.c;
-                if (d.b) {
-                    for (var e = 0, f = -1, g = 0, h; h = d.b[g]; g++)
-                        if (h = h.Rc)
-                            if (e++, h == a && (f = g), 0 <= f && 1 < e) break;
-                    0 <= f && (d.a == Bn && 1 == e ? Hn(d, c) : (e = d.b.splice(f, 1)[0], In(d, e, En, c)))
-                }
-            } else Cn(a, En, c)
-    }
-
-    function Jn(a, c) {
-        a.b && a.b.length || a.a != Dn && a.a != En || Kn(a);
-        a.b || (a.b = []);
-        a.b.push(c)
-    }
-
-    function Fn(a, c, d, e) {
-        var f = {
-            Rc: null,
-            Wg: null,
-            Yg: null
-        };
-        f.Rc = new An(function(a, h) {
-            f.Wg = c ? function(d) {
-                try {
-                    var f = c.call(e, d);
-                    a(f)
-                } catch (p) {
-                    h(p)
-                }
-            } : a;
-            f.Yg = d ? function(c) {
-                try {
-                    var f = d.call(e, c);
-                    !m(f) && c instanceof Gn ? h(c) : a(f)
-                } catch (p) {
-                    h(p)
-                }
-            } : h
-        });
-        f.Rc.c = a;
-        Jn(a, f);
-        return f.Rc
-    }
-    An.prototype.g = function(a) {
-        this.a = Bn;
-        Cn(this, Dn, a)
-    };
-    An.prototype.i = function(a) {
-        this.a = Bn;
-        Cn(this, En, a)
-    };
-
-    function Cn(a, c, d) {
-        if (a.a == Bn) {
-            if (a == d) c = En, d = new TypeError("Promise cannot resolve to itself");
-            else {
-                if (sn(d)) {
-                    a.a = 1;
-                    d.then(a.g, a.i, a);
-                    return
-                }
-                if (la(d)) try {
-                    var e = d.then;
-                    if (ka(e)) {
-                        Ln(a, d, e);
-                        return
-                    }
-                } catch (f) {
-                    c = En, d = f
-                }
-            }
-            a.f = d;
-            a.a = c;
-            Kn(a);
-            c != En || d instanceof Gn || Mn(a, d)
-        }
-    }
-
-    function Ln(a, c, d) {
-        function e(c) {
-            g || (g = !0, a.i(c))
-        }
-
-        function f(c) {
-            g || (g = !0, a.g(c))
-        }
-        a.a = 1;
-        var g = !1;
-        try {
-            d.call(c, f, e)
-        } catch (h) {
-            e(h)
-        }
-    }
-
-    function Kn(a) {
-        a.e || (a.e = !0, tn(a.q, a))
-    }
-    An.prototype.q = function() {
-        for (; this.b && this.b.length;) {
-            var a = this.b;
-            this.b = [];
-            for (var c = 0; c < a.length; c++) In(this, a[c], this.a, this.f)
-        }
-        this.e = !1
-    };
-
-    function In(a, c, d, e) {
-        if (d == Dn) c.Wg(e);
-        else {
-            if (c.Rc)
-                for (; a && a.d; a = a.c) a.d = !1;
-            c.Yg(e)
-        }
-    }
-
-    function Mn(a, c) {
-        a.d = !0;
-        tn(function() {
-            a.d && Nn.call(null, c)
-        })
-    }
-    var Nn = vh;
-
-    function Gn(a) {
-        xa.call(this, a)
-    }
-    w(Gn, xa);
-    Gn.prototype.name = "cancel";
-
-    function On(a, c, d) {
-        if (ka(a)) d && (a = ra(a, d));
-        else if (a && "function" == typeof a.handleEvent) a = ra(a.handleEvent, a);
-        else throw Error("Invalid listener argument");
-        return 2147483647 < c ? -1 : ba.setTimeout(a, c || 0)
-    };
-    var Pn = ba.JSON.parse,
-        Qn = ba.JSON.stringify;
-
-    function Rn() {}
-    Rn.prototype.b = null;
-
-    function Sn(a) {
-        var c;
-        (c = a.b) || (c = {}, Tn(a) && (c[0] = !0, c[1] = !0), c = a.b = c);
-        return c
-    };
-    var Un;
-
-    function Vn() {}
-    w(Vn, Rn);
-
-    function Wn(a) {
-        return (a = Tn(a)) ? new ActiveXObject(a) : new XMLHttpRequest
-    }
-
-    function Tn(a) {
-        if (!a.a && "undefined" == typeof XMLHttpRequest && "undefined" != typeof ActiveXObject) {
-            for (var c = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"], d = 0; d < c.length; d++) {
-                var e = c[d];
-                try {
-                    return new ActiveXObject(e), a.a = e
-                } catch (f) {}
-            }
-            throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed");
-        }
-        return a.a
-    }
-    Un = new Vn;
-    var Xn = /^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;
-
-    function Yn(a) {
-        if (Zn) {
-            Zn = !1;
-            var c = ba.location;
-            if (c) {
-                var d = c.href;
-                if (d && (d = (d = Yn(d)[3] || null) ? decodeURI(d) : d) && d != c.hostname) throw Zn = !0, Error();
-            }
-        }
-        return a.match(Xn)
-    }
-    var Zn = Kb;
-
-    function $n(a, c) {
-        for (var d = a.split("&"), e = 0; e < d.length; e++) {
-            var f = d[e].indexOf("="),
-                g = null,
-                h = null;
-            0 <= f ? (g = d[e].substring(0, f), h = d[e].substring(f + 1)) : g = d[e];
-            c(g, h ? decodeURIComponent(h.replace(/\+/g, " ")) : "")
-        }
-    }
-
-    function ao(a) {
-        if (a[1]) {
-            var c = a[0],
-                d = c.indexOf("#");
-            0 <= d && (a.push(c.substr(d)), a[0] = c = c.substr(0, d));
-            d = c.indexOf("?");
-            0 > d ? a[1] = "?" : d == c.length - 1 && (a[1] = void 0)
-        }
-        return a.join("")
-    }
-
-    function bo(a, c, d) {
-        if (ga(c))
-            for (var e = 0; e < c.length; e++) bo(a, String(c[e]), d);
-        else null != c && d.push("&", a, "" === c ? "" : "=", encodeURIComponent(String(c)))
-    }
-
-    function co(a, c) {
-        for (var d in c) bo(d, c[d], a);
-        return a
-    };
-
-    function eo(a) {
-        $c.call(this);
-        this.H = new Ch;
-        this.i = a || null;
-        this.b = !1;
-        this.g = this.Y = null;
-        this.e = this.o = "";
-        this.a = this.l = this.d = this.q = !1;
-        this.f = 0;
-        this.c = null;
-        this.n = fo;
-        this.p = this.J = !1
-    }
-    w(eo, $c);
-    var fo = "",
-        go = /^https?$/i,
-        ho = ["POST", "PUT"];
-    l = eo.prototype;
-    l.send = function(a, c, d, e) {
-        if (this.Y) throw Error("[goog.net.XhrIo] Object is active with another request=" + this.o + "; newUri=" + a);
-        c = c ? c.toUpperCase() : "GET";
-        this.o = a;
-        this.e = "";
-        this.q = !1;
-        this.b = !0;
-        this.Y = this.i ? Wn(this.i) : Wn(Un);
-        this.g = this.i ? Sn(this.i) : Sn(Un);
-        this.Y.onreadystatechange = ra(this.Xg, this);
-        try {
-            this.l = !0, this.Y.open(c, String(a), !0), this.l = !1
-        } catch (f) {
-            io(this, f);
-            return
-        }
-        a = d || "";
-        var g = this.H.clone();
-        e && Bh(e, function(a, c) {
-            g.set(c, a)
-        });
-        e = Wa(g.C(), jo);
-        d = ba.FormData && a instanceof ba.FormData;
-        !Ya(ho, c) || e || d || g.set("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
-        g.forEach(function(a, c) {
-            this.Y.setRequestHeader(c, a)
-        }, this);
-        this.n && (this.Y.responseType = this.n);
-        "withCredentials" in this.Y && (this.Y.withCredentials = this.J);
-        try {
-            ko(this), 0 < this.f && ((this.p = lo(this.Y)) ? (this.Y.timeout = this.f, this.Y.ontimeout = ra(this.oc, this)) : this.c = On(this.oc, this.f, this)), this.d = !0, this.Y.send(a), this.d = !1
-        } catch (h) {
-            io(this, h)
-        }
-    };
-
-    function lo(a) {
-        return Ib && Rb(9) && ja(a.timeout) && m(a.ontimeout)
-    }
-
-    function jo(a) {
-        return "content-type" == a.toLowerCase()
-    }
-    l.oc = function() {
-        "undefined" != typeof aa && this.Y && (this.e = "Timed out after " + this.f + "ms, aborting", this.dispatchEvent("timeout"), this.Y && this.b && (this.b = !1, this.a = !0, this.Y.abort(), this.a = !1, this.dispatchEvent("complete"), this.dispatchEvent("abort"), mo(this)))
-    };
-
-    function io(a, c) {
-        a.b = !1;
-        a.Y && (a.a = !0, a.Y.abort(), a.a = !1);
-        a.e = c;
-        no(a);
-        mo(a)
-    }
-
-    function no(a) {
-        a.q || (a.q = !0, a.dispatchEvent("complete"), a.dispatchEvent("error"))
-    }
-    l.O = function() {
-        this.Y && (this.b && (this.b = !1, this.a = !0, this.Y.abort(), this.a = !1), mo(this, !0));
-        eo.S.O.call(this)
-    };
-    l.Xg = function() {
-        this.U || (this.l || this.d || this.a ? oo(this) : this.dn())
-    };
-    l.dn = function() {
-        oo(this)
-    };
-
-    function oo(a) {
-        if (a.b && "undefined" != typeof aa && (!a.g[1] || 4 != po(a) || 2 != qo(a)))
-            if (a.d && 4 == po(a)) On(a.Xg, 0, a);
-            else if (a.dispatchEvent("readystatechange"), 4 == po(a)) {
-            a.b = !1;
-            try {
-                if (ro(a)) a.dispatchEvent("complete"), a.dispatchEvent("success");
-                else {
-                    var c;
-                    try {
-                        c = 2 < po(a) ? a.Y.statusText : ""
-                    } catch (d) {
-                        c = ""
-                    }
-                    a.e = c + " [" + qo(a) + "]";
-                    no(a)
-                }
-            } finally {
-                mo(a)
-            }
-        }
-    }
-
-    function mo(a, c) {
-        if (a.Y) {
-            ko(a);
-            var d = a.Y,
-                e = a.g[0] ? ca : null;
-            a.Y = null;
-            a.g = null;
-            c || a.dispatchEvent("ready");
-            try {
-                d.onreadystatechange = e
-            } catch (f) {}
-        }
-    }
-
-    function ko(a) {
-        a.Y && a.p && (a.Y.ontimeout = null);
-        ja(a.c) && (ba.clearTimeout(a.c), a.c = null)
-    }
-
-    function ro(a) {
-        var c = qo(a),
-            d;
-        a: switch (c) {
-            case 200:
-            case 201:
-            case 202:
-            case 204:
-            case 206:
-            case 304:
-            case 1223:
-                d = !0;
-                break a;
-            default:
-                d = !1
-        }
-        if (!d) {
-            if (c = 0 === c) a = Yn(String(a.o))[1] || null, !a && self.location && (a = self.location.protocol, a = a.substr(0, a.length - 1)), c = !go.test(a ? a.toLowerCase() : "");
-            d = c
-        }
-        return d
-    }
-
-    function po(a) {
-        return a.Y ? a.Y.readyState : 0
-    }
-
-    function qo(a) {
-        try {
-            return 2 < po(a) ? a.Y.status : -1
-        } catch (c) {
-            return -1
-        }
-    }
-
-    function so(a) {
-        try {
-            return a.Y ? a.Y.responseText : ""
-        } catch (c) {
-            return ""
-        }
-    };
-
-    function to(a) {
-        if ("undefined" != typeof XMLSerializer) return (new XMLSerializer).serializeToString(a);
-        if (a = a.xml) return a;
-        throw Error("Your browser does not support serializing XML documents");
-    };
-    var uo;
-    a: if (document.implementation && document.implementation.createDocument) uo = document.implementation.createDocument("", "", null);
-        else {
-            if ("undefined" != typeof ActiveXObject) {
-                var vo = new ActiveXObject("MSXML2.DOMDocument");
-                if (vo) {
-                    vo.resolveExternals = !1;
-                    vo.validateOnParse = !1;
-                    try {
-                        vo.setProperty("ProhibitDTD", !0), vo.setProperty("MaxXMLSize", 2048), vo.setProperty("MaxElementDepth", 256)
-                    } catch (wo) {}
-                }
-                if (vo) {
-                    uo = vo;
-                    break a
-                }
-            }
-            throw Error("Your browser does not support creating new documents");
-        }
-    var xo = uo;
-
-    function yo(a, c) {
-        return xo.createElementNS(a, c)
-    }
-
-    function zo(a, c) {
-        null === a && (a = "");
-        return xo.createNode(1, c, a)
-    }
-    var Ao = document.implementation && document.implementation.createDocument ? yo : zo;
-
-    function Bo(a, c) {
-        return Co(a, c, []).join("")
-    }
-
-    function Co(a, c, d) {
-        if (4 == a.nodeType || 3 == a.nodeType) c ? d.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g, "")) : d.push(a.nodeValue);
-        else
-            for (a = a.firstChild; null !== a; a = a.nextSibling) Co(a, c, d);
-        return d
-    }
-
-    function Do(a) {
-        return a.localName
-    }
-
-    function Eo(a) {
-        var c = a.localName;
-        return m(c) ? c : a.baseName
-    }
-    var Fo = Ib ? Eo : Do;
-
-    function Go(a) {
-        return a instanceof Document
-    }
-
-    function Ho(a) {
-        return la(a) && 9 == a.nodeType
-    }
-    var Io = Ib ? Ho : Go;
-
-    function Jo(a) {
-        return a instanceof Node
-    }
-
-    function Ko(a) {
-        return la(a) && m(a.nodeType)
-    }
-    var Lo = Ib ? Ko : Jo;
-
-    function Mo(a, c, d) {
-        return a.getAttributeNS(c, d) || ""
-    }
-
-    function No(a, c, d) {
-        var e = "";
-        a = Oo(a, c, d);
-        m(a) && (e = a.nodeValue);
-        return e
-    }
-    var Po = document.implementation && document.implementation.createDocument ? Mo : No;
-
-    function Qo(a, c, d) {
-        return a.getAttributeNodeNS(c, d)
-    }
-
-    function Ro(a, c, d) {
-        var e = null;
-        a = a.attributes;
-        for (var f, g, h = 0, k = a.length; h < k; ++h)
-            if (f = a[h], f.namespaceURI == c && (g = f.prefix ? f.prefix + ":" + d : d, g == f.nodeName)) {
-                e = f;
-                break
-            }
-        return e
-    }
-    var Oo = document.implementation && document.implementation.createDocument ? Qo : Ro;
-
-    function So(a, c, d, e) {
-        a.setAttributeNS(c, d, e)
-    }
-
-    function To(a, c, d, e) {
-        null === c ? a.setAttribute(d, e) : (c = a.ownerDocument.createNode(2, d, c), c.nodeValue = e, a.setAttributeNode(c))
-    }
-    var Uo = document.implementation && document.implementation.createDocument ? So : To;
-
-    function Vo(a) {
-        return (new DOMParser).parseFromString(a, "application/xml")
-    }
-
-    function Wo(a, c) {
-        return function(d, e) {
-            var f = a.call(c, d, e);
-            m(f) && db(e[e.length - 1], f)
-        }
-    }
-
-    function Xo(a, c) {
-        return function(d, e) {
-            var f = a.call(m(c) ? c : this, d, e);
-            m(f) && e[e.length - 1].push(f)
-        }
-    }
-
-    function Yo(a, c) {
-        return function(d, e) {
-            var f = a.call(m(c) ? c : this, d, e);
-            m(f) && (e[e.length - 1] = f)
-        }
-    }
-
-    function Zo(a) {
-        return function(c, d) {
-            var e = a.call(m(void 0) ? void 0 : this, c, d);
-            m(e) && Cb(d[d.length - 1], m(void 0) ? void 0 : c.localName).push(e)
-        }
-    }
-
-    function S(a, c) {
-        return function(d, e) {
-            var f = a.call(m(void 0) ? void 0 : this, d, e);
-            m(f) && (e[e.length - 1][m(c) ? c : d.localName] = f)
-        }
-    }
-
-    function T(a, c, d) {
-        return $o(a, c, d)
-    }
-
-    function U(a, c) {
-        return function(d, e, f) {
-            a.call(m(c) ? c : this, d, e, f);
-            f[f.length - 1].P.appendChild(d)
-        }
-    }
-
-    function ap(a) {
-        var c, d;
-        return function(e, f, g) {
-            if (!m(c)) {
-                c = {};
-                var h = {};
-                h[e.localName] = a;
-                c[e.namespaceURI] = h;
-                d = bp(e.localName)
-            }
-            cp(c, d, f, g)
-        }
-    }
-
-    function bp(a, c) {
-        return function(d, e, f) {
-            d = e[e.length - 1].P;
-            e = a;
-            m(e) || (e = f);
-            f = c;
-            m(c) || (f = d.namespaceURI);
-            return Ao(f, e)
-        }
-    }
-    var dp = bp();
-
-    function ep(a, c) {
-        for (var d = c.length, e = Array(d), f = 0; f < d; ++f) e[f] = a[c[f]];
-        return e
-    }
-
-    function $o(a, c, d) {
-        d = m(d) ? d : {};
-        var e, f;
-        e = 0;
-        for (f = a.length; e < f; ++e) d[a[e]] = c;
-        return d
-    }
-
-    function fp(a, c, d, e) {
-        for (c = c.firstElementChild; null !== c; c = c.nextElementSibling) {
-            var f = a[c.namespaceURI];
-            m(f) && (f = f[c.localName], m(f) && f.call(e, c, d))
-        }
-    }
-
-    function V(a, c, d, e, f) {
-        e.push(a);
-        fp(c, d, e, f);
-        return e.pop()
-    }
-
-    function cp(a, c, d, e, f, g) {
-        for (var h = (m(f) ? f : d).length, k, n, p = 0; p < h; ++p) k = d[p], m(k) && (n = c.call(g, k, e, m(f) ? f[p] : void 0), m(n) && a[n.namespaceURI][n.localName].call(g, n, k, e))
-    }
-
-    function gp(a, c, d, e, f, g, h) {
-        f.push(a);
-        cp(c, d, e, f, g, h);
-        f.pop()
-    };
-
-    function hp(a, c, d) {
-        return function(e, f, g) {
-            e = new eo;
-            e.n = "text";
-            x(e, "complete", function(a) {
-                a = a.target;
-                if (ro(a)) {
-                    var e = c.M(),
-                        f;
-                    if ("json" == e) f = so(a);
-                    else if ("text" == e) f = so(a);
-                    else if ("xml" == e) {
-                        if (!Ib) try {
-                            f = a.Y ? a.Y.responseXML : null
-                        } catch (p) {
-                            f = null
-                        }
-                        null != f || (f = Vo(so(a)))
-                    }
-                    null != f && (f = c.ja(f, {
-                        featureProjection: g
-                    }), d.call(this, f))
-                }
-                qc(a)
-            }, !1, this);
-            e.send(a)
-        }
-    }
-
-    function ip(a, c) {
-        return hp(a, c, function(a) {
-            this.Oc(a)
-        })
-    };
-
-    function jp() {
-        return [
-            [-Infinity, -Infinity, Infinity, Infinity]
-        ]
-    };
-    var kp;
-    (function() {
-        var a = {
-            Qf: {}
-        };
-        (function() {
-            function c(a, d) {
-                if (!(this instanceof c)) return new c(a, d);
-                this.Fe = Math.max(4, a || 9);
-                this.Hf = Math.max(2, Math.ceil(.4 * this.Fe));
-                d && this.qi(d);
-                this.clear()
-            }
-
-            function d(a, c) {
-                a.bbox = e(a, 0, a.children.length, c)
-            }
-
-            function e(a, c, d, e) {
-                for (var g = [Infinity, Infinity, -Infinity, -Infinity], h; c < d; c++) h = a.children[c], f(g, a.wa ? e(h) : h.bbox);
-                return g
-            }
-
-            function f(a, c) {
-                a[0] = Math.min(a[0], c[0]);
-                a[1] = Math.min(a[1], c[1]);
-                a[2] = Math.max(a[2], c[2]);
-                a[3] = Math.max(a[3], c[3])
-            }
-
-            function g(a, c) {
-                return a.bbox[0] - c.bbox[0]
-            }
-
-            function h(a, c) {
-                return a.bbox[1] - c.bbox[1]
-            }
-
-            function k(a) {
-                return (a[2] - a[0]) * (a[3] - a[1])
-            }
-
-            function n(a) {
-                return a[2] - a[0] + (a[3] - a[1])
-            }
-
-            function p(a, c) {
-                return a[0] <= c[0] && a[1] <= c[1] && c[2] <= a[2] && c[3] <= a[3]
-            }
-
-            function q(a, c) {
-                return c[0] <= a[2] && c[1] <= a[3] && c[2] >= a[0] && c[3] >= a[1]
-            }
-
-            function r(a, c, d, e, f) {
-                for (var g = [c, d], h; g.length;) d = g.pop(), c = g.pop(), d - c <= e || (h = c + Math.ceil((d - c) / e / 2) * e, t(a, c, d, h, f), g.push(c, h, h, d))
-            }
-
-            function t(a, c, d, e, f) {
-                for (var g, h, k, n, p; d > c;) {
-                    600 < d - c && (g = d - c + 1, h = e - c + 1, k = Math.log(g), n = .5 * Math.exp(2 * k / 3), p = .5 * Math.sqrt(k * n * (g - n) / g) * (0 > h - g / 2 ? -1 : 1), k = Math.max(c, Math.floor(e - h * n / g + p)), h = Math.min(d, Math.floor(e + (g - h) * n / g + p)), t(a, k, h, e, f));
-                    g = a[e];
-                    h = c;
-                    n = d;
-                    u(a, c, e);
-                    for (0 < f(a[d], g) && u(a, c, d); h < n;) {
-                        u(a, h, n);
-                        h++;
-                        for (n--; 0 > f(a[h], g);) h++;
-                        for (; 0 < f(a[n], g);) n--
-                    }
-                    0 === f(a[c], g) ? u(a, c, n) : (n++, u(a, n, d));
-                    n <= e && (c = n + 1);
-                    e <= n && (d = n - 1)
-                }
-            }
-
-            function u(a, c, d) {
-                var e = a[c];
-                a[c] = a[d];
-                a[d] = e
-            }
-            c.prototype = {
-                all: function() {
-                    return this.Df(this.data, [])
-                },
-                search: function(a) {
-                    var c = this.data,
-                        d = [],
-                        e = this.Ea;
-                    if (!q(a, c.bbox)) return d;
-                    for (var f = [], g, h, k, n; c;) {
-                        g = 0;
-                        for (h = c.children.length; g < h; g++) k = c.children[g], n = c.wa ? e(k) : k.bbox, q(a, n) && (c.wa ? d.push(k) : p(a, n) ? this.Df(k, d) : f.push(k));
-                        c = f.pop()
-                    }
-                    return d
-                },
-                load: function(a) {
-                    if (!a || !a.length) return this;
-                    if (a.length < this.Hf) {
-                        for (var c = 0, d = a.length; c < d; c++) this.ha(a[c]);
-                        return this
-                    }
-                    a = this.Ff(a.slice(), 0, a.length - 1, 0);
-                    this.data.children.length ? this.data.height === a.height ? this.If(this.data, a) : (this.data.height < a.height && (c = this.data, this.data = a, a = c), this.Gf(a, this.data.height - a.height - 1, !0)) : this.data = a;
-                    return this
-                },
-                ha: function(a) {
-                    a && this.Gf(a, this.data.height - 1);
-                    return this
-                },
-                clear: function() {
-                    this.data = {
-                        children: [],
-                        height: 1,
-                        bbox: [Infinity, Infinity, -Infinity, -Infinity],
-                        wa: !0
-                    };
-                    return this
-                },
-                remove: function(a) {
-                    if (!a) return this;
-                    for (var c = this.data, d = this.Ea(a), e = [], f = [], g, h, k, n; c || e.length;) {
-                        c || (c = e.pop(), h = e[e.length - 1], g = f.pop(), n = !0);
-                        if (c.wa && (k = c.children.indexOf(a), -1 !== k)) {
-                            c.children.splice(k, 1);
-                            e.push(c);
-                            this.pi(e);
-                            break
-                        }
-                        n || c.wa || !p(c.bbox, d) ? h ? (g++, c = h.children[g], n = !1) : c = null : (e.push(c), f.push(g), g = 0, h = c, c = c.children[0])
-                    }
-                    return this
-                },
-                Ea: function(a) {
-                    return a
-                },
-                Ie: function(a, c) {
-                    return a[0] - c[0]
-                },
-                Je: function(a, c) {
-                    return a[1] - c[1]
-                },
-                toJSON: function() {
-                    return this.data
-                },
-                Df: function(a, c) {
-                    for (var d = []; a;) a.wa ? c.push.apply(c, a.children) : d.push.apply(d, a.children), a = d.pop();
-                    return c
-                },
-                Ff: function(a, c, e, f) {
-                    var g = e - c + 1,
-                        h = this.Fe,
-                        k;
-                    if (g <= h) return k = {
-                        children: a.slice(c, e + 1),
-                        height: 1,
-                        bbox: null,
-                        wa: !0
-                    }, d(k, this.Ea), k;
-                    f || (f = Math.ceil(Math.log(g) / Math.log(h)), h = Math.ceil(g / Math.pow(h, f - 1)));
-                    k = {
-                        children: [],
-                        height: f,
-                        bbox: null
-                    };
-                    var g = Math.ceil(g / h),
-                        h = g * Math.ceil(Math.sqrt(h)),
-                        n, p, q;
-                    for (r(a, c, e, h, this.Ie); c <= e; c += h)
-                        for (p = Math.min(c + h - 1, e), r(a, c, p, g, this.Je), n = c; n <= p; n += g) q = Math.min(n + g - 1, p), k.children.push(this.Ff(a, n, q, f - 1));
-                    d(k, this.Ea);
-                    return k
-                },
-                oi: function(a, c, d, e) {
-                    for (var f, g, h, n, p, q, r, t;;) {
-                        e.push(c);
-                        if (c.wa || e.length - 1 === d) break;
-                        r = t = Infinity;
-                        f = 0;
-                        for (g = c.children.length; f < g; f++) {
-                            h = c.children[f];
-                            p = k(h.bbox);
-                            q = a;
-                            var u = h.bbox;
-                            q = (Math.max(u[2], q[2]) - Math.min(u[0], q[0])) * (Math.max(u[3], q[3]) - Math.min(u[1], q[1])) - p;
-                            q < t ? (t = q, r = p < r ? p : r, n = h) : q === t && p < r && (r = p, n = h)
-                        }
-                        c = n
-                    }
-                    return c
-                },
-                Gf: function(a, c, d) {
-                    var e = this.Ea;
-                    d = d ? a.bbox : e(a);
-                    var e = [],
-                        g = this.oi(d, this.data, c, e);
-                    g.children.push(a);
-                    for (f(g.bbox, d); 0 <= c;)
-                        if (e[c].children.length > this.Fe) this.ri(e, c), c--;
-                        else break;
-                    this.li(d, e, c)
-                },
-                ri: function(a, c) {
-                    var e = a[c],
-                        f = e.children.length,
-                        g = this.Hf;
-                    this.mi(e, g, f);
-                    f = {
-                        children: e.children.splice(this.ni(e, g, f)),
-                        height: e.height
-                    };
-                    e.wa && (f.wa = !0);
-                    d(e, this.Ea);
-                    d(f, this.Ea);
-                    c ? a[c - 1].children.push(f) : this.If(e, f)
-                },
-                If: function(a, c) {
-                    this.data = {
-                        children: [a, c],
-                        height: a.height + 1
-                    };
-                    d(this.data, this.Ea)
-                },
-                ni: function(a, c, d) {
-                    var f, g, h, n, p, q, r;
-                    p = q = Infinity;
-                    for (f = c; f <= d - c; f++) {
-                        g = e(a, 0, f, this.Ea);
-                        h = e(a, f, d, this.Ea);
-                        var t = g,
-                            u = h;
-                        n = Math.max(t[0], u[0]);
-                        var za = Math.max(t[1], u[1]),
-                            cb = Math.min(t[2], u[2]),
-                            t = Math.min(t[3], u[3]);
-                        n = Math.max(0, cb - n) * Math.max(0, t - za);
-                        g = k(g) + k(h);
-                        n < p ? (p = n, r = f, q = g < q ? g : q) : n === p && g < q && (q = g, r = f)
-                    }
-                    return r
-                },
-                mi: function(a, c, d) {
-                    var e = a.wa ? this.Ie : g,
-                        f = a.wa ? this.Je : h,
-                        k = this.Ef(a, c, d, e);
-                    c = this.Ef(a, c, d, f);
-                    k < c && a.children.sort(e)
-                },
-                Ef: function(a, c, d, g) {
-                    a.children.sort(g);
-                    g = this.Ea;
-                    var h = e(a, 0, c, g),
-                        k = e(a, d - c, d, g),
-                        p = n(h) + n(k),
-                        q, r;
-                    for (q = c; q < d - c; q++) r = a.children[q], f(h, a.wa ? g(r) : r.bbox), p += n(h);
-                    for (q = d - c - 1; q >= c; q--) r = a.children[q], f(k, a.wa ? g(r) : r.bbox), p += n(k);
-                    return p
-                },
-                li: function(a, c, d) {
-                    for (; 0 <= d; d--) f(c[d].bbox, a)
-                },
-                pi: function(a) {
-                    for (var c = a.length - 1, e; 0 <= c; c--) 0 === a[c].children.length ? 0 < c ? (e = a[c - 1].children, e.splice(e.indexOf(a[c]), 1)) : this.clear() : d(a[c], this.Ea)
-                },
-                qi: function(a) {
-                    var c = ["return a", " - b", ";"];
-                    this.Ie = new Function("a", "b", c.join(a[0]));
-                    this.Je = new Function("a", "b", c.join(a[1]));
-                    this.Ea = new Function("a", "return [a" + a.join(", a") + "];")
-                }
-            };
-            "function" === typeof define && define.Lo ? define("rbush", function() {
-                return c
-            }) : "undefined" !== typeof a ? a.Qf = c : "undefined" !== typeof self ? self.b = c : window.b = c
-        })();
-        kp = a.Qf
-    })();
-
-    function lp(a) {
-        this.a = kp(a);
-        this.b = {}
-    }
-    l = lp.prototype;
-    l.ha = function(a, c) {
-        var d = [a[0], a[1], a[2], a[3], c];
-        this.a.ha(d);
-        this.b[ma(c)] = d
-    };
-    l.load = function(a, c) {
-        for (var d = Array(c.length), e = 0, f = c.length; e < f; e++) {
-            var g = a[e],
-                h = c[e],
-                g = [g[0], g[1], g[2], g[3], h];
-            d[e] = g;
-            this.b[ma(h)] = g
-        }
-        this.a.load(d)
-    };
-    l.remove = function(a) {
-        a = ma(a);
-        var c = this.b[a];
-        zb(this.b, a);
-        return null !== this.a.remove(c)
-    };
-    l.update = function(a, c) {
-        var d = ma(c);
-        Vd(this.b[d].slice(0, 4), a) || (this.remove(c), this.ha(a, c))
-    };
-
-    function mp(a) {
-        a = a.a.all();
-        return Ua(a, function(a) {
-            return a[4]
-        })
-    }
-
-    function np(a, c) {
-        var d = a.a.search(c);
-        return Ua(d, function(a) {
-            return a[4]
-        })
-    }
-    l.forEach = function(a, c) {
-        return op(mp(this), a, c)
-    };
-
-    function pp(a, c, d, e) {
-        return op(np(a, c), d, e)
-    }
-
-    function op(a, c, d) {
-        for (var e, f = 0, g = a.length; f < g && !(e = c.call(d, a[f])); f++);
-        return e
-    }
-    l.la = function() {
-        return xb(this.b)
-    };
-    l.clear = function() {
-        this.a.clear();
-        this.b = {}
-    };
-    l.G = function() {
-        return this.a.data.bbox
-    };
-
-    function qp(a) {
-        a = m(a) ? a : {};
-        Bg.call(this, {
-            attributions: a.attributions,
-            logo: a.logo,
-            projection: void 0,
-            state: "ready",
-            wrapX: m(a.wrapX) ? a.wrapX : !0
-        });
-        this.J = ca;
-        m(a.loader) ? this.J = a.loader : m(a.url) && (this.J = ip(a.url, a.format));
-        this.oa = m(a.strategy) ? a.strategy : jp;
-        this.a = new lp;
-        this.N = new lp;
-        this.c = {};
-        this.e = {};
-        this.g = {};
-        this.i = {};
-        m(a.features) && rp(this, a.features)
-    }
-    w(qp, Bg);
-    l = qp.prototype;
-    l.jf = function(a) {
-        var c = ma(a).toString();
-        if (sp(this, c, a)) {
-            tp(this, c, a);
-            var d = a.Q();
-            null != d ? (c = d.G(), this.a.ha(c, a)) : this.c[c] = a;
-            this.dispatchEvent(new up("addfeature", a))
-        }
-        this.k()
-    };
-
-    function tp(a, c, d) {
-        a.i[c] = [x(d, "change", a.Pg, !1, a), x(d, "propertychange", a.Pg, !1, a)]
-    }
-
-    function sp(a, c, d) {
-        var e = !0,
-            f = d.$;
-        m(f) ? f.toString() in a.e ? e = !1 : a.e[f.toString()] = d : a.g[c] = d;
-        return e
-    }
-    l.Oc = function(a) {
-        rp(this, a);
-        this.k()
-    };
-
-    function rp(a, c) {
-        var d, e, f, g, h = [],
-            k = [],
-            n = [];
-        e = 0;
-        for (f = c.length; e < f; e++) g = c[e], d = ma(g).toString(), sp(a, d, g) && k.push(g);
-        e = 0;
-        for (f = k.length; e < f; e++) {
-            g = k[e];
-            d = ma(g).toString();
-            tp(a, d, g);
-            var p = g.Q();
-            null != p ? (d = p.G(), h.push(d), n.push(g)) : a.c[d] = g
-        }
-        a.a.load(h, n);
-        e = 0;
-        for (f = k.length; e < f; e++) a.dispatchEvent(new up("addfeature", k[e]))
-    }
-    l.clear = function(a) {
-        if (a) {
-            for (var c in this.i) Sa(this.i[c], Wc);
-            this.i = {};
-            this.e = {};
-            this.g = {}
-        } else a = this.ph, this.a.forEach(a, this), pb(this.c, a, this);
-        this.a.clear();
-        this.N.clear();
-        this.c = {};
-        this.dispatchEvent(new up("clear"));
-        this.k()
-    };
-    l.Rf = function(a, c) {
-        return this.a.forEach(a, c)
-    };
-
-    function vp(a, c, d) {
-        a.$c([c[0], c[1], c[0], c[1]], function(a) {
-            if (a.Q().Jb(c[0], c[1])) return d.call(void 0, a)
-        })
-    }
-    l.$c = function(a, c, d) {
-        return pp(this.a, a, c, d)
-    };
-    l.Ab = function(a, c, d, e) {
-        return this.$c(a, d, e)
-    };
-    l.Oe = function(a, c, d) {
-        return this.$c(a, function(e) {
-            if (e.Q().ra(a) && (e = c.call(d, e))) return e
-        })
-    };
-    l.Dc = function() {
-        var a = mp(this.a);
-        xb(this.c) || db(a, sb(this.c));
-        return a
-    };
-    l.Re = function(a) {
-        var c = [];
-        vp(this, a, function(a) {
-            c.push(a)
-        });
-        return c
-    };
-    l.Se = function(a) {
-        return np(this.a, a)
-    };
-    l.Tf = function(a) {
-        var c = a[0],
-            d = a[1],
-            e = null,
-            f = [NaN, NaN],
-            g = Infinity,
-            h = [-Infinity, -Infinity, Infinity, Infinity];
-        pp(this.a, h, function(a) {
-            var n = a.Q(),
-                p = g;
-            g = n.Sa(c, d, f, g);
-            g < p && (e = a, a = Math.sqrt(g), h[0] = c - a, h[1] = d - a, h[2] = c + a, h[3] = d + a)
-        });
-        return e
-    };
-    l.G = function() {
-        return this.a.G()
-    };
-    l.Qe = function(a) {
-        a = this.e[a.toString()];
-        return m(a) ? a : null
-    };
-    l.Pg = function(a) {
-        a = a.target;
-        var c = ma(a).toString(),
-            d = a.Q();
-        null != d ? (d = d.G(), c in this.c ? (delete this.c[c], this.a.ha(d, a)) : this.a.update(d, a)) : c in this.c || (this.a.remove(a), this.c[c] = a);
-        d = a.$;
-        m(d) ? (d = d.toString(), c in this.g ? (delete this.g[c], this.e[d] = a) : this.e[d] !== a && (wp(this, a), this.e[d] = a)) : c in this.g || (wp(this, a), this.g[c] = a);
-        this.k();
-        this.dispatchEvent(new up("changefeature", a))
-    };
-    l.la = function() {
-        return this.a.la() && xb(this.c)
-    };
-    l.ac = function(a, c, d) {
-        var e = this.N;
-        a = this.oa(a, c);
-        var f, g;
-        f = 0;
-        for (g = a.length; f < g; ++f) {
-            var h = a[f];
-            pp(e, h, function(a) {
-                return Rd(a.extent, h)
-            }) || (this.J.call(this, h, c, d), e.ha(h, {
-                extent: h.slice()
-            }))
-        }
-    };
-    l.Qg = function(a) {
-        var c = ma(a).toString();
-        c in this.c ? delete this.c[c] : this.a.remove(a);
-        this.ph(a);
-        this.k()
-    };
-    l.ph = function(a) {
-        var c = ma(a).toString();
-        Sa(this.i[c], Wc);
-        delete this.i[c];
-        var d = a.$;
-        m(d) ? delete this.e[d.toString()] : delete this.g[c];
-        this.dispatchEvent(new up("removefeature", a))
-    };
-
-    function wp(a, c) {
-        for (var d in a.e)
-            if (a.e[d] === c) {
-                delete a.e[d];
-                break
-            }
-    }
-
-    function up(a, c) {
-        rc.call(this, a);
-        this.feature = c
-    }
-    w(up, rc);
-
-    function xp(a) {
-        this.a = a.source;
-        this.ba = zd();
-        this.c = ai();
-        this.e = [0, 0];
-        this.n = null;
-        qn.call(this, {
-            attributions: a.attributions,
-            canvasFunction: ra(this.zi, this),
-            logo: a.logo,
-            projection: a.projection,
-            ratio: a.ratio,
-            resolutions: a.resolutions,
-            state: this.a.o
-        });
-        this.p = null;
-        this.g = void 0;
-        this.Mg(a.style);
-        x(this.a, "change", this.am, void 0, this)
-    }
-    w(xp, qn);
-    l = xp.prototype;
-    l.zi = function(a, c, d, e, f) {
-        var g = new Fm(.5 * c / d, a, c);
-        this.a.ac(a, c, f);
-        var h = !1;
-        this.a.Ab(a, c, function(a) {
-            var e;
-            if (!(e = h)) {
-                var f;
-                m(a.c) ? f = a.c.call(a, c) : m(this.g) && (f = this.g(a, c));
-                if (null != f) {
-                    var q, r = !1;
-                    e = 0;
-                    for (q = f.length; e < q; ++e) r = fn(g, a, f[e], en(c, d), this.$l, this) || r;
-                    e = r
-                } else e = !1
-            }
-            h = e
-        }, this);
-        Gm(g);
-        if (h) return null;
-        this.e[0] != e[0] || this.e[1] != e[1] ? (this.c.canvas.width = e[0], this.c.canvas.height = e[1], this.e[0] = e[0], this.e[1] = e[1]) : this.c.clearRect(0, 0, e[0], e[1]);
-        a = yp(this, ce(a), c, d, e);
-        Jm(g, this.c, d, a, 0, {});
-        this.n = g;
-        return this.c.canvas
-    };
-    l.ge = function(a, c, d, e, f) {
-        if (null !== this.n) {
-            var g = {};
-            return this.n.c(a, c, 0, e, function(a) {
-                var c = ma(a).toString();
-                if (!(c in g)) return g[c] = !0, f(a)
-            })
-        }
-    };
-    l.Xl = function() {
-        return this.a
-    };
-    l.Yl = function() {
-        return this.p
-    };
-    l.Zl = function() {
-        return this.g
-    };
-
-    function yp(a, c, d, e, f) {
-        return qj(a.ba, f[0] / 2, f[1] / 2, e / d, -e / d, 0, -c[0], -c[1])
-    }
-    l.$l = function() {
-        this.k()
-    };
-    l.am = function() {
-        Dg(this, this.a.o)
-    };
-    l.Mg = function(a) {
-        this.p = m(a) ? a : El;
-        this.g = null === a ? void 0 : Dl(this.p);
-        this.k()
-    };
-
-    function zp(a) {
-        Km.call(this, a);
-        this.e = null;
-        this.f = zd();
-        this.c = this.d = null
-    }
-    w(zp, Km);
-    l = zp.prototype;
-    l.Pa = function(a, c, d, e) {
-        var f = this.a;
-        return f.da().ge(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
-            return d.call(e, a, f)
-        })
-    };
-    l.dc = function(a, c, d, e) {
-        if (!fa(this.fe()))
-            if (this.a.da() instanceof xp) {
-                if (a = a.slice(), sj(c.pixelToCoordinateMatrix, a, a), this.Pa(a, c, Gg, this)) return d.call(e, this.a)
-            } else if (null === this.d && (this.d = zd(), Fd(this.f, this.d)), c = Nm(a, this.d), null === this.c && (this.c = ai(1, 1)), this.c.clearRect(0, 0, 1, 1), this.c.drawImage(this.fe(), c[0], c[1], 1, 1, 0, 0, 1, 1), 0 < this.c.getImageData(0, 0, 1, 1).data[3]) return d.call(e, this.a)
-    };
-    l.fe = function() {
-        return null === this.e ? null : this.e.b()
-    };
-    l.Xf = function() {
-        return this.f
-    };
-    l.ff = function(a, c) {
-        var d = a.pixelRatio,
-            e = a.viewState,
-            f = e.center,
-            g = e.resolution,
-            h = e.rotation,
-            k, n = this.a.da(),
-            p = a.viewHints;
-        k = a.extent;
-        m(c.extent) && (k = ge(k, c.extent));
-        p[0] || p[1] || je(k) || (e = e.projection, p = n.f, null === p || (e = p), k = n.Cc(k, g, d, e), null !== k && wj(this, k) && (this.e = k));
-        if (null !== this.e) {
-            k = this.e;
-            var e = k.G(),
-                p = k.resolution,
-                q = k.e,
-                g = d * p / (g * q);
-            qj(this.f, d * a.size[0] / 2, d * a.size[1] / 2, g, g, h, q * (e[0] - f[0]) / p, q * (f[1] - e[3]) / p);
-            this.d = null;
-            yj(a.attributions, k.f);
-            zj(a, n)
-        }
-        return !0
-    };
-
-    function Ap(a) {
-        Km.call(this, a);
-        this.c = this.f = null;
-        this.q = !1;
-        this.g = null;
-        this.l = zd();
-        this.e = null;
-        this.p = this.H = this.n = NaN;
-        this.i = this.d = null;
-        this.L = [0, 0]
-    }
-    w(Ap, Km);
-    Ap.prototype.fe = function() {
-        return this.f
-    };
-    Ap.prototype.Xf = function() {
-        return this.l
-    };
-    Ap.prototype.ff = function(a, c) {
-        var d = a.pixelRatio,
-            e = a.viewState,
-            f = e.projection,
-            g = this.a,
-            h = g.da(),
-            k = ah(h, f),
-            n = h.Cd(),
-            p = Tg(k, e.resolution),
-            q = h.Xb(p, a.pixelRatio, f),
-            r = q[0] / ld(k.na(p), this.L)[0],
-            t = k.ma(p),
-            r = t / r,
-            u = e.center,
-            A;
-        t == e.resolution ? (u = Bj(u, t, a.size), A = ee(u, t, e.rotation, a.size)) : A = a.extent;
-        m(c.extent) && (A = ge(A, c.extent));
-        if (je(A)) return !1;
-        var z = Qg(k, A, t),
-            D = q[0] * kf(z),
-            B = q[1] * (z.a - z.c + 1),
-            y, K;
-        null === this.f ? (K = ai(D, B), this.f = K.canvas, this.c = [D, B], this.g = K, this.q = !Om(this.c)) : (y = this.f, K = this.g, this.c[0] < D || this.c[1] < B || this.H !== q[0] || this.p !== q[1] || this.q && (this.c[0] > D || this.c[1] > B) ? (y.width = D, y.height = B, this.c = [D, B], this.q = !Om(this.c), this.d = null) : (D = this.c[0], B = this.c[1], (y = p != this.n) || (y = this.d, y = !(y.b <= z.b && z.d <= y.d && y.c <= z.c && z.a <= y.a)), y && (this.d = null)));
-        var J, H;
-        null === this.d ? (D /= q[0], B /= q[1], J = z.b - Math.floor((D - kf(z)) / 2), H = z.c - Math.floor((B - (z.a - z.c + 1)) / 2), this.n = p, this.H = q[0], this.p = q[1], this.d = new ff(J, J + D - 1, H, H + B - 1), this.i = Array(D * B), B = this.d) : (B = this.d, D = kf(B));
-        y = {};
-        y[p] = {};
-        var P = [],
-            sa = this.yd(h, y),
-            Oa = g.c(),
-            N = Kd(),
-            za = new ff(0, 0, 0, 0),
-            cb, Ga, Bb;
-        for (H = z.b; H <= z.d; ++H)
-            for (Bb = z.c; Bb <= z.a; ++Bb) Ga = h.Vb(p, H, Bb, d, f), J = Ga.state, 2 == J || 4 == J || 3 == J && !Oa ? y[p][ef(Ga.b)] = Ga : (cb = k.Ad(Ga.b, sa, null, za, N), cb || (P.push(Ga), cb = k.Ld(Ga.b, za, N), null === cb || sa(p + 1, cb)));
-        sa = 0;
-        for (cb = P.length; sa < cb; ++sa) Ga = P[sa], H = q[0] * (Ga.b[1] - B.b), Bb = q[1] * (B.a - Ga.b[2]), K.clearRect(H, Bb, q[0], q[1]);
-        P = Ua(tb(y), Number);
-        gb(P);
-        var $a = h.X,
-            Ic = be(Og(k, [p, B.b, B.a], N)),
-            lc, Pe, tj, bi, Vf, um, sa = 0;
-        for (cb = P.length; sa < cb; ++sa)
-            if (lc = P[sa], q = h.Xb(lc, d, f), bi = y[lc], lc == p)
-                for (tj in bi) Ga = bi[tj], Pe = (Ga.b[2] - B.c) * D + (Ga.b[1] - B.b), this.i[Pe] != Ga && (H = q[0] * (Ga.b[1] - B.b), Bb = q[1] * (B.a - Ga.b[2]), J = Ga.state, 4 != J && (3 != J || Oa) && $a || K.clearRect(H, Bb, q[0], q[1]), 2 == J && K.drawImage(Ga.Ma(), n, n, q[0], q[1], H, Bb, q[0], q[1]), this.i[Pe] = Ga);
-            else
-                for (tj in lc = k.ma(lc) / t, bi)
-                    for (Ga = bi[tj], Pe = Og(k, Ga.b, N), H = (Pe[0] - Ic[0]) / r, Bb = (Ic[1] - Pe[3]) / r, um = lc * q[0], Vf = lc * q[1], J = Ga.state, 4 != J && $a || K.clearRect(H, Bb, um, Vf), 2 == J && K.drawImage(Ga.Ma(), n, n, q[0], q[1], H, Bb, um, Vf), Ga = Pg(k, Pe, p, za), J = Math.max(Ga.b, B.b), Bb = Math.min(Ga.d, B.d), H = Math.max(Ga.c, B.c), Ga = Math.min(Ga.a, B.a); J <= Bb; ++J)
-                        for (Vf = H; Vf <= Ga; ++Vf) Pe = (Vf - B.c) * D + (J - B.b), this.i[Pe] = void 0;
-        Aj(a.usedTiles, h, p, z);
-        Cj(a, h, k, d, f, A, p, g.a());
-        xj(a, h);
-        zj(a, h);
-        qj(this.l, d * a.size[0] / 2, d * a.size[1] / 2, d * r / e.resolution, d * r / e.resolution, e.rotation, (Ic[0] - u[0]) / r, (u[1] - Ic[1]) / r);
-        this.e = null;
-        return !0
-    };
-    Ap.prototype.dc = function(a, c, d, e) {
-        if (null !== this.g && (null === this.e && (this.e = zd(), Fd(this.l, this.e)), a = Nm(a, this.e), 0 < this.g.getImageData(a[0], a[1], 1, 1).data[3])) return d.call(e, this.a)
-    };
-
-    function Bp(a) {
-        Km.call(this, a);
-        this.d = !1;
-        this.q = -1;
-        this.i = NaN;
-        this.f = Kd();
-        this.c = this.g = null;
-        this.e = ai()
-    }
-    w(Bp, Km);
-    Bp.prototype.o = function(a, c, d) {
-        var e = a.extent,
-            f = a.focus,
-            g = a.pixelRatio,
-            h = a.skippedFeatureUids,
-            k = a.viewState,
-            n = k.projection,
-            k = k.rotation,
-            p = n.G(),
-            q = this.a.da(),
-            r = Mm(this, a, 0);
-        Lm(this, "precompose", d, a, r);
-        var t = this.c;
-        if (null !== t && !t.la()) {
-            var u;
-            bd(this.a, "render") ? (this.e.canvas.width = d.canvas.width, this.e.canvas.height = d.canvas.height, u = this.e) : u = d;
-            var A = u.globalAlpha;
-            u.globalAlpha = c.opacity;
-            c = {};
-            f = f[0];
-            if (q.H && n.c && !Rd(p, e)) {
-                n = p[0];
-                q = p[2];
-                Jm(t, u, g, r, k, n <= f && f <= q ? h : c);
-                for (var z = e[0], D = ie(p), B = 0, y; z < p[0];) --B, y = D * B, r = Mm(this, a, y), Jm(t, u, g, r, k, n + y <= f && f <= q + y ? h : c), z += D;
-                B = 0;
-                for (z = e[2]; z > p[2];) ++B, y = D * B, r = Mm(this, a, y), Jm(t, u, g, r, k, n + y <= f && f <= q + y ? h : c), z -= D
-            } else Jm(t, u, g, r, k, h);
-            u != d && (Lm(this, "render", u, a, r), d.drawImage(u.canvas, 0, 0));
-            u.globalAlpha = A
-        }
-        Lm(this, "postcompose", d, a, r)
-    };
-    Bp.prototype.Pa = function(a, c, d, e) {
-        if (null !== this.c) {
-            var f = this.a,
-                g = {};
-            return this.c.c(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
-                var c = ma(a).toString();
-                if (!(c in g)) return g[c] = !0, d.call(e, a, f)
-            })
-        }
-    };
-    Bp.prototype.l = function() {
-        vj(this)
-    };
-    Bp.prototype.ff = function(a) {
-        function c(a) {
-            var c;
-            m(a.c) ? c = a.c.call(a, p) : m(d.a) && (c = (0, d.a)(a, p));
-            if (null != c) {
-                if (null != c) {
-                    var e, f, g = !1;
-                    e = 0;
-                    for (f = c.length; e < f; ++e) g = fn(t, a, c[e], en(p, q), this.l, this) || g;
-                    a = g
-                } else a = !1;
-                this.d = this.d || a
-            }
-        }
-        var d = this.a,
-            e = d.da();
-        yj(a.attributions, e.d);
-        zj(a, e);
-        var f = a.viewHints[0],
-            g = a.viewHints[1],
-            h = d.o,
-            k = d.n;
-        if (!this.d && !h && f || !k && g) return !0;
-        var n = a.extent,
-            f = a.viewState,
-            g = f.projection,
-            p = f.resolution,
-            q = a.pixelRatio,
-            h = d.b,
-            r = d.c,
-            k = d.get("renderOrder");
-        m(k) || (k = dn);
-        n = Od(n, r * p);
-        r = f.projection.G();
-        e.H && f.projection.c && !Rd(r, a.extent) && (n[0] = r[0], n[2] = r[2]);
-        if (!this.d && this.i == p && this.q == h && this.g == k && Rd(this.f, n)) return !0;
-        qc(this.c);
-        this.c = null;
-        this.d = !1;
-        var t = new Fm(.5 * p / q, n, p, d.c);
-        e.ac(n, p, g);
-        if (null === k) e.Ab(n, p, c, this);
-        else {
-            var u = [];
-            e.Ab(n, p, function(a) {
-                u.push(a)
-            }, this);
-            gb(u, k);
-            Sa(u, c, this)
-        }
-        Gm(t);
-        this.i = p;
-        this.q = h;
-        this.g = k;
-        this.f = n;
-        this.c = t;
-        return !0
-    };
-
-    function Cp(a, c) {
-        Ij.call(this, 0, c);
-        this.d = ai();
-        this.b = this.d.canvas;
-        this.b.style.width = "100%";
-        this.b.style.height = "100%";
-        this.b.className = "ol-unselectable";
-        Pf(a, this.b, 0);
-        this.a = !0;
-        this.e = zd()
-    }
-    w(Cp, Ij);
-    Cp.prototype.Ke = function(a) {
-        return a instanceof I ? new zp(a) : a instanceof L ? new Ap(a) : a instanceof M ? new Bp(a) : null
-    };
-
-    function Dp(a, c, d) {
-        var e = a.g,
-            f = a.d;
-        if (bd(e, c)) {
-            var g = d.extent,
-                h = d.pixelRatio,
-                k = d.viewState,
-                n = k.projection,
-                p = k.resolution,
-                k = k.rotation,
-                q = 0;
-            if (n.c) {
-                var r = n.G(),
-                    n = ie(r),
-                    t = d.focus[0];
-                if (t < r[0] || t > r[2]) q = Math.ceil((r[0] - t) / n), q *= n, g = [g[0] + q, g[1], g[2] + q, g[3]]
-            }
-            n = d.pixelRatio;
-            r = d.viewState;
-            t = r.resolution;
-            q = qj(a.e, a.b.width / 2, a.b.height / 2, n / t, -n / t, -r.rotation, -r.center[0] - q, -r.center[1]);
-            p = new Fm(.5 * p / h, g, p);
-            g = new cm(f, h, g, q, k);
-            e.dispatchEvent(new il(c, e, g, p, d, f, null));
-            Gm(p);
-            p.la() || Jm(p, f, h, q, k, {});
-            om(g);
-            a.c = p
-        }
-    }
-    Cp.prototype.M = function() {
-        return "canvas"
-    };
-    Cp.prototype.ue = function(a) {
-        if (null === a) this.a && (mg(this.b, !1), this.a = !1);
-        else {
-            var c = this.d,
-                d = a.size[0] * a.pixelRatio,
-                e = a.size[1] * a.pixelRatio;
-            this.b.width != d || this.b.height != e ? (this.b.width = d, this.b.height = e) : c.clearRect(0, 0, this.b.width, this.b.height);
-            Jj(a);
-            Dp(this, "precompose", a);
-            var d = a.layerStatesArray,
-                e = a.viewState.resolution,
-                f, g, h, k;
-            f = 0;
-            for (g = d.length; f < g; ++f) k = d[f], h = k.layer, h = Lj(this, h), oj(k, e) && "ready" == k.i && h.ff(a, k) && h.o(a, k, c);
-            Dp(this, "postcompose", a);
-            this.a || (mg(this.b, !0), this.a = !0);
-            Mj(this, a);
-            a.postRenderFunctions.push(Kj)
-        }
-    };
-
-    function Ep(a, c) {
-        uj.call(this, a);
-        this.target = c
-    }
-    w(Ep, uj);
-    Ep.prototype.e = ca;
-    Ep.prototype.i = ca;
-
-    function Fp(a) {
-        var c = Mf("DIV");
-        c.style.position = "absolute";
-        Ep.call(this, a, c);
-        this.c = null;
-        this.d = Bd()
-    }
-    w(Fp, Ep);
-    Fp.prototype.Pa = function(a, c, d, e) {
-        var f = this.a;
-        return f.da().ge(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
-            return d.call(e, a, f)
-        })
-    };
-    Fp.prototype.e = function() {
-        Of(this.target);
-        this.c = null
-    };
-    Fp.prototype.f = function(a, c) {
-        var d = a.viewState,
-            e = d.center,
-            f = d.resolution,
-            g = d.rotation,
-            h = this.c,
-            k = this.a.da(),
-            n = a.viewHints,
-            p = a.extent;
-        m(c.extent) && (p = ge(p, c.extent));
-        n[0] || n[1] || je(p) || (d = d.projection, n = k.f, null === n || (d = n), p = k.Cc(p, f, a.pixelRatio, d), null === p || wj(this, p) && (h = p));
-        null !== h && (d = h.G(), n = h.resolution, p = zd(), qj(p, a.size[0] / 2, a.size[1] / 2, n / f, n / f, g, (d[0] - e[0]) / n, (e[1] - d[3]) / n), h != this.c && (e = h.b(this), e.style.maxWidth = "none", e.style.position = "absolute", Of(this.target), this.target.appendChild(e), this.c = h), rj(p, this.d) || (fi(this.target, p), Cd(this.d, p)), yj(a.attributions, h.f), zj(a, k));
-        return !0
-    };
-
-    function Gp(a) {
-        var c = Mf("DIV");
-        c.style.position = "absolute";
-        Ep.call(this, a, c);
-        this.d = !0;
-        this.q = 1;
-        this.g = 0;
-        this.c = {}
-    }
-    w(Gp, Ep);
-    Gp.prototype.e = function() {
-        Of(this.target);
-        this.g = 0
-    };
-    Gp.prototype.f = function(a, c) {
-        if (!c.visible) return this.d && (mg(this.target, !1), this.d = !1), !0;
-        var d = a.pixelRatio,
-            e = a.viewState,
-            f = e.projection,
-            g = this.a,
-            h = g.da(),
-            k = ah(h, f),
-            n = h.Cd(),
-            p = Tg(k, e.resolution),
-            q = k.ma(p),
-            r = e.center,
-            t;
-        q == e.resolution ? (r = Bj(r, q, a.size), t = ee(r, q, e.rotation, a.size)) : t = a.extent;
-        m(c.extent) && (t = ge(t, c.extent));
-        var q = Qg(k, t, q),
-            u = {};
-        u[p] = {};
-        var A = this.yd(h, u),
-            z = g.c(),
-            D = Kd(),
-            B = new ff(0, 0, 0, 0),
-            y, K, J, H;
-        for (J = q.b; J <= q.d; ++J)
-            for (H = q.c; H <= q.a; ++H) y = h.Vb(p, J, H, d, f), K = y.state, 2 == K ? u[p][ef(y.b)] = y : 4 == K || 3 == K && !z || (K = k.Ad(y.b, A, null, B, D), K || (y = k.Ld(y.b, B, D), null === y || A(p + 1, y)));
-        var P;
-        if (this.g != h.b) {
-            for (P in this.c) z = this.c[+P], Qf(z.target);
-            this.c = {};
-            this.g = h.b
-        }
-        D = Ua(tb(u), Number);
-        gb(D);
-        var A = {},
-            sa;
-        J = 0;
-        for (H = D.length; J < H; ++J) {
-            P = D[J];
-            P in this.c ? z = this.c[P] : (z = k.cd(r, P), z = new Hp(k, z), A[P] = !0, this.c[P] = z);
-            P = u[P];
-            for (sa in P) {
-                y = z;
-                K = P[sa];
-                var Oa = n,
-                    N = K.b,
-                    za = N[0],
-                    cb = N[1],
-                    Ga = N[2],
-                    N = ef(N);
-                if (!(N in y.a)) {
-                    var za = ld(y.d.na(za), y.i),
-                        Bb = K.Ma(y),
-                        $a = Bb.style;
-                    $a.maxWidth = "none";
-                    var Ic = void 0,
-                        lc = void 0;
-                    0 < Oa ? (Ic = Mf("DIV"), lc = Ic.style, lc.overflow = "hidden", lc.width = za[0] + "px", lc.height = za[1] + "px", $a.position = "absolute", $a.left = -Oa + "px", $a.top = -Oa + "px", $a.width = za[0] + 2 * Oa + "px", $a.height = za[1] + 2 * Oa + "px", Ic.appendChild(Bb)) : ($a.width = za[0] + "px", $a.height = za[1] + "px", Ic = Bb, lc = $a);
-                    lc.position = "absolute";
-                    lc.left = (cb - y.c[1]) * za[0] + "px";
-                    lc.top = (y.c[2] - Ga) * za[1] + "px";
-                    null === y.b && (y.b = document.createDocumentFragment());
-                    y.b.appendChild(Ic);
-                    y.a[N] = K
-                }
-            }
-            null !== z.b && (z.target.appendChild(z.b), z.b = null)
-        }
-        n = Ua(tb(this.c), Number);
-        gb(n);
-        J = zd();
-        sa = 0;
-        for (D = n.length; sa < D; ++sa)
-            if (P = n[sa], z = this.c[P], P in u)
-                if (y = z.g, H = z.f, qj(J, a.size[0] / 2, a.size[1] / 2, y / e.resolution, y / e.resolution, e.rotation, (H[0] - r[0]) / y, (r[1] - H[1]) / y), H = z, y = J, rj(y, H.e) || (fi(H.target, y), Cd(H.e, y)), P in A) {
-                    for (--P; 0 <= P; --P)
-                        if (P in this.c) {
-                            H = this.c[P].target;
-                            H.parentNode && H.parentNode.insertBefore(z.target, H.nextSibling);
-                            break
-                        }
-                    0 > P && Pf(this.target, z.target, 0)
-                } else {
-                    if (!a.viewHints[0] && !a.viewHints[1]) {
-                        K = Pg(z.d, t, z.c[0], B);
-                        P = [];
-                        y = H = void 0;
-                        for (y in z.a) H = z.a[y],
-                            K.contains(H.b) || P.push(H);
-                        Oa = K = void 0;
-                        K = 0;
-                        for (Oa = P.length; K < Oa; ++K) H = P[K], y = ef(H.b), Qf(H.Ma(z)), delete z.a[y]
-                    }
-                }
-        else Qf(z.target), delete this.c[P];
-        c.opacity != this.q && (this.q = this.target.style.opacity = c.opacity);
-        c.visible && !this.d && (mg(this.target, !0), this.d = !0);
-        Aj(a.usedTiles, h, p, q);
-        Cj(a, h, k, d, f, t, p, g.a());
-        xj(a, h);
-        zj(a, h);
-        return !0
-    };
-
-    function Hp(a, c) {
-        this.target = Mf("DIV");
-        this.target.style.position = "absolute";
-        this.target.style.width = "100%";
-        this.target.style.height = "100%";
-        this.d = a;
-        this.c = c;
-        this.f = be(Og(a, c));
-        this.g = a.ma(c[0]);
-        this.a = {};
-        this.b = null;
-        this.e = Bd();
-        this.i = [0, 0]
-    };
-
-    function Ip(a) {
-        this.g = ai();
-        var c = this.g.canvas;
-        c.style.maxWidth = "none";
-        c.style.position = "absolute";
-        Ep.call(this, a, c);
-        this.d = !1;
-        this.n = -1;
-        this.o = NaN;
-        this.q = Kd();
-        this.c = this.l = null;
-        this.H = zd();
-        this.p = zd()
-    }
-    w(Ip, Ep);
-    Ip.prototype.i = function(a, c) {
-        var d = a.viewState,
-            e = d.center,
-            f = d.rotation,
-            g = d.resolution,
-            d = a.pixelRatio,
-            h = a.size[0],
-            k = a.size[1],
-            n = h * d,
-            p = k * d,
-            e = qj(this.H, d * h / 2, d * k / 2, d / g, -d / g, -f, -e[0], -e[1]),
-            g = this.g;
-        g.canvas.width = n;
-        g.canvas.height = p;
-        h = qj(this.p, 0, 0, 1 / d, 1 / d, 0, -(n - h) / 2 * d, -(p - k) / 2 * d);
-        fi(g.canvas, h);
-        Jp(this, "precompose", a, e);
-        h = this.c;
-        null === h || h.la() || (g.globalAlpha = c.opacity, Jm(h, g, d, e, f, a.skippedFeatureUids), Jp(this, "render", a, e));
-        Jp(this, "postcompose", a, e)
-    };
-
-    function Jp(a, c, d, e) {
-        var f = a.g;
-        a = a.a;
-        bd(a, c) && (e = new cm(f, d.pixelRatio, d.extent, e, d.viewState.rotation), a.dispatchEvent(new il(c, a, e, null, d, f, null)), om(e))
-    }
-    Ip.prototype.Pa = function(a, c, d, e) {
-        if (null !== this.c) {
-            var f = this.a,
-                g = {};
-            return this.c.c(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
-                var c = ma(a).toString();
-                if (!(c in g)) return g[c] = !0, d.call(e, a, f)
-            })
-        }
-    };
-    Ip.prototype.J = function() {
-        vj(this)
-    };
-    Ip.prototype.f = function(a) {
-        function c(a) {
-            var c;
-            m(a.c) ? c = a.c.call(a, n) : m(d.a) && (c = (0, d.a)(a, n));
-            if (null != c) {
-                if (null != c) {
-                    var e, f, g = !1;
-                    e = 0;
-                    for (f = c.length; e < f; ++e) g = fn(q, a, c[e], en(n, p), this.J, this) || g;
-                    a = g
-                } else a = !1;
-                this.d = this.d || a
-            }
-        }
-        var d = this.a,
-            e = d.da();
-        yj(a.attributions, e.d);
-        zj(a, e);
-        var f = a.viewHints[0],
-            g = a.viewHints[1],
-            h = d.o,
-            k = d.n;
-        if (!this.d && !h && f || !k && g) return !0;
-        var g = a.extent,
-            h = a.viewState,
-            f = h.projection,
-            n = h.resolution,
-            p = a.pixelRatio;
-        a = d.b;
-        k = d.c;
-        h = d.get("renderOrder");
-        m(h) || (h = dn);
-        g = Od(g, k * n);
-        if (!this.d && this.o == n && this.n == a && this.l == h && Rd(this.q, g)) return !0;
-        qc(this.c);
-        this.c = null;
-        this.d = !1;
-        var q = new Fm(.5 * n / p, g, n, d.c);
-        e.ac(g, n, f);
-        if (null === h) e.Ab(g, n, c, this);
-        else {
-            var r = [];
-            e.Ab(g, n, function(a) {
-                r.push(a)
-            }, this);
-            gb(r, h);
-            Sa(r, c, this)
-        }
-        Gm(q);
-        this.o = n;
-        this.n = a;
-        this.l = h;
-        this.q = g;
-        this.c = q;
-        return !0
-    };
-
-    function Kp(a, c) {
-        Ij.call(this, 0, c);
-        this.a = null;
-        this.a = ai();
-        var d = this.a.canvas;
-        d.style.position = "absolute";
-        d.style.width = "100%";
-        d.style.height = "100%";
-        d.className = "ol-unselectable";
-        Pf(a, d, 0);
-        this.e = zd();
-        this.b = Mf("DIV");
-        this.b.className = "ol-unselectable";
-        d = this.b.style;
-        d.position = "absolute";
-        d.width = "100%";
-        d.height = "100%";
-        x(this.b, "touchstart", tc);
-        Pf(a, this.b, 0);
-        this.d = !0
-    }
-    w(Kp, Ij);
-    Kp.prototype.O = function() {
-        Qf(this.b);
-        Kp.S.O.call(this)
-    };
-    Kp.prototype.Ke = function(a) {
-        if (a instanceof I) a = new Fp(a);
-        else if (a instanceof L) a = new Gp(a);
-        else if (a instanceof M) a = new Ip(a);
-        else return null;
-        return a
-    };
-
-    function Lp(a, c, d) {
-        var e = a.g;
-        if (bd(e, c)) {
-            var f = d.extent,
-                g = d.pixelRatio,
-                h = d.viewState,
-                k = h.resolution,
-                n = h.rotation,
-                p = a.a,
-                q = p.canvas;
-            qj(a.e, q.width / 2, q.height / 2, g / h.resolution, -g / h.resolution, -h.rotation, -h.center[0], -h.center[1]);
-            h = new cm(p, g, f, a.e, n);
-            f = new Fm(.5 * k / g, f, k);
-            e.dispatchEvent(new il(c, e, h, f, d, p, null));
-            Gm(f);
-            f.la() || Jm(f, p, g, a.e, n, {});
-            om(h);
-            a.c = f
-        }
-    }
-    Kp.prototype.M = function() {
-        return "dom"
-    };
-    Kp.prototype.ue = function(a) {
-        if (null === a) this.d && (mg(this.b, !1), this.d = !1);
-        else {
-            var c;
-            c = function(a, c) {
-                Pf(this.b, a, c)
-            };
-            var d = this.g;
-            if (bd(d, "precompose") || bd(d, "postcompose")) {
-                var d = this.a.canvas,
-                    e = a.pixelRatio;
-                d.width = a.size[0] * e;
-                d.height = a.size[1] * e
-            }
-            Lp(this, "precompose", a);
-            var d = a.layerStatesArray,
-                e = a.viewState.resolution,
-                f, g, h, k;
-            f = 0;
-            for (g = d.length; f < g; ++f) k = d[f], h = k.layer, h = Lj(this, h), c.call(this, h.target, f), oj(k, e) && "ready" == k.i ? h.f(a, k) && h.i(a, k) : h.e();
-            c = a.layerStates;
-            for (var n in this.f) n in c || (h = this.f[n], Qf(h.target));
-            this.d || (mg(this.b, !0), this.d = !0);
-            Jj(a);
-            Mj(this, a);
-            a.postRenderFunctions.push(Kj);
-            Lp(this, "postcompose", a)
-        }
-    };
-
-    function Mp(a) {
-        this.b = a
-    }
-
-    function Np(a) {
-        this.b = a
-    }
-    w(Np, Mp);
-    Np.prototype.M = function() {
-        return 35632
-    };
-
-    function Op(a) {
-        this.b = a
-    }
-    w(Op, Mp);
-    Op.prototype.M = function() {
-        return 35633
-    };
-
-    function Pp() {
-        this.b = "precision mediump float;varying vec2 a;varying float b;uniform mat4 k;uniform float l;uniform sampler2D m;void main(void){vec4 texColor=texture2D(m,a);float alpha=texColor.a*b*l;if(alpha==0.0){discard;}gl_FragColor.a=alpha;gl_FragColor.rgb=(k*vec4(texColor.rgb,1.)).rgb;}"
-    }
-    w(Pp, Np);
-    da(Pp);
-
-    function Qp() {
-        this.b = "varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"
-    }
-    w(Qp, Op);
-    da(Qp);
-
-    function Rp(a, c) {
-        this.l = a.getUniformLocation(c, "k");
-        this.i = a.getUniformLocation(c, "j");
-        this.q = a.getUniformLocation(c, "i");
-        this.f = a.getUniformLocation(c, "l");
-        this.g = a.getUniformLocation(c, "h");
-        this.b = a.getAttribLocation(c, "e");
-        this.a = a.getAttribLocation(c, "f");
-        this.d = a.getAttribLocation(c, "c");
-        this.c = a.getAttribLocation(c, "g");
-        this.e = a.getAttribLocation(c, "d")
-    };
-
-    function Sp() {
-        this.b = "precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"
-    }
-    w(Sp, Np);
-    da(Sp);
-
-    function Tp() {
-        this.b = "varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"
-    }
-    w(Tp, Op);
-    da(Tp);
-
-    function Up(a, c) {
-        this.i = a.getUniformLocation(c, "j");
-        this.q = a.getUniformLocation(c, "i");
-        this.f = a.getUniformLocation(c, "k");
-        this.g = a.getUniformLocation(c, "h");
-        this.b = a.getAttribLocation(c, "e");
-        this.a = a.getAttribLocation(c, "f");
-        this.d = a.getAttribLocation(c, "c");
-        this.c = a.getAttribLocation(c, "g");
-        this.e = a.getAttribLocation(c, "d")
-    };
-
-    function Vp(a) {
-        this.b = m(a) ? a : [];
-        this.a = m(void 0) ? void 0 : 35044
-    };
-
-    function Wp(a, c) {
-        this.l = a;
-        this.b = c;
-        this.a = {};
-        this.f = {};
-        this.e = {};
-        this.i = this.q = this.d = this.g = null;
-        (this.c = Ya(wa, "OES_element_index_uint")) && c.getExtension("OES_element_index_uint");
-        x(this.l, "webglcontextlost", this.Ym, !1, this);
-        x(this.l, "webglcontextrestored", this.Zm, !1, this)
-    }
-
-    function Xp(a, c, d) {
-        var e = a.b,
-            f = d.b,
-            g = ma(d);
-        if (g in a.a) e.bindBuffer(c, a.a[g].buffer);
-        else {
-            var h = e.createBuffer();
-            e.bindBuffer(c, h);
-            var k;
-            34962 == c ? k = new Float32Array(f) : 34963 == c && (k = a.c ? new Uint32Array(f) : new Uint16Array(f));
-            e.bufferData(c, k, d.a);
-            a.a[g] = {
-                c: d,
-                buffer: h
-            }
-        }
-    }
-
-    function Yp(a, c) {
-        var d = a.b,
-            e = ma(c),
-            f = a.a[e];
-        d.isContextLost() || d.deleteBuffer(f.buffer);
-        delete a.a[e]
-    }
-    l = Wp.prototype;
-    l.O = function() {
-        var a = this.b;
-        a.isContextLost() || (pb(this.a, function(c) {
-            a.deleteBuffer(c.buffer)
-        }), pb(this.e, function(c) {
-            a.deleteProgram(c)
-        }), pb(this.f, function(c) {
-            a.deleteShader(c)
-        }), a.deleteFramebuffer(this.d), a.deleteRenderbuffer(this.i), a.deleteTexture(this.q))
-    };
-    l.Xm = function() {
-        return this.b
-    };
-    l.Te = function() {
-        if (null === this.d) {
-            var a = this.b,
-                c = a.createFramebuffer();
-            a.bindFramebuffer(a.FRAMEBUFFER, c);
-            var d = Zp(a, 1, 1),
-                e = a.createRenderbuffer();
-            a.bindRenderbuffer(a.RENDERBUFFER, e);
-            a.renderbufferStorage(a.RENDERBUFFER, a.DEPTH_COMPONENT16, 1, 1);
-            a.framebufferTexture2D(a.FRAMEBUFFER, a.COLOR_ATTACHMENT0, a.TEXTURE_2D, d, 0);
-            a.framebufferRenderbuffer(a.FRAMEBUFFER, a.DEPTH_ATTACHMENT, a.RENDERBUFFER, e);
-            a.bindTexture(a.TEXTURE_2D, null);
-            a.bindRenderbuffer(a.RENDERBUFFER, null);
-            a.bindFramebuffer(a.FRAMEBUFFER, null);
-            this.d = c;
-            this.q = d;
-            this.i = e
-        }
-        return this.d
-    };
-
-    function $p(a, c) {
-        var d = ma(c);
-        if (d in a.f) return a.f[d];
-        var e = a.b,
-            f = e.createShader(c.M());
-        e.shaderSource(f, c.b);
-        e.compileShader(f);
-        return a.f[d] = f
-    }
-
-    function aq(a, c, d) {
-        var e = ma(c) + "/" + ma(d);
-        if (e in a.e) return a.e[e];
-        var f = a.b,
-            g = f.createProgram();
-        f.attachShader(g, $p(a, c));
-        f.attachShader(g, $p(a, d));
-        f.linkProgram(g);
-        return a.e[e] = g
-    }
-    l.Ym = function() {
-        yb(this.a);
-        yb(this.f);
-        yb(this.e);
-        this.i = this.q = this.d = this.g = null
-    };
-    l.Zm = function() {};
-    l.oe = function(a) {
-        if (a == this.g) return !1;
-        this.b.useProgram(a);
-        this.g = a;
-        return !0
-    };
-
-    function bq(a, c, d) {
-        var e = a.createTexture();
-        a.bindTexture(a.TEXTURE_2D, e);
-        a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MAG_FILTER, a.LINEAR);
-        a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MIN_FILTER, a.LINEAR);
-        m(c) && a.texParameteri(3553, 10242, c);
-        m(d) && a.texParameteri(3553, 10243, d);
-        return e
-    }
-
-    function Zp(a, c, d) {
-        var e = bq(a, void 0, void 0);
-        a.texImage2D(a.TEXTURE_2D, 0, a.RGBA, c, d, 0, a.RGBA, a.UNSIGNED_BYTE, null);
-        return e
-    }
-
-    function cq(a, c) {
-        var d = bq(a, 33071, 33071);
-        a.texImage2D(a.TEXTURE_2D, 0, a.RGBA, a.RGBA, a.UNSIGNED_BYTE, c);
-        return d
-    };
-
-    function dq(a, c) {
-        this.n = this.V = void 0;
-        this.wb = new xf;
-        this.q = ce(c);
-        this.U = [];
-        this.f = [];
-        this.J = void 0;
-        this.e = [];
-        this.d = [];
-        this.N = this.L = void 0;
-        this.a = [];
-        this.H = this.p = this.i = null;
-        this.T = void 0;
-        this.rc = Bd();
-        this.vb = Bd();
-        this.X = this.sa = void 0;
-        this.xb = Bd();
-        this.Fa = this.oa = this.ba = void 0;
-        this.Ra = [];
-        this.g = [];
-        this.b = [];
-        this.o = null;
-        this.c = [];
-        this.l = [];
-        this.Ga = void 0
-    }
-    w(dq, hl);
-
-    function eq(a, c) {
-        var d = a.o,
-            e = a.i,
-            f = a.Ra,
-            g = a.g,
-            h = c.b;
-        return function() {
-            if (!h.isContextLost()) {
-                var a, n;
-                a = 0;
-                for (n = f.length; a < n; ++a) h.deleteTexture(f[a]);
-                a = 0;
-                for (n = g.length; a < n; ++a) h.deleteTexture(g[a])
-            }
-            Yp(c, d);
-            Yp(c, e)
-        }
-    }
-
-    function fq(a, c, d, e) {
-        var f = a.V,
-            g = a.n,
-            h = a.J,
-            k = a.L,
-            n = a.N,
-            p = a.T,
-            q = a.sa,
-            r = a.X,
-            t = a.ba ? 1 : 0,
-            u = a.oa,
-            A = a.Fa,
-            z = a.Ga,
-            D = Math.cos(u),
-            u = Math.sin(u),
-            B = a.a.length,
-            y = a.b.length,
-            K, J, H, P, sa, Oa;
-        for (K = 0; K < d; K += e) sa = c[K] - a.q[0], Oa = c[K + 1] - a.q[1], J = y / 8, H = -A * f, P = -A * (h - g), a.b[y++] = sa, a.b[y++] = Oa, a.b[y++] = H * D - P * u, a.b[y++] = H * u + P * D, a.b[y++] = q / n, a.b[y++] = (r + h) / k, a.b[y++] = p, a.b[y++] = t, H = A * (z - f), P = -A * (h - g), a.b[y++] = sa, a.b[y++] = Oa, a.b[y++] = H * D - P * u, a.b[y++] = H * u + P * D, a.b[y++] = (q + z) / n, a.b[y++] = (r + h) / k, a.b[y++] = p, a.b[y++] = t, H = A * (z - f),
-            P = A * g, a.b[y++] = sa, a.b[y++] = Oa, a.b[y++] = H * D - P * u, a.b[y++] = H * u + P * D, a.b[y++] = (q + z) / n, a.b[y++] = r / k, a.b[y++] = p, a.b[y++] = t, H = -A * f, P = A * g, a.b[y++] = sa, a.b[y++] = Oa, a.b[y++] = H * D - P * u, a.b[y++] = H * u + P * D, a.b[y++] = q / n, a.b[y++] = r / k, a.b[y++] = p, a.b[y++] = t, a.a[B++] = J, a.a[B++] = J + 1, a.a[B++] = J + 2, a.a[B++] = J, a.a[B++] = J + 2, a.a[B++] = J + 3
-    }
-    dq.prototype.jb = function(a, c) {
-        this.c.push(this.a.length);
-        this.l.push(c);
-        var d = a.j;
-        fq(this, d, d.length, a.s)
-    };
-    dq.prototype.kb = function(a, c) {
-        this.c.push(this.a.length);
-        this.l.push(c);
-        var d = a.j;
-        fq(this, d, d.length, a.s)
-    };
-
-    function gq(a, c) {
-        var d = c.b;
-        a.U.push(a.a.length);
-        a.f.push(a.a.length);
-        a.o = new Vp(a.b);
-        Xp(c, 34962, a.o);
-        a.i = new Vp(a.a);
-        Xp(c, 34963, a.i);
-        var e = {};
-        hq(a.Ra, a.e, e, d);
-        hq(a.g, a.d, e, d);
-        a.V = void 0;
-        a.n = void 0;
-        a.J = void 0;
-        a.e = null;
-        a.d = null;
-        a.L = void 0;
-        a.N = void 0;
-        a.a = null;
-        a.T = void 0;
-        a.sa = void 0;
-        a.X = void 0;
-        a.ba = void 0;
-        a.oa = void 0;
-        a.Fa = void 0;
-        a.b = null;
-        a.Ga = void 0
-    }
-
-    function hq(a, c, d, e) {
-        var f, g, h, k = c.length;
-        for (h = 0; h < k; ++h) f = c[h], g = ma(f).toString(), g in d ? f = d[g] : (f = cq(e, f), d[g] = f), a[h] = f
-    }
-
-    function iq(a, c, d, e, f, g, h, k, n, p, q, r, t, u, A) {
-        var z = c.b;
-        Xp(c, 34962, a.o);
-        Xp(c, 34963, a.i);
-        var D = k || 1 != n || p || 1 != q,
-            B, y;
-        D ? (B = Pp.Ia(), y = Qp.Ia()) : (B = Sp.Ia(), y = Tp.Ia());
-        y = aq(c, B, y);
-        D ? null === a.p ? (B = new Rp(z, y), a.p = B) : B = a.p : null === a.H ? (B = new Up(z, y), a.H = B) : B = a.H;
-        c.oe(y);
-        z.enableVertexAttribArray(B.d);
-        z.vertexAttribPointer(B.d, 2, 5126, !1, 32, 0);
-        z.enableVertexAttribArray(B.b);
-        z.vertexAttribPointer(B.b, 2, 5126, !1, 32, 8);
-        z.enableVertexAttribArray(B.e);
-        z.vertexAttribPointer(B.e, 2, 5126, !1, 32, 16);
-        z.enableVertexAttribArray(B.a);
-        z.vertexAttribPointer(B.a, 1, 5126, !1, 32, 24);
-        z.enableVertexAttribArray(B.c);
-        z.vertexAttribPointer(B.c, 1, 5126, !1, 32, 28);
-        y = a.xb;
-        qj(y, 0, 0, 2 / (e * g[0]), 2 / (e * g[1]), -f, -(d[0] - a.q[0]), -(d[1] - a.q[1]));
-        d = a.vb;
-        e = 2 / g[0];
-        g = 2 / g[1];
-        Dd(d);
-        d[0] = e;
-        d[5] = g;
-        d[10] = 1;
-        d[15] = 1;
-        g = a.rc;
-        Dd(g);
-        0 !== f && Id(g, -f);
-        z.uniformMatrix4fv(B.g, !1, y);
-        z.uniformMatrix4fv(B.q, !1, d);
-        z.uniformMatrix4fv(B.i, !1, g);
-        z.uniform1f(B.f, h);
-        D && z.uniformMatrix4fv(B.l, !1, yf(a.wb, k, n, p, q));
-        var K;
-        if (m(t)) {
-            if (u) a: {
-                f = c.c ? 5125 : 5123;c = c.c ? 4 : 2;p = a.c.length - 1;
-                for (h = a.g.length - 1; 0 <= h; --h)
-                    for (z.bindTexture(3553, a.g[h]), k = 0 < h ? a.f[h - 1] : 0, q = a.f[h]; 0 <= p && a.c[p] >= k;) {
-                        n = a.c[p];
-                        u = a.l[p];
-                        D = ma(u).toString();
-                        if (!m(r[D]) && (!m(A) || he(A, u.Q().G())) && (z.clear(z.COLOR_BUFFER_BIT | z.DEPTH_BUFFER_BIT), z.drawElements(4, q - n, f, n * c), q = t(u))) {
-                            a = q;
-                            break a
-                        }
-                        q = n;
-                        p--
-                    }
-                a = void 0
-            }
-            else z.clear(z.COLOR_BUFFER_BIT | z.DEPTH_BUFFER_BIT), jq(a, z, c, r, a.g, a.f), a = (a = t(null)) ? a : void 0;
-            K = a
-        } else jq(a, z, c, r, a.Ra, a.U);
-        z.disableVertexAttribArray(B.d);
-        z.disableVertexAttribArray(B.b);
-        z.disableVertexAttribArray(B.e);
-        z.disableVertexAttribArray(B.a);
-        z.disableVertexAttribArray(B.c);
-        return K
-    }
-
-    function jq(a, c, d, e, f, g) {
-        var h = d.c ? 5125 : 5123;
-        d = d.c ? 4 : 2;
-        if (xb(e)) {
-            var k;
-            a = 0;
-            e = f.length;
-            for (k = 0; a < e; ++a) {
-                c.bindTexture(3553, f[a]);
-                var n = g[a];
-                c.drawElements(4, n - k, h, k * d);
-                k = n
-            }
-        } else {
-            k = 0;
-            var p, n = 0;
-            for (p = f.length; n < p; ++n) {
-                c.bindTexture(3553, f[n]);
-                for (var q = 0 < n ? g[n - 1] : 0, r = g[n], t = q; k < a.c.length && a.c[k] <= r;) {
-                    var u = ma(a.l[k]).toString();
-                    m(e[u]) ? (t !== q && c.drawElements(4, q - t, h, t * d), q = t = k === a.c.length - 1 ? r : a.c[k + 1]) : q = k === a.c.length - 1 ? r : a.c[k + 1];
-                    k++
-                }
-                t !== q && c.drawElements(4, q - t, h, t * d)
-            }
-        }
-    }
-    dq.prototype.Za = function(a) {
-        var c = a.mb(),
-            d = a.Lb(1),
-            e = a.Dd(),
-            f = a.he(1),
-            g = a.U,
-            h = a.rb(),
-            k = a.V,
-            n = a.q,
-            p = a.Xa();
-        a = a.l;
-        var q;
-        0 === this.e.length ? this.e.push(d) : (q = this.e[this.e.length - 1], ma(q) != ma(d) && (this.U.push(this.a.length), this.e.push(d)));
-        0 === this.d.length ? this.d.push(f) : (q = this.d[this.d.length - 1], ma(q) != ma(f) && (this.f.push(this.a.length), this.d.push(f)));
-        this.V = c[0];
-        this.n = c[1];
-        this.J = p[1];
-        this.L = e[1];
-        this.N = e[0];
-        this.T = g;
-        this.sa = h[0];
-        this.X = h[1];
-        this.oa = n;
-        this.ba = k;
-        this.Fa = a;
-        this.Ga = p[0]
-    };
-
-    function kq(a, c, d) {
-        this.e = c;
-        this.f = a;
-        this.d = d;
-        this.a = {}
-    }
-
-    function lq(a, c) {
-        var d = [],
-            e;
-        for (e in a.a) d.push(eq(a.a[e], c));
-        return Kg.apply(null, d)
-    }
-
-    function mq(a, c) {
-        for (var d in a.a) gq(a.a[d], c)
-    }
-    kq.prototype.b = function(a, c) {
-        var d = this.a[c];
-        m(d) || (d = new nq[c](this.f, this.e), this.a[c] = d);
-        return d
-    };
-    kq.prototype.la = function() {
-        return xb(this.a)
-    };
-
-    function oq(a, c, d, e, f, g, h, k, n, p, q, r, t, u) {
-        var A = pq,
-            z, D;
-        for (z = pm.length - 1; 0 <= z; --z)
-            if (D = a.a[pm[z]], m(D) && (D = iq(D, c, d, e, f, A, g, h, k, n, p, q, r, t, u))) return D
-    }
-    kq.prototype.c = function(a, c, d, e, f, g, h, k, n, p, q, r, t, u) {
-        var A = c.b;
-        A.bindFramebuffer(A.FRAMEBUFFER, c.Te());
-        var z;
-        m(this.d) && (z = Od(Ud(a), e * this.d));
-        return oq(this, c, a, e, f, k, n, p, q, r, t, function(a) {
-            var c = new Uint8Array(4);
-            A.readPixels(0, 0, 1, 1, A.RGBA, A.UNSIGNED_BYTE, c);
-            if (0 < c[3] && (a = u(a))) return a
-        }, !0, z)
-    };
-
-    function qq(a, c, d, e, f, g, h, k, n, p, q) {
-        var r = d.b;
-        r.bindFramebuffer(r.FRAMEBUFFER, d.Te());
-        a = oq(a, d, c, e, f, g, h, k, n, p, q, function() {
-            var a = new Uint8Array(4);
-            r.readPixels(0, 0, 1, 1, r.RGBA, r.UNSIGNED_BYTE, a);
-            return 0 < a[3]
-        }, !1);
-        return m(a)
-    }
-    var nq = {
-            Image: dq
-        },
-        pq = [1, 1];
-
-    function rq(a, c, d, e, f, g) {
-        this.a = a;
-        this.e = c;
-        this.d = g;
-        this.i = f;
-        this.g = e;
-        this.f = d;
-        this.c = null;
-        this.b = {}
-    }
-    w(rq, hl);
-    l = rq.prototype;
-    l.tc = function(a, c) {
-        var d = a.toString(),
-            e = this.b[d];
-        m(e) ? e.push(c) : this.b[d] = [c]
-    };
-    l.uc = function() {};
-    l.Le = function(a, c) {
-        var d = (0, c.d)(a);
-        if (null != d && he(this.d, d.G())) {
-            var e = c.b;
-            m(e) || (e = 0);
-            this.tc(e, function(a) {
-                a.Aa(c.e, c.c);
-                a.Za(c.f);
-                a.Ba(c.a);
-                var e = sq[d.M()];
-                e && e.call(a, d, null)
-            })
-        }
-    };
-    l.zd = function(a, c) {
-        var d = a.d,
-            e, f;
-        e = 0;
-        for (f = d.length; e < f; ++e) {
-            var g = d[e],
-                h = sq[g.M()];
-            h && h.call(this, g, c)
-        }
-    };
-    l.kb = function(a, c) {
-        var d = this.a,
-            e = (new kq(1, this.d)).b(0, "Image");
-        e.Za(this.c);
-        e.kb(a, c);
-        gq(e, d);
-        iq(e, this.a, this.e, this.f, this.g, this.i, 1, 0, 1, 0, 1, {}, void 0, !1);
-        eq(e, d)()
-    };
-    l.zb = function() {};
-    l.vc = function() {};
-    l.jb = function(a, c) {
-        var d = this.a,
-            e = (new kq(1, this.d)).b(0, "Image");
-        e.Za(this.c);
-        e.jb(a, c);
-        gq(e, d);
-        iq(e, this.a, this.e, this.f, this.g, this.i, 1, 0, 1, 0, 1, {}, void 0, !1);
-        eq(e, d)()
-    };
-    l.wc = function() {};
-    l.Rb = function() {};
-    l.lb = function() {};
-    l.Aa = function() {};
-    l.Za = function(a) {
-        this.c = a
-    };
-    l.Ba = function() {};
-    var sq = {
-        Point: rq.prototype.kb,
-        MultiPoint: rq.prototype.jb,
-        GeometryCollection: rq.prototype.zd
-    };
-
-    function tq() {
-        this.b = "precision mediump float;varying vec2 a;uniform mat4 f;uniform float g;uniform sampler2D h;void main(void){vec4 texColor=texture2D(h,a);gl_FragColor.rgb=(f*vec4(texColor.rgb,1.)).rgb;gl_FragColor.a=texColor.a*g;}"
-    }
-    w(tq, Np);
-    da(tq);
-
-    function uq() {
-        this.b = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"
-    }
-    w(uq, Op);
-    da(uq);
-
-    function vq(a, c) {
-        this.g = a.getUniformLocation(c, "f");
-        this.c = a.getUniformLocation(c, "g");
-        this.d = a.getUniformLocation(c, "e");
-        this.f = a.getUniformLocation(c, "d");
-        this.e = a.getUniformLocation(c, "h");
-        this.b = a.getAttribLocation(c, "b");
-        this.a = a.getAttribLocation(c, "c")
-    };
-
-    function wq() {
-        this.b = "precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"
-    }
-    w(wq, Np);
-    da(wq);
-
-    function xq() {
-        this.b = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"
-    }
-    w(xq, Op);
-    da(xq);
-
-    function yq(a, c) {
-        this.c = a.getUniformLocation(c, "f");
-        this.d = a.getUniformLocation(c, "e");
-        this.f = a.getUniformLocation(c, "d");
-        this.e = a.getUniformLocation(c, "g");
-        this.b = a.getAttribLocation(c, "b");
-        this.a = a.getAttribLocation(c, "c")
-    };
-
-    function zq(a, c) {
-        uj.call(this, c);
-        this.c = a;
-        this.N = new Vp([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]);
-        this.e = this.Qa = null;
-        this.f = void 0;
-        this.q = zd();
-        this.n = Bd();
-        this.T = new xf;
-        this.o = this.l = null
-    }
-    w(zq, uj);
-
-    function Aq(a, c, d) {
-        var e = a.c.e;
-        if (m(a.f) && a.f == d) e.bindFramebuffer(36160, a.e);
-        else {
-            c.postRenderFunctions.push(ta(function(a, c, d) {
-                a.isContextLost() || (a.deleteFramebuffer(c), a.deleteTexture(d))
-            }, e, a.e, a.Qa));
-            c = Zp(e, d, d);
-            var f = e.createFramebuffer();
-            e.bindFramebuffer(36160, f);
-            e.framebufferTexture2D(36160, 36064, 3553, c, 0);
-            a.Qa = c;
-            a.e = f;
-            a.f = d
-        }
-    }
-    zq.prototype.Lg = function(a, c, d) {
-        Bq(this, "precompose", d, a);
-        Xp(d, 34962, this.N);
-        var e = d.b,
-            f = c.brightness || 1 != c.contrast || c.hue || 1 != c.saturation,
-            g, h;
-        f ? (g = tq.Ia(), h = uq.Ia()) : (g = wq.Ia(), h = xq.Ia());
-        g = aq(d, g, h);
-        f ? null === this.l ? this.l = h = new vq(e, g) : h = this.l : null === this.o ? this.o = h = new yq(e, g) : h = this.o;
-        d.oe(g) && (e.enableVertexAttribArray(h.b), e.vertexAttribPointer(h.b, 2, 5126, !1, 16, 0), e.enableVertexAttribArray(h.a), e.vertexAttribPointer(h.a, 2, 5126, !1, 16, 8), e.uniform1i(h.e, 0));
-        e.uniformMatrix4fv(h.f, !1, this.q);
-        e.uniformMatrix4fv(h.d, !1, this.n);
-        f && e.uniformMatrix4fv(h.g, !1, yf(this.T, c.brightness, c.contrast, c.hue, c.saturation));
-        e.uniform1f(h.c, c.opacity);
-        e.bindTexture(3553, this.Qa);
-        e.drawArrays(5, 0, 4);
-        Bq(this, "postcompose", d, a)
-    };
-
-    function Bq(a, c, d, e) {
-        a = a.a;
-        if (bd(a, c)) {
-            var f = e.viewState;
-            a.dispatchEvent(new il(c, a, new rq(d, f.center, f.resolution, f.rotation, e.size, e.extent), null, e, null, d))
-        }
-    }
-    zq.prototype.gf = function() {
-        this.e = this.Qa = null;
-        this.f = void 0
-    };
-
-    function Cq(a, c) {
-        zq.call(this, a, c);
-        this.i = this.g = this.d = null
-    }
-    w(Cq, zq);
-
-    function Dq(a, c) {
-        var d = c.b();
-        return cq(a.c.e, d)
-    }
-    Cq.prototype.Pa = function(a, c, d, e) {
-        var f = this.a;
-        return f.da().ge(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
-            return d.call(e, a, f)
-        })
-    };
-    Cq.prototype.hf = function(a, c) {
-        var d = this.c.e,
-            e = a.pixelRatio,
-            f = a.viewState,
-            g = f.center,
-            h = f.resolution,
-            k = f.rotation,
-            n = this.d,
-            p = this.Qa,
-            q = this.a.da(),
-            r = a.viewHints,
-            t = a.extent;
-        m(c.extent) && (t = ge(t, c.extent));
-        r[0] || r[1] || je(t) || (f = f.projection, r = q.f, null === r || (f = r), t = q.Cc(t, h, e, f), null !== t && wj(this, t) && (n = t, p = Dq(this, t), null === this.Qa || a.postRenderFunctions.push(ta(function(a, c) {
-            a.isContextLost() || a.deleteTexture(c)
-        }, d, this.Qa))));
-        null !== n && (d = this.c.d.l, Eq(this, d.width, d.height, e, g, h, k, n.G()), this.i = null, e = this.q, Dd(e), Hd(e, 1, -1), Gd(e, 0, -1), this.d = n, this.Qa = p, yj(a.attributions, n.f), zj(a, q));
-        return !0
-    };
-
-    function Eq(a, c, d, e, f, g, h, k) {
-        c *= g;
-        d *= g;
-        a = a.n;
-        Dd(a);
-        Hd(a, 2 * e / c, 2 * e / d);
-        Id(a, -h);
-        Gd(a, k[0] - f[0], k[1] - f[1]);
-        Hd(a, (k[2] - k[0]) / 2, (k[3] - k[1]) / 2);
-        Gd(a, 1, 1)
-    }
-    Cq.prototype.ee = function(a, c) {
-        var d = this.Pa(a, c, Gg, this);
-        return m(d)
-    };
-    Cq.prototype.dc = function(a, c, d, e) {
-        if (null !== this.d && !fa(this.d.b()))
-            if (this.a.da() instanceof xp) {
-                if (a = a.slice(), sj(c.pixelToCoordinateMatrix, a, a), this.Pa(a, c, Gg, this)) return d.call(e, this.a)
-            } else {
-                var f = [this.d.b().width, this.d.b().height];
-                if (null === this.i) {
-                    var g = c.size;
-                    c = zd();
-                    Dd(c);
-                    Gd(c, -1, -1);
-                    Hd(c, 2 / g[0], 2 / g[1]);
-                    Gd(c, 0, g[1]);
-                    Hd(c, 1, -1);
-                    g = zd();
-                    Fd(this.n, g);
-                    var h = zd();
-                    Dd(h);
-                    Gd(h, 0, f[1]);
-                    Hd(h, 1, -1);
-                    Hd(h, f[0] / 2, f[1] / 2);
-                    Gd(h, 1, 1);
-                    var k = zd();
-                    Ed(h, g, k);
-                    Ed(k, c, k);
-                    this.i = k
-                }
-                c = [0, 0];
-                sj(this.i, a, c);
-                if (!(0 > c[0] || c[0] > f[0] || 0 > c[1] || c[1] > f[1]) && (null === this.g && (this.g = ai(1, 1)), this.g.clearRect(0, 0, 1, 1), this.g.drawImage(this.d.b(), c[0], c[1], 1, 1, 0, 0, 1, 1), 0 < this.g.getImageData(0, 0, 1, 1).data[3])) return d.call(e, this.a)
-            }
-    };
-
-    function Fq() {
-        this.b = "precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"
-    }
-    w(Fq, Np);
-    da(Fq);
-
-    function Gq() {
-        this.b = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"
-    }
-    w(Gq, Op);
-    da(Gq);
-
-    function Hq(a, c) {
-        this.c = a.getUniformLocation(c, "e");
-        this.d = a.getUniformLocation(c, "d");
-        this.b = a.getAttribLocation(c, "b");
-        this.a = a.getAttribLocation(c, "c")
-    };
-
-    function Iq(a, c) {
-        zq.call(this, a, c);
-        this.J = Fq.Ia();
-        this.X = Gq.Ia();
-        this.d = null;
-        this.H = new Vp([0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0]);
-        this.p = this.g = null;
-        this.i = -1;
-        this.L = [0, 0]
-    }
-    w(Iq, zq);
-    l = Iq.prototype;
-    l.O = function() {
-        Yp(this.c.d, this.H);
-        Iq.S.O.call(this)
-    };
-    l.yd = function(a, c) {
-        var d = this.c;
-        return function(e, f) {
-            return $g(a, e, f, function(a) {
-                var f = wg(d.a, a.gb());
-                f && (c[e] || (c[e] = {}), c[e][a.b.toString()] = a);
-                return f
-            })
-        }
-    };
-    l.gf = function() {
-        Iq.S.gf.call(this);
-        this.d = null
-    };
-    l.hf = function(a, c, d) {
-        var e = this.c,
-            f = d.b,
-            g = a.viewState,
-            h = g.projection,
-            k = this.a,
-            n = k.da(),
-            p = ah(n, h),
-            q = Tg(p, g.resolution),
-            r = p.ma(q),
-            t = n.Xb(q, a.pixelRatio, h),
-            u = t[0] / ld(p.na(q), this.L)[0],
-            A = r / u,
-            z = n.Cd(),
-            D = g.center,
-            B;
-        r == g.resolution ? (D = Bj(D, r, a.size), B = ee(D, r, g.rotation, a.size)) : B = a.extent;
-        r = Qg(p, B, r);
-        if (null !== this.g && jf(this.g, r) && this.i == n.b) A = this.p;
-        else {
-            var y = [kf(r), r.a - r.c + 1],
-                y = Math.max(y[0] * t[0], y[1] * t[1]),
-                K = Math.pow(2, Math.ceil(Math.log(y) / Math.LN2)),
-                y = A * K,
-                J = p.Mb(q),
-                H = J[0] + r.b * t[0] * A,
-                A = J[1] + r.c * t[1] * A,
-                A = [H, A, H + y, A + y];
-            Aq(this, a, K);
-            f.viewport(0, 0, K, K);
-            f.clearColor(0, 0, 0, 0);
-            f.clear(16384);
-            f.disable(3042);
-            K = aq(d, this.J, this.X);
-            d.oe(K);
-            null === this.d && (this.d = new Hq(f, K));
-            Xp(d, 34962, this.H);
-            f.enableVertexAttribArray(this.d.b);
-            f.vertexAttribPointer(this.d.b, 2, 5126, !1, 16, 0);
-            f.enableVertexAttribArray(this.d.a);
-            f.vertexAttribPointer(this.d.a, 2, 5126, !1, 16, 8);
-            f.uniform1i(this.d.c, 0);
-            d = {};
-            d[q] = {};
-            var P = this.yd(n, d),
-                sa = k.c(),
-                K = !0,
-                H = Kd(),
-                Oa = new ff(0, 0, 0, 0),
-                N, za, cb;
-            for (za = r.b; za <= r.d; ++za)
-                for (cb = r.c; cb <= r.a; ++cb) {
-                    J = n.Vb(q, za, cb, u, h);
-                    if (m(c.extent) && (N = Og(p, J.b, H), !he(N, c.extent))) continue;
-                    N = J.state;
-                    if (2 == N) {
-                        if (wg(e.a, J.gb())) {
-                            d[q][ef(J.b)] = J;
-                            continue
-                        }
-                    } else if (4 == N || 3 == N && !sa) continue;
-                    K = !1;
-                    N = p.Ad(J.b, P, null, Oa, H);
-                    N || (J = p.Ld(J.b, Oa, H), null === J || P(q + 1, J))
-                }
-            c = Ua(tb(d), Number);
-            gb(c);
-            for (var P = new Float32Array(4), Ga, Bb, $a, sa = 0, Oa = c.length; sa < Oa; ++sa)
-                for (Ga in Bb = d[c[sa]], Bb) J = Bb[Ga], N = Og(p, J.b, H), za = 2 * (N[2] - N[0]) / y, cb = 2 * (N[3] - N[1]) / y, $a = 2 * (N[0] - A[0]) / y - 1, N = 2 * (N[1] - A[1]) / y - 1, yd(P, za, cb, $a, N), f.uniform4fv(this.d.d, P), Jq(e, J, t, z * u), f.drawArrays(5, 0, 4);
-            K ? (this.g = r, this.p = A, this.i = n.b) : (this.p = this.g = null, this.i = -1, a.animate = !0)
-        }
-        Aj(a.usedTiles, n, q, r);
-        var Ic = e.q;
-        Cj(a, n, p, u, h, B, q, k.a(), function(a) {
-            var c;
-            (c = 2 != a.state || wg(e.a, a.gb())) || (c = a.gb() in Ic.c);
-            c || Dj(Ic, [a, Sg(p, a.b), p.ma(a.b[0]), t, z * u])
-        }, this);
-        xj(a, n);
-        zj(a, n);
-        f = this.q;
-        Dd(f);
-        Gd(f, (D[0] - A[0]) / (A[2] - A[0]), (D[1] - A[1]) / (A[3] - A[1]));
-        0 !== g.rotation && Id(f, g.rotation);
-        Hd(f, a.size[0] * g.resolution / (A[2] - A[0]), a.size[1] * g.resolution / (A[3] - A[1]));
-        Gd(f, -.5, -.5);
-        return !0
-    };
-    l.dc = function(a, c, d, e) {
-        if (null !== this.e) {
-            var f = [0, 0];
-            sj(this.q, [a[0] / c.size[0], (c.size[1] - a[1]) / c.size[1]], f);
-            a = [f[0] * this.f, f[1] * this.f];
-            c = this.c.d.b;
-            c.bindFramebuffer(c.FRAMEBUFFER, this.e);
-            f = new Uint8Array(4);
-            c.readPixels(a[0], a[1], 1, 1, c.RGBA, c.UNSIGNED_BYTE, f);
-            if (0 < f[3]) return d.call(e, this.a)
-        }
-    };
-
-    function Kq(a, c) {
-        zq.call(this, a, c);
-        this.i = !1;
-        this.L = -1;
-        this.J = NaN;
-        this.p = Kd();
-        this.g = this.d = this.H = null
-    }
-    w(Kq, zq);
-    l = Kq.prototype;
-    l.Lg = function(a, c, d) {
-        this.g = c;
-        var e = a.viewState,
-            f = this.d;
-        if (null !== f && !f.la()) {
-            var g = e.center,
-                h = e.resolution,
-                e = e.rotation,
-                k = a.size,
-                n = c.opacity,
-                p = c.brightness,
-                q = c.contrast,
-                r = c.hue;
-            c = c.saturation;
-            a = a.skippedFeatureUids;
-            var t, u, A;
-            t = 0;
-            for (u = pm.length; t < u; ++t) A = f.a[pm[t]], m(A) && iq(A, d, g, h, e, k, n, p, q, r, c, a, void 0, !1)
-        }
-    };
-    l.O = function() {
-        var a = this.d;
-        null !== a && (lq(a, this.c.d)(), this.d = null);
-        Kq.S.O.call(this)
-    };
-    l.Pa = function(a, c, d, e) {
-        if (null !== this.d && null !== this.g) {
-            var f = c.viewState,
-                g = this.a,
-                h = this.g,
-                k = {};
-            return this.d.c(a, this.c.d, f.center, f.resolution, f.rotation, c.size, c.pixelRatio, h.opacity, h.brightness, h.contrast, h.hue, h.saturation, c.skippedFeatureUids, function(a) {
-                var c = ma(a).toString();
-                if (!(c in k)) return k[c] = !0, d.call(e, a, g)
-            })
-        }
-    };
-    l.ee = function(a, c) {
-        if (null === this.d || null === this.g) return !1;
-        var d = c.viewState,
-            e = this.g;
-        return qq(this.d, a, this.c.d, d.resolution, d.rotation, e.opacity, e.brightness, e.contrast, e.hue, e.saturation, c.skippedFeatureUids)
-    };
-    l.dc = function(a, c, d, e) {
-        a = a.slice();
-        sj(c.pixelToCoordinateMatrix, a, a);
-        if (this.ee(a, c)) return d.call(e, this.a)
-    };
-    l.Rl = function() {
-        vj(this)
-    };
-    l.hf = function(a, c, d) {
-        function e(a) {
-            var c;
-            m(a.c) ? c = a.c.call(a, p) : m(f.a) && (c = (0, f.a)(a, p));
-            if (null != c) {
-                if (null != c) {
-                    var d, e, g = !1;
-                    d = 0;
-                    for (e = c.length; d < e; ++d) g = fn(t, a, c[d], en(p, q), this.Rl, this) || g;
-                    a = g
-                } else a = !1;
-                this.i = this.i || a
-            }
-        }
-        var f = this.a;
-        c = f.da();
-        yj(a.attributions, c.d);
-        zj(a, c);
-        var g = a.viewHints[0],
-            h = a.viewHints[1],
-            k = f.o,
-            n = f.n;
-        if (!this.i && !k && g || !n && h) return !0;
-        var h = a.extent,
-            k = a.viewState,
-            g = k.projection,
-            p = k.resolution,
-            q = a.pixelRatio,
-            k = f.b,
-            r = f.c,
-            n = f.get("renderOrder");
-        m(n) || (n = dn);
-        h = Od(h, r * p);
-        if (!this.i && this.J == p && this.L == k && this.H == n && Rd(this.p, h)) return !0;
-        null === this.d || a.postRenderFunctions.push(lq(this.d, d));
-        this.i = !1;
-        var t = new kq(.5 * p / q, h, f.c);
-        c.ac(h, p, g);
-        if (null === n) c.Ab(h, p, e, this);
-        else {
-            var u = [];
-            c.Ab(h, p, function(a) {
-                u.push(a)
-            }, this);
-            gb(u, n);
-            Sa(u, e, this)
-        }
-        mq(t, d);
-        this.J = p;
-        this.L = k;
-        this.H = n;
-        this.p = h;
-        this.d = t;
-        return !0
-    };
-
-    function Lq(a, c) {
-        Ij.call(this, 0, c);
-        this.b = Mf("CANVAS");
-        this.b.style.width = "100%";
-        this.b.style.height = "100%";
-        this.b.className = "ol-unselectable";
-        Pf(a, this.b, 0);
-        this.p = this.H = 0;
-        this.J = ai();
-        this.l = !0;
-        this.e = hi(this.b, {
-            antialias: !0,
-            depth: !1,
-            Ei: !0,
-            preserveDrawingBuffer: !1,
-            stencil: !0
-        });
-        this.d = new Wp(this.b, this.e);
-        x(this.b, "webglcontextlost", this.Pl, !1, this);
-        x(this.b, "webglcontextrestored", this.Ql, !1, this);
-        this.a = new vg;
-        this.n = null;
-        this.q = new Nj(ra(function(a) {
-            var c = a[1];
-            a = a[2];
-            var f = c[0] - this.n[0],
-                c = c[1] - this.n[1];
-            return 65536 * Math.log(a) + Math.sqrt(f * f + c * c) / a
-        }, this), function(a) {
-            return a[0].gb()
-        });
-        this.L = ra(function() {
-            if (!this.q.la()) {
-                Rj(this.q);
-                var a = Oj(this.q);
-                Jq(this, a[0], a[3], a[4])
-            }
-        }, this);
-        this.i = 0;
-        Mq(this)
-    }
-    w(Lq, Ij);
-
-    function Jq(a, c, d, e) {
-        var f = a.e,
-            g = c.gb();
-        if (wg(a.a, g)) a = a.a.get(g), f.bindTexture(3553, a.Qa), 9729 != a.lg && (f.texParameteri(3553, 10240, 9729), a.lg = 9729), 9729 != a.mg && (f.texParameteri(3553, 10240, 9729), a.mg = 9729);
-        else {
-            var h = f.createTexture();
-            f.bindTexture(3553, h);
-            if (0 < e) {
-                var k = a.J.canvas,
-                    n = a.J;
-                a.H !== d[0] || a.p !== d[1] ? (k.width = d[0], k.height = d[1], a.H = d[0], a.p = d[1]) : n.clearRect(0, 0, d[0], d[1]);
-                n.drawImage(c.Ma(), e, e, d[0], d[1], 0, 0, d[0], d[1]);
-                f.texImage2D(3553, 0, 6408, 6408, 5121, k)
-            } else f.texImage2D(3553, 0, 6408, 6408, 5121, c.Ma());
-            f.texParameteri(3553, 10240, 9729);
-            f.texParameteri(3553, 10241, 9729);
-            f.texParameteri(3553, 10242, 33071);
-            f.texParameteri(3553, 10243, 33071);
-            a.a.set(g, {
-                Qa: h,
-                lg: 9729,
-                mg: 9729
-            })
-        }
-    }
-    l = Lq.prototype;
-    l.Ke = function(a) {
-        return a instanceof I ? new Cq(this, a) : a instanceof L ? new Iq(this, a) : a instanceof M ? new Kq(this, a) : null
-    };
-
-    function Nq(a, c, d) {
-        var e = a.g;
-        if (bd(e, c)) {
-            var f = a.d,
-                g = d.extent,
-                h = d.size,
-                k = d.viewState,
-                n = k.resolution,
-                p = k.center,
-                q = k.rotation,
-                k = new rq(f, p, n, q, h, g),
-                g = new kq(.5 * n / d.pixelRatio, g);
-            e.dispatchEvent(new il(c, e, k, g, d, null, f));
-            mq(g, f);
-            if (!g.la()) {
-                var r = Oq;
-                c = r.opacity;
-                d = r.brightness;
-                var e = r.contrast,
-                    t = r.hue,
-                    r = r.saturation,
-                    u = {},
-                    A, z, D;
-                A = 0;
-                for (z = pm.length; A < z; ++A) D = g.a[pm[A]], m(D) && iq(D, f, p, n, q, h, c, d, e, t, r, u, void 0, !1)
-            }
-            lq(g, f)();
-            f = Ua(tb(k.b), Number);
-            gb(f);
-            h = 0;
-            for (n = f.length; h < n; ++h)
-                for (p = k.b[f[h].toString()], q = 0, c = p.length; q < c; ++q) p[q](k);
-            a.c = g
-        }
-    }
-    l.O = function() {
-        var a = this.e;
-        a.isContextLost() || this.a.forEach(function(c) {
-            null === c || a.deleteTexture(c.Qa)
-        });
-        qc(this.d);
-        Lq.S.O.call(this)
-    };
-    l.Ci = function(a, c) {
-        for (var d = this.e, e; 1024 < this.a.Tb() - this.i;) {
-            e = this.a.b.qc;
-            if (null === e)
-                if (+this.a.b.Wd == c.index) break;
-                else --this.i;
-            else d.deleteTexture(e.Qa);
-            this.a.pop()
-        }
-    };
-    l.M = function() {
-        return "webgl"
-    };
-    l.Pl = function(a) {
-        a.preventDefault();
-        this.a.clear();
-        this.i = 0;
-        pb(this.f, function(a) {
-            a.gf()
-        })
-    };
-    l.Ql = function() {
-        Mq(this);
-        this.g.render()
-    };
-
-    function Mq(a) {
-        a = a.e;
-        a.activeTexture(33984);
-        a.blendFuncSeparate(770, 771, 1, 771);
-        a.disable(2884);
-        a.disable(2929);
-        a.disable(3089);
-        a.disable(2960)
-    }
-    l.ue = function(a) {
-        var c = this.d,
-            d = this.e;
-        if (d.isContextLost()) return !1;
-        if (null === a) return this.l && (mg(this.b, !1), this.l = !1), !1;
-        this.n = a.focus;
-        this.a.set((-a.index).toString(), null);
-        ++this.i;
-        var e = [],
-            f = a.layerStatesArray,
-            g = a.viewState.resolution,
-            h, k, n, p;
-        h = 0;
-        for (k = f.length; h < k; ++h) p = f[h], oj(p, g) && "ready" == p.i && (n = Lj(this, p.layer), n.hf(a, p, c) && e.push(p));
-        f = a.size[0] * a.pixelRatio;
-        g = a.size[1] * a.pixelRatio;
-        if (this.b.width != f || this.b.height != g) this.b.width = f, this.b.height = g;
-        d.bindFramebuffer(36160, null);
-        d.clearColor(0, 0, 0, 0);
-        d.clear(16384);
-        d.enable(3042);
-        d.viewport(0, 0, this.b.width, this.b.height);
-        Nq(this, "precompose", a);
-        h = 0;
-        for (k = e.length; h < k; ++h) p = e[h], n = Lj(this, p.layer), n.Lg(a, p, c);
-        this.l || (mg(this.b, !0), this.l = !0);
-        Jj(a);
-        1024 < this.a.Tb() - this.i && a.postRenderFunctions.push(ra(this.Ci, this));
-        this.q.la() || (a.postRenderFunctions.push(this.L), a.animate = !0);
-        Nq(this, "postcompose", a);
-        Mj(this, a);
-        a.postRenderFunctions.push(Kj)
-    };
-    l.ef = function(a, c, d, e, f, g) {
-        var h;
-        if (this.e.isContextLost()) return !1;
-        var k = this.d,
-            n = c.viewState;
-        if (null !== this.c) {
-            var p = {},
-                q = Oq;
-            if (h = this.c.c(a, k, n.center, n.resolution, n.rotation, c.size, c.pixelRatio, q.opacity, q.brightness, q.contrast, q.hue, q.saturation, {}, function(a) {
-                    var c = ma(a).toString();
-                    if (!(c in p)) return p[c] = !0, d.call(e, a, null)
-                })) return h
-        }
-        k = c.layerStatesArray;
-        for (q = k.length - 1; 0 <= q; --q) {
-            h = k[q];
-            var r = h.layer;
-            if (oj(h, n.resolution) && f.call(g, r) && (h = Lj(this, r).Pa(a, c, d, e))) return h
-        }
-    };
-    l.Kg = function(a, c, d, e) {
-        var f = !1;
-        if (this.e.isContextLost()) return !1;
-        var g = this.d,
-            h = c.viewState;
-        if (null !== this.c && (f = Oq, f = qq(this.c, a, g, h.resolution, h.rotation, f.opacity, f.brightness, f.contrast, f.hue, f.saturation, {}))) return !0;
-        var g = c.layerStatesArray,
-            k;
-        for (k = g.length - 1; 0 <= k; --k) {
-            var n = g[k],
-                p = n.layer;
-            if (oj(n, h.resolution) && d.call(e, p) && (f = Lj(this, p).ee(a, c))) return !0
-        }
-        return f
-    };
-    l.Jg = function(a, c, d, e, f) {
-        if (this.e.isContextLost()) return !1;
-        var g = this.d,
-            h = c.viewState,
-            k;
-        if (null !== this.c) {
-            var n = Oq;
-            k = this.g.ka(a);
-            if (qq(this.c, k, g, h.resolution, h.rotation, n.opacity, n.brightness, n.contrast, n.hue, n.saturation, {}) && (k = d.call(e, null))) return k
-        }
-        g = c.layerStatesArray;
-        for (n = g.length - 1; 0 <= n; --n) {
-            k = g[n];
-            var p = k.layer;
-            if (oj(k, h.resolution) && f.call(e, p) && (k = Lj(this, p).dc(a, c, d, e))) return k
-        }
-    };
-    var Oq = {
-        opacity: 1,
-        brightness: 0,
-        contrast: 1,
-        hue: 0,
-        saturation: 1
-    };
-    var Pq = ["canvas", "webgl", "dom"];
-
-    function W(a) {
-        fd.call(this);
-        var c = Qq(a);
-        this.wb = m(a.loadTilesWhileAnimating) ? a.loadTilesWhileAnimating : !1;
-        this.xb = m(a.loadTilesWhileInteracting) ? a.loadTilesWhileInteracting : !1;
-        this.Nc = m(a.pixelRatio) ? a.pixelRatio : ji;
-        this.sc = c.logos;
-        this.o = new rh(this.Qn, void 0, this);
-        pc(this, this.o);
-        this.Ra = zd();
-        this.Ee = zd();
-        this.vb = 0;
-        this.c = null;
-        this.oa = Kd();
-        this.g = this.J = null;
-        this.a = Jf("DIV", "ol-viewport");
-        this.a.style.position = "relative";
-        this.a.style.overflow = "hidden";
-        this.a.style.width = "100%";
-        this.a.style.height = "100%";
-        this.a.style.msTouchAction = "none";
-        oi && (this.a.className = "ol-touch");
-        this.X = Jf("DIV", "ol-overlaycontainer");
-        this.a.appendChild(this.X);
-        this.p = Jf("DIV", "ol-overlaycontainer-stopevent");
-        x(this.p, ["click", "dblclick", "mousedown", "touchstart", "MSPointerDown", ij, Jb ? "DOMMouseScroll" : "mousewheel"], sc);
-        this.a.appendChild(this.p);
-        a = new aj(this);
-        x(a, sb(lj), this.eg, !1, this);
-        pc(this, a);
-        this.T = c.keyboardEventTarget;
-        this.n = new Lh;
-        x(this.n, "key", this.dg, !1, this);
-        pc(this, this.n);
-        a = new Th(this.a);
-        x(a, "mousewheel", this.dg, !1, this);
-        pc(this, a);
-        this.e = c.controls;
-        this.d = c.interactions;
-        this.f = c.overlays;
-        this.i = new c.Sn(this.a, this);
-        pc(this, this.i);
-        this.Ga = new Gh;
-        pc(this, this.Ga);
-        this.L = this.l = null;
-        this.H = [];
-        this.ba = [];
-        this.Fa = new Sj(ra(this.zj, this), ra(this.bl, this));
-        this.N = {};
-        x(this, hd("layergroup"), this.Qj, !1, this);
-        x(this, hd("view"), this.mk, !1, this);
-        x(this, hd("size"), this.jk, !1, this);
-        x(this, hd("target"), this.lk, !1, this);
-        this.t(c.values);
-        this.e.forEach(function(a) {
-            a.setMap(this)
-        }, this);
-        x(this.e, "add", function(a) {
-            a.element.setMap(this)
-        }, !1, this);
-        x(this.e, "remove", function(a) {
-            a.element.setMap(null)
-        }, !1, this);
-        this.d.forEach(function(a) {
-            a.setMap(this)
-        }, this);
-        x(this.d, "add", function(a) {
-            a.element.setMap(this)
-        }, !1, this);
-        x(this.d, "remove", function(a) {
-            a.element.setMap(null)
-        }, !1, this);
-        this.f.forEach(function(a) {
-            a.setMap(this)
-        }, this);
-        x(this.f, "add", function(a) {
-            a.element.setMap(this)
-        }, !1, this);
-        x(this.f, "remove", function(a) {
-            a.element.setMap(null)
-        }, !1, this)
-    }
-    w(W, fd);
-    l = W.prototype;
-    l.si = function(a) {
-        this.e.push(a)
-    };
-    l.ti = function(a) {
-        this.d.push(a)
-    };
-    l.Jf = function(a) {
-        this.Ub().Bc().push(a)
-    };
-    l.Kf = function(a) {
-        this.f.push(a)
-    };
-    l.Ha = function(a) {
-        this.render();
-        Array.prototype.push.apply(this.H, arguments)
-    };
-    l.O = function() {
-        Qf(this.a);
-        W.S.O.call(this)
-    };
-    l.Ne = function(a, c, d, e, f) {
-        if (null !== this.c) return a = this.ka(a), this.i.ef(a, this.c, c, m(d) ? d : null, m(e) ? e : Gg, m(f) ? f : null)
-    };
-    l.al = function(a, c, d, e, f) {
-        if (null !== this.c) return this.i.Jg(a, this.c, c, m(d) ? d : null, m(e) ? e : Gg, m(f) ? f : null)
-    };
-    l.ok = function(a, c, d) {
-        if (null === this.c) return !1;
-        a = this.ka(a);
-        return this.i.Kg(a, this.c, m(c) ? c : Gg, m(d) ? d : null)
-    };
-    l.Ui = function(a) {
-        return this.ka(this.Bd(a))
-    };
-    l.Bd = function(a) {
-        if (m(a.changedTouches)) {
-            var c = a.changedTouches[0];
-            a = jg(this.a);
-            return [c.clientX - a.x, c.clientY - a.y]
-        }
-        c = this.a;
-        a = jg(a);
-        c = jg(c);
-        c = new Af(a.x - c.x, a.y - c.y);
-        return [c.x, c.y]
-    };
-    l.df = function() {
-        return this.get("target")
-    };
-    l.bd = function() {
-        var a = this.df();
-        return m(a) ? Ff(a) : null
-    };
-    l.ka = function(a) {
-        var c = this.c;
-        if (null === c) return null;
-        a = a.slice();
-        return sj(c.pixelToCoordinateMatrix, a, a)
-    };
-    l.Si = function() {
-        return this.e
-    };
-    l.oj = function() {
-        return this.f
-    };
-    l.bj = function() {
-        return this.d
-    };
-    l.Ub = function() {
-        return this.get("layergroup")
-    };
-    l.vg = function() {
-        return this.Ub().Bc()
-    };
-    l.ta = function(a) {
-        var c = this.c;
-        if (null === c) return null;
-        a = a.slice(0, 2);
-        return sj(c.coordinateToPixelMatrix, a, a)
-    };
-    l.xa = function() {
-        return this.get("size")
-    };
-    l.R = function() {
-        return this.get("view")
-    };
-    l.Bj = function() {
-        return this.a
-    };
-    l.zj = function(a, c, d, e) {
-        var f = this.c;
-        if (!(null !== f && c in f.wantedTiles && f.wantedTiles[c][ef(a.b)])) return Infinity;
-        a = d[0] - f.focus[0];
-        d = d[1] - f.focus[1];
-        return 65536 * Math.log(e) + Math.sqrt(a * a + d * d) / e
-    };
-    l.dg = function(a, c) {
-        var d = new Zi(c || a.type, this, a);
-        this.eg(d)
-    };
-    l.eg = function(a) {
-        if (null !== this.c) {
-            this.L = a.coordinate;
-            a.frameState = this.c;
-            var c = this.d.a,
-                d;
-            if (!1 !== this.dispatchEvent(a))
-                for (d = c.length - 1; 0 <= d; d--) {
-                    var e = c[d];
-                    if (e.c() && !e.handleEvent(a)) break
-                }
-        }
-    };
-    l.gk = function() {
-        var a = this.c,
-            c = this.Fa;
-        if (!c.la()) {
-            var d = 16,
-                e = d,
-                f = 0;
-            null !== a && (f = a.viewHints, f[0] && (d = this.wb ? 8 : 0, e = 2), f[1] && (d = this.xb ? 8 : 0, e = 2), f = rb(a.wantedTiles));
-            d *= f;
-            e *= f;
-            if (c.d < d) {
-                Rj(c);
-                d = Math.min(d - c.d, e, c.Tb());
-                for (e = 0; e < d; ++e) f = Oj(c)[0], x(f, "change", c.f, !1, c), f.load();
-                c.d += d
-            }
-        }
-        c = this.ba;
-        d = 0;
-        for (e = c.length; d < e; ++d) c[d](this, a);
-        c.length = 0
-    };
-    l.jk = function() {
-        this.render()
-    };
-    l.lk = function() {
-        var a = this.bd();
-        Sh(this.n);
-        null === a ? (Qf(this.a), null !== this.l && (Wc(this.l), this.l = null)) : (a.appendChild(this.a), Mh(this.n, null === this.T ? a : this.T), null === this.l && (this.l = x(this.Ga, "resize", this.Kc, !1, this)));
-        this.Kc()
-    };
-    l.bl = function() {
-        this.render()
-    };
-    l.nk = function() {
-        this.render()
-    };
-    l.mk = function() {
-        null !== this.J && (Wc(this.J), this.J = null);
-        var a = this.R();
-        null !== a && (this.J = x(a, "propertychange", this.nk, !1, this));
-        this.render()
-    };
-    l.Rj = function() {
-        this.render()
-    };
-    l.Sj = function() {
-        this.render()
-    };
-    l.Qj = function() {
-        if (null !== this.g) {
-            for (var a = this.g.length, c = 0; c < a; ++c) Wc(this.g[c]);
-            this.g = null
-        }
-        a = this.Ub();
-        null != a && (this.g = [x(a, "propertychange", this.Sj, !1, this), x(a, "change", this.Rj, !1, this)]);
-        this.render()
-    };
-    l.Rn = function() {
-        var a = this.o;
-        sh(a);
-        a.Pf()
-    };
-    l.render = function() {
-        null != this.o.$ || this.o.start()
-    };
-    l.Ln = function(a) {
-        if (m(this.e.remove(a))) return a
-    };
-    l.Mn = function(a) {
-        var c;
-        m(this.d.remove(a)) && (c = a);
-        return c
-    };
-    l.Nn = function(a) {
-        return this.Ub().Bc().remove(a)
-    };
-    l.On = function(a) {
-        if (m(this.f.remove(a))) return a
-    };
-    l.Qn = function(a) {
-        var c, d, e, f = this.xa(),
-            g = this.R(),
-            h = null;
-        if (m(f) && 0 < f[0] && 0 < f[1] && null !== g && Te(g)) {
-            var h = g.c.slice(),
-                k = this.Ub().Ue(),
-                n = {};
-            c = 0;
-            for (d = k.length; c < d; ++c) n[ma(k[c].layer)] = k[c];
-            e = Se(g);
-            h = {
-                animate: !1,
-                attributions: {},
-                coordinateToPixelMatrix: this.Ra,
-                extent: null,
-                focus: null === this.L ? e.center : this.L,
-                index: this.vb++,
-                layerStates: n,
-                layerStatesArray: k,
-                logos: Db(this.sc),
-                pixelRatio: this.Nc,
-                pixelToCoordinateMatrix: this.Ee,
-                postRenderFunctions: [],
-                size: f,
-                skippedFeatureUids: this.N,
-                tileQueue: this.Fa,
-                time: a,
-                usedTiles: {},
-                viewState: e,
-                viewHints: h,
-                wantedTiles: {}
-            }
-        }
-        if (null !== h) {
-            a = this.H;
-            c = f = 0;
-            for (d = a.length; c < d; ++c) g = a[c], g(this, h) && (a[f++] = g);
-            a.length = f;
-            h.extent = ee(e.center, e.resolution, e.rotation, h.size)
-        }
-        this.c = h;
-        this.i.ue(h);
-        null !== h && (h.animate && this.render(), Array.prototype.push.apply(this.ba, h.postRenderFunctions), 0 !== this.H.length || h.viewHints[0] || h.viewHints[1] || Vd(h.extent, this.oa) || (this.dispatchEvent(new tg("moveend", this, h)), Pd(h.extent, this.oa)));
-        this.dispatchEvent(new tg("postrender", this, h));
-        wh(this.gk, this)
-    };
-    l.zh = function(a) {
-        this.set("layergroup", a)
-    };
-    l.vf = function(a) {
-        this.set("size", a)
-    };
-    l.cl = function(a) {
-        this.set("target", a)
-    };
-    l.jo = function(a) {
-        this.set("view", a)
-    };
-    l.Eh = function(a) {
-        a = ma(a).toString();
-        this.N[a] = !0;
-        this.render()
-    };
-    l.Kc = function() {
-        var a = this.bd();
-        if (null === a) this.vf(void 0);
-        else {
-            var c = Ef(a),
-                d = Ib && a.currentStyle;
-            d && Uf(Cf(c)) && "auto" != d.width && "auto" != d.height && !d.boxSizing ? (c = ng(a, d.width, "width", "pixelWidth"), a = ng(a, d.height, "height", "pixelHeight"), a = new Bf(c, a)) : (d = new Bf(a.offsetWidth, a.offsetHeight), c = pg(a, "padding"), a = sg(a), a = new Bf(d.width - a.left - c.left - c.right - a.right, d.height - a.top - c.top - c.bottom - a.bottom));
-            this.vf([a.width, a.height])
-        }
-    };
-    l.Ih = function(a) {
-        a = ma(a).toString();
-        delete this.N[a];
-        this.render()
-    };
-
-    function Qq(a) {
-        var c = null;
-        m(a.keyboardEventTarget) && (c = ia(a.keyboardEventTarget) ? document.getElementById(a.keyboardEventTarget) : a.keyboardEventTarget);
-        var d = {},
-            e = {};
-        if (!m(a.logo) || "boolean" == typeof a.logo && a.logo) e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"] = "http://openlayers.org/";
-        else {
-            var f = a.logo;
-            ia(f) ? e[f] = "" : la(f) && (e[f.src] = f.href)
-        }
-        f = a.layers instanceof G ? a.layers : new G({
-            layers: a.layers
-        });
-        d.layergroup = f;
-        d.target = a.target;
-        d.view = m(a.view) ? a.view : new Ne;
-        var f = Ij,
-            g;
-        m(a.renderer) ? ga(a.renderer) ? g = a.renderer : ia(a.renderer) && (g = [a.renderer]) : g = Pq;
-        var h, k;
-        h = 0;
-        for (k = g.length; h < k; ++h) {
-            var n = g[h];
-            if ("canvas" == n) {
-                if (li) {
-                    f = Cp;
-                    break
-                }
-            } else if ("dom" == n) {
-                f = Kp;
-                break
-            } else if ("webgl" == n && ii) {
-                f = Lq;
-                break
-            }
-        }
-        var p;
-        m(a.controls) ? p = ga(a.controls) ? new of(a.controls.slice()) : a.controls : p = ih();
-        var q;
-        m(a.interactions) ? q = ga(a.interactions) ? new of(a.interactions.slice()) : a.interactions : q = Vl();
-        a = m(a.overlays) ? ga(a.overlays) ? new of(a.overlays.slice()) : a.overlays : new of;
-        return {
-            controls: p,
-            interactions: q,
-            keyboardEventTarget: c,
-            logos: e,
-            overlays: a,
-            Sn: f,
-            values: d
-        }
-    }
-    bm();
-
-    function Rq(a) {
-        fd.call(this);
-        this.g = m(a.insertFirst) ? a.insertFirst : !0;
-        this.i = m(a.stopEvent) ? a.stopEvent : !0;
-        this.Z = Jf("DIV", {
-            "class": "ol-overlay-container"
-        });
-        this.Z.style.position = "absolute";
-        this.f = m(a.autoPan) ? a.autoPan : !1;
-        this.d = m(a.autoPanAnimation) ? a.autoPanAnimation : {};
-        this.e = m(a.autoPanMargin) ? a.autoPanMargin : 20;
-        this.a = {
-            ud: "",
-            Xd: "",
-            ve: "",
-            we: "",
-            visible: !0
-        };
-        this.c = null;
-        x(this, hd("element"), this.Kj, !1, this);
-        x(this, hd("map"), this.Yj, !1, this);
-        x(this, hd("offset"), this.ck, !1, this);
-        x(this, hd("position"), this.ek, !1, this);
-        x(this, hd("positioning"), this.fk, !1, this);
-        m(a.element) && this.wh(a.element);
-        this.Bh(m(a.offset) ? a.offset : [0, 0]);
-        this.Ch(m(a.positioning) ? a.positioning : "top-left");
-        m(a.position) && this.uf(a.position)
-    }
-    w(Rq, fd);
-    l = Rq.prototype;
-    l.$d = function() {
-        return this.get("element")
-    };
-    l.ae = function() {
-        return this.get("map")
-    };
-    l.Yf = function() {
-        return this.get("offset")
-    };
-    l.wg = function() {
-        return this.get("position")
-    };
-    l.ag = function() {
-        return this.get("positioning")
-    };
-    l.Kj = function() {
-        Of(this.Z);
-        var a = this.$d();
-        null != a && Nf(this.Z, a)
-    };
-    l.Yj = function() {
-        null !== this.c && (Qf(this.Z), Wc(this.c), this.c = null);
-        var a = this.ae();
-        null != a && (this.c = x(a, "postrender", this.render, !1, this), Sq(this), a = this.i ? a.p : a.X, this.g ? Pf(a, this.Z, 0) : Nf(a, this.Z))
-    };
-    l.render = function() {
-        Sq(this)
-    };
-    l.ck = function() {
-        Sq(this)
-    };
-    l.ek = function() {
-        Sq(this);
-        if (m(this.get("position")) && this.f) {
-            var a = this.ae();
-            if (m(a) && !fa(a.bd())) {
-                var c = Tq(a.bd(), a.xa()),
-                    d = this.$d(),
-                    e = d.offsetWidth,
-                    f = d.currentStyle || window.getComputedStyle(d),
-                    e = e + (parseInt(f.marginLeft, 10) + parseInt(f.marginRight, 10)),
-                    f = d.offsetHeight,
-                    g = d.currentStyle || window.getComputedStyle(d),
-                    f = f + (parseInt(g.marginTop, 10) + parseInt(g.marginBottom, 10)),
-                    h = Tq(d, [e, f]),
-                    d = this.e;
-                Rd(c, h) || (e = h[0] - c[0], f = c[2] - h[2], g = h[1] - c[1], h = c[3] - h[3], c = [0, 0], 0 > e ? c[0] = e - d : 0 > f && (c[0] = Math.abs(f) + d), 0 > g ? c[1] = g - d : 0 > h && (c[1] = Math.abs(h) + d), 0 === c[0] && 0 === c[1]) || (d = a.R().Ca(), e = a.ta(d), c = [e[0] + c[0], e[1] + c[1]], null !== this.d && (this.d.source = d, a.Ha(Ze(this.d))), a.R().Na(a.ka(c)))
-            }
-        }
-    };
-    l.fk = function() {
-        Sq(this)
-    };
-    l.wh = function(a) {
-        this.set("element", a)
-    };
-    l.setMap = function(a) {
-        this.set("map", a)
-    };
-    l.Bh = function(a) {
-        this.set("offset", a)
-    };
-    l.uf = function(a) {
-        this.set("position", a)
-    };
-
-    function Tq(a, c) {
-        var d = Ef(a);
-        fg(a, "position");
-        var e = new Af(0, 0),
-            f;
-        f = d ? Ef(d) : document;
-        f = !Ib || Ib && 9 <= Tb || Uf(Cf(f)) ? f.documentElement : f.body;
-        a != f && (f = ig(a), d = Wf(Cf(d)), e.x = f.left + d.x, e.y = f.top + d.y);
-        return [e.x, e.y, e.x + c[0], e.y + c[1]]
-    }
-    l.Ch = function(a) {
-        this.set("positioning", a)
-    };
-
-    function Sq(a) {
-        var c = a.ae(),
-            d = a.wg();
-        if (m(c) && null !== c.c && m(d)) {
-            var d = c.ta(d),
-                e = c.xa(),
-                c = a.Z.style,
-                f = a.Yf(),
-                g = a.ag(),
-                h = f[0],
-                f = f[1];
-            if ("bottom-right" == g || "center-right" == g || "top-right" == g) "" !== a.a.Xd && (a.a.Xd = c.left = ""), h = Math.round(e[0] - d[0] - h) + "px", a.a.ve != h && (a.a.ve = c.right = h);
-            else {
-                "" !== a.a.ve && (a.a.ve = c.right = "");
-                if ("bottom-center" == g || "center-center" == g || "top-center" == g) h -= kg(a.Z).width / 2;
-                h = Math.round(d[0] + h) + "px";
-                a.a.Xd != h && (a.a.Xd = c.left = h)
-            }
-            if ("bottom-left" == g || "bottom-center" == g || "bottom-right" == g) "" !== a.a.we && (a.a.we = c.top = ""), d = Math.round(e[1] - d[1] - f) + "px", a.a.ud != d && (a.a.ud = c.bottom = d);
-            else {
-                "" !== a.a.ud && (a.a.ud = c.bottom = "");
-                if ("center-left" == g || "center-center" == g || "center-right" == g) f -= kg(a.Z).height / 2;
-                d = Math.round(d[1] + f) + "px";
-                a.a.we != d && (a.a.we = c.top = d)
-            }
-            a.a.visible || (mg(a.Z, !0), a.a.visible = !0)
-        } else a.a.visible && (mg(a.Z, !1), a.a.visible = !1)
-    };
-
-    function Uq(a) {
-        a = m(a) ? a : {};
-        this.f = m(a.collapsed) ? a.collapsed : !0;
-        this.g = m(a.collapsible) ? a.collapsible : !0;
-        this.g || (this.f = !1);
-        var c = m(a.className) ? a.className : "ol-overviewmap",
-            d = m(a.tipLabel) ? a.tipLabel : "Overview map",
-            e = m(a.collapseLabel) ? a.collapseLabel : "\u00ab";
-        this.o = ia(e) ? Jf("SPAN", {}, e) : e;
-        e = m(a.label) ? a.label : "\u00bb";
-        this.n = ia(e) ? Jf("SPAN", {}, e) : e;
-        d = Jf("BUTTON", {
-            type: "button",
-            title: d
-        }, this.g && !this.f ? this.o : this.n);
-        x(d, "click", this.ml, !1, this);
-        x(d, ["mouseout", uc], function() {
-            this.blur()
-        }, !1);
-        var e = Jf("DIV", "ol-overviewmap-map"),
-            f = this.d = new W({
-                controls: new of,
-                interactions: new of,
-                target: e
-            });
-        m(a.layers) && a.layers.forEach(function(a) {
-            f.Jf(a)
-        }, this);
-        var g = Jf("DIV", "ol-overviewmap-box");
-        this.i = new Rq({
-            position: [0, 0],
-            positioning: "bottom-left",
-            element: g
-        });
-        this.d.Kf(this.i);
-        c = Jf("DIV", c + " ol-unselectable ol-control" + (this.f && this.g ? " ol-collapsed" : "") + (this.g ? "" : " ol-uncollapsible"), e, d);
-        ug.call(this, {
-            element: c,
-            render: m(a.render) ? a.render : Vq,
-            target: a.target
-        })
-    }
-    w(Uq, ug);
-    l = Uq.prototype;
-    l.setMap = function(a) {
-        var c = this.a;
-        a !== c && (c && (c = c.R()) && Vc(c, hd("rotation"), this.Rd, !1, this), Uq.S.setMap.call(this, a), a && (this.l.push(x(a, "propertychange", this.Zj, !1, this)), 0 === this.d.vg().Ib() && this.d.zh(a.Ub()), a = a.R())) && (x(a, hd("rotation"), this.Rd, !1, this), Te(a) && (this.d.Kc(), Wq(this)))
-    };
-    l.Zj = function(a) {
-        "view" === a.key && ((a = a.oldValue) && Vc(a, hd("rotation"), this.Rd, !1, this), a = this.a.R(), x(a, hd("rotation"), this.Rd, !1, this))
-    };
-    l.Rd = function() {
-        this.d.R().be(this.a.R().Da())
-    };
-
-    function Vq() {
-        var a = this.a,
-            c = this.d;
-        if (null !== a.c && null !== c.c) {
-            var d = a.xa(),
-                a = a.R().Pc(d),
-                e = c.xa(),
-                d = c.R().Pc(e),
-                f = c.ta(be(a)),
-                c = c.ta($d(a)),
-                c = new Bf(Math.abs(f[0] - c[0]), Math.abs(f[1] - c[1])),
-                f = e[0],
-                e = e[1];
-            c.width < .1 * f || c.height < .1 * e || c.width > .75 * f || c.height > .75 * e ? Wq(this) : Rd(d, a) || (a = this.d, d = this.a.R(), a.R().Na(d.Ca()))
-        }
-        Xq(this)
-    }
-
-    function Wq(a) {
-        var c = a.a;
-        a = a.d;
-        var d = c.xa(),
-            c = c.R().Pc(d),
-            d = a.xa();
-        a = a.R();
-        var e = Math.log(7.5) / Math.LN2;
-        ke(c, 1 / (.1 * Math.pow(2, e / 2)));
-        a.Me(c, d)
-    }
-
-    function Xq(a) {
-        var c = a.a,
-            d = a.d;
-        if (null !== c.c && null !== d.c) {
-            var e = c.xa(),
-                f = c.R(),
-                g = d.R();
-            d.xa();
-            var c = f.Da(),
-                h = a.i,
-                d = a.i.$d(),
-                f = f.Pc(e),
-                e = g.ya(),
-                g = Zd(f),
-                f = ae(f),
-                k;
-            a = a.a.R().Ca();
-            m(a) && (k = [g[0] - a[0], g[1] - a[1]], rd(k, c), md(k, a));
-            h.uf(k);
-            null != d && (k = new Bf(Math.abs((g[0] - f[0]) / e), Math.abs((f[1] - g[1]) / e)), c = Uf(Cf(Ef(d))), !Ib || Rb("10") || c && Rb("8") ? (d = d.style, Jb ? d.MozBoxSizing = "border-box" : Kb ? d.WebkitBoxSizing = "border-box" : d.boxSizing = "border-box", d.width = Math.max(k.width, 0) + "px", d.height = Math.max(k.height, 0) + "px") : (a = d.style, c ? (c = pg(d, "padding"), d = sg(d), a.pixelWidth = k.width - d.left - c.left - c.right - d.right, a.pixelHeight = k.height - d.top - c.top - c.bottom - d.bottom) : (a.pixelWidth = k.width, a.pixelHeight = k.height)))
-        }
-    }
-    l.ml = function(a) {
-        a.preventDefault();
-        Yq(this)
-    };
-
-    function Yq(a) {
-        ag(a.element, "ol-collapsed");
-        a.f ? Rf(a.o, a.n) : Rf(a.n, a.o);
-        a.f = !a.f;
-        var c = a.d;
-        a.f || null !== c.c || (c.Kc(), Wq(a), Uc(c, "postrender", function() {
-            Xq(this)
-        }, !1, a))
-    }
-    l.ll = function() {
-        return this.g
-    };
-    l.ol = function(a) {
-        this.g !== a && (this.g = a, ag(this.element, "ol-uncollapsible"), !a && this.f && Yq(this))
-    };
-    l.nl = function(a) {
-        this.g && this.f !== a && Yq(this)
-    };
-    l.kl = function() {
-        return this.f
-    };
-
-    function Zq(a) {
-        a = m(a) ? a : {};
-        var c = m(a.className) ? a.className : "ol-scale-line";
-        this.g = Jf("DIV", c + "-inner");
-        this.Z = Jf("DIV", c + " ol-unselectable", this.g);
-        this.o = null;
-        this.i = m(a.minWidth) ? a.minWidth : 64;
-        this.d = !1;
-        this.H = void 0;
-        this.n = "";
-        this.f = null;
-        ug.call(this, {
-            element: this.Z,
-            render: m(a.render) ? a.render : $q,
-            target: a.target
-        });
-        x(this, hd("units"), this.N, !1, this);
-        this.J(a.units || "metric")
-    }
-    w(Zq, ug);
-    var ar = [1, 2, 5];
-    Zq.prototype.p = function() {
-        return this.get("units")
-    };
-
-    function $q(a) {
-        a = a.frameState;
-        null === a ? this.o = null : this.o = a.viewState;
-        br(this)
-    }
-    Zq.prototype.N = function() {
-        br(this)
-    };
-    Zq.prototype.J = function(a) {
-        this.set("units", a)
-    };
-
-    function br(a) {
-        var c = a.o;
-        if (null === c) a.d && (mg(a.Z, !1), a.d = !1);
-        else {
-            var d = c.center,
-                e = c.projection,
-                c = e.getPointResolution(c.resolution, d),
-                f = e.a,
-                g = a.p();
-            "degrees" != f || "metric" != g && "imperial" != g && "us" != g && "nautical" != g ? "degrees" != f && "degrees" == g ? (null === a.f && (a.f = ve(e, re("EPSG:4326"))), d = Math.cos(Yb(a.f(d)[1])), e = ne.radius, e /= oe[f], c *= 180 / (Math.PI * d * e)) : a.f = null : (a.f = null, d = Math.cos(Yb(d[1])), c *= Math.PI * d * ne.radius / 180);
-            d = a.i * c;
-            f = "";
-            "degrees" == g ? d < 1 / 60 ? (f = "\u2033", c *= 3600) : 1 > d ? (f = "\u2032", c *= 60) : f = "\u00b0" : "imperial" == g ? .9144 > d ? (f = "in", c /= .0254) : 1609.344 > d ? (f = "ft", c /= .3048) : (f = "mi", c /= 1609.344) : "nautical" == g ? (c /= 1852, f = "nm") : "metric" == g ? 1 > d ? (f = "mm", c *= 1E3) : 1E3 > d ? f = "m" : (f = "km", c /= 1E3) : "us" == g && (.9144 > d ? (f = "in", c *= 39.37) : 1609.344 > d ? (f = "ft", c /= .30480061) : (f = "mi", c /= 1609.3472));
-            for (d = 3 * Math.floor(Math.log(a.i * c) / Math.log(10));;) {
-                e = ar[d % 3] * Math.pow(10, Math.floor(d / 3));
-                g = Math.round(e / c);
-                if (isNaN(g)) {
-                    mg(a.Z, !1);
-                    a.d = !1;
-                    return
-                }
-                if (g >= a.i) break;
-                ++d
-            }
-            c = e + " " + f;
-            a.n != c && (a.g.innerHTML = c, a.n = c);
-            a.H != g && (a.g.style.width = g + "px", a.H = g);
-            a.d || (mg(a.Z, !0), a.d = !0)
-        }
-    };
-
-    function cr(a) {
-        mc.call(this);
-        this.a = a;
-        this.b = {}
-    }
-    w(cr, mc);
-    var dr = [];
-    cr.prototype.Ka = function(a, c, d, e) {
-        ga(c) || (c && (dr[0] = c.toString()), c = dr);
-        for (var f = 0; f < c.length; f++) {
-            var g = x(a, c[f], d || this.handleEvent, e || !1, this.a || this);
-            if (!g) break;
-            this.b[g.key] = g
-        }
-        return this
-    };
-    cr.prototype.wf = function(a, c, d, e, f) {
-        if (ga(c))
-            for (var g = 0; g < c.length; g++) this.wf(a, c[g], d, e, f);
-        else d = d || this.handleEvent, f = f || this.a || this, d = Oc(d), e = !!e, c = Bc(a) ? Jc(a.ab, String(c), d, e, f) : a ? (a = Qc(a)) ? Jc(a, c, d, e, f) : null : null, c && (Wc(c), delete this.b[c.key]);
-        return this
-    };
-
-    function er(a) {
-        pb(a.b, Wc);
-        a.b = {}
-    }
-    cr.prototype.O = function() {
-        cr.S.O.call(this);
-        er(this)
-    };
-    cr.prototype.handleEvent = function() {
-        throw Error("EventHandler.handleEvent not implemented");
-    };
-
-    function fr(a, c, d) {
-        $c.call(this);
-        this.target = a;
-        this.handle = c || a;
-        this.b = d || new cg(NaN, NaN, NaN, NaN);
-        this.c = Ef(a);
-        this.a = new cr(this);
-        pc(this, this.a);
-        x(this.handle, ["touchstart", "mousedown"], this.cg, !1, this)
-    }
-    w(fr, $c);
-    var gr = Ib || Jb && Rb("1.9.3");
-    l = fr.prototype;
-    l.clientX = 0;
-    l.clientY = 0;
-    l.screenX = 0;
-    l.screenY = 0;
-    l.Fh = 0;
-    l.Gh = 0;
-    l.yc = 0;
-    l.zc = 0;
-    l.Zb = !1;
-    l.O = function() {
-        fr.S.O.call(this);
-        Vc(this.handle, ["touchstart", "mousedown"], this.cg, !1, this);
-        er(this.a);
-        gr && this.c.releaseCapture();
-        this.handle = this.target = null
-    };
-    l.cg = function(a) {
-        var c = "mousedown" == a.type;
-        if (this.Zb || c && !zc(a)) this.dispatchEvent("earlycancel");
-        else if (hr(a), this.dispatchEvent(new ir("start", this, a.clientX, a.clientY))) {
-            this.Zb = !0;
-            a.preventDefault();
-            var c = this.c,
-                d = c.documentElement,
-                e = !gr;
-            this.a.Ka(c, ["touchmove", "mousemove"], this.bk, e);
-            this.a.Ka(c, ["touchend", "mouseup"], this.Od, e);
-            gr ? (d.setCapture(!1), this.a.Ka(d, "losecapture", this.Od)) : this.a.Ka(c ? c.parentWindow || c.defaultView : window, "blur", this.Od);
-            this.e && this.a.Ka(this.e, "scroll", this.en, e);
-            this.clientX = this.Fh = a.clientX;
-            this.clientY = this.Gh = a.clientY;
-            this.screenX = a.screenX;
-            this.screenY = a.screenY;
-            this.yc = this.target.offsetLeft;
-            this.zc = this.target.offsetTop;
-            this.d = Wf(Cf(this.c));
-            ua()
-        }
-    };
-    l.Od = function(a) {
-        er(this.a);
-        gr && this.c.releaseCapture();
-        if (this.Zb) {
-            hr(a);
-            this.Zb = !1;
-            var c = jr(this, this.yc),
-                d = kr(this, this.zc);
-            this.dispatchEvent(new ir("end", this, a.clientX, a.clientY, 0, c, d))
-        } else this.dispatchEvent("earlycancel")
-    };
-
-    function hr(a) {
-        var c = a.type;
-        "touchstart" == c || "touchmove" == c ? xc(a, a.b.targetTouches[0], a.c) : "touchend" != c && "touchcancel" != c || xc(a, a.b.changedTouches[0], a.c)
-    }
-    l.bk = function(a) {
-        hr(a);
-        var c = 1 * (a.clientX - this.clientX),
-            d = a.clientY - this.clientY;
-        this.clientX = a.clientX;
-        this.clientY = a.clientY;
-        this.screenX = a.screenX;
-        this.screenY = a.screenY;
-        if (!this.Zb) {
-            var e = this.Fh - this.clientX,
-                f = this.Gh - this.clientY;
-            if (0 < e * e + f * f)
-                if (this.dispatchEvent(new ir("start", this, a.clientX, a.clientY))) this.Zb = !0;
-                else {
-                    this.U || this.Od(a);
-                    return
-                }
-        }
-        d = lr(this, c, d);
-        c = d.x;
-        d = d.y;
-        this.Zb && this.dispatchEvent(new ir("beforedrag", this, a.clientX, a.clientY, 0, c, d)) && (mr(this, a, c, d), a.preventDefault())
-    };
-
-    function lr(a, c, d) {
-        var e = Wf(Cf(a.c));
-        c += e.x - a.d.x;
-        d += e.y - a.d.y;
-        a.d = e;
-        a.yc += c;
-        a.zc += d;
-        c = jr(a, a.yc);
-        a = kr(a, a.zc);
-        return new Af(c, a)
-    }
-    l.en = function(a) {
-        var c = lr(this, 0, 0);
-        a.clientX = this.clientX;
-        a.clientY = this.clientY;
-        mr(this, a, c.x, c.y)
-    };
-
-    function mr(a, c, d, e) {
-        a.target.style.left = d + "px";
-        a.target.style.top = e + "px";
-        a.dispatchEvent(new ir("drag", a, c.clientX, c.clientY, 0, d, e))
-    }
-
-    function jr(a, c) {
-        var d = a.b,
-            e = isNaN(d.left) ? null : d.left,
-            d = isNaN(d.width) ? 0 : d.width;
-        return Math.min(null != e ? e + d : Infinity, Math.max(null != e ? e : -Infinity, c))
-    }
-
-    function kr(a, c) {
-        var d = a.b,
-            e = isNaN(d.top) ? null : d.top,
-            d = isNaN(d.height) ? 0 : d.height;
-        return Math.min(null != e ? e + d : Infinity, Math.max(null != e ? e : -Infinity, c))
-    }
-
-    function ir(a, c, d, e, f, g, h) {
-        rc.call(this, a);
-        this.clientX = d;
-        this.clientY = e;
-        this.left = m(g) ? g : c.yc;
-        this.top = m(h) ? h : c.zc
-    }
-    w(ir, rc);
-
-    function nr(a) {
-        a = m(a) ? a : {};
-        this.f = void 0;
-        this.g = or;
-        this.i = null;
-        this.n = !1;
-        this.o = m(a.duration) ? a.duration : 200;
-        var c = m(a.className) ? a.className : "ol-zoomslider",
-            d = Jf("DIV", [c + "-thumb", "ol-unselectable"]),
-            c = Jf("DIV", [c, "ol-unselectable", "ol-control"], d);
-        this.d = new fr(d);
-        pc(this, this.d);
-        x(this.d, "start", this.Jj, !1, this);
-        x(this.d, "drag", this.Hj, !1, this);
-        x(this.d, "end", this.Ij, !1, this);
-        x(c, "click", this.Gj, !1, this);
-        x(d, "click", sc);
-        ug.call(this, {
-            element: c,
-            render: m(a.render) ? a.render : pr
-        })
-    }
-    w(nr, ug);
-    var or = 0;
-    l = nr.prototype;
-    l.setMap = function(a) {
-        nr.S.setMap.call(this, a);
-        null === a || a.render()
-    };
-
-    function pr(a) {
-        if (null !== a.frameState) {
-            if (!this.n) {
-                var c = this.element,
-                    d = kg(c),
-                    e = Sf(c),
-                    c = pg(e, "margin"),
-                    f = new Bf(e.offsetWidth, e.offsetHeight),
-                    e = f.width + c.right + c.left,
-                    c = f.height + c.top + c.bottom;
-                this.i = [e, c];
-                e = d.width - e;
-                c = d.height - c;
-                d.width > d.height ? (this.g = 1, d = new cg(0, 0, e, 0)) : (this.g = or, d = new cg(0, 0, 0, c));
-                this.d.b = d || new cg(NaN, NaN, NaN, NaN);
-                this.n = !0
-            }
-            a = a.frameState.viewState.resolution;
-            a !== this.f && (this.f = a, a = 1 - Re(this.a.R())(a), d = this.d, c = Sf(this.element), 1 == this.g ? gg(c, d.b.left + d.b.width * a) : gg(c, d.b.left, d.b.top + d.b.height * a))
-        }
-    }
-    l.Gj = function(a) {
-        var c = this.a,
-            d = c.R(),
-            e = d.ya();
-        c.Ha(af({
-            resolution: e,
-            duration: this.o,
-            easing: Ve
-        }));
-        a = qr(this, a.offsetX - this.i[0] / 2, a.offsetY - this.i[1] / 2);
-        a = rr(this, a);
-        d.tb(d.constrainResolution(a))
-    };
-    l.Jj = function() {
-        Ue(this.a.R(), 1)
-    };
-    l.Hj = function(a) {
-        a = qr(this, a.left, a.top);
-        this.f = rr(this, a);
-        this.a.R().tb(this.f)
-    };
-    l.Ij = function() {
-        var a = this.a,
-            c = a.R();
-        Ue(c, -1);
-        a.Ha(af({
-            resolution: this.f,
-            duration: this.o,
-            easing: Ve
-        }));
-        a = c.constrainResolution(this.f);
-        c.tb(a)
-    };
-
-    function qr(a, c, d) {
-        var e = a.d.b;
-        return Vb(1 === a.g ? (c - e.left) / e.width : (d - e.top) / e.height, 0, 1)
-    }
-
-    function rr(a, c) {
-        return Qe(a.a.R())(1 - c)
-    };
-
-    function sr(a) {
-        a = m(a) ? a : {};
-        this.d = m(a.extent) ? a.extent : null;
-        var c = m(a.className) ? a.className : "ol-zoom-extent",
-            d = Jf("BUTTON", {
-                type: "button",
-                title: m(a.tipLabel) ? a.tipLabel : "Fit to extent"
-            }, m(a.label) ? a.label : "E");
-        x(d, "click", this.f, !1, this);
-        x(d, ["mouseout", uc], function() {
-            this.blur()
-        }, !1);
-        c = Jf("DIV", c + " ol-unselectable ol-control", d);
-        ug.call(this, {
-            element: c,
-            target: a.target
-        })
-    }
-    w(sr, ug);
-    sr.prototype.f = function(a) {
-        a.preventDefault();
-        var c = this.a;
-        a = c.R();
-        var d = null === this.d ? a.e.G() : this.d,
-            c = c.xa();
-        a.Me(d, c)
-    };
-
-    function tr(a) {
-        fd.call(this);
-        a = m(a) ? a : {};
-        this.a = null;
-        x(this, hd("tracking"), this.Jk, !1, this);
-        this.bf(m(a.tracking) ? a.tracking : !1)
-    }
-    w(tr, fd);
-    l = tr.prototype;
-    l.O = function() {
-        this.bf(!1);
-        tr.S.O.call(this)
-    };
-    l.fn = function(a) {
-        a = a.b;
-        if (null != a.alpha) {
-            var c = Yb(a.alpha);
-            this.set("alpha", c);
-            "boolean" == typeof a.absolute && a.absolute ? this.set("heading", c) : null != a.webkitCompassHeading && null != a.webkitCompassAccuracy && -1 != a.webkitCompassAccuracy && this.set("heading", Yb(a.webkitCompassHeading))
-        }
-        null != a.beta && this.set("beta", Yb(a.beta));
-        null != a.gamma && this.set("gamma", Yb(a.gamma));
-        this.k()
-    };
-    l.Mi = function() {
-        return this.get("alpha")
-    };
-    l.Pi = function() {
-        return this.get("beta")
-    };
-    l.Yi = function() {
-        return this.get("gamma")
-    };
-    l.Ik = function() {
-        return this.get("heading")
-    };
-    l.og = function() {
-        return this.get("tracking")
-    };
-    l.Jk = function() {
-        if (mi) {
-            var a = this.og();
-            a && null === this.a ? this.a = x(ba, "deviceorientation", this.fn, !1, this) : a || null === this.a || (Wc(this.a), this.a = null)
-        }
-    };
-    l.bf = function(a) {
-        this.set("tracking", a)
-    };
-
-    function X(a) {
-        fd.call(this);
-        this.$ = void 0;
-        this.a = "geometry";
-        this.e = null;
-        this.c = void 0;
-        this.d = null;
-        x(this, hd(this.a), this.Pd, !1, this);
-        m(a) && (a instanceof uk || null === a ? this.La(a) : this.t(a))
-    }
-    w(X, fd);
-    l = X.prototype;
-    l.clone = function() {
-        var a = new X(this.D());
-        a.Ic(this.a);
-        var c = this.Q();
-        null != c && a.La(c.clone());
-        c = this.e;
-        null === c || a.cf(c);
-        return a
-    };
-    l.Q = function() {
-        return this.get(this.a)
-    };
-    l.aj = function() {
-        return this.$
-    };
-    l.$i = function() {
-        return this.a
-    };
-    l.Qk = function() {
-        return this.e
-    };
-    l.Rk = function() {
-        return this.c
-    };
-    l.Sk = function() {
-        this.k()
-    };
-    l.Pd = function() {
-        null !== this.d && (Wc(this.d), this.d = null);
-        var a = this.Q();
-        null != a && (this.d = x(a, "change", this.Sk, !1, this));
-        this.k()
-    };
-    l.La = function(a) {
-        this.set(this.a, a)
-    };
-    l.cf = function(a) {
-        this.e = a;
-        null === a ? a = void 0 : ka(a) || (a = ga(a) ? a : [a], a = Eg(a));
-        this.c = a;
-        this.k()
-    };
-    l.Qb = function(a) {
-        this.$ = a;
-        this.k()
-    };
-    l.Ic = function(a) {
-        Vc(this, hd(this.a), this.Pd, !1, this);
-        this.a = a;
-        x(this, hd(this.a), this.Pd, !1, this);
-        this.Pd()
-    };
-
-    function ur(a) {
-        a = m(a) ? a : {};
-        this.g = this.e = this.d = this.a = this.c = this.b = null;
-        this.f = void 0;
-        this.rg(m(a.style) ? a.style : El);
-        m(a.features) ? ga(a.features) ? this.ld(new of(a.features.slice())) : this.ld(a.features) : this.ld(new of);
-        m(a.map) && this.setMap(a.map)
-    }
-    l = ur.prototype;
-    l.pg = function(a) {
-        this.b.push(a)
-    };
-    l.Kk = function() {
-        return this.b
-    };
-    l.Lk = function() {
-        return this.d
-    };
-    l.qg = function() {
-        vr(this)
-    };
-    l.Mj = function(a) {
-        a = a.element;
-        this.a[ma(a).toString()] = x(a, "change", this.qg, !1, this);
-        vr(this)
-    };
-    l.Nj = function(a) {
-        a = ma(a.element).toString();
-        Wc(this.a[a]);
-        delete this.a[a];
-        vr(this)
-    };
-    l.Ok = function() {
-        vr(this)
-    };
-    l.Pk = function(a) {
-        if (null !== this.b) {
-            var c = this.f;
-            m(c) || (c = El);
-            var d = a.b;
-            a = a.frameState;
-            var e = a.viewState.resolution,
-                f = en(e, a.pixelRatio),
-                g, h, k, n;
-            this.b.forEach(function(a) {
-                n = a.c;
-                k = m(n) ? n.call(a, e) : c(a, e);
-                if (null != k)
-                    for (h = k.length, g = 0; g < h; ++g) fn(d, a, k[g], f, this.Ok, this)
-            }, this)
-        }
-    };
-    l.Yd = function(a) {
-        this.b.remove(a)
-    };
-
-    function vr(a) {
-        null === a.d || a.d.render()
-    }
-    l.ld = function(a) {
-        null !== this.c && (Sa(this.c, Wc), this.c = null);
-        null !== this.a && (Sa(sb(this.a), Wc), this.a = null);
-        this.b = a;
-        null !== a && (this.c = [x(a, "add", this.Mj, !1, this), x(a, "remove", this.Nj, !1, this)], this.a = {}, a.forEach(function(a) {
-            this.a[ma(a).toString()] = x(a, "change", this.qg, !1, this)
-        }, this));
-        vr(this)
-    };
-    l.setMap = function(a) {
-        null !== this.e && (Wc(this.e), this.e = null);
-        vr(this);
-        this.d = a;
-        null !== a && (this.e = x(a, "postcompose", this.Pk, !1, this), a.render())
-    };
-    l.rg = function(a) {
-        this.g = a;
-        this.f = Dl(a);
-        vr(this)
-    };
-    l.Mk = function() {
-        return this.g
-    };
-    l.Nk = function() {
-        return this.f
-    };
-
-    function wr() {
-        this.defaultDataProjection = null
-    }
-
-    function xr(a, c, d) {
-        var e;
-        m(d) && (e = {
-            dataProjection: m(d.dataProjection) ? d.dataProjection : a.za(c),
-            featureProjection: d.featureProjection
-        });
-        return yr(a, e)
-    }
-
-    function yr(a, c) {
-        var d;
-        m(c) && (d = {
-            featureProjection: c.featureProjection,
-            dataProjection: null != c.dataProjection ? c.dataProjection : a.defaultDataProjection,
-            rightHanded: c.rightHanded
-        });
-        return d
-    }
-
-    function zr(a, c, d) {
-        var e = m(d) ? re(d.featureProjection) : null;
-        d = m(d) ? re(d.dataProjection) : null;
-        return null === e || null === d || Ie(e, d) ? a : a instanceof uk ? (c ? a.clone() : a).transform(c ? e : d, c ? d : e) : Me(c ? a.slice() : a, c ? e : d, c ? d : e)
-    };
-
-    function Ar() {
-        this.defaultDataProjection = null
-    }
-    w(Ar, wr);
-
-    function Br(a) {
-        return la(a) ? a : ia(a) ? (a = Pn(a), m(a) ? a : null) : null
-    }
-    l = Ar.prototype;
-    l.M = function() {
-        return "json"
-    };
-    l.sb = function(a, c) {
-        return this.Fc(Br(a), xr(this, a, c))
-    };
-    l.ja = function(a, c) {
-        return this.of(Br(a), xr(this, a, c))
-    };
-    l.Gc = function(a, c) {
-        return this.hh(Br(a), xr(this, a, c))
-    };
-    l.za = function(a) {
-        return this.nh(Br(a))
-    };
-    l.qd = function(a, c) {
-        return Qn(this.Lc(a, c))
-    };
-    l.ub = function(a, c) {
-        return Qn(this.ze(a, c))
-    };
-    l.Mc = function(a, c) {
-        return Qn(this.Be(a, c))
-    };
-
-    function Cr(a) {
-        a = m(a) ? a : {};
-        this.defaultDataProjection = null;
-        this.b = a.geometryName
-    }
-    w(Cr, Ar);
-
-    function Dr(a, c) {
-        if (null === a) return null;
-        var d;
-        if (ja(a.x) && ja(a.y)) d = "Point";
-        else if (null != a.points) d = "MultiPoint";
-        else if (null != a.paths) d = 1 === a.paths.length ? "LineString" : "MultiLineString";
-        else if (null != a.rings) {
-            var e = a.rings,
-                f = Er(a),
-                g = [];
-            d = [];
-            var h, k;
-            h = 0;
-            for (k = e.length; h < k; ++h) {
-                var n = kb(e[h]);
-                $k(n, 0, n.length, f.length) ? g.push([e[h]]) : d.push(e[h])
-            }
-            for (; d.length;) {
-                e = d.shift();
-                f = !1;
-                for (h = g.length - 1; 0 <= h; h--)
-                    if (Rd((new Qk(g[h][0])).G(), (new Qk(e)).G())) {
-                        g[h].push(e);
-                        f = !0;
-                        break
-                    }
-                f || g.push([e.reverse()])
-            }
-            a = Db(a);
-            1 === g.length ? (d = "Polygon", a.rings = g[0]) : (d = "MultiPolygon", a.rings = g)
-        }
-        return zr((0, Fr[d])(a), !1, c)
-    }
-
-    function Er(a) {
-        var c = "XY";
-        !0 === a.hasZ && !0 === a.hasM ? c = "XYZM" : !0 === a.hasZ ? c = "XYZ" : !0 === a.hasM && (c = "XYM");
-        return c
-    }
-
-    function Gr(a) {
-        a = a.a;
-        return {
-            hasZ: "XYZ" === a || "XYZM" === a,
-            hasM: "XYM" === a || "XYZM" === a
-        }
-    }
-    var Fr = {
-            Point: function(a) {
-                return null != a.m && null != a.z ? new E([a.x, a.y, a.z, a.m], "XYZM") : null != a.z ? new E([a.x, a.y, a.z], "XYZ") : null != a.m ? new E([a.x, a.y, a.m], "XYM") : new E([a.x, a.y])
-            },
-            LineString: function(a) {
-                return new O(a.paths[0], Er(a))
-            },
-            Polygon: function(a) {
-                return new F(a.rings, Er(a))
-            },
-            MultiPoint: function(a) {
-                return new an(a.points, Er(a))
-            },
-            MultiLineString: function(a) {
-                return new Q(a.paths, Er(a))
-            },
-            MultiPolygon: function(a) {
-                return new R(a.rings, Er(a))
-            }
-        },
-        Hr = {
-            Point: function(a) {
-                var c = a.K();
-                a = a.a;
-                if ("XYZ" === a) return {
-                    x: c[0],
-                    y: c[1],
-                    z: c[2]
-                };
-                if ("XYM" === a) return {
-                    x: c[0],
-                    y: c[1],
-                    m: c[2]
-                };
-                if ("XYZM" === a) return {
-                    x: c[0],
-                    y: c[1],
-                    z: c[2],
-                    m: c[3]
-                };
-                if ("XY" === a) return {
-                    x: c[0],
-                    y: c[1]
-                }
-            },
-            LineString: function(a) {
-                var c = Gr(a);
-                return {
-                    hasZ: c.hasZ,
-                    hasM: c.hasM,
-                    paths: [a.K()]
-                }
-            },
-            Polygon: function(a) {
-                var c = Gr(a);
-                return {
-                    hasZ: c.hasZ,
-                    hasM: c.hasM,
-                    rings: a.K(!1)
-                }
-            },
-            MultiPoint: function(a) {
-                var c = Gr(a);
-                return {
-                    hasZ: c.hasZ,
-                    hasM: c.hasM,
-                    points: a.K()
-                }
-            },
-            MultiLineString: function(a) {
-                var c = Gr(a);
-                return {
-                    hasZ: c.hasZ,
-                    hasM: c.hasM,
-                    paths: a.K()
-                }
-            },
-            MultiPolygon: function(a) {
-                var c = Gr(a);
-                a = a.K(!1);
-                for (var d = [], e = 0; e < a.length; e++)
-                    for (var f = a[e].length - 1; 0 <= f; f--) d.push(a[e][f]);
-                return {
-                    hasZ: c.hasZ,
-                    hasM: c.hasM,
-                    rings: d
-                }
-            }
-        };
-    l = Cr.prototype;
-    l.Fc = function(a, c) {
-        var d = Dr(a.geometry, c),
-            e = new X;
-        m(this.b) && e.Ic(this.b);
-        e.La(d);
-        m(c) && m(c.Xe) && m(a.attributes[c.Xe]) && e.Qb(a.attributes[c.Xe]);
-        m(a.attributes) && e.t(a.attributes);
-        return e
-    };
-    l.of = function(a, c) {
-        var d = m(c) ? c : {};
-        if (null != a.features) {
-            var e = [],
-                f = a.features,
-                g, h;
-            d.Xe = a.objectIdFieldName;
-            g = 0;
-            for (h = f.length; g < h; ++g) e.push(this.Fc(f[g], d));
-            return e
-        }
-        return [this.Fc(a, d)]
-    };
-    l.hh = function(a, c) {
-        return Dr(a, c)
-    };
-    l.nh = function(a) {
-        return null != a.spatialReference && null != a.spatialReference.wkid ? re("EPSG:" + a.spatialReference.wkid) : null
-    };
-
-    function Ir(a, c) {
-        return (0, Hr[a.M()])(zr(a, !0, c), c)
-    }
-    l.Be = function(a, c) {
-        return Ir(a, yr(this, c))
-    };
-    l.Lc = function(a, c) {
-        c = yr(this, c);
-        var d = {},
-            e = a.Q();
-        null != e && (d.geometry = Ir(e, c));
-        e = a.D();
-        zb(e, a.a);
-        d.attributes = xb(e) ? {} : e;
-        m(c) && m(c.featureProjection) && (d.spatialReference = {
-            wkid: re(c.featureProjection).b.split(":").pop()
-        });
-        return d
-    };
-    l.ze = function(a, c) {
-        c = yr(this, c);
-        var d = [],
-            e, f;
-        e = 0;
-        for (f = a.length; e < f; ++e) d.push(this.Lc(a[e], c));
-        return {
-            features: d
-        }
-    };
-
-    function Jr(a) {
-        a = m(a) ? a : {};
-        this.defaultDataProjection = null;
-        this.defaultDataProjection = re(null != a.defaultDataProjection ? a.defaultDataProjection : "EPSG:4326");
-        this.b = a.geometryName
-    }
-    w(Jr, Ar);
-
-    function Kr(a, c) {
-        return null === a ? null : zr((0, Lr[a.type])(a), !1, c)
-    }
-
-    function Mr(a, c) {
-        return (0, Nr[a.M()])(zr(a, !0, c), c)
-    }
-    var Lr = {
-            Point: function(a) {
-                return new E(a.coordinates)
-            },
-            LineString: function(a) {
-                return new O(a.coordinates)
-            },
-            Polygon: function(a) {
-                return new F(a.coordinates)
-            },
-            MultiPoint: function(a) {
-                return new an(a.coordinates)
-            },
-            MultiLineString: function(a) {
-                return new Q(a.coordinates)
-            },
-            MultiPolygon: function(a) {
-                return new R(a.coordinates)
-            },
-            GeometryCollection: function(a, c) {
-                var d = Ua(a.geometries, function(a) {
-                    return Kr(a, c)
-                });
-                return new Rm(d)
-            }
-        },
-        Nr = {
-            Point: function(a) {
-                return {
-                    type: "Point",
-                    coordinates: a.K()
-                }
-            },
-            LineString: function(a) {
-                return {
-                    type: "LineString",
-                    coordinates: a.K()
-                }
-            },
-            Polygon: function(a, c) {
-                var d;
-                m(c) && (d = c.rightHanded);
-                return {
-                    type: "Polygon",
-                    coordinates: a.K(d)
-                }
-            },
-            MultiPoint: function(a) {
-                return {
-                    type: "MultiPoint",
-                    coordinates: a.K()
-                }
-            },
-            MultiLineString: function(a) {
-                return {
-                    type: "MultiLineString",
-                    coordinates: a.K()
-                }
-            },
-            MultiPolygon: function(a, c) {
-                var d;
-                m(c) && (d = c.rightHanded);
-                return {
-                    type: "MultiPolygon",
-                    coordinates: a.K(d)
-                }
-            },
-            GeometryCollection: function(a, c) {
-                return {
-                    type: "GeometryCollection",
-                    geometries: Ua(a.d, function(a) {
-                        return Mr(a, c)
-                    })
-                }
-            },
-            Circle: function() {
-                return {
-                    type: "GeometryCollection",
-                    geometries: []
-                }
-            }
-        };
-    l = Jr.prototype;
-    l.Fc = function(a, c) {
-        var d = Kr(a.geometry, c),
-            e = new X;
-        m(this.b) && e.Ic(this.b);
-        e.La(d);
-        m(a.id) && e.Qb(a.id);
-        m(a.properties) && e.t(a.properties);
-        return e
-    };
-    l.of = function(a, c) {
-        if ("Feature" == a.type) return [this.Fc(a, c)];
-        if ("FeatureCollection" == a.type) {
-            var d = [],
-                e = a.features,
-                f, g;
-            f = 0;
-            for (g = e.length; f < g; ++f) d.push(this.Fc(e[f], c));
-            return d
-        }
-        return []
-    };
-    l.hh = function(a, c) {
-        return Kr(a, c)
-    };
-    l.nh = function(a) {
-        a = a.crs;
-        return null != a ? "name" == a.type ? re(a.properties.name) : "EPSG" == a.type ? re("EPSG:" + a.properties.code) : null : this.defaultDataProjection
-    };
-    l.Lc = function(a, c) {
-        c = yr(this, c);
-        var d = {
-                type: "Feature"
-            },
-            e = a.$;
-        null != e && (d.id = e);
-        e = a.Q();
-        null != e && (d.geometry = Mr(e, c));
-        e = a.D();
-        zb(e, a.a);
-        d.properties = xb(e) ? null : e;
-        return d
-    };
-    l.ze = function(a, c) {
-        c = yr(this, c);
-        var d = [],
-            e, f;
-        e = 0;
-        for (f = a.length; e < f; ++e) d.push(this.Lc(a[e], c));
-        return {
-            type: "FeatureCollection",
-            features: d
-        }
-    };
-    l.Be = function(a, c) {
-        return Mr(a, yr(this, c))
-    };
-
-    function Or() {
-        this.defaultDataProjection = null
-    }
-    w(Or, wr);
-    l = Or.prototype;
-    l.M = function() {
-        return "xml"
-    };
-    l.sb = function(a, c) {
-        if (Io(a)) return Pr(this, a, c);
-        if (Lo(a)) return this.fh(a, c);
-        if (ia(a)) {
-            var d = Vo(a);
-            return Pr(this, d, c)
-        }
-        return null
-    };
-
-    function Pr(a, c, d) {
-        a = Qr(a, c, d);
-        return 0 < a.length ? a[0] : null
-    }
-    l.ja = function(a, c) {
-        if (Io(a)) return Qr(this, a, c);
-        if (Lo(a)) return this.Ob(a, c);
-        if (ia(a)) {
-            var d = Vo(a);
-            return Qr(this, d, c)
-        }
-        return []
-    };
-
-    function Qr(a, c, d) {
-        var e = [];
-        for (c = c.firstChild; null !== c; c = c.nextSibling) 1 == c.nodeType && db(e, a.Ob(c, d));
-        return e
-    }
-    l.Gc = function(a, c) {
-        if (Io(a)) return this.l(a, c);
-        if (Lo(a)) {
-            var d = this.qe(a, [xr(this, a, m(c) ? c : {})]);
-            return m(d) ? d : null
-        }
-        return ia(a) ? (d = Vo(a), this.l(d, c)) : null
-    };
-    l.za = function(a) {
-        return Io(a) ? this.sf(a) : Lo(a) ? this.te(a) : ia(a) ? (a = Vo(a), this.sf(a)) : null
-    };
-    l.sf = function() {
-        return this.defaultDataProjection
-    };
-    l.te = function() {
-        return this.defaultDataProjection
-    };
-    l.qd = function(a, c) {
-        var d = this.U(a, c);
-        return to(d)
-    };
-    l.ub = function(a, c) {
-        var d = this.a(a, c);
-        return to(d)
-    };
-    l.Mc = function(a, c) {
-        var d = this.q(a, c);
-        return to(d)
-    };
-
-    function Rr(a) {
-        a = m(a) ? a : {};
-        this.featureType = a.featureType;
-        this.featureNS = a.featureNS;
-        this.srsName = a.srsName;
-        this.schemaLocation = "";
-        this.b = {};
-        this.b["http://www.opengis.net/gml"] = {
-            featureMember: Yo(Rr.prototype.jd),
-            featureMembers: Yo(Rr.prototype.jd)
-        };
-        this.defaultDataProjection = null
-    }
-    w(Rr, Or);
-    l = Rr.prototype;
-    l.jd = function(a, c) {
-        var d = Fo(a),
-            e;
-        if ("FeatureCollection" == d) "http://www.opengis.net/wfs" === a.namespaceURI ? e = V([], this.b, a, c, this) : e = V(null, this.b, a, c, this);
-        else if ("featureMembers" == d || "featureMember" == d) {
-            var f = c[0],
-                g = f.featureType;
-            e = f.featureNS;
-            var h, k;
-            if (!m(g) && null != a.childNodes) {
-                g = [];
-                e = {};
-                h = 0;
-                for (k = a.childNodes.length; h < k; ++h) {
-                    var n = a.childNodes[h];
-                    if (1 === n.nodeType) {
-                        var p = n.nodeName.split(":").pop();
-                        if (-1 === Ra(g, p)) {
-                            var q;
-                            vb(e, n.namespaceURI) ? q = wb(e, function(a) {
-                                return a === n.namespaceURI
-                            }) : (q = "p" + rb(e), e[q] = n.namespaceURI);
-                            g.push(q + ":" + p)
-                        }
-                    }
-                }
-                f.featureType = g;
-                f.featureNS = e
-            }
-            ia(e) && (h = e, e = {}, e.p0 = h);
-            var f = {},
-                g = ga(g) ? g : [g],
-                r;
-            for (r in e) {
-                p = {};
-                h = 0;
-                for (k = g.length; h < k; ++h)(-1 === g[h].indexOf(":") ? "p0" : g[h].split(":")[0]) === r && (p[g[h].split(":").pop()] = "featureMembers" == d ? Xo(this.nf, this) : Yo(this.nf, this));
-                f[e[r]] = p
-            }
-            e = V([], f, a, c)
-        }
-        m(e) || (e = []);
-        return e
-    };
-    l.qe = function(a, c) {
-        var d = c[0];
-        d.srsName = a.firstElementChild.getAttribute("srsName");
-        var e = V(null, this.Cf, a, c, this);
-        if (null != e) return zr(e, !1, d)
-    };
-    l.nf = function(a, c) {
-        var d, e = a.getAttribute("fid") || Po(a, "http://www.opengis.net/gml", "id"),
-            f = {},
-            g;
-        for (d = a.firstElementChild; null !== d; d = d.nextElementSibling) {
-            var h = Fo(d);
-            if (0 === d.childNodes.length || 1 === d.childNodes.length && 3 === d.firstChild.nodeType) {
-                var k = Bo(d, !1);
-                /^[\s\xa0]*$/.test(k) && (k = void 0);
-                f[h] = k
-            } else "boundedBy" !== h && (g = h), f[h] = this.qe(d, c)
-        }
-        d = new X(f);
-        m(g) && d.Ic(g);
-        e && d.Qb(e);
-        return d
-    };
-    l.mh = function(a, c) {
-        var d = this.pe(a, c);
-        if (null != d) {
-            var e = new E(null);
-            Sk(e, "XYZ", d);
-            return e
-        }
-    };
-    l.kh = function(a, c) {
-        var d = V([], this.ai, a, c, this);
-        if (m(d)) return new an(d)
-    };
-    l.jh = function(a, c) {
-        var d = V([], this.$h, a, c, this);
-        if (m(d)) {
-            var e = new Q(null);
-            $m(e, d);
-            return e
-        }
-    };
-    l.lh = function(a, c) {
-        var d = V([], this.bi, a, c, this);
-        if (m(d)) {
-            var e = new R(null);
-            cn(e, d);
-            return e
-        }
-    };
-    l.$g = function(a, c) {
-        fp(this.ei, a, c, this)
-    };
-    l.kg = function(a, c) {
-        fp(this.Yh, a, c, this)
-    };
-    l.ah = function(a, c) {
-        fp(this.fi, a, c, this)
-    };
-    l.re = function(a, c) {
-        var d = this.pe(a, c);
-        if (null != d) {
-            var e = new O(null);
-            Ym(e, "XYZ", d);
-            return e
-        }
-    };
-    l.yn = function(a, c) {
-        var d = V(null, this.sd, a, c, this);
-        if (null != d) return d
-    };
-    l.ih = function(a, c) {
-        var d = this.pe(a, c);
-        if (m(d)) {
-            var e = new Qk(null);
-            Rk(e, "XYZ", d);
-            return e
-        }
-    };
-    l.se = function(a, c) {
-        var d = V([null], this.De, a, c, this);
-        if (m(d) && null !== d[0]) {
-            var e = new F(null),
-                f = d[0],
-                g = [f.length],
-                h, k;
-            h = 1;
-            for (k = d.length; h < k; ++h) db(f, d[h]), g.push(f.length);
-            dl(e, "XYZ", f, g);
-            return e
-        }
-    };
-    l.pe = function(a, c) {
-        return V(null, this.sd, a, c, this)
-    };
-    l.ai = Object({
-        "http://www.opengis.net/gml": {
-            pointMember: Xo(Rr.prototype.$g),
-            pointMembers: Xo(Rr.prototype.$g)
-        }
-    });
-    l.$h = Object({
-        "http://www.opengis.net/gml": {
-            lineStringMember: Xo(Rr.prototype.kg),
-            lineStringMembers: Xo(Rr.prototype.kg)
-        }
-    });
-    l.bi = Object({
-        "http://www.opengis.net/gml": {
-            polygonMember: Xo(Rr.prototype.ah),
-            polygonMembers: Xo(Rr.prototype.ah)
-        }
-    });
-    l.ei = Object({
-        "http://www.opengis.net/gml": {
-            Point: Xo(Rr.prototype.pe)
-        }
-    });
-    l.Yh = Object({
-        "http://www.opengis.net/gml": {
-            LineString: Xo(Rr.prototype.re)
-        }
-    });
-    l.fi = Object({
-        "http://www.opengis.net/gml": {
-            Polygon: Xo(Rr.prototype.se)
-        }
-    });
-    l.td = Object({
-        "http://www.opengis.net/gml": {
-            LinearRing: Yo(Rr.prototype.yn)
-        }
-    });
-    l.Ob = function(a, c) {
-        var d = {
-            featureType: this.featureType,
-            featureNS: this.featureNS
-        };
-        m(c) && Fb(d, xr(this, a, c));
-        return this.jd(a, [d])
-    };
-    l.te = function(a) {
-        return re(m(this.o) ? this.o : a.firstElementChild.getAttribute("srsName"))
-    };
-
-    function Sr(a) {
-        a = Bo(a, !1);
-        return Tr(a)
-    }
-
-    function Tr(a) {
-        if (a = /^\s*(true|1)|(false|0)\s*$/.exec(a)) return m(a[1]) || !1
-    }
-
-    function Ur(a) {
-        a = Bo(a, !1);
-        if (a = /^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?))\s*$/.exec(a)) {
-            var c = Date.UTC(parseInt(a[1], 10), parseInt(a[2], 10) - 1, parseInt(a[3], 10), parseInt(a[4], 10), parseInt(a[5], 10), parseInt(a[6], 10)) / 1E3;
-            if ("Z" != a[7]) {
-                var d = "-" == a[8] ? -1 : 1,
-                    c = c + 60 * d * parseInt(a[9], 10);
-                m(a[10]) && (c += 3600 * d * parseInt(a[10], 10))
-            }
-            return c
-        }
-    }
-
-    function Vr(a) {
-        a = Bo(a, !1);
-        return Wr(a)
-    }
-
-    function Wr(a) {
-        if (a = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(a)) return parseFloat(a[1])
-    }
-
-    function Xr(a) {
-        a = Bo(a, !1);
-        return Yr(a)
-    }
-
-    function Yr(a) {
-        if (a = /^\s*(\d+)\s*$/.exec(a)) return parseInt(a[1], 10)
-    }
-
-    function Y(a) {
-        a = Bo(a, !1);
-        return Ca(a)
-    }
-
-    function Zr(a, c) {
-        $r(a, c ? "1" : "0")
-    }
-
-    function as(a, c) {
-        a.appendChild(xo.createTextNode(c.toPrecision()))
-    }
-
-    function bs(a, c) {
-        a.appendChild(xo.createTextNode(c.toString()))
-    }
-
-    function $r(a, c) {
-        a.appendChild(xo.createTextNode(c))
-    };
-
-    function cs(a) {
-        a = m(a) ? a : {};
-        Rr.call(this, a);
-        this.i = m(a.surface) ? a.surface : !1;
-        this.e = m(a.curve) ? a.curve : !1;
-        this.f = m(a.multiCurve) ? a.multiCurve : !0;
-        this.g = m(a.multiSurface) ? a.multiSurface : !0;
-        this.schemaLocation = m(a.schemaLocation) ? a.schemaLocation : "http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"
-    }
-    w(cs, Rr);
-    l = cs.prototype;
-    l.Bn = function(a, c) {
-        var d = V([], this.Zh, a, c, this);
-        if (m(d)) {
-            var e = new Q(null);
-            $m(e, d);
-            return e
-        }
-    };
-    l.Cn = function(a, c) {
-        var d = V([], this.ci, a, c, this);
-        if (m(d)) {
-            var e = new R(null);
-            cn(e, d);
-            return e
-        }
-    };
-    l.Nf = function(a, c) {
-        fp(this.Vh, a, c, this)
-    };
-    l.Hh = function(a, c) {
-        fp(this.ji, a, c, this)
-    };
-    l.Fn = function(a, c) {
-        return V([null], this.di, a, c, this)
-    };
-    l.Hn = function(a, c) {
-        return V([null], this.ii, a, c, this)
-    };
-    l.Gn = function(a, c) {
-        return V([null], this.De, a, c, this)
-    };
-    l.An = function(a, c) {
-        return V([null], this.sd, a, c, this)
-    };
-    l.rk = function(a, c) {
-        var d = V(void 0, this.td, a, c, this);
-        m(d) && c[c.length - 1].push(d)
-    };
-    l.Di = function(a, c) {
-        var d = V(void 0, this.td, a, c, this);
-        m(d) && (c[c.length - 1][0] = d)
-    };
-    l.oh = function(a, c) {
-        var d = V([null], this.ki, a, c, this);
-        if (m(d) && null !== d[0]) {
-            var e = new F(null),
-                f = d[0],
-                g = [f.length],
-                h, k;
-            h = 1;
-            for (k = d.length; h < k; ++h) db(f, d[h]), g.push(f.length);
-            dl(e, "XYZ", f, g);
-            return e
-        }
-    };
-    l.dh = function(a, c) {
-        var d = V([null], this.Wh, a, c, this);
-        if (m(d)) {
-            var e = new O(null);
-            Ym(e, "XYZ", d);
-            return e
-        }
-    };
-    l.xn = function(a, c) {
-        var d = V([null], this.Xh, a, c, this);
-        return Nd(d[1][0], d[1][1], d[2][0], d[2][1])
-    };
-    l.zn = function(a, c) {
-        for (var d = Bo(a, !1), e = /^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/, f = [], g; g = e.exec(d);) f.push(parseFloat(g[1])), d = d.substr(g[0].length);
-        if ("" === d) {
-            d = c[0].srsName;
-            e = "enu";
-            null === d || (e = ue(re(d)));
-            if ("neu" === e)
-                for (d = 0, e = f.length; d < e; d += 3) g = f[d], f[d] = f[d + 1], f[d + 1] = g;
-            d = f.length;
-            2 == d && f.push(0);
-            return 0 === d ? void 0 : f
-        }
-    };
-    l.qf = function(a, c) {
-        var d = Bo(a, !1).replace(/^\s*|\s*$/g, ""),
-            e = c[0].srsName,
-            f = a.parentNode.getAttribute("srsDimension"),
-            g = "enu";
-        null === e || (g = ue(re(e)));
-        d = d.split(/\s+/);
-        e = 2;
-        fa(a.getAttribute("srsDimension")) ? fa(a.getAttribute("dimension")) ? null === f || (e = Yr(f)) : e = Yr(a.getAttribute("dimension")) : e = Yr(a.getAttribute("srsDimension"));
-        for (var h, k, n = [], p = 0, q = d.length; p < q; p += e) f = parseFloat(d[p]), h = parseFloat(d[p + 1]), k = 3 === e ? parseFloat(d[p + 2]) : 0, "en" === g.substr(0, 2) ? n.push(f, h, k) : n.push(h, f, k);
-        return n
-    };
-    l.sd = Object({
-        "http://www.opengis.net/gml": {
-            pos: Yo(cs.prototype.zn),
-            posList: Yo(cs.prototype.qf)
-        }
-    });
-    l.De = Object({
-        "http://www.opengis.net/gml": {
-            interior: cs.prototype.rk,
-            exterior: cs.prototype.Di
-        }
-    });
-    l.Cf = Object({
-        "http://www.opengis.net/gml": {
-            Point: Yo(Rr.prototype.mh),
-            MultiPoint: Yo(Rr.prototype.kh),
-            LineString: Yo(Rr.prototype.re),
-            MultiLineString: Yo(Rr.prototype.jh),
-            LinearRing: Yo(Rr.prototype.ih),
-            Polygon: Yo(Rr.prototype.se),
-            MultiPolygon: Yo(Rr.prototype.lh),
-            Surface: Yo(cs.prototype.oh),
-            MultiSurface: Yo(cs.prototype.Cn),
-            Curve: Yo(cs.prototype.dh),
-            MultiCurve: Yo(cs.prototype.Bn),
-            Envelope: Yo(cs.prototype.xn)
-        }
-    });
-    l.Zh = Object({
-        "http://www.opengis.net/gml": {
-            curveMember: Xo(cs.prototype.Nf),
-            curveMembers: Xo(cs.prototype.Nf)
-        }
-    });
-    l.ci = Object({
-        "http://www.opengis.net/gml": {
-            surfaceMember: Xo(cs.prototype.Hh),
-            surfaceMembers: Xo(cs.prototype.Hh)
-        }
-    });
-    l.Vh = Object({
-        "http://www.opengis.net/gml": {
-            LineString: Xo(Rr.prototype.re),
-            Curve: Xo(cs.prototype.dh)
-        }
-    });
-    l.ji = Object({
-        "http://www.opengis.net/gml": {
-            Polygon: Xo(Rr.prototype.se),
-            Surface: Xo(cs.prototype.oh)
-        }
-    });
-    l.ki = Object({
-        "http://www.opengis.net/gml": {
-            patches: Yo(cs.prototype.Fn)
-        }
-    });
-    l.Wh = Object({
-        "http://www.opengis.net/gml": {
-            segments: Yo(cs.prototype.Hn)
-        }
-    });
-    l.Xh = Object({
-        "http://www.opengis.net/gml": {
-            lowerCorner: Xo(cs.prototype.qf),
-            upperCorner: Xo(cs.prototype.qf)
-        }
-    });
-    l.di = Object({
-        "http://www.opengis.net/gml": {
-            PolygonPatch: Yo(cs.prototype.Gn)
-        }
-    });
-    l.ii = Object({
-        "http://www.opengis.net/gml": {
-            LineStringSegment: Yo(cs.prototype.An)
-        }
-    });
-
-    function ds(a, c, d) {
-        d = d[d.length - 1].srsName;
-        c = c.K();
-        for (var e = c.length, f = Array(e), g, h = 0; h < e; ++h) {
-            g = c[h];
-            var k = h,
-                n = "enu";
-            null != d && (n = ue(re(d)));
-            f[k] = "en" === n.substr(0, 2) ? g[0] + " " + g[1] : g[1] + " " + g[0]
-        }
-        $r(a, f.join(" "))
-    }
-    l.Rh = function(a, c, d) {
-        var e = d[d.length - 1].srsName;
-        null != e && a.setAttribute("srsName", e);
-        e = Ao(a.namespaceURI, "pos");
-        a.appendChild(e);
-        d = d[d.length - 1].srsName;
-        a = "enu";
-        null != d && (a = ue(re(d)));
-        c = c.K();
-        $r(e, "en" === a.substr(0, 2) ? c[0] + " " + c[1] : c[1] + " " + c[0])
-    };
-    var es = {
-        "http://www.opengis.net/gml": {
-            lowerCorner: U($r),
-            upperCorner: U($r)
-        }
-    };
-    l = cs.prototype;
-    l.wo = function(a, c, d) {
-        var e = d[d.length - 1].srsName;
-        m(e) && a.setAttribute("srsName", e);
-        gp({
-            P: a
-        }, es, dp, [c[0] + " " + c[1], c[2] + " " + c[3]], d, ["lowerCorner", "upperCorner"], this)
-    };
-    l.Oh = function(a, c, d) {
-        var e = d[d.length - 1].srsName;
-        null != e && a.setAttribute("srsName", e);
-        e = Ao(a.namespaceURI, "posList");
-        a.appendChild(e);
-        ds(e, c, d)
-    };
-    l.hi = function(a, c) {
-        var d = c[c.length - 1],
-            e = d.P,
-            f = d.exteriorWritten;
-        m(f) || (d.exteriorWritten = !0);
-        return Ao(e.namespaceURI, m(f) ? "interior" : "exterior")
-    };
-    l.Ce = function(a, c, d) {
-        var e = d[d.length - 1].srsName;
-        "PolygonPatch" !== a.nodeName && null != e && a.setAttribute("srsName", e);
-        "Polygon" === a.nodeName || "PolygonPatch" === a.nodeName ? (c = c.Ed(), gp({
-            P: a,
-            srsName: e
-        }, fs, this.hi, c, d, void 0, this)) : "Surface" === a.nodeName && (e = Ao(a.namespaceURI, "patches"), a.appendChild(e), a = Ao(e.namespaceURI, "PolygonPatch"), e.appendChild(a), this.Ce(a, c, d))
-    };
-    l.xe = function(a, c, d) {
-        var e = d[d.length - 1].srsName;
-        "LineStringSegment" !== a.nodeName && null != e && a.setAttribute("srsName", e);
-        "LineString" === a.nodeName || "LineStringSegment" === a.nodeName ? (e = Ao(a.namespaceURI, "posList"), a.appendChild(e), ds(e, c, d)) : "Curve" === a.nodeName && (e = Ao(a.namespaceURI, "segments"), a.appendChild(e), a = Ao(e.namespaceURI, "LineStringSegment"), e.appendChild(a), this.xe(a, c, d))
-    };
-    l.Qh = function(a, c, d) {
-        var e = d[d.length - 1],
-            f = e.srsName,
-            e = e.surface;
-        null != f && a.setAttribute("srsName", f);
-        c = c.Id();
-        gp({
-            P: a,
-            srsName: f,
-            surface: e
-        }, gs, this.d, c, d, void 0, this)
-    };
-    l.xo = function(a, c, d) {
-        var e = d[d.length - 1].srsName;
-        null != e && a.setAttribute("srsName", e);
-        c = c.ce();
-        gp({
-            P: a,
-            srsName: e
-        }, hs, bp("pointMember"), c, d, void 0, this)
-    };
-    l.Ph = function(a, c, d) {
-        var e = d[d.length - 1],
-            f = e.srsName,
-            e = e.curve;
-        null != f && a.setAttribute("srsName", f);
-        c = c.ad();
-        gp({
-            P: a,
-            srsName: f,
-            curve: e
-        }, is, this.d, c, d, void 0, this)
-    };
-    l.Sh = function(a, c, d) {
-        var e = Ao(a.namespaceURI, "LinearRing");
-        a.appendChild(e);
-        this.Oh(e, c, d)
-    };
-    l.Th = function(a, c, d) {
-        var e = this.c(c, d);
-        m(e) && (a.appendChild(e), this.Ce(e, c, d))
-    };
-    l.yo = function(a, c, d) {
-        var e = Ao(a.namespaceURI, "Point");
-        a.appendChild(e);
-        this.Rh(e, c, d)
-    };
-    l.Nh = function(a, c, d) {
-        var e = this.c(c, d);
-        m(e) && (a.appendChild(e), this.xe(e, c, d))
-    };
-    l.Ae = function(a, c, d) {
-        var e = d[d.length - 1],
-            f = Db(e);
-        f.P = a;
-        var g;
-        ga(c) ? m(e.dataProjection) ? g = Me(c, e.featureProjection, e.dataProjection) : g = c : g = zr(c, !0, e);
-        gp(f, js, this.c, [g], d, void 0, this)
-    };
-    l.Lh = function(a, c, d) {
-        var e = c.$;
-        m(e) && a.setAttribute("fid", e);
-        var e = d[d.length - 1],
-            f = e.featureNS,
-            g = c.a;
-        m(e.fc) || (e.fc = {}, e.fc[f] = {});
-        var h = c.D();
-        c = [];
-        var k = [],
-            n;
-        for (n in h) {
-            var p = h[n];
-            null !== p && (c.push(n), k.push(p), n == g ? n in e.fc[f] || (e.fc[f][n] = U(this.Ae, this)) : n in e.fc[f] || (e.fc[f][n] = U($r)))
-        }
-        n = Db(e);
-        n.P = a;
-        gp(n, e.fc, bp(void 0, f), k, d, c)
-    };
-    var gs = {
-            "http://www.opengis.net/gml": {
-                surfaceMember: U(cs.prototype.Th),
-                polygonMember: U(cs.prototype.Th)
-            }
-        },
-        hs = {
-            "http://www.opengis.net/gml": {
-                pointMember: U(cs.prototype.yo)
-            }
-        },
-        is = {
-            "http://www.opengis.net/gml": {
-                lineStringMember: U(cs.prototype.Nh),
-                curveMember: U(cs.prototype.Nh)
-            }
-        },
-        fs = {
-            "http://www.opengis.net/gml": {
-                exterior: U(cs.prototype.Sh),
-                interior: U(cs.prototype.Sh)
-            }
-        },
-        js = {
-            "http://www.opengis.net/gml": {
-                Curve: U(cs.prototype.xe),
-                MultiCurve: U(cs.prototype.Ph),
-                Point: U(cs.prototype.Rh),
-                MultiPoint: U(cs.prototype.xo),
-                LineString: U(cs.prototype.xe),
-                MultiLineString: U(cs.prototype.Ph),
-                LinearRing: U(cs.prototype.Oh),
-                Polygon: U(cs.prototype.Ce),
-                MultiPolygon: U(cs.prototype.Qh),
-                Surface: U(cs.prototype.Ce),
-                MultiSurface: U(cs.prototype.Qh),
-                Envelope: U(cs.prototype.wo)
-            }
-        },
-        ks = {
-            MultiLineString: "lineStringMember",
-            MultiCurve: "curveMember",
-            MultiPolygon: "polygonMember",
-            MultiSurface: "surfaceMember"
-        };
-    cs.prototype.d = function(a, c) {
-        return Ao("http://www.opengis.net/gml", ks[c[c.length - 1].P.nodeName])
-    };
-    cs.prototype.c = function(a, c) {
-        var d = c[c.length - 1],
-            e = d.multiSurface,
-            f = d.surface,
-            g = d.curve,
-            d = d.multiCurve,
-            h;
-        ga(a) ? h = "Envelope" : (h = a.M(), "MultiPolygon" === h && !0 === e ? h = "MultiSurface" : "Polygon" === h && !0 === f ? h = "Surface" : "LineString" === h && !0 === g ? h = "Curve" : "MultiLineString" === h && !0 === d && (h = "MultiCurve"));
-        return Ao("http://www.opengis.net/gml", h)
-    };
-    cs.prototype.q = function(a, c) {
-        c = yr(this, c);
-        var d = Ao("http://www.opengis.net/gml", "geom"),
-            e = {
-                P: d,
-                srsName: this.srsName,
-                curve: this.e,
-                surface: this.i,
-                multiSurface: this.g,
-                multiCurve: this.f
-            };
-        m(c) && Fb(e, c);
-        this.Ae(d, a, [e]);
-        return d
-    };
-    cs.prototype.a = function(a, c) {
-        c = yr(this, c);
-        var d = Ao("http://www.opengis.net/gml", "featureMembers");
-        Uo(d, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation);
-        var e = {
-            srsName: this.srsName,
-            curve: this.e,
-            surface: this.i,
-            multiSurface: this.g,
-            multiCurve: this.f,
-            featureNS: this.featureNS,
-            featureType: this.featureType
-        };
-        m(c) && Fb(e, c);
-        var e = [e],
-            f = e[e.length - 1],
-            g = f.featureType,
-            h = f.featureNS,
-            k = {};
-        k[h] = {};
-        k[h][g] = U(this.Lh, this);
-        f = Db(f);
-        f.P = d;
-        gp(f, k, bp(g, h), a, e);
-        return d
-    };
-
-    function ls(a) {
-        a = m(a) ? a : {};
-        Rr.call(this, a);
-        this.b["http://www.opengis.net/gml"].featureMember = Xo(Rr.prototype.jd);
-        this.schemaLocation = m(a.schemaLocation) ? a.schemaLocation : "http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"
-    }
-    w(ls, Rr);
-    l = ls.prototype;
-    l.gh = function(a, c) {
-        var d = Bo(a, !1).replace(/^\s*|\s*$/g, ""),
-            e = c[0].srsName,
-            f = a.parentNode.getAttribute("srsDimension"),
-            g = "enu";
-        null === e || (g = ue(re(e)));
-        d = d.split(/[\s,]+/);
-        e = 2;
-        fa(a.getAttribute("srsDimension")) ? fa(a.getAttribute("dimension")) ? null === f || (e = Yr(f)) : e = Yr(a.getAttribute("dimension")) : e = Yr(a.getAttribute("srsDimension"));
-        for (var h, k, n = [], p = 0, q = d.length; p < q; p += e) f = parseFloat(d[p]), h = parseFloat(d[p + 1]), k = 3 === e ? parseFloat(d[p + 2]) : 0, "en" === g.substr(0, 2) ? n.push(f, h, k) : n.push(h, f, k);
-        return n
-    };
-    l.wn = function(a, c) {
-        var d = V([null], this.Uh, a, c, this);
-        return Nd(d[1][0], d[1][1], d[1][3], d[1][4])
-    };
-    l.pk = function(a, c) {
-        var d = V(void 0, this.td, a, c, this);
-        m(d) && c[c.length - 1].push(d)
-    };
-    l.gn = function(a, c) {
-        var d = V(void 0, this.td, a, c, this);
-        m(d) && (c[c.length - 1][0] = d)
-    };
-    l.sd = Object({
-        "http://www.opengis.net/gml": {
-            coordinates: Yo(ls.prototype.gh)
-        }
-    });
-    l.De = Object({
-        "http://www.opengis.net/gml": {
-            innerBoundaryIs: ls.prototype.pk,
-            outerBoundaryIs: ls.prototype.gn
-        }
-    });
-    l.Uh = Object({
-        "http://www.opengis.net/gml": {
-            coordinates: Xo(ls.prototype.gh)
-        }
-    });
-    l.Cf = Object({
-        "http://www.opengis.net/gml": {
-            Point: Yo(Rr.prototype.mh),
-            MultiPoint: Yo(Rr.prototype.kh),
-            LineString: Yo(Rr.prototype.re),
-            MultiLineString: Yo(Rr.prototype.jh),
-            LinearRing: Yo(Rr.prototype.ih),
-            Polygon: Yo(Rr.prototype.se),
-            MultiPolygon: Yo(Rr.prototype.lh),
-            Box: Yo(ls.prototype.wn)
-        }
-    });
-
-    function ms(a) {
-        a = m(a) ? a : {};
-        this.defaultDataProjection = null;
-        this.defaultDataProjection = re("EPSG:4326");
-        this.b = a.readExtensions
-    }
-    w(ms, Or);
-    var ns = [null, "http://www.topografix.com/GPX/1/0", "http://www.topografix.com/GPX/1/1"];
-
-    function os(a, c, d) {
-        a.push(parseFloat(c.getAttribute("lon")), parseFloat(c.getAttribute("lat")));
-        "ele" in d ? (a.push(d.ele), zb(d, "ele")) : a.push(0);
-        "time" in d ? (a.push(d.time), zb(d, "time")) : a.push(0);
-        return a
-    }
-
-    function ps(a, c) {
-        var d = c[c.length - 1],
-            e = a.getAttribute("href");
-        null === e || (d.link = e);
-        fp(qs, a, c)
-    }
-
-    function rs(a, c) {
-        c[c.length - 1].extensionsNode_ = a
-    }
-
-    function ss(a, c) {
-        var d = c[0],
-            e = V({
-                flatCoordinates: []
-            }, ts, a, c);
-        if (m(e)) {
-            var f = e.flatCoordinates;
-            zb(e, "flatCoordinates");
-            var g = new O(null);
-            Ym(g, "XYZM", f);
-            zr(g, !1, d);
-            d = new X(g);
-            d.t(e);
-            return d
-        }
-    }
-
-    function us(a, c) {
-        var d = c[0],
-            e = V({
-                flatCoordinates: [],
-                ends: []
-            }, vs, a, c);
-        if (m(e)) {
-            var f = e.flatCoordinates;
-            zb(e, "flatCoordinates");
-            var g = e.ends;
-            zb(e, "ends");
-            var h = new Q(null);
-            Zm(h, "XYZM", f, g);
-            zr(h, !1, d);
-            d = new X(h);
-            d.t(e);
-            return d
-        }
-    }
-
-    function ws(a, c) {
-        var d = c[0],
-            e = V({}, xs, a, c);
-        if (m(e)) {
-            var f = os([], a, e),
-                f = new E(f, "XYZM");
-            zr(f, !1, d);
-            d = new X(f);
-            d.t(e);
-            return d
-        }
-    }
-    var ys = {
-            rte: ss,
-            trk: us,
-            wpt: ws
-        },
-        zs = T(ns, {
-            rte: Xo(ss),
-            trk: Xo(us),
-            wpt: Xo(ws)
-        }),
-        qs = T(ns, {
-            text: S(Y, "linkText"),
-            type: S(Y, "linkType")
-        }),
-        ts = T(ns, {
-            name: S(Y),
-            cmt: S(Y),
-            desc: S(Y),
-            src: S(Y),
-            link: ps,
-            number: S(Xr),
-            extensions: rs,
-            type: S(Y),
-            rtept: function(a, c) {
-                var d = V({}, As, a, c);
-                m(d) && os(c[c.length - 1].flatCoordinates, a, d)
-            }
-        }),
-        As = T(ns, {
-            ele: S(Vr),
-            time: S(Ur)
-        }),
-        vs = T(ns, {
-            name: S(Y),
-            cmt: S(Y),
-            desc: S(Y),
-            src: S(Y),
-            link: ps,
-            number: S(Xr),
-            type: S(Y),
-            extensions: rs,
-            trkseg: function(a, c) {
-                var d = c[c.length - 1];
-                fp(Bs, a, c);
-                d.ends.push(d.flatCoordinates.length)
-            }
-        }),
-        Bs = T(ns, {
-            trkpt: function(a, c) {
-                var d = V({}, Cs, a, c);
-                m(d) && os(c[c.length - 1].flatCoordinates, a, d)
-            }
-        }),
-        Cs = T(ns, {
-            ele: S(Vr),
-            time: S(Ur)
-        }),
-        xs = T(ns, {
-            ele: S(Vr),
-            time: S(Ur),
-            magvar: S(Vr),
-            geoidheight: S(Vr),
-            name: S(Y),
-            cmt: S(Y),
-            desc: S(Y),
-            src: S(Y),
-            link: ps,
-            sym: S(Y),
-            type: S(Y),
-            fix: S(Y),
-            sat: S(Xr),
-            hdop: S(Vr),
-            vdop: S(Vr),
-            pdop: S(Vr),
-            ageofdgpsdata: S(Vr),
-            dgpsid: S(Xr),
-            extensions: rs
-        });
-
-    function Ds(a, c) {
-        null === c && (c = []);
-        for (var d = 0, e = c.length; d < e; ++d) {
-            var f = c[d];
-            if (m(a.b)) {
-                var g = f.get("extensionsNode_") || null;
-                a.b(f, g)
-            }
-            f.set("extensionsNode_", void 0)
-        }
-    }
-    ms.prototype.fh = function(a, c) {
-        if (!Ya(ns, a.namespaceURI)) return null;
-        var d = ys[a.localName];
-        if (!m(d)) return null;
-        d = d(a, [xr(this, a, c)]);
-        if (!m(d)) return null;
-        Ds(this, [d]);
-        return d
-    };
-    ms.prototype.Ob = function(a, c) {
-        if (!Ya(ns, a.namespaceURI)) return [];
-        if ("gpx" == a.localName) {
-            var d = V([], zs, a, [xr(this, a, c)]);
-            if (m(d)) return Ds(this, d), d
-        }
-        return []
-    };
-
-    function Es(a, c, d) {
-        a.setAttribute("href", c);
-        c = d[d.length - 1].properties;
-        gp({
-            P: a
-        }, Fs, dp, [c.linkText, c.linkType], d, Gs)
-    }
-
-    function Hs(a, c, d) {
-        var e = d[d.length - 1],
-            f = e.P.namespaceURI,
-            g = e.properties;
-        Uo(a, null, "lat", c[1]);
-        Uo(a, null, "lon", c[0]);
-        switch (e.geometryLayout) {
-            case "XYZM":
-                0 !== c[3] && (g.time = c[3]);
-            case "XYZ":
-                0 !== c[2] && (g.ele = c[2]);
-                break;
-            case "XYM":
-                0 !== c[2] && (g.time = c[2])
-        }
-        c = Is[f];
-        e = ep(g, c);
-        gp({
-            P: a,
-            properties: g
-        }, Js, dp, e, d, c)
-    }
-    var Gs = ["text", "type"],
-        Fs = $o(ns, {
-            text: U($r),
-            type: U($r)
-        }),
-        Ks = $o(ns, "name cmt desc src link number type rtept".split(" ")),
-        Ls = $o(ns, {
-            name: U($r),
-            cmt: U($r),
-            desc: U($r),
-            src: U($r),
-            link: U(Es),
-            number: U(bs),
-            type: U($r),
-            rtept: ap(U(Hs))
-        }),
-        Ms = $o(ns, "name cmt desc src link number type trkseg".split(" ")),
-        Ps = $o(ns, {
-            name: U($r),
-            cmt: U($r),
-            desc: U($r),
-            src: U($r),
-            link: U(Es),
-            number: U(bs),
-            type: U($r),
-            trkseg: ap(U(function(a, c, d) {
-                gp({
-                    P: a,
-                    geometryLayout: c.a,
-                    properties: {}
-                }, Ns, Os, c.K(), d)
-            }))
-        }),
-        Os = bp("trkpt"),
-        Ns = $o(ns, {
-            trkpt: U(Hs)
-        }),
-        Is = $o(ns, "ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),
-        Js = $o(ns, {
-            ele: U(as),
-            time: U(function(a, c) {
-                var d = new Date(1E3 * c),
-                    d = d.getUTCFullYear() + "-" + Ma(d.getUTCMonth() + 1) + "-" + Ma(d.getUTCDate()) + "T" + Ma(d.getUTCHours()) + ":" + Ma(d.getUTCMinutes()) + ":" + Ma(d.getUTCSeconds()) + "Z";
-                a.appendChild(xo.createTextNode(d))
-            }),
-            magvar: U(as),
-            geoidheight: U(as),
-            name: U($r),
-            cmt: U($r),
-            desc: U($r),
-            src: U($r),
-            link: U(Es),
-            sym: U($r),
-            type: U($r),
-            fix: U($r),
-            sat: U(bs),
-            hdop: U(as),
-            vdop: U(as),
-            pdop: U(as),
-            ageofdgpsdata: U(as),
-            dgpsid: U(bs)
-        }),
-        Qs = {
-            Point: "wpt",
-            LineString: "rte",
-            MultiLineString: "trk"
-        };
-
-    function Rs(a, c) {
-        var d = a.Q();
-        if (m(d)) return Ao(c[c.length - 1].P.namespaceURI, Qs[d.M()])
-    }
-    var Ss = $o(ns, {
-        rte: U(function(a, c, d) {
-            var e = d[0],
-                f = c.D();
-            a = {
-                P: a,
-                properties: f
-            };
-            c = c.Q();
-            m(c) && (c = zr(c, !0, e), a.geometryLayout = c.a, f.rtept = c.K());
-            e = Ks[d[d.length - 1].P.namespaceURI];
-            f = ep(f, e);
-            gp(a, Ls, dp, f, d, e)
-        }),
-        trk: U(function(a, c, d) {
-            var e = d[0],
-                f = c.D();
-            a = {
-                P: a,
-                properties: f
-            };
-            c = c.Q();
-            m(c) && (c = zr(c, !0, e), f.trkseg = c.ad());
-            e = Ms[d[d.length - 1].P.namespaceURI];
-            f = ep(f, e);
-            gp(a, Ps, dp, f, d, e)
-        }),
-        wpt: U(function(a, c, d) {
-            var e = d[0],
-                f = d[d.length - 1];
-            f.properties = c.D();
-            c = c.Q();
-            m(c) && (c = zr(c, !0, e), f.geometryLayout = c.a, Hs(a, c.K(), d))
-        })
-    });
-    ms.prototype.a = function(a, c) {
-        c = yr(this, c);
-        var d = Ao("http://www.topografix.com/GPX/1/1", "gpx");
-        gp({
-            P: d
-        }, Ss, Rs, a, [c]);
-        return d
-    };
-
-    function Ts(a) {
-        a = Us(a);
-        return Ua(a, function(a) {
-            return a.c.substring(a.a, a.b)
-        })
-    }
-
-    function Vs(a, c, d) {
-        this.c = a;
-        this.a = c;
-        this.b = d
-    }
-
-    function Us(a) {
-        for (var c = RegExp("\r\n|\r|\n", "g"), d = 0, e, f = []; e = c.exec(a);) d = new Vs(a, d, e.index), f.push(d), d = c.lastIndex;
-        d < a.length && (d = new Vs(a, d, a.length), f.push(d));
-        return f
-    };
-
-    function Ws() {
-        this.defaultDataProjection = null
-    }
-    w(Ws, wr);
-    l = Ws.prototype;
-    l.M = function() {
-        return "text"
-    };
-    l.sb = function(a, c) {
-        return this.hd(ia(a) ? a : "", yr(this, c))
-    };
-    l.ja = function(a, c) {
-        return this.pf(ia(a) ? a : "", yr(this, c))
-    };
-    l.Gc = function(a, c) {
-        return this.kd(ia(a) ? a : "", yr(this, c))
-    };
-    l.za = function() {
-        return this.defaultDataProjection
-    };
-    l.qd = function(a, c) {
-        return this.ye(a, yr(this, c))
-    };
-    l.ub = function(a, c) {
-        return this.Mh(a, yr(this, c))
-    };
-    l.Mc = function(a, c) {
-        return this.rd(a, yr(this, c))
-    };
-
-    function Xs(a) {
-        a = m(a) ? a : {};
-        this.defaultDataProjection = null;
-        this.defaultDataProjection = re("EPSG:4326");
-        this.b = m(a.altitudeMode) ? a.altitudeMode : "none"
-    }
-    w(Xs, Ws);
-    var Ys = /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,
-        Zs = /^H.([A-Z]{3}).*?:(.*)/,
-        $s = /^HFDTE(\d{2})(\d{2})(\d{2})/;
-    Xs.prototype.hd = function(a, c) {
-        var d = this.b,
-            e = Ts(a),
-            f = {},
-            g = [],
-            h = 2E3,
-            k = 0,
-            n = 1,
-            p, q;
-        p = 0;
-        for (q = e.length; p < q; ++p) {
-            var r = e[p],
-                t;
-            if ("B" == r.charAt(0)) {
-                if (t = Ys.exec(r)) {
-                    var r = parseInt(t[1], 10),
-                        u = parseInt(t[2], 10),
-                        A = parseInt(t[3], 10),
-                        z = parseInt(t[4], 10) + parseInt(t[5], 10) / 6E4;
-                    "S" == t[6] && (z = -z);
-                    var D = parseInt(t[7], 10) + parseInt(t[8], 10) / 6E4;
-                    "W" == t[9] && (D = -D);
-                    g.push(D, z);
-                    "none" != d && g.push("gps" == d ? parseInt(t[11], 10) : "barometric" == d ? parseInt(t[12], 10) : 0);
-                    g.push(Date.UTC(h, k, n, r, u, A) / 1E3)
-                }
-            } else if ("H" == r.charAt(0))
-                if (t = $s.exec(r)) n = parseInt(t[1], 10), k = parseInt(t[2], 10) - 1, h = 2E3 + parseInt(t[3], 10);
-                else if (t = Zs.exec(r)) f[t[1]] = Ca(t[2]), $s.exec(r)
-        }
-        if (0 === g.length) return null;
-        e = new O(null);
-        Ym(e, "none" == d ? "XYM" : "XYZM", g);
-        d = new X(zr(e, !1, c));
-        d.t(f);
-        return d
-    };
-    Xs.prototype.pf = function(a, c) {
-        var d = this.hd(a, c);
-        return null === d ? [] : [d]
-    };
-
-    function at(a, c) {
-        var d;
-        a instanceof at ? (this.Yb = m(c) ? c : a.Yb, bt(this, a.Pb), this.pc = a.pc, this.ib = a.ib, ct(this, a.Ec), this.hb = a.hb, dt(this, a.b.clone()), this.Sb = a.Sb) : a && (d = Yn(String(a))) ? (this.Yb = !!c, bt(this, d[1] || "", !0), this.pc = et(d[2] || ""), this.ib = et(d[3] || "", !0), ct(this, d[4]), this.hb = et(d[5] || "", !0), dt(this, d[6] || "", !0), this.Sb = et(d[7] || "")) : (this.Yb = !!c, this.b = new ft(null, 0, this.Yb))
-    }
-    l = at.prototype;
-    l.Pb = "";
-    l.pc = "";
-    l.ib = "";
-    l.Ec = null;
-    l.hb = "";
-    l.Sb = "";
-    l.Yb = !1;
-    l.toString = function() {
-        var a = [],
-            c = this.Pb;
-        c && a.push(gt(c, ht, !0), ":");
-        if (c = this.ib) {
-            a.push("//");
-            var d = this.pc;
-            d && a.push(gt(d, ht, !0), "@");
-            a.push(encodeURIComponent(String(c)).replace(/%25([0-9a-fA-F]{2})/g, "%$1"));
-            c = this.Ec;
-            null != c && a.push(":", String(c))
-        }
-        if (c = this.hb) this.ib && "/" != c.charAt(0) && a.push("/"), a.push(gt(c, "/" == c.charAt(0) ? it : jt, !0));
-        (c = this.b.toString()) && a.push("?", c);
-        (c = this.Sb) && a.push("#", gt(c, kt));
-        return a.join("")
-    };
-    l.clone = function() {
-        return new at(this)
-    };
-
-    function bt(a, c, d) {
-        a.Pb = d ? et(c, !0) : c;
-        a.Pb && (a.Pb = a.Pb.replace(/:$/, ""))
-    }
-
-    function ct(a, c) {
-        if (c) {
-            c = Number(c);
-            if (isNaN(c) || 0 > c) throw Error("Bad port number " + c);
-            a.Ec = c
-        } else a.Ec = null
-    }
-
-    function dt(a, c, d) {
-        c instanceof ft ? (a.b = c, lt(a.b, a.Yb)) : (d || (c = gt(c, mt)), a.b = new ft(c, 0, a.Yb))
-    }
-
-    function nt(a) {
-        return a instanceof at ? a.clone() : new at(a, void 0)
-    }
-
-    function ot(a, c) {
-        a instanceof at || (a = nt(a));
-        c instanceof at || (c = nt(c));
-        var d = a,
-            e = c,
-            f = d.clone(),
-            g = !!e.Pb;
-        g ? bt(f, e.Pb) : g = !!e.pc;
-        g ? f.pc = e.pc : g = !!e.ib;
-        g ? f.ib = e.ib : g = null != e.Ec;
-        var h = e.hb;
-        if (g) ct(f, e.Ec);
-        else if (g = !!e.hb)
-            if ("/" != h.charAt(0) && (d.ib && !d.hb ? h = "/" + h : (d = f.hb.lastIndexOf("/"), -1 != d && (h = f.hb.substr(0, d + 1) + h))), d = h, ".." == d || "." == d) h = "";
-            else if (-1 != d.indexOf("./") || -1 != d.indexOf("/.")) {
-            for (var h = 0 == d.lastIndexOf("/", 0), d = d.split("/"), k = [], n = 0; n < d.length;) {
-                var p = d[n++];
-                "." == p ? h && n == d.length && k.push("") : ".." == p ? ((1 < k.length || 1 == k.length && "" != k[0]) && k.pop(), h && n == d.length && k.push("")) : (k.push(p), h = !0)
-            }
-            h = k.join("/")
-        } else h = d;
-        g ? f.hb = h : g = "" !== e.b.toString();
-        g ? dt(f, et(e.b.toString())) : g = !!e.Sb;
-        g && (f.Sb = e.Sb);
-        return f
-    }
-
-    function et(a, c) {
-        return a ? c ? decodeURI(a) : decodeURIComponent(a) : ""
-    }
-
-    function gt(a, c, d) {
-        return ia(a) ? (a = encodeURI(a).replace(c, pt), d && (a = a.replace(/%25([0-9a-fA-F]{2})/g, "%$1")), a) : null
-    }
-
-    function pt(a) {
-        a = a.charCodeAt(0);
-        return "%" + (a >> 4 & 15).toString(16) + (a & 15).toString(16)
-    }
-    var ht = /[#\/\?@]/g,
-        jt = /[\#\?:]/g,
-        it = /[\#\?]/g,
-        mt = /[\#\?@]/g,
-        kt = /#/g;
-
-    function ft(a, c, d) {
-        this.b = a || null;
-        this.a = !!d
-    }
-
-    function qt(a) {
-        a.ia || (a.ia = new Ch, a.va = 0, a.b && $n(a.b, function(c, d) {
-            a.add(decodeURIComponent(c.replace(/\+/g, " ")), d)
-        }))
-    }
-    l = ft.prototype;
-    l.ia = null;
-    l.va = null;
-    l.Tb = function() {
-        qt(this);
-        return this.va
-    };
-    l.add = function(a, c) {
-        qt(this);
-        this.b = null;
-        a = rt(this, a);
-        var d = this.ia.get(a);
-        d || this.ia.set(a, d = []);
-        d.push(c);
-        this.va++;
-        return this
-    };
-    l.remove = function(a) {
-        qt(this);
-        a = rt(this, a);
-        return Eh(this.ia.a, a) ? (this.b = null, this.va -= this.ia.get(a).length, this.ia.remove(a)) : !1
-    };
-    l.clear = function() {
-        this.ia = this.b = null;
-        this.va = 0
-    };
-    l.la = function() {
-        qt(this);
-        return 0 == this.va
-    };
-
-    function st(a, c) {
-        qt(a);
-        c = rt(a, c);
-        return Eh(a.ia.a, c)
-    }
-    l.C = function() {
-        qt(this);
-        for (var a = this.ia.cb(), c = this.ia.C(), d = [], e = 0; e < c.length; e++)
-            for (var f = a[e], g = 0; g < f.length; g++) d.push(c[e]);
-        return d
-    };
-    l.cb = function(a) {
-        qt(this);
-        var c = [];
-        if (ia(a)) st(this, a) && (c = ab(c, this.ia.get(rt(this, a))));
-        else {
-            a = this.ia.cb();
-            for (var d = 0; d < a.length; d++) c = ab(c, a[d])
-        }
-        return c
-    };
-    l.set = function(a, c) {
-        qt(this);
-        this.b = null;
-        a = rt(this, a);
-        st(this, a) && (this.va -= this.ia.get(a).length);
-        this.ia.set(a, [c]);
-        this.va++;
-        return this
-    };
-    l.get = function(a, c) {
-        var d = a ? this.cb(a) : [];
-        return 0 < d.length ? String(d[0]) : c
-    };
-
-    function tt(a, c, d) {
-        a.remove(c);
-        0 < d.length && (a.b = null, a.ia.set(rt(a, c), bb(d)), a.va += d.length)
-    }
-    l.toString = function() {
-        if (this.b) return this.b;
-        if (!this.ia) return "";
-        for (var a = [], c = this.ia.C(), d = 0; d < c.length; d++)
-            for (var e = c[d], f = encodeURIComponent(String(e)), e = this.cb(e), g = 0; g < e.length; g++) {
-                var h = f;
-                "" !== e[g] && (h += "=" + encodeURIComponent(String(e[g])));
-                a.push(h)
-            }
-        return this.b = a.join("&")
-    };
-    l.clone = function() {
-        var a = new ft;
-        a.b = this.b;
-        this.ia && (a.ia = this.ia.clone(), a.va = this.va);
-        return a
-    };
-
-    function rt(a, c) {
-        var d = String(c);
-        a.a && (d = d.toLowerCase());
-        return d
-    }
-
-    function lt(a, c) {
-        c && !a.a && (qt(a), a.b = null, a.ia.forEach(function(a, c) {
-            var f = c.toLowerCase();
-            c != f && (this.remove(c), tt(this, f, a))
-        }, a));
-        a.a = c
-    };
-
-    function ut(a) {
-        a = m(a) ? a : {};
-        this.d = a.font;
-        this.e = a.rotation;
-        this.a = a.scale;
-        this.c = a.text;
-        this.g = a.textAlign;
-        this.i = a.textBaseline;
-        this.b = m(a.fill) ? a.fill : null;
-        this.f = m(a.stroke) ? a.stroke : null;
-        this.q = m(a.offsetX) ? a.offsetX : 0;
-        this.l = m(a.offsetY) ? a.offsetY : 0
-    }
-    l = ut.prototype;
-    l.Wi = function() {
-        return this.d
-    };
-    l.mj = function() {
-        return this.q
-    };
-    l.nj = function() {
-        return this.l
-    };
-    l.Qm = function() {
-        return this.b
-    };
-    l.Rm = function() {
-        return this.e
-    };
-    l.Sm = function() {
-        return this.a
-    };
-    l.Tm = function() {
-        return this.f
-    };
-    l.Um = function() {
-        return this.c
-    };
-    l.xj = function() {
-        return this.g
-    };
-    l.yj = function() {
-        return this.i
-    };
-    l.Wn = function(a) {
-        this.d = a
-    };
-    l.Vn = function(a) {
-        this.b = a
-    };
-    l.Vm = function(a) {
-        this.e = a
-    };
-    l.Wm = function(a) {
-        this.a = a
-    };
-    l.eo = function(a) {
-        this.f = a
-    };
-    l.fo = function(a) {
-        this.c = a
-    };
-    l.ho = function(a) {
-        this.g = a
-    };
-    l.io = function(a) {
-        this.i = a
-    };
-
-    function vt(a) {
-        function c(a) {
-            return ga(a) ? a : ia(a) ? (!(a in e) && "#" + a in e && (a = "#" + a), c(e[a])) : d
-        }
-        a = m(a) ? a : {};
-        this.defaultDataProjection = null;
-        this.defaultDataProjection = re("EPSG:4326");
-        var d = m(a.defaultStyle) ? a.defaultStyle : wt,
-            e = {};
-        this.c = m(a.extractStyles) ? a.extractStyles : !0;
-        this.b = e;
-        this.d = function() {
-            var a = this.get("Style");
-            if (m(a)) return a;
-            a = this.get("styleUrl");
-            return m(a) ? c(a) : d
-        }
-    }
-    w(vt, Or);
-    var xt = ["http://www.google.com/kml/ext/2.2"],
-        yt = [null, "http://earth.google.com/kml/2.0", "http://earth.google.com/kml/2.1", "http://earth.google.com/kml/2.2", "http://www.opengis.net/kml/2.2"],
-        zt = [255, 255, 255, 1],
-        At = new zl({
-            color: zt
-        }),
-        Bt = [20, 2],
-        Ct = [64, 64],
-        Dt = new Fj({
-            anchor: Bt,
-            anchorOrigin: "bottom-left",
-            anchorXUnits: "pixels",
-            anchorYUnits: "pixels",
-            crossOrigin: "anonymous",
-            rotation: 0,
-            scale: .5,
-            size: Ct,
-            src: "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"
-        }),
-        Et = new vl({
-            color: zt,
-            width: 1
-        }),
-        Ft = new ut({
-            font: "normal 16px Helvetica",
-            fill: At,
-            stroke: Et,
-            scale: 1
-        }),
-        wt = [new Bl({
-            fill: At,
-            image: Dt,
-            text: Ft,
-            stroke: Et,
-            zIndex: 0
-        })],
-        Gt = {
-            fraction: "fraction",
-            pixels: "pixels"
-        };
-
-    function Ht(a) {
-        a = Bo(a, !1);
-        if (a = /^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(a)) return a = a[1], [parseInt(a.substr(6, 2), 16), parseInt(a.substr(4, 2), 16), parseInt(a.substr(2, 2), 16), parseInt(a.substr(0, 2), 16) / 255]
-    }
-
-    function It(a) {
-        a = Bo(a, !1);
-        for (var c = [], d = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i, e; e = d.exec(a);) c.push(parseFloat(e[1]), parseFloat(e[2]), e[3] ? parseFloat(e[3]) : 0), a = a.substr(e[0].length);
-        return "" !== a ? void 0 : c
-    }
-
-    function Jt(a) {
-        var c = Bo(a, !1);
-        return null != a.baseURI ? ot(a.baseURI, Ca(c)).toString() : Ca(c)
-    }
-
-    function Kt(a) {
-        a = Vr(a);
-        if (m(a)) return Math.sqrt(a)
-    }
-
-    function Lt(a, c) {
-        return V(null, Mt, a, c)
-    }
-
-    function Nt(a, c) {
-        var d = V({
-            j: [],
-            Kh: []
-        }, Ot, a, c);
-        if (m(d)) {
-            var e = d.j,
-                d = d.Kh,
-                f, g;
-            f = 0;
-            for (g = Math.min(e.length, d.length); f < g; ++f) e[4 * f + 3] = d[f];
-            d = new O(null);
-            Ym(d, "XYZM", e);
-            return d
-        }
-    }
-
-    function Pt(a, c) {
-        var d = V({}, Qt, a, c),
-            e = V(null, Rt, a, c);
-        if (m(e)) {
-            var f = new O(null);
-            Ym(f, "XYZ", e);
-            f.t(d);
-            return f
-        }
-    }
-
-    function St(a, c) {
-        var d = V({}, Qt, a, c),
-            e = V(null, Rt, a, c);
-        if (m(e)) {
-            var f = new F(null);
-            dl(f, "XYZ", e, [e.length]);
-            f.t(d);
-            return f
-        }
-    }
-
-    function Tt(a, c) {
-        var d = V([], Ut, a, c);
-        if (!m(d)) return null;
-        if (0 === d.length) return new Rm(d);
-        var e = !0,
-            f = d[0].M(),
-            g, h, k;
-        h = 1;
-        for (k = d.length; h < k; ++h)
-            if (g = d[h], g.M() != f) {
-                e = !1;
-                break
-            }
-        if (e) {
-            if ("Point" == f) {
-                g = d[0];
-                e = g.a;
-                f = g.j;
-                h = 1;
-                for (k = d.length; h < k; ++h) g = d[h], db(f, g.j);
-                g = new an(null);
-                yk(g, e, f);
-                g.k();
-                Vt(g, d);
-                return g
-            }
-            return "LineString" == f ? (g = new Q(null), $m(g, d), Vt(g, d), g) : "Polygon" == f ? (g = new R(null), cn(g, d), Vt(g, d), g) : "GeometryCollection" == f ? new Rm(d) : null
-        }
-        return new Rm(d)
-    }
-
-    function Wt(a, c) {
-        var d = V({}, Qt, a, c),
-            e = V(null, Rt, a, c);
-        if (null != e) {
-            var f = new E(null);
-            Sk(f, "XYZ", e);
-            f.t(d);
-            return f
-        }
-    }
-
-    function Xt(a, c) {
-        var d = V({}, Qt, a, c),
-            e = V([null], Yt, a, c);
-        if (null != e && null !== e[0]) {
-            var f = new F(null),
-                g = e[0],
-                h = [g.length],
-                k, n;
-            k = 1;
-            for (n = e.length; k < n; ++k) db(g, e[k]), h.push(g.length);
-            dl(f, "XYZ", g, h);
-            f.t(d);
-            return f
-        }
-    }
-
-    function Zt(a, c) {
-        var d = V({}, $t, a, c);
-        if (!m(d)) return null;
-        var e = Ab(d, "fillStyle", At),
-            f = d.fill;
-        m(f) && !f && (e = null);
-        var f = Ab(d, "imageStyle", Dt),
-            g = Ab(d, "textStyle", Ft),
-            h = Ab(d, "strokeStyle", Et),
-            d = d.outline;
-        m(d) && !d && (h = null);
-        return [new Bl({
-            fill: e,
-            image: f,
-            stroke: h,
-            text: g,
-            zIndex: void 0
-        })]
-    }
-
-    function Vt(a, c) {
-        var d = c.length,
-            e = Array(c.length),
-            f = Array(c.length),
-            g, h, k, n;
-        k = n = !1;
-        for (h = 0; h < d; ++h) g = c[h], e[h] = g.get("extrude"), f[h] = g.get("altitudeMode"), k = k || m(e[h]), n = n || m(f[h]);
-        k && a.set("extrude", e);
-        n && a.set("altitudeMode", f)
-    }
-
-    function au(a, c) {
-        fp(bu, a, c)
-    }
-    var cu = T(yt, {
-            value: Yo(Y)
-        }),
-        bu = T(yt, {
-            Data: function(a, c) {
-                var d = a.getAttribute("name");
-                if (null !== d) {
-                    var e = V(void 0, cu, a, c);
-                    m(e) && (c[c.length - 1][d] = e)
-                }
-            },
-            SchemaData: function(a, c) {
-                fp(du, a, c)
-            }
-        }),
-        Qt = T(yt, {
-            extrude: S(Sr),
-            altitudeMode: S(Y)
-        }),
-        Mt = T(yt, {
-            coordinates: Yo(It)
-        }),
-        Yt = T(yt, {
-            innerBoundaryIs: function(a, c) {
-                var d = V(void 0, eu, a, c);
-                m(d) && c[c.length - 1].push(d)
-            },
-            outerBoundaryIs: function(a, c) {
-                var d = V(void 0, fu, a, c);
-                m(d) && (c[c.length - 1][0] = d)
-            }
-        }),
-        Ot = T(yt, {
-            when: function(a, c) {
-                var d = c[c.length - 1].Kh,
-                    e = Bo(a, !1);
-                if (e = /^\s*(\d{4})($|-(\d{2})($|-(\d{2})($|T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?)))))\s*$/.exec(e)) {
-                    var f = Date.UTC(parseInt(e[1], 10), m(e[3]) ? parseInt(e[3], 10) - 1 : 0, m(e[5]) ? parseInt(e[5], 10) : 1, m(e[7]) ? parseInt(e[7], 10) : 0, m(e[8]) ? parseInt(e[8], 10) : 0, m(e[9]) ? parseInt(e[9], 10) : 0);
-                    if (m(e[10]) && "Z" != e[10]) {
-                        var g = "-" == e[11] ? -1 : 1,
-                            f = f + 60 * g * parseInt(e[12], 10);
-                        m(e[13]) && (f += 3600 * g * parseInt(e[13], 10))
-                    }
-                    d.push(f)
-                } else d.push(0)
-            }
-        }, T(xt, {
-            coord: function(a, c) {
-                var d = c[c.length - 1].j,
-                    e = Bo(a, !1);
-                (e = /^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(e)) ? d.push(parseFloat(e[1]), parseFloat(e[2]), parseFloat(e[3]), 0): d.push(0, 0, 0, 0)
-            }
-        })),
-        Rt = T(yt, {
-            coordinates: Yo(It)
-        }),
-        gu = T(yt, {
-            href: S(Jt)
-        }, T(xt, {
-            x: S(Vr),
-            y: S(Vr),
-            w: S(Vr),
-            h: S(Vr)
-        })),
-        hu = T(yt, {
-            Icon: S(function(a, c) {
-                var d = V({}, gu, a, c);
-                return m(d) ? d : null
-            }),
-            heading: S(Vr),
-            hotSpot: S(function(a) {
-                var c = a.getAttribute("xunits"),
-                    d = a.getAttribute("yunits");
-                return {
-                    x: parseFloat(a.getAttribute("x")),
-                    Af: Gt[c],
-                    y: parseFloat(a.getAttribute("y")),
-                    Bf: Gt[d]
-                }
-            }),
-            scale: S(Kt)
-        }),
-        eu = T(yt, {
-            LinearRing: Yo(Lt)
-        }),
-        iu = T(yt, {
-            color: S(Ht),
-            scale: S(Kt)
-        }),
-        ju = T(yt, {
-            color: S(Ht),
-            width: S(Vr)
-        }),
-        Ut = T(yt, {
-            LineString: Xo(Pt),
-            LinearRing: Xo(St),
-            MultiGeometry: Xo(Tt),
-            Point: Xo(Wt),
-            Polygon: Xo(Xt)
-        }),
-        ku = T(xt, {
-            Track: Xo(Nt)
-        }),
-        mu = T(yt, {
-            ExtendedData: au,
-            Link: function(a, c) {
-                fp(lu, a, c)
-            },
-            address: S(Y),
-            description: S(Y),
-            name: S(Y),
-            open: S(Sr),
-            phoneNumber: S(Y),
-            visibility: S(Sr)
-        }),
-        lu = T(yt, {
-            href: S(Jt)
-        }),
-        fu = T(yt, {
-            LinearRing: Yo(Lt)
-        }),
-        nu = T(yt, {
-            Style: S(Zt),
-            key: S(Y),
-            styleUrl: S(function(a) {
-                var c = Ca(Bo(a, !1));
-                return null != a.baseURI ? ot(a.baseURI, c).toString() : c
-            })
-        }),
-        pu = T(yt, {
-            ExtendedData: au,
-            MultiGeometry: S(Tt, "geometry"),
-            LineString: S(Pt, "geometry"),
-            LinearRing: S(St, "geometry"),
-            Point: S(Wt, "geometry"),
-            Polygon: S(Xt, "geometry"),
-            Style: S(Zt),
-            StyleMap: function(a, c) {
-                var d = V(void 0, ou, a, c);
-                if (m(d)) {
-                    var e = c[c.length - 1];
-                    ga(d) ? e.Style = d : ia(d) && (e.styleUrl = d)
-                }
-            },
-            address: S(Y),
-            description: S(Y),
-            name: S(Y),
-            open: S(Sr),
-            phoneNumber: S(Y),
-            styleUrl: S(Jt),
-            visibility: S(Sr)
-        }, T(xt, {
-            MultiTrack: S(function(a, c) {
-                var d = V([], ku, a, c);
-                if (m(d)) {
-                    var e = new Q(null);
-                    $m(e, d);
-                    return e
-                }
-            }, "geometry"),
-            Track: S(Nt, "geometry")
-        })),
-        qu = T(yt, {
-            color: S(Ht),
-            fill: S(Sr),
-            outline: S(Sr)
-        }),
-        du = T(yt, {
-            SimpleData: function(a, c) {
-                var d = a.getAttribute("name");
-                if (null !== d) {
-                    var e = Y(a);
-                    c[c.length - 1][d] = e
-                }
-            }
-        }),
-        $t = T(yt, {
-            IconStyle: function(a, c) {
-                var d = V({}, hu, a, c);
-                if (m(d)) {
-                    var e = c[c.length - 1],
-                        f = Ab(d, "Icon", {}),
-                        g;
-                    g = f.href;
-                    g = m(g) ? g : "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png";
-                    var h, k, n, p = d.hotSpot;
-                    m(p) ? (h = [p.x, p.y], k = p.Af, n = p.Bf) : "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png" === g ? (h = Bt, n = k = "pixels") : /^http:\/\/maps\.(?:google|gstatic)\.com\//.test(g) && (h = [.5, 0], n = k = "fraction");
-                    var q, p = f.x,
-                        r = f.y;
-                    m(p) && m(r) && (q = [p, r]);
-                    var t, p = f.w,
-                        f = f.h;
-                    m(p) && m(f) && (t = [p, f]);
-                    var u, f = d.heading;
-                    m(f) && (u = Yb(f));
-                    d = d.scale;
-                    "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png" == g && (t = Ct);
-                    h = new Fj({
-                        anchor: h,
-                        anchorOrigin: "bottom-left",
-                        anchorXUnits: k,
-                        anchorYUnits: n,
-                        crossOrigin: "anonymous",
-                        offset: q,
-                        offsetOrigin: "bottom-left",
-                        rotation: u,
-                        scale: d,
-                        size: t,
-                        src: g
-                    });
-                    e.imageStyle = h
-                }
-            },
-            LabelStyle: function(a, c) {
-                var d = V({}, iu, a, c);
-                m(d) && (c[c.length - 1].textStyle = new ut({
-                    fill: new zl({
-                        color: Ab(d, "color", zt)
-                    }),
-                    scale: d.scale
-                }))
-            },
-            LineStyle: function(a, c) {
-                var d = V({}, ju, a, c);
-                m(d) && (c[c.length - 1].strokeStyle = new vl({
-                    color: Ab(d, "color", zt),
-                    width: Ab(d, "width", 1)
-                }))
-            },
-            PolyStyle: function(a, c) {
-                var d = V({}, qu, a, c);
-                if (m(d)) {
-                    var e = c[c.length - 1];
-                    e.fillStyle = new zl({
-                        color: Ab(d, "color", zt)
-                    });
-                    var f = d.fill;
-                    m(f) && (e.fill = f);
-                    d = d.outline;
-                    m(d) && (e.outline = d)
-                }
-            }
-        }),
-        ou = T(yt, {
-            Pair: function(a, c) {
-                var d = V({}, nu, a, c);
-                if (m(d)) {
-                    var e = d.key;
-                    m(e) && "normal" == e && (e = d.styleUrl, m(e) && (c[c.length - 1] = e), d = d.Style, m(d) && (c[c.length - 1] = d))
-                }
-            }
-        });
-    l = vt.prototype;
-    l.eh = function(a, c) {
-        Fo(a);
-        var d = T(yt, {
-                Folder: Wo(this.eh, this),
-                Placemark: Xo(this.rf, this),
-                Style: ra(this.Jn, this),
-                StyleMap: ra(this.In, this)
-            }),
-            d = V([], d, a, c, this);
-        if (m(d)) return d
-    };
-    l.rf = function(a, c) {
-        var d = V({
-            geometry: null
-        }, pu, a, c);
-        if (m(d)) {
-            var e = new X,
-                f = a.getAttribute("id");
-            null === f || e.Qb(f);
-            f = c[0];
-            null != d.geometry && zr(d.geometry, !1, f);
-            e.t(d);
-            this.c && e.cf(this.d);
-            return e
-        }
-    };
-    l.Jn = function(a, c) {
-        var d = a.getAttribute("id");
-        if (null !== d) {
-            var e = Zt(a, c);
-            m(e) && (d = null != a.baseURI ? ot(a.baseURI, "#" + d).toString() : "#" + d, this.b[d] = e)
-        }
-    };
-    l.In = function(a, c) {
-        var d = a.getAttribute("id");
-        if (null !== d) {
-            var e = V(void 0, ou, a, c);
-            m(e) && (d = null != a.baseURI ? ot(a.baseURI, "#" + d).toString() : "#" + d, this.b[d] = e)
-        }
-    };
-    l.fh = function(a, c) {
-        if (!Ya(yt, a.namespaceURI)) return null;
-        var d = this.rf(a, [xr(this, a, c)]);
-        return m(d) ? d : null
-    };
-    l.Ob = function(a, c) {
-        if (!Ya(yt, a.namespaceURI)) return [];
-        var d;
-        d = Fo(a);
-        if ("Document" == d || "Folder" == d) return d = this.eh(a, [xr(this, a, c)]), m(d) ? d : [];
-        if ("Placemark" == d) return d = this.rf(a, [xr(this, a, c)]), m(d) ? [d] : [];
-        if ("kml" == d) {
-            d = [];
-            var e;
-            for (e = a.firstElementChild; null !== e; e = e.nextElementSibling) {
-                var f = this.Ob(e, c);
-                m(f) && db(d, f)
-            }
-            return d
-        }
-        return []
-    };
-    l.Dn = function(a) {
-        if (Io(a)) return ru(this, a);
-        if (Lo(a)) return su(this, a);
-        if (ia(a)) return a = Vo(a), ru(this, a)
-    };
-
-    function ru(a, c) {
-        var d;
-        for (d = c.firstChild; null !== d; d = d.nextSibling)
-            if (1 == d.nodeType) {
-                var e = su(a, d);
-                if (m(e)) return e
-            }
-    }
-
-    function su(a, c) {
-        var d;
-        for (d = c.firstElementChild; null !== d; d = d.nextElementSibling)
-            if (Ya(yt, d.namespaceURI) && "name" == d.localName) return Y(d);
-        for (d = c.firstElementChild; null !== d; d = d.nextElementSibling) {
-            var e = Fo(d);
-            if (Ya(yt, d.namespaceURI) && ("Document" == e || "Folder" == e || "Placemark" == e || "kml" == e) && (e = su(a, d), m(e))) return e
-        }
-    }
-    l.En = function(a) {
-        var c = [];
-        Io(a) ? db(c, tu(this, a)) : Lo(a) ? db(c, uu(this, a)) : ia(a) && (a = Vo(a), db(c, tu(this, a)));
-        return c
-    };
-
-    function tu(a, c) {
-        var d, e = [];
-        for (d = c.firstChild; null !== d; d = d.nextSibling) 1 == d.nodeType && db(e, uu(a, d));
-        return e
-    }
-
-    function uu(a, c) {
-        var d, e = [];
-        for (d = c.firstElementChild; null !== d; d = d.nextElementSibling)
-            if (Ya(yt, d.namespaceURI) && "NetworkLink" == d.localName) {
-                var f = V({}, mu, d, []);
-                e.push(f)
-            }
-        for (d = c.firstElementChild; null !== d; d = d.nextElementSibling) f = Fo(d), !Ya(yt, d.namespaceURI) || "Document" != f && "Folder" != f && "kml" != f || db(e, uu(a, d));
-        return e
-    }
-
-    function vu(a, c) {
-        var d = tf(c),
-            d = [255 * (4 == d.length ? d[3] : 1), d[2], d[1], d[0]],
-            e;
-        for (e = 0; 4 > e; ++e) {
-            var f = parseInt(d[e], 10).toString(16);
-            d[e] = 1 == f.length ? "0" + f : f
-        }
-        $r(a, d.join(""))
-    }
-
-    function wu(a, c, d) {
-        gp({
-            P: a
-        }, xu, yu, [c], d)
-    }
-
-    function zu(a, c, d) {
-        var e = {
-            P: a
-        };
-        null != c.$ && a.setAttribute("id", c.$);
-        a = c.D();
-        var f = c.c;
-        m(f) && (f = f.call(c, 0), null !== f && 0 < f.length && (a.Style = f[0], f = f[0].a, null === f || (a.name = f.c)));
-        f = Au[d[d.length - 1].P.namespaceURI];
-        a = ep(a, f);
-        gp(e, Bu, dp, a, d, f);
-        a = d[0];
-        c = c.Q();
-        null != c && (c = zr(c, !0, a));
-        gp(e, Bu, Cu, [c], d)
-    }
-
-    function Du(a, c, d) {
-        var e = c.j;
-        a = {
-            P: a
-        };
-        a.layout = c.a;
-        a.stride = c.s;
-        gp(a, Eu, Fu, [e], d)
-    }
-
-    function Gu(a, c, d) {
-        c = c.Ed();
-        var e = c.shift();
-        a = {
-            P: a
-        };
-        gp(a, Hu, Iu, c, d);
-        gp(a, Hu, Ju, [e], d)
-    }
-
-    function Ku(a, c) {
-        as(a, c * c)
-    }
-    var Lu = $o(yt, ["Document", "Placemark"]),
-        Ou = $o(yt, {
-            Document: U(function(a, c, d) {
-                gp({
-                    P: a
-                }, Mu, Nu, c, d)
-            }),
-            Placemark: U(zu)
-        }),
-        Mu = $o(yt, {
-            Placemark: U(zu)
-        }),
-        Pu = {
-            Point: "Point",
-            LineString: "LineString",
-            LinearRing: "LinearRing",
-            Polygon: "Polygon",
-            MultiPoint: "MultiGeometry",
-            MultiLineString: "MultiGeometry",
-            MultiPolygon: "MultiGeometry"
-        },
-        Qu = $o(yt, ["href"], $o(xt, ["x", "y", "w", "h"])),
-        Ru = $o(yt, {
-            href: U($r)
-        }, $o(xt, {
-            x: U(as),
-            y: U(as),
-            w: U(as),
-            h: U(as)
-        })),
-        Su = $o(yt, ["scale", "heading", "Icon", "hotSpot"]),
-        Uu = $o(yt, {
-            Icon: U(function(a, c, d) {
-                a = {
-                    P: a
-                };
-                var e = Qu[d[d.length - 1].P.namespaceURI],
-                    f = ep(c, e);
-                gp(a, Ru, dp, f, d, e);
-                e = Qu[xt[0]];
-                f = ep(c, e);
-                gp(a, Ru, Tu, f, d, e)
-            }),
-            heading: U(as),
-            hotSpot: U(function(a, c) {
-                a.setAttribute("x", c.x);
-                a.setAttribute("y", c.y);
-                a.setAttribute("xunits", c.Af);
-                a.setAttribute("yunits", c.Bf)
-            }),
-            scale: U(Ku)
-        }),
-        Vu = $o(yt, ["color", "scale"]),
-        Wu = $o(yt, {
-            color: U(vu),
-            scale: U(Ku)
-        }),
-        Xu = $o(yt, ["color", "width"]),
-        Yu = $o(yt, {
-            color: U(vu),
-            width: U(as)
-        }),
-        xu = $o(yt, {
-            LinearRing: U(Du)
-        }),
-        Zu = $o(yt, {
-            LineString: U(Du),
-            Point: U(Du),
-            Polygon: U(Gu)
-        }),
-        Au = $o(yt, "name open visibility address phoneNumber description styleUrl Style".split(" ")),
-        Bu = $o(yt, {
-            MultiGeometry: U(function(a, c, d) {
-                a = {
-                    P: a
-                };
-                var e = c.M(),
-                    f, g;
-                "MultiPoint" == e ? (f = c.ce(), g = $u) : "MultiLineString" == e ? (f = c.ad(), g = av) : "MultiPolygon" == e && (f = c.Id(), g = bv);
-                gp(a, Zu, g, f, d)
-            }),
-            LineString: U(Du),
-            LinearRing: U(Du),
-            Point: U(Du),
-            Polygon: U(Gu),
-            Style: U(function(a, c, d) {
-                a = {
-                    P: a
-                };
-                var e = {},
-                    f = c.e,
-                    g = c.c,
-                    h = c.f;
-                c = c.a;
-                null === h || (e.IconStyle = h);
-                null === c || (e.LabelStyle = c);
-                null === g || (e.LineStyle = g);
-                null === f || (e.PolyStyle = f);
-                c = cv[d[d.length - 1].P.namespaceURI];
-                e = ep(e, c);
-                gp(a, dv, dp, e, d, c)
-            }),
-            address: U($r),
-            description: U($r),
-            name: U($r),
-            open: U(Zr),
-            phoneNumber: U($r),
-            styleUrl: U($r),
-            visibility: U(Zr)
-        }),
-        Eu = $o(yt, {
-            coordinates: U(function(a, c, d) {
-                d = d[d.length - 1];
-                var e = d.layout;
-                d = d.stride;
-                var f;
-                "XY" == e || "XYM" == e ? f = 2 : ("XYZ" == e || "XYZM" == e) && (f = 3);
-                var g, h = c.length,
-                    k = "";
-                if (0 < h) {
-                    k += c[0];
-                    for (e = 1; e < f; ++e) k += "," + c[e];
-                    for (g = d; g < h; g += d)
-                        for (k += " " + c[g], e = 1; e < f; ++e) k += "," + c[g + e]
-                }
-                $r(a, k)
-            })
-        }),
-        Hu = $o(yt, {
-            outerBoundaryIs: U(wu),
-            innerBoundaryIs: U(wu)
-        }),
-        ev = $o(yt, {
-            color: U(vu)
-        }),
-        cv = $o(yt, ["IconStyle", "LabelStyle", "LineStyle", "PolyStyle"]),
-        dv = $o(yt, {
-            IconStyle: U(function(a, c, d) {
-                a = {
-                    P: a
-                };
-                var e = {},
-                    f = c.Xa(),
-                    g = c.Dd(),
-                    h = {
-                        href: c.b.f
-                    };
-                if (null !== f) {
-                    h.w = f[0];
-                    h.h = f[1];
-                    var k = c.mb(),
-                        n = c.rb();
-                    null !== n && null !== g && 0 !== n[0] && n[1] !== f[1] && (h.x = n[0], h.y = g[1] - (n[1] + f[1]));
-                    null === k || 0 === k[0] || k[1] === f[1] || (e.hotSpot = {
-                        x: k[0],
-                        Af: "pixels",
-                        y: f[1] - k[1],
-                        Bf: "pixels"
-                    })
-                }
-                e.Icon = h;
-                f = c.l;
-                1 !== f && (e.scale = f);
-                c = c.q;
-                0 !== c && (e.heading = c);
-                c = Su[d[d.length - 1].P.namespaceURI];
-                e = ep(e, c);
-                gp(a, Uu, dp, e, d, c)
-            }),
-            LabelStyle: U(function(a, c, d) {
-                a = {
-                    P: a
-                };
-                var e = {},
-                    f = c.b;
-                null === f || (e.color = f.b);
-                c = c.a;
-                m(c) && 1 !== c && (e.scale = c);
-                c = Vu[d[d.length - 1].P.namespaceURI];
-                e = ep(e, c);
-                gp(a, Wu, dp, e, d, c)
-            }),
-            LineStyle: U(function(a, c, d) {
-                a = {
-                    P: a
-                };
-                var e = Xu[d[d.length - 1].P.namespaceURI];
-                c = ep({
-                    color: c.b,
-                    width: c.a
-                }, e);
-                gp(a, Yu, dp, c, d, e)
-            }),
-            PolyStyle: U(function(a, c, d) {
-                gp({
-                    P: a
-                }, ev, fv, [c.b], d)
-            })
-        });
-
-    function Tu(a, c, d) {
-        return Ao(xt[0], "gx:" + d)
-    }
-
-    function Nu(a, c) {
-        return Ao(c[c.length - 1].P.namespaceURI, "Placemark")
-    }
-
-    function Cu(a, c) {
-        if (null != a) return Ao(c[c.length - 1].P.namespaceURI, Pu[a.M()])
-    }
-    var fv = bp("color"),
-        Fu = bp("coordinates"),
-        Iu = bp("innerBoundaryIs"),
-        $u = bp("Point"),
-        av = bp("LineString"),
-        yu = bp("LinearRing"),
-        bv = bp("Polygon"),
-        Ju = bp("outerBoundaryIs");
-    vt.prototype.a = function(a, c) {
-        c = yr(this, c);
-        var d = Ao(yt[4], "kml");
-        Uo(d, "http://www.w3.org/2000/xmlns/", "xmlns:gx", xt[0]);
-        Uo(d, "http://www.w3.org/2000/xmlns/", "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
-        Uo(d, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", "http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");
-        var e = {
-                P: d
-            },
-            f = {};
-        1 < a.length ? f.Document = a : 1 == a.length && (f.Placemark = a[0]);
-        var g = Lu[d.namespaceURI],
-            f = ep(f, g);
-        gp(e, Ou, dp, f, [c], g);
-        return d
-    };
-
-    function gv() {
-        this.defaultDataProjection = null;
-        this.defaultDataProjection = re("EPSG:4326")
-    }
-    w(gv, Or);
-
-    function hv(a, c) {
-        c[c.length - 1].od[a.getAttribute("k")] = a.getAttribute("v")
-    }
-    var iv = [null],
-        jv = T(iv, {
-            nd: function(a, c) {
-                c[c.length - 1].Ac.push(a.getAttribute("ref"))
-            },
-            tag: hv
-        }),
-        lv = T(iv, {
-            node: function(a, c) {
-                var d = c[0],
-                    e = c[c.length - 1],
-                    f = a.getAttribute("id"),
-                    g = [parseFloat(a.getAttribute("lon")), parseFloat(a.getAttribute("lat"))];
-                e.ng[f] = g;
-                var h = V({
-                    od: {}
-                }, kv, a, c);
-                xb(h.od) || (g = new E(g), zr(g, !1, d), d = new X(g), d.Qb(f), d.t(h.od), e.features.push(d))
-            },
-            way: function(a, c) {
-                for (var d = c[0], e = a.getAttribute("id"), f = V({
-                        Ac: [],
-                        od: {}
-                    }, jv, a, c), g = c[c.length - 1], h = [], k = 0, n = f.Ac.length; k < n; k++) db(h, g.ng[f.Ac[k]]);
-                f.Ac[0] == f.Ac[f.Ac.length - 1] ? (k = new F(null), dl(k, "XY", h, [h.length])) : (k = new O(null), Ym(k, "XY", h));
-                zr(k, !1, d);
-                d = new X(k);
-                d.Qb(e);
-                d.t(f.od);
-                g.features.push(d)
-            }
-        }),
-        kv = T(iv, {
-            tag: hv
-        });
-    gv.prototype.Ob = function(a, c) {
-        var d = xr(this, a, c);
-        return "osm" == a.localName && (d = V({
-            ng: {},
-            features: []
-        }, lv, a, [d]), m(d.features)) ? d.features : []
-    };
-
-    function mv(a) {
-        return a.getAttributeNS("http://www.w3.org/1999/xlink", "href")
-    };
-
-    function nv() {}
-    nv.prototype.c = function(a) {
-        return Io(a) ? this.a(a) : Lo(a) ? this.b(a) : ia(a) ? (a = Vo(a), this.a(a)) : null
-    };
-
-    function ov() {}
-    w(ov, nv);
-    ov.prototype.a = function(a) {
-        for (a = a.firstChild; null !== a; a = a.nextSibling)
-            if (1 == a.nodeType) return this.b(a);
-        return null
-    };
-    ov.prototype.b = function(a) {
-        a = V({}, pv, a, []);
-        return m(a) ? a : null
-    };
-    var qv = [null, "http://www.opengis.net/ows/1.1"],
-        pv = T(qv, {
-            ServiceIdentification: S(function(a, c) {
-                return V({}, rv, a, c)
-            }),
-            ServiceProvider: S(function(a, c) {
-                return V({}, sv, a, c)
-            }),
-            OperationsMetadata: S(function(a, c) {
-                return V({}, tv, a, c)
-            })
-        }),
-        uv = T(qv, {
-            DeliveryPoint: S(Y),
-            City: S(Y),
-            AdministrativeArea: S(Y),
-            PostalCode: S(Y),
-            Country: S(Y),
-            ElectronicMailAddress: S(Y)
-        }),
-        vv = T(qv, {
-            Value: Zo(function(a) {
-                return Y(a)
-            })
-        }),
-        wv = T(qv, {
-            AllowedValues: S(function(a, c) {
-                return V({}, vv, a, c)
-            })
-        }),
-        yv = T(qv, {
-            Phone: S(function(a, c) {
-                return V({}, xv, a, c)
-            }),
-            Address: S(function(a, c) {
-                return V({}, uv, a, c)
-            })
-        }),
-        Av = T(qv, {
-            HTTP: S(function(a, c) {
-                return V({}, zv, a, c)
-            })
-        }),
-        zv = T(qv, {
-            Get: Zo(function(a, c) {
-                var d = mv(a);
-                return m(d) ? V({
-                    href: d
-                }, Bv, a, c) : void 0
-            }),
-            Post: void 0
-        }),
-        Cv = T(qv, {
-            DCP: S(function(a, c) {
-                return V({}, Av, a, c)
-            })
-        }),
-        tv = T(qv, {
-            Operation: function(a, c) {
-                var d = a.getAttribute("name"),
-                    e = V({}, Cv, a, c);
-                m(e) && (c[c.length - 1][d] = e)
-            }
-        }),
-        xv = T(qv, {
-            Voice: S(Y),
-            Facsimile: S(Y)
-        }),
-        Bv = T(qv, {
-            Constraint: Zo(function(a, c) {
-                var d = a.getAttribute("name");
-                return m(d) ? V({
-                    name: d
-                }, wv, a, c) : void 0
-            })
-        }),
-        Dv = T(qv, {
-            IndividualName: S(Y),
-            PositionName: S(Y),
-            ContactInfo: S(function(a, c) {
-                return V({}, yv, a, c)
-            })
-        }),
-        rv = T(qv, {
-            Title: S(Y),
-            ServiceTypeVersion: S(Y),
-            ServiceType: S(Y)
-        }),
-        sv = T(qv, {
-            ProviderName: S(Y),
-            ProviderSite: S(mv),
-            ServiceContact: S(function(a, c) {
-                return V({}, Dv, a, c)
-            })
-        });
-
-    function Ev(a, c, d, e) {
-        var f;
-        m(e) ? f = m(void 0) ? void 0 : 0 : (e = [], f = 0);
-        var g, h;
-        for (g = 0; g < c;)
-            for (h = a[g++], e[f++] = a[g++], e[f++] = h, h = 2; h < d; ++h) e[f++] = a[g++];
-        e.length = f
-    };
-
-    function Fv(a) {
-        a = m(a) ? a : {};
-        this.defaultDataProjection = null;
-        this.defaultDataProjection = re("EPSG:4326");
-        this.b = m(a.factor) ? a.factor : 1E5;
-        this.a = m(a.geometryLayout) ? a.geometryLayout : "XY"
-    }
-    w(Fv, Ws);
-
-    function Gv(a, c, d) {
-        d = m(d) ? d : 1E5;
-        var e, f = Array(c);
-        for (e = 0; e < c; ++e) f[e] = 0;
-        var g, h;
-        g = 0;
-        for (h = a.length; g < h;)
-            for (e = 0; e < c; ++e, ++g) {
-                var k = a[g],
-                    n = k - f[e];
-                f[e] = k;
-                a[g] = n
-            }
-        return Hv(a, d)
-    }
-
-    function Iv(a, c, d) {
-        var e = m(d) ? d : 1E5,
-            f = Array(c);
-        for (d = 0; d < c; ++d) f[d] = 0;
-        a = Jv(a, e);
-        var g, e = 0;
-        for (g = a.length; e < g;)
-            for (d = 0; d < c; ++d, ++e) f[d] += a[e], a[e] = f[d];
-        return a
-    }
-
-    function Hv(a, c) {
-        var d = m(c) ? c : 1E5,
-            e, f;
-        e = 0;
-        for (f = a.length; e < f; ++e) a[e] = Math.round(a[e] * d);
-        d = 0;
-        for (e = a.length; d < e; ++d) f = a[d], a[d] = 0 > f ? ~(f << 1) : f << 1;
-        d = "";
-        e = 0;
-        for (f = a.length; e < f; ++e) {
-            for (var g = a[e], h = void 0, k = ""; 32 <= g;) h = (32 | g & 31) + 63, k += String.fromCharCode(h), g >>= 5;
-            h = g + 63;
-            k += String.fromCharCode(h);
-            d += k
-        }
-        return d
-    }
-
-    function Jv(a, c) {
-        var d = m(c) ? c : 1E5,
-            e = [],
-            f = 0,
-            g = 0,
-            h, k;
-        h = 0;
-        for (k = a.length; h < k; ++h) {
-            var n = a.charCodeAt(h) - 63,
-                f = f | (n & 31) << g;
-            32 > n ? (e.push(f), g = f = 0) : g += 5
-        }
-        f = 0;
-        for (g = e.length; f < g; ++f) h = e[f], e[f] = h & 1 ? ~(h >> 1) : h >> 1;
-        f = 0;
-        for (g = e.length; f < g; ++f) e[f] /= d;
-        return e
-    }
-    l = Fv.prototype;
-    l.hd = function(a, c) {
-        var d = this.kd(a, c);
-        return new X(d)
-    };
-    l.pf = function(a, c) {
-        return [this.hd(a, c)]
-    };
-    l.kd = function(a, c) {
-        var d = xk(this.a),
-            e = Iv(a, d, this.b);
-        Ev(e, e.length, d, e);
-        d = Mk(e, 0, e.length, d);
-        return zr(new O(d, this.a), !1, yr(this, c))
-    };
-    l.ye = function(a, c) {
-        var d = a.Q();
-        return null != d ? this.rd(d, c) : ""
-    };
-    l.Mh = function(a, c) {
-        return this.ye(a[0], c)
-    };
-    l.rd = function(a, c) {
-        a = zr(a, !0, yr(this, c));
-        var d = a.j,
-            e = a.s;
-        Ev(d, d.length, e, d);
-        return Gv(d, e, this.b)
-    };
-
-    function Kv(a) {
-        a = m(a) ? a : {};
-        this.defaultDataProjection = null;
-        this.defaultDataProjection = re(null != a.defaultDataProjection ? a.defaultDataProjection : "EPSG:4326")
-    }
-    w(Kv, Ar);
-
-    function Lv(a, c) {
-        var d = [],
-            e, f, g, h;
-        g = 0;
-        for (h = a.length; g < h; ++g) e = a[g], 0 < g && d.pop(), 0 <= e ? f = c[e] : f = c[~e].slice().reverse(), d.push.apply(d, f);
-        e = 0;
-        for (f = d.length; e < f; ++e) d[e] = d[e].slice();
-        return d
-    }
-
-    function Mv(a, c, d, e, f) {
-        a = a.geometries;
-        var g = [],
-            h, k;
-        h = 0;
-        for (k = a.length; h < k; ++h) g[h] = Nv(a[h], c, d, e, f);
-        return g
-    }
-
-    function Nv(a, c, d, e, f) {
-        var g = a.type,
-            h = Ov[g];
-        c = "Point" === g || "MultiPoint" === g ? h(a, d, e) : h(a, c);
-        d = new X;
-        d.La(zr(c, !1, f));
-        m(a.id) && d.Qb(a.id);
-        m(a.properties) && d.t(a.properties);
-        return d
-    }
-    Kv.prototype.of = function(a, c) {
-        if ("Topology" == a.type) {
-            var d, e = null,
-                f = null;
-            m(a.transform) && (d = a.transform, e = d.scale, f = d.translate);
-            var g = a.arcs;
-            if (m(d)) {
-                d = e;
-                var h = f,
-                    k, n;
-                k = 0;
-                for (n = g.length; k < n; ++k)
-                    for (var p = g[k], q = d, r = h, t = 0, u = 0, A = void 0, z = void 0, D = void 0, z = 0, D = p.length; z < D; ++z) A = p[z], t += A[0], u += A[1], A[0] = t, A[1] = u, Pv(A, q, r)
-            }
-            d = [];
-            h = sb(a.objects);
-            k = 0;
-            for (n = h.length; k < n; ++k) "GeometryCollection" === h[k].type ? (p = h[k], d.push.apply(d, Mv(p, g, e, f, c))) : (p = h[k], d.push(Nv(p, g, e, f, c)));
-            return d
-        }
-        return []
-    };
-
-    function Pv(a, c, d) {
-        a[0] = a[0] * c[0] + d[0];
-        a[1] = a[1] * c[1] + d[1]
-    }
-    Kv.prototype.za = function() {
-        return this.defaultDataProjection
-    };
-    var Ov = {
-        Point: function(a, c, d) {
-            a = a.coordinates;
-            null === c || null === d || Pv(a, c, d);
-            return new E(a)
-        },
-        LineString: function(a, c) {
-            var d = Lv(a.arcs, c);
-            return new O(d)
-        },
-        Polygon: function(a, c) {
-            var d = [],
-                e, f;
-            e = 0;
-            for (f = a.arcs.length; e < f; ++e) d[e] = Lv(a.arcs[e], c);
-            return new F(d)
-        },
-        MultiPoint: function(a, c, d) {
-            a = a.coordinates;
-            var e, f;
-            if (null !== c && null !== d)
-                for (e = 0, f = a.length; e < f; ++e) Pv(a[e], c, d);
-            return new an(a)
-        },
-        MultiLineString: function(a, c) {
-            var d = [],
-                e, f;
-            e = 0;
-            for (f = a.arcs.length; e < f; ++e) d[e] = Lv(a.arcs[e], c);
-            return new Q(d)
-        },
-        MultiPolygon: function(a, c) {
-            var d = [],
-                e, f, g, h, k, n;
-            k = 0;
-            for (n = a.arcs.length; k < n; ++k) {
-                e = a.arcs[k];
-                f = [];
-                g = 0;
-                for (h = e.length; g < h; ++g) f[g] = Lv(e[g], c);
-                d[k] = f
-            }
-            return new R(d)
-        }
-    };
-
-    function Qv(a) {
-        a = m(a) ? a : {};
-        this.e = a.featureType;
-        this.c = a.featureNS;
-        this.b = m(a.gmlFormat) ? a.gmlFormat : new cs;
-        this.d = m(a.schemaLocation) ? a.schemaLocation : "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd";
-        this.defaultDataProjection = null
-    }
-    w(Qv, Or);
-    Qv.prototype.Ob = function(a, c) {
-        var d = {
-            featureType: this.e,
-            featureNS: this.c
-        };
-        Fb(d, xr(this, a, m(c) ? c : {}));
-        d = [d];
-        this.b.b["http://www.opengis.net/gml"].featureMember = Xo(Rr.prototype.jd);
-        d = V([], this.b.b, a, d, this.b);
-        m(d) || (d = []);
-        return d
-    };
-    Qv.prototype.g = function(a) {
-        if (Io(a)) return Rv(a);
-        if (Lo(a)) return V({}, Sv, a, []);
-        if (ia(a)) return a = Vo(a), Rv(a)
-    };
-    Qv.prototype.f = function(a) {
-        if (Io(a)) return Tv(this, a);
-        if (Lo(a)) return Uv(this, a);
-        if (ia(a)) return a = Vo(a), Tv(this, a)
-    };
-
-    function Tv(a, c) {
-        for (var d = c.firstChild; null !== d; d = d.nextSibling)
-            if (1 == d.nodeType) return Uv(a, d)
-    }
-    var Vv = {
-        "http://www.opengis.net/gml": {
-            boundedBy: S(Rr.prototype.qe, "bounds")
-        }
-    };
-
-    function Uv(a, c) {
-        var d = {},
-            e = Yr(c.getAttribute("numberOfFeatures"));
-        d.numberOfFeatures = e;
-        return V(d, Vv, c, [], a.b)
-    }
-    var Wv = {
-            "http://www.opengis.net/wfs": {
-                totalInserted: S(Xr),
-                totalUpdated: S(Xr),
-                totalDeleted: S(Xr)
-            }
-        },
-        Xv = {
-            "http://www.opengis.net/ogc": {
-                FeatureId: Xo(function(a) {
-                    return a.getAttribute("fid")
-                })
-            }
-        },
-        Yv = {
-            "http://www.opengis.net/wfs": {
-                Feature: function(a, c) {
-                    fp(Xv, a, c)
-                }
-            }
-        },
-        Sv = {
-            "http://www.opengis.net/wfs": {
-                TransactionSummary: S(function(a, c) {
-                    return V({}, Wv, a, c)
-                }, "transactionSummary"),
-                InsertResults: S(function(a, c) {
-                    return V([], Yv, a, c)
-                }, "insertIds")
-            }
-        };
-
-    function Rv(a) {
-        for (a = a.firstChild; null !== a; a = a.nextSibling)
-            if (1 == a.nodeType) return V({}, Sv, a, [])
-    }
-    var Zv = {
-        "http://www.opengis.net/wfs": {
-            PropertyName: U($r)
-        }
-    };
-
-    function $v(a, c) {
-        var d = Ao("http://www.opengis.net/ogc", "Filter"),
-            e = Ao("http://www.opengis.net/ogc", "FeatureId");
-        d.appendChild(e);
-        e.setAttribute("fid", c);
-        a.appendChild(d)
-    }
-    var aw = {
-            "http://www.opengis.net/wfs": {
-                Insert: U(function(a, c, d) {
-                    var e = d[d.length - 1],
-                        e = Ao(e.featureNS, e.featureType);
-                    a.appendChild(e);
-                    cs.prototype.Lh(e, c, d)
-                }),
-                Update: U(function(a, c, d) {
-                    var e = d[d.length - 1],
-                        f = e.featureType,
-                        g = e.featurePrefix,
-                        g = m(g) ? g : "feature",
-                        h = e.featureNS;
-                    a.setAttribute("typeName", g + ":" + f);
-                    Uo(a, "http://www.w3.org/2000/xmlns/", "xmlns:" + g, h);
-                    f = c.$;
-                    if (m(f)) {
-                        for (var g = c.C(), h = [], k = 0, n = g.length; k < n; k++) {
-                            var p = c.get(g[k]);
-                            m(p) && h.push({
-                                name: g[k],
-                                value: p
-                            })
-                        }
-                        gp({
-                            P: a,
-                            srsName: e.srsName
-                        }, aw, bp("Property"), h, d);
-                        $v(a, f)
-                    }
-                }),
-                Delete: U(function(a, c, d) {
-                    var e = d[d.length - 1];
-                    d = e.featureType;
-                    var f = e.featurePrefix,
-                        f = m(f) ? f : "feature",
-                        e = e.featureNS;
-                    a.setAttribute("typeName", f + ":" + d);
-                    Uo(a, "http://www.w3.org/2000/xmlns/", "xmlns:" + f, e);
-                    c = c.$;
-                    m(c) && $v(a, c)
-                }),
-                Property: U(function(a, c, d) {
-                    var e = Ao("http://www.opengis.net/wfs", "Name");
-                    a.appendChild(e);
-                    $r(e, c.name);
-                    null != c.value && (e = Ao("http://www.opengis.net/wfs", "Value"), a.appendChild(e), c.value instanceof uk ? cs.prototype.Ae(e, c.value, d) : $r(e, c.value))
-                }),
-                Native: U(function(a, c) {
-                    m(c.vo) && a.setAttribute("vendorId", c.vo);
-                    m(c.Tn) && a.setAttribute("safeToIgnore", c.Tn);
-                    m(c.value) && $r(a, c.value)
-                })
-            }
-        },
-        bw = {
-            "http://www.opengis.net/wfs": {
-                Query: U(function(a, c, d) {
-                    var e = d[d.length - 1],
-                        f = e.featurePrefix,
-                        g = e.featureNS,
-                        h = e.propertyNames,
-                        k = e.srsName;
-                    a.setAttribute("typeName", (m(f) ? f + ":" : "") + c);
-                    m(k) && a.setAttribute("srsName", k);
-                    m(g) && Uo(a, "http://www.w3.org/2000/xmlns/", "xmlns:" + f, g);
-                    c = Db(e);
-                    c.P = a;
-                    gp(c, Zv, bp("PropertyName"), h, d);
-                    e = e.bbox;
-                    m(e) && (h = Ao("http://www.opengis.net/ogc", "Filter"), c = d[d.length - 1].geometryName, f = Ao("http://www.opengis.net/ogc", "BBOX"), h.appendChild(f), g = Ao("http://www.opengis.net/ogc", "PropertyName"), $r(g, c), f.appendChild(g), cs.prototype.Ae(f, e, d), a.appendChild(h))
-                })
-            }
-        };
-    Qv.prototype.i = function(a) {
-        var c = Ao("http://www.opengis.net/wfs", "GetFeature");
-        c.setAttribute("service", "WFS");
-        c.setAttribute("version", "1.1.0");
-        m(a) && (m(a.handle) && c.setAttribute("handle", a.handle), m(a.outputFormat) && c.setAttribute("outputFormat", a.outputFormat), m(a.maxFeatures) && c.setAttribute("maxFeatures", a.maxFeatures), m(a.resultType) && c.setAttribute("resultType", a.resultType), m(a.oo) && c.setAttribute("startIndex", a.oo), m(a.count) && c.setAttribute("count", a.count));
-        Uo(c, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.d);
-        var d = a.featureTypes;
-        a = [{
-            P: c,
-            srsName: a.srsName,
-            featureNS: m(a.featureNS) ? a.featureNS : this.c,
-            featurePrefix: a.featurePrefix,
-            geometryName: a.geometryName,
-            bbox: a.bbox,
-            bh: m(a.bh) ? a.bh : []
-        }];
-        var e = Db(a[a.length - 1]);
-        e.P = c;
-        gp(e, bw, bp("Query"), d, a);
-        return c
-    };
-    Qv.prototype.o = function(a, c, d, e) {
-        var f = [],
-            g = Ao("http://www.opengis.net/wfs", "Transaction");
-        g.setAttribute("service", "WFS");
-        g.setAttribute("version", "1.1.0");
-        var h, k;
-        m(e) && (h = m(e.gmlOptions) ? e.gmlOptions : {}, m(e.handle) && g.setAttribute("handle", e.handle));
-        Uo(g, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.d);
-        null != a && (k = {
-            P: g,
-            featureNS: e.featureNS,
-            featureType: e.featureType,
-            featurePrefix: e.featurePrefix
-        }, Fb(k, h), gp(k, aw, bp("Insert"), a, f));
-        null != c && (k = {
-            P: g,
-            featureNS: e.featureNS,
-            featureType: e.featureType,
-            featurePrefix: e.featurePrefix
-        }, Fb(k, h), gp(k, aw, bp("Update"), c, f));
-        null != d && gp({
-            P: g,
-            featureNS: e.featureNS,
-            featureType: e.featureType,
-            featurePrefix: e.featurePrefix
-        }, aw, bp("Delete"), d, f);
-        m(e.nativeElements) && gp({
-            P: g,
-            featureNS: e.featureNS,
-            featureType: e.featureType,
-            featurePrefix: e.featurePrefix
-        }, aw, bp("Native"), e.nativeElements, f);
-        return g
-    };
-    Qv.prototype.sf = function(a) {
-        for (a = a.firstChild; null !== a; a = a.nextSibling)
-            if (1 == a.nodeType) return this.te(a);
-        return null
-    };
-    Qv.prototype.te = function(a) {
-        if (null != a.firstElementChild && null != a.firstElementChild.firstElementChild)
-            for (a = a.firstElementChild.firstElementChild, a = a.firstElementChild; null !== a; a = a.nextElementSibling)
-                if (0 !== a.childNodes.length && (1 !== a.childNodes.length || 3 !== a.firstChild.nodeType)) {
-                    var c = [{}];
-                    this.b.qe(a, c);
-                    return re(c.pop().srsName)
-                }
-        return null
-    };
-
-    function cw(a) {
-        a = m(a) ? a : {};
-        this.defaultDataProjection = null;
-        this.b = m(a.splitCollection) ? a.splitCollection : !1
-    }
-    w(cw, Ws);
-
-    function dw(a) {
-        a = a.K();
-        return 0 == a.length ? "" : a[0] + " " + a[1]
-    }
-
-    function ew(a) {
-        a = a.K();
-        for (var c = [], d = 0, e = a.length; d < e; ++d) c.push(a[d][0] + " " + a[d][1]);
-        return c.join(",")
-    }
-
-    function fw(a) {
-        var c = [];
-        a = a.Ed();
-        for (var d = 0, e = a.length; d < e; ++d) c.push("(" + ew(a[d]) + ")");
-        return c.join(",")
-    }
-
-    function gw(a) {
-        var c = a.M();
-        a = (0, hw[c])(a);
-        c = c.toUpperCase();
-        return 0 === a.length ? c + " EMPTY" : c + "(" + a + ")"
-    }
-    var hw = {
-        Point: dw,
-        LineString: ew,
-        Polygon: fw,
-        MultiPoint: function(a) {
-            var c = [];
-            a = a.ce();
-            for (var d = 0, e = a.length; d < e; ++d) c.push("(" + dw(a[d]) + ")");
-            return c.join(",")
-        },
-        MultiLineString: function(a) {
-            var c = [];
-            a = a.ad();
-            for (var d = 0, e = a.length; d < e; ++d) c.push("(" + ew(a[d]) + ")");
-            return c.join(",")
-        },
-        MultiPolygon: function(a) {
-            var c = [];
-            a = a.Id();
-            for (var d = 0, e = a.length; d < e; ++d) c.push("(" + fw(a[d]) + ")");
-            return c.join(",")
-        },
-        GeometryCollection: function(a) {
-            var c = [];
-            a = a.Vf();
-            for (var d = 0, e = a.length; d < e; ++d) c.push(gw(a[d]));
-            return c.join(",")
-        }
-    };
-    l = cw.prototype;
-    l.hd = function(a, c) {
-        var d = this.kd(a, c);
-        if (m(d)) {
-            var e = new X;
-            e.La(d);
-            return e
-        }
-        return null
-    };
-    l.pf = function(a, c) {
-        var d = [],
-            e = this.kd(a, c);
-        this.b && "GeometryCollection" == e.M() ? d = e.d : d = [e];
-        for (var f = [], g = 0, h = d.length; g < h; ++g) e = new X, e.La(d[g]), f.push(e);
-        return f
-    };
-    l.kd = function(a, c) {
-        var d;
-        d = new iw(new jw(a));
-        d.b = kw(d.a);
-        d = lw(d);
-        return m(d) ? zr(d, !1, c) : null
-    };
-    l.ye = function(a, c) {
-        var d = a.Q();
-        return m(d) ? this.rd(d, c) : ""
-    };
-    l.Mh = function(a, c) {
-        if (1 == a.length) return this.ye(a[0], c);
-        for (var d = [], e = 0, f = a.length; e < f; ++e) d.push(a[e].Q());
-        d = new Rm(d);
-        return this.rd(d, c)
-    };
-    l.rd = function(a, c) {
-        return gw(zr(a, !0, c))
-    };
-
-    function jw(a) {
-        this.a = a;
-        this.b = -1
-    }
-
-    function mw(a, c) {
-        var d = m(c) ? c : !1;
-        return "0" <= a && "9" >= a || "." == a && !d
-    }
-
-    function kw(a) {
-        var c = a.a.charAt(++a.b),
-            d = {
-                position: a.b,
-                value: c
-            };
-        if ("(" == c) d.type = 2;
-        else if ("," == c) d.type = 5;
-        else if (")" == c) d.type = 3;
-        else if (mw(c) || "-" == c) {
-            d.type = 4;
-            var e, c = a.b,
-                f = !1;
-            do "." == e && (f = !0), e = a.a.charAt(++a.b); while (mw(e, f));
-            a = parseFloat(a.a.substring(c, a.b--));
-            d.value = a
-        } else if ("a" <= c && "z" >= c || "A" <= c && "Z" >= c) {
-            d.type = 1;
-            c = a.b;
-            do e = a.a.charAt(++a.b); while ("a" <= e && "z" >= e || "A" <= e && "Z" >= e);
-            a = a.a.substring(c, a.b--).toUpperCase();
-            d.value = a
-        } else {
-            if (" " == c || "\t" == c || "\r" == c || "\n" == c) return kw(a);
-            if ("" === c) d.type = 6;
-            else throw Error("Unexpected character: " + c);
-        }
-        return d
-    }
-
-    function iw(a) {
-        this.a = a
-    }
-    l = iw.prototype;
-    l.match = function(a) {
-        if (a = this.b.type == a) this.b = kw(this.a);
-        return a
-    };
-
-    function lw(a) {
-        var c = a.b;
-        if (a.match(1)) {
-            var d = c.value;
-            if ("GEOMETRYCOLLECTION" == d) {
-                a: {
-                    if (a.match(2)) {
-                        c = [];
-                        do c.push(lw(a)); while (a.match(5));
-                        if (a.match(3)) {
-                            a = c;
-                            break a
-                        }
-                    } else if (nw(a)) {
-                        a = [];
-                        break a
-                    }
-                    throw Error(ow(a));
-                }
-                return new Rm(a)
-            }
-            var e = pw[d],
-                c = qw[d];
-            if (!m(e) || !m(c)) throw Error("Invalid geometry type: " + d);
-            a = e.call(a);
-            return new c(a)
-        }
-        throw Error(ow(a));
-    }
-    l.lf = function() {
-        if (this.match(2)) {
-            var a = rw(this);
-            if (this.match(3)) return a
-        } else if (nw(this)) return null;
-        throw Error(ow(this));
-    };
-    l.kf = function() {
-        if (this.match(2)) {
-            var a = sw(this);
-            if (this.match(3)) return a
-        } else if (nw(this)) return [];
-        throw Error(ow(this));
-    };
-    l.mf = function() {
-        if (this.match(2)) {
-            var a = tw(this);
-            if (this.match(3)) return a
-        } else if (nw(this)) return [];
-        throw Error(ow(this));
-    };
-    l.kn = function() {
-        if (this.match(2)) {
-            var a;
-            if (2 == this.b.type)
-                for (a = [this.lf()]; this.match(5);) a.push(this.lf());
-            else a = sw(this);
-            if (this.match(3)) return a
-        } else if (nw(this)) return [];
-        throw Error(ow(this));
-    };
-    l.jn = function() {
-        if (this.match(2)) {
-            var a = tw(this);
-            if (this.match(3)) return a
-        } else if (nw(this)) return [];
-        throw Error(ow(this));
-    };
-    l.ln = function() {
-        if (this.match(2)) {
-            for (var a = [this.mf()]; this.match(5);) a.push(this.mf());
-            if (this.match(3)) return a
-        } else if (nw(this)) return [];
-        throw Error(ow(this));
-    };
-
-    function rw(a) {
-        for (var c = [], d = 0; 2 > d; ++d) {
-            var e = a.b;
-            if (a.match(4)) c.push(e.value);
-            else break
-        }
-        if (2 == c.length) return c;
-        throw Error(ow(a));
-    }
-
-    function sw(a) {
-        for (var c = [rw(a)]; a.match(5);) c.push(rw(a));
-        return c
-    }
-
-    function tw(a) {
-        for (var c = [a.kf()]; a.match(5);) c.push(a.kf());
-        return c
-    }
-
-    function nw(a) {
-        var c = 1 == a.b.type && "EMPTY" == a.b.value;
-        c && (a.b = kw(a.a));
-        return c
-    }
-
-    function ow(a) {
-        return "Unexpected `" + a.b.value + "` at position " + a.b.position + " in `" + a.a.a + "`"
-    }
-    var qw = {
-            POINT: E,
-            LINESTRING: O,
-            POLYGON: F,
-            MULTIPOINT: an,
-            MULTILINESTRING: Q,
-            MULTIPOLYGON: R
-        },
-        pw = {
-            POINT: iw.prototype.lf,
-            LINESTRING: iw.prototype.kf,
-            POLYGON: iw.prototype.mf,
-            MULTIPOINT: iw.prototype.kn,
-            MULTILINESTRING: iw.prototype.jn,
-            MULTIPOLYGON: iw.prototype.ln
-        };
-
-    function uw() {
-        this.version = void 0
-    }
-    w(uw, nv);
-    uw.prototype.a = function(a) {
-        for (a = a.firstChild; null !== a; a = a.nextSibling)
-            if (1 == a.nodeType) return this.b(a);
-        return null
-    };
-    uw.prototype.b = function(a) {
-        this.version = Ca(a.getAttribute("version"));
-        a = V({
-            version: this.version
-        }, vw, a, []);
-        return m(a) ? a : null
-    };
-
-    function ww(a, c) {
-        return V({}, xw, a, c)
-    }
-
-    function yw(a, c) {
-        return V({}, zw, a, c)
-    }
-
-    function Aw(a, c) {
-        var d = ww(a, c);
-        if (m(d)) {
-            var e = [Yr(a.getAttribute("width")), Yr(a.getAttribute("height"))];
-            d.size = e;
-            return d
-        }
-    }
-
-    function Bw(a, c) {
-        return V([], Cw, a, c)
-    }
-    var Dw = [null, "http://www.opengis.net/wms"],
-        vw = T(Dw, {
-            Service: S(function(a, c) {
-                return V({}, Ew, a, c)
-            }),
-            Capability: S(function(a, c) {
-                return V({}, Fw, a, c)
-            })
-        }),
-        Fw = T(Dw, {
-            Request: S(function(a, c) {
-                return V({}, Gw, a, c)
-            }),
-            Exception: S(function(a, c) {
-                return V([], Hw, a, c)
-            }),
-            Layer: S(function(a, c) {
-                return V({}, Iw, a, c)
-            })
-        }),
-        Ew = T(Dw, {
-            Name: S(Y),
-            Title: S(Y),
-            Abstract: S(Y),
-            KeywordList: S(Bw),
-            OnlineResource: S(mv),
-            ContactInformation: S(function(a, c) {
-                return V({}, Jw, a, c)
-            }),
-            Fees: S(Y),
-            AccessConstraints: S(Y),
-            LayerLimit: S(Xr),
-            MaxWidth: S(Xr),
-            MaxHeight: S(Xr)
-        }),
-        Jw = T(Dw, {
-            ContactPersonPrimary: S(function(a, c) {
-                return V({}, Kw, a, c)
-            }),
-            ContactPosition: S(Y),
-            ContactAddress: S(function(a, c) {
-                return V({}, Lw, a, c)
-            }),
-            ContactVoiceTelephone: S(Y),
-            ContactFacsimileTelephone: S(Y),
-            ContactElectronicMailAddress: S(Y)
-        }),
-        Kw = T(Dw, {
-            ContactPerson: S(Y),
-            ContactOrganization: S(Y)
-        }),
-        Lw = T(Dw, {
-            AddressType: S(Y),
-            Address: S(Y),
-            City: S(Y),
-            StateOrProvince: S(Y),
-            PostCode: S(Y),
-            Country: S(Y)
-        }),
-        Hw = T(Dw, {
-            Format: Xo(Y)
-        }),
-        Iw = T(Dw, {
-            Name: S(Y),
-            Title: S(Y),
-            Abstract: S(Y),
-            KeywordList: S(Bw),
-            CRS: Zo(Y),
-            EX_GeographicBoundingBox: S(function(a, c) {
-                var d = V({}, Mw, a, c);
-                if (m(d)) {
-                    var e = d.westBoundLongitude,
-                        f = d.southBoundLatitude,
-                        g = d.eastBoundLongitude,
-                        d = d.northBoundLatitude;
-                    return m(e) && m(f) && m(g) && m(d) ? [e, f, g, d] : void 0
-                }
-            }),
-            BoundingBox: Zo(function(a) {
-                var c = [Wr(a.getAttribute("minx")), Wr(a.getAttribute("miny")), Wr(a.getAttribute("maxx")), Wr(a.getAttribute("maxy"))],
-                    d = [Wr(a.getAttribute("resx")), Wr(a.getAttribute("resy"))];
-                return {
-                    crs: a.getAttribute("CRS"),
-                    extent: c,
-                    res: d
-                }
-            }),
-            Dimension: Zo(function(a) {
-                return {
-                    name: a.getAttribute("name"),
-                    units: a.getAttribute("units"),
-                    unitSymbol: a.getAttribute("unitSymbol"),
-                    "default": a.getAttribute("default"),
-                    multipleValues: Tr(a.getAttribute("multipleValues")),
-                    nearestValue: Tr(a.getAttribute("nearestValue")),
-                    current: Tr(a.getAttribute("current")),
-                    values: Y(a)
-                }
-            }),
-            Attribution: S(function(a, c) {
-                return V({}, Nw, a, c)
-            }),
-            AuthorityURL: Zo(function(a, c) {
-                var d = ww(a, c);
-                if (m(d)) return d.name = a.getAttribute("name"), d
-            }),
-            Identifier: Zo(Y),
-            MetadataURL: Zo(function(a, c) {
-                var d = ww(a, c);
-                if (m(d)) return d.type = a.getAttribute("type"),
-                    d
-            }),
-            DataURL: Zo(ww),
-            FeatureListURL: Zo(ww),
-            Style: Zo(function(a, c) {
-                return V({}, Ow, a, c)
-            }),
-            MinScaleDenominator: S(Vr),
-            MaxScaleDenominator: S(Vr),
-            Layer: Zo(function(a, c) {
-                var d = c[c.length - 1],
-                    e = V({}, Iw, a, c);
-                if (m(e)) {
-                    var f = Tr(a.getAttribute("queryable"));
-                    m(f) || (f = d.queryable);
-                    e.queryable = m(f) ? f : !1;
-                    f = Yr(a.getAttribute("cascaded"));
-                    m(f) || (f = d.cascaded);
-                    e.cascaded = f;
-                    f = Tr(a.getAttribute("opaque"));
-                    m(f) || (f = d.opaque);
-                    e.opaque = m(f) ? f : !1;
-                    f = Tr(a.getAttribute("noSubsets"));
-                    m(f) || (f = d.noSubsets);
-                    e.noSubsets = m(f) ? f : !1;
-                    f = Wr(a.getAttribute("fixedWidth"));
-                    m(f) || (f = d.fixedWidth);
-                    e.fixedWidth = f;
-                    f = Wr(a.getAttribute("fixedHeight"));
-                    m(f) || (f = d.fixedHeight);
-                    e.fixedHeight = f;
-                    Sa(["Style", "CRS", "AuthorityURL"], function(a) {
-                        var c = d[a];
-                        if (m(c)) {
-                            var f = Cb(e, a),
-                                f = f.concat(c);
-                            e[a] = f
-                        }
-                    });
-                    Sa("EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" "), function(a) {
-                        m(e[a]) || (e[a] = d[a])
-                    });
-                    return e
-                }
-            })
-        }),
-        Nw = T(Dw, {
-            Title: S(Y),
-            OnlineResource: S(mv),
-            LogoURL: S(Aw)
-        }),
-        Mw = T(Dw, {
-            westBoundLongitude: S(Vr),
-            eastBoundLongitude: S(Vr),
-            southBoundLatitude: S(Vr),
-            northBoundLatitude: S(Vr)
-        }),
-        Gw = T(Dw, {
-            GetCapabilities: S(yw),
-            GetMap: S(yw),
-            GetFeatureInfo: S(yw)
-        }),
-        zw = T(Dw, {
-            Format: Zo(Y),
-            DCPType: Zo(function(a, c) {
-                return V({}, Pw, a, c)
-            })
-        }),
-        Pw = T(Dw, {
-            HTTP: S(function(a, c) {
-                return V({}, Qw, a, c)
-            })
-        }),
-        Qw = T(Dw, {
-            Get: S(ww),
-            Post: S(ww)
-        }),
-        Ow = T(Dw, {
-            Name: S(Y),
-            Title: S(Y),
-            Abstract: S(Y),
-            LegendURL: Zo(Aw),
-            StyleSheetURL: S(ww),
-            StyleURL: S(ww)
-        }),
-        xw = T(Dw, {
-            Format: S(Y),
-            OnlineResource: S(mv)
-        }),
-        Cw = T(Dw, {
-            Keyword: Xo(Y)
-        });
-
-    function Rw() {
-        this.c = "http://mapserver.gis.umn.edu/mapserver";
-        this.b = new ls;
-        this.defaultDataProjection = null
-    }
-    w(Rw, Or);
-
-    function Sw(a, c, d) {
-        c.namespaceURI = a.c;
-        var e = Fo(c),
-            f = [];
-        if (0 === c.childNodes.length) return f;
-        "msGMLOutput" == e && Sa(c.childNodes, function(a) {
-            if (1 === a.nodeType) {
-                var c = d[0],
-                    e = a.localName,
-                    n = RegExp,
-                    p;
-                p = "_layer".replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08");
-                n = new n(p, "");
-                e = e.replace(n, "") + "_feature";
-                c.featureType = e;
-                c.featureNS = this.c;
-                n = {};
-                n[e] = Xo(this.b.nf, this.b);
-                c = T([c.featureNS, null], n);
-                a.namespaceURI = this.c;
-                a = V([], c, a, d, this.b);
-                m(a) && db(f, a)
-            }
-        }, a);
-        "FeatureCollection" == e && (a = V([], a.b.b, c, [{}], a.b), m(a) && (f = a));
-        return f
-    }
-    Rw.prototype.Ob = function(a, c) {
-        var d = {
-            featureType: this.featureType,
-            featureNS: this.featureNS
-        };
-        m(c) && Fb(d, xr(this, a, c));
-        return Sw(this, a, [d])
-    };
-
-    function Tw() {
-        this.d = new ov
-    }
-    w(Tw, nv);
-    Tw.prototype.a = function(a) {
-        for (a = a.firstChild; null !== a; a = a.nextSibling)
-            if (1 == a.nodeType) return this.b(a);
-        return null
-    };
-    Tw.prototype.b = function(a) {
-        this.version = Ca(a.getAttribute("version"));
-        var c = this.d.b(a);
-        if (!m(c)) return null;
-        c.version = this.version;
-        c = V(c, Uw, a, []);
-        return m(c) ? c : null
-    };
-
-    function Vw(a) {
-        var c = Y(a).split(" ");
-        if (m(c) && 2 == c.length) return a = +c[0], c = +c[1], isNaN(a) || isNaN(c) ? void 0 : [a, c]
-    }
-    var Ww = [null, "http://www.opengis.net/wmts/1.0"],
-        Xw = [null, "http://www.opengis.net/ows/1.1"],
-        Uw = T(Ww, {
-            Contents: S(function(a, c) {
-                return V({}, Yw, a, c)
-            })
-        }),
-        Yw = T(Ww, {
-            Layer: Zo(function(a, c) {
-                return V({}, Zw, a, c)
-            }),
-            TileMatrixSet: Zo(function(a, c) {
-                return V({}, $w, a, c)
-            })
-        }),
-        Zw = T(Ww, {
-            Style: Zo(function(a, c) {
-                var d = V({}, ax, a, c);
-                if (m(d)) {
-                    var e = "true" === a.getAttribute("isDefault");
-                    d.isDefault = e;
-                    return d
-                }
-            }),
-            Format: Zo(Y),
-            TileMatrixSetLink: Zo(function(a, c) {
-                return V({}, bx, a, c)
-            }),
-            ResourceURL: Zo(function(a) {
-                var c = a.getAttribute("format"),
-                    d = a.getAttribute("template");
-                a = a.getAttribute("resourceType");
-                var e = {};
-                m(c) && (e.format = c);
-                m(d) && (e.template = d);
-                m(a) && (e.resourceType = a);
-                return e
-            })
-        }, T(Xw, {
-            Title: S(Y),
-            Abstract: S(Y),
-            WGS84BoundingBox: S(function(a, c) {
-                var d = V([], cx, a, c);
-                return 2 != d.length ? void 0 : Jd(d)
-            }),
-            Identifier: S(Y)
-        })),
-        ax = T(Ww, {
-            LegendURL: Zo(function(a) {
-                var c = {};
-                c.format = a.getAttribute("format");
-                c.href = mv(a);
-                return c
-            })
-        }, T(Xw, {
-            Title: S(Y),
-            Identifier: S(Y)
-        })),
-        bx = T(Ww, {
-            TileMatrixSet: S(Y)
-        }),
-        cx = T(Xw, {
-            LowerCorner: Xo(Vw),
-            UpperCorner: Xo(Vw)
-        }),
-        $w = T(Ww, {
-            WellKnownScaleSet: S(Y),
-            TileMatrix: Zo(function(a, c) {
-                return V({}, dx, a, c)
-            })
-        }, T(Xw, {
-            SupportedCRS: S(Y),
-            Identifier: S(Y)
-        })),
-        dx = T(Ww, {
-            TopLeftCorner: S(Vw),
-            ScaleDenominator: S(Vr),
-            TileWidth: S(Xr),
-            TileHeight: S(Xr),
-            MatrixWidth: S(Xr),
-            MatrixHeight: S(Xr)
-        }, T(Xw, {
-            Identifier: S(Y)
-        }));
-    var ex = new me(6378137);
-
-    function fx(a) {
-        fd.call(this);
-        a = m(a) ? a : {};
-        this.a = null;
-        this.d = Ke;
-        this.c = void 0;
-        x(this, hd("projection"), this.Vk, !1, this);
-        x(this, hd("tracking"), this.Wk, !1, this);
-        m(a.projection) && this.ug(re(a.projection));
-        m(a.trackingOptions) && this.Dh(a.trackingOptions);
-        this.Zd(m(a.tracking) ? a.tracking : !1)
-    }
-    w(fx, fd);
-    l = fx.prototype;
-    l.O = function() {
-        this.Zd(!1);
-        fx.S.O.call(this)
-    };
-    l.Vk = function() {
-        var a = this.sg();
-        null != a && (this.d = ve(re("EPSG:4326"), a), null === this.a || this.set("position", this.d(this.a)))
-    };
-    l.Wk = function() {
-        if (ni) {
-            var a = this.tg();
-            a && !m(this.c) ? this.c = ba.navigator.geolocation.watchPosition(ra(this.tn, this), ra(this.vn, this), this.bg()) : !a && m(this.c) && (ba.navigator.geolocation.clearWatch(this.c), this.c = void 0)
-        }
-    };
-    l.tn = function(a) {
-        a = a.coords;
-        this.set("accuracy", a.accuracy);
-        this.set("altitude", null === a.altitude ? void 0 : a.altitude);
-        this.set("altitudeAccuracy", null === a.altitudeAccuracy ? void 0 : a.altitudeAccuracy);
-        this.set("heading", null === a.heading ? void 0 : Yb(a.heading));
-        null === this.a ? this.a = [a.longitude, a.latitude] : (this.a[0] = a.longitude, this.a[1] = a.latitude);
-        var c = this.d(this.a);
-        this.set("position", c);
-        this.set("speed", null === a.speed ? void 0 : a.speed);
-        a = gl(ex, this.a, a.accuracy);
-        a.qa(this.d);
-        this.set("accuracyGeometry", a);
-        this.k()
-    };
-    l.vn = function(a) {
-        a.type = "error";
-        this.Zd(!1);
-        this.dispatchEvent(a)
-    };
-    l.Ki = function() {
-        return this.get("accuracy")
-    };
-    l.Li = function() {
-        return this.get("accuracyGeometry") || null
-    };
-    l.Ni = function() {
-        return this.get("altitude")
-    };
-    l.Oi = function() {
-        return this.get("altitudeAccuracy")
-    };
-    l.Tk = function() {
-        return this.get("heading")
-    };
-    l.Uk = function() {
-        return this.get("position")
-    };
-    l.sg = function() {
-        return this.get("projection")
-    };
-    l.vj = function() {
-        return this.get("speed")
-    };
-    l.tg = function() {
-        return this.get("tracking")
-    };
-    l.bg = function() {
-        return this.get("trackingOptions")
-    };
-    l.ug = function(a) {
-        this.set("projection", a)
-    };
-    l.Zd = function(a) {
-        this.set("tracking", a)
-    };
-    l.Dh = function(a) {
-        this.set("trackingOptions", a)
-    };
-
-    function gx(a, c, d) {
-        for (var e = [], f = a(0), g = a(1), h = c(f), k = c(g), n = [g, f], p = [k, h], q = [1, 0], r = {}, t = 1E5, u, A, z, D, B; 0 < --t && 0 < q.length;) z = q.pop(), f = n.pop(), h = p.pop(), g = z.toString(), g in r || (e.push(h[0], h[1]), r[g] = !0), D = q.pop(), g = n.pop(), k = p.pop(), B = (z + D) / 2, u = a(B), A = c(u), Ck(A[0], A[1], h[0], h[1], k[0], k[1]) < d ? (e.push(k[0], k[1]), g = D.toString(), r[g] = !0) : (q.push(D, B, B, z), p.push(k, A, A, h), n.push(g, u, u, f));
-        return e
-    }
-
-    function hx(a, c, d, e, f) {
-        var g = re("EPSG:4326");
-        return gx(function(e) {
-            return [a, c + (d - c) * e]
-        }, Je(g, e), f)
-    }
-
-    function ix(a, c, d, e, f) {
-        var g = re("EPSG:4326");
-        return gx(function(e) {
-            return [c + (d - c) * e, a]
-        }, Je(g, e), f)
-    };
-
-    function jx(a) {
-        a = m(a) ? a : {};
-        this.i = this.g = null;
-        this.d = this.c = Infinity;
-        this.f = this.e = -Infinity;
-        this.n = m(a.targetSize) ? a.targetSize : 100;
-        this.U = m(a.maxLines) ? a.maxLines : 100;
-        this.b = [];
-        this.a = [];
-        this.V = m(a.strokeStyle) ? a.strokeStyle : kx;
-        this.o = this.q = void 0;
-        this.l = null;
-        this.setMap(m(a.map) ? a.map : null)
-    }
-    var kx = new vl({
-            color: "rgba(0,0,0,0.2)"
-        }),
-        lx = [90, 45, 30, 20, 10, 5, 2, 1, .5, .2, .1, .05, .01, .005, .002, .001];
-
-    function mx(a, c, d, e, f) {
-        var g = f;
-        c = hx(c, a.e, a.c, a.i, d);
-        g = m(a.b[g]) ? a.b[g] : new O(null);
-        Ym(g, "XY", c);
-        he(g.G(), e) && (a.b[f++] = g);
-        return f
-    }
-
-    function nx(a, c, d, e, f) {
-        var g = f;
-        c = ix(c, a.f, a.d, a.i, d);
-        g = m(a.a[g]) ? a.a[g] : new O(null);
-        Ym(g, "XY", c);
-        he(g.G(), e) && (a.a[f++] = g);
-        return f
-    }
-    l = jx.prototype;
-    l.Xk = function() {
-        return this.g
-    };
-    l.kj = function() {
-        return this.b
-    };
-    l.pj = function() {
-        return this.a
-    };
-    l.gg = function(a) {
-        var c = a.vectorContext,
-            d = a.frameState;
-        a = d.extent;
-        var e = d.viewState,
-            f = e.center,
-            g = e.projection,
-            e = e.resolution,
-            d = d.pixelRatio,
-            d = e * e / (4 * d * d);
-        if (null === this.i || !Ie(this.i, g)) {
-            var h = g.G(),
-                k = g.g,
-                n = k[2],
-                p = k[1],
-                q = k[0];
-            this.c = k[3];
-            this.d = n;
-            this.e = p;
-            this.f = q;
-            k = re("EPSG:4326");
-            this.q = Je(k, g);
-            this.o = Je(g, k);
-            this.l = this.o(ce(h));
-            this.i = g
-        }
-        for (var g = this.l[0], h = this.l[1], k = -1, r, p = Math.pow(this.n * e, 2), q = [], t = [], e = 0, n = lx.length; e < n; ++e) {
-            r = lx[e] / 2;
-            q[0] = g - r;
-            q[1] = h - r;
-            t[0] = g + r;
-            t[1] = h + r;
-            this.q(q, q);
-            this.q(t, t);
-            r = Math.pow(t[0] - q[0], 2) + Math.pow(t[1] - q[1], 2);
-            if (r <= p) break;
-            k = lx[e]
-        }
-        e = k;
-        if (-1 == e) this.b.length = this.a.length = 0;
-        else {
-            g = this.o(f);
-            f = g[0];
-            g = g[1];
-            h = this.U;
-            f = Math.floor(f / e) * e;
-            p = Vb(f, this.f, this.d);
-            n = mx(this, p, d, a, 0);
-            for (k = 0; p != this.f && k++ < h;) p = Math.max(p - e, this.f), n = mx(this, p, d, a, n);
-            p = Vb(f, this.f, this.d);
-            for (k = 0; p != this.d && k++ < h;) p = Math.min(p + e, this.d), n = mx(this, p, d, a, n);
-            this.b.length = n;
-            g = Math.floor(g / e) * e;
-            f = Vb(g, this.e, this.c);
-            n = nx(this, f, d, a, 0);
-            for (k = 0; f != this.e && k++ < h;) f = Math.max(f - e, this.e), n = nx(this, f, d, a, n);
-            f = Vb(g, this.e, this.c);
-            for (k = 0; f != this.c && k++ < h;) f = Math.min(f + e, this.c), n = nx(this, f, d, a, n);
-            this.a.length = n
-        }
-        c.Aa(null, this.V);
-        a = 0;
-        for (d = this.b.length; a < d; ++a) f = this.b[a], c.zb(f, null);
-        a = 0;
-        for (d = this.a.length; a < d; ++a) f = this.a[a], c.zb(f, null)
-    };
-    l.setMap = function(a) {
-        null !== this.g && (this.g.u("postcompose", this.gg, this), this.g.render());
-        null !== a && (a.r("postcompose", this.gg, this), a.render());
-        this.g = a
-    };
-
-    function ox(a, c, d, e, f, g, h) {
-        pj.call(this, a, c, d, 0, e);
-        this.i = f;
-        this.a = new Image;
-        null !== g && (this.a.crossOrigin = g);
-        this.d = {};
-        this.c = null;
-        this.state = 0;
-        this.g = h
-    }
-    w(ox, pj);
-    ox.prototype.b = function(a) {
-        if (m(a)) {
-            var c = ma(a);
-            if (c in this.d) return this.d[c];
-            a = xb(this.d) ? this.a : this.a.cloneNode(!1);
-            return this.d[c] = a
-        }
-        return this.a
-    };
-    ox.prototype.q = function() {
-        this.state = 3;
-        Sa(this.c, Wc);
-        this.c = null;
-        this.dispatchEvent("change")
-    };
-    ox.prototype.l = function() {
-        m(this.resolution) || (this.resolution = fe(this.extent) / this.a.height);
-        this.state = 2;
-        Sa(this.c, Wc);
-        this.c = null;
-        this.dispatchEvent("change")
-    };
-    ox.prototype.load = function() {
-        0 == this.state && (this.state = 1, this.dispatchEvent("change"), this.c = [Uc(this.a, "error", this.q, !1, this), Uc(this.a, "load", this.l, !1, this)], this.g(this, this.i))
-    };
-
-    function px(a, c, d, e, f) {
-        zg.call(this, a, c);
-        this.g = d;
-        this.a = new Image;
-        null !== e && (this.a.crossOrigin = e);
-        this.c = {};
-        this.e = null;
-        this.i = f
-    }
-    w(px, zg);
-    l = px.prototype;
-    l.O = function() {
-        1 == this.state && qx(this);
-        px.S.O.call(this)
-    };
-    l.Ma = function(a) {
-        if (m(a)) {
-            var c = ma(a);
-            if (c in this.c) return this.c[c];
-            a = xb(this.c) ? this.a : this.a.cloneNode(!1);
-            return this.c[c] = a
-        }
-        return this.a
-    };
-    l.gb = function() {
-        return this.g
-    };
-    l.Yk = function() {
-        this.state = 3;
-        qx(this);
-        Ag(this)
-    };
-    l.Zk = function() {
-        this.state = this.a.naturalWidth && this.a.naturalHeight ? 2 : 4;
-        qx(this);
-        Ag(this)
-    };
-    l.load = function() {
-        0 == this.state && (this.state = 1, Ag(this), this.e = [Uc(this.a, "error", this.Yk, !1, this), Uc(this.a, "load", this.Zk, !1, this)], this.i(this, this.g))
-    };
-
-    function qx(a) {
-        Sa(a.e, Wc);
-        a.e = null
-    };
-
-    function rx(a, c, d) {
-        return function(e, f, g) {
-            return d(a, c, e, f, g)
-        }
-    }
-
-    function sx() {};
-
-    function tx(a, c) {
-        $c.call(this);
-        this.b = new cr(this);
-        var d = a;
-        c && (d = Ef(a));
-        this.b.Ka(d, "dragenter", this.$m);
-        d != a && this.b.Ka(d, "dragover", this.an);
-        this.b.Ka(a, "dragover", this.bn);
-        this.b.Ka(a, "drop", this.cn)
-    }
-    w(tx, $c);
-    l = tx.prototype;
-    l.Zc = !1;
-    l.O = function() {
-        tx.S.O.call(this);
-        this.b.Yc()
-    };
-    l.$m = function(a) {
-        var c = a.b.dataTransfer;
-        (this.Zc = !(!c || !(c.types && (Ya(c.types, "Files") || Ya(c.types, "public.file-url")) || c.files && 0 < c.files.length))) && a.preventDefault()
-    };
-    l.an = function(a) {
-        this.Zc && (a.preventDefault(), a.b.dataTransfer.dropEffect = "none")
-    };
-    l.bn = function(a) {
-        this.Zc && (a.preventDefault(), a.fb(), a = a.b.dataTransfer, a.effectAllowed = "all", a.dropEffect = "copy")
-    };
-    l.cn = function(a) {
-        this.Zc && (a.preventDefault(), a.fb(), a = new wc(a.b), a.type = "drop", this.dispatchEvent(a))
-    };
-    /*
-     Portions of this code are from MochiKit, received by
-     The Closure Authors under the MIT license. All other code is Copyright
-     2005-2009 The Closure Authors. All Rights Reserved.
-    */
-    function ux(a, c) {
-        this.e = [];
-        this.U = a;
-        this.o = c || null;
-        this.d = this.b = !1;
-        this.c = void 0;
-        this.q = this.V = this.g = !1;
-        this.f = 0;
-        this.a = null;
-        this.i = 0
-    }
-    ux.prototype.cancel = function(a) {
-        if (this.b) this.c instanceof ux && this.c.cancel();
-        else {
-            if (this.a) {
-                var c = this.a;
-                delete this.a;
-                a ? c.cancel(a) : (c.i--, 0 >= c.i && c.cancel())
-            }
-            this.U ? this.U.call(this.o, this) : this.q = !0;
-            this.b || (a = new vx, wx(this), xx(this, !1, a))
-        }
-    };
-    ux.prototype.l = function(a, c) {
-        this.g = !1;
-        xx(this, a, c)
-    };
-
-    function xx(a, c, d) {
-        a.b = !0;
-        a.c = d;
-        a.d = !c;
-        yx(a)
-    }
-
-    function wx(a) {
-        if (a.b) {
-            if (!a.q) throw new zx;
-            a.q = !1
-        }
-    }
-
-    function Ax(a, c, d, e) {
-        a.e.push([c, d, e]);
-        a.b && yx(a)
-    }
-    ux.prototype.then = function(a, c, d) {
-        var e, f, g = new An(function(a, c) {
-            e = a;
-            f = c
-        });
-        Ax(this, e, function(a) {
-            a instanceof vx ? g.cancel() : f(a)
-        });
-        return g.then(a, c, d)
-    };
-    rn(ux);
-
-    function Bx(a) {
-        return Va(a.e, function(a) {
-            return ka(a[1])
-        })
-    }
-
-    function yx(a) {
-        if (a.f && a.b && Bx(a)) {
-            var c = a.f,
-                d = Cx[c];
-            d && (ba.clearTimeout(d.$), delete Cx[c]);
-            a.f = 0
-        }
-        a.a && (a.a.i--, delete a.a);
-        for (var c = a.c, e = d = !1; a.e.length && !a.g;) {
-            var f = a.e.shift(),
-                g = f[0],
-                h = f[1],
-                f = f[2];
-            if (g = a.d ? h : g) try {
-                var k = g.call(f || a.o, c);
-                m(k) && (a.d = a.d && (k == c || k instanceof Error), a.c = c = k);
-                sn(c) && (e = !0, a.g = !0)
-            } catch (n) {
-                c = n, a.d = !0, Bx(a) || (d = !0)
-            }
-        }
-        a.c = c;
-        e && (k = ra(a.l, a, !0), e = ra(a.l, a, !1), c instanceof ux ? (Ax(c, k, e), c.V = !0) : c.then(k, e));
-        d && (c = new Dx(c), Cx[c.$] = c, a.f = c.$)
-    }
-
-    function zx() {
-        xa.call(this)
-    }
-    w(zx, xa);
-    zx.prototype.message = "Deferred has already fired";
-    zx.prototype.name = "AlreadyCalledError";
-
-    function vx() {
-        xa.call(this)
-    }
-    w(vx, xa);
-    vx.prototype.message = "Deferred was canceled";
-    vx.prototype.name = "CanceledError";
-
-    function Dx(a) {
-        this.$ = ba.setTimeout(ra(this.a, this), 0);
-        this.b = a
-    }
-    Dx.prototype.a = function() {
-        delete Cx[this.$];
-        throw this.b;
-    };
-    var Cx = {};
-
-    function Ex(a, c) {
-        m(a.name) ? (this.name = a.name, this.code = Fx[a.name]) : (this.code = a.code, this.name = Gx(a.code));
-        xa.call(this, Ba("%s %s", this.name, c))
-    }
-    w(Ex, xa);
-
-    function Gx(a) {
-        var c = wb(Fx, function(c) {
-            return a == c
-        });
-        if (!m(c)) throw Error("Invalid code: " + a);
-        return c
-    }
-    var Fx = {
-        AbortError: 3,
-        EncodingError: 5,
-        InvalidModificationError: 9,
-        InvalidStateError: 7,
-        NotFoundError: 1,
-        NotReadableError: 4,
-        NoModificationAllowedError: 6,
-        PathExistsError: 12,
-        QuotaExceededError: 10,
-        SecurityError: 2,
-        SyntaxError: 8,
-        TypeMismatchError: 11
-    };
-
-    function Hx(a, c) {
-        rc.call(this, a.type, c)
-    }
-    w(Hx, rc);
-
-    function Ix() {
-        $c.call(this);
-        this.Ya = new FileReader;
-        this.Ya.onloadstart = ra(this.b, this);
-        this.Ya.onprogress = ra(this.b, this);
-        this.Ya.onload = ra(this.b, this);
-        this.Ya.onabort = ra(this.b, this);
-        this.Ya.onerror = ra(this.b, this);
-        this.Ya.onloadend = ra(this.b, this)
-    }
-    w(Ix, $c);
-    Ix.prototype.getError = function() {
-        return this.Ya.error && new Ex(this.Ya.error, "reading file")
-    };
-    Ix.prototype.b = function(a) {
-        this.dispatchEvent(new Hx(a, this))
-    };
-    Ix.prototype.O = function() {
-        Ix.S.O.call(this);
-        delete this.Ya
-    };
-
-    function Jx(a) {
-        var c = new ux;
-        a.Ka("loadend", ta(function(a, c) {
-            var f = c.Ya.result,
-                g = c.getError();
-            null == f || g ? (wx(a), xx(a, !1, g)) : (wx(a), xx(a, !0, f));
-            c.Yc()
-        }, c, a));
-        return c
-    };
-
-    function Kx(a) {
-        a = m(a) ? a : {};
-        Wj.call(this, {
-            handleEvent: Gg
-        });
-        this.f = m(a.formatConstructors) ? a.formatConstructors : [];
-        this.o = m(a.projection) ? re(a.projection) : null;
-        this.e = null;
-        this.a = void 0
-    }
-    w(Kx, Wj);
-    Kx.prototype.O = function() {
-        m(this.a) && Wc(this.a);
-        Kx.S.O.call(this)
-    };
-    Kx.prototype.g = function(a) {
-        a = a.b.dataTransfer.files;
-        var c, d, e;
-        c = 0;
-        for (d = a.length; c < d; ++c) {
-            var f = e = a[c],
-                g = new Ix,
-                h = Jx(g);
-            g.Ya.readAsText(f, "");
-            Ax(h, ta(this.i, e), null, this)
-        }
-    };
-    Kx.prototype.i = function(a, c) {
-        var d = this.l,
-            e = this.o;
-        null === e && (e = d.R().e);
-        var d = this.f,
-            f = [],
-            g, h;
-        g = 0;
-        for (h = d.length; g < h; ++g) {
-            var k = new d[g],
-                n;
-            try {
-                n = k.ja(c)
-            } catch (p) {
-                n = null
-            }
-            if (null !== n) {
-                var k = k.za(c),
-                    k = Je(k, e),
-                    q, r;
-                q = 0;
-                for (r = n.length; q < r; ++q) {
-                    var t = n[q],
-                        u = t.Q();
-                    null != u && u.qa(k);
-                    f.push(t)
-                }
-            }
-        }
-        this.dispatchEvent(new Lx(Mx, this, a, f, e))
-    };
-    Kx.prototype.setMap = function(a) {
-        m(this.a) && (Wc(this.a), this.a = void 0);
-        null !== this.e && (qc(this.e), this.e = null);
-        Kx.S.setMap.call(this, a);
-        null !== a && (this.e = new tx(a.a), this.a = x(this.e, "drop", this.g, !1, this))
-    };
-    var Mx = "addfeatures";
-
-    function Lx(a, c, d, e, f) {
-        rc.call(this, a, c);
-        this.features = e;
-        this.file = d;
-        this.projection = f
-    }
-    w(Lx, rc);
-
-    function Nx(a, c) {
-        this.x = a;
-        this.y = c
-    }
-    w(Nx, Af);
-    Nx.prototype.clone = function() {
-        return new Nx(this.x, this.y)
-    };
-    Nx.prototype.scale = Af.prototype.scale;
-    Nx.prototype.add = function(a) {
-        this.x += a.x;
-        this.y += a.y;
-        return this
-    };
-    Nx.prototype.rotate = function(a) {
-        var c = Math.cos(a);
-        a = Math.sin(a);
-        var d = this.y * c + this.x * a;
-        this.x = this.x * c - this.y * a;
-        this.y = d;
-        return this
-    };
-
-    function Ox(a) {
-        a = m(a) ? a : {};
-        jk.call(this, {
-            handleDownEvent: Px,
-            handleDragEvent: Qx,
-            handleUpEvent: Rx
-        });
-        this.i = m(a.condition) ? a.condition : gk;
-        this.a = this.f = void 0;
-        this.g = 0;
-        this.n = m(a.duration) ? a.duration : 400
-    }
-    w(Ox, jk);
-
-    function Qx(a) {
-        if (ik(a)) {
-            var c = a.map,
-                d = c.xa();
-            a = a.pixel;
-            a = new Nx(a[0] - d[0] / 2, d[1] / 2 - a[1]);
-            d = Math.atan2(a.y, a.x);
-            a = Math.sqrt(a.x * a.x + a.y * a.y);
-            var e = c.R(),
-                f = Se(e);
-            c.render();
-            m(this.f) && Xj(c, e, f.rotation - (d - this.f));
-            this.f = d;
-            m(this.a) && Zj(c, e, f.resolution / a * this.a);
-            m(this.a) && (this.g = this.a / a);
-            this.a = a
-        }
-    }
-
-    function Rx(a) {
-        if (!ik(a)) return !0;
-        a = a.map;
-        var c = a.R();
-        Ue(c, -1);
-        var d = Se(c),
-            e = this.g - 1,
-            f = d.rotation,
-            f = c.constrainRotation(f, 0);
-        Xj(a, c, f, void 0, void 0);
-        d = d.resolution;
-        f = this.n;
-        d = c.constrainResolution(d, 0, e);
-        Zj(a, c, d, void 0, f);
-        this.g = 0;
-        return !1
-    }
-
-    function Px(a) {
-        return ik(a) && this.i(a) ? (Ue(a.map.R(), 1), this.a = this.f = void 0, !0) : !1
-    };
-
-    function Sx(a, c) {
-        rc.call(this, a);
-        this.feature = c
-    }
-    w(Sx, rc);
-
-    function Tx(a) {
-        jk.call(this, {
-            handleDownEvent: Ux,
-            handleEvent: Vx,
-            handleUpEvent: Wx
-        });
-        this.N = null;
-        this.H = !1;
-        this.Ga = m(a.source) ? a.source : null;
-        this.oa = m(a.features) ? a.features : null;
-        this.gi = m(a.snapTolerance) ? a.snapTolerance : 12;
-        this.Nc = m(a.minPointsPerRing) ? a.minPointsPerRing : 3;
-        var c = this.L = a.type,
-            d;
-        "Point" === c || "MultiPoint" === c ? d = Xx : "LineString" === c || "MultiLineString" === c ? d = Yx : "Polygon" === c || "MultiPolygon" === c ? d = Zx : "Circle" === c && (d = $x);
-        this.a = d;
-        this.f = this.n = this.p = this.g = this.i = null;
-        this.T = new ur({
-            style: m(a.style) ? a.style : ay()
-        });
-        this.Fa = a.geometryName;
-        this.Ee = m(a.condition) ? a.condition : fk;
-        this.ba = m(a.freehandCondition) ? a.freehandCondition : gk;
-        x(this, hd("active"), this.Ra, !1, this)
-    }
-    w(Tx, jk);
-
-    function ay() {
-        var a = Fl();
-        return function(c) {
-            return a[c.Q().M()]
-        }
-    }
-    Tx.prototype.setMap = function(a) {
-        Tx.S.setMap.call(this, a);
-        this.Ra()
-    };
-
-    function Vx(a) {
-        var c = !this.H;
-        this.H && a.type === kj ? (by(this, a), c = !1) : a.type === jj ? c = cy(this, a) : a.type === dj && (c = !1);
-        return kk.call(this, a) && c
-    }
-
-    function Ux(a) {
-        if (this.Ee(a)) return this.N = a.pixel, !0;
-        if (this.a !== Yx && this.a !== Zx || !this.ba(a)) return !1;
-        this.N = a.pixel;
-        this.H = !0;
-        null === this.i && dy(this, a);
-        return !0
-    }
-
-    function Wx(a) {
-        this.H = !1;
-        var c = this.N,
-            d = a.pixel,
-            e = c[0] - d[0],
-            c = c[1] - d[1],
-            d = !0;
-        4 >= e * e + c * c && (cy(this, a), null === this.i ? dy(this, a) : (this.a === Xx || this.a === $x) && null !== this.i || ey(this, a) ? this.X() : by(this, a), d = !1);
-        return d
-    }
-
-    function cy(a, c) {
-        if (a.a === Xx && null === a.i) dy(a, c);
-        else if (null === a.i) {
-            var d = c.coordinate.slice();
-            null === a.p ? (a.p = new X(new E(d)), fy(a)) : a.p.Q().W(d)
-        } else {
-            var d = c.coordinate,
-                e = a.g.Q(),
-                f, g;
-            a.a === Xx ? (g = e.K(), g[0] = d[0], g[1] = d[1], e.W(g)) : (a.a === Yx ? f = e.K() : a.a === Zx ? f = a.f[0] : a.a === $x && (f = e.dd()), ey(a, c) && (d = a.i.slice()), a.p.Q().W(d), g = f[f.length - 1], g[0] = d[0], g[1] = d[1], a.a === Yx ? e.W(f) : a.a === Zx ? (g = a.n.Q(), g.W(f), e.W(a.f)) : a.a === $x && (g = a.n.Q(), g.W([e.dd(), d]), e.Ag(g.Bg())));
-            fy(a)
-        }
-        return !0
-    }
-
-    function ey(a, c) {
-        var d = !1;
-        if (null !== a.g) {
-            var e = a.g.Q(),
-                f = !1,
-                g = [a.i];
-            a.a === Yx ? f = 2 < e.K().length : a.a === Zx && (f = e.K()[0].length > a.Nc, g = [a.f[0][0], a.f[0][a.f[0].length - 2]]);
-            if (f)
-                for (var e = c.map, f = 0, h = g.length; f < h; f++) {
-                    var k = g[f],
-                        n = e.ta(k),
-                        p = c.pixel,
-                        d = p[0] - n[0],
-                        n = p[1] - n[1],
-                        p = a.H && a.ba(c) ? 1 : a.gi;
-                    if (d = Math.sqrt(d * d + n * n) <= p) {
-                        a.i = k;
-                        break
-                    }
-                }
-        }
-        return d
-    }
-
-    function dy(a, c) {
-        var d = c.coordinate;
-        a.i = d;
-        var e;
-        a.a === Xx ? e = new E(d.slice()) : a.a === Yx ? e = new O([d.slice(), d.slice()]) : a.a === Zx ? (a.n = new X(new O([d.slice(), d.slice()])), a.f = [
-            [d.slice(), d.slice()]
-        ], e = new F(a.f)) : a.a === $x && (e = new Pm(d.slice(), 0), a.n = new X(new O([d.slice(), d.slice()])));
-        a.g = new X;
-        m(a.Fa) && a.g.Ic(a.Fa);
-        a.g.La(e);
-        fy(a);
-        a.dispatchEvent(new Sx("drawstart", a.g))
-    }
-
-    function by(a, c) {
-        var d = c.coordinate,
-            e = a.g.Q(),
-            f;
-        a.a === Yx ? (a.i = d.slice(), f = e.K(), f.push(d.slice()), e.W(f)) : a.a === Zx && (a.f[0].push(d.slice()), e.W(a.f));
-        fy(a)
-    }
-    Tx.prototype.X = function() {
-        var a = gy(this),
-            c, d = a.Q();
-        this.a === Xx ? c = d.K() : this.a === Yx ? (c = d.K(), c.pop(), d.W(c)) : this.a === Zx && (this.f[0].pop(), this.f[0].push(this.f[0][0]), d.W(this.f), c = d.K());
-        "MultiPoint" === this.L ? a.La(new an([c])) : "MultiLineString" === this.L ? a.La(new Q([c])) : "MultiPolygon" === this.L && a.La(new R([c]));
-        this.dispatchEvent(new Sx("drawend", a));
-        null === this.oa || this.oa.push(a);
-        null === this.Ga || this.Ga.jf(a)
-    };
-
-    function gy(a) {
-        a.i = null;
-        var c = a.g;
-        null !== c && (a.g = null, a.p = null, a.n = null, a.T.b.clear());
-        return c
-    }
-    Tx.prototype.nc = Fg;
-
-    function fy(a) {
-        var c = [];
-        null === a.g || c.push(a.g);
-        null === a.n || c.push(a.n);
-        null === a.p || c.push(a.p);
-        a.T.ld(new of(c))
-    }
-    Tx.prototype.Ra = function() {
-        var a = this.l,
-            c = this.c();
-        null !== a && c || gy(this);
-        this.T.setMap(c ? a : null)
-    };
-    var Xx = "Point",
-        Yx = "LineString",
-        Zx = "Polygon",
-        $x = "Circle";
-
-    function hy(a) {
-        jk.call(this, {
-            handleDownEvent: iy,
-            handleDragEvent: jy,
-            handleEvent: ky,
-            handleUpEvent: ly
-        });
-        this.X = m(a.deleteCondition) ? a.deleteCondition : Lg(fk, ek);
-        this.T = this.f = null;
-        this.L = [0, 0];
-        this.a = new lp;
-        this.i = m(a.pixelTolerance) ? a.pixelTolerance : 10;
-        this.N = !1;
-        this.g = null;
-        this.n = new ur({
-            style: m(a.style) ? a.style : my()
-        });
-        this.H = {
-            Point: this.Bl,
-            LineString: this.Dg,
-            LinearRing: this.Dg,
-            Polygon: this.Cl,
-            MultiPoint: this.zl,
-            MultiLineString: this.yl,
-            MultiPolygon: this.Al,
-            GeometryCollection: this.xl
-        };
-        this.p = a.features;
-        this.p.forEach(this.Cg, this);
-        x(this.p, "add", this.vl, !1, this);
-        x(this.p, "remove", this.wl, !1, this)
-    }
-    w(hy, jk);
-    l = hy.prototype;
-    l.Cg = function(a) {
-        var c = a.Q();
-        m(this.H[c.M()]) && this.H[c.M()].call(this, a, c);
-        a = this.l;
-        null === a || ny(this, this.L, a)
-    };
-    l.setMap = function(a) {
-        this.n.setMap(a);
-        hy.S.setMap.call(this, a)
-    };
-    l.vl = function(a) {
-        this.Cg(a.element)
-    };
-    l.wl = function(a) {
-        var c = a.element;
-        a = this.a;
-        var d, e = [];
-        pp(a, c.Q().G(), function(a) {
-            c === a.feature && e.push(a)
-        });
-        for (d = e.length - 1; 0 <= d; --d) a.remove(e[d]);
-        null !== this.f && 0 === this.p.Ib() && (this.n.Yd(this.f), this.f = null)
-    };
-    l.Bl = function(a, c) {
-        var d = c.K(),
-            d = {
-                feature: a,
-                geometry: c,
-                aa: [d, d]
-            };
-        this.a.ha(c.G(), d)
-    };
-    l.zl = function(a, c) {
-        var d = c.K(),
-            e, f, g;
-        f = 0;
-        for (g = d.length; f < g; ++f) e = d[f], e = {
-            feature: a,
-            geometry: c,
-            depth: [f],
-            index: f,
-            aa: [e, e]
-        }, this.a.ha(c.G(), e)
-    };
-    l.Dg = function(a, c) {
-        var d = c.K(),
-            e, f, g, h;
-        e = 0;
-        for (f = d.length - 1; e < f; ++e) g = d.slice(e, e + 2), h = {
-            feature: a,
-            geometry: c,
-            index: e,
-            aa: g
-        }, this.a.ha(Jd(g), h)
-    };
-    l.yl = function(a, c) {
-        var d = c.K(),
-            e, f, g, h, k, n, p;
-        h = 0;
-        for (k = d.length; h < k; ++h)
-            for (e = d[h], f = 0, g = e.length - 1; f < g; ++f) n = e.slice(f, f + 2), p = {
-                feature: a,
-                geometry: c,
-                depth: [h],
-                index: f,
-                aa: n
-            }, this.a.ha(Jd(n), p)
-    };
-    l.Cl = function(a, c) {
-        var d = c.K(),
-            e, f, g, h, k, n, p;
-        h = 0;
-        for (k = d.length; h < k; ++h)
-            for (e = d[h], f = 0, g = e.length - 1; f < g; ++f) n = e.slice(f, f + 2), p = {
-                feature: a,
-                geometry: c,
-                depth: [h],
-                index: f,
-                aa: n
-            }, this.a.ha(Jd(n), p)
-    };
-    l.Al = function(a, c) {
-        var d = c.K(),
-            e, f, g, h, k, n, p, q, r, t;
-        n = 0;
-        for (p = d.length; n < p; ++n)
-            for (q = d[n], h = 0, k = q.length; h < k; ++h)
-                for (e = q[h], f = 0, g = e.length - 1; f < g; ++f) r = e.slice(f, f + 2), t = {
-                    feature: a,
-                    geometry: c,
-                    depth: [h, n],
-                    index: f,
-                    aa: r
-                }, this.a.ha(Jd(r), t)
-    };
-    l.xl = function(a, c) {
-        var d, e = c.d;
-        for (d = 0; d < e.length; ++d) this.H[e[d].M()].call(this, a, e[d])
-    };
-
-    function oy(a, c) {
-        var d = a.f;
-        null === d ? (d = new X(new E(c)), a.f = d, a.n.pg(d)) : d.Q().W(c)
-    }
-
-    function py(a, c) {
-        return a.index - c.index
-    }
-
-    function iy(a) {
-        ny(this, a.pixel, a.map);
-        this.g = [];
-        var c = this.f;
-        if (null !== c) {
-            a = [];
-            var c = c.Q().K(),
-                d = Jd([c]),
-                d = np(this.a, d),
-                e = {};
-            d.sort(py);
-            for (var f = 0, g = d.length; f < g; ++f) {
-                var h = d[f],
-                    k = h.aa,
-                    n = ma(h.feature),
-                    p = h.depth;
-                p && (n += "-" + p.join("-"));
-                e[n] || (e[n] = Array(2));
-                if (qd(k[0], c) && !e[n][0]) this.g.push([h, 0]), e[n][0] = h;
-                else if (qd(k[1], c) && !e[n][1]) {
-                    if ("LineString" !== h.geometry.M() && "MultiLineString" !== h.geometry.M() || !e[n][0] || 0 !== e[n][0].index) this.g.push([h, 1]), e[n][1] = h
-                } else ma(k) in this.T && !e[n][0] && !e[n][1] && a.push([h, c])
-            }
-            for (f = a.length - 1; 0 <= f; --f) this.qk.apply(this, a[f])
-        }
-        return null !== this.f
-    }
-
-    function jy(a) {
-        a = a.coordinate;
-        for (var c = 0, d = this.g.length; c < d; ++c) {
-            for (var e = this.g[c], f = e[0], g = f.depth, h = f.geometry, k = h.K(), n = f.aa, e = e[1]; a.length < h.s;) a.push(0);
-            switch (h.M()) {
-                case "Point":
-                    k = a;
-                    n[0] = n[1] = a;
-                    break;
-                case "MultiPoint":
-                    k[f.index] = a;
-                    n[0] = n[1] = a;
-                    break;
-                case "LineString":
-                    k[f.index + e] = a;
-                    n[e] = a;
-                    break;
-                case "MultiLineString":
-                    k[g[0]][f.index + e] = a;
-                    n[e] = a;
-                    break;
-                case "Polygon":
-                    k[g[0]][f.index + e] = a;
-                    n[e] = a;
-                    break;
-                case "MultiPolygon":
-                    k[g[1]][g[0]][f.index + e] = a, n[e] = a
-            }
-            h.W(k)
-        }
-        oy(this, a)
-    }
-
-    function ly() {
-        for (var a, c = this.g.length - 1; 0 <= c; --c) a = this.g[c][0], this.a.update(Jd(a.aa), a);
-        return !1
-    }
-
-    function ky(a) {
-        var c;
-        a.map.R().c.slice()[1] || a.type != jj || this.o || (this.L = a.pixel, ny(this, a.pixel, a.map));
-        if (null !== this.f && this.X(a)) {
-            this.f.Q();
-            c = this.g;
-            var d = {},
-                e, f, g, h, k, n, p, q, r;
-            for (k = c.length - 1; 0 <= k; --k)
-                if (g = c[k], q = g[0], h = q.geometry, f = h.K(), r = ma(q.feature), q.depth && (r += "-" + q.depth.join("-")), e = p = n = void 0, 0 === g[1] ? (p = q, n = q.index) : 1 == g[1] && (e = q, n = q.index + 1), r in d || (d[r] = [e, p, n]), g = d[r], m(e) && (g[0] = e), m(p) && (g[1] = p), m(g[0]) && m(g[1])) {
-                    e = f;
-                    r = !1;
-                    p = n - 1;
-                    switch (h.M()) {
-                        case "MultiLineString":
-                            f[q.depth[0]].splice(n, 1);
-                            r = !0;
-                            break;
-                        case "LineString":
-                            f.splice(n, 1);
-                            r = !0;
-                            break;
-                        case "MultiPolygon":
-                            e = e[q.depth[1]];
-                        case "Polygon":
-                            e = e[q.depth[0]], 4 < e.length && (n == e.length - 1 && (n = 0), e.splice(n, 1), r = !0, 0 === n && (e.pop(), e.push(e[0]), p = e.length - 1))
-                    }
-                    r && (this.a.remove(g[0]), this.a.remove(g[1]), h.W(f), f = {
-                        depth: q.depth,
-                        feature: q.feature,
-                        geometry: q.geometry,
-                        index: p,
-                        aa: [g[0].aa[0], g[1].aa[1]]
-                    }, this.a.ha(Jd(f.aa), f), qy(this, h, n, q.depth, -1), this.n.Yd(this.f), this.f = null)
-                }
-            c = !0
-        }
-        return kk.call(this, a) && !c
-    }
-
-    function ny(a, c, d) {
-        function e(a, c) {
-            return td(f, a.aa) - td(f, c.aa)
-        }
-        var f = d.ka(c),
-            g = d.ka([c[0] - a.i, c[1] + a.i]),
-            h = d.ka([c[0] + a.i, c[1] - a.i]),
-            g = Jd([g, h]),
-            g = np(a.a, g);
-        if (0 < g.length) {
-            g.sort(e);
-            var h = g[0].aa,
-                k = nd(f, h),
-                n = d.ta(k);
-            if (Math.sqrt(sd(c, n)) <= a.i) {
-                c = d.ta(h[0]);
-                d = d.ta(h[1]);
-                c = sd(n, c);
-                d = sd(n, d);
-                a.N = Math.sqrt(Math.min(c, d)) <= a.i;
-                a.N && (k = c > d ? h[1] : h[0]);
-                oy(a, k);
-                d = {};
-                d[ma(h)] = !0;
-                c = 1;
-                for (n = g.length; c < n; ++c)
-                    if (k = g[c].aa, qd(h[0], k[0]) && qd(h[1], k[1]) || qd(h[0], k[1]) && qd(h[1], k[0])) d[ma(k)] = !0;
-                    else break;
-                a.T = d;
-                return
-            }
-        }
-        null !== a.f && (a.n.Yd(a.f), a.f = null)
-    }
-    l.qk = function(a, c) {
-        for (var d = a.aa, e = a.feature, f = a.geometry, g = a.depth, h = a.index, k; c.length < f.s;) c.push(0);
-        switch (f.M()) {
-            case "MultiLineString":
-                k = f.K();
-                k[g[0]].splice(h + 1, 0, c);
-                break;
-            case "Polygon":
-                k = f.K();
-                k[g[0]].splice(h + 1, 0, c);
-                break;
-            case "MultiPolygon":
-                k = f.K();
-                k[g[1]][g[0]].splice(h + 1, 0, c);
-                break;
-            case "LineString":
-                k = f.K();
-                k.splice(h + 1, 0, c);
-                break;
-            default:
-                return
-        }
-        f.W(k);
-        k = this.a;
-        k.remove(a);
-        qy(this, f, h, g, 1);
-        var n = {
-            aa: [d[0], c],
-            feature: e,
-            geometry: f,
-            depth: g,
-            index: h
-        };
-        k.ha(Jd(n.aa), n);
-        this.g.push([n, 1]);
-        d = {
-            aa: [c, d[1]],
-            feature: e,
-            geometry: f,
-            depth: g,
-            index: h + 1
-        };
-        k.ha(Jd(d.aa), d);
-        this.g.push([d, 0])
-    };
-
-    function qy(a, c, d, e, f) {
-        pp(a.a, c.G(), function(a) {
-            a.geometry === c && (!m(e) || ib(a.depth, e)) && a.index > d && (a.index += f)
-        })
-    }
-
-    function my() {
-        var a = Fl();
-        return function() {
-            return a.Point
-        }
-    };
-
-    function ry(a, c, d) {
-        rc.call(this, a);
-        this.selected = c;
-        this.deselected = d
-    }
-    w(ry, rc);
-
-    function sy(a) {
-        Wj.call(this, {
-            handleEvent: ty
-        });
-        a = m(a) ? a : {};
-        this.o = m(a.condition) ? a.condition : ek;
-        this.g = m(a.addCondition) ? a.addCondition : Fg;
-        this.H = m(a.removeCondition) ? a.removeCondition : Fg;
-        this.L = m(a.toggleCondition) ? a.toggleCondition : gk;
-        this.i = m(a.multi) ? a.multi : !1;
-        this.e = m(a.filter) ? a.filter : Gg;
-        var c;
-        if (m(a.layers))
-            if (ka(a.layers)) c = a.layers;
-            else {
-                var d = a.layers;
-                c = function(a) {
-                    return Ya(d, a)
-                }
-            }
-        else c = Gg;
-        this.f = c;
-        this.a = new ur({
-            style: m(a.style) ? a.style : uy()
-        });
-        a = this.a.b;
-        x(a, "add", this.n, !1, this);
-        x(a, "remove", this.J, !1, this)
-    }
-    w(sy, Wj);
-    sy.prototype.p = function() {
-        return this.a.b
-    };
-
-    function ty(a) {
-        if (!this.o(a)) return !0;
-        var c = this.g(a),
-            d = this.H(a),
-            e = this.L(a),
-            f = a.map,
-            g = this.a.b,
-            h = [],
-            k = [],
-            n = !1;
-        if (c || d || e) {
-            f.Ne(a.pixel, function(a, f) {
-                -1 == Ra(g.a, a) ? (c || e) && this.e(a, f) && k.push(a) : (d || e) && h.push(a)
-            }, this, this.f);
-            for (f = h.length - 1; 0 <= f; --f) g.remove(h[f]);
-            g.af(k);
-            if (0 < k.length || 0 < h.length) n = !0
-        } else f.Ne(a.pixel, function(a, c) {
-            if (this.e(a, c)) return k.push(a), !this.i
-        }, this, this.f), 0 < k.length && 1 == g.Ib() && g.item(0) == k[0] || (n = !0, 0 !== g.Ib() && (h = Array.prototype.concat(g.a), g.clear()), g.af(k));
-        n && this.dispatchEvent(new ry("select", k, h));
-        return dk(a)
-    }
-    sy.prototype.setMap = function(a) {
-        var c = this.l,
-            d = this.a.b;
-        null === c || d.forEach(c.Ih, c);
-        sy.S.setMap.call(this, a);
-        this.a.setMap(a);
-        null === a || d.forEach(a.Eh, a)
-    };
-
-    function uy() {
-        var a = Fl();
-        db(a.Polygon, a.LineString);
-        db(a.GeometryCollection, a.LineString);
-        return function(c) {
-            return a[c.Q().M()]
-        }
-    }
-    sy.prototype.n = function(a) {
-        a = a.element;
-        var c = this.l;
-        null === c || c.Eh(a)
-    };
-    sy.prototype.J = function(a) {
-        a = a.element;
-        var c = this.l;
-        null === c || c.Ih(a)
-    };
-
-    function vy(a) {
-        jk.call(this, {
-            handleEvent: wy,
-            handleDownEvent: Gg,
-            handleUpEvent: xy
-        });
-        a = m(a) ? a : {};
-        this.i = m(a.source) ? a.source : null;
-        this.g = m(a.features) ? a.features : null;
-        this.X = [];
-        this.p = {};
-        this.H = {};
-        this.N = {};
-        this.n = {};
-        this.L = null;
-        this.f = m(a.pixelTolerance) ? a.pixelTolerance : 10;
-        this.ba = ra(yy, this);
-        this.a = new lp;
-        this.T = {
-            Point: this.Il,
-            LineString: this.Gg,
-            LinearRing: this.Gg,
-            Polygon: this.Jl,
-            MultiPoint: this.Gl,
-            MultiLineString: this.Fl,
-            MultiPolygon: this.Hl,
-            GeometryCollection: this.El
-        }
-    }
-    w(vy, jk);
-    l = vy.prototype;
-    l.ed = function(a, c) {
-        var d = m(c) ? c : !0,
-            e = a.Q(),
-            f = this.T[e.M()];
-        if (m(f)) {
-            var g = ma(a);
-            this.N[g] = e.G(Kd());
-            f.call(this, a, e);
-            d && (this.H[g] = e.r("change", ra(this.Oj, this, a), this), this.p[g] = a.r(hd(a.a), this.Dl, this))
-        }
-    };
-    l.Hi = function(a) {
-        this.ed(a)
-    };
-    l.Ii = function(a) {
-        this.fd(a)
-    };
-    l.Eg = function(a) {
-        var c;
-        a instanceof up ? c = a.feature : a instanceof nf && (c = a.element);
-        this.ed(c)
-    };
-    l.Fg = function(a) {
-        var c;
-        a instanceof up ? c = a.feature : a instanceof nf && (c = a.element);
-        this.fd(c)
-    };
-    l.Dl = function(a) {
-        a = a.c;
-        this.fd(a, !0);
-        this.ed(a, !0)
-    };
-    l.Oj = function(a) {
-        if (this.o) {
-            var c = ma(a);
-            c in this.n || (this.n[c] = a)
-        } else this.Jh(a)
-    };
-    l.fd = function(a, c) {
-        var d = m(c) ? c : !0,
-            e = ma(a),
-            f = this.N[e];
-        if (f) {
-            var g = this.a,
-                h = [];
-            pp(g, f, function(c) {
-                a === c.feature && h.push(c)
-            });
-            for (f = h.length - 1; 0 <= f; --f) g.remove(h[f]);
-            d && (Wc(this.H[e]), delete this.H[e], Wc(this.p[e]), delete this.p[e])
-        }
-    };
-    l.setMap = function(a) {
-        var c = this.l,
-            d = this.X,
-            e;
-        null === this.g ? null === this.i || (e = this.i.Dc()) : e = this.g;
-        c && (Sa(d, dd), d.length = 0, e.forEach(this.Ii, this));
-        vy.S.setMap.call(this, a);
-        a && (null !== this.g ? (d.push(this.g.r("add", this.Eg, this)), d.push(this.g.r("remove", this.Fg, this))) : null !== this.i && (d.push(this.i.r("addfeature", this.Eg, this)), d.push(this.i.r("removefeature", this.Fg, this))), e.forEach(this.Hi, this))
-    };
-    l.nc = Fg;
-    l.Jh = function(a) {
-        this.fd(a, !1);
-        this.ed(a, !1)
-    };
-    l.El = function(a, c) {
-        var d, e = c.d;
-        for (d = 0; d < e.length; ++d) this.T[e[d].M()].call(this, a, e[d])
-    };
-    l.Gg = function(a, c) {
-        var d = c.K(),
-            e, f, g, h;
-        e = 0;
-        for (f = d.length - 1; e < f; ++e) g = d.slice(e, e + 2), h = {
-            feature: a,
-            aa: g
-        }, this.a.ha(Jd(g), h)
-    };
-    l.Fl = function(a, c) {
-        var d = c.K(),
-            e, f, g, h, k, n, p;
-        h = 0;
-        for (k = d.length; h < k; ++h)
-            for (e = d[h], f = 0, g = e.length - 1; f < g; ++f) n = e.slice(f, f + 2), p = {
-                feature: a,
-                aa: n
-            }, this.a.ha(Jd(n), p)
-    };
-    l.Gl = function(a, c) {
-        var d = c.K(),
-            e, f, g;
-        f = 0;
-        for (g = d.length; f < g; ++f) e = d[f], e = {
-            feature: a,
-            aa: [e, e]
-        }, this.a.ha(c.G(), e)
-    };
-    l.Hl = function(a, c) {
-        var d = c.K(),
-            e, f, g, h, k, n, p, q, r, t;
-        n = 0;
-        for (p = d.length; n < p; ++n)
-            for (q = d[n], h = 0, k = q.length; h < k; ++h)
-                for (e = q[h], f = 0, g = e.length - 1; f < g; ++f) r = e.slice(f, f + 2), t = {
-                    feature: a,
-                    aa: r
-                }, this.a.ha(Jd(r), t)
-    };
-    l.Il = function(a, c) {
-        var d = c.K(),
-            d = {
-                feature: a,
-                aa: [d, d]
-            };
-        this.a.ha(c.G(), d)
-    };
-    l.Jl = function(a, c) {
-        var d = c.K(),
-            e, f, g, h, k, n, p;
-        h = 0;
-        for (k = d.length; h < k; ++h)
-            for (e = d[h], f = 0, g = e.length - 1; f < g; ++f) n = e.slice(f, f + 2), p = {
-                feature: a,
-                aa: n
-            }, this.a.ha(Jd(n), p)
-    };
-
-    function wy(a) {
-        var c, d, e = a.pixel,
-            f = a.coordinate;
-        c = a.map;
-        var g = c.ka([e[0] - this.f, e[1] + this.f]);
-        d = c.ka([e[0] + this.f, e[1] - this.f]);
-        var g = Jd([g, d]),
-            h = np(this.a, g),
-            k = !1,
-            g = !1,
-            n = null;
-        d = null;
-        0 < h.length && (this.L = f, h.sort(this.ba), h = h[0].aa, n = nd(f, h), d = c.ta(n), Math.sqrt(sd(e, d)) <= this.f && (g = !0, e = c.ta(h[0]), f = c.ta(h[1]), e = sd(d, e), f = sd(d, f), k = Math.sqrt(Math.min(e, f)) <= this.f)) && (n = e > f ? h[1] : h[0], d = c.ta(n), d = [Math.round(d[0]), Math.round(d[1])]);
-        c = n;
-        g && (a.coordinate = c.slice(0, 2), a.pixel = d);
-        return kk.call(this, a)
-    }
-
-    function xy() {
-        var a = sb(this.n);
-        a.length && (Sa(a, this.Jh, this), this.n = {});
-        return !1
-    }
-
-    function yy(a, c) {
-        return td(this.L, a.aa) - td(this.L, c.aa)
-    };
-
-    function Z(a) {
-        a = m(a) ? a : {};
-        var c = Db(a);
-        delete c.gradient;
-        delete c.radius;
-        delete c.blur;
-        delete c.shadow;
-        delete c.weight;
-        M.call(this, c);
-        this.d = null;
-        this.L = m(a.shadow) ? a.shadow : 250;
-        this.p = void 0;
-        this.l = null;
-        x(this, hd("gradient"), this.Pj, !1, this);
-        this.yh(m(a.gradient) ? a.gradient : zy);
-        this.th(m(a.blur) ? a.blur : 15);
-        this.Ig(m(a.radius) ? a.radius : 8);
-        x(this, [hd("blur"), hd("radius")], this.hg, !1, this);
-        this.hg();
-        var d = m(a.weight) ? a.weight : "weight",
-            e;
-        ia(d) ? e = function(a) {
-            return a.get(d)
-        } : e = d;
-        this.e(ra(function(a) {
-            a = e(a);
-            a = m(a) ? Vb(a, 0, 1) : 1;
-            var c = 255 * a | 0,
-                d = this.l[c];
-            m(d) || (d = [new Bl({
-                image: new Fj({
-                    opacity: a,
-                    src: this.p
-                })
-            })], this.l[c] = d);
-            return d
-        }, this));
-        this.set("renderOrder", null);
-        x(this, "render", this.hk, !1, this)
-    }
-    w(Z, M);
-    var zy = ["#00f", "#0ff", "#0f0", "#ff0", "#f00"];
-    l = Z.prototype;
-    l.Sf = function() {
-        return this.get("blur")
-    };
-    l.Wf = function() {
-        return this.get("gradient")
-    };
-    l.Hg = function() {
-        return this.get("radius")
-    };
-    l.Pj = function() {
-        for (var a = this.Wf(), c = ai(1, 256), d = c.createLinearGradient(0, 0, 1, 256), e = 1 / (a.length - 1), f = 0, g = a.length; f < g; ++f) d.addColorStop(f * e, a[f]);
-        c.fillStyle = d;
-        c.fillRect(0, 0, 1, 256);
-        this.d = c.getImageData(0, 0, 1, 256).data
-    };
-    l.hg = function() {
-        var a = this.Hg(),
-            c = this.Sf(),
-            d = a + c + 1,
-            e = 2 * d,
-            e = ai(e, e);
-        e.shadowOffsetX = e.shadowOffsetY = this.L;
-        e.shadowBlur = c;
-        e.shadowColor = "#000";
-        e.beginPath();
-        c = d - this.L;
-        e.arc(c, c, a, 0, 2 * Math.PI, !0);
-        e.fill();
-        this.p = e.canvas.toDataURL();
-        this.l = Array(256);
-        this.k()
-    };
-    l.hk = function(a) {
-        a = a.context;
-        var c = a.canvas,
-            c = a.getImageData(0, 0, c.width, c.height),
-            d = c.data,
-            e, f, g;
-        e = 0;
-        for (f = d.length; e < f; e += 4)
-            if (g = 4 * d[e + 3]) d[e] = this.d[g], d[e + 1] = this.d[g + 1], d[e + 2] = this.d[g + 2];
-        a.putImageData(c, 0, 0)
-    };
-    l.th = function(a) {
-        this.set("blur", a)
-    };
-    l.yh = function(a) {
-        this.set("gradient", a)
-    };
-    l.Ig = function(a) {
-        this.set("radius", a)
-    };
-
-    function Ay(a, c) {
-        var d = c || {},
-            e = d.document || document,
-            f = Mf("SCRIPT"),
-            g = {
-                sh: f,
-                oc: void 0
-            },
-            h = new ux(By, g),
-            k = null,
-            n = null != d.timeout ? d.timeout : 5E3;
-        0 < n && (k = window.setTimeout(function() {
-            Cy(f, !0);
-            var c = new Dy(Ey, "Timeout reached for loading script " + a);
-            wx(h);
-            xx(h, !1, c)
-        }, n), g.oc = k);
-        f.onload = f.onreadystatechange = function() {
-            f.readyState && "loaded" != f.readyState && "complete" != f.readyState || (Cy(f, d.Bi || !1, k), wx(h), xx(h, !0, null))
-        };
-        f.onerror = function() {
-            Cy(f, !0, k);
-            var c = new Dy(Fy, "Error while loading script " + a);
-            wx(h);
-            xx(h, !1, c)
-        };
-        Gf(f, {
-            type: "text/javascript",
-            charset: "UTF-8",
-            src: a
-        });
-        Gy(e).appendChild(f);
-        return h
-    }
-
-    function Gy(a) {
-        var c = a.getElementsByTagName("HEAD");
-        return c && 0 != c.length ? c[0] : a.documentElement
-    }
-
-    function By() {
-        if (this && this.sh) {
-            var a = this.sh;
-            a && "SCRIPT" == a.tagName && Cy(a, !0, this.oc)
-        }
-    }
-
-    function Cy(a, c, d) {
-        null != d && ba.clearTimeout(d);
-        a.onload = ca;
-        a.onerror = ca;
-        a.onreadystatechange = ca;
-        c && window.setTimeout(function() {
-            Qf(a)
-        }, 0)
-    }
-    var Fy = 0,
-        Ey = 1;
-
-    function Dy(a, c) {
-        var d = "Jsloader error (code #" + a + ")";
-        c && (d += ": " + c);
-        xa.call(this, d);
-        this.code = a
-    }
-    w(Dy, xa);
-
-    function Hy(a, c) {
-        this.a = new at(a);
-        this.b = c ? c : "callback";
-        this.oc = 5E3
-    }
-    var Iy = 0;
-    Hy.prototype.send = function(a, c, d, e) {
-        a = a || null;
-        e = e || "_" + (Iy++).toString(36) + ua().toString(36);
-        ba._callbacks_ || (ba._callbacks_ = {});
-        var f = this.a.clone();
-        if (a)
-            for (var g in a)
-                if (!a.hasOwnProperty || a.hasOwnProperty(g)) {
-                    var h = f,
-                        k = g,
-                        n = a[g];
-                    ga(n) || (n = [String(n)]);
-                    tt(h.b, k, n)
-                }
-        c && (ba._callbacks_[e] = Jy(e, c), c = this.b, g = "_callbacks_." + e, ga(g) || (g = [String(g)]), tt(f.b, c, g));
-        c = Ay(f.toString(), {
-            timeout: this.oc,
-            Bi: !0
-        });
-        Ax(c, null, Ky(e, a, d), void 0);
-        return {
-            $: e,
-            Of: c
-        }
-    };
-    Hy.prototype.cancel = function(a) {
-        a && (a.Of && a.Of.cancel(), a.$ && Ly(a.$, !1))
-    };
-
-    function Ky(a, c, d) {
-        return function() {
-            Ly(a, !1);
-            d && d(c)
-        }
-    }
-
-    function Jy(a, c) {
-        return function(d) {
-            Ly(a, !0);
-            c.apply(void 0, arguments)
-        }
-    }
-
-    function Ly(a, c) {
-        ba._callbacks_[a] && (c ? delete ba._callbacks_[a] : ba._callbacks_[a] = ca)
-    };
-
-    function My(a) {
-        var c = /\{z\}/g,
-            d = /\{x\}/g,
-            e = /\{y\}/g,
-            f = /\{-y\}/g;
-        return function(g) {
-            return null === g ? void 0 : a.replace(c, g[0].toString()).replace(d, g[1].toString()).replace(e, g[2].toString()).replace(f, function() {
-                return ((1 << g[0]) - g[2] - 1).toString()
-            })
-        }
-    }
-
-    function Ny(a) {
-        return Oy(Ua(a, My))
-    }
-
-    function Oy(a) {
-        return 1 === a.length ? a[0] : function(c, d, e) {
-            return null === c ? void 0 : a[Wb((c[1] << c[0]) + c[2], a.length)](c, d, e)
-        }
-    }
-
-    function Py() {}
-
-    function Qy(a, c) {
-        var d = [0, 0, 0];
-        return function(e, f, g) {
-            return null === e ? void 0 : c(a(e, g, d), f, g)
-        }
-    }
-
-    function Ry(a) {
-        var c = [],
-            d = /\{(\d)-(\d)\}/.exec(a) || /\{([a-z])-([a-z])\}/.exec(a);
-        if (d) {
-            var e = d[2].charCodeAt(0),
-                f;
-            for (f = d[1].charCodeAt(0); f <= e; ++f) c.push(a.replace(d[0], String.fromCharCode(f)))
-        } else c.push(a);
-        return c
-    };
-
-    function Sy(a) {
-        Zg.call(this, {
-            attributions: a.attributions,
-            extent: a.extent,
-            logo: a.logo,
-            opaque: a.opaque,
-            projection: a.projection,
-            state: m(a.state) ? a.state : void 0,
-            tileGrid: a.tileGrid,
-            tilePixelRatio: a.tilePixelRatio,
-            wrapX: a.wrapX
-        });
-        this.tileUrlFunction = m(a.tileUrlFunction) ? a.tileUrlFunction : Py;
-        this.crossOrigin = m(a.crossOrigin) ? a.crossOrigin : null;
-        this.tileLoadFunction = m(a.tileLoadFunction) ? a.tileLoadFunction : Ty;
-        this.tileClass = m(a.tileClass) ? a.tileClass : px
-    }
-    w(Sy, Zg);
-
-    function Ty(a, c) {
-        a.Ma().src = c
-    }
-    l = Sy.prototype;
-    l.Vb = function(a, c, d, e, f) {
-        var g = this.bb(a, c, d);
-        if (wg(this.a, g)) return this.a.get(g);
-        a = [a, c, d];
-        c = m(f) ? f : this.f;
-        d = ah(this, c);
-        var h = this.H,
-            k;
-        if (k = m(h)) {
-            k = a[0];
-            var n = Wg(d, k);
-            if (m(n)) {
-                var p = Xg(c),
-                    q = c.G();
-                k = ld(d.na(k), d.a)[0] * n == p.na(k) * kf(Pg(p, q, k))
-            } else k = c.e
-        }
-        k ? h ? (h = a[0], k = a[1], c = Ug(d, h, c), k < c.b || k > c.d ? (k = Wb(k, kf(c)), c = [h, k, a[2]]) : c = a) : (h = a[1], c = Ug(d, a[0], c), c = h < c.b || h > c.d ? null : a) : c = a;
-        e = null === c ? void 0 : this.tileUrlFunction(c, e, f);
-        e = new this.tileClass(a, m(e) ? 0 : 4, m(e) ? e : "", this.crossOrigin, this.tileLoadFunction);
-        x(e, "change", this.nm, !1, this);
-        this.a.set(g, e);
-        return e
-    };
-    l.Ua = function() {
-        return this.tileLoadFunction
-    };
-    l.Va = function() {
-        return this.tileUrlFunction
-    };
-    l.nm = function(a) {
-        a = a.target;
-        switch (a.state) {
-            case 1:
-                this.dispatchEvent(new bh("tileloadstart", a));
-                break;
-            case 2:
-                this.dispatchEvent(new bh("tileloadend", a));
-                break;
-            case 3:
-                this.dispatchEvent(new bh("tileloaderror", a))
-        }
-    };
-    l.$a = function(a) {
-        this.a.clear();
-        this.tileLoadFunction = a;
-        this.k()
-    };
-    l.pa = function(a) {
-        this.a.clear();
-        this.tileUrlFunction = a;
-        this.k()
-    };
-    l.yf = function(a, c, d) {
-        a = this.bb(a, c, d);
-        wg(this.a, a) && this.a.get(a)
-    };
-
-    function Uy(a) {
-        var c = m(a.extent) ? a.extent : Xl,
-            d;
-        m(a.tileSize) && (d = ld(a.tileSize));
-        d = Yg(c, a.maxZoom, d);
-        Mg.call(this, {
-            minZoom: a.minZoom,
-            origin: de(c, "top-left"),
-            resolutions: d,
-            tileSize: a.tileSize
-        })
-    }
-    w(Uy, Mg);
-    Uy.prototype.yb = function(a) {
-        a = m(a) ? a : {};
-        var c = this.minZoom,
-            d = this.maxZoom,
-            e = null;
-        if (m(a.extent)) {
-            var e = Array(d + 1),
-                f;
-            for (f = 0; f <= d; ++f) e[f] = f < c ? null : Pg(this, a.extent, f)
-        }
-        return function(a, f, k) {
-            f = a[0];
-            if (f < c || d < f) return null;
-            var n = a[1];
-            a = a[2];
-            return a < -Math.pow(2, f) || -1 < a || null !== e && !hf(e[f], n, a) ? null : bf(f, n, -a - 1, k)
-        }
-    };
-    Uy.prototype.Ld = function(a, c) {
-        if (a[0] < this.maxZoom) {
-            var d = 2 * a[1],
-                e = 2 * a[2];
-            return gf(d, d + 1, e, e + 1, c)
-        }
-        return null
-    };
-    Uy.prototype.Ad = function(a, c, d, e) {
-        e = gf(0, a[1], 0, a[2], e);
-        for (a = a[0] - 1; a >= this.minZoom; --a)
-            if (e.b = e.d >>= 1, e.c = e.a >>= 1, c.call(d, a, e)) return !0;
-        return !1
-    };
-
-    function Vy(a) {
-        Sy.call(this, {
-            crossOrigin: "anonymous",
-            opaque: !0,
-            projection: re("EPSG:3857"),
-            state: "loading",
-            tileLoadFunction: a.tileLoadFunction,
-            wrapX: m(a.wrapX) ? a.wrapX : !0
-        });
-        this.g = m(a.culture) ? a.culture : "en-us";
-        this.e = m(a.maxZoom) ? a.maxZoom : -1;
-        var c = new at("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/" + a.imagerySet);
-        (new Hy(c, "jsonp")).send({
-            include: "ImageryProviders",
-            uriScheme: "https",
-            key: a.key
-        }, ra(this.i, this))
-    }
-    w(Vy, Sy);
-    var Wy = new mf({
-        html: '<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'
-    });
-    Vy.prototype.i = function(a) {
-        if (200 != a.statusCode || "OK" != a.statusDescription || "ValidCredentials" != a.authenticationResultCode || 1 != a.resourceSets.length || 1 != a.resourceSets[0].resources.length) Dg(this, "error");
-        else {
-            var c = a.brandLogoUri; - 1 == c.indexOf("https") && (c = c.replace("http", "https"));
-            var d = a.resourceSets[0].resources[0],
-                e = -1 == this.e ? d.zoomMax : this.e,
-                f = new Uy({
-                    extent: Vg(this.f),
-                    minZoom: d.zoomMin,
-                    maxZoom: e,
-                    tileSize: d.imageWidth == d.imageHeight ? d.imageWidth : [d.imageWidth, d.imageHeight]
-                });
-            this.tileGrid = f;
-            var g = this.g;
-            this.tileUrlFunction = Qy(f.yb(), Oy(Ua(d.imageUrlSubdomains, function(a) {
-                var c = d.imageUrl.replace("{subdomain}", a).replace("{culture}", g);
-                return function(a) {
-                    return null === a ? void 0 : c.replace("{quadkey}", df(a))
-                }
-            })));
-            if (d.imageryProviders) {
-                var h = ve(re("EPSG:4326"), this.f);
-                a = Ua(d.imageryProviders, function(a) {
-                    var c = a.attribution,
-                        d = {};
-                    Sa(a.coverageAreas, function(a) {
-                        var c = a.zoomMin,
-                            g = Math.min(a.zoomMax, e);
-                        a = a.bbox;
-                        a = le([a[1], a[0], a[3], a[2]], h);
-                        var k, n;
-                        for (k = c; k <= g; ++k) n = k.toString(), c = Pg(f, a, k), n in d ? d[n].push(c) : d[n] = [c]
-                    });
-                    return new mf({
-                        html: c,
-                        tileRanges: d
-                    })
-                });
-                a.push(Wy);
-                this.d = a
-            }
-            this.L = c;
-            Dg(this, "ready")
-        }
-    };
-
-    function Xy(a) {
-        qp.call(this, {
-            attributions: a.attributions,
-            extent: a.extent,
-            logo: a.logo,
-            projection: a.projection
-        });
-        this.p = void 0;
-        this.T = m(a.distance) ? a.distance : 20;
-        this.n = [];
-        this.l = a.source;
-        this.l.r("change", Xy.prototype.ba, this)
-    }
-    w(Xy, qp);
-    Xy.prototype.X = function() {
-        return this.l
-    };
-    Xy.prototype.ac = function(a, c, d) {
-        c !== this.p && (this.clear(), this.p = c, this.l.ac(a, c, d), Yy(this), this.Oc(this.n))
-    };
-    Xy.prototype.ba = function() {
-        this.clear();
-        Yy(this);
-        this.Oc(this.n);
-        this.k()
-    };
-
-    function Yy(a) {
-        if (m(a.p)) {
-            a.n.length = 0;
-            for (var c = Kd(), d = a.T * a.p, e = a.l.Dc(), f = {}, g = 0, h = e.length; g < h; g++) {
-                var k = e[g];
-                ub(f, ma(k).toString()) || (k = k.Q().K(), Ud(k, c), Od(c, d, c), k = a.l.Se(c), k = Ta(k, function(a) {
-                    a = ma(a).toString();
-                    return a in f ? !1 : f[a] = !0
-                }), a.n.push(Zy(k)))
-            }
-        }
-    }
-
-    function Zy(a) {
-        for (var c = a.length, d = [0, 0], e = 0; e < c; e++) {
-            var f = a[e].Q().K();
-            md(d, f)
-        }
-        c = 1 / c;
-        d[0] *= c;
-        d[1] *= c;
-        d = new X(new E(d));
-        d.set("features", a);
-        return d
-    };
-
-    function $y(a) {
-        jn.call(this, {
-            projection: a.projection,
-            resolutions: a.resolutions
-        });
-        this.T = m(a.crossOrigin) ? a.crossOrigin : null;
-        this.g = m(a.displayDpi) ? a.displayDpi : 96;
-        this.e = m(a.params) ? a.params : {};
-        var c;
-        m(a.url) ? c = rx(a.url, this.e, ra(this.Ul, this)) : c = sx;
-        this.J = c;
-        this.a = m(a.imageLoadFunction) ? a.imageLoadFunction : pn;
-        this.X = m(a.hidpi) ? a.hidpi : !0;
-        this.N = m(a.metersPerUnit) ? a.metersPerUnit : 1;
-        this.n = m(a.ratio) ? a.ratio : 1;
-        this.ba = m(a.useOverlay) ? a.useOverlay : !1;
-        this.c = null;
-        this.p = 0
-    }
-    w($y, jn);
-    l = $y.prototype;
-    l.Tl = function() {
-        return this.e
-    };
-    l.Cc = function(a, c, d, e) {
-        c = kn(this, c);
-        d = this.X ? d : 1;
-        var f = this.c;
-        if (null !== f && this.p == this.b && f.resolution == c && f.e == d && Rd(f.G(), a)) return f;
-        1 != this.n && (a = a.slice(), ke(a, this.n));
-        e = this.J(a, [ie(a) / c * d, fe(a) / c * d], e);
-        m(e) ? (f = new ox(a, c, d, this.d, e, this.T, this.a), x(f, "change", this.i, !1, this)) : f = null;
-        this.c = f;
-        this.p = this.b;
-        return f
-    };
-    l.Sl = function() {
-        return this.a
-    };
-    l.Wl = function(a) {
-        Fb(this.e, a);
-        this.k()
-    };
-    l.Ul = function(a, c, d, e) {
-        var f;
-        f = this.N;
-        var g = ie(d),
-            h = fe(d),
-            k = e[0],
-            n = e[1],
-            p = .0254 / this.g;
-        f = n * g > k * h ? g * f / (k * p) : h * f / (n * p);
-        d = ce(d);
-        e = {
-            OPERATION: this.ba ? "GETDYNAMICMAPOVERLAYIMAGE" : "GETMAPIMAGE",
-            VERSION: "2.0.0",
-            LOCALE: "en",
-            CLIENTAGENT: "ol.source.ImageMapGuide source",
-            CLIP: "1",
-            SETDISPLAYDPI: this.g,
-            SETDISPLAYWIDTH: Math.round(e[0]),
-            SETDISPLAYHEIGHT: Math.round(e[1]),
-            SETVIEWSCALE: f,
-            SETVIEWCENTERX: d[0],
-            SETVIEWCENTERY: d[1]
-        };
-        Fb(e, c);
-        return ao(co([a], e))
-    };
-    l.Vl = function(a) {
-        this.c = null;
-        this.a = a;
-        this.k()
-    };
-
-    function az(a) {
-        var c = m(a.attributions) ? a.attributions : null,
-            d = a.imageExtent,
-            e, f;
-        m(a.imageSize) && (e = fe(d) / a.imageSize[1], f = [e]);
-        var g = m(a.crossOrigin) ? a.crossOrigin : null,
-            h = m(a.imageLoadFunction) ? a.imageLoadFunction : pn;
-        jn.call(this, {
-            attributions: c,
-            logo: a.logo,
-            projection: re(a.projection),
-            resolutions: f
-        });
-        this.a = new ox(d, e, 1, c, a.url, g, h);
-        x(this.a, "change", this.i, !1, this)
-    }
-    w(az, jn);
-    az.prototype.Cc = function(a) {
-        return he(a, this.a.G()) ? this.a : null
-    };
-
-    function bz(a) {
-        a = m(a) ? a : {};
-        jn.call(this, {
-            attributions: a.attributions,
-            logo: a.logo,
-            projection: a.projection,
-            resolutions: a.resolutions
-        });
-        this.X = m(a.crossOrigin) ? a.crossOrigin : null;
-        this.e = a.url;
-        this.n = m(a.imageLoadFunction) ? a.imageLoadFunction : pn;
-        this.c = a.params;
-        this.g = !0;
-        cz(this);
-        this.T = a.serverType;
-        this.ba = m(a.hidpi) ? a.hidpi : !0;
-        this.a = null;
-        this.p = [0, 0];
-        this.N = 0;
-        this.J = m(a.ratio) ? a.ratio : 1.5
-    }
-    w(bz, jn);
-    var dz = [101, 101];
-    l = bz.prototype;
-    l.bm = function(a, c, d, e) {
-        if (m(this.e)) {
-            var f = ee(a, c, 0, dz),
-                g = {
-                    SERVICE: "WMS",
-                    VERSION: "1.3.0",
-                    REQUEST: "GetFeatureInfo",
-                    FORMAT: "image/png",
-                    TRANSPARENT: !0,
-                    QUERY_LAYERS: this.c.LAYERS
-                };
-            Fb(g, this.c, e);
-            e = Math.floor((f[3] - a[1]) / c);
-            g[this.g ? "I" : "X"] = Math.floor((a[0] - f[0]) / c);
-            g[this.g ? "J" : "Y"] = e;
-            return ez(this, f, dz, 1, re(d), g)
-        }
-    };
-    l.dm = function() {
-        return this.c
-    };
-    l.Cc = function(a, c, d, e) {
-        if (!m(this.e)) return null;
-        c = kn(this, c);
-        1 == d || this.ba && m(this.T) || (d = 1);
-        var f = this.a;
-        if (null !== f && this.N == this.b && f.resolution == c && f.e == d && Rd(f.G(), a)) return f;
-        f = {
-            SERVICE: "WMS",
-            VERSION: "1.3.0",
-            REQUEST: "GetMap",
-            FORMAT: "image/png",
-            TRANSPARENT: !0
-        };
-        Fb(f, this.c);
-        a = a.slice();
-        var g = (a[0] + a[2]) / 2,
-            h = (a[1] + a[3]) / 2;
-        if (1 != this.J) {
-            var k = this.J * ie(a) / 2,
-                n = this.J * fe(a) / 2;
-            a[0] = g - k;
-            a[1] = h - n;
-            a[2] = g + k;
-            a[3] = h + n
-        }
-        var k = c / d,
-            n = Math.ceil(ie(a) / k),
-            p = Math.ceil(fe(a) / k);
-        a[0] = g - k * n / 2;
-        a[2] = g + k * n / 2;
-        a[1] = h - k * p / 2;
-        a[3] = h + k * p / 2;
-        this.p[0] = n;
-        this.p[1] = p;
-        e = ez(this, a, this.p, d, e, f);
-        this.a = new ox(a, c, d, this.d, e, this.X, this.n);
-        this.N = this.b;
-        x(this.a, "change", this.i, !1, this);
-        return this.a
-    };
-    l.cm = function() {
-        return this.n
-    };
-
-    function ez(a, c, d, e, f, g) {
-        g[a.g ? "CRS" : "SRS"] = f.b;
-        "STYLES" in a.c || (g.STYLES = new String(""));
-        if (1 != e) switch (a.T) {
-            case "geoserver":
-                e = 90 * e + .5 | 0;
-                g.FORMAT_OPTIONS = m(g.FORMAT_OPTIONS) ? g.FORMAT_OPTIONS + (";dpi:" + e) : "dpi:" + e;
-                break;
-            case "mapserver":
-                g.MAP_RESOLUTION = 90 * e;
-                break;
-            case "carmentaserver":
-            case "qgis":
-                g.DPI = 90 * e
-        }
-        g.WIDTH = d[0];
-        g.HEIGHT = d[1];
-        d = f.d;
-        var h;
-        a.g && "ne" == d.substr(0, 2) ? h = [c[1], c[0], c[3], c[2]] : h = c;
-        g.BBOX = h.join(",");
-        return ao(co([a.e], g))
-    }
-    l.em = function() {
-        return this.e
-    };
-    l.fm = function(a) {
-        this.a = null;
-        this.n = a;
-        this.k()
-    };
-    l.gm = function(a) {
-        a != this.e && (this.e = a, this.a = null, this.k())
-    };
-    l.hm = function(a) {
-        Fb(this.c, a);
-        cz(this);
-        this.a = null;
-        this.k()
-    };
-
-    function cz(a) {
-        a.g = 0 <= Na(Ab(a.c, "VERSION", "1.3.0"), "1.3")
-    };
-
-    function fz(a) {
-        var c = m(a.projection) ? a.projection : "EPSG:3857",
-            d = new Uy({
-                extent: Vg(c),
-                maxZoom: a.maxZoom,
-                tileSize: a.tileSize
-            });
-        Sy.call(this, {
-            attributions: a.attributions,
-            crossOrigin: a.crossOrigin,
-            logo: a.logo,
-            projection: c,
-            tileGrid: d,
-            tileLoadFunction: a.tileLoadFunction,
-            tilePixelRatio: a.tilePixelRatio,
-            tileUrlFunction: Py,
-            wrapX: m(a.wrapX) ? a.wrapX : !0
-        });
-        this.l = d.yb();
-        m(a.tileUrlFunction) ? this.pa(a.tileUrlFunction) : m(a.urls) ? this.pa(Ny(a.urls)) : m(a.url) && this.e(a.url)
-    }
-    w(fz, Sy);
-    fz.prototype.pa = function(a) {
-        fz.S.pa.call(this, Qy(this.l, a))
-    };
-    fz.prototype.e = function(a) {
-        this.pa(Ny(Ry(a)))
-    };
-
-    function gz(a) {
-        a = m(a) ? a : {};
-        var c;
-        m(a.attributions) ? c = a.attributions : c = [hz];
-        fz.call(this, {
-            attributions: c,
-            crossOrigin: m(a.crossOrigin) ? a.crossOrigin : "anonymous",
-            opaque: !0,
-            maxZoom: m(a.maxZoom) ? a.maxZoom : 19,
-            tileLoadFunction: a.tileLoadFunction,
-            url: m(a.url) ? a.url : "https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",
-            wrapX: a.wrapX
-        })
-    }
-    w(gz, fz);
-    var hz = new mf({
-        html: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'
-    });
-
-    function iz(a) {
-        a = m(a) ? a : {};
-        var c = jz[a.layer];
-        this.g = a.layer;
-        fz.call(this, {
-            attributions: c.attributions,
-            crossOrigin: "anonymous",
-            logo: "https://developer.mapquest.com/content/osm/mq_logo.png",
-            maxZoom: c.maxZoom,
-            opaque: !0,
-            tileLoadFunction: a.tileLoadFunction,
-            url: m(a.url) ? a.url : "https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/" + this.g + "/{z}/{x}/{y}.jpg"
-        })
-    }
-    w(iz, fz);
-    var kz = new mf({
-            html: 'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'
-        }),
-        jz = {
-            osm: {
-                maxZoom: 19,
-                attributions: [kz, hz]
-            },
-            sat: {
-                maxZoom: 18,
-                attributions: [kz, new mf({
-                    html: "Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"
-                })]
-            },
-            hyb: {
-                maxZoom: 18,
-                attributions: [kz, hz]
-            }
-        };
-    iz.prototype.i = function() {
-        return this.g
-    };
-    var lz = {
-            terrain: {
-                Ta: "jpg",
-                opaque: !0
-            },
-            "terrain-background": {
-                Ta: "jpg",
-                opaque: !0
-            },
-            "terrain-labels": {
-                Ta: "png",
-                opaque: !1
-            },
-            "terrain-lines": {
-                Ta: "png",
-                opaque: !1
-            },
-            "toner-background": {
-                Ta: "png",
-                opaque: !0
-            },
-            toner: {
-                Ta: "png",
-                opaque: !0
-            },
-            "toner-hybrid": {
-                Ta: "png",
-                opaque: !1
-            },
-            "toner-labels": {
-                Ta: "png",
-                opaque: !1
-            },
-            "toner-lines": {
-                Ta: "png",
-                opaque: !1
-            },
-            "toner-lite": {
-                Ta: "png",
-                opaque: !0
-            },
-            watercolor: {
-                Ta: "jpg",
-                opaque: !0
-            }
-        },
-        mz = {
-            terrain: {
-                minZoom: 4,
-                maxZoom: 18
-            },
-            toner: {
-                minZoom: 0,
-                maxZoom: 20
-            },
-            watercolor: {
-                minZoom: 3,
-                maxZoom: 16
-            }
-        };
-
-    function nz(a) {
-        var c = a.layer.indexOf("-"),
-            d = lz[a.layer];
-        fz.call(this, {
-            attributions: oz,
-            crossOrigin: "anonymous",
-            maxZoom: mz[-1 == c ? a.layer : a.layer.slice(0, c)].maxZoom,
-            opaque: d.opaque,
-            tileLoadFunction: a.tileLoadFunction,
-            url: m(a.url) ? a.url : "https://stamen-tiles-{a-d}.a.ssl.fastly.net/" + a.layer + "/{z}/{x}/{y}." + d.Ta
-        })
-    }
-    w(nz, fz);
-    var oz = [new mf({
-        html: 'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'
-    }), hz];
-
-    function pz(a) {
-        a = m(a) ? a : {};
-        var c = m(a.params) ? a.params : {};
-        Sy.call(this, {
-            attributions: a.attributions,
-            logo: a.logo,
-            projection: a.projection,
-            tileGrid: a.tileGrid,
-            tileLoadFunction: a.tileLoadFunction,
-            tileUrlFunction: ra(this.lm, this),
-            wrapX: m(a.wrapX) ? a.wrapX : !0
-        });
-        var d = a.urls;
-        !m(d) && m(a.url) && (d = Ry(a.url));
-        this.g = null != d ? d : [];
-        this.e = c;
-        this.i = Kd()
-    }
-    w(pz, Sy);
-    l = pz.prototype;
-    l.im = function() {
-        return this.e
-    };
-    l.Xb = function(a, c, d) {
-        a = pz.S.Xb.call(this, a, c, d);
-        return 1 == c ? a : kd(a, c, this.c)
-    };
-    l.jm = function() {
-        return this.g
-    };
-    l.km = function(a) {
-        a = m(a) ? Ry(a) : null;
-        this.Ng(a)
-    };
-    l.Ng = function(a) {
-        this.g = null != a ? a : [];
-        this.k()
-    };
-    l.lm = function(a, c, d) {
-        var e = this.tileGrid;
-        null === e && (e = ah(this, d));
-        if (!(e.b.length <= a[0])) {
-            var f = Og(e, a, this.i),
-                g = ld(e.na(a[0]), this.c);
-            1 != c && (g = kd(g, c, this.c));
-            e = {
-                F: "image",
-                FORMAT: "PNG32",
-                TRANSPARENT: !0
-            };
-            Fb(e, this.e);
-            var h = this.g;
-            0 == h.length ? a = void 0 : (d = d.b.split(":").pop(), e.SIZE = g[0] + "," + g[1], e.BBOX = f.join(","), e.BBOXSR = d, e.IMAGESR = d, e.DPI = 90 * c, a = 1 == h.length ? h[0] : h[Wb((a[1] << a[0]) + a[2], h.length)], Aa(a, "/") || (a += "/"), Aa(a, "MapServer/") ? a += "export" : Aa(a, "ImageServer/") && (a += "exportImage"), a = ao(co([a], e)));
-            return a
-        }
-    };
-    l.mm = function(a) {
-        Fb(this.e, a);
-        this.k()
-    };
-
-    function qz(a, c) {
-        zg.call(this, a, 2);
-        this.c = ld(c.na(a[0]));
-        this.a = {}
-    }
-    w(qz, zg);
-    qz.prototype.Ma = function(a) {
-        a = m(a) ? ma(a) : -1;
-        if (a in this.a) return this.a[a];
-        var c = this.c,
-            d = ai(c[0], c[1]);
-        d.strokeStyle = "black";
-        d.strokeRect(.5, .5, c[0] + .5, c[1] + .5);
-        d.fillStyle = "black";
-        d.textAlign = "center";
-        d.textBaseline = "middle";
-        d.font = "24px sans-serif";
-        d.fillText(ef(this.b), c[0] / 2, c[1] / 2);
-        return this.a[a] = d.canvas
-    };
-
-    function rz(a) {
-        Zg.call(this, {
-            opaque: !1,
-            projection: a.projection,
-            tileGrid: a.tileGrid
-        })
-    }
-    w(rz, Zg);
-    rz.prototype.Vb = function(a, c, d) {
-        var e = this.bb(a, c, d);
-        if (wg(this.a, e)) return this.a.get(e);
-        a = new qz([a, c, d], this.tileGrid);
-        this.a.set(e, a);
-        return a
-    };
-
-    function sz(a) {
-        Sy.call(this, {
-            attributions: a.attributions,
-            crossOrigin: a.crossOrigin,
-            projection: re("EPSG:3857"),
-            state: "loading",
-            tileLoadFunction: a.tileLoadFunction,
-            wrapX: m(a.wrapX) ? a.wrapX : !0
-        });
-        (new Hy(a.url)).send(void 0, ra(this.e, this))
-    }
-    w(sz, Sy);
-    sz.prototype.e = function(a) {
-        var c = re("EPSG:4326"),
-            d = this.f,
-            e;
-        m(a.bounds) && (e = le(a.bounds, ve(c, d)));
-        var f = a.minzoom || 0,
-            g = a.maxzoom || 22;
-        this.tileGrid = d = new Uy({
-            extent: Vg(d),
-            maxZoom: g,
-            minZoom: f
-        });
-        this.tileUrlFunction = Qy(d.yb({
-            extent: e
-        }), Ny(a.tiles));
-        if (m(a.attribution) && null === this.d) {
-            c = m(e) ? e : c.G();
-            e = {};
-            for (var h; f <= g; ++f) h = f.toString(), e[h] = [Pg(d, c, f)];
-            this.d = [new mf({
-                html: a.attribution,
-                tileRanges: e
-            })]
-        }
-        Dg(this, "ready")
-    };
-
-    function tz(a) {
-        Zg.call(this, {
-            projection: re("EPSG:3857"),
-            state: "loading"
-        });
-        this.i = m(a.preemptive) ? a.preemptive : !0;
-        this.e = Py;
-        this.g = void 0;
-        (new Hy(a.url)).send(void 0, ra(this.om, this))
-    }
-    w(tz, Zg);
-    l = tz.prototype;
-    l.wj = function() {
-        return this.g
-    };
-    l.Gi = function(a, c, d, e, f) {
-        null === this.tileGrid ? !0 === f ? wh(function() {
-            d.call(e, null)
-        }) : d.call(e, null) : (c = this.tileGrid.Wb(a, c), uz(this.Vb(c[0], c[1], c[2], 1, this.f), a, d, e, f))
-    };
-    l.om = function(a) {
-        var c = re("EPSG:4326"),
-            d = this.f,
-            e;
-        m(a.bounds) && (e = le(a.bounds, ve(c, d)));
-        var f = a.minzoom || 0,
-            g = a.maxzoom || 22;
-        this.tileGrid = d = new Uy({
-            extent: Vg(d),
-            maxZoom: g,
-            minZoom: f
-        });
-        this.g = a.template;
-        var h = a.grids;
-        if (null != h) {
-            this.e = Qy(d.yb({
-                extent: e
-            }), Ny(h));
-            if (m(a.attribution)) {
-                c = m(e) ? e : c.G();
-                for (e = {}; f <= g; ++f) h = f.toString(), e[h] = [Pg(d, c, f)];
-                this.d = [new mf({
-                    html: a.attribution,
-                    tileRanges: e
-                })]
-            }
-            Dg(this, "ready")
-        } else Dg(this, "error")
-    };
-    l.Vb = function(a, c, d, e, f) {
-        var g = this.bb(a, c, d);
-        if (wg(this.a, g)) return this.a.get(g);
-        a = [a, c, d];
-        e = this.e(a, e, f);
-        e = new vz(a, m(e) ? 0 : 4, m(e) ? e : "", Og(this.tileGrid, a), this.i);
-        this.a.set(g, e);
-        return e
-    };
-    l.yf = function(a, c, d) {
-        a = this.bb(a, c, d);
-        wg(this.a, a) && this.a.get(a)
-    };
-
-    function vz(a, c, d, e, f) {
-        zg.call(this, a, c);
-        this.g = d;
-        this.a = e;
-        this.i = f;
-        this.d = this.e = this.c = null
-    }
-    w(vz, zg);
-    l = vz.prototype;
-    l.Ma = function() {
-        return null
-    };
-
-    function wz(a, c) {
-        if (null === a.c || null === a.e || null == a.d) return null;
-        var d = a.c[Math.floor((1 - (c[1] - a.a[1]) / (a.a[3] - a.a[1])) * a.c.length)];
-        if (!ia(d)) return null;
-        d = d.charCodeAt(Math.floor((c[0] - a.a[0]) / (a.a[2] - a.a[0]) * d.length));
-        93 <= d && d--;
-        35 <= d && d--;
-        d = a.e[d - 32];
-        return null != d ? a.d[d] : null
-    }
-
-    function uz(a, c, d, e, f) {
-        0 == a.state && !0 === f ? (Uc(a, "change", function() {
-            d.call(e, wz(this, c))
-        }, !1, a), xz(a)) : !0 === f ? wh(function() {
-            d.call(e, wz(this, c))
-        }, a) : d.call(e, wz(a, c))
-    }
-    l.gb = function() {
-        return this.g
-    };
-    l.Lj = function() {
-        this.state = 3;
-        Ag(this)
-    };
-    l.Xj = function(a) {
-        this.c = a.grid;
-        this.e = a.keys;
-        this.d = a.data;
-        this.state = 4;
-        Ag(this)
-    };
-
-    function xz(a) {
-        0 == a.state && (a.state = 1, (new Hy(a.g)).send(void 0, ra(a.Xj, a), ra(a.Lj, a)))
-    }
-    l.load = function() {
-        this.i && xz(this)
-    };
-
-    function yz(a) {
-        qp.call(this, {
-            attributions: a.attributions,
-            logo: a.logo,
-            projection: void 0,
-            state: "ready"
-        });
-        this.T = a.format;
-        this.n = a.tileGrid;
-        this.p = Py;
-        this.X = this.n.yb();
-        this.l = {};
-        m(a.tileUrlFunction) ? (this.p = a.tileUrlFunction, this.k()) : m(a.urls) ? (this.p = Ny(a.urls), this.k()) : m(a.url) && (this.p = Ny(Ry(a.url)), this.k())
-    }
-    w(yz, qp);
-    l = yz.prototype;
-    l.clear = function() {
-        yb(this.l)
-    };
-
-    function zz(a, c, d, e) {
-        var f = a.l;
-        a = a.n.Wb(c, d);
-        f = f[a[0] + "/" + a[1] + "/" + a[2]];
-        if (m(f))
-            for (a = 0, d = f.length; a < d; ++a) {
-                var g = f[a];
-                if (g.Q().Jb(c[0], c[1]) && e.call(void 0, g)) break
-            }
-    }
-    l.Ab = function(a, c, d, e) {
-        var f = this.n,
-            g = this.l;
-        c = Tg(f, c);
-        a = Pg(f, a, c);
-        for (var h, f = a.b; f <= a.d; ++f)
-            for (h = a.c; h <= a.a; ++h) {
-                var k = g[c + "/" + f + "/" + h];
-                if (m(k)) {
-                    var n, p;
-                    n = 0;
-                    for (p = k.length; n < p; ++n) {
-                        var q = d.call(e, k[n]);
-                        if (q) return q
-                    }
-                }
-            }
-    };
-    l.Dc = function() {
-        var a = this.l,
-            c = [],
-            d;
-        for (d in a) db(c, a[d]);
-        return c
-    };
-    l.Vi = function(a, c) {
-        var d = [];
-        zz(this, a, c, function(a) {
-            d.push(a)
-        });
-        return d
-    };
-    l.ac = function(a, c, d) {
-        function e(a, c) {
-            k[a] = c;
-            this.k()
-        }
-        var f = this.X,
-            g = this.n,
-            h = this.p,
-            k = this.l,
-            n = Tg(g, c),
-            g = Pg(g, a, n),
-            p = [n, 0, 0],
-            q, r;
-        for (q = g.b; q <= g.d; ++q)
-            for (r = g.c; r <= g.a; ++r) {
-                var t = n + "/" + q + "/" + r;
-                if (!(t in k)) {
-                    p[0] = n;
-                    p[1] = q;
-                    p[2] = r;
-                    f(p, d, p);
-                    var u = h(p, 1, d);
-                    m(u) && (k[t] = [], hp(u, this.T, ta(e, t)).call(this, a, c, d))
-                }
-            }
-    };
-
-    function Az(a) {
-        a = m(a) ? a : {};
-        var c = m(a.params) ? a.params : {};
-        Sy.call(this, {
-            attributions: a.attributions,
-            crossOrigin: a.crossOrigin,
-            logo: a.logo,
-            opaque: !Ab(c, "TRANSPARENT", !0),
-            projection: a.projection,
-            tileGrid: a.tileGrid,
-            tileLoadFunction: a.tileLoadFunction,
-            tileUrlFunction: ra(this.tm, this),
-            wrapX: a.wrapX
-        });
-        var d = a.urls;
-        !m(d) && m(a.url) && (d = Ry(a.url));
-        this.g = null != d ? d : [];
-        this.l = m(a.gutter) ? a.gutter : 0;
-        this.e = c;
-        this.i = !0;
-        this.n = a.serverType;
-        this.J = m(a.hidpi) ? a.hidpi : !0;
-        this.p = "";
-        Bz(this);
-        this.N = Kd();
-        Cz(this)
-    }
-    w(Az, Sy);
-    l = Az.prototype;
-    l.pm = function(a, c, d, e) {
-        d = re(d);
-        var f = this.tileGrid;
-        null === f && (f = ah(this, d));
-        c = f.Wb(a, c);
-        if (!(f.b.length <= c[0])) {
-            var g = f.ma(c[0]),
-                h = Og(f, c, this.N),
-                f = ld(f.na(c[0]), this.c),
-                k = this.l;
-            0 !== k && (f = jd(f, k, this.c), h = Od(h, g * k, h));
-            k = {
-                SERVICE: "WMS",
-                VERSION: "1.3.0",
-                REQUEST: "GetFeatureInfo",
-                FORMAT: "image/png",
-                TRANSPARENT: !0,
-                QUERY_LAYERS: this.e.LAYERS
-            };
-            Fb(k, this.e, e);
-            e = Math.floor((h[3] - a[1]) / g);
-            k[this.i ? "I" : "X"] = Math.floor((a[0] - h[0]) / g);
-            k[this.i ? "J" : "Y"] = e;
-            return Dz(this, c, f, h, 1, d, k)
-        }
-    };
-    l.Cd = function() {
-        return this.l
-    };
-    l.bb = function(a, c, d) {
-        return this.p + Az.S.bb.call(this, a, c, d)
-    };
-    l.qm = function() {
-        return this.e
-    };
-
-    function Dz(a, c, d, e, f, g, h) {
-        var k = a.g;
-        if (0 != k.length) {
-            h.WIDTH = d[0];
-            h.HEIGHT = d[1];
-            h[a.i ? "CRS" : "SRS"] = g.b;
-            "STYLES" in a.e || (h.STYLES = new String(""));
-            if (1 != f) switch (a.n) {
-                case "geoserver":
-                    d = 90 * f + .5 | 0;
-                    h.FORMAT_OPTIONS = m(h.FORMAT_OPTIONS) ? h.FORMAT_OPTIONS + (";dpi:" + d) : "dpi:" + d;
-                    break;
-                case "mapserver":
-                    h.MAP_RESOLUTION = 90 * f;
-                    break;
-                case "carmentaserver":
-                case "qgis":
-                    h.DPI = 90 * f
-            }
-            g = g.d;
-            a.i && "ne" == g.substr(0, 2) && (a = e[0], e[0] = e[1], e[1] = a, a = e[2], e[2] = e[3], e[3] = a);
-            h.BBOX = e.join(",");
-            return ao(co([1 == k.length ? k[0] : k[Wb((c[1] << c[0]) + c[2], k.length)]], h))
-        }
-    }
-    l.Xb = function(a, c, d) {
-        a = Az.S.Xb.call(this, a, c, d);
-        return 1 != c && this.J && m(this.n) ? kd(a, c, this.c) : a
-    };
-    l.rm = function() {
-        return this.g
-    };
-
-    function Bz(a) {
-        var c = 0,
-            d = [],
-            e, f;
-        e = 0;
-        for (f = a.g.length; e < f; ++e) d[c++] = a.g[e];
-        for (var g in a.e) d[c++] = g + "-" + a.e[g];
-        a.p = d.join("#")
-    }
-    l.sm = function(a) {
-        a = m(a) ? Ry(a) : null;
-        this.Og(a)
-    };
-    l.Og = function(a) {
-        this.g = null != a ? a : [];
-        Bz(this);
-        this.k()
-    };
-    l.tm = function(a, c, d) {
-        var e = this.tileGrid;
-        null === e && (e = ah(this, d));
-        if (!(e.b.length <= a[0])) {
-            1 == c || this.J && m(this.n) || (c = 1);
-            var f = e.ma(a[0]),
-                g = Og(e, a, this.N),
-                e = ld(e.na(a[0]), this.c),
-                h = this.l;
-            0 !== h && (e = jd(e, h, this.c), g = Od(g, f * h, g));
-            1 != c && (e = kd(e, c, this.c));
-            f = {
-                SERVICE: "WMS",
-                VERSION: "1.3.0",
-                REQUEST: "GetMap",
-                FORMAT: "image/png",
-                TRANSPARENT: !0
-            };
-            Fb(f, this.e);
-            return Dz(this, a, e, g, c, d, f)
-        }
-    };
-    l.um = function(a) {
-        Fb(this.e, a);
-        Bz(this);
-        Cz(this);
-        this.k()
-    };
-
-    function Cz(a) {
-        a.i = 0 <= Na(Ab(a.e, "VERSION", "1.3.0"), "1.3")
-    };
-
-    function Ez(a) {
-        this.e = a.matrixIds;
-        Mg.call(this, {
-            origin: a.origin,
-            origins: a.origins,
-            resolutions: a.resolutions,
-            tileSize: a.tileSize,
-            tileSizes: a.tileSizes,
-            widths: a.widths
-        })
-    }
-    w(Ez, Mg);
-    Ez.prototype.q = function() {
-        return this.e
-    };
-
-    function Fz(a) {
-        var c = [],
-            d = [],
-            e = [],
-            f = [],
-            g = [],
-            h;
-        h = re(a.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3"));
-        var k = h.Gd(),
-            n = "ne" == h.d.substr(0, 2);
-        gb(a.TileMatrix, function(a, c) {
-            return c.ScaleDenominator - a.ScaleDenominator
-        });
-        Sa(a.TileMatrix, function(a) {
-            d.push(a.Identifier);
-            n ? e.push([a.TopLeftCorner[1], a.TopLeftCorner[0]]) : e.push(a.TopLeftCorner);
-            c.push(2.8E-4 * a.ScaleDenominator / k);
-            var h = a.TileWidth,
-                r = a.TileHeight;
-            f.push(h == r ? h : [h, r]);
-            g.push(a.MatrixWidth)
-        });
-        return new Ez({
-            origins: e,
-            resolutions: c,
-            matrixIds: d,
-            tileSizes: f,
-            widths: g
-        })
-    };
-
-    function Gz(a) {
-        function c(a) {
-            a = "KVP" == e ? ao(co([a], g)) : a.replace(/\{(\w+?)\}/g, function(a, c) {
-                return c.toLowerCase() in g ? g[c.toLowerCase()] : a
-            });
-            return function(c) {
-                if (null !== c) {
-                    var d = {
-                        TileMatrix: f.e[c[0]],
-                        TileCol: c[1],
-                        TileRow: c[2]
-                    };
-                    Fb(d, h);
-                    c = a;
-                    return c = "KVP" == e ? ao(co([c], d)) : c.replace(/\{(\w+?)\}/g, function(a, c) {
-                        return d[c]
-                    })
-                }
-            }
-        }
-        this.N = m(a.version) ? a.version : "1.0.0";
-        this.n = m(a.format) ? a.format : "image/jpeg";
-        this.e = m(a.dimensions) ? a.dimensions : {};
-        this.l = "";
-        Hz(this);
-        this.p = a.layer;
-        this.i = a.matrixSet;
-        this.J = a.style;
-        var d = a.urls;
-        !m(d) && m(a.url) && (d = Ry(a.url));
-        this.g = null != d ? d : [];
-        var e = this.T = m(a.requestEncoding) ? a.requestEncoding : "KVP",
-            f = a.tileGrid,
-            g = {
-                layer: this.p,
-                style: this.J,
-                tilematrixset: this.i
-            };
-        "KVP" == e && Fb(g, {
-            Service: "WMTS",
-            Request: "GetTile",
-            Version: this.N,
-            Format: this.n
-        });
-        var h = this.e,
-            d = 0 < this.g.length ? Oy(Ua(this.g, c)) : Py,
-            k = Kd(),
-            d = Qy(function(a, c, d) {
-                if (f.b.length <= a[0]) return null;
-                var e = a[1],
-                    g = -a[2] - 1,
-                    h = Og(f, a, k);
-                c = c.G();
-                return !he(h, c) || he(h, c) && (h[0] == c[2] || h[2] == c[0] || h[1] == c[3] || h[3] == c[1]) ? null : bf(a[0], e, g, d)
-            }, d);
-        Sy.call(this, {
-            attributions: a.attributions,
-            crossOrigin: a.crossOrigin,
-            logo: a.logo,
-            projection: a.projection,
-            tileClass: a.tileClass,
-            tileGrid: f,
-            tileLoadFunction: a.tileLoadFunction,
-            tilePixelRatio: a.tilePixelRatio,
-            tileUrlFunction: d,
-            wrapX: m(a.wrapX) ? a.wrapX : !1
-        })
-    }
-    w(Gz, Sy);
-    l = Gz.prototype;
-    l.Ti = function() {
-        return this.e
-    };
-    l.Xi = function() {
-        return this.n
-    };
-    l.bb = function(a, c, d) {
-        return this.l + Gz.S.bb.call(this, a, c, d)
-    };
-    l.vm = function() {
-        return this.p
-    };
-    l.jj = function() {
-        return this.i
-    };
-    l.uj = function() {
-        return this.T
-    };
-    l.wm = function() {
-        return this.J
-    };
-    l.xm = function() {
-        return this.g
-    };
-    l.Aj = function() {
-        return this.N
-    };
-
-    function Hz(a) {
-        var c = 0,
-            d = [],
-            e;
-        for (e in a.e) d[c++] = e + "-" + a.e[e];
-        a.l = d.join("/")
-    }
-    l.uo = function(a) {
-        Fb(this.e, a);
-        Hz(this);
-        this.k()
-    };
-
-    function Iz(a) {
-        var c = m(a) ? a : c;
-        Mg.call(this, {
-            origin: [0, 0],
-            resolutions: c.resolutions
-        })
-    }
-    w(Iz, Mg);
-    Iz.prototype.yb = function(a) {
-        a = m(a) ? a : {};
-        var c = this.minZoom,
-            d = this.maxZoom,
-            e = null;
-        if (m(a.extent)) {
-            var e = Array(d + 1),
-                f;
-            for (f = 0; f <= d; ++f) e[f] = f < c ? null : Pg(this, a.extent, f)
-        }
-        return function(a, f, k) {
-            f = a[0];
-            if (f < c || d < f) return null;
-            var n = Math.pow(2, f),
-                p = a[1];
-            if (0 > p || n <= p) return null;
-            a = a[2];
-            return a < -n || -1 < a || null !== e && !hf(e[f], p, -a - 1) ? null : bf(f, p, -a - 1, k)
-        }
-    };
-
-    function Jz(a) {
-        a = m(a) ? a : {};
-        var c = a.size,
-            d = c[0],
-            e = c[1],
-            f = [],
-            g = 256;
-        switch (m(a.tierSizeCalculation) ? a.tierSizeCalculation : "default") {
-            case "default":
-                for (; d > g || e > g;) f.push([Math.ceil(d / g), Math.ceil(e / g)]), g += g;
-                break;
-            case "truncated":
-                for (; d > g || e > g;) f.push([Math.ceil(d / g), Math.ceil(e / g)]), d >>= 1, e >>= 1
-        }
-        f.push([1, 1]);
-        f.reverse();
-        for (var g = [1], h = [0], e = 1, d = f.length; e < d; e++) g.push(1 << e), h.push(f[e - 1][0] * f[e - 1][1] + h[e - 1]);
-        g.reverse();
-        var g = new Iz({
-                resolutions: g
-            }),
-            k = a.url,
-            c = Qy(g.yb({
-                extent: [0, 0, c[0], c[1]]
-            }), function(a) {
-                if (null !== a) {
-                    var c = a[0],
-                        d = a[1];
-                    a = a[2];
-                    return k + "TileGroup" + ((d + a * f[c][0] + h[c]) / 256 | 0) + "/" + c + "-" + d + "-" + a + ".jpg"
-                }
-            });
-        Sy.call(this, {
-            attributions: a.attributions,
-            crossOrigin: a.crossOrigin,
-            logo: a.logo,
-            tileClass: Kz,
-            tileGrid: g,
-            tileUrlFunction: c
-        })
-    }
-    w(Jz, Sy);
-
-    function Kz(a, c, d, e, f) {
-        px.call(this, a, c, d, e, f);
-        this.d = {}
-    }
-    w(Kz, px);
-    Kz.prototype.Ma = function(a) {
-        var c = m(a) ? ma(a).toString() : "";
-        if (c in this.d) return this.d[c];
-        a = Kz.S.Ma.call(this, a);
-        if (2 == this.state) {
-            if (256 == a.width && 256 == a.height) return this.d[c] = a;
-            var d = ai(256, 256);
-            d.drawImage(a, 0, 0);
-            return this.d[c] = d.canvas
-        }
-        return a
-    };
-
-    function Lz(a) {
-        a = m(a) ? a : {};
-        this.a = m(a.initialSize) ? a.initialSize : 256;
-        this.c = m(a.maxSize) ? a.maxSize : m(va) ? va : 2048;
-        this.b = m(a.space) ? a.space : 1;
-        this.e = [new Mz(this.a, this.b)];
-        this.d = this.a;
-        this.f = [new Mz(this.d, this.b)]
-    }
-    Lz.prototype.add = function(a, c, d, e, f, g) {
-        if (c + this.b > this.c || d + this.b > this.c) return null;
-        e = Nz(this, !1, a, c, d, e, g);
-        if (null === e) return null;
-        a = Nz(this, !0, a, c, d, m(f) ? f : Hg, g);
-        return {
-            offsetX: e.offsetX,
-            offsetY: e.offsetY,
-            image: e.image,
-            ig: a.image
-        }
-    };
-
-    function Nz(a, c, d, e, f, g, h) {
-        var k = c ? a.f : a.e,
-            n, p, q;
-        p = 0;
-        for (q = k.length; p < q; ++p) {
-            n = k[p];
-            n = n.add(d, e, f, g, h);
-            if (null !== n) return n;
-            null === n && p === q - 1 && (c ? (n = Math.min(2 * a.d, a.c), a.d = n) : (n = Math.min(2 * a.a, a.c), a.a = n), n = new Mz(n, a.b), k.push(n), ++q)
-        }
-    }
-
-    function Mz(a, c) {
-        this.b = c;
-        this.a = [{
-            x: 0,
-            y: 0,
-            width: a,
-            height: a
-        }];
-        this.d = {};
-        this.c = Mf("CANVAS");
-        this.c.width = a;
-        this.c.height = a;
-        this.e = this.c.getContext("2d")
-    }
-    Mz.prototype.get = function(a) {
-        return Ab(this.d, a, null)
-    };
-    Mz.prototype.add = function(a, c, d, e, f) {
-        var g, h, k;
-        h = 0;
-        for (k = this.a.length; h < k; ++h)
-            if (g = this.a[h], g.width >= c + this.b && g.height >= d + this.b) return k = {
-                offsetX: g.x + this.b,
-                offsetY: g.y + this.b,
-                image: this.c
-            }, this.d[a] = k, e.call(f, this.e, g.x + this.b, g.y + this.b), a = h, c = c + this.b, d = d + this.b, f = e = void 0, g.width - c > g.height - d ? (e = {
-                x: g.x + c,
-                y: g.y,
-                width: g.width - c,
-                height: g.height
-            }, f = {
-                x: g.x,
-                y: g.y + d,
-                width: c,
-                height: g.height - d
-            }, Oz(this, a, e, f)) : (e = {
-                x: g.x + c,
-                y: g.y,
-                width: g.width - c,
-                height: d
-            }, f = {
-                x: g.x,
-                y: g.y + d,
-                width: g.width,
-                height: g.height - d
-            }, Oz(this, a, e, f)), k;
-        return null
-    };
-
-    function Oz(a, c, d, e) {
-        c = [c, 1];
-        0 < d.width && 0 < d.height && c.push(d);
-        0 < e.width && 0 < e.height && c.push(e);
-        a.a.splice.apply(a.a, c)
-    };
-
-    function Pz(a) {
-        this.o = this.d = this.e = null;
-        this.i = m(a.fill) ? a.fill : null;
-        this.J = [0, 0];
-        this.b = a.points;
-        this.c = m(a.radius) ? a.radius : a.radius1;
-        this.f = m(a.radius2) ? a.radius2 : this.c;
-        this.g = m(a.angle) ? a.angle : 0;
-        this.a = m(a.stroke) ? a.stroke : null;
-        this.H = this.L = this.p = null;
-        var c = a.atlasManager,
-            d = "",
-            e = "",
-            f = 0,
-            g = null,
-            h, k = 0;
-        null !== this.a && (h = vf(this.a.b), k = this.a.a, m(k) || (k = 1), g = this.a.c, ki || (g = null), e = this.a.e, m(e) || (e = "round"), d = this.a.d, m(d) || (d = "round"), f = this.a.f, m(f) || (f = 10));
-        var n = 2 * (this.c + k) + 1,
-            d = {
-                strokeStyle: h,
-                md: k,
-                size: n,
-                lineCap: d,
-                lineDash: g,
-                lineJoin: e,
-                miterLimit: f
-            };
-        if (m(c)) {
-            var n = Math.round(n),
-                e = null === this.i,
-                p;
-            e && (p = ra(this.Tg, this, d));
-            f = this.nb();
-            p = c.add(f, n, n, ra(this.Ug, this, d), p);
-            this.d = p.image;
-            this.J = [p.offsetX, p.offsetY];
-            c = p.image.width;
-            this.o = e ? p.ig : this.d
-        } else this.d = Mf("CANVAS"), this.d.height = n, this.d.width = n, c = n = this.d.width, p = this.d.getContext("2d"), this.Ug(d, p, 0, 0), null === this.i ? (p = this.o = Mf("CANVAS"), p.height = d.size, p.width = d.size, p = p.getContext("2d"), this.Tg(d, p, 0, 0)) : this.o = this.d;
-        this.p = [n / 2, n / 2];
-        this.L = [n, n];
-        this.H = [c, c];
-        Ej.call(this, {
-            opacity: 1,
-            rotateWithView: !1,
-            rotation: m(a.rotation) ? a.rotation : 0,
-            scale: 1,
-            snapToPixel: m(a.snapToPixel) ? a.snapToPixel : !0
-        })
-    }
-    w(Pz, Ej);
-    l = Pz.prototype;
-    l.mb = function() {
-        return this.p
-    };
-    l.Cm = function() {
-        return this.g
-    };
-    l.Dm = function() {
-        return this.i
-    };
-    l.he = function() {
-        return this.o
-    };
-    l.Lb = function() {
-        return this.d
-    };
-    l.Dd = function() {
-        return this.H
-    };
-    l.gd = function() {
-        return 2
-    };
-    l.rb = function() {
-        return this.J
-    };
-    l.Em = function() {
-        return this.b
-    };
-    l.Fm = function() {
-        return this.c
-    };
-    l.tj = function() {
-        return this.f
-    };
-    l.Xa = function() {
-        return this.L
-    };
-    l.Gm = function() {
-        return this.a
-    };
-    l.$e = ca;
-    l.load = ca;
-    l.xf = ca;
-    l.Ug = function(a, c, d, e) {
-        var f;
-        c.setTransform(1, 0, 0, 1, 0, 0);
-        c.translate(d, e);
-        c.beginPath();
-        this.f !== this.c && (this.b *= 2);
-        for (d = 0; d <= this.b; d++) e = 2 * d * Math.PI / this.b - Math.PI / 2 + this.g, f = 0 === d % 2 ? this.c : this.f, c.lineTo(a.size / 2 + f * Math.cos(e), a.size / 2 + f * Math.sin(e));
-        null !== this.i && (c.fillStyle = vf(this.i.b), c.fill());
-        null !== this.a && (c.strokeStyle = a.strokeStyle, c.lineWidth = a.md, null === a.lineDash || c.setLineDash(a.lineDash), c.lineCap = a.lineCap, c.lineJoin = a.lineJoin, c.miterLimit = a.miterLimit, c.stroke());
-        c.closePath()
-    };
-    l.Tg = function(a, c, d, e) {
-        c.setTransform(1, 0, 0, 1, 0, 0);
-        c.translate(d, e);
-        c.beginPath();
-        this.f !== this.c && (this.b *= 2);
-        var f;
-        for (d = 0; d <= this.b; d++) f = 2 * d * Math.PI / this.b - Math.PI / 2 + this.g, e = 0 === d % 2 ? this.c : this.f, c.lineTo(a.size / 2 + e * Math.cos(f), a.size / 2 + e * Math.sin(f));
-        c.fillStyle = wl;
-        c.fill();
-        null !== this.a && (c.strokeStyle = a.strokeStyle, c.lineWidth = a.md, null === a.lineDash || c.setLineDash(a.lineDash), c.stroke());
-        c.closePath()
-    };
-    l.nb = function() {
-        var a = null === this.a ? "-" : this.a.nb(),
-            c = null === this.i ? "-" : this.i.nb();
-        if (null === this.e || a != this.e[1] || c != this.e[2] || this.c != this.e[3] || this.f != this.e[4] || this.g != this.e[5] || this.b != this.e[6]) this.e = ["r" + a + c + (m(this.c) ? this.c.toString() : "-") + (m(this.f) ? this.f.toString() : "-") + (m(this.g) ? this.g.toString() : "-") + (m(this.b) ? this.b.toString() : "-"), a, c, this.c, this.f, this.g, this.b];
-        return this.e[0]
-    };
-    v("ol.animation.bounce", function(a) {
-        var c = a.resolution,
-            d = m(a.start) ? a.start : ua(),
-            e = m(a.duration) ? a.duration : 1E3,
-            f = m(a.easing) ? a.easing : Ye;
-        return function(a, h) {
-            if (h.time < d) return h.animate = !0, h.viewHints[0] += 1, !0;
-            if (h.time < d + e) {
-                var k = f((h.time - d) / e),
-                    n = c - h.viewState.resolution;
-                h.animate = !0;
-                h.viewState.resolution += k * n;
-                h.viewHints[0] += 1;
-                return !0
-            }
-            return !1
-        }
-    }, OPENLAYERS);
-    v("ol.animation.pan", Ze, OPENLAYERS);
-    v("ol.animation.rotate", $e, OPENLAYERS);
-    v("ol.animation.zoom", af, OPENLAYERS);
-    v("ol.Attribution", mf, OPENLAYERS);
-    mf.prototype.getHTML = mf.prototype.c;
-    nf.prototype.element = nf.prototype.element;
-    v("ol.Collection", of, OPENLAYERS);
-    of.prototype.clear = of.prototype.clear;
-    of.prototype.extend = of.prototype.af;
-    of.prototype.forEach = of.prototype.forEach;
-    of.prototype.getArray = of.prototype.Hk;
-    of.prototype.item = of.prototype.item;
-    of.prototype.getLength = of.prototype.Ib;
-    of.prototype.insertAt = of.prototype.Td;
-    of.prototype.pop = of.prototype.pop;
-    of.prototype.push = of.prototype.push;
-    of.prototype.remove = of.prototype.remove;
-    of.prototype.removeAt = of.prototype.tf;
-    of.prototype.setAt = of.prototype.Un;
-    v("ol.coordinate.add", md, OPENLAYERS);
-    v("ol.coordinate.createStringXY", function(a) {
-        return function(c) {
-            return ud(c, a)
-        }
-    }, OPENLAYERS);
-    v("ol.coordinate.format", pd, OPENLAYERS);
-    v("ol.coordinate.rotate", rd, OPENLAYERS);
-    v("ol.coordinate.toStringHDMS", function(a) {
-        return m(a) ? od(a[1], "NS") + " " + od(a[0], "EW") : ""
-    }, OPENLAYERS);
-    v("ol.coordinate.toStringXY", ud, OPENLAYERS);
-    v("ol.DeviceOrientation", tr, OPENLAYERS);
-    tr.prototype.getAlpha = tr.prototype.Mi;
-    tr.prototype.getBeta = tr.prototype.Pi;
-    tr.prototype.getGamma = tr.prototype.Yi;
-    tr.prototype.getHeading = tr.prototype.Ik;
-    tr.prototype.getTracking = tr.prototype.og;
-    tr.prototype.setTracking = tr.prototype.bf;
-    v("ol.easing.easeIn", function(a) {
-        return Math.pow(a, 3)
-    }, OPENLAYERS);
-    v("ol.easing.easeOut", Ve, OPENLAYERS);
-    v("ol.easing.inAndOut", We, OPENLAYERS);
-    v("ol.easing.linear", Xe, OPENLAYERS);
-    v("ol.easing.upAndDown", Ye, OPENLAYERS);
-    v("ol.extent.boundingExtent", Jd, OPENLAYERS);
-    v("ol.extent.buffer", Od, OPENLAYERS);
-    v("ol.extent.containsCoordinate", function(a, c) {
-        return Sd(a, c[0], c[1])
-    }, OPENLAYERS);
-    v("ol.extent.containsExtent", Rd, OPENLAYERS);
-    v("ol.extent.containsXY", Sd, OPENLAYERS);
-    v("ol.extent.createEmpty", Kd, OPENLAYERS);
-    v("ol.extent.equals", Vd, OPENLAYERS);
-    v("ol.extent.extend", Wd, OPENLAYERS);
-    v("ol.extent.getBottomLeft", Zd, OPENLAYERS);
-    v("ol.extent.getBottomRight", $d, OPENLAYERS);
-    v("ol.extent.getCenter", ce, OPENLAYERS);
-    v("ol.extent.getHeight", fe, OPENLAYERS);
-    v("ol.extent.getIntersection", ge, OPENLAYERS);
-    v("ol.extent.getSize", function(a) {
-        return [a[2] - a[0], a[3] - a[1]]
-    }, OPENLAYERS);
-    v("ol.extent.getTopLeft", be, OPENLAYERS);
-    v("ol.extent.getTopRight", ae, OPENLAYERS);
-    v("ol.extent.getWidth", ie, OPENLAYERS);
-    v("ol.extent.intersects", he, OPENLAYERS);
-    v("ol.extent.isEmpty", je, OPENLAYERS);
-    v("ol.extent.applyTransform", le, OPENLAYERS);
-    v("ol.Feature", X, OPENLAYERS);
-    X.prototype.clone = X.prototype.clone;
-    X.prototype.getGeometry = X.prototype.Q;
-    X.prototype.getId = X.prototype.aj;
-    X.prototype.getGeometryName = X.prototype.$i;
-    X.prototype.getStyle = X.prototype.Qk;
-    X.prototype.getStyleFunction = X.prototype.Rk;
-    X.prototype.setGeometry = X.prototype.La;
-    X.prototype.setStyle = X.prototype.cf;
-    X.prototype.setId = X.prototype.Qb;
-    X.prototype.setGeometryName = X.prototype.Ic;
-    v("ol.featureloader.xhr", ip, OPENLAYERS);
-    v("ol.FeatureOverlay", ur, OPENLAYERS);
-    ur.prototype.addFeature = ur.prototype.pg;
-    ur.prototype.getFeatures = ur.prototype.Kk;
-    ur.prototype.getMap = ur.prototype.Lk;
-    ur.prototype.removeFeature = ur.prototype.Yd;
-    ur.prototype.setFeatures = ur.prototype.ld;
-    ur.prototype.setMap = ur.prototype.setMap;
-    ur.prototype.setStyle = ur.prototype.rg;
-    ur.prototype.getStyle = ur.prototype.Mk;
-    ur.prototype.getStyleFunction = ur.prototype.Nk;
-    v("ol.Geolocation", fx, OPENLAYERS);
-    fx.prototype.getAccuracy = fx.prototype.Ki;
-    fx.prototype.getAccuracyGeometry = fx.prototype.Li;
-    fx.prototype.getAltitude = fx.prototype.Ni;
-    fx.prototype.getAltitudeAccuracy = fx.prototype.Oi;
-    fx.prototype.getHeading = fx.prototype.Tk;
-    fx.prototype.getPosition = fx.prototype.Uk;
-    fx.prototype.getProjection = fx.prototype.sg;
-    fx.prototype.getSpeed = fx.prototype.vj;
-    fx.prototype.getTracking = fx.prototype.tg;
-    fx.prototype.getTrackingOptions = fx.prototype.bg;
-    fx.prototype.setProjection = fx.prototype.ug;
-    fx.prototype.setTracking = fx.prototype.Zd;
-    fx.prototype.setTrackingOptions = fx.prototype.Dh;
-    v("ol.Graticule", jx, OPENLAYERS);
-    jx.prototype.getMap = jx.prototype.Xk;
-    jx.prototype.getMeridians = jx.prototype.kj;
-    jx.prototype.getParallels = jx.prototype.pj;
-    jx.prototype.setMap = jx.prototype.setMap;
-    v("ol.has.DEVICE_PIXEL_RATIO", ji, OPENLAYERS);
-    v("ol.has.CANVAS", li, OPENLAYERS);
-    v("ol.has.DEVICE_ORIENTATION", mi, OPENLAYERS);
-    v("ol.has.GEOLOCATION", ni, OPENLAYERS);
-    v("ol.has.TOUCH", oi, OPENLAYERS);
-    v("ol.has.WEBGL", ii, OPENLAYERS);
-    ox.prototype.getImage = ox.prototype.b;
-    px.prototype.getImage = px.prototype.Ma;
-    v("ol.Kinetic", Tj, OPENLAYERS);
-    v("ol.loadingstrategy.all", jp, OPENLAYERS);
-    v("ol.loadingstrategy.bbox", function(a) {
-        return [a]
-    }, OPENLAYERS);
-    v("ol.loadingstrategy.tile", function(a) {
-        return function(c, d) {
-            var e = Tg(a, d),
-                f = Pg(a, c, e),
-                g = [],
-                e = [e, 0, 0];
-            for (e[1] = f.b; e[1] <= f.d; ++e[1])
-                for (e[2] = f.c; e[2] <= f.a; ++e[2]) g.push(Og(a, e));
-            return g
-        }
-    }, OPENLAYERS);
-    v("ol.Map", W, OPENLAYERS);
-    W.prototype.addControl = W.prototype.si;
-    W.prototype.addInteraction = W.prototype.ti;
-    W.prototype.addLayer = W.prototype.Jf;
-    W.prototype.addOverlay = W.prototype.Kf;
-    W.prototype.beforeRender = W.prototype.Ha;
-    W.prototype.forEachFeatureAtPixel = W.prototype.Ne;
-    W.prototype.forEachLayerAtPixel = W.prototype.al;
-    W.prototype.hasFeatureAtPixel = W.prototype.ok;
-    W.prototype.getEventCoordinate = W.prototype.Ui;
-    W.prototype.getEventPixel = W.prototype.Bd;
-    W.prototype.getTarget = W.prototype.df;
-    W.prototype.getTargetElement = W.prototype.bd;
-    W.prototype.getCoordinateFromPixel = W.prototype.ka;
-    W.prototype.getControls = W.prototype.Si;
-    W.prototype.getOverlays = W.prototype.oj;
-    W.prototype.getInteractions = W.prototype.bj;
-    W.prototype.getLayerGroup = W.prototype.Ub;
-    W.prototype.getLayers = W.prototype.vg;
-    W.prototype.getPixelFromCoordinate = W.prototype.ta;
-    W.prototype.getSize = W.prototype.xa;
-    W.prototype.getView = W.prototype.R;
-    W.prototype.getViewport = W.prototype.Bj;
-    W.prototype.renderSync = W.prototype.Rn;
-    W.prototype.render = W.prototype.render;
-    W.prototype.removeControl = W.prototype.Ln;
-    W.prototype.removeInteraction = W.prototype.Mn;
-    W.prototype.removeLayer = W.prototype.Nn;
-    W.prototype.removeOverlay = W.prototype.On;
-    W.prototype.setLayerGroup = W.prototype.zh;
-    W.prototype.setSize = W.prototype.vf;
-    W.prototype.setTarget = W.prototype.cl;
-    W.prototype.setView = W.prototype.jo;
-    W.prototype.updateSize = W.prototype.Kc;
-    Zi.prototype.originalEvent = Zi.prototype.originalEvent;
-    Zi.prototype.pixel = Zi.prototype.pixel;
-    Zi.prototype.coordinate = Zi.prototype.coordinate;
-    Zi.prototype.dragging = Zi.prototype.dragging;
-    Zi.prototype.preventDefault = Zi.prototype.preventDefault;
-    Zi.prototype.stopPropagation = Zi.prototype.fb;
-    tg.prototype.map = tg.prototype.map;
-    tg.prototype.frameState = tg.prototype.frameState;
-    ed.prototype.key = ed.prototype.key;
-    ed.prototype.oldValue = ed.prototype.oldValue;
-    v("ol.Object", fd, OPENLAYERS);
-    fd.prototype.get = fd.prototype.get;
-    fd.prototype.getKeys = fd.prototype.C;
-    fd.prototype.getProperties = fd.prototype.D;
-    fd.prototype.set = fd.prototype.set;
-    fd.prototype.setProperties = fd.prototype.t;
-    fd.prototype.unset = fd.prototype.I;
-    v("ol.Observable", cd, OPENLAYERS);
-    v("ol.Observable.unByKey", dd, OPENLAYERS);
-    cd.prototype.changed = cd.prototype.k;
-    cd.prototype.getRevision = cd.prototype.v;
-    cd.prototype.on = cd.prototype.r;
-    cd.prototype.once = cd.prototype.A;
-    cd.prototype.un = cd.prototype.u;
-    cd.prototype.unByKey = cd.prototype.B;
-    v("ol.inherits", w, OPENLAYERS);
-    v("ol.Overlay", Rq, OPENLAYERS);
-    Rq.prototype.getElement = Rq.prototype.$d;
-    Rq.prototype.getMap = Rq.prototype.ae;
-    Rq.prototype.getOffset = Rq.prototype.Yf;
-    Rq.prototype.getPosition = Rq.prototype.wg;
-    Rq.prototype.getPositioning = Rq.prototype.ag;
-    Rq.prototype.setElement = Rq.prototype.wh;
-    Rq.prototype.setMap = Rq.prototype.setMap;
-    Rq.prototype.setOffset = Rq.prototype.Bh;
-    Rq.prototype.setPosition = Rq.prototype.uf;
-    Rq.prototype.setPositioning = Rq.prototype.Ch;
-    v("ol.size.toSize", ld, OPENLAYERS);
-    zg.prototype.getTileCoord = zg.prototype.f;
-    v("ol.View", Ne, OPENLAYERS);
-    Ne.prototype.constrainCenter = Ne.prototype.xd;
-    Ne.prototype.constrainResolution = Ne.prototype.constrainResolution;
-    Ne.prototype.constrainRotation = Ne.prototype.constrainRotation;
-    Ne.prototype.getCenter = Ne.prototype.Ca;
-    Ne.prototype.calculateExtent = Ne.prototype.Pc;
-    Ne.prototype.getProjection = Ne.prototype.dl;
-    Ne.prototype.getResolution = Ne.prototype.ya;
-    Ne.prototype.getRotation = Ne.prototype.Da;
-    Ne.prototype.getZoom = Ne.prototype.Ej;
-    Ne.prototype.fitExtent = Ne.prototype.Me;
-    Ne.prototype.fitGeometry = Ne.prototype.Fi;
-    Ne.prototype.centerOn = Ne.prototype.Ai;
-    Ne.prototype.rotate = Ne.prototype.rotate;
-    Ne.prototype.setCenter = Ne.prototype.Na;
-    Ne.prototype.setResolution = Ne.prototype.tb;
-    Ne.prototype.setRotation = Ne.prototype.be;
-    Ne.prototype.setZoom = Ne.prototype.no;
-    v("ol.xml.getAllTextContent", Bo, OPENLAYERS);
-    v("ol.xml.parse", Vo, OPENLAYERS);
-    v("ol.webgl.Context", Wp, OPENLAYERS);
-    Wp.prototype.getGL = Wp.prototype.Xm;
-    Wp.prototype.getHitDetectionFramebuffer = Wp.prototype.Te;
-    Wp.prototype.useProgram = Wp.prototype.oe;
-    v("ol.tilegrid.TileGrid", Mg, OPENLAYERS);
-    Mg.prototype.getMaxZoom = Mg.prototype.Fd;
-    Mg.prototype.getMinZoom = Mg.prototype.Hd;
-    Mg.prototype.getOrigin = Mg.prototype.Mb;
-    Mg.prototype.getResolution = Mg.prototype.ma;
-    Mg.prototype.getResolutions = Mg.prototype.ne;
-    Mg.prototype.getTileCoordForCoordAndResolution = Mg.prototype.Wb;
-    Mg.prototype.getTileCoordForCoordAndZ = Mg.prototype.cd;
-    Mg.prototype.getTileSize = Mg.prototype.na;
-    v("ol.tilegrid.WMTS", Ez, OPENLAYERS);
-    Ez.prototype.getMatrixIds = Ez.prototype.q;
-    v("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet", Fz, OPENLAYERS);
-    v("ol.tilegrid.XYZ", Uy, OPENLAYERS);
-    v("ol.tilegrid.Zoomify", Iz, OPENLAYERS);
-    v("ol.style.AtlasManager", Lz, OPENLAYERS);
-    v("ol.style.Circle", Al, OPENLAYERS);
-    Al.prototype.getAnchor = Al.prototype.mb;
-    Al.prototype.getFill = Al.prototype.ym;
-    Al.prototype.getImage = Al.prototype.Lb;
-    Al.prototype.getOrigin = Al.prototype.rb;
-    Al.prototype.getRadius = Al.prototype.zm;
-    Al.prototype.getSize = Al.prototype.Xa;
-    Al.prototype.getStroke = Al.prototype.Am;
-    v("ol.style.Fill", zl, OPENLAYERS);
-    zl.prototype.getColor = zl.prototype.c;
-    zl.prototype.setColor = zl.prototype.d;
-    v("ol.style.Icon", Fj, OPENLAYERS);
-    Fj.prototype.getAnchor = Fj.prototype.mb;
-    Fj.prototype.getImage = Fj.prototype.Lb;
-    Fj.prototype.getOrigin = Fj.prototype.rb;
-    Fj.prototype.getSrc = Fj.prototype.Bm;
-    Fj.prototype.getSize = Fj.prototype.Xa;
-    v("ol.style.Image", Ej, OPENLAYERS);
-    Ej.prototype.getOpacity = Ej.prototype.ie;
-    Ej.prototype.getRotateWithView = Ej.prototype.Jd;
-    Ej.prototype.getRotation = Ej.prototype.je;
-    Ej.prototype.getScale = Ej.prototype.ke;
-    Ej.prototype.getSnapToPixel = Ej.prototype.Kd;
-    Ej.prototype.setRotation = Ej.prototype.le;
-    Ej.prototype.setScale = Ej.prototype.me;
-    v("ol.style.RegularShape", Pz, OPENLAYERS);
-    Pz.prototype.getAnchor = Pz.prototype.mb;
-    Pz.prototype.getAngle = Pz.prototype.Cm;
-    Pz.prototype.getFill = Pz.prototype.Dm;
-    Pz.prototype.getImage = Pz.prototype.Lb;
-    Pz.prototype.getOrigin = Pz.prototype.rb;
-    Pz.prototype.getPoints = Pz.prototype.Em;
-    Pz.prototype.getRadius = Pz.prototype.Fm;
-    Pz.prototype.getRadius2 = Pz.prototype.tj;
-    Pz.prototype.getSize = Pz.prototype.Xa;
-    Pz.prototype.getStroke = Pz.prototype.Gm;
-    v("ol.style.Stroke", vl, OPENLAYERS);
-    vl.prototype.getColor = vl.prototype.Hm;
-    vl.prototype.getLineCap = vl.prototype.ej;
-    vl.prototype.getLineDash = vl.prototype.Im;
-    vl.prototype.getLineJoin = vl.prototype.fj;
-    vl.prototype.getMiterLimit = vl.prototype.lj;
-    vl.prototype.getWidth = vl.prototype.Jm;
-    vl.prototype.setColor = vl.prototype.Km;
-    vl.prototype.setLineCap = vl.prototype.Zn;
-    vl.prototype.setLineDash = vl.prototype.Lm;
-    vl.prototype.setLineJoin = vl.prototype.$n;
-    vl.prototype.setMiterLimit = vl.prototype.ao;
-    vl.prototype.setWidth = vl.prototype.ko;
-    v("ol.style.Style", Bl, OPENLAYERS);
-    Bl.prototype.getGeometry = Bl.prototype.Q;
-    Bl.prototype.getGeometryFunction = Bl.prototype.Zi;
-    Bl.prototype.getFill = Bl.prototype.Mm;
-    Bl.prototype.getImage = Bl.prototype.Nm;
-    Bl.prototype.getStroke = Bl.prototype.Om;
-    Bl.prototype.getText = Bl.prototype.Pm;
-    Bl.prototype.getZIndex = Bl.prototype.Dj;
-    Bl.prototype.setGeometry = Bl.prototype.Vg;
-    Bl.prototype.setZIndex = Bl.prototype.mo;
-    v("ol.style.Text", ut, OPENLAYERS);
-    ut.prototype.getFont = ut.prototype.Wi;
-    ut.prototype.getOffsetX = ut.prototype.mj;
-    ut.prototype.getOffsetY = ut.prototype.nj;
-    ut.prototype.getFill = ut.prototype.Qm;
-    ut.prototype.getRotation = ut.prototype.Rm;
-    ut.prototype.getScale = ut.prototype.Sm;
-    ut.prototype.getStroke = ut.prototype.Tm;
-    ut.prototype.getText = ut.prototype.Um;
-    ut.prototype.getTextAlign = ut.prototype.xj;
-    ut.prototype.getTextBaseline = ut.prototype.yj;
-    ut.prototype.setFont = ut.prototype.Wn;
-    ut.prototype.setFill = ut.prototype.Vn;
-    ut.prototype.setRotation = ut.prototype.Vm;
-    ut.prototype.setScale = ut.prototype.Wm;
-    ut.prototype.setStroke = ut.prototype.eo;
-    ut.prototype.setText = ut.prototype.fo;
-    ut.prototype.setTextAlign = ut.prototype.ho;
-    ut.prototype.setTextBaseline = ut.prototype.io;
-    v("ol.Sphere", me, OPENLAYERS);
-    me.prototype.geodesicArea = me.prototype.a;
-    me.prototype.haversineDistance = me.prototype.b;
-    v("ol.source.BingMaps", Vy, OPENLAYERS);
-    v("ol.source.BingMaps.TOS_ATTRIBUTION", Wy, OPENLAYERS);
-    v("ol.source.Cluster", Xy, OPENLAYERS);
-    Xy.prototype.getSource = Xy.prototype.X;
-    v("ol.source.ImageCanvas", qn, OPENLAYERS);
-    v("ol.source.ImageMapGuide", $y, OPENLAYERS);
-    $y.prototype.getParams = $y.prototype.Tl;
-    $y.prototype.getImageLoadFunction = $y.prototype.Sl;
-    $y.prototype.updateParams = $y.prototype.Wl;
-    $y.prototype.setImageLoadFunction = $y.prototype.Vl;
-    v("ol.source.Image", jn, OPENLAYERS);
-    ln.prototype.image = ln.prototype.image;
-    v("ol.source.ImageStatic", az, OPENLAYERS);
-    v("ol.source.ImageVector", xp, OPENLAYERS);
-    xp.prototype.getSource = xp.prototype.Xl;
-    xp.prototype.getStyle = xp.prototype.Yl;
-    xp.prototype.getStyleFunction = xp.prototype.Zl;
-    xp.prototype.setStyle = xp.prototype.Mg;
-    v("ol.source.ImageWMS", bz, OPENLAYERS);
-    bz.prototype.getGetFeatureInfoUrl = bz.prototype.bm;
-    bz.prototype.getParams = bz.prototype.dm;
-    bz.prototype.getImageLoadFunction = bz.prototype.cm;
-    bz.prototype.getUrl = bz.prototype.em;
-    bz.prototype.setImageLoadFunction = bz.prototype.fm;
-    bz.prototype.setUrl = bz.prototype.gm;
-    bz.prototype.updateParams = bz.prototype.hm;
-    v("ol.source.MapQuest", iz, OPENLAYERS);
-    iz.prototype.getLayer = iz.prototype.i;
-    v("ol.source.OSM", gz, OPENLAYERS);
-    v("ol.source.OSM.ATTRIBUTION", hz, OPENLAYERS);
-    v("ol.source.Source", Bg, OPENLAYERS);
-    Bg.prototype.getAttributions = Bg.prototype.ea;
-    Bg.prototype.getLogo = Bg.prototype.ca;
-    Bg.prototype.getProjection = Bg.prototype.fa;
-    Bg.prototype.getState = Bg.prototype.ga;
-    v("ol.source.Stamen", nz, OPENLAYERS);
-    v("ol.source.TileArcGISRest", pz, OPENLAYERS);
-    pz.prototype.getParams = pz.prototype.im;
-    pz.prototype.getUrls = pz.prototype.jm;
-    pz.prototype.setUrl = pz.prototype.km;
-    pz.prototype.setUrls = pz.prototype.Ng;
-    pz.prototype.updateParams = pz.prototype.mm;
-    v("ol.source.TileDebug", rz, OPENLAYERS);
-    v("ol.source.TileImage", Sy, OPENLAYERS);
-    Sy.prototype.getTileLoadFunction = Sy.prototype.Ua;
-    Sy.prototype.getTileUrlFunction = Sy.prototype.Va;
-    Sy.prototype.setTileLoadFunction = Sy.prototype.$a;
-    Sy.prototype.setTileUrlFunction = Sy.prototype.pa;
-    v("ol.source.TileJSON", sz, OPENLAYERS);
-    v("ol.source.Tile", Zg, OPENLAYERS);
-    Zg.prototype.getTileGrid = Zg.prototype.ua;
-    bh.prototype.tile = bh.prototype.tile;
-    v("ol.source.TileUTFGrid", tz, OPENLAYERS);
-    tz.prototype.getTemplate = tz.prototype.wj;
-    tz.prototype.forDataAtCoordinateAndResolution = tz.prototype.Gi;
-    v("ol.source.TileVector", yz, OPENLAYERS);
-    yz.prototype.getFeatures = yz.prototype.Dc;
-    yz.prototype.getFeaturesAtCoordinateAndResolution = yz.prototype.Vi;
-    v("ol.source.TileWMS", Az, OPENLAYERS);
-    Az.prototype.getGetFeatureInfoUrl = Az.prototype.pm;
-    Az.prototype.getParams = Az.prototype.qm;
-    Az.prototype.getUrls = Az.prototype.rm;
-    Az.prototype.setUrl = Az.prototype.sm;
-    Az.prototype.setUrls = Az.prototype.Og;
-    Az.prototype.updateParams = Az.prototype.um;
-    v("ol.source.Vector", qp, OPENLAYERS);
-    qp.prototype.addFeature = qp.prototype.jf;
-    qp.prototype.addFeatures = qp.prototype.Oc;
-    qp.prototype.clear = qp.prototype.clear;
-    qp.prototype.forEachFeature = qp.prototype.Rf;
-    qp.prototype.forEachFeatureInExtent = qp.prototype.$c;
-    qp.prototype.forEachFeatureIntersectingExtent = qp.prototype.Oe;
-    qp.prototype.getFeatures = qp.prototype.Dc;
-    qp.prototype.getFeaturesAtCoordinate = qp.prototype.Re;
-    qp.prototype.getFeaturesInExtent = qp.prototype.Se;
-    qp.prototype.getClosestFeatureToCoordinate = qp.prototype.Tf;
-    qp.prototype.getExtent = qp.prototype.G;
-    qp.prototype.getFeatureById = qp.prototype.Qe;
-    qp.prototype.removeFeature = qp.prototype.Qg;
-    up.prototype.feature = up.prototype.feature;
-    v("ol.source.WMTS", Gz, OPENLAYERS);
-    Gz.prototype.getDimensions = Gz.prototype.Ti;
-    Gz.prototype.getFormat = Gz.prototype.Xi;
-    Gz.prototype.getLayer = Gz.prototype.vm;
-    Gz.prototype.getMatrixSet = Gz.prototype.jj;
-    Gz.prototype.getRequestEncoding = Gz.prototype.uj;
-    Gz.prototype.getStyle = Gz.prototype.wm;
-    Gz.prototype.getUrls = Gz.prototype.xm;
-    Gz.prototype.getVersion = Gz.prototype.Aj;
-    Gz.prototype.updateDimensions = Gz.prototype.uo;
-    v("ol.source.WMTS.optionsFromCapabilities", function(a, c) {
-        var d = Wa(a.Contents.Layer, function(a) {
-                return a.Identifier == c.layer
-            }),
-            e, f, g;
-        e = 1 < d.TileMatrixSetLink.length ? Xa(d.TileMatrixSetLink, function(a) {
-            return a.TileMatrixSet == c.matrixSet
-        }) : m(c.projection) ? Xa(d.TileMatrixSetLink, function(a) {
-            return a.TileMatrixSet.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3") == c.projection
-        }) : 0;
-        0 > e && (e = 0);
-        f = d.TileMatrixSetLink[e].TileMatrixSet;
-        e = d.WGS84BoundingBox;
-        m(e) && (g = re("EPSG:4326").G(), g = e[0] == g[0] && e[2] == g[2]);
-        var h = d.Format[0];
-        m(c.format) && (h = c.format);
-        e = Xa(d.Style, function(a) {
-            return m(c.style) ? a.Title == c.style : a.isDefault
-        });
-        0 > e && (e = 0);
-        e = d.Style[e].Identifier;
-        var k = {};
-        m(d.Dimension) && Sa(d.Dimension, function(a) {
-            var c = a.Identifier,
-                d = a["default"];
-            m(d) || (d = a.values[0]);
-            k[c] = d
-        });
-        var n = Wa(a.Contents.TileMatrixSet, function(a) {
-                return a.Identifier == f
-            }),
-            p = Fz(n),
-            n = m(c.projection) ? re(c.projection) : re(n.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3")),
-            q = [],
-            r = c.requestEncoding,
-            r = m(r) ? r : "";
-        if (a.OperationsMetadata.hasOwnProperty("GetTile") && 0 != r.lastIndexOf("REST", 0))
-            for (var d = a.OperationsMetadata.GetTile.DCP.HTTP.Get, t = 0, u = d.length; t < u; ++t) {
-                var A = Wa(d[t].Constraint, function(a) {
-                    return "GetEncoding" == a.name
-                }).AllowedValues.Value;
-                0 < A.length && Ya(A, "KVP") && (r = "KVP", q.push(d[t].href))
-            } else r = "REST", Sa(d.ResourceURL, function(a) {
-                "tile" == a.resourceType && (h = a.format, q.push(a.template))
-            });
-        return {
-            urls: q,
-            layer: c.layer,
-            matrixSet: f,
-            format: h,
-            projection: n,
-            requestEncoding: r,
-            tileGrid: p,
-            style: e,
-            dimensions: k,
-            wrapX: g
-        }
-    }, OPENLAYERS);
-    v("ol.source.XYZ", fz, OPENLAYERS);
-    fz.prototype.setTileUrlFunction = fz.prototype.pa;
-    fz.prototype.setUrl = fz.prototype.e;
-    v("ol.source.Zoomify", Jz, OPENLAYERS);
-    il.prototype.vectorContext = il.prototype.vectorContext;
-    il.prototype.frameState = il.prototype.frameState;
-    il.prototype.context = il.prototype.context;
-    il.prototype.glContext = il.prototype.glContext;
-    v("ol.render.VectorContext", hl, OPENLAYERS);
-    rq.prototype.drawAsync = rq.prototype.tc;
-    rq.prototype.drawCircleGeometry = rq.prototype.uc;
-    rq.prototype.drawFeature = rq.prototype.Le;
-    rq.prototype.drawGeometryCollectionGeometry = rq.prototype.zd;
-    rq.prototype.drawPointGeometry = rq.prototype.kb;
-    rq.prototype.drawLineStringGeometry = rq.prototype.zb;
-    rq.prototype.drawMultiLineStringGeometry = rq.prototype.vc;
-    rq.prototype.drawMultiPointGeometry = rq.prototype.jb;
-    rq.prototype.drawMultiPolygonGeometry = rq.prototype.wc;
-    rq.prototype.drawPolygonGeometry = rq.prototype.Rb;
-    rq.prototype.drawText = rq.prototype.lb;
-    rq.prototype.setFillStrokeStyle = rq.prototype.Aa;
-    rq.prototype.setImageStyle = rq.prototype.Za;
-    rq.prototype.setTextStyle = rq.prototype.Ba;
-    cm.prototype.drawAsync = cm.prototype.tc;
-    cm.prototype.drawCircleGeometry = cm.prototype.uc;
-    cm.prototype.drawFeature = cm.prototype.Le;
-    cm.prototype.drawPointGeometry = cm.prototype.kb;
-    cm.prototype.drawMultiPointGeometry = cm.prototype.jb;
-    cm.prototype.drawLineStringGeometry = cm.prototype.zb;
-    cm.prototype.drawMultiLineStringGeometry = cm.prototype.vc;
-    cm.prototype.drawPolygonGeometry = cm.prototype.Rb;
-    cm.prototype.drawMultiPolygonGeometry = cm.prototype.wc;
-    cm.prototype.setFillStrokeStyle = cm.prototype.Aa;
-    cm.prototype.setImageStyle = cm.prototype.Za;
-    cm.prototype.setTextStyle = cm.prototype.Ba;
-    v("ol.proj.common.add", bm, OPENLAYERS);
-    v("ol.proj.METERS_PER_UNIT", oe, OPENLAYERS);
-    v("ol.proj.Projection", pe, OPENLAYERS);
-    pe.prototype.getCode = pe.prototype.Ri;
-    pe.prototype.getExtent = pe.prototype.G;
-    pe.prototype.getUnits = pe.prototype.Ll;
-    pe.prototype.getMetersPerUnit = pe.prototype.Gd;
-    pe.prototype.getWorldExtent = pe.prototype.Cj;
-    pe.prototype.isGlobal = pe.prototype.Ml;
-    pe.prototype.setGlobal = pe.prototype.Yn;
-    pe.prototype.setExtent = pe.prototype.Nl;
-    pe.prototype.setWorldExtent = pe.prototype.lo;
-    pe.prototype.setGetPointResolution = pe.prototype.Xn;
-    pe.prototype.getPointResolution = pe.prototype.getPointResolution;
-    v("ol.proj.addEquivalentProjections", se, OPENLAYERS);
-    v("ol.proj.addProjection", Fe, OPENLAYERS);
-    v("ol.proj.addCoordinateTransforms", te, OPENLAYERS);
-    v("ol.proj.fromLonLat", function(a, c) {
-        return Le(a, "EPSG:4326", m(c) ? c : "EPSG:3857")
-    }, OPENLAYERS);
-    v("ol.proj.toLonLat", function(a, c) {
-        return Le(a, m(c) ? c : "EPSG:3857", "EPSG:4326")
-    }, OPENLAYERS);
-    v("ol.proj.get", re, OPENLAYERS);
-    v("ol.proj.getTransform", Je, OPENLAYERS);
-    v("ol.proj.transform", Le, OPENLAYERS);
-    v("ol.proj.transformExtent", Me, OPENLAYERS);
-    v("ol.layer.Heatmap", Z, OPENLAYERS);
-    Z.prototype.getBlur = Z.prototype.Sf;
-    Z.prototype.getGradient = Z.prototype.Wf;
-    Z.prototype.getRadius = Z.prototype.Hg;
-    Z.prototype.setBlur = Z.prototype.th;
-    Z.prototype.setGradient = Z.prototype.yh;
-    Z.prototype.setRadius = Z.prototype.Ig;
-    v("ol.layer.Image", I, OPENLAYERS);
-    I.prototype.getSource = I.prototype.da;
-    v("ol.layer.Layer", C, OPENLAYERS);
-    C.prototype.getSource = C.prototype.da;
-    C.prototype.setSource = C.prototype.Jc;
-    v("ol.layer.Base", mj, OPENLAYERS);
-    mj.prototype.getBrightness = mj.prototype.Bb;
-    mj.prototype.getContrast = mj.prototype.Cb;
-    mj.prototype.getHue = mj.prototype.Db;
-    mj.prototype.getExtent = mj.prototype.G;
-    mj.prototype.getMaxResolution = mj.prototype.Eb;
-    mj.prototype.getMinResolution = mj.prototype.Fb;
-    mj.prototype.getOpacity = mj.prototype.Kb;
-    mj.prototype.getSaturation = mj.prototype.Gb;
-    mj.prototype.getVisible = mj.prototype.eb;
-    mj.prototype.setBrightness = mj.prototype.gc;
-    mj.prototype.setContrast = mj.prototype.hc;
-    mj.prototype.setHue = mj.prototype.ic;
-    mj.prototype.setExtent = mj.prototype.bc;
-    mj.prototype.setMaxResolution = mj.prototype.jc;
-    mj.prototype.setMinResolution = mj.prototype.kc;
-    mj.prototype.setOpacity = mj.prototype.cc;
-    mj.prototype.setSaturation = mj.prototype.lc;
-    mj.prototype.setVisible = mj.prototype.mc;
-    v("ol.layer.Group", G, OPENLAYERS);
-    G.prototype.getLayers = G.prototype.Bc;
-    G.prototype.setLayers = G.prototype.Ah;
-    v("ol.layer.Tile", L, OPENLAYERS);
-    L.prototype.getPreload = L.prototype.a;
-    L.prototype.getSource = L.prototype.da;
-    L.prototype.setPreload = L.prototype.d;
-    L.prototype.getUseInterimTilesOnError = L.prototype.c;
-    L.prototype.setUseInterimTilesOnError = L.prototype.e;
-    v("ol.layer.Vector", M, OPENLAYERS);
-    M.prototype.getSource = M.prototype.da;
-    M.prototype.getStyle = M.prototype.H;
-    M.prototype.getStyleFunction = M.prototype.J;
-    M.prototype.setStyle = M.prototype.e;
-    v("ol.interaction.DoubleClickZoom", ak, OPENLAYERS);
-    v("ol.interaction.DoubleClickZoom.handleEvent", bk, OPENLAYERS);
-    v("ol.interaction.DragAndDrop", Kx, OPENLAYERS);
-    v("ol.interaction.DragAndDrop.handleEvent", Gg, OPENLAYERS);
-    Lx.prototype.features = Lx.prototype.features;
-    Lx.prototype.file = Lx.prototype.file;
-    Lx.prototype.projection = Lx.prototype.projection;
-    ml.prototype.coordinate = ml.prototype.coordinate;
-    v("ol.interaction.DragBox", nl, OPENLAYERS);
-    nl.prototype.getGeometry = nl.prototype.Q;
-    v("ol.interaction.DragPan", mk, OPENLAYERS);
-    v("ol.interaction.DragRotateAndZoom", Ox, OPENLAYERS);
-    v("ol.interaction.DragRotate", qk, OPENLAYERS);
-    v("ol.interaction.DragZoom", Gl, OPENLAYERS);
-    Sx.prototype.feature = Sx.prototype.feature;
-    v("ol.interaction.Draw", Tx, OPENLAYERS);
-    v("ol.interaction.Draw.handleEvent", Vx, OPENLAYERS);
-    Tx.prototype.finishDrawing = Tx.prototype.X;
-    v("ol.interaction.Interaction", Wj, OPENLAYERS);
-    Wj.prototype.getActive = Wj.prototype.c;
-    Wj.prototype.setActive = Wj.prototype.d;
-    v("ol.interaction.defaults", Vl, OPENLAYERS);
-    v("ol.interaction.KeyboardPan", Hl, OPENLAYERS);
-    v("ol.interaction.KeyboardPan.handleEvent", Il, OPENLAYERS);
-    v("ol.interaction.KeyboardZoom", Jl, OPENLAYERS);
-    v("ol.interaction.KeyboardZoom.handleEvent", Kl, OPENLAYERS);
-    v("ol.interaction.Modify", hy, OPENLAYERS);
-    v("ol.interaction.Modify.handleEvent", ky, OPENLAYERS);
-    v("ol.interaction.MouseWheelZoom", Ll, OPENLAYERS);
-    v("ol.interaction.MouseWheelZoom.handleEvent", Ml, OPENLAYERS);
-    v("ol.interaction.PinchRotate", Nl, OPENLAYERS);
-    v("ol.interaction.PinchZoom", Rl, OPENLAYERS);
-    v("ol.interaction.Pointer", jk, OPENLAYERS);
-    v("ol.interaction.Pointer.handleEvent", kk, OPENLAYERS);
-    ry.prototype.selected = ry.prototype.selected;
-    ry.prototype.deselected = ry.prototype.deselected;
-    v("ol.interaction.Select", sy, OPENLAYERS);
-    sy.prototype.getFeatures = sy.prototype.p;
-    v("ol.interaction.Select.handleEvent", ty, OPENLAYERS);
-    sy.prototype.setMap = sy.prototype.setMap;
-    v("ol.interaction.Snap", vy, OPENLAYERS);
-    vy.prototype.addFeature = vy.prototype.ed;
-    vy.prototype.removeFeature = vy.prototype.fd;
-    v("ol.geom.Circle", Pm, OPENLAYERS);
-    Pm.prototype.clone = Pm.prototype.clone;
-    Pm.prototype.getCenter = Pm.prototype.dd;
-    Pm.prototype.getRadius = Pm.prototype.zg;
-    Pm.prototype.getType = Pm.prototype.M;
-    Pm.prototype.setCenter = Pm.prototype.pl;
-    Pm.prototype.setCenterAndRadius = Pm.prototype.uh;
-    Pm.prototype.setRadius = Pm.prototype.Ag;
-    Pm.prototype.transform = Pm.prototype.transform;
-    v("ol.geom.Geometry", uk, OPENLAYERS);
-    uk.prototype.getClosestPoint = uk.prototype.e;
-    uk.prototype.getExtent = uk.prototype.G;
-    v("ol.geom.GeometryCollection", Rm, OPENLAYERS);
-    Rm.prototype.clone = Rm.prototype.clone;
-    Rm.prototype.getGeometries = Rm.prototype.Vf;
-    Rm.prototype.getType = Rm.prototype.M;
-    Rm.prototype.intersectsExtent = Rm.prototype.ra;
-    Rm.prototype.setGeometries = Rm.prototype.xh;
-    Rm.prototype.applyTransform = Rm.prototype.qa;
-    Rm.prototype.translate = Rm.prototype.Oa;
-    v("ol.geom.LinearRing", Qk, OPENLAYERS);
-    Qk.prototype.clone = Qk.prototype.clone;
-    Qk.prototype.getArea = Qk.prototype.rl;
-    Qk.prototype.getCoordinates = Qk.prototype.K;
-    Qk.prototype.getType = Qk.prototype.M;
-    Qk.prototype.setCoordinates = Qk.prototype.W;
-    v("ol.geom.LineString", O, OPENLAYERS);
-    O.prototype.appendCoordinate = O.prototype.ui;
-    O.prototype.clone = O.prototype.clone;
-    O.prototype.forEachSegment = O.prototype.Ji;
-    O.prototype.getCoordinateAtM = O.prototype.ql;
-    O.prototype.getCoordinates = O.prototype.K;
-    O.prototype.getLength = O.prototype.Bg;
-    O.prototype.getType = O.prototype.M;
-    O.prototype.intersectsExtent = O.prototype.ra;
-    O.prototype.setCoordinates = O.prototype.W;
-    v("ol.geom.MultiLineString", Q, OPENLAYERS);
-    Q.prototype.appendLineString = Q.prototype.vi;
-    Q.prototype.clone = Q.prototype.clone;
-    Q.prototype.getCoordinateAtM = Q.prototype.sl;
-    Q.prototype.getCoordinates = Q.prototype.K;
-    Q.prototype.getLineString = Q.prototype.gj;
-    Q.prototype.getLineStrings = Q.prototype.ad;
-    Q.prototype.getType = Q.prototype.M;
-    Q.prototype.intersectsExtent = Q.prototype.ra;
-    Q.prototype.setCoordinates = Q.prototype.W;
-    v("ol.geom.MultiPoint", an, OPENLAYERS);
-    an.prototype.appendPoint = an.prototype.xi;
-    an.prototype.clone = an.prototype.clone;
-    an.prototype.getCoordinates = an.prototype.K;
-    an.prototype.getPoint = an.prototype.qj;
-    an.prototype.getPoints = an.prototype.ce;
-    an.prototype.getType = an.prototype.M;
-    an.prototype.intersectsExtent = an.prototype.ra;
-    an.prototype.setCoordinates = an.prototype.W;
-    v("ol.geom.MultiPolygon", R, OPENLAYERS);
-    R.prototype.appendPolygon = R.prototype.yi;
-    R.prototype.clone = R.prototype.clone;
-    R.prototype.getArea = R.prototype.tl;
-    R.prototype.getCoordinates = R.prototype.K;
-    R.prototype.getInteriorPoints = R.prototype.dj;
-    R.prototype.getPolygon = R.prototype.sj;
-    R.prototype.getPolygons = R.prototype.Id;
-    R.prototype.getType = R.prototype.M;
-    R.prototype.intersectsExtent = R.prototype.ra;
-    R.prototype.setCoordinates = R.prototype.W;
-    v("ol.geom.Point", E, OPENLAYERS);
-    E.prototype.clone = E.prototype.clone;
-    E.prototype.getCoordinates = E.prototype.K;
-    E.prototype.getType = E.prototype.M;
-    E.prototype.intersectsExtent = E.prototype.ra;
-    E.prototype.setCoordinates = E.prototype.W;
-    v("ol.geom.Polygon", F, OPENLAYERS);
-    F.prototype.appendLinearRing = F.prototype.wi;
-    F.prototype.clone = F.prototype.clone;
-    F.prototype.getArea = F.prototype.ul;
-    F.prototype.getCoordinates = F.prototype.K;
-    F.prototype.getInteriorPoint = F.prototype.cj;
-    F.prototype.getLinearRingCount = F.prototype.ij;
-    F.prototype.getLinearRing = F.prototype.hj;
-    F.prototype.getLinearRings = F.prototype.Ed;
-    F.prototype.getType = F.prototype.M;
-    F.prototype.intersectsExtent = F.prototype.ra;
-    F.prototype.setCoordinates = F.prototype.W;
-    v("ol.geom.Polygon.circular", gl, OPENLAYERS);
-    v("ol.geom.Polygon.fromExtent", function(a) {
-        var c = a[0],
-            d = a[1],
-            e = a[2];
-        a = a[3];
-        c = [c, d, c, a, e, a, e, d, c, d];
-        d = new F(null);
-        dl(d, "XY", c, [c.length]);
-        return d
-    }, OPENLAYERS);
-    v("ol.geom.SimpleGeometry", wk, OPENLAYERS);
-    wk.prototype.getFirstCoordinate = wk.prototype.ob;
-    wk.prototype.getLastCoordinate = wk.prototype.pb;
-    wk.prototype.getLayout = wk.prototype.qb;
-    wk.prototype.applyTransform = wk.prototype.qa;
-    wk.prototype.translate = wk.prototype.Oa;
-    v("ol.format.EsriJSON", Cr, OPENLAYERS);
-    Cr.prototype.readFeature = Cr.prototype.sb;
-    Cr.prototype.readFeatures = Cr.prototype.ja;
-    Cr.prototype.readGeometry = Cr.prototype.Gc;
-    Cr.prototype.readProjection = Cr.prototype.za;
-    Cr.prototype.writeGeometry = Cr.prototype.Mc;
-    Cr.prototype.writeGeometryObject = Cr.prototype.Be;
-    Cr.prototype.writeFeature = Cr.prototype.qd;
-    Cr.prototype.writeFeatureObject = Cr.prototype.Lc;
-    Cr.prototype.writeFeatures = Cr.prototype.ub;
-    Cr.prototype.writeFeaturesObject = Cr.prototype.ze;
-    v("ol.format.Feature", wr, OPENLAYERS);
-    v("ol.format.GeoJSON", Jr, OPENLAYERS);
-    Jr.prototype.readFeature = Jr.prototype.sb;
-    Jr.prototype.readFeatures = Jr.prototype.ja;
-    Jr.prototype.readGeometry = Jr.prototype.Gc;
-    Jr.prototype.readProjection = Jr.prototype.za;
-    Jr.prototype.writeFeature = Jr.prototype.qd;
-    Jr.prototype.writeFeatureObject = Jr.prototype.Lc;
-    Jr.prototype.writeFeatures = Jr.prototype.ub;
-    Jr.prototype.writeFeaturesObject = Jr.prototype.ze;
-    Jr.prototype.writeGeometry = Jr.prototype.Mc;
-    Jr.prototype.writeGeometryObject = Jr.prototype.Be;
-    v("ol.format.GPX", ms, OPENLAYERS);
-    ms.prototype.readFeature = ms.prototype.sb;
-    ms.prototype.readFeatures = ms.prototype.ja;
-    ms.prototype.readProjection = ms.prototype.za;
-    ms.prototype.writeFeatures = ms.prototype.ub;
-    ms.prototype.writeFeaturesNode = ms.prototype.a;
-    v("ol.format.IGC", Xs, OPENLAYERS);
-    Xs.prototype.readFeature = Xs.prototype.sb;
-    Xs.prototype.readFeatures = Xs.prototype.ja;
-    Xs.prototype.readProjection = Xs.prototype.za;
-    v("ol.format.KML", vt, OPENLAYERS);
-    vt.prototype.readFeature = vt.prototype.sb;
-    vt.prototype.readFeatures = vt.prototype.ja;
-    vt.prototype.readName = vt.prototype.Dn;
-    vt.prototype.readNetworkLinks = vt.prototype.En;
-    vt.prototype.readProjection = vt.prototype.za;
-    vt.prototype.writeFeatures = vt.prototype.ub;
-    vt.prototype.writeFeaturesNode = vt.prototype.a;
-    v("ol.format.OSMXML", gv, OPENLAYERS);
-    gv.prototype.readFeatures = gv.prototype.ja;
-    gv.prototype.readProjection = gv.prototype.za;
-    v("ol.format.Polyline", Fv, OPENLAYERS);
-    v("ol.format.Polyline.encodeDeltas", Gv, OPENLAYERS);
-    v("ol.format.Polyline.decodeDeltas", Iv, OPENLAYERS);
-    v("ol.format.Polyline.encodeFloats", Hv, OPENLAYERS);
-    v("ol.format.Polyline.decodeFloats", Jv, OPENLAYERS);
-    Fv.prototype.readFeature = Fv.prototype.sb;
-    Fv.prototype.readFeatures = Fv.prototype.ja;
-    Fv.prototype.readGeometry = Fv.prototype.Gc;
-    Fv.prototype.readProjection = Fv.prototype.za;
-    Fv.prototype.writeGeometry = Fv.prototype.Mc;
-    v("ol.format.TopoJSON", Kv, OPENLAYERS);
-    Kv.prototype.readFeatures = Kv.prototype.ja;
-    Kv.prototype.readProjection = Kv.prototype.za;
-    v("ol.format.WFS", Qv, OPENLAYERS);
-    Qv.prototype.readFeatures = Qv.prototype.ja;
-    Qv.prototype.readTransactionResponse = Qv.prototype.g;
-    Qv.prototype.readFeatureCollectionMetadata = Qv.prototype.f;
-    Qv.prototype.writeGetFeature = Qv.prototype.i;
-    Qv.prototype.writeTransaction = Qv.prototype.o;
-    Qv.prototype.readProjection = Qv.prototype.za;
-    v("ol.format.WKT", cw, OPENLAYERS);
-    cw.prototype.readFeature = cw.prototype.sb;
-    cw.prototype.readFeatures = cw.prototype.ja;
-    cw.prototype.readGeometry = cw.prototype.Gc;
-    cw.prototype.writeFeature = cw.prototype.qd;
-    cw.prototype.writeFeatures = cw.prototype.ub;
-    cw.prototype.writeGeometry = cw.prototype.Mc;
-    v("ol.format.WMSCapabilities", uw, OPENLAYERS);
-    uw.prototype.read = uw.prototype.c;
-    v("ol.format.WMSGetFeatureInfo", Rw, OPENLAYERS);
-    Rw.prototype.readFeatures = Rw.prototype.ja;
-    v("ol.format.WMTSCapabilities", Tw, OPENLAYERS);
-    Tw.prototype.read = Tw.prototype.c;
-    v("ol.format.GML2", ls, OPENLAYERS);
-    v("ol.format.GML3", cs, OPENLAYERS);
-    cs.prototype.writeGeometryNode = cs.prototype.q;
-    cs.prototype.writeFeatures = cs.prototype.ub;
-    cs.prototype.writeFeaturesNode = cs.prototype.a;
-    v("ol.format.GML", cs, OPENLAYERS);
-    cs.prototype.writeFeatures = cs.prototype.ub;
-    cs.prototype.writeFeaturesNode = cs.prototype.a;
-    Rr.prototype.readFeatures = Rr.prototype.ja;
-    v("ol.events.condition.altKeyOnly", function(a) {
-        a = a.b;
-        return a.a && !a.g && !a.d
-    }, OPENLAYERS);
-    v("ol.events.condition.altShiftKeysOnly", ck, OPENLAYERS);
-    v("ol.events.condition.always", Gg, OPENLAYERS);
-    v("ol.events.condition.click", function(a) {
-        return a.type == cj
-    }, OPENLAYERS);
-    v("ol.events.condition.never", Fg, OPENLAYERS);
-    v("ol.events.condition.pointerMove", dk, OPENLAYERS);
-    v("ol.events.condition.singleClick", ek, OPENLAYERS);
-    v("ol.events.condition.noModifierKeys", fk, OPENLAYERS);
-    v("ol.events.condition.platformModifierKeyOnly", function(a) {
-        a = a.b;
-        return !a.a && a.g && !a.d
-    }, OPENLAYERS);
-    v("ol.events.condition.shiftKeyOnly", gk, OPENLAYERS);
-    v("ol.events.condition.targetNotEditable", hk, OPENLAYERS);
-    v("ol.events.condition.mouseOnly", ik, OPENLAYERS);
-    v("ol.control.Attribution", ch, OPENLAYERS);
-    v("ol.control.Attribution.render", dh, OPENLAYERS);
-    ch.prototype.getCollapsible = ch.prototype.fl;
-    ch.prototype.setCollapsible = ch.prototype.il;
-    ch.prototype.setCollapsed = ch.prototype.hl;
-    ch.prototype.getCollapsed = ch.prototype.el;
-    v("ol.control.Control", ug, OPENLAYERS);
-    ug.prototype.getMap = ug.prototype.e;
-    ug.prototype.setMap = ug.prototype.setMap;
-    ug.prototype.setTarget = ug.prototype.c;
-    v("ol.control.defaults", ih, OPENLAYERS);
-    v("ol.control.FullScreen", nh, OPENLAYERS);
-    v("ol.control.MousePosition", oh, OPENLAYERS);
-    v("ol.control.MousePosition.render", ph, OPENLAYERS);
-    oh.prototype.getCoordinateFormat = oh.prototype.Uf;
-    oh.prototype.getProjection = oh.prototype.xg;
-    oh.prototype.setMap = oh.prototype.setMap;
-    oh.prototype.setCoordinateFormat = oh.prototype.vh;
-    oh.prototype.setProjection = oh.prototype.yg;
-    v("ol.control.OverviewMap", Uq, OPENLAYERS);
-    Uq.prototype.setMap = Uq.prototype.setMap;
-    v("ol.control.OverviewMap.render", Vq, OPENLAYERS);
-    Uq.prototype.getCollapsible = Uq.prototype.ll;
-    Uq.prototype.setCollapsible = Uq.prototype.ol;
-    Uq.prototype.setCollapsed = Uq.prototype.nl;
-    Uq.prototype.getCollapsed = Uq.prototype.kl;
-    v("ol.control.Rotate", fh, OPENLAYERS);
-    v("ol.control.Rotate.render", gh, OPENLAYERS);
-    v("ol.control.ScaleLine", Zq, OPENLAYERS);
-    Zq.prototype.getUnits = Zq.prototype.p;
-    v("ol.control.ScaleLine.render", $q, OPENLAYERS);
-    Zq.prototype.setUnits = Zq.prototype.J;
-    v("ol.control.Zoom", hh, OPENLAYERS);
-    v("ol.control.ZoomSlider", nr, OPENLAYERS);
-    v("ol.control.ZoomSlider.render", pr, OPENLAYERS);
-    v("ol.control.ZoomToExtent", sr, OPENLAYERS);
-    v("ol.color.asArray", tf, OPENLAYERS);
-    v("ol.color.asString", vf, OPENLAYERS);
-    fd.prototype.changed = fd.prototype.k;
-    fd.prototype.getRevision = fd.prototype.v;
-    fd.prototype.on = fd.prototype.r;
-    fd.prototype.once = fd.prototype.A;
-    fd.prototype.un = fd.prototype.u;
-    fd.prototype.unByKey = fd.prototype.B;
-    of.prototype.get = of.prototype.get;
-    of.prototype.getKeys = of.prototype.C;
-    of.prototype.getProperties = of.prototype.D;
-    of.prototype.set = of.prototype.set;
-    of.prototype.setProperties = of.prototype.t;
-    of.prototype.unset = of.prototype.I;
-    of.prototype.changed = of.prototype.k;
-    of.prototype.getRevision = of.prototype.v;
-    of.prototype.on = of.prototype.r;
-    of.prototype.once = of.prototype.A;
-    of.prototype.un = of.prototype.u;
-    of.prototype.unByKey = of.prototype.B;
-    tr.prototype.get = tr.prototype.get;
-    tr.prototype.getKeys = tr.prototype.C;
-    tr.prototype.getProperties = tr.prototype.D;
-    tr.prototype.set = tr.prototype.set;
-    tr.prototype.setProperties = tr.prototype.t;
-    tr.prototype.unset = tr.prototype.I;
-    tr.prototype.changed = tr.prototype.k;
-    tr.prototype.getRevision = tr.prototype.v;
-    tr.prototype.on = tr.prototype.r;
-    tr.prototype.once = tr.prototype.A;
-    tr.prototype.un = tr.prototype.u;
-    tr.prototype.unByKey = tr.prototype.B;
-    X.prototype.get = X.prototype.get;
-    X.prototype.getKeys = X.prototype.C;
-    X.prototype.getProperties = X.prototype.D;
-    X.prototype.set = X.prototype.set;
-    X.prototype.setProperties = X.prototype.t;
-    X.prototype.unset = X.prototype.I;
-    X.prototype.changed = X.prototype.k;
-    X.prototype.getRevision = X.prototype.v;
-    X.prototype.on = X.prototype.r;
-    X.prototype.once = X.prototype.A;
-    X.prototype.un = X.prototype.u;
-    X.prototype.unByKey = X.prototype.B;
-    fx.prototype.get = fx.prototype.get;
-    fx.prototype.getKeys = fx.prototype.C;
-    fx.prototype.getProperties = fx.prototype.D;
-    fx.prototype.set = fx.prototype.set;
-    fx.prototype.setProperties = fx.prototype.t;
-    fx.prototype.unset = fx.prototype.I;
-    fx.prototype.changed = fx.prototype.k;
-    fx.prototype.getRevision = fx.prototype.v;
-    fx.prototype.on = fx.prototype.r;
-    fx.prototype.once = fx.prototype.A;
-    fx.prototype.un = fx.prototype.u;
-    fx.prototype.unByKey = fx.prototype.B;
-    px.prototype.getTileCoord = px.prototype.f;
-    W.prototype.get = W.prototype.get;
-    W.prototype.getKeys = W.prototype.C;
-    W.prototype.getProperties = W.prototype.D;
-    W.prototype.set = W.prototype.set;
-    W.prototype.setProperties = W.prototype.t;
-    W.prototype.unset = W.prototype.I;
-    W.prototype.changed = W.prototype.k;
-    W.prototype.getRevision = W.prototype.v;
-    W.prototype.on = W.prototype.r;
-    W.prototype.once = W.prototype.A;
-    W.prototype.un = W.prototype.u;
-    W.prototype.unByKey = W.prototype.B;
-    Zi.prototype.map = Zi.prototype.map;
-    Zi.prototype.frameState = Zi.prototype.frameState;
-    $i.prototype.originalEvent = $i.prototype.originalEvent;
-    $i.prototype.pixel = $i.prototype.pixel;
-    $i.prototype.coordinate = $i.prototype.coordinate;
-    $i.prototype.dragging = $i.prototype.dragging;
-    $i.prototype.preventDefault = $i.prototype.preventDefault;
-    $i.prototype.stopPropagation = $i.prototype.fb;
-    $i.prototype.map = $i.prototype.map;
-    $i.prototype.frameState = $i.prototype.frameState;
-    Rq.prototype.get = Rq.prototype.get;
-    Rq.prototype.getKeys = Rq.prototype.C;
-    Rq.prototype.getProperties = Rq.prototype.D;
-    Rq.prototype.set = Rq.prototype.set;
-    Rq.prototype.setProperties = Rq.prototype.t;
-    Rq.prototype.unset = Rq.prototype.I;
-    Rq.prototype.changed = Rq.prototype.k;
-    Rq.prototype.getRevision = Rq.prototype.v;
-    Rq.prototype.on = Rq.prototype.r;
-    Rq.prototype.once = Rq.prototype.A;
-    Rq.prototype.un = Rq.prototype.u;
-    Rq.prototype.unByKey = Rq.prototype.B;
-    Ne.prototype.get = Ne.prototype.get;
-    Ne.prototype.getKeys = Ne.prototype.C;
-    Ne.prototype.getProperties = Ne.prototype.D;
-    Ne.prototype.set = Ne.prototype.set;
-    Ne.prototype.setProperties = Ne.prototype.t;
-    Ne.prototype.unset = Ne.prototype.I;
-    Ne.prototype.changed = Ne.prototype.k;
-    Ne.prototype.getRevision = Ne.prototype.v;
-    Ne.prototype.on = Ne.prototype.r;
-    Ne.prototype.once = Ne.prototype.A;
-    Ne.prototype.un = Ne.prototype.u;
-    Ne.prototype.unByKey = Ne.prototype.B;
-    Ez.prototype.getMaxZoom = Ez.prototype.Fd;
-    Ez.prototype.getMinZoom = Ez.prototype.Hd;
-    Ez.prototype.getOrigin = Ez.prototype.Mb;
-    Ez.prototype.getResolution = Ez.prototype.ma;
-    Ez.prototype.getResolutions = Ez.prototype.ne;
-    Ez.prototype.getTileCoordForCoordAndResolution = Ez.prototype.Wb;
-    Ez.prototype.getTileCoordForCoordAndZ = Ez.prototype.cd;
-    Ez.prototype.getTileSize = Ez.prototype.na;
-    Uy.prototype.getMaxZoom = Uy.prototype.Fd;
-    Uy.prototype.getMinZoom = Uy.prototype.Hd;
-    Uy.prototype.getOrigin = Uy.prototype.Mb;
-    Uy.prototype.getResolution = Uy.prototype.ma;
-    Uy.prototype.getResolutions = Uy.prototype.ne;
-    Uy.prototype.getTileCoordForCoordAndResolution = Uy.prototype.Wb;
-    Uy.prototype.getTileCoordForCoordAndZ = Uy.prototype.cd;
-    Uy.prototype.getTileSize = Uy.prototype.na;
-    Iz.prototype.getMaxZoom = Iz.prototype.Fd;
-    Iz.prototype.getMinZoom = Iz.prototype.Hd;
-    Iz.prototype.getOrigin = Iz.prototype.Mb;
-    Iz.prototype.getResolution = Iz.prototype.ma;
-    Iz.prototype.getResolutions = Iz.prototype.ne;
-    Iz.prototype.getTileCoordForCoordAndResolution = Iz.prototype.Wb;
-    Iz.prototype.getTileCoordForCoordAndZ = Iz.prototype.cd;
-    Iz.prototype.getTileSize = Iz.prototype.na;
-    Al.prototype.getOpacity = Al.prototype.ie;
-    Al.prototype.getRotateWithView = Al.prototype.Jd;
-    Al.prototype.getRotation = Al.prototype.je;
-    Al.prototype.getScale = Al.prototype.ke;
-    Al.prototype.getSnapToPixel = Al.prototype.Kd;
-    Al.prototype.setRotation = Al.prototype.le;
-    Al.prototype.setScale = Al.prototype.me;
-    Fj.prototype.getOpacity = Fj.prototype.ie;
-    Fj.prototype.getRotateWithView = Fj.prototype.Jd;
-    Fj.prototype.getRotation = Fj.prototype.je;
-    Fj.prototype.getScale = Fj.prototype.ke;
-    Fj.prototype.getSnapToPixel = Fj.prototype.Kd;
-    Fj.prototype.setRotation = Fj.prototype.le;
-    Fj.prototype.setScale = Fj.prototype.me;
-    Pz.prototype.getOpacity = Pz.prototype.ie;
-    Pz.prototype.getRotateWithView = Pz.prototype.Jd;
-    Pz.prototype.getRotation = Pz.prototype.je;
-    Pz.prototype.getScale = Pz.prototype.ke;
-    Pz.prototype.getSnapToPixel = Pz.prototype.Kd;
-    Pz.prototype.setRotation = Pz.prototype.le;
-    Pz.prototype.setScale = Pz.prototype.me;
-    Bg.prototype.get = Bg.prototype.get;
-    Bg.prototype.getKeys = Bg.prototype.C;
-    Bg.prototype.getProperties = Bg.prototype.D;
-    Bg.prototype.set = Bg.prototype.set;
-    Bg.prototype.setProperties = Bg.prototype.t;
-    Bg.prototype.unset = Bg.prototype.I;
-    Bg.prototype.changed = Bg.prototype.k;
-    Bg.prototype.getRevision = Bg.prototype.v;
-    Bg.prototype.on = Bg.prototype.r;
-    Bg.prototype.once = Bg.prototype.A;
-    Bg.prototype.un = Bg.prototype.u;
-    Bg.prototype.unByKey = Bg.prototype.B;
-    Zg.prototype.getAttributions = Zg.prototype.ea;
-    Zg.prototype.getLogo = Zg.prototype.ca;
-    Zg.prototype.getProjection = Zg.prototype.fa;
-    Zg.prototype.getState = Zg.prototype.ga;
-    Zg.prototype.get = Zg.prototype.get;
-    Zg.prototype.getKeys = Zg.prototype.C;
-    Zg.prototype.getProperties = Zg.prototype.D;
-    Zg.prototype.set = Zg.prototype.set;
-    Zg.prototype.setProperties = Zg.prototype.t;
-    Zg.prototype.unset = Zg.prototype.I;
-    Zg.prototype.changed = Zg.prototype.k;
-    Zg.prototype.getRevision = Zg.prototype.v;
-    Zg.prototype.on = Zg.prototype.r;
-    Zg.prototype.once = Zg.prototype.A;
-    Zg.prototype.un = Zg.prototype.u;
-    Zg.prototype.unByKey = Zg.prototype.B;
-    Sy.prototype.getTileGrid = Sy.prototype.ua;
-    Sy.prototype.getAttributions = Sy.prototype.ea;
-    Sy.prototype.getLogo = Sy.prototype.ca;
-    Sy.prototype.getProjection = Sy.prototype.fa;
-    Sy.prototype.getState = Sy.prototype.ga;
-    Sy.prototype.get = Sy.prototype.get;
-    Sy.prototype.getKeys = Sy.prototype.C;
-    Sy.prototype.getProperties = Sy.prototype.D;
-    Sy.prototype.set = Sy.prototype.set;
-    Sy.prototype.setProperties = Sy.prototype.t;
-    Sy.prototype.unset = Sy.prototype.I;
-    Sy.prototype.changed = Sy.prototype.k;
-    Sy.prototype.getRevision = Sy.prototype.v;
-    Sy.prototype.on = Sy.prototype.r;
-    Sy.prototype.once = Sy.prototype.A;
-    Sy.prototype.un = Sy.prototype.u;
-    Sy.prototype.unByKey = Sy.prototype.B;
-    Vy.prototype.getTileLoadFunction = Vy.prototype.Ua;
-    Vy.prototype.getTileUrlFunction = Vy.prototype.Va;
-    Vy.prototype.setTileLoadFunction = Vy.prototype.$a;
-    Vy.prototype.setTileUrlFunction = Vy.prototype.pa;
-    Vy.prototype.getTileGrid = Vy.prototype.ua;
-    Vy.prototype.getAttributions = Vy.prototype.ea;
-    Vy.prototype.getLogo = Vy.prototype.ca;
-    Vy.prototype.getProjection = Vy.prototype.fa;
-    Vy.prototype.getState = Vy.prototype.ga;
-    Vy.prototype.get = Vy.prototype.get;
-    Vy.prototype.getKeys = Vy.prototype.C;
-    Vy.prototype.getProperties = Vy.prototype.D;
-    Vy.prototype.set = Vy.prototype.set;
-    Vy.prototype.setProperties = Vy.prototype.t;
-    Vy.prototype.unset = Vy.prototype.I;
-    Vy.prototype.changed = Vy.prototype.k;
-    Vy.prototype.getRevision = Vy.prototype.v;
-    Vy.prototype.on = Vy.prototype.r;
-    Vy.prototype.once = Vy.prototype.A;
-    Vy.prototype.un = Vy.prototype.u;
-    Vy.prototype.unByKey = Vy.prototype.B;
-    qp.prototype.getAttributions = qp.prototype.ea;
-    qp.prototype.getLogo = qp.prototype.ca;
-    qp.prototype.getProjection = qp.prototype.fa;
-    qp.prototype.getState = qp.prototype.ga;
-    qp.prototype.get = qp.prototype.get;
-    qp.prototype.getKeys = qp.prototype.C;
-    qp.prototype.getProperties = qp.prototype.D;
-    qp.prototype.set = qp.prototype.set;
-    qp.prototype.setProperties = qp.prototype.t;
-    qp.prototype.unset = qp.prototype.I;
-    qp.prototype.changed = qp.prototype.k;
-    qp.prototype.getRevision = qp.prototype.v;
-    qp.prototype.on = qp.prototype.r;
-    qp.prototype.once = qp.prototype.A;
-    qp.prototype.un = qp.prototype.u;
-    qp.prototype.unByKey = qp.prototype.B;
-    Xy.prototype.addFeature = Xy.prototype.jf;
-    Xy.prototype.addFeatures = Xy.prototype.Oc;
-    Xy.prototype.clear = Xy.prototype.clear;
-    Xy.prototype.forEachFeature = Xy.prototype.Rf;
-    Xy.prototype.forEachFeatureInExtent = Xy.prototype.$c;
-    Xy.prototype.forEachFeatureIntersectingExtent = Xy.prototype.Oe;
-    Xy.prototype.getFeatures = Xy.prototype.Dc;
-    Xy.prototype.getFeaturesAtCoordinate = Xy.prototype.Re;
-    Xy.prototype.getFeaturesInExtent = Xy.prototype.Se;
-    Xy.prototype.getClosestFeatureToCoordinate = Xy.prototype.Tf;
-    Xy.prototype.getExtent = Xy.prototype.G;
-    Xy.prototype.getFeatureById = Xy.prototype.Qe;
-    Xy.prototype.removeFeature = Xy.prototype.Qg;
-    Xy.prototype.getAttributions = Xy.prototype.ea;
-    Xy.prototype.getLogo = Xy.prototype.ca;
-    Xy.prototype.getProjection = Xy.prototype.fa;
-    Xy.prototype.getState = Xy.prototype.ga;
-    Xy.prototype.get = Xy.prototype.get;
-    Xy.prototype.getKeys = Xy.prototype.C;
-    Xy.prototype.getProperties = Xy.prototype.D;
-    Xy.prototype.set = Xy.prototype.set;
-    Xy.prototype.setProperties = Xy.prototype.t;
-    Xy.prototype.unset = Xy.prototype.I;
-    Xy.prototype.changed = Xy.prototype.k;
-    Xy.prototype.getRevision = Xy.prototype.v;
-    Xy.prototype.on = Xy.prototype.r;
-    Xy.prototype.once = Xy.prototype.A;
-    Xy.prototype.un = Xy.prototype.u;
-    Xy.prototype.unByKey = Xy.prototype.B;
-    jn.prototype.getAttributions = jn.prototype.ea;
-    jn.prototype.getLogo = jn.prototype.ca;
-    jn.prototype.getProjection = jn.prototype.fa;
-    jn.prototype.getState = jn.prototype.ga;
-    jn.prototype.get = jn.prototype.get;
-    jn.prototype.getKeys = jn.prototype.C;
-    jn.prototype.getProperties = jn.prototype.D;
-    jn.prototype.set = jn.prototype.set;
-    jn.prototype.setProperties = jn.prototype.t;
-    jn.prototype.unset = jn.prototype.I;
-    jn.prototype.changed = jn.prototype.k;
-    jn.prototype.getRevision = jn.prototype.v;
-    jn.prototype.on = jn.prototype.r;
-    jn.prototype.once = jn.prototype.A;
-    jn.prototype.un = jn.prototype.u;
-    jn.prototype.unByKey = jn.prototype.B;
-    qn.prototype.getAttributions = qn.prototype.ea;
-    qn.prototype.getLogo = qn.prototype.ca;
-    qn.prototype.getProjection = qn.prototype.fa;
-    qn.prototype.getState = qn.prototype.ga;
-    qn.prototype.get = qn.prototype.get;
-    qn.prototype.getKeys = qn.prototype.C;
-    qn.prototype.getProperties = qn.prototype.D;
-    qn.prototype.set = qn.prototype.set;
-    qn.prototype.setProperties = qn.prototype.t;
-    qn.prototype.unset = qn.prototype.I;
-    qn.prototype.changed = qn.prototype.k;
-    qn.prototype.getRevision = qn.prototype.v;
-    qn.prototype.on = qn.prototype.r;
-    qn.prototype.once = qn.prototype.A;
-    qn.prototype.un = qn.prototype.u;
-    qn.prototype.unByKey = qn.prototype.B;
-    $y.prototype.getAttributions = $y.prototype.ea;
-    $y.prototype.getLogo = $y.prototype.ca;
-    $y.prototype.getProjection = $y.prototype.fa;
-    $y.prototype.getState = $y.prototype.ga;
-    $y.prototype.get = $y.prototype.get;
-    $y.prototype.getKeys = $y.prototype.C;
-    $y.prototype.getProperties = $y.prototype.D;
-    $y.prototype.set = $y.prototype.set;
-    $y.prototype.setProperties = $y.prototype.t;
-    $y.prototype.unset = $y.prototype.I;
-    $y.prototype.changed = $y.prototype.k;
-    $y.prototype.getRevision = $y.prototype.v;
-    $y.prototype.on = $y.prototype.r;
-    $y.prototype.once = $y.prototype.A;
-    $y.prototype.un = $y.prototype.u;
-    $y.prototype.unByKey = $y.prototype.B;
-    az.prototype.getAttributions = az.prototype.ea;
-    az.prototype.getLogo = az.prototype.ca;
-    az.prototype.getProjection = az.prototype.fa;
-    az.prototype.getState = az.prototype.ga;
-    az.prototype.get = az.prototype.get;
-    az.prototype.getKeys = az.prototype.C;
-    az.prototype.getProperties = az.prototype.D;
-    az.prototype.set = az.prototype.set;
-    az.prototype.setProperties = az.prototype.t;
-    az.prototype.unset = az.prototype.I;
-    az.prototype.changed = az.prototype.k;
-    az.prototype.getRevision = az.prototype.v;
-    az.prototype.on = az.prototype.r;
-    az.prototype.once = az.prototype.A;
-    az.prototype.un = az.prototype.u;
-    az.prototype.unByKey = az.prototype.B;
-    xp.prototype.getAttributions = xp.prototype.ea;
-    xp.prototype.getLogo = xp.prototype.ca;
-    xp.prototype.getProjection = xp.prototype.fa;
-    xp.prototype.getState = xp.prototype.ga;
-    xp.prototype.get = xp.prototype.get;
-    xp.prototype.getKeys = xp.prototype.C;
-    xp.prototype.getProperties = xp.prototype.D;
-    xp.prototype.set = xp.prototype.set;
-    xp.prototype.setProperties = xp.prototype.t;
-    xp.prototype.unset = xp.prototype.I;
-    xp.prototype.changed = xp.prototype.k;
-    xp.prototype.getRevision = xp.prototype.v;
-    xp.prototype.on = xp.prototype.r;
-    xp.prototype.once = xp.prototype.A;
-    xp.prototype.un = xp.prototype.u;
-    xp.prototype.unByKey = xp.prototype.B;
-    bz.prototype.getAttributions = bz.prototype.ea;
-    bz.prototype.getLogo = bz.prototype.ca;
-    bz.prototype.getProjection = bz.prototype.fa;
-    bz.prototype.getState = bz.prototype.ga;
-    bz.prototype.get = bz.prototype.get;
-    bz.prototype.getKeys = bz.prototype.C;
-    bz.prototype.getProperties = bz.prototype.D;
-    bz.prototype.set = bz.prototype.set;
-    bz.prototype.setProperties = bz.prototype.t;
-    bz.prototype.unset = bz.prototype.I;
-    bz.prototype.changed = bz.prototype.k;
-    bz.prototype.getRevision = bz.prototype.v;
-    bz.prototype.on = bz.prototype.r;
-    bz.prototype.once = bz.prototype.A;
-    bz.prototype.un = bz.prototype.u;
-    bz.prototype.unByKey = bz.prototype.B;
-    fz.prototype.getTileLoadFunction = fz.prototype.Ua;
-    fz.prototype.getTileUrlFunction = fz.prototype.Va;
-    fz.prototype.setTileLoadFunction = fz.prototype.$a;
-    fz.prototype.getTileGrid = fz.prototype.ua;
-    fz.prototype.getAttributions = fz.prototype.ea;
-    fz.prototype.getLogo = fz.prototype.ca;
-    fz.prototype.getProjection = fz.prototype.fa;
-    fz.prototype.getState = fz.prototype.ga;
-    fz.prototype.get = fz.prototype.get;
-    fz.prototype.getKeys = fz.prototype.C;
-    fz.prototype.getProperties = fz.prototype.D;
-    fz.prototype.set = fz.prototype.set;
-    fz.prototype.setProperties = fz.prototype.t;
-    fz.prototype.unset = fz.prototype.I;
-    fz.prototype.changed = fz.prototype.k;
-    fz.prototype.getRevision = fz.prototype.v;
-    fz.prototype.on = fz.prototype.r;
-    fz.prototype.once = fz.prototype.A;
-    fz.prototype.un = fz.prototype.u;
-    fz.prototype.unByKey = fz.prototype.B;
-    iz.prototype.setTileUrlFunction = iz.prototype.pa;
-    iz.prototype.setUrl = iz.prototype.e;
-    iz.prototype.getTileLoadFunction = iz.prototype.Ua;
-    iz.prototype.getTileUrlFunction = iz.prototype.Va;
-    iz.prototype.setTileLoadFunction = iz.prototype.$a;
-    iz.prototype.getTileGrid = iz.prototype.ua;
-    iz.prototype.getAttributions = iz.prototype.ea;
-    iz.prototype.getLogo = iz.prototype.ca;
-    iz.prototype.getProjection = iz.prototype.fa;
-    iz.prototype.getState = iz.prototype.ga;
-    iz.prototype.get = iz.prototype.get;
-    iz.prototype.getKeys = iz.prototype.C;
-    iz.prototype.getProperties = iz.prototype.D;
-    iz.prototype.set = iz.prototype.set;
-    iz.prototype.setProperties = iz.prototype.t;
-    iz.prototype.unset = iz.prototype.I;
-    iz.prototype.changed = iz.prototype.k;
-    iz.prototype.getRevision = iz.prototype.v;
-    iz.prototype.on = iz.prototype.r;
-    iz.prototype.once = iz.prototype.A;
-    iz.prototype.un = iz.prototype.u;
-    iz.prototype.unByKey = iz.prototype.B;
-    gz.prototype.setTileUrlFunction = gz.prototype.pa;
-    gz.prototype.setUrl = gz.prototype.e;
-    gz.prototype.getTileLoadFunction = gz.prototype.Ua;
-    gz.prototype.getTileUrlFunction = gz.prototype.Va;
-    gz.prototype.setTileLoadFunction = gz.prototype.$a;
-    gz.prototype.getTileGrid = gz.prototype.ua;
-    gz.prototype.getAttributions = gz.prototype.ea;
-    gz.prototype.getLogo = gz.prototype.ca;
-    gz.prototype.getProjection = gz.prototype.fa;
-    gz.prototype.getState = gz.prototype.ga;
-    gz.prototype.get = gz.prototype.get;
-    gz.prototype.getKeys = gz.prototype.C;
-    gz.prototype.getProperties = gz.prototype.D;
-    gz.prototype.set = gz.prototype.set;
-    gz.prototype.setProperties = gz.prototype.t;
-    gz.prototype.unset = gz.prototype.I;
-    gz.prototype.changed = gz.prototype.k;
-    gz.prototype.getRevision = gz.prototype.v;
-    gz.prototype.on = gz.prototype.r;
-    gz.prototype.once = gz.prototype.A;
-    gz.prototype.un = gz.prototype.u;
-    gz.prototype.unByKey = gz.prototype.B;
-    nz.prototype.setTileUrlFunction = nz.prototype.pa;
-    nz.prototype.setUrl = nz.prototype.e;
-    nz.prototype.getTileLoadFunction = nz.prototype.Ua;
-    nz.prototype.getTileUrlFunction = nz.prototype.Va;
-    nz.prototype.setTileLoadFunction = nz.prototype.$a;
-    nz.prototype.getTileGrid = nz.prototype.ua;
-    nz.prototype.getAttributions = nz.prototype.ea;
-    nz.prototype.getLogo = nz.prototype.ca;
-    nz.prototype.getProjection = nz.prototype.fa;
-    nz.prototype.getState = nz.prototype.ga;
-    nz.prototype.get = nz.prototype.get;
-    nz.prototype.getKeys = nz.prototype.C;
-    nz.prototype.getProperties = nz.prototype.D;
-    nz.prototype.set = nz.prototype.set;
-    nz.prototype.setProperties = nz.prototype.t;
-    nz.prototype.unset = nz.prototype.I;
-    nz.prototype.changed = nz.prototype.k;
-    nz.prototype.getRevision = nz.prototype.v;
-    nz.prototype.on = nz.prototype.r;
-    nz.prototype.once = nz.prototype.A;
-    nz.prototype.un = nz.prototype.u;
-    nz.prototype.unByKey = nz.prototype.B;
-    pz.prototype.getTileLoadFunction = pz.prototype.Ua;
-    pz.prototype.getTileUrlFunction = pz.prototype.Va;
-    pz.prototype.setTileLoadFunction = pz.prototype.$a;
-    pz.prototype.setTileUrlFunction = pz.prototype.pa;
-    pz.prototype.getTileGrid = pz.prototype.ua;
-    pz.prototype.getAttributions = pz.prototype.ea;
-    pz.prototype.getLogo = pz.prototype.ca;
-    pz.prototype.getProjection = pz.prototype.fa;
-    pz.prototype.getState = pz.prototype.ga;
-    pz.prototype.get = pz.prototype.get;
-    pz.prototype.getKeys = pz.prototype.C;
-    pz.prototype.getProperties = pz.prototype.D;
-    pz.prototype.set = pz.prototype.set;
-    pz.prototype.setProperties = pz.prototype.t;
-    pz.prototype.unset = pz.prototype.I;
-    pz.prototype.changed = pz.prototype.k;
-    pz.prototype.getRevision = pz.prototype.v;
-    pz.prototype.on = pz.prototype.r;
-    pz.prototype.once = pz.prototype.A;
-    pz.prototype.un = pz.prototype.u;
-    pz.prototype.unByKey = pz.prototype.B;
-    rz.prototype.getTileGrid = rz.prototype.ua;
-    rz.prototype.getAttributions = rz.prototype.ea;
-    rz.prototype.getLogo = rz.prototype.ca;
-    rz.prototype.getProjection = rz.prototype.fa;
-    rz.prototype.getState = rz.prototype.ga;
-    rz.prototype.get = rz.prototype.get;
-    rz.prototype.getKeys = rz.prototype.C;
-    rz.prototype.getProperties = rz.prototype.D;
-    rz.prototype.set = rz.prototype.set;
-    rz.prototype.setProperties = rz.prototype.t;
-    rz.prototype.unset = rz.prototype.I;
-    rz.prototype.changed = rz.prototype.k;
-    rz.prototype.getRevision = rz.prototype.v;
-    rz.prototype.on = rz.prototype.r;
-    rz.prototype.once = rz.prototype.A;
-    rz.prototype.un = rz.prototype.u;
-    rz.prototype.unByKey = rz.prototype.B;
-    sz.prototype.getTileLoadFunction = sz.prototype.Ua;
-    sz.prototype.getTileUrlFunction = sz.prototype.Va;
-    sz.prototype.setTileLoadFunction = sz.prototype.$a;
-    sz.prototype.setTileUrlFunction = sz.prototype.pa;
-    sz.prototype.getTileGrid = sz.prototype.ua;
-    sz.prototype.getAttributions = sz.prototype.ea;
-    sz.prototype.getLogo = sz.prototype.ca;
-    sz.prototype.getProjection = sz.prototype.fa;
-    sz.prototype.getState = sz.prototype.ga;
-    sz.prototype.get = sz.prototype.get;
-    sz.prototype.getKeys = sz.prototype.C;
-    sz.prototype.getProperties = sz.prototype.D;
-    sz.prototype.set = sz.prototype.set;
-    sz.prototype.setProperties = sz.prototype.t;
-    sz.prototype.unset = sz.prototype.I;
-    sz.prototype.changed = sz.prototype.k;
-    sz.prototype.getRevision = sz.prototype.v;
-    sz.prototype.on = sz.prototype.r;
-    sz.prototype.once = sz.prototype.A;
-    sz.prototype.un = sz.prototype.u;
-    sz.prototype.unByKey = sz.prototype.B;
-    tz.prototype.getTileGrid = tz.prototype.ua;
-    tz.prototype.getAttributions = tz.prototype.ea;
-    tz.prototype.getLogo = tz.prototype.ca;
-    tz.prototype.getProjection = tz.prototype.fa;
-    tz.prototype.getState = tz.prototype.ga;
-    tz.prototype.get = tz.prototype.get;
-    tz.prototype.getKeys = tz.prototype.C;
-    tz.prototype.getProperties = tz.prototype.D;
-    tz.prototype.set = tz.prototype.set;
-    tz.prototype.setProperties = tz.prototype.t;
-    tz.prototype.unset = tz.prototype.I;
-    tz.prototype.changed = tz.prototype.k;
-    tz.prototype.getRevision = tz.prototype.v;
-    tz.prototype.on = tz.prototype.r;
-    tz.prototype.once = tz.prototype.A;
-    tz.prototype.un = tz.prototype.u;
-    tz.prototype.unByKey = tz.prototype.B;
-    yz.prototype.forEachFeatureIntersectingExtent = yz.prototype.Oe;
-    yz.prototype.getFeaturesAtCoordinate = yz.prototype.Re;
-    yz.prototype.getFeatureById = yz.prototype.Qe;
-    yz.prototype.getAttributions = yz.prototype.ea;
-    yz.prototype.getLogo = yz.prototype.ca;
-    yz.prototype.getProjection = yz.prototype.fa;
-    yz.prototype.getState = yz.prototype.ga;
-    yz.prototype.get = yz.prototype.get;
-    yz.prototype.getKeys = yz.prototype.C;
-    yz.prototype.getProperties = yz.prototype.D;
-    yz.prototype.set = yz.prototype.set;
-    yz.prototype.setProperties = yz.prototype.t;
-    yz.prototype.unset = yz.prototype.I;
-    yz.prototype.changed = yz.prototype.k;
-    yz.prototype.getRevision = yz.prototype.v;
-    yz.prototype.on = yz.prototype.r;
-    yz.prototype.once = yz.prototype.A;
-    yz.prototype.un = yz.prototype.u;
-    yz.prototype.unByKey = yz.prototype.B;
-    Az.prototype.getTileLoadFunction = Az.prototype.Ua;
-    Az.prototype.getTileUrlFunction = Az.prototype.Va;
-    Az.prototype.setTileLoadFunction = Az.prototype.$a;
-    Az.prototype.setTileUrlFunction = Az.prototype.pa;
-    Az.prototype.getTileGrid = Az.prototype.ua;
-    Az.prototype.getAttributions = Az.prototype.ea;
-    Az.prototype.getLogo = Az.prototype.ca;
-    Az.prototype.getProjection = Az.prototype.fa;
-    Az.prototype.getState = Az.prototype.ga;
-    Az.prototype.get = Az.prototype.get;
-    Az.prototype.getKeys = Az.prototype.C;
-    Az.prototype.getProperties = Az.prototype.D;
-    Az.prototype.set = Az.prototype.set;
-    Az.prototype.setProperties = Az.prototype.t;
-    Az.prototype.unset = Az.prototype.I;
-    Az.prototype.changed = Az.prototype.k;
-    Az.prototype.getRevision = Az.prototype.v;
-    Az.prototype.on = Az.prototype.r;
-    Az.prototype.once = Az.prototype.A;
-    Az.prototype.un = Az.prototype.u;
-    Az.prototype.unByKey = Az.prototype.B;
-    Gz.prototype.getTileLoadFunction = Gz.prototype.Ua;
-    Gz.prototype.getTileUrlFunction = Gz.prototype.Va;
-    Gz.prototype.setTileLoadFunction = Gz.prototype.$a;
-    Gz.prototype.setTileUrlFunction = Gz.prototype.pa;
-    Gz.prototype.getTileGrid = Gz.prototype.ua;
-    Gz.prototype.getAttributions = Gz.prototype.ea;
-    Gz.prototype.getLogo = Gz.prototype.ca;
-    Gz.prototype.getProjection = Gz.prototype.fa;
-    Gz.prototype.getState = Gz.prototype.ga;
-    Gz.prototype.get = Gz.prototype.get;
-    Gz.prototype.getKeys = Gz.prototype.C;
-    Gz.prototype.getProperties = Gz.prototype.D;
-    Gz.prototype.set = Gz.prototype.set;
-    Gz.prototype.setProperties = Gz.prototype.t;
-    Gz.prototype.unset = Gz.prototype.I;
-    Gz.prototype.changed = Gz.prototype.k;
-    Gz.prototype.getRevision = Gz.prototype.v;
-    Gz.prototype.on = Gz.prototype.r;
-    Gz.prototype.once = Gz.prototype.A;
-    Gz.prototype.un = Gz.prototype.u;
-    Gz.prototype.unByKey = Gz.prototype.B;
-    Jz.prototype.getTileLoadFunction = Jz.prototype.Ua;
-    Jz.prototype.getTileUrlFunction = Jz.prototype.Va;
-    Jz.prototype.setTileLoadFunction = Jz.prototype.$a;
-    Jz.prototype.setTileUrlFunction = Jz.prototype.pa;
-    Jz.prototype.getTileGrid = Jz.prototype.ua;
-    Jz.prototype.getAttributions = Jz.prototype.ea;
-    Jz.prototype.getLogo = Jz.prototype.ca;
-    Jz.prototype.getProjection = Jz.prototype.fa;
-    Jz.prototype.getState = Jz.prototype.ga;
-    Jz.prototype.get = Jz.prototype.get;
-    Jz.prototype.getKeys = Jz.prototype.C;
-    Jz.prototype.getProperties = Jz.prototype.D;
-    Jz.prototype.set = Jz.prototype.set;
-    Jz.prototype.setProperties = Jz.prototype.t;
-    Jz.prototype.unset = Jz.prototype.I;
-    Jz.prototype.changed = Jz.prototype.k;
-    Jz.prototype.getRevision = Jz.prototype.v;
-    Jz.prototype.on = Jz.prototype.r;
-    Jz.prototype.once = Jz.prototype.A;
-    Jz.prototype.un = Jz.prototype.u;
-    Jz.prototype.unByKey = Jz.prototype.B;
-    uj.prototype.changed = uj.prototype.k;
-    uj.prototype.getRevision = uj.prototype.v;
-    uj.prototype.on = uj.prototype.r;
-    uj.prototype.once = uj.prototype.A;
-    uj.prototype.un = uj.prototype.u;
-    uj.prototype.unByKey = uj.prototype.B;
-    zq.prototype.changed = zq.prototype.k;
-    zq.prototype.getRevision = zq.prototype.v;
-    zq.prototype.on = zq.prototype.r;
-    zq.prototype.once = zq.prototype.A;
-    zq.prototype.un = zq.prototype.u;
-    zq.prototype.unByKey = zq.prototype.B;
-    Cq.prototype.changed = Cq.prototype.k;
-    Cq.prototype.getRevision = Cq.prototype.v;
-    Cq.prototype.on = Cq.prototype.r;
-    Cq.prototype.once = Cq.prototype.A;
-    Cq.prototype.un = Cq.prototype.u;
-    Cq.prototype.unByKey = Cq.prototype.B;
-    Iq.prototype.changed = Iq.prototype.k;
-    Iq.prototype.getRevision = Iq.prototype.v;
-    Iq.prototype.on = Iq.prototype.r;
-    Iq.prototype.once = Iq.prototype.A;
-    Iq.prototype.un = Iq.prototype.u;
-    Iq.prototype.unByKey = Iq.prototype.B;
-    Kq.prototype.changed = Kq.prototype.k;
-    Kq.prototype.getRevision = Kq.prototype.v;
-    Kq.prototype.on = Kq.prototype.r;
-    Kq.prototype.once = Kq.prototype.A;
-    Kq.prototype.un = Kq.prototype.u;
-    Kq.prototype.unByKey = Kq.prototype.B;
-    Ep.prototype.changed = Ep.prototype.k;
-    Ep.prototype.getRevision = Ep.prototype.v;
-    Ep.prototype.on = Ep.prototype.r;
-    Ep.prototype.once = Ep.prototype.A;
-    Ep.prototype.un = Ep.prototype.u;
-    Ep.prototype.unByKey = Ep.prototype.B;
-    Fp.prototype.changed = Fp.prototype.k;
-    Fp.prototype.getRevision = Fp.prototype.v;
-    Fp.prototype.on = Fp.prototype.r;
-    Fp.prototype.once = Fp.prototype.A;
-    Fp.prototype.un = Fp.prototype.u;
-    Fp.prototype.unByKey = Fp.prototype.B;
-    Gp.prototype.changed = Gp.prototype.k;
-    Gp.prototype.getRevision = Gp.prototype.v;
-    Gp.prototype.on = Gp.prototype.r;
-    Gp.prototype.once = Gp.prototype.A;
-    Gp.prototype.un = Gp.prototype.u;
-    Gp.prototype.unByKey = Gp.prototype.B;
-    Ip.prototype.changed = Ip.prototype.k;
-    Ip.prototype.getRevision = Ip.prototype.v;
-    Ip.prototype.on = Ip.prototype.r;
-    Ip.prototype.once = Ip.prototype.A;
-    Ip.prototype.un = Ip.prototype.u;
-    Ip.prototype.unByKey = Ip.prototype.B;
-    Km.prototype.changed = Km.prototype.k;
-    Km.prototype.getRevision = Km.prototype.v;
-    Km.prototype.on = Km.prototype.r;
-    Km.prototype.once = Km.prototype.A;
-    Km.prototype.un = Km.prototype.u;
-    Km.prototype.unByKey = Km.prototype.B;
-    zp.prototype.changed = zp.prototype.k;
-    zp.prototype.getRevision = zp.prototype.v;
-    zp.prototype.on = zp.prototype.r;
-    zp.prototype.once = zp.prototype.A;
-    zp.prototype.un = zp.prototype.u;
-    zp.prototype.unByKey = zp.prototype.B;
-    Ap.prototype.changed = Ap.prototype.k;
-    Ap.prototype.getRevision = Ap.prototype.v;
-    Ap.prototype.on = Ap.prototype.r;
-    Ap.prototype.once = Ap.prototype.A;
-    Ap.prototype.un = Ap.prototype.u;
-    Ap.prototype.unByKey = Ap.prototype.B;
-    Bp.prototype.changed = Bp.prototype.k;
-    Bp.prototype.getRevision = Bp.prototype.v;
-    Bp.prototype.on = Bp.prototype.r;
-    Bp.prototype.once = Bp.prototype.A;
-    Bp.prototype.un = Bp.prototype.u;
-    Bp.prototype.unByKey = Bp.prototype.B;
-    mj.prototype.get = mj.prototype.get;
-    mj.prototype.getKeys = mj.prototype.C;
-    mj.prototype.getProperties = mj.prototype.D;
-    mj.prototype.set = mj.prototype.set;
-    mj.prototype.setProperties = mj.prototype.t;
-    mj.prototype.unset = mj.prototype.I;
-    mj.prototype.changed = mj.prototype.k;
-    mj.prototype.getRevision = mj.prototype.v;
-    mj.prototype.on = mj.prototype.r;
-    mj.prototype.once = mj.prototype.A;
-    mj.prototype.un = mj.prototype.u;
-    mj.prototype.unByKey = mj.prototype.B;
-    C.prototype.getBrightness = C.prototype.Bb;
-    C.prototype.getContrast = C.prototype.Cb;
-    C.prototype.getHue = C.prototype.Db;
-    C.prototype.getExtent = C.prototype.G;
-    C.prototype.getMaxResolution = C.prototype.Eb;
-    C.prototype.getMinResolution = C.prototype.Fb;
-    C.prototype.getOpacity = C.prototype.Kb;
-    C.prototype.getSaturation = C.prototype.Gb;
-    C.prototype.getVisible = C.prototype.eb;
-    C.prototype.setBrightness = C.prototype.gc;
-    C.prototype.setContrast = C.prototype.hc;
-    C.prototype.setHue = C.prototype.ic;
-    C.prototype.setExtent = C.prototype.bc;
-    C.prototype.setMaxResolution = C.prototype.jc;
-    C.prototype.setMinResolution = C.prototype.kc;
-    C.prototype.setOpacity = C.prototype.cc;
-    C.prototype.setSaturation = C.prototype.lc;
-    C.prototype.setVisible = C.prototype.mc;
-    C.prototype.get = C.prototype.get;
-    C.prototype.getKeys = C.prototype.C;
-    C.prototype.getProperties = C.prototype.D;
-    C.prototype.set = C.prototype.set;
-    C.prototype.setProperties = C.prototype.t;
-    C.prototype.unset = C.prototype.I;
-    C.prototype.changed = C.prototype.k;
-    C.prototype.getRevision = C.prototype.v;
-    C.prototype.on = C.prototype.r;
-    C.prototype.once = C.prototype.A;
-    C.prototype.un = C.prototype.u;
-    C.prototype.unByKey = C.prototype.B;
-    M.prototype.setSource = M.prototype.Jc;
-    M.prototype.getBrightness = M.prototype.Bb;
-    M.prototype.getContrast = M.prototype.Cb;
-    M.prototype.getHue = M.prototype.Db;
-    M.prototype.getExtent = M.prototype.G;
-    M.prototype.getMaxResolution = M.prototype.Eb;
-    M.prototype.getMinResolution = M.prototype.Fb;
-    M.prototype.getOpacity = M.prototype.Kb;
-    M.prototype.getSaturation = M.prototype.Gb;
-    M.prototype.getVisible = M.prototype.eb;
-    M.prototype.setBrightness = M.prototype.gc;
-    M.prototype.setContrast = M.prototype.hc;
-    M.prototype.setHue = M.prototype.ic;
-    M.prototype.setExtent = M.prototype.bc;
-    M.prototype.setMaxResolution = M.prototype.jc;
-    M.prototype.setMinResolution = M.prototype.kc;
-    M.prototype.setOpacity = M.prototype.cc;
-    M.prototype.setSaturation = M.prototype.lc;
-    M.prototype.setVisible = M.prototype.mc;
-    M.prototype.get = M.prototype.get;
-    M.prototype.getKeys = M.prototype.C;
-    M.prototype.getProperties = M.prototype.D;
-    M.prototype.set = M.prototype.set;
-    M.prototype.setProperties = M.prototype.t;
-    M.prototype.unset = M.prototype.I;
-    M.prototype.changed = M.prototype.k;
-    M.prototype.getRevision = M.prototype.v;
-    M.prototype.on = M.prototype.r;
-    M.prototype.once = M.prototype.A;
-    M.prototype.un = M.prototype.u;
-    M.prototype.unByKey = M.prototype.B;
-    Z.prototype.getSource = Z.prototype.da;
-    Z.prototype.getStyle = Z.prototype.H;
-    Z.prototype.getStyleFunction = Z.prototype.J;
-    Z.prototype.setStyle = Z.prototype.e;
-    Z.prototype.setSource = Z.prototype.Jc;
-    Z.prototype.getBrightness = Z.prototype.Bb;
-    Z.prototype.getContrast = Z.prototype.Cb;
-    Z.prototype.getHue = Z.prototype.Db;
-    Z.prototype.getExtent = Z.prototype.G;
-    Z.prototype.getMaxResolution = Z.prototype.Eb;
-    Z.prototype.getMinResolution = Z.prototype.Fb;
-    Z.prototype.getOpacity = Z.prototype.Kb;
-    Z.prototype.getSaturation = Z.prototype.Gb;
-    Z.prototype.getVisible = Z.prototype.eb;
-    Z.prototype.setBrightness = Z.prototype.gc;
-    Z.prototype.setContrast = Z.prototype.hc;
-    Z.prototype.setHue = Z.prototype.ic;
-    Z.prototype.setExtent = Z.prototype.bc;
-    Z.prototype.setMaxResolution = Z.prototype.jc;
-    Z.prototype.setMinResolution = Z.prototype.kc;
-    Z.prototype.setOpacity = Z.prototype.cc;
-    Z.prototype.setSaturation = Z.prototype.lc;
-    Z.prototype.setVisible = Z.prototype.mc;
-    Z.prototype.get = Z.prototype.get;
-    Z.prototype.getKeys = Z.prototype.C;
-    Z.prototype.getProperties = Z.prototype.D;
-    Z.prototype.set = Z.prototype.set;
-    Z.prototype.setProperties = Z.prototype.t;
-    Z.prototype.unset = Z.prototype.I;
-    Z.prototype.changed = Z.prototype.k;
-    Z.prototype.getRevision = Z.prototype.v;
-    Z.prototype.on = Z.prototype.r;
-    Z.prototype.once = Z.prototype.A;
-    Z.prototype.un = Z.prototype.u;
-    Z.prototype.unByKey = Z.prototype.B;
-    I.prototype.setSource = I.prototype.Jc;
-    I.prototype.getBrightness = I.prototype.Bb;
-    I.prototype.getContrast = I.prototype.Cb;
-    I.prototype.getHue = I.prototype.Db;
-    I.prototype.getExtent = I.prototype.G;
-    I.prototype.getMaxResolution = I.prototype.Eb;
-    I.prototype.getMinResolution = I.prototype.Fb;
-    I.prototype.getOpacity = I.prototype.Kb;
-    I.prototype.getSaturation = I.prototype.Gb;
-    I.prototype.getVisible = I.prototype.eb;
-    I.prototype.setBrightness = I.prototype.gc;
-    I.prototype.setContrast = I.prototype.hc;
-    I.prototype.setHue = I.prototype.ic;
-    I.prototype.setExtent = I.prototype.bc;
-    I.prototype.setMaxResolution = I.prototype.jc;
-    I.prototype.setMinResolution = I.prototype.kc;
-    I.prototype.setOpacity = I.prototype.cc;
-    I.prototype.setSaturation = I.prototype.lc;
-    I.prototype.setVisible = I.prototype.mc;
-    I.prototype.get = I.prototype.get;
-    I.prototype.getKeys = I.prototype.C;
-    I.prototype.getProperties = I.prototype.D;
-    I.prototype.set = I.prototype.set;
-    I.prototype.setProperties = I.prototype.t;
-    I.prototype.unset = I.prototype.I;
-    I.prototype.changed = I.prototype.k;
-    I.prototype.getRevision = I.prototype.v;
-    I.prototype.on = I.prototype.r;
-    I.prototype.once = I.prototype.A;
-    I.prototype.un = I.prototype.u;
-    I.prototype.unByKey = I.prototype.B;
-    G.prototype.getBrightness = G.prototype.Bb;
-    G.prototype.getContrast = G.prototype.Cb;
-    G.prototype.getHue = G.prototype.Db;
-    G.prototype.getExtent = G.prototype.G;
-    G.prototype.getMaxResolution = G.prototype.Eb;
-    G.prototype.getMinResolution = G.prototype.Fb;
-    G.prototype.getOpacity = G.prototype.Kb;
-    G.prototype.getSaturation = G.prototype.Gb;
-    G.prototype.getVisible = G.prototype.eb;
-    G.prototype.setBrightness = G.prototype.gc;
-    G.prototype.setContrast = G.prototype.hc;
-    G.prototype.setHue = G.prototype.ic;
-    G.prototype.setExtent = G.prototype.bc;
-    G.prototype.setMaxResolution = G.prototype.jc;
-    G.prototype.setMinResolution = G.prototype.kc;
-    G.prototype.setOpacity = G.prototype.cc;
-    G.prototype.setSaturation = G.prototype.lc;
-    G.prototype.setVisible = G.prototype.mc;
-    G.prototype.get = G.prototype.get;
-    G.prototype.getKeys = G.prototype.C;
-    G.prototype.getProperties = G.prototype.D;
-    G.prototype.set = G.prototype.set;
-    G.prototype.setProperties = G.prototype.t;
-    G.prototype.unset = G.prototype.I;
-    G.prototype.changed = G.prototype.k;
-    G.prototype.getRevision = G.prototype.v;
-    G.prototype.on = G.prototype.r;
-    G.prototype.once = G.prototype.A;
-    G.prototype.un = G.prototype.u;
-    G.prototype.unByKey = G.prototype.B;
-    L.prototype.setSource = L.prototype.Jc;
-    L.prototype.getBrightness = L.prototype.Bb;
-    L.prototype.getContrast = L.prototype.Cb;
-    L.prototype.getHue = L.prototype.Db;
-    L.prototype.getExtent = L.prototype.G;
-    L.prototype.getMaxResolution = L.prototype.Eb;
-    L.prototype.getMinResolution = L.prototype.Fb;
-    L.prototype.getOpacity = L.prototype.Kb;
-    L.prototype.getSaturation = L.prototype.Gb;
-    L.prototype.getVisible = L.prototype.eb;
-    L.prototype.setBrightness = L.prototype.gc;
-    L.prototype.setContrast = L.prototype.hc;
-    L.prototype.setHue = L.prototype.ic;
-    L.prototype.setExtent = L.prototype.bc;
-    L.prototype.setMaxResolution = L.prototype.jc;
-    L.prototype.setMinResolution = L.prototype.kc;
-    L.prototype.setOpacity = L.prototype.cc;
-    L.prototype.setSaturation = L.prototype.lc;
-    L.prototype.setVisible = L.prototype.mc;
-    L.prototype.get = L.prototype.get;
-    L.prototype.getKeys = L.prototype.C;
-    L.prototype.getProperties = L.prototype.D;
-    L.prototype.set = L.prototype.set;
-    L.prototype.setProperties = L.prototype.t;
-    L.prototype.unset = L.prototype.I;
-    L.prototype.changed = L.prototype.k;
-    L.prototype.getRevision = L.prototype.v;
-    L.prototype.on = L.prototype.r;
-    L.prototype.once = L.prototype.A;
-    L.prototype.un = L.prototype.u;
-    L.prototype.unByKey = L.prototype.B;
-    Wj.prototype.get = Wj.prototype.get;
-    Wj.prototype.getKeys = Wj.prototype.C;
-    Wj.prototype.getProperties = Wj.prototype.D;
-    Wj.prototype.set = Wj.prototype.set;
-    Wj.prototype.setProperties = Wj.prototype.t;
-    Wj.prototype.unset = Wj.prototype.I;
-    Wj.prototype.changed = Wj.prototype.k;
-    Wj.prototype.getRevision = Wj.prototype.v;
-    Wj.prototype.on = Wj.prototype.r;
-    Wj.prototype.once = Wj.prototype.A;
-    Wj.prototype.un = Wj.prototype.u;
-    Wj.prototype.unByKey = Wj.prototype.B;
-    ak.prototype.getActive = ak.prototype.c;
-    ak.prototype.setActive = ak.prototype.d;
-    ak.prototype.get = ak.prototype.get;
-    ak.prototype.getKeys = ak.prototype.C;
-    ak.prototype.getProperties = ak.prototype.D;
-    ak.prototype.set = ak.prototype.set;
-    ak.prototype.setProperties = ak.prototype.t;
-    ak.prototype.unset = ak.prototype.I;
-    ak.prototype.changed = ak.prototype.k;
-    ak.prototype.getRevision = ak.prototype.v;
-    ak.prototype.on = ak.prototype.r;
-    ak.prototype.once = ak.prototype.A;
-    ak.prototype.un = ak.prototype.u;
-    ak.prototype.unByKey = ak.prototype.B;
-    Kx.prototype.getActive = Kx.prototype.c;
-    Kx.prototype.setActive = Kx.prototype.d;
-    Kx.prototype.get = Kx.prototype.get;
-    Kx.prototype.getKeys = Kx.prototype.C;
-    Kx.prototype.getProperties = Kx.prototype.D;
-    Kx.prototype.set = Kx.prototype.set;
-    Kx.prototype.setProperties = Kx.prototype.t;
-    Kx.prototype.unset = Kx.prototype.I;
-    Kx.prototype.changed = Kx.prototype.k;
-    Kx.prototype.getRevision = Kx.prototype.v;
-    Kx.prototype.on = Kx.prototype.r;
-    Kx.prototype.once = Kx.prototype.A;
-    Kx.prototype.un = Kx.prototype.u;
-    Kx.prototype.unByKey = Kx.prototype.B;
-    jk.prototype.getActive = jk.prototype.c;
-    jk.prototype.setActive = jk.prototype.d;
-    jk.prototype.get = jk.prototype.get;
-    jk.prototype.getKeys = jk.prototype.C;
-    jk.prototype.getProperties = jk.prototype.D;
-    jk.prototype.set = jk.prototype.set;
-    jk.prototype.setProperties = jk.prototype.t;
-    jk.prototype.unset = jk.prototype.I;
-    jk.prototype.changed = jk.prototype.k;
-    jk.prototype.getRevision = jk.prototype.v;
-    jk.prototype.on = jk.prototype.r;
-    jk.prototype.once = jk.prototype.A;
-    jk.prototype.un = jk.prototype.u;
-    jk.prototype.unByKey = jk.prototype.B;
-    nl.prototype.getActive = nl.prototype.c;
-    nl.prototype.setActive = nl.prototype.d;
-    nl.prototype.get = nl.prototype.get;
-    nl.prototype.getKeys = nl.prototype.C;
-    nl.prototype.getProperties = nl.prototype.D;
-    nl.prototype.set = nl.prototype.set;
-    nl.prototype.setProperties = nl.prototype.t;
-    nl.prototype.unset = nl.prototype.I;
-    nl.prototype.changed = nl.prototype.k;
-    nl.prototype.getRevision = nl.prototype.v;
-    nl.prototype.on = nl.prototype.r;
-    nl.prototype.once = nl.prototype.A;
-    nl.prototype.un = nl.prototype.u;
-    nl.prototype.unByKey = nl.prototype.B;
-    mk.prototype.getActive = mk.prototype.c;
-    mk.prototype.setActive = mk.prototype.d;
-    mk.prototype.get = mk.prototype.get;
-    mk.prototype.getKeys = mk.prototype.C;
-    mk.prototype.getProperties = mk.prototype.D;
-    mk.prototype.set = mk.prototype.set;
-    mk.prototype.setProperties = mk.prototype.t;
-    mk.prototype.unset = mk.prototype.I;
-    mk.prototype.changed = mk.prototype.k;
-    mk.prototype.getRevision = mk.prototype.v;
-    mk.prototype.on = mk.prototype.r;
-    mk.prototype.once = mk.prototype.A;
-    mk.prototype.un = mk.prototype.u;
-    mk.prototype.unByKey = mk.prototype.B;
-    Ox.prototype.getActive = Ox.prototype.c;
-    Ox.prototype.setActive = Ox.prototype.d;
-    Ox.prototype.get = Ox.prototype.get;
-    Ox.prototype.getKeys = Ox.prototype.C;
-    Ox.prototype.getProperties = Ox.prototype.D;
-    Ox.prototype.set = Ox.prototype.set;
-    Ox.prototype.setProperties = Ox.prototype.t;
-    Ox.prototype.unset = Ox.prototype.I;
-    Ox.prototype.changed = Ox.prototype.k;
-    Ox.prototype.getRevision = Ox.prototype.v;
-    Ox.prototype.on = Ox.prototype.r;
-    Ox.prototype.once = Ox.prototype.A;
-    Ox.prototype.un = Ox.prototype.u;
-    Ox.prototype.unByKey = Ox.prototype.B;
-    qk.prototype.getActive = qk.prototype.c;
-    qk.prototype.setActive = qk.prototype.d;
-    qk.prototype.get = qk.prototype.get;
-    qk.prototype.getKeys = qk.prototype.C;
-    qk.prototype.getProperties = qk.prototype.D;
-    qk.prototype.set = qk.prototype.set;
-    qk.prototype.setProperties = qk.prototype.t;
-    qk.prototype.unset = qk.prototype.I;
-    qk.prototype.changed = qk.prototype.k;
-    qk.prototype.getRevision = qk.prototype.v;
-    qk.prototype.on = qk.prototype.r;
-    qk.prototype.once = qk.prototype.A;
-    qk.prototype.un = qk.prototype.u;
-    qk.prototype.unByKey = qk.prototype.B;
-    Gl.prototype.getGeometry = Gl.prototype.Q;
-    Gl.prototype.getActive = Gl.prototype.c;
-    Gl.prototype.setActive = Gl.prototype.d;
-    Gl.prototype.get = Gl.prototype.get;
-    Gl.prototype.getKeys = Gl.prototype.C;
-    Gl.prototype.getProperties = Gl.prototype.D;
-    Gl.prototype.set = Gl.prototype.set;
-    Gl.prototype.setProperties = Gl.prototype.t;
-    Gl.prototype.unset = Gl.prototype.I;
-    Gl.prototype.changed = Gl.prototype.k;
-    Gl.prototype.getRevision = Gl.prototype.v;
-    Gl.prototype.on = Gl.prototype.r;
-    Gl.prototype.once = Gl.prototype.A;
-    Gl.prototype.un = Gl.prototype.u;
-    Gl.prototype.unByKey = Gl.prototype.B;
-    Tx.prototype.getActive = Tx.prototype.c;
-    Tx.prototype.setActive = Tx.prototype.d;
-    Tx.prototype.get = Tx.prototype.get;
-    Tx.prototype.getKeys = Tx.prototype.C;
-    Tx.prototype.getProperties = Tx.prototype.D;
-    Tx.prototype.set = Tx.prototype.set;
-    Tx.prototype.setProperties = Tx.prototype.t;
-    Tx.prototype.unset = Tx.prototype.I;
-    Tx.prototype.changed = Tx.prototype.k;
-    Tx.prototype.getRevision = Tx.prototype.v;
-    Tx.prototype.on = Tx.prototype.r;
-    Tx.prototype.once = Tx.prototype.A;
-    Tx.prototype.un = Tx.prototype.u;
-    Tx.prototype.unByKey = Tx.prototype.B;
-    Hl.prototype.getActive = Hl.prototype.c;
-    Hl.prototype.setActive = Hl.prototype.d;
-    Hl.prototype.get = Hl.prototype.get;
-    Hl.prototype.getKeys = Hl.prototype.C;
-    Hl.prototype.getProperties = Hl.prototype.D;
-    Hl.prototype.set = Hl.prototype.set;
-    Hl.prototype.setProperties = Hl.prototype.t;
-    Hl.prototype.unset = Hl.prototype.I;
-    Hl.prototype.changed = Hl.prototype.k;
-    Hl.prototype.getRevision = Hl.prototype.v;
-    Hl.prototype.on = Hl.prototype.r;
-    Hl.prototype.once = Hl.prototype.A;
-    Hl.prototype.un = Hl.prototype.u;
-    Hl.prototype.unByKey = Hl.prototype.B;
-    Jl.prototype.getActive = Jl.prototype.c;
-    Jl.prototype.setActive = Jl.prototype.d;
-    Jl.prototype.get = Jl.prototype.get;
-    Jl.prototype.getKeys = Jl.prototype.C;
-    Jl.prototype.getProperties = Jl.prototype.D;
-    Jl.prototype.set = Jl.prototype.set;
-    Jl.prototype.setProperties = Jl.prototype.t;
-    Jl.prototype.unset = Jl.prototype.I;
-    Jl.prototype.changed = Jl.prototype.k;
-    Jl.prototype.getRevision = Jl.prototype.v;
-    Jl.prototype.on = Jl.prototype.r;
-    Jl.prototype.once = Jl.prototype.A;
-    Jl.prototype.un = Jl.prototype.u;
-    Jl.prototype.unByKey = Jl.prototype.B;
-    hy.prototype.getActive = hy.prototype.c;
-    hy.prototype.setActive = hy.prototype.d;
-    hy.prototype.get = hy.prototype.get;
-    hy.prototype.getKeys = hy.prototype.C;
-    hy.prototype.getProperties = hy.prototype.D;
-    hy.prototype.set = hy.prototype.set;
-    hy.prototype.setProperties = hy.prototype.t;
-    hy.prototype.unset = hy.prototype.I;
-    hy.prototype.changed = hy.prototype.k;
-    hy.prototype.getRevision = hy.prototype.v;
-    hy.prototype.on = hy.prototype.r;
-    hy.prototype.once = hy.prototype.A;
-    hy.prototype.un = hy.prototype.u;
-    hy.prototype.unByKey = hy.prototype.B;
-    Ll.prototype.getActive = Ll.prototype.c;
-    Ll.prototype.setActive = Ll.prototype.d;
-    Ll.prototype.get = Ll.prototype.get;
-    Ll.prototype.getKeys = Ll.prototype.C;
-    Ll.prototype.getProperties = Ll.prototype.D;
-    Ll.prototype.set = Ll.prototype.set;
-    Ll.prototype.setProperties = Ll.prototype.t;
-    Ll.prototype.unset = Ll.prototype.I;
-    Ll.prototype.changed = Ll.prototype.k;
-    Ll.prototype.getRevision = Ll.prototype.v;
-    Ll.prototype.on = Ll.prototype.r;
-    Ll.prototype.once = Ll.prototype.A;
-    Ll.prototype.un = Ll.prototype.u;
-    Ll.prototype.unByKey = Ll.prototype.B;
-    Nl.prototype.getActive = Nl.prototype.c;
-    Nl.prototype.setActive = Nl.prototype.d;
-    Nl.prototype.get = Nl.prototype.get;
-    Nl.prototype.getKeys = Nl.prototype.C;
-    Nl.prototype.getProperties = Nl.prototype.D;
-    Nl.prototype.set = Nl.prototype.set;
-    Nl.prototype.setProperties = Nl.prototype.t;
-    Nl.prototype.unset = Nl.prototype.I;
-    Nl.prototype.changed = Nl.prototype.k;
-    Nl.prototype.getRevision = Nl.prototype.v;
-    Nl.prototype.on = Nl.prototype.r;
-    Nl.prototype.once = Nl.prototype.A;
-    Nl.prototype.un = Nl.prototype.u;
-    Nl.prototype.unByKey = Nl.prototype.B;
-    Rl.prototype.getActive = Rl.prototype.c;
-    Rl.prototype.setActive = Rl.prototype.d;
-    Rl.prototype.get = Rl.prototype.get;
-    Rl.prototype.getKeys = Rl.prototype.C;
-    Rl.prototype.getProperties = Rl.prototype.D;
-    Rl.prototype.set = Rl.prototype.set;
-    Rl.prototype.setProperties = Rl.prototype.t;
-    Rl.prototype.unset = Rl.prototype.I;
-    Rl.prototype.changed = Rl.prototype.k;
-    Rl.prototype.getRevision = Rl.prototype.v;
-    Rl.prototype.on = Rl.prototype.r;
-    Rl.prototype.once = Rl.prototype.A;
-    Rl.prototype.un = Rl.prototype.u;
-    Rl.prototype.unByKey = Rl.prototype.B;
-    sy.prototype.getActive = sy.prototype.c;
-    sy.prototype.setActive = sy.prototype.d;
-    sy.prototype.get = sy.prototype.get;
-    sy.prototype.getKeys = sy.prototype.C;
-    sy.prototype.getProperties = sy.prototype.D;
-    sy.prototype.set = sy.prototype.set;
-    sy.prototype.setProperties = sy.prototype.t;
-    sy.prototype.unset = sy.prototype.I;
-    sy.prototype.changed = sy.prototype.k;
-    sy.prototype.getRevision = sy.prototype.v;
-    sy.prototype.on = sy.prototype.r;
-    sy.prototype.once = sy.prototype.A;
-    sy.prototype.un = sy.prototype.u;
-    sy.prototype.unByKey = sy.prototype.B;
-    vy.prototype.getActive = vy.prototype.c;
-    vy.prototype.setActive = vy.prototype.d;
-    vy.prototype.get = vy.prototype.get;
-    vy.prototype.getKeys = vy.prototype.C;
-    vy.prototype.getProperties = vy.prototype.D;
-    vy.prototype.set = vy.prototype.set;
-    vy.prototype.setProperties = vy.prototype.t;
-    vy.prototype.unset = vy.prototype.I;
-    vy.prototype.changed = vy.prototype.k;
-    vy.prototype.getRevision = vy.prototype.v;
-    vy.prototype.on = vy.prototype.r;
-    vy.prototype.once = vy.prototype.A;
-    vy.prototype.un = vy.prototype.u;
-    vy.prototype.unByKey = vy.prototype.B;
-    uk.prototype.get = uk.prototype.get;
-    uk.prototype.getKeys = uk.prototype.C;
-    uk.prototype.getProperties = uk.prototype.D;
-    uk.prototype.set = uk.prototype.set;
-    uk.prototype.setProperties = uk.prototype.t;
-    uk.prototype.unset = uk.prototype.I;
-    uk.prototype.changed = uk.prototype.k;
-    uk.prototype.getRevision = uk.prototype.v;
-    uk.prototype.on = uk.prototype.r;
-    uk.prototype.once = uk.prototype.A;
-    uk.prototype.un = uk.prototype.u;
-    uk.prototype.unByKey = uk.prototype.B;
-    wk.prototype.getClosestPoint = wk.prototype.e;
-    wk.prototype.getExtent = wk.prototype.G;
-    wk.prototype.get = wk.prototype.get;
-    wk.prototype.getKeys = wk.prototype.C;
-    wk.prototype.getProperties = wk.prototype.D;
-    wk.prototype.set = wk.prototype.set;
-    wk.prototype.setProperties = wk.prototype.t;
-    wk.prototype.unset = wk.prototype.I;
-    wk.prototype.changed = wk.prototype.k;
-    wk.prototype.getRevision = wk.prototype.v;
-    wk.prototype.on = wk.prototype.r;
-    wk.prototype.once = wk.prototype.A;
-    wk.prototype.un = wk.prototype.u;
-    wk.prototype.unByKey = wk.prototype.B;
-    Pm.prototype.getFirstCoordinate = Pm.prototype.ob;
-    Pm.prototype.getLastCoordinate = Pm.prototype.pb;
-    Pm.prototype.getLayout = Pm.prototype.qb;
-    Pm.prototype.applyTransform = Pm.prototype.qa;
-    Pm.prototype.translate = Pm.prototype.Oa;
-    Pm.prototype.getClosestPoint = Pm.prototype.e;
-    Pm.prototype.getExtent = Pm.prototype.G;
-    Pm.prototype.get = Pm.prototype.get;
-    Pm.prototype.getKeys = Pm.prototype.C;
-    Pm.prototype.getProperties = Pm.prototype.D;
-    Pm.prototype.set = Pm.prototype.set;
-    Pm.prototype.setProperties = Pm.prototype.t;
-    Pm.prototype.unset = Pm.prototype.I;
-    Pm.prototype.changed = Pm.prototype.k;
-    Pm.prototype.getRevision = Pm.prototype.v;
-    Pm.prototype.on = Pm.prototype.r;
-    Pm.prototype.once = Pm.prototype.A;
-    Pm.prototype.un = Pm.prototype.u;
-    Pm.prototype.unByKey = Pm.prototype.B;
-    Rm.prototype.getClosestPoint = Rm.prototype.e;
-    Rm.prototype.getExtent = Rm.prototype.G;
-    Rm.prototype.get = Rm.prototype.get;
-    Rm.prototype.getKeys = Rm.prototype.C;
-    Rm.prototype.getProperties = Rm.prototype.D;
-    Rm.prototype.set = Rm.prototype.set;
-    Rm.prototype.setProperties = Rm.prototype.t;
-    Rm.prototype.unset = Rm.prototype.I;
-    Rm.prototype.changed = Rm.prototype.k;
-    Rm.prototype.getRevision = Rm.prototype.v;
-    Rm.prototype.on = Rm.prototype.r;
-    Rm.prototype.once = Rm.prototype.A;
-    Rm.prototype.un = Rm.prototype.u;
-    Rm.prototype.unByKey = Rm.prototype.B;
-    Qk.prototype.getFirstCoordinate = Qk.prototype.ob;
-    Qk.prototype.getLastCoordinate = Qk.prototype.pb;
-    Qk.prototype.getLayout = Qk.prototype.qb;
-    Qk.prototype.applyTransform = Qk.prototype.qa;
-    Qk.prototype.translate = Qk.prototype.Oa;
-    Qk.prototype.getClosestPoint = Qk.prototype.e;
-    Qk.prototype.getExtent = Qk.prototype.G;
-    Qk.prototype.get = Qk.prototype.get;
-    Qk.prototype.getKeys = Qk.prototype.C;
-    Qk.prototype.getProperties = Qk.prototype.D;
-    Qk.prototype.set = Qk.prototype.set;
-    Qk.prototype.setProperties = Qk.prototype.t;
-    Qk.prototype.unset = Qk.prototype.I;
-    Qk.prototype.changed = Qk.prototype.k;
-    Qk.prototype.getRevision = Qk.prototype.v;
-    Qk.prototype.on = Qk.prototype.r;
-    Qk.prototype.once = Qk.prototype.A;
-    Qk.prototype.un = Qk.prototype.u;
-    Qk.prototype.unByKey = Qk.prototype.B;
-    O.prototype.getFirstCoordinate = O.prototype.ob;
-    O.prototype.getLastCoordinate = O.prototype.pb;
-    O.prototype.getLayout = O.prototype.qb;
-    O.prototype.applyTransform = O.prototype.qa;
-    O.prototype.translate = O.prototype.Oa;
-    O.prototype.getClosestPoint = O.prototype.e;
-    O.prototype.getExtent = O.prototype.G;
-    O.prototype.get = O.prototype.get;
-    O.prototype.getKeys = O.prototype.C;
-    O.prototype.getProperties = O.prototype.D;
-    O.prototype.set = O.prototype.set;
-    O.prototype.setProperties = O.prototype.t;
-    O.prototype.unset = O.prototype.I;
-    O.prototype.changed = O.prototype.k;
-    O.prototype.getRevision = O.prototype.v;
-    O.prototype.on = O.prototype.r;
-    O.prototype.once = O.prototype.A;
-    O.prototype.un = O.prototype.u;
-    O.prototype.unByKey = O.prototype.B;
-    Q.prototype.getFirstCoordinate = Q.prototype.ob;
-    Q.prototype.getLastCoordinate = Q.prototype.pb;
-    Q.prototype.getLayout = Q.prototype.qb;
-    Q.prototype.applyTransform = Q.prototype.qa;
-    Q.prototype.translate = Q.prototype.Oa;
-    Q.prototype.getClosestPoint = Q.prototype.e;
-    Q.prototype.getExtent = Q.prototype.G;
-    Q.prototype.get = Q.prototype.get;
-    Q.prototype.getKeys = Q.prototype.C;
-    Q.prototype.getProperties = Q.prototype.D;
-    Q.prototype.set = Q.prototype.set;
-    Q.prototype.setProperties = Q.prototype.t;
-    Q.prototype.unset = Q.prototype.I;
-    Q.prototype.changed = Q.prototype.k;
-    Q.prototype.getRevision = Q.prototype.v;
-    Q.prototype.on = Q.prototype.r;
-    Q.prototype.once = Q.prototype.A;
-    Q.prototype.un = Q.prototype.u;
-    Q.prototype.unByKey = Q.prototype.B;
-    an.prototype.getFirstCoordinate = an.prototype.ob;
-    an.prototype.getLastCoordinate = an.prototype.pb;
-    an.prototype.getLayout = an.prototype.qb;
-    an.prototype.applyTransform = an.prototype.qa;
-    an.prototype.translate = an.prototype.Oa;
-    an.prototype.getClosestPoint = an.prototype.e;
-    an.prototype.getExtent = an.prototype.G;
-    an.prototype.get = an.prototype.get;
-    an.prototype.getKeys = an.prototype.C;
-    an.prototype.getProperties = an.prototype.D;
-    an.prototype.set = an.prototype.set;
-    an.prototype.setProperties = an.prototype.t;
-    an.prototype.unset = an.prototype.I;
-    an.prototype.changed = an.prototype.k;
-    an.prototype.getRevision = an.prototype.v;
-    an.prototype.on = an.prototype.r;
-    an.prototype.once = an.prototype.A;
-    an.prototype.un = an.prototype.u;
-    an.prototype.unByKey = an.prototype.B;
-    R.prototype.getFirstCoordinate = R.prototype.ob;
-    R.prototype.getLastCoordinate = R.prototype.pb;
-    R.prototype.getLayout = R.prototype.qb;
-    R.prototype.applyTransform = R.prototype.qa;
-    R.prototype.translate = R.prototype.Oa;
-    R.prototype.getClosestPoint = R.prototype.e;
-    R.prototype.getExtent = R.prototype.G;
-    R.prototype.get = R.prototype.get;
-    R.prototype.getKeys = R.prototype.C;
-    R.prototype.getProperties = R.prototype.D;
-    R.prototype.set = R.prototype.set;
-    R.prototype.setProperties = R.prototype.t;
-    R.prototype.unset = R.prototype.I;
-    R.prototype.changed = R.prototype.k;
-    R.prototype.getRevision = R.prototype.v;
-    R.prototype.on = R.prototype.r;
-    R.prototype.once = R.prototype.A;
-    R.prototype.un = R.prototype.u;
-    R.prototype.unByKey = R.prototype.B;
-    E.prototype.getFirstCoordinate = E.prototype.ob;
-    E.prototype.getLastCoordinate = E.prototype.pb;
-    E.prototype.getLayout = E.prototype.qb;
-    E.prototype.applyTransform = E.prototype.qa;
-    E.prototype.translate = E.prototype.Oa;
-    E.prototype.getClosestPoint = E.prototype.e;
-    E.prototype.getExtent = E.prototype.G;
-    E.prototype.get = E.prototype.get;
-    E.prototype.getKeys = E.prototype.C;
-    E.prototype.getProperties = E.prototype.D;
-    E.prototype.set = E.prototype.set;
-    E.prototype.setProperties = E.prototype.t;
-    E.prototype.unset = E.prototype.I;
-    E.prototype.changed = E.prototype.k;
-    E.prototype.getRevision = E.prototype.v;
-    E.prototype.on = E.prototype.r;
-    E.prototype.once = E.prototype.A;
-    E.prototype.un = E.prototype.u;
-    E.prototype.unByKey = E.prototype.B;
-    F.prototype.getFirstCoordinate = F.prototype.ob;
-    F.prototype.getLastCoordinate = F.prototype.pb;
-    F.prototype.getLayout = F.prototype.qb;
-    F.prototype.applyTransform = F.prototype.qa;
-    F.prototype.translate = F.prototype.Oa;
-    F.prototype.getClosestPoint = F.prototype.e;
-    F.prototype.getExtent = F.prototype.G;
-    F.prototype.get = F.prototype.get;
-    F.prototype.getKeys = F.prototype.C;
-    F.prototype.getProperties = F.prototype.D;
-    F.prototype.set = F.prototype.set;
-    F.prototype.setProperties = F.prototype.t;
-    F.prototype.unset = F.prototype.I;
-    F.prototype.changed = F.prototype.k;
-    F.prototype.getRevision = F.prototype.v;
-    F.prototype.on = F.prototype.r;
-    F.prototype.once = F.prototype.A;
-    F.prototype.un = F.prototype.u;
-    F.prototype.unByKey = F.prototype.B;
-    ls.prototype.readFeatures = ls.prototype.ja;
-    cs.prototype.readFeatures = cs.prototype.ja;
-    cs.prototype.readFeatures = cs.prototype.ja;
-    ug.prototype.get = ug.prototype.get;
-    ug.prototype.getKeys = ug.prototype.C;
-    ug.prototype.getProperties = ug.prototype.D;
-    ug.prototype.set = ug.prototype.set;
-    ug.prototype.setProperties = ug.prototype.t;
-    ug.prototype.unset = ug.prototype.I;
-    ug.prototype.changed = ug.prototype.k;
-    ug.prototype.getRevision = ug.prototype.v;
-    ug.prototype.on = ug.prototype.r;
-    ug.prototype.once = ug.prototype.A;
-    ug.prototype.un = ug.prototype.u;
-    ug.prototype.unByKey = ug.prototype.B;
-    ch.prototype.getMap = ch.prototype.e;
-    ch.prototype.setMap = ch.prototype.setMap;
-    ch.prototype.setTarget = ch.prototype.c;
-    ch.prototype.get = ch.prototype.get;
-    ch.prototype.getKeys = ch.prototype.C;
-    ch.prototype.getProperties = ch.prototype.D;
-    ch.prototype.set = ch.prototype.set;
-    ch.prototype.setProperties = ch.prototype.t;
-    ch.prototype.unset = ch.prototype.I;
-    ch.prototype.changed = ch.prototype.k;
-    ch.prototype.getRevision = ch.prototype.v;
-    ch.prototype.on = ch.prototype.r;
-    ch.prototype.once = ch.prototype.A;
-    ch.prototype.un = ch.prototype.u;
-    ch.prototype.unByKey = ch.prototype.B;
-    nh.prototype.getMap = nh.prototype.e;
-    nh.prototype.setMap = nh.prototype.setMap;
-    nh.prototype.setTarget = nh.prototype.c;
-    nh.prototype.get = nh.prototype.get;
-    nh.prototype.getKeys = nh.prototype.C;
-    nh.prototype.getProperties = nh.prototype.D;
-    nh.prototype.set = nh.prototype.set;
-    nh.prototype.setProperties = nh.prototype.t;
-    nh.prototype.unset = nh.prototype.I;
-    nh.prototype.changed = nh.prototype.k;
-    nh.prototype.getRevision = nh.prototype.v;
-    nh.prototype.on = nh.prototype.r;
-    nh.prototype.once = nh.prototype.A;
-    nh.prototype.un = nh.prototype.u;
-    nh.prototype.unByKey = nh.prototype.B;
-    oh.prototype.getMap = oh.prototype.e;
-    oh.prototype.setTarget = oh.prototype.c;
-    oh.prototype.get = oh.prototype.get;
-    oh.prototype.getKeys = oh.prototype.C;
-    oh.prototype.getProperties = oh.prototype.D;
-    oh.prototype.set = oh.prototype.set;
-    oh.prototype.setProperties = oh.prototype.t;
-    oh.prototype.unset = oh.prototype.I;
-    oh.prototype.changed = oh.prototype.k;
-    oh.prototype.getRevision = oh.prototype.v;
-    oh.prototype.on = oh.prototype.r;
-    oh.prototype.once = oh.prototype.A;
-    oh.prototype.un = oh.prototype.u;
-    oh.prototype.unByKey = oh.prototype.B;
-    Uq.prototype.getMap = Uq.prototype.e;
-    Uq.prototype.setTarget = Uq.prototype.c;
-    Uq.prototype.get = Uq.prototype.get;
-    Uq.prototype.getKeys = Uq.prototype.C;
-    Uq.prototype.getProperties = Uq.prototype.D;
-    Uq.prototype.set = Uq.prototype.set;
-    Uq.prototype.setProperties = Uq.prototype.t;
-    Uq.prototype.unset = Uq.prototype.I;
-    Uq.prototype.changed = Uq.prototype.k;
-    Uq.prototype.getRevision = Uq.prototype.v;
-    Uq.prototype.on = Uq.prototype.r;
-    Uq.prototype.once = Uq.prototype.A;
-    Uq.prototype.un = Uq.prototype.u;
-    Uq.prototype.unByKey = Uq.prototype.B;
-    fh.prototype.getMap = fh.prototype.e;
-    fh.prototype.setMap = fh.prototype.setMap;
-    fh.prototype.setTarget = fh.prototype.c;
-    fh.prototype.get = fh.prototype.get;
-    fh.prototype.getKeys = fh.prototype.C;
-    fh.prototype.getProperties = fh.prototype.D;
-    fh.prototype.set = fh.prototype.set;
-    fh.prototype.setProperties = fh.prototype.t;
-    fh.prototype.unset = fh.prototype.I;
-    fh.prototype.changed = fh.prototype.k;
-    fh.prototype.getRevision = fh.prototype.v;
-    fh.prototype.on = fh.prototype.r;
-    fh.prototype.once = fh.prototype.A;
-    fh.prototype.un = fh.prototype.u;
-    fh.prototype.unByKey = fh.prototype.B;
-    Zq.prototype.getMap = Zq.prototype.e;
-    Zq.prototype.setMap = Zq.prototype.setMap;
-    Zq.prototype.setTarget = Zq.prototype.c;
-    Zq.prototype.get = Zq.prototype.get;
-    Zq.prototype.getKeys = Zq.prototype.C;
-    Zq.prototype.getProperties = Zq.prototype.D;
-    Zq.prototype.set = Zq.prototype.set;
-    Zq.prototype.setProperties = Zq.prototype.t;
-    Zq.prototype.unset = Zq.prototype.I;
-    Zq.prototype.changed = Zq.prototype.k;
-    Zq.prototype.getRevision = Zq.prototype.v;
-    Zq.prototype.on = Zq.prototype.r;
-    Zq.prototype.once = Zq.prototype.A;
-    Zq.prototype.un = Zq.prototype.u;
-    Zq.prototype.unByKey = Zq.prototype.B;
-    hh.prototype.getMap = hh.prototype.e;
-    hh.prototype.setMap = hh.prototype.setMap;
-    hh.prototype.setTarget = hh.prototype.c;
-    hh.prototype.get = hh.prototype.get;
-    hh.prototype.getKeys = hh.prototype.C;
-    hh.prototype.getProperties = hh.prototype.D;
-    hh.prototype.set = hh.prototype.set;
-    hh.prototype.setProperties = hh.prototype.t;
-    hh.prototype.unset = hh.prototype.I;
-    hh.prototype.changed = hh.prototype.k;
-    hh.prototype.getRevision = hh.prototype.v;
-    hh.prototype.on = hh.prototype.r;
-    hh.prototype.once = hh.prototype.A;
-    hh.prototype.un = hh.prototype.u;
-    hh.prototype.unByKey = hh.prototype.B;
-    nr.prototype.getMap = nr.prototype.e;
-    nr.prototype.setTarget = nr.prototype.c;
-    nr.prototype.get = nr.prototype.get;
-    nr.prototype.getKeys = nr.prototype.C;
-    nr.prototype.getProperties = nr.prototype.D;
-    nr.prototype.set = nr.prototype.set;
-    nr.prototype.setProperties = nr.prototype.t;
-    nr.prototype.unset = nr.prototype.I;
-    nr.prototype.changed = nr.prototype.k;
-    nr.prototype.getRevision = nr.prototype.v;
-    nr.prototype.on = nr.prototype.r;
-    nr.prototype.once = nr.prototype.A;
-    nr.prototype.un = nr.prototype.u;
-    nr.prototype.unByKey = nr.prototype.B;
-    sr.prototype.getMap = sr.prototype.e;
-    sr.prototype.setMap = sr.prototype.setMap;
-    sr.prototype.setTarget = sr.prototype.c;
-    sr.prototype.get = sr.prototype.get;
-    sr.prototype.getKeys = sr.prototype.C;
-    sr.prototype.getProperties = sr.prototype.D;
-    sr.prototype.set = sr.prototype.set;
-    sr.prototype.setProperties = sr.prototype.t;
-    sr.prototype.unset = sr.prototype.I;
-    sr.prototype.changed = sr.prototype.k;
-    sr.prototype.getRevision = sr.prototype.v;
-    sr.prototype.on = sr.prototype.r;
-    sr.prototype.once = sr.prototype.A;
-    sr.prototype.un = sr.prototype.u;
-    sr.prototype.unByKey = sr.prototype.B;
-    return OPENLAYERS.ol;
-}));
\ No newline at end of file
diff --git a/resources/assets/js/ol-debug.js b/resources/assets/js/ol-debug.js
deleted file mode 100644
index 4df352d2d286d74d8ec62a77520c70660922696f..0000000000000000000000000000000000000000
--- a/resources/assets/js/ol-debug.js
+++ /dev/null
@@ -1,88474 +0,0 @@
-// OpenLayers 3. See https://openlayers.org/
-// License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
-// Version: v3.19.1
-;(function (root, factory) {
-  if (typeof exports === "object") {
-    module.exports = factory();
-  } else if (typeof define === "function" && define.amd) {
-    define([], factory);
-  } else {
-    root.ol = factory();
-  }
-}(this, function () {
-  var OPENLAYERS = {};
-  var goog = this.goog = {};
-this.CLOSURE_NO_DEPS = true;
-// Copyright 2006 The Closure Library Authors. All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS-IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-/**
- * @fileoverview Bootstrap for the Google JS Library (Closure).
- *
- * In uncompiled mode base.js will write out Closure's deps file, unless the
- * global <code>CLOSURE_NO_DEPS</code> is set to true.  This allows projects to
- * include their own deps file(s) from different locations.
- *
- * @author arv@google.com (Erik Arvidsson)
- *
- * @provideGoog
- */
-
-
-/**
- * @define {boolean} Overridden to true by the compiler when
- *     --process_closure_primitives is specified.
- */
-var COMPILED = false;
-
-
-/**
- * Base namespace for the Closure library.  Checks to see goog is already
- * defined in the current scope before assigning to prevent clobbering if
- * base.js is loaded more than once.
- *
- * @const
- */
-var goog = goog || {};
-
-
-/**
- * Reference to the global context.  In most cases this will be 'window'.
- */
-goog.global = this;
-
-
-/**
- * A hook for overriding the define values in uncompiled mode.
- *
- * In uncompiled mode, {@code CLOSURE_UNCOMPILED_DEFINES} may be defined before
- * loading base.js.  If a key is defined in {@code CLOSURE_UNCOMPILED_DEFINES},
- * {@code goog.define} will use the value instead of the default value.  This
- * allows flags to be overwritten without compilation (this is normally
- * accomplished with the compiler's "define" flag).
- *
- * Example:
- * <pre>
- *   var CLOSURE_UNCOMPILED_DEFINES = {'goog.DEBUG': false};
- * </pre>
- *
- * @type {Object<string, (string|number|boolean)>|undefined}
- */
-goog.global.CLOSURE_UNCOMPILED_DEFINES;
-
-
-/**
- * A hook for overriding the define values in uncompiled or compiled mode,
- * like CLOSURE_UNCOMPILED_DEFINES but effective in compiled code.  In
- * uncompiled code CLOSURE_UNCOMPILED_DEFINES takes precedence.
- *
- * Also unlike CLOSURE_UNCOMPILED_DEFINES the values must be number, boolean or
- * string literals or the compiler will emit an error.
- *
- * While any @define value may be set, only those set with goog.define will be
- * effective for uncompiled code.
- *
- * Example:
- * <pre>
- *   var CLOSURE_DEFINES = {'goog.DEBUG': false} ;
- * </pre>
- *
- * @type {Object<string, (string|number|boolean)>|undefined}
- */
-goog.global.CLOSURE_DEFINES;
-
-
-/**
- * Returns true if the specified value is not undefined.
- * WARNING: Do not use this to test if an object has a property. Use the in
- * operator instead.
- *
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is defined.
- */
-goog.isDef = function(val) {
-  // void 0 always evaluates to undefined and hence we do not need to depend on
-  // the definition of the global variable named 'undefined'.
-  return val !== void 0;
-};
-
-
-/**
- * Builds an object structure for the provided namespace path, ensuring that
- * names that already exist are not overwritten. For example:
- * "a.b.c" -> a = {};a.b={};a.b.c={};
- * Used by goog.provide and goog.exportSymbol.
- * @param {string} name name of the object that this file defines.
- * @param {*=} opt_object the object to expose at the end of the path.
- * @param {Object=} opt_objectToExportTo The object to add the path to; default
- *     is |goog.global|.
- * @private
- */
-goog.exportPath_ = function(name, opt_object, opt_objectToExportTo) {
-  var parts = name.split('.');
-  var cur = opt_objectToExportTo || goog.global;
-
-  // Internet Explorer exhibits strange behavior when throwing errors from
-  // methods externed in this manner.  See the testExportSymbolExceptions in
-  // base_test.html for an example.
-  if (!(parts[0] in cur) && cur.execScript) {
-    cur.execScript('var ' + parts[0]);
-  }
-
-  // Certain browsers cannot parse code in the form for((a in b); c;);
-  // This pattern is produced by the JSCompiler when it collapses the
-  // statement above into the conditional loop below. To prevent this from
-  // happening, use a for-loop and reserve the init logic as below.
-
-  // Parentheses added to eliminate strict JS warning in Firefox.
-  for (var part; parts.length && (part = parts.shift());) {
-    if (!parts.length && goog.isDef(opt_object)) {
-      // last part and we have an object; use it
-      cur[part] = opt_object;
-    } else if (cur[part]) {
-      cur = cur[part];
-    } else {
-      cur = cur[part] = {};
-    }
-  }
-};
-
-
-/**
- * Defines a named value. In uncompiled mode, the value is retrieved from
- * CLOSURE_DEFINES or CLOSURE_UNCOMPILED_DEFINES if the object is defined and
- * has the property specified, and otherwise used the defined defaultValue.
- * When compiled the default can be overridden using the compiler
- * options or the value set in the CLOSURE_DEFINES object.
- *
- * @param {string} name The distinguished name to provide.
- * @param {string|number|boolean} defaultValue
- */
-goog.define = function(name, defaultValue) {
-  var value = defaultValue;
-  if (!COMPILED) {
-    if (goog.global.CLOSURE_UNCOMPILED_DEFINES &&
-        Object.prototype.hasOwnProperty.call(
-            goog.global.CLOSURE_UNCOMPILED_DEFINES, name)) {
-      value = goog.global.CLOSURE_UNCOMPILED_DEFINES[name];
-    } else if (
-        goog.global.CLOSURE_DEFINES &&
-        Object.prototype.hasOwnProperty.call(
-            goog.global.CLOSURE_DEFINES, name)) {
-      value = goog.global.CLOSURE_DEFINES[name];
-    }
-  }
-  goog.exportPath_(name, value);
-};
-
-
-/**
- * @define {boolean} DEBUG is provided as a convenience so that debugging code
- * that should not be included in a production js_binary can be easily stripped
- * by specifying --define goog.DEBUG=false to the JSCompiler. For example, most
- * toString() methods should be declared inside an "if (goog.DEBUG)" conditional
- * because they are generally used for debugging purposes and it is difficult
- * for the JSCompiler to statically determine whether they are used.
- */
-goog.define('goog.DEBUG', true);
-
-
-/**
- * @define {string} LOCALE defines the locale being used for compilation. It is
- * used to select locale specific data to be compiled in js binary. BUILD rule
- * can specify this value by "--define goog.LOCALE=<locale_name>" as JSCompiler
- * option.
- *
- * Take into account that the locale code format is important. You should use
- * the canonical Unicode format with hyphen as a delimiter. Language must be
- * lowercase, Language Script - Capitalized, Region - UPPERCASE.
- * There are few examples: pt-BR, en, en-US, sr-Latin-BO, zh-Hans-CN.
- *
- * See more info about locale codes here:
- * http://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers
- *
- * For language codes you should use values defined by ISO 693-1. See it here
- * http://www.w3.org/WAI/ER/IG/ert/iso639.htm. There is only one exception from
- * this rule: the Hebrew language. For legacy reasons the old code (iw) should
- * be used instead of the new code (he), see http://wiki/Main/IIISynonyms.
- */
-goog.define('goog.LOCALE', 'en');  // default to en
-
-
-/**
- * @define {boolean} Whether this code is running on trusted sites.
- *
- * On untrusted sites, several native functions can be defined or overridden by
- * external libraries like Prototype, Datejs, and JQuery and setting this flag
- * to false forces closure to use its own implementations when possible.
- *
- * If your JavaScript can be loaded by a third party site and you are wary about
- * relying on non-standard implementations, specify
- * "--define goog.TRUSTED_SITE=false" to the JSCompiler.
- */
-goog.define('goog.TRUSTED_SITE', true);
-
-
-/**
- * @define {boolean} Whether a project is expected to be running in strict mode.
- *
- * This define can be used to trigger alternate implementations compatible with
- * running in EcmaScript Strict mode or warn about unavailable functionality.
- * @see https://goo.gl/PudQ4y
- *
- */
-goog.define('goog.STRICT_MODE_COMPATIBLE', false);
-
-
-/**
- * @define {boolean} Whether code that calls {@link goog.setTestOnly} should
- *     be disallowed in the compilation unit.
- */
-goog.define('goog.DISALLOW_TEST_ONLY_CODE', COMPILED && !goog.DEBUG);
-
-
-/**
- * @define {boolean} Whether to use a Chrome app CSP-compliant method for
- *     loading scripts via goog.require. @see appendScriptSrcNode_.
- */
-goog.define('goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING', false);
-
-
-/**
- * Defines a namespace in Closure.
- *
- * A namespace may only be defined once in a codebase. It may be defined using
- * goog.provide() or goog.module().
- *
- * The presence of one or more goog.provide() calls in a file indicates
- * that the file defines the given objects/namespaces.
- * Provided symbols must not be null or undefined.
- *
- * In addition, goog.provide() creates the object stubs for a namespace
- * (for example, goog.provide("goog.foo.bar") will create the object
- * goog.foo.bar if it does not already exist).
- *
- * Build tools also scan for provide/require/module statements
- * to discern dependencies, build dependency files (see deps.js), etc.
- *
- * @see goog.require
- * @see goog.module
- * @param {string} name Namespace provided by this file in the form
- *     "goog.package.part".
- */
-goog.provide = function(name) {
-  if (goog.isInModuleLoader_()) {
-    throw Error('goog.provide can not be used within a goog.module.');
-  }
-  if (!COMPILED) {
-    // Ensure that the same namespace isn't provided twice.
-    // A goog.module/goog.provide maps a goog.require to a specific file
-    if (goog.isProvided_(name)) {
-      throw Error('Namespace "' + name + '" already declared.');
-    }
-  }
-
-  goog.constructNamespace_(name);
-};
-
-
-/**
- * @param {string} name Namespace provided by this file in the form
- *     "goog.package.part".
- * @param {Object=} opt_obj The object to embed in the namespace.
- * @private
- */
-goog.constructNamespace_ = function(name, opt_obj) {
-  if (!COMPILED) {
-    delete goog.implicitNamespaces_[name];
-
-    var namespace = name;
-    while ((namespace = namespace.substring(0, namespace.lastIndexOf('.')))) {
-      if (goog.getObjectByName(namespace)) {
-        break;
-      }
-      goog.implicitNamespaces_[namespace] = true;
-    }
-  }
-
-  goog.exportPath_(name, opt_obj);
-};
-
-
-/**
- * Module identifier validation regexp.
- * Note: This is a conservative check, it is very possible to be more lenient,
- *   the primary exclusion here is "/" and "\" and a leading ".", these
- *   restrictions are intended to leave the door open for using goog.require
- *   with relative file paths rather than module identifiers.
- * @private
- */
-goog.VALID_MODULE_RE_ = /^[a-zA-Z_$][a-zA-Z0-9._$]*$/;
-
-
-/**
- * Defines a module in Closure.
- *
- * Marks that this file must be loaded as a module and claims the namespace.
- *
- * A namespace may only be defined once in a codebase. It may be defined using
- * goog.provide() or goog.module().
- *
- * goog.module() has three requirements:
- * - goog.module may not be used in the same file as goog.provide.
- * - goog.module must be the first statement in the file.
- * - only one goog.module is allowed per file.
- *
- * When a goog.module annotated file is loaded, it is enclosed in
- * a strict function closure. This means that:
- * - any variables declared in a goog.module file are private to the file
- * (not global), though the compiler is expected to inline the module.
- * - The code must obey all the rules of "strict" JavaScript.
- * - the file will be marked as "use strict"
- *
- * NOTE: unlike goog.provide, goog.module does not declare any symbols by
- * itself. If declared symbols are desired, use
- * goog.module.declareLegacyNamespace().
- *
- *
- * See the public goog.module proposal: http://goo.gl/Va1hin
- *
- * @param {string} name Namespace provided by this file in the form
- *     "goog.package.part", is expected but not required.
- */
-goog.module = function(name) {
-  if (!goog.isString(name) || !name ||
-      name.search(goog.VALID_MODULE_RE_) == -1) {
-    throw Error('Invalid module identifier');
-  }
-  if (!goog.isInModuleLoader_()) {
-    throw Error('Module ' + name + ' has been loaded incorrectly.');
-  }
-  if (goog.moduleLoaderState_.moduleName) {
-    throw Error('goog.module may only be called once per module.');
-  }
-
-  // Store the module name for the loader.
-  goog.moduleLoaderState_.moduleName = name;
-  if (!COMPILED) {
-    // Ensure that the same namespace isn't provided twice.
-    // A goog.module/goog.provide maps a goog.require to a specific file
-    if (goog.isProvided_(name)) {
-      throw Error('Namespace "' + name + '" already declared.');
-    }
-    delete goog.implicitNamespaces_[name];
-  }
-};
-
-
-/**
- * @param {string} name The module identifier.
- * @return {?} The module exports for an already loaded module or null.
- *
- * Note: This is not an alternative to goog.require, it does not
- * indicate a hard dependency, instead it is used to indicate
- * an optional dependency or to access the exports of a module
- * that has already been loaded.
- * @suppress {missingProvide}
- */
-goog.module.get = function(name) {
-  return goog.module.getInternal_(name);
-};
-
-
-/**
- * @param {string} name The module identifier.
- * @return {?} The module exports for an already loaded module or null.
- * @private
- */
-goog.module.getInternal_ = function(name) {
-  if (!COMPILED) {
-    if (goog.isProvided_(name)) {
-      // goog.require only return a value with-in goog.module files.
-      return name in goog.loadedModules_ ? goog.loadedModules_[name] :
-                                           goog.getObjectByName(name);
-    } else {
-      return null;
-    }
-  }
-};
-
-
-/**
- * @private {?{moduleName: (string|undefined), declareLegacyNamespace:boolean}}
- */
-goog.moduleLoaderState_ = null;
-
-
-/**
- * @private
- * @return {boolean} Whether a goog.module is currently being initialized.
- */
-goog.isInModuleLoader_ = function() {
-  return goog.moduleLoaderState_ != null;
-};
-
-
-/**
- * Provide the module's exports as a globally accessible object under the
- * module's declared name.  This is intended to ease migration to goog.module
- * for files that have existing usages.
- * @suppress {missingProvide}
- */
-goog.module.declareLegacyNamespace = function() {
-  if (!COMPILED && !goog.isInModuleLoader_()) {
-    throw new Error(
-        'goog.module.declareLegacyNamespace must be called from ' +
-        'within a goog.module');
-  }
-  if (!COMPILED && !goog.moduleLoaderState_.moduleName) {
-    throw Error(
-        'goog.module must be called prior to ' +
-        'goog.module.declareLegacyNamespace.');
-  }
-  goog.moduleLoaderState_.declareLegacyNamespace = true;
-};
-
-
-/**
- * Marks that the current file should only be used for testing, and never for
- * live code in production.
- *
- * In the case of unit tests, the message may optionally be an exact namespace
- * for the test (e.g. 'goog.stringTest'). The linter will then ignore the extra
- * provide (if not explicitly defined in the code).
- *
- * @param {string=} opt_message Optional message to add to the error that's
- *     raised when used in production code.
- */
-goog.setTestOnly = function(opt_message) {
-  if (goog.DISALLOW_TEST_ONLY_CODE) {
-    opt_message = opt_message || '';
-    throw Error(
-        'Importing test-only code into non-debug environment' +
-        (opt_message ? ': ' + opt_message : '.'));
-  }
-};
-
-
-/**
- * Forward declares a symbol. This is an indication to the compiler that the
- * symbol may be used in the source yet is not required and may not be provided
- * in compilation.
- *
- * The most common usage of forward declaration is code that takes a type as a
- * function parameter but does not need to require it. By forward declaring
- * instead of requiring, no hard dependency is made, and (if not required
- * elsewhere) the namespace may never be required and thus, not be pulled
- * into the JavaScript binary. If it is required elsewhere, it will be type
- * checked as normal.
- *
- *
- * @param {string} name The namespace to forward declare in the form of
- *     "goog.package.part".
- */
-goog.forwardDeclare = function(name) {};
-
-
-/**
- * Forward declare type information. Used to assign types to goog.global
- * referenced object that would otherwise result in unknown type references
- * and thus block property disambiguation.
- */
-goog.forwardDeclare('Document');
-goog.forwardDeclare('HTMLScriptElement');
-goog.forwardDeclare('XMLHttpRequest');
-
-
-if (!COMPILED) {
-  /**
-   * Check if the given name has been goog.provided. This will return false for
-   * names that are available only as implicit namespaces.
-   * @param {string} name name of the object to look for.
-   * @return {boolean} Whether the name has been provided.
-   * @private
-   */
-  goog.isProvided_ = function(name) {
-    return (name in goog.loadedModules_) ||
-        (!goog.implicitNamespaces_[name] &&
-         goog.isDefAndNotNull(goog.getObjectByName(name)));
-  };
-
-  /**
-   * Namespaces implicitly defined by goog.provide. For example,
-   * goog.provide('goog.events.Event') implicitly declares that 'goog' and
-   * 'goog.events' must be namespaces.
-   *
-   * @type {!Object<string, (boolean|undefined)>}
-   * @private
-   */
-  goog.implicitNamespaces_ = {'goog.module': true};
-
-  // NOTE: We add goog.module as an implicit namespace as goog.module is defined
-  // here and because the existing module package has not been moved yet out of
-  // the goog.module namespace. This satisifies both the debug loader and
-  // ahead-of-time dependency management.
-}
-
-
-/**
- * Returns an object based on its fully qualified external name.  The object
- * is not found if null or undefined.  If you are using a compilation pass that
- * renames property names beware that using this function will not find renamed
- * properties.
- *
- * @param {string} name The fully qualified name.
- * @param {Object=} opt_obj The object within which to look; default is
- *     |goog.global|.
- * @return {?} The value (object or primitive) or, if not found, null.
- */
-goog.getObjectByName = function(name, opt_obj) {
-  var parts = name.split('.');
-  var cur = opt_obj || goog.global;
-  for (var part; part = parts.shift();) {
-    if (goog.isDefAndNotNull(cur[part])) {
-      cur = cur[part];
-    } else {
-      return null;
-    }
-  }
-  return cur;
-};
-
-
-/**
- * Globalizes a whole namespace, such as goog or goog.lang.
- *
- * @param {!Object} obj The namespace to globalize.
- * @param {Object=} opt_global The object to add the properties to.
- * @deprecated Properties may be explicitly exported to the global scope, but
- *     this should no longer be done in bulk.
- */
-goog.globalize = function(obj, opt_global) {
-  var global = opt_global || goog.global;
-  for (var x in obj) {
-    global[x] = obj[x];
-  }
-};
-
-
-/**
- * Adds a dependency from a file to the files it requires.
- * @param {string} relPath The path to the js file.
- * @param {!Array<string>} provides An array of strings with
- *     the names of the objects this file provides.
- * @param {!Array<string>} requires An array of strings with
- *     the names of the objects this file requires.
- * @param {boolean|!Object<string>=} opt_loadFlags Parameters indicating
- *     how the file must be loaded.  The boolean 'true' is equivalent
- *     to {'module': 'goog'} for backwards-compatibility.  Valid properties
- *     and values include {'module': 'goog'} and {'lang': 'es6'}.
- */
-goog.addDependency = function(relPath, provides, requires, opt_loadFlags) {
-  if (goog.DEPENDENCIES_ENABLED) {
-    var provide, require;
-    var path = relPath.replace(/\\/g, '/');
-    var deps = goog.dependencies_;
-    if (!opt_loadFlags || typeof opt_loadFlags === 'boolean') {
-      opt_loadFlags = opt_loadFlags ? {'module': 'goog'} : {};
-    }
-    for (var i = 0; provide = provides[i]; i++) {
-      deps.nameToPath[provide] = path;
-      deps.loadFlags[path] = opt_loadFlags;
-    }
-    for (var j = 0; require = requires[j]; j++) {
-      if (!(path in deps.requires)) {
-        deps.requires[path] = {};
-      }
-      deps.requires[path][require] = true;
-    }
-  }
-};
-
-
-
-
-// NOTE(nnaze): The debug DOM loader was included in base.js as an original way
-// to do "debug-mode" development.  The dependency system can sometimes be
-// confusing, as can the debug DOM loader's asynchronous nature.
-//
-// With the DOM loader, a call to goog.require() is not blocking -- the script
-// will not load until some point after the current script.  If a namespace is
-// needed at runtime, it needs to be defined in a previous script, or loaded via
-// require() with its registered dependencies.
-//
-// User-defined namespaces may need their own deps file. For a reference on
-// creating a deps file, see:
-// Externally: https://developers.google.com/closure/library/docs/depswriter
-//
-// Because of legacy clients, the DOM loader can't be easily removed from
-// base.js.  Work is being done to make it disableable or replaceable for
-// different environments (DOM-less JavaScript interpreters like Rhino or V8,
-// for example). See bootstrap/ for more information.
-
-
-/**
- * @define {boolean} Whether to enable the debug loader.
- *
- * If enabled, a call to goog.require() will attempt to load the namespace by
- * appending a script tag to the DOM (if the namespace has been registered).
- *
- * If disabled, goog.require() will simply assert that the namespace has been
- * provided (and depend on the fact that some outside tool correctly ordered
- * the script).
- */
-goog.define('goog.ENABLE_DEBUG_LOADER', true);
-
-
-/**
- * @param {string} msg
- * @private
- */
-goog.logToConsole_ = function(msg) {
-  if (goog.global.console) {
-    goog.global.console['error'](msg);
-  }
-};
-
-
-/**
- * Implements a system for the dynamic resolution of dependencies that works in
- * parallel with the BUILD system. Note that all calls to goog.require will be
- * stripped by the JSCompiler when the --process_closure_primitives option is
- * used.
- * @see goog.provide
- * @param {string} name Namespace to include (as was given in goog.provide()) in
- *     the form "goog.package.part".
- * @return {?} If called within a goog.module file, the associated namespace or
- *     module otherwise null.
- */
-goog.require = function(name) {
-  // If the object already exists we do not need do do anything.
-  if (!COMPILED) {
-    if (goog.ENABLE_DEBUG_LOADER && goog.IS_OLD_IE_) {
-      goog.maybeProcessDeferredDep_(name);
-    }
-
-    if (goog.isProvided_(name)) {
-      if (goog.isInModuleLoader_()) {
-        return goog.module.getInternal_(name);
-      } else {
-        return null;
-      }
-    }
-
-    if (goog.ENABLE_DEBUG_LOADER) {
-      var path = goog.getPathFromDeps_(name);
-      if (path) {
-        goog.writeScripts_(path);
-        return null;
-      }
-    }
-
-    var errorMessage = 'goog.require could not find: ' + name;
-    goog.logToConsole_(errorMessage);
-
-    throw Error(errorMessage);
-  }
-};
-
-
-/**
- * Path for included scripts.
- * @type {string}
- */
-goog.basePath = '';
-
-
-/**
- * A hook for overriding the base path.
- * @type {string|undefined}
- */
-goog.global.CLOSURE_BASE_PATH;
-
-
-/**
- * Whether to write out Closure's deps file. By default, the deps are written.
- * @type {boolean|undefined}
- */
-goog.global.CLOSURE_NO_DEPS;
-
-
-/**
- * A function to import a single script. This is meant to be overridden when
- * Closure is being run in non-HTML contexts, such as web workers. It's defined
- * in the global scope so that it can be set before base.js is loaded, which
- * allows deps.js to be imported properly.
- *
- * The function is passed the script source, which is a relative URI. It should
- * return true if the script was imported, false otherwise.
- * @type {(function(string): boolean)|undefined}
- */
-goog.global.CLOSURE_IMPORT_SCRIPT;
-
-
-/**
- * Null function used for default values of callbacks, etc.
- * @return {void} Nothing.
- */
-goog.nullFunction = function() {};
-
-
-/**
- * When defining a class Foo with an abstract method bar(), you can do:
- * Foo.prototype.bar = goog.abstractMethod
- *
- * Now if a subclass of Foo fails to override bar(), an error will be thrown
- * when bar() is invoked.
- *
- * Note: This does not take the name of the function to override as an argument
- * because that would make it more difficult to obfuscate our JavaScript code.
- *
- * @type {!Function}
- * @throws {Error} when invoked to indicate the method should be overridden.
- */
-goog.abstractMethod = function() {
-  throw Error('unimplemented abstract method');
-};
-
-
-/**
- * Adds a {@code getInstance} static method that always returns the same
- * instance object.
- * @param {!Function} ctor The constructor for the class to add the static
- *     method to.
- */
-goog.addSingletonGetter = function(ctor) {
-  ctor.getInstance = function() {
-    if (ctor.instance_) {
-      return ctor.instance_;
-    }
-    if (goog.DEBUG) {
-      // NOTE: JSCompiler can't optimize away Array#push.
-      goog.instantiatedSingletons_[goog.instantiatedSingletons_.length] = ctor;
-    }
-    return ctor.instance_ = new ctor;
-  };
-};
-
-
-/**
- * All singleton classes that have been instantiated, for testing. Don't read
- * it directly, use the {@code goog.testing.singleton} module. The compiler
- * removes this variable if unused.
- * @type {!Array<!Function>}
- * @private
- */
-goog.instantiatedSingletons_ = [];
-
-
-/**
- * @define {boolean} Whether to load goog.modules using {@code eval} when using
- * the debug loader.  This provides a better debugging experience as the
- * source is unmodified and can be edited using Chrome Workspaces or similar.
- * However in some environments the use of {@code eval} is banned
- * so we provide an alternative.
- */
-goog.define('goog.LOAD_MODULE_USING_EVAL', true);
-
-
-/**
- * @define {boolean} Whether the exports of goog.modules should be sealed when
- * possible.
- */
-goog.define('goog.SEAL_MODULE_EXPORTS', goog.DEBUG);
-
-
-/**
- * The registry of initialized modules:
- * the module identifier to module exports map.
- * @private @const {!Object<string, ?>}
- */
-goog.loadedModules_ = {};
-
-
-/**
- * True if goog.dependencies_ is available.
- * @const {boolean}
- */
-goog.DEPENDENCIES_ENABLED = !COMPILED && goog.ENABLE_DEBUG_LOADER;
-
-
-/**
- * @define {string} How to decide whether to transpile.  Valid values
- * are 'always', 'never', and 'detect'.  The default ('detect') is to
- * use feature detection to determine which language levels need
- * transpilation.
- */
-// NOTE(user): we could expand this to accept a language level to bypass
-// detection: e.g. goog.TRANSPILE == 'es5' would transpile ES6 files but
-// would leave ES3 and ES5 files alone.
-goog.define('goog.TRANSPILE', 'detect');
-
-
-/**
- * @define {string} Path to the transpiler.  Executing the script at this
- * path (relative to base.js) should define a function $jscomp.transpile.
- */
-goog.define('goog.TRANSPILER', 'transpile.js');
-
-
-if (goog.DEPENDENCIES_ENABLED) {
-  /**
-   * This object is used to keep track of dependencies and other data that is
-   * used for loading scripts.
-   * @private
-   * @type {{
-   *   loadFlags: !Object<string, !Object<string, string>>,
-   *   nameToPath: !Object<string, string>,
-   *   requires: !Object<string, !Object<string, boolean>>,
-   *   visited: !Object<string, boolean>,
-   *   written: !Object<string, boolean>,
-   *   deferred: !Object<string, string>
-   * }}
-   */
-  goog.dependencies_ = {
-    loadFlags: {},  // 1 to 1
-
-    nameToPath: {},  // 1 to 1
-
-    requires: {},  // 1 to many
-
-    // Used when resolving dependencies to prevent us from visiting file twice.
-    visited: {},
-
-    written: {},  // Used to keep track of script files we have written.
-
-    deferred: {}  // Used to track deferred module evaluations in old IEs
-  };
-
-
-  /**
-   * Tries to detect whether is in the context of an HTML document.
-   * @return {boolean} True if it looks like HTML document.
-   * @private
-   */
-  goog.inHtmlDocument_ = function() {
-    /** @type {Document} */
-    var doc = goog.global.document;
-    return doc != null && 'write' in doc;  // XULDocument misses write.
-  };
-
-
-  /**
-   * Tries to detect the base path of base.js script that bootstraps Closure.
-   * @private
-   */
-  goog.findBasePath_ = function() {
-    if (goog.isDef(goog.global.CLOSURE_BASE_PATH)) {
-      goog.basePath = goog.global.CLOSURE_BASE_PATH;
-      return;
-    } else if (!goog.inHtmlDocument_()) {
-      return;
-    }
-    /** @type {Document} */
-    var doc = goog.global.document;
-    var scripts = doc.getElementsByTagName('SCRIPT');
-    // Search backwards since the current script is in almost all cases the one
-    // that has base.js.
-    for (var i = scripts.length - 1; i >= 0; --i) {
-      var script = /** @type {!HTMLScriptElement} */ (scripts[i]);
-      var src = script.src;
-      var qmark = src.lastIndexOf('?');
-      var l = qmark == -1 ? src.length : qmark;
-      if (src.substr(l - 7, 7) == 'base.js') {
-        goog.basePath = src.substr(0, l - 7);
-        return;
-      }
-    }
-  };
-
-
-  /**
-   * Imports a script if, and only if, that script hasn't already been imported.
-   * (Must be called at execution time)
-   * @param {string} src Script source.
-   * @param {string=} opt_sourceText The optionally source text to evaluate
-   * @private
-   */
-  goog.importScript_ = function(src, opt_sourceText) {
-    var importScript =
-        goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;
-    if (importScript(src, opt_sourceText)) {
-      goog.dependencies_.written[src] = true;
-    }
-  };
-
-
-  /**
-   * Whether the browser is IE9 or earlier, which needs special handling
-   * for deferred modules.
-   * @const @private {boolean}
-   */
-  goog.IS_OLD_IE_ =
-      !!(!goog.global.atob && goog.global.document && goog.global.document.all);
-
-
-  /**
-   * Given a URL initiate retrieval and execution of a script that needs
-   * pre-processing.
-   * @param {string} src Script source URL.
-   * @param {boolean} isModule Whether this is a goog.module.
-   * @param {boolean} needsTranspile Whether this source needs transpilation.
-   * @private
-   */
-  goog.importProcessedScript_ = function(src, isModule, needsTranspile) {
-    // In an attempt to keep browsers from timing out loading scripts using
-    // synchronous XHRs, put each load in its own script block.
-    var bootstrap = 'goog.retrieveAndExec_("' + src + '", ' + isModule + ', ' +
-        needsTranspile + ');';
-
-    goog.importScript_('', bootstrap);
-  };
-
-
-  /** @private {!Array<string>} */
-  goog.queuedModules_ = [];
-
-
-  /**
-   * Return an appropriate module text. Suitable to insert into
-   * a script tag (that is unescaped).
-   * @param {string} srcUrl
-   * @param {string} scriptText
-   * @return {string}
-   * @private
-   */
-  goog.wrapModule_ = function(srcUrl, scriptText) {
-    if (!goog.LOAD_MODULE_USING_EVAL || !goog.isDef(goog.global.JSON)) {
-      return '' +
-          'goog.loadModule(function(exports) {' +
-          '"use strict";' + scriptText +
-          '\n' +  // terminate any trailing single line comment.
-          ';return exports' +
-          '});' +
-          '\n//# sourceURL=' + srcUrl + '\n';
-    } else {
-      return '' +
-          'goog.loadModule(' +
-          goog.global.JSON.stringify(
-              scriptText + '\n//# sourceURL=' + srcUrl + '\n') +
-          ');';
-    }
-  };
-
-  // On IE9 and earlier, it is necessary to handle
-  // deferred module loads. In later browsers, the
-  // code to be evaluated is simply inserted as a script
-  // block in the correct order. To eval deferred
-  // code at the right time, we piggy back on goog.require to call
-  // goog.maybeProcessDeferredDep_.
-  //
-  // The goog.requires are used both to bootstrap
-  // the loading process (when no deps are available) and
-  // declare that they should be available.
-  //
-  // Here we eval the sources, if all the deps are available
-  // either already eval'd or goog.require'd.  This will
-  // be the case when all the dependencies have already
-  // been loaded, and the dependent module is loaded.
-  //
-  // But this alone isn't sufficient because it is also
-  // necessary to handle the case where there is no root
-  // that is not deferred.  For that there we register for an event
-  // and trigger goog.loadQueuedModules_ handle any remaining deferred
-  // evaluations.
-
-  /**
-   * Handle any remaining deferred goog.module evals.
-   * @private
-   */
-  goog.loadQueuedModules_ = function() {
-    var count = goog.queuedModules_.length;
-    if (count > 0) {
-      var queue = goog.queuedModules_;
-      goog.queuedModules_ = [];
-      for (var i = 0; i < count; i++) {
-        var path = queue[i];
-        goog.maybeProcessDeferredPath_(path);
-      }
-    }
-  };
-
-
-  /**
-   * Eval the named module if its dependencies are
-   * available.
-   * @param {string} name The module to load.
-   * @private
-   */
-  goog.maybeProcessDeferredDep_ = function(name) {
-    if (goog.isDeferredModule_(name) && goog.allDepsAreAvailable_(name)) {
-      var path = goog.getPathFromDeps_(name);
-      goog.maybeProcessDeferredPath_(goog.basePath + path);
-    }
-  };
-
-  /**
-   * @param {string} name The module to check.
-   * @return {boolean} Whether the name represents a
-   *     module whose evaluation has been deferred.
-   * @private
-   */
-  goog.isDeferredModule_ = function(name) {
-    var path = goog.getPathFromDeps_(name);
-    var loadFlags = path && goog.dependencies_.loadFlags[path] || {};
-    if (path && (loadFlags['module'] == 'goog' ||
-                 goog.needsTranspile_(loadFlags['lang']))) {
-      var abspath = goog.basePath + path;
-      return (abspath) in goog.dependencies_.deferred;
-    }
-    return false;
-  };
-
-  /**
-   * @param {string} name The module to check.
-   * @return {boolean} Whether the name represents a
-   *     module whose declared dependencies have all been loaded
-   *     (eval'd or a deferred module load)
-   * @private
-   */
-  goog.allDepsAreAvailable_ = function(name) {
-    var path = goog.getPathFromDeps_(name);
-    if (path && (path in goog.dependencies_.requires)) {
-      for (var requireName in goog.dependencies_.requires[path]) {
-        if (!goog.isProvided_(requireName) &&
-            !goog.isDeferredModule_(requireName)) {
-          return false;
-        }
-      }
-    }
-    return true;
-  };
-
-
-  /**
-   * @param {string} abspath
-   * @private
-   */
-  goog.maybeProcessDeferredPath_ = function(abspath) {
-    if (abspath in goog.dependencies_.deferred) {
-      var src = goog.dependencies_.deferred[abspath];
-      delete goog.dependencies_.deferred[abspath];
-      goog.globalEval(src);
-    }
-  };
-
-
-  /**
-   * Load a goog.module from the provided URL.  This is not a general purpose
-   * code loader and does not support late loading code, that is it should only
-   * be used during page load. This method exists to support unit tests and
-   * "debug" loaders that would otherwise have inserted script tags. Under the
-   * hood this needs to use a synchronous XHR and is not recommeneded for
-   * production code.
-   *
-   * The module's goog.requires must have already been satisified; an exception
-   * will be thrown if this is not the case. This assumption is that no
-   * "deps.js" file exists, so there is no way to discover and locate the
-   * module-to-be-loaded's dependencies and no attempt is made to do so.
-   *
-   * There should only be one attempt to load a module.  If
-   * "goog.loadModuleFromUrl" is called for an already loaded module, an
-   * exception will be throw.
-   *
-   * @param {string} url The URL from which to attempt to load the goog.module.
-   */
-  goog.loadModuleFromUrl = function(url) {
-    // Because this executes synchronously, we don't need to do any additional
-    // bookkeeping. When "goog.loadModule" the namespace will be marked as
-    // having been provided which is sufficient.
-    goog.retrieveAndExec_(url, true, false);
-  };
-
-
-  /**
-   * Writes a new script pointing to {@code src} directly into the DOM.
-   *
-   * NOTE: This method is not CSP-compliant. @see goog.appendScriptSrcNode_ for
-   * the fallback mechanism.
-   *
-   * @param {string} src The script URL.
-   * @private
-   */
-  goog.writeScriptSrcNode_ = function(src) {
-    goog.global.document.write(
-        '<script type="text/javascript" src="' + src + '"></' +
-        'script>');
-  };
-
-
-  /**
-   * Appends a new script node to the DOM using a CSP-compliant mechanism. This
-   * method exists as a fallback for document.write (which is not allowed in a
-   * strict CSP context, e.g., Chrome apps).
-   *
-   * NOTE: This method is not analogous to using document.write to insert a
-   * <script> tag; specifically, the user agent will execute a script added by
-   * document.write immediately after the current script block finishes
-   * executing, whereas the DOM-appended script node will not be executed until
-   * the entire document is parsed and executed. That is to say, this script is
-   * added to the end of the script execution queue.
-   *
-   * The page must not attempt to call goog.required entities until after the
-   * document has loaded, e.g., in or after the window.onload callback.
-   *
-   * @param {string} src The script URL.
-   * @private
-   */
-  goog.appendScriptSrcNode_ = function(src) {
-    /** @type {Document} */
-    var doc = goog.global.document;
-    var scriptEl =
-        /** @type {HTMLScriptElement} */ (doc.createElement('script'));
-    scriptEl.type = 'text/javascript';
-    scriptEl.src = src;
-    scriptEl.defer = false;
-    scriptEl.async = false;
-    doc.head.appendChild(scriptEl);
-  };
-
-
-  /**
-   * The default implementation of the import function. Writes a script tag to
-   * import the script.
-   *
-   * @param {string} src The script url.
-   * @param {string=} opt_sourceText The optionally source text to evaluate
-   * @return {boolean} True if the script was imported, false otherwise.
-   * @private
-   */
-  goog.writeScriptTag_ = function(src, opt_sourceText) {
-    if (goog.inHtmlDocument_()) {
-      /** @type {!HTMLDocument} */
-      var doc = goog.global.document;
-
-      // If the user tries to require a new symbol after document load,
-      // something has gone terribly wrong. Doing a document.write would
-      // wipe out the page. This does not apply to the CSP-compliant method
-      // of writing script tags.
-      if (!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING &&
-          doc.readyState == 'complete') {
-        // Certain test frameworks load base.js multiple times, which tries
-        // to write deps.js each time. If that happens, just fail silently.
-        // These frameworks wipe the page between each load of base.js, so this
-        // is OK.
-        var isDeps = /\bdeps.js$/.test(src);
-        if (isDeps) {
-          return false;
-        } else {
-          throw Error('Cannot write "' + src + '" after document load');
-        }
-      }
-
-      if (opt_sourceText === undefined) {
-        if (!goog.IS_OLD_IE_) {
-          if (goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING) {
-            goog.appendScriptSrcNode_(src);
-          } else {
-            goog.writeScriptSrcNode_(src);
-          }
-        } else {
-          var state = " onreadystatechange='goog.onScriptLoad_(this, " +
-              ++goog.lastNonModuleScriptIndex_ + ")' ";
-          doc.write(
-              '<script type="text/javascript" src="' + src + '"' + state +
-              '></' +
-              'script>');
-        }
-      } else {
-        doc.write(
-            '<script type="text/javascript">' + opt_sourceText + '</' +
-            'script>');
-      }
-      return true;
-    } else {
-      return false;
-    }
-  };
-
-
-  /**
-   * Determines whether the given language needs to be transpiled.
-   * @param {string} lang
-   * @return {boolean}
-   * @private
-   */
-  goog.needsTranspile_ = function(lang) {
-    if (goog.TRANSPILE == 'always') {
-      return true;
-    } else if (goog.TRANSPILE == 'never') {
-      return false;
-    } else if (!goog.transpiledLanguages_) {
-      goog.transpiledLanguages_ = {'es5': true, 'es6': true, 'es6-impl': true};
-      /** @preserveTry */
-      try {
-        // Perform some quick conformance checks, to distinguish
-        // between browsers that support es5, es6-impl, or es6.
-
-        // Identify ES3-only browsers by their incorrect treatment of commas.
-        goog.transpiledLanguages_['es5'] = eval('[1,].length!=1');
-
-        // As browsers mature, features will be moved from the full test
-        // into the impl test.  This must happen before the corresponding
-        // features are changed in the Closure Compiler's FeatureSet object.
-
-        // Test 1: es6-impl [FF49, Edge 13, Chrome 49]
-        //   (a) let/const keyword, (b) class expressions, (c) Map object,
-        //   (d) iterable arguments, (e) spread operator
-        var es6implTest =
-            'let a={};const X=class{constructor(){}x(z){return new Map([' +
-            '...arguments]).get(z[0])==3}};return new X().x([a,3])';
-
-        // Test 2: es6 [FF50 (?), Edge 14 (?), Chrome 50]
-        //   (a) default params (specifically shadowing locals),
-        //   (b) destructuring, (c) block-scoped functions,
-        //   (d) for-of (const), (e) new.target/Reflect.construct
-        var es6fullTest =
-            'class X{constructor(){if(new.target!=String)throw 1;this.x=42}}' +
-            'let q=Reflect.construct(X,[],String);if(q.x!=42||!(q instanceof ' +
-            'String))throw 1;for(const a of[2,3]){if(a==2)continue;function ' +
-            'f(z={a}){let a=0;return z.a}{function f(){return 0;}}return f()' +
-            '==3}';
-
-        if (eval('(()=>{"use strict";' + es6implTest + '})()')) {
-          goog.transpiledLanguages_['es6-impl'] = false;
-        }
-        if (eval('(()=>{"use strict";' + es6fullTest + '})()')) {
-          goog.transpiledLanguages_['es6'] = false;
-        }
-      } catch (err) {
-      }
-    }
-    return !!goog.transpiledLanguages_[lang];
-  };
-
-
-  /** @private {?Object<string, boolean>} */
-  goog.transpiledLanguages_ = null;
-
-
-  /** @private {number} */
-  goog.lastNonModuleScriptIndex_ = 0;
-
-
-  /**
-   * A readystatechange handler for legacy IE
-   * @param {!HTMLScriptElement} script
-   * @param {number} scriptIndex
-   * @return {boolean}
-   * @private
-   */
-  goog.onScriptLoad_ = function(script, scriptIndex) {
-    // for now load the modules when we reach the last script,
-    // later allow more inter-mingling.
-    if (script.readyState == 'complete' &&
-        goog.lastNonModuleScriptIndex_ == scriptIndex) {
-      goog.loadQueuedModules_();
-    }
-    return true;
-  };
-
-  /**
-   * Resolves dependencies based on the dependencies added using addDependency
-   * and calls importScript_ in the correct order.
-   * @param {string} pathToLoad The path from which to start discovering
-   *     dependencies.
-   * @private
-   */
-  goog.writeScripts_ = function(pathToLoad) {
-    /** @type {!Array<string>} The scripts we need to write this time. */
-    var scripts = [];
-    var seenScript = {};
-    var deps = goog.dependencies_;
-
-    /** @param {string} path */
-    function visitNode(path) {
-      if (path in deps.written) {
-        return;
-      }
-
-      // We have already visited this one. We can get here if we have cyclic
-      // dependencies.
-      if (path in deps.visited) {
-        return;
-      }
-
-      deps.visited[path] = true;
-
-      if (path in deps.requires) {
-        for (var requireName in deps.requires[path]) {
-          // If the required name is defined, we assume that it was already
-          // bootstrapped by other means.
-          if (!goog.isProvided_(requireName)) {
-            if (requireName in deps.nameToPath) {
-              visitNode(deps.nameToPath[requireName]);
-            } else {
-              throw Error('Undefined nameToPath for ' + requireName);
-            }
-          }
-        }
-      }
-
-      if (!(path in seenScript)) {
-        seenScript[path] = true;
-        scripts.push(path);
-      }
-    }
-
-    visitNode(pathToLoad);
-
-    // record that we are going to load all these scripts.
-    for (var i = 0; i < scripts.length; i++) {
-      var path = scripts[i];
-      goog.dependencies_.written[path] = true;
-    }
-
-    // If a module is loaded synchronously then we need to
-    // clear the current inModuleLoader value, and restore it when we are
-    // done loading the current "requires".
-    var moduleState = goog.moduleLoaderState_;
-    goog.moduleLoaderState_ = null;
-
-    for (var i = 0; i < scripts.length; i++) {
-      var path = scripts[i];
-      if (path) {
-        var loadFlags = deps.loadFlags[path] || {};
-        var needsTranspile = goog.needsTranspile_(loadFlags['lang']);
-        if (loadFlags['module'] == 'goog' || needsTranspile) {
-          goog.importProcessedScript_(
-              goog.basePath + path, loadFlags['module'] == 'goog',
-              needsTranspile);
-        } else {
-          goog.importScript_(goog.basePath + path);
-        }
-      } else {
-        goog.moduleLoaderState_ = moduleState;
-        throw Error('Undefined script input');
-      }
-    }
-
-    // restore the current "module loading state"
-    goog.moduleLoaderState_ = moduleState;
-  };
-
-
-  /**
-   * Looks at the dependency rules and tries to determine the script file that
-   * fulfills a particular rule.
-   * @param {string} rule In the form goog.namespace.Class or project.script.
-   * @return {?string} Url corresponding to the rule, or null.
-   * @private
-   */
-  goog.getPathFromDeps_ = function(rule) {
-    if (rule in goog.dependencies_.nameToPath) {
-      return goog.dependencies_.nameToPath[rule];
-    } else {
-      return null;
-    }
-  };
-
-  goog.findBasePath_();
-
-  // Allow projects to manage the deps files themselves.
-  if (!goog.global.CLOSURE_NO_DEPS) {
-    goog.importScript_(goog.basePath + 'deps.js');
-  }
-}
-
-
-/**
- * @param {function(?):?|string} moduleDef The module definition.
- */
-goog.loadModule = function(moduleDef) {
-  // NOTE: we allow function definitions to be either in the from
-  // of a string to eval (which keeps the original source intact) or
-  // in a eval forbidden environment (CSP) we allow a function definition
-  // which in its body must call {@code goog.module}, and return the exports
-  // of the module.
-  var previousState = goog.moduleLoaderState_;
-  try {
-    goog.moduleLoaderState_ = {
-      moduleName: undefined,
-      declareLegacyNamespace: false
-    };
-    var exports;
-    if (goog.isFunction(moduleDef)) {
-      exports = moduleDef.call(undefined, {});
-    } else if (goog.isString(moduleDef)) {
-      exports = goog.loadModuleFromSource_.call(undefined, moduleDef);
-    } else {
-      throw Error('Invalid module definition');
-    }
-
-    var moduleName = goog.moduleLoaderState_.moduleName;
-    if (!goog.isString(moduleName) || !moduleName) {
-      throw Error('Invalid module name \"' + moduleName + '\"');
-    }
-
-    // Don't seal legacy namespaces as they may be uses as a parent of
-    // another namespace
-    if (goog.moduleLoaderState_.declareLegacyNamespace) {
-      goog.constructNamespace_(moduleName, exports);
-    } else if (goog.SEAL_MODULE_EXPORTS && Object.seal) {
-      Object.seal(exports);
-    }
-
-    goog.loadedModules_[moduleName] = exports;
-  } finally {
-    goog.moduleLoaderState_ = previousState;
-  }
-};
-
-
-/**
- * @private @const {function(string):?}
- *
- * The new type inference warns because this function has no formal
- * parameters, but its jsdoc says that it takes one argument.
- * (The argument is used via arguments[0], but NTI does not detect this.)
- * @suppress {newCheckTypes}
- */
-goog.loadModuleFromSource_ = function() {
-  // NOTE: we avoid declaring parameters or local variables here to avoid
-  // masking globals or leaking values into the module definition.
-  'use strict';
-  var exports = {};
-  eval(arguments[0]);
-  return exports;
-};
-
-
-/**
- * Normalize a file path by removing redundant ".." and extraneous "." file
- * path components.
- * @param {string} path
- * @return {string}
- * @private
- */
-goog.normalizePath_ = function(path) {
-  var components = path.split('/');
-  var i = 0;
-  while (i < components.length) {
-    if (components[i] == '.') {
-      components.splice(i, 1);
-    } else if (
-        i && components[i] == '..' && components[i - 1] &&
-        components[i - 1] != '..') {
-      components.splice(--i, 2);
-    } else {
-      i++;
-    }
-  }
-  return components.join('/');
-};
-
-
-/**
- * Loads file by synchronous XHR. Should not be used in production environments.
- * @param {string} src Source URL.
- * @return {?string} File contents, or null if load failed.
- * @private
- */
-goog.loadFileSync_ = function(src) {
-  if (goog.global.CLOSURE_LOAD_FILE_SYNC) {
-    return goog.global.CLOSURE_LOAD_FILE_SYNC(src);
-  } else {
-    try {
-      /** @type {XMLHttpRequest} */
-      var xhr = new goog.global['XMLHttpRequest']();
-      xhr.open('get', src, false);
-      xhr.send();
-      // NOTE: Successful http: requests have a status of 200, but successful
-      // file: requests may have a status of zero.  Any other status, or a
-      // thrown exception (particularly in case of file: requests) indicates
-      // some sort of error, which we treat as a missing or unavailable file.
-      return xhr.status == 0 || xhr.status == 200 ? xhr.responseText : null;
-    } catch (err) {
-      // No need to rethrow or log, since errors should show up on their own.
-      return null;
-    }
-  }
-};
-
-
-/**
- * Retrieve and execute a script that needs some sort of wrapping.
- * @param {string} src Script source URL.
- * @param {boolean} isModule Whether to load as a module.
- * @param {boolean} needsTranspile Whether to transpile down to ES3.
- * @private
- */
-goog.retrieveAndExec_ = function(src, isModule, needsTranspile) {
-  if (!COMPILED) {
-    // The full but non-canonicalized URL for later use.
-    var originalPath = src;
-    // Canonicalize the path, removing any /./ or /../ since Chrome's debugging
-    // console doesn't auto-canonicalize XHR loads as it does <script> srcs.
-    src = goog.normalizePath_(src);
-
-    var importScript =
-        goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;
-
-    var scriptText = goog.loadFileSync_(src);
-    if (scriptText == null) {
-      throw new Error('Load of "' + src + '" failed');
-    }
-
-    if (needsTranspile) {
-      scriptText = goog.transpile_.call(goog.global, scriptText, src);
-    }
-
-    if (isModule) {
-      scriptText = goog.wrapModule_(src, scriptText);
-    } else {
-      scriptText += '\n//# sourceURL=' + src;
-    }
-    var isOldIE = goog.IS_OLD_IE_;
-    if (isOldIE) {
-      goog.dependencies_.deferred[originalPath] = scriptText;
-      goog.queuedModules_.push(originalPath);
-    } else {
-      importScript(src, scriptText);
-    }
-  }
-};
-
-
-/**
- * Lazily retrieves the transpiler and applies it to the source.
- * @param {string} code JS code.
- * @param {string} path Path to the code.
- * @return {string} The transpiled code.
- * @private
- */
-goog.transpile_ = function(code, path) {
-  var jscomp = goog.global['$jscomp'];
-  if (!jscomp) {
-    goog.global['$jscomp'] = jscomp = {};
-  }
-  var transpile = jscomp.transpile;
-  if (!transpile) {
-    var transpilerPath = goog.basePath + goog.TRANSPILER;
-    var transpilerCode = goog.loadFileSync_(transpilerPath);
-    if (transpilerCode) {
-      // This must be executed synchronously, since by the time we know we
-      // need it, we're about to load and write the ES6 code synchronously,
-      // so a normal script-tag load will be too slow.
-      eval(transpilerCode + '\n//# sourceURL=' + transpilerPath);
-      // Note: transpile.js reassigns goog.global['$jscomp'] so pull it again.
-      jscomp = goog.global['$jscomp'];
-      transpile = jscomp.transpile;
-    }
-  }
-  if (!transpile) {
-    // The transpiler is an optional component.  If it's not available then
-    // replace it with a pass-through function that simply logs.
-    var suffix = ' requires transpilation but no transpiler was found.';
-    transpile = jscomp.transpile = function(code, path) {
-      // TODO(user): figure out some way to get this error to show up
-      // in test results, noting that the failure may occur in many
-      // different ways, including in loadModule() before the test
-      // runner even comes up.
-      goog.logToConsole_(path + suffix);
-      return code;
-    };
-  }
-  // Note: any transpilation errors/warnings will be logged to the console.
-  return transpile(code, path);
-};
-
-
-//==============================================================================
-// Language Enhancements
-//==============================================================================
-
-
-/**
- * This is a "fixed" version of the typeof operator.  It differs from the typeof
- * operator in such a way that null returns 'null' and arrays return 'array'.
- * @param {?} value The value to get the type of.
- * @return {string} The name of the type.
- */
-goog.typeOf = function(value) {
-  var s = typeof value;
-  if (s == 'object') {
-    if (value) {
-      // Check these first, so we can avoid calling Object.prototype.toString if
-      // possible.
-      //
-      // IE improperly marshals typeof across execution contexts, but a
-      // cross-context object will still return false for "instanceof Object".
-      if (value instanceof Array) {
-        return 'array';
-      } else if (value instanceof Object) {
-        return s;
-      }
-
-      // HACK: In order to use an Object prototype method on the arbitrary
-      //   value, the compiler requires the value be cast to type Object,
-      //   even though the ECMA spec explicitly allows it.
-      var className = Object.prototype.toString.call(
-          /** @type {!Object} */ (value));
-      // In Firefox 3.6, attempting to access iframe window objects' length
-      // property throws an NS_ERROR_FAILURE, so we need to special-case it
-      // here.
-      if (className == '[object Window]') {
-        return 'object';
-      }
-
-      // We cannot always use constructor == Array or instanceof Array because
-      // different frames have different Array objects. In IE6, if the iframe
-      // where the array was created is destroyed, the array loses its
-      // prototype. Then dereferencing val.splice here throws an exception, so
-      // we can't use goog.isFunction. Calling typeof directly returns 'unknown'
-      // so that will work. In this case, this function will return false and
-      // most array functions will still work because the array is still
-      // array-like (supports length and []) even though it has lost its
-      // prototype.
-      // Mark Miller noticed that Object.prototype.toString
-      // allows access to the unforgeable [[Class]] property.
-      //  15.2.4.2 Object.prototype.toString ( )
-      //  When the toString method is called, the following steps are taken:
-      //      1. Get the [[Class]] property of this object.
-      //      2. Compute a string value by concatenating the three strings
-      //         "[object ", Result(1), and "]".
-      //      3. Return Result(2).
-      // and this behavior survives the destruction of the execution context.
-      if ((className == '[object Array]' ||
-           // In IE all non value types are wrapped as objects across window
-           // boundaries (not iframe though) so we have to do object detection
-           // for this edge case.
-           typeof value.length == 'number' &&
-               typeof value.splice != 'undefined' &&
-               typeof value.propertyIsEnumerable != 'undefined' &&
-               !value.propertyIsEnumerable('splice')
-
-               )) {
-        return 'array';
-      }
-      // HACK: There is still an array case that fails.
-      //     function ArrayImpostor() {}
-      //     ArrayImpostor.prototype = [];
-      //     var impostor = new ArrayImpostor;
-      // this can be fixed by getting rid of the fast path
-      // (value instanceof Array) and solely relying on
-      // (value && Object.prototype.toString.vall(value) === '[object Array]')
-      // but that would require many more function calls and is not warranted
-      // unless closure code is receiving objects from untrusted sources.
-
-      // IE in cross-window calls does not correctly marshal the function type
-      // (it appears just as an object) so we cannot use just typeof val ==
-      // 'function'. However, if the object has a call property, it is a
-      // function.
-      if ((className == '[object Function]' ||
-           typeof value.call != 'undefined' &&
-               typeof value.propertyIsEnumerable != 'undefined' &&
-               !value.propertyIsEnumerable('call'))) {
-        return 'function';
-      }
-
-    } else {
-      return 'null';
-    }
-
-  } else if (s == 'function' && typeof value.call == 'undefined') {
-    // In Safari typeof nodeList returns 'function', and on Firefox typeof
-    // behaves similarly for HTML{Applet,Embed,Object}, Elements and RegExps. We
-    // would like to return object for those and we can detect an invalid
-    // function by making sure that the function object has a call method.
-    return 'object';
-  }
-  return s;
-};
-
-
-/**
- * Returns true if the specified value is null.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is null.
- */
-goog.isNull = function(val) {
-  return val === null;
-};
-
-
-/**
- * Returns true if the specified value is defined and not null.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is defined and not null.
- */
-goog.isDefAndNotNull = function(val) {
-  // Note that undefined == null.
-  return val != null;
-};
-
-
-/**
- * Returns true if the specified value is an array.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is an array.
- */
-goog.isArray = function(val) {
-  return goog.typeOf(val) == 'array';
-};
-
-
-/**
- * Returns true if the object looks like an array. To qualify as array like
- * the value needs to be either a NodeList or an object with a Number length
- * property. As a special case, a function value is not array like, because its
- * length property is fixed to correspond to the number of expected arguments.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is an array.
- */
-goog.isArrayLike = function(val) {
-  var type = goog.typeOf(val);
-  // We do not use goog.isObject here in order to exclude function values.
-  return type == 'array' || type == 'object' && typeof val.length == 'number';
-};
-
-
-/**
- * Returns true if the object looks like a Date. To qualify as Date-like the
- * value needs to be an object and have a getFullYear() function.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is a like a Date.
- */
-goog.isDateLike = function(val) {
-  return goog.isObject(val) && typeof val.getFullYear == 'function';
-};
-
-
-/**
- * Returns true if the specified value is a string.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is a string.
- */
-goog.isString = function(val) {
-  return typeof val == 'string';
-};
-
-
-/**
- * Returns true if the specified value is a boolean.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is boolean.
- */
-goog.isBoolean = function(val) {
-  return typeof val == 'boolean';
-};
-
-
-/**
- * Returns true if the specified value is a number.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is a number.
- */
-goog.isNumber = function(val) {
-  return typeof val == 'number';
-};
-
-
-/**
- * Returns true if the specified value is a function.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is a function.
- */
-goog.isFunction = function(val) {
-  return goog.typeOf(val) == 'function';
-};
-
-
-/**
- * Returns true if the specified value is an object.  This includes arrays and
- * functions.
- * @param {?} val Variable to test.
- * @return {boolean} Whether variable is an object.
- */
-goog.isObject = function(val) {
-  var type = typeof val;
-  return type == 'object' && val != null || type == 'function';
-  // return Object(val) === val also works, but is slower, especially if val is
-  // not an object.
-};
-
-
-/**
- * Gets a unique ID for an object. This mutates the object so that further calls
- * with the same object as a parameter returns the same value. The unique ID is
- * guaranteed to be unique across the current session amongst objects that are
- * passed into {@code getUid}. There is no guarantee that the ID is unique or
- * consistent across sessions. It is unsafe to generate unique ID for function
- * prototypes.
- *
- * @param {Object} obj The object to get the unique ID for.
- * @return {number} The unique ID for the object.
- */
-goog.getUid = function(obj) {
-  // TODO(arv): Make the type stricter, do not accept null.
-
-  // In Opera window.hasOwnProperty exists but always returns false so we avoid
-  // using it. As a consequence the unique ID generated for BaseClass.prototype
-  // and SubClass.prototype will be the same.
-  return obj[goog.UID_PROPERTY_] ||
-      (obj[goog.UID_PROPERTY_] = ++goog.uidCounter_);
-};
-
-
-/**
- * Whether the given object is already assigned a unique ID.
- *
- * This does not modify the object.
- *
- * @param {!Object} obj The object to check.
- * @return {boolean} Whether there is an assigned unique id for the object.
- */
-goog.hasUid = function(obj) {
-  return !!obj[goog.UID_PROPERTY_];
-};
-
-
-/**
- * Removes the unique ID from an object. This is useful if the object was
- * previously mutated using {@code goog.getUid} in which case the mutation is
- * undone.
- * @param {Object} obj The object to remove the unique ID field from.
- */
-goog.removeUid = function(obj) {
-  // TODO(arv): Make the type stricter, do not accept null.
-
-  // In IE, DOM nodes are not instances of Object and throw an exception if we
-  // try to delete.  Instead we try to use removeAttribute.
-  if (obj !== null && 'removeAttribute' in obj) {
-    obj.removeAttribute(goog.UID_PROPERTY_);
-  }
-  /** @preserveTry */
-  try {
-    delete obj[goog.UID_PROPERTY_];
-  } catch (ex) {
-  }
-};
-
-
-/**
- * Name for unique ID property. Initialized in a way to help avoid collisions
- * with other closure JavaScript on the same page.
- * @type {string}
- * @private
- */
-goog.UID_PROPERTY_ = 'closure_uid_' + ((Math.random() * 1e9) >>> 0);
-
-
-/**
- * Counter for UID.
- * @type {number}
- * @private
- */
-goog.uidCounter_ = 0;
-
-
-/**
- * Adds a hash code field to an object. The hash code is unique for the
- * given object.
- * @param {Object} obj The object to get the hash code for.
- * @return {number} The hash code for the object.
- * @deprecated Use goog.getUid instead.
- */
-goog.getHashCode = goog.getUid;
-
-
-/**
- * Removes the hash code field from an object.
- * @param {Object} obj The object to remove the field from.
- * @deprecated Use goog.removeUid instead.
- */
-goog.removeHashCode = goog.removeUid;
-
-
-/**
- * Clones a value. The input may be an Object, Array, or basic type. Objects and
- * arrays will be cloned recursively.
- *
- * WARNINGS:
- * <code>goog.cloneObject</code> does not detect reference loops. Objects that
- * refer to themselves will cause infinite recursion.
- *
- * <code>goog.cloneObject</code> is unaware of unique identifiers, and copies
- * UIDs created by <code>getUid</code> into cloned results.
- *
- * @param {*} obj The value to clone.
- * @return {*} A clone of the input value.
- * @deprecated goog.cloneObject is unsafe. Prefer the goog.object methods.
- */
-goog.cloneObject = function(obj) {
-  var type = goog.typeOf(obj);
-  if (type == 'object' || type == 'array') {
-    if (obj.clone) {
-      return obj.clone();
-    }
-    var clone = type == 'array' ? [] : {};
-    for (var key in obj) {
-      clone[key] = goog.cloneObject(obj[key]);
-    }
-    return clone;
-  }
-
-  return obj;
-};
-
-
-/**
- * A native implementation of goog.bind.
- * @param {Function} fn A function to partially apply.
- * @param {Object|undefined} selfObj Specifies the object which this should
- *     point to when the function is run.
- * @param {...*} var_args Additional arguments that are partially applied to the
- *     function.
- * @return {!Function} A partially-applied form of the function bind() was
- *     invoked as a method of.
- * @private
- * @suppress {deprecated} The compiler thinks that Function.prototype.bind is
- *     deprecated because some people have declared a pure-JS version.
- *     Only the pure-JS version is truly deprecated.
- */
-goog.bindNative_ = function(fn, selfObj, var_args) {
-  return /** @type {!Function} */ (fn.call.apply(fn.bind, arguments));
-};
-
-
-/**
- * A pure-JS implementation of goog.bind.
- * @param {Function} fn A function to partially apply.
- * @param {Object|undefined} selfObj Specifies the object which this should
- *     point to when the function is run.
- * @param {...*} var_args Additional arguments that are partially applied to the
- *     function.
- * @return {!Function} A partially-applied form of the function bind() was
- *     invoked as a method of.
- * @private
- */
-goog.bindJs_ = function(fn, selfObj, var_args) {
-  if (!fn) {
-    throw new Error();
-  }
-
-  if (arguments.length > 2) {
-    var boundArgs = Array.prototype.slice.call(arguments, 2);
-    return function() {
-      // Prepend the bound arguments to the current arguments.
-      var newArgs = Array.prototype.slice.call(arguments);
-      Array.prototype.unshift.apply(newArgs, boundArgs);
-      return fn.apply(selfObj, newArgs);
-    };
-
-  } else {
-    return function() { return fn.apply(selfObj, arguments); };
-  }
-};
-
-
-/**
- * Partially applies this function to a particular 'this object' and zero or
- * more arguments. The result is a new function with some arguments of the first
- * function pre-filled and the value of this 'pre-specified'.
- *
- * Remaining arguments specified at call-time are appended to the pre-specified
- * ones.
- *
- * Also see: {@link #partial}.
- *
- * Usage:
- * <pre>var barMethBound = goog.bind(myFunction, myObj, 'arg1', 'arg2');
- * barMethBound('arg3', 'arg4');</pre>
- *
- * @param {?function(this:T, ...)} fn A function to partially apply.
- * @param {T} selfObj Specifies the object which this should point to when the
- *     function is run.
- * @param {...*} var_args Additional arguments that are partially applied to the
- *     function.
- * @return {!Function} A partially-applied form of the function goog.bind() was
- *     invoked as a method of.
- * @template T
- * @suppress {deprecated} See above.
- */
-goog.bind = function(fn, selfObj, var_args) {
-  // TODO(nicksantos): narrow the type signature.
-  if (Function.prototype.bind &&
-      // NOTE(nicksantos): Somebody pulled base.js into the default Chrome
-      // extension environment. This means that for Chrome extensions, they get
-      // the implementation of Function.prototype.bind that calls goog.bind
-      // instead of the native one. Even worse, we don't want to introduce a
-      // circular dependency between goog.bind and Function.prototype.bind, so
-      // we have to hack this to make sure it works correctly.
-      Function.prototype.bind.toString().indexOf('native code') != -1) {
-    goog.bind = goog.bindNative_;
-  } else {
-    goog.bind = goog.bindJs_;
-  }
-  return goog.bind.apply(null, arguments);
-};
-
-
-/**
- * Like goog.bind(), except that a 'this object' is not required. Useful when
- * the target function is already bound.
- *
- * Usage:
- * var g = goog.partial(f, arg1, arg2);
- * g(arg3, arg4);
- *
- * @param {Function} fn A function to partially apply.
- * @param {...*} var_args Additional arguments that are partially applied to fn.
- * @return {!Function} A partially-applied form of the function goog.partial()
- *     was invoked as a method of.
- */
-goog.partial = function(fn, var_args) {
-  var args = Array.prototype.slice.call(arguments, 1);
-  return function() {
-    // Clone the array (with slice()) and append additional arguments
-    // to the existing arguments.
-    var newArgs = args.slice();
-    newArgs.push.apply(newArgs, arguments);
-    return fn.apply(this, newArgs);
-  };
-};
-
-
-/**
- * Copies all the members of a source object to a target object. This method
- * does not work on all browsers for all objects that contain keys such as
- * toString or hasOwnProperty. Use goog.object.extend for this purpose.
- * @param {Object} target Target.
- * @param {Object} source Source.
- */
-goog.mixin = function(target, source) {
-  for (var x in source) {
-    target[x] = source[x];
-  }
-
-  // For IE7 or lower, the for-in-loop does not contain any properties that are
-  // not enumerable on the prototype object (for example, isPrototypeOf from
-  // Object.prototype) but also it will not include 'replace' on objects that
-  // extend String and change 'replace' (not that it is common for anyone to
-  // extend anything except Object).
-};
-
-
-/**
- * @return {number} An integer value representing the number of milliseconds
- *     between midnight, January 1, 1970 and the current time.
- */
-goog.now = (goog.TRUSTED_SITE && Date.now) || (function() {
-             // Unary plus operator converts its operand to a number which in
-             // the case of
-             // a date is done by calling getTime().
-             return +new Date();
-           });
-
-
-/**
- * Evals JavaScript in the global scope.  In IE this uses execScript, other
- * browsers use goog.global.eval. If goog.global.eval does not evaluate in the
- * global scope (for example, in Safari), appends a script tag instead.
- * Throws an exception if neither execScript or eval is defined.
- * @param {string} script JavaScript string.
- */
-goog.globalEval = function(script) {
-  if (goog.global.execScript) {
-    goog.global.execScript(script, 'JavaScript');
-  } else if (goog.global.eval) {
-    // Test to see if eval works
-    if (goog.evalWorksForGlobals_ == null) {
-      goog.global.eval('var _evalTest_ = 1;');
-      if (typeof goog.global['_evalTest_'] != 'undefined') {
-        try {
-          delete goog.global['_evalTest_'];
-        } catch (ignore) {
-          // Microsoft edge fails the deletion above in strict mode.
-        }
-        goog.evalWorksForGlobals_ = true;
-      } else {
-        goog.evalWorksForGlobals_ = false;
-      }
-    }
-
-    if (goog.evalWorksForGlobals_) {
-      goog.global.eval(script);
-    } else {
-      /** @type {Document} */
-      var doc = goog.global.document;
-      var scriptElt =
-          /** @type {!HTMLScriptElement} */ (doc.createElement('SCRIPT'));
-      scriptElt.type = 'text/javascript';
-      scriptElt.defer = false;
-      // Note(user): can't use .innerHTML since "t('<test>')" will fail and
-      // .text doesn't work in Safari 2.  Therefore we append a text node.
-      scriptElt.appendChild(doc.createTextNode(script));
-      doc.body.appendChild(scriptElt);
-      doc.body.removeChild(scriptElt);
-    }
-  } else {
-    throw Error('goog.globalEval not available');
-  }
-};
-
-
-/**
- * Indicates whether or not we can call 'eval' directly to eval code in the
- * global scope. Set to a Boolean by the first call to goog.globalEval (which
- * empirically tests whether eval works for globals). @see goog.globalEval
- * @type {?boolean}
- * @private
- */
-goog.evalWorksForGlobals_ = null;
-
-
-/**
- * Optional map of CSS class names to obfuscated names used with
- * goog.getCssName().
- * @private {!Object<string, string>|undefined}
- * @see goog.setCssNameMapping
- */
-goog.cssNameMapping_;
-
-
-/**
- * Optional obfuscation style for CSS class names. Should be set to either
- * 'BY_WHOLE' or 'BY_PART' if defined.
- * @type {string|undefined}
- * @private
- * @see goog.setCssNameMapping
- */
-goog.cssNameMappingStyle_;
-
-
-/**
- * Handles strings that are intended to be used as CSS class names.
- *
- * This function works in tandem with @see goog.setCssNameMapping.
- *
- * Without any mapping set, the arguments are simple joined with a hyphen and
- * passed through unaltered.
- *
- * When there is a mapping, there are two possible styles in which these
- * mappings are used. In the BY_PART style, each part (i.e. in between hyphens)
- * of the passed in css name is rewritten according to the map. In the BY_WHOLE
- * style, the full css name is looked up in the map directly. If a rewrite is
- * not specified by the map, the compiler will output a warning.
- *
- * When the mapping is passed to the compiler, it will replace calls to
- * goog.getCssName with the strings from the mapping, e.g.
- *     var x = goog.getCssName('foo');
- *     var y = goog.getCssName(this.baseClass, 'active');
- *  becomes:
- *     var x = 'foo';
- *     var y = this.baseClass + '-active';
- *
- * If one argument is passed it will be processed, if two are passed only the
- * modifier will be processed, as it is assumed the first argument was generated
- * as a result of calling goog.getCssName.
- *
- * @param {string} className The class name.
- * @param {string=} opt_modifier A modifier to be appended to the class name.
- * @return {string} The class name or the concatenation of the class name and
- *     the modifier.
- */
-goog.getCssName = function(className, opt_modifier) {
-  var getMapping = function(cssName) {
-    return goog.cssNameMapping_[cssName] || cssName;
-  };
-
-  var renameByParts = function(cssName) {
-    // Remap all the parts individually.
-    var parts = cssName.split('-');
-    var mapped = [];
-    for (var i = 0; i < parts.length; i++) {
-      mapped.push(getMapping(parts[i]));
-    }
-    return mapped.join('-');
-  };
-
-  var rename;
-  if (goog.cssNameMapping_) {
-    rename =
-        goog.cssNameMappingStyle_ == 'BY_WHOLE' ? getMapping : renameByParts;
-  } else {
-    rename = function(a) { return a; };
-  }
-
-  if (opt_modifier) {
-    return className + '-' + rename(opt_modifier);
-  } else {
-    return rename(className);
-  }
-};
-
-
-/**
- * Sets the map to check when returning a value from goog.getCssName(). Example:
- * <pre>
- * goog.setCssNameMapping({
- *   "goog": "a",
- *   "disabled": "b",
- * });
- *
- * var x = goog.getCssName('goog');
- * // The following evaluates to: "a a-b".
- * goog.getCssName('goog') + ' ' + goog.getCssName(x, 'disabled')
- * </pre>
- * When declared as a map of string literals to string literals, the JSCompiler
- * will replace all calls to goog.getCssName() using the supplied map if the
- * --process_closure_primitives flag is set.
- *
- * @param {!Object} mapping A map of strings to strings where keys are possible
- *     arguments to goog.getCssName() and values are the corresponding values
- *     that should be returned.
- * @param {string=} opt_style The style of css name mapping. There are two valid
- *     options: 'BY_PART', and 'BY_WHOLE'.
- * @see goog.getCssName for a description.
- */
-goog.setCssNameMapping = function(mapping, opt_style) {
-  goog.cssNameMapping_ = mapping;
-  goog.cssNameMappingStyle_ = opt_style;
-};
-
-
-/**
- * To use CSS renaming in compiled mode, one of the input files should have a
- * call to goog.setCssNameMapping() with an object literal that the JSCompiler
- * can extract and use to replace all calls to goog.getCssName(). In uncompiled
- * mode, JavaScript code should be loaded before this base.js file that declares
- * a global variable, CLOSURE_CSS_NAME_MAPPING, which is used below. This is
- * to ensure that the mapping is loaded before any calls to goog.getCssName()
- * are made in uncompiled mode.
- *
- * A hook for overriding the CSS name mapping.
- * @type {!Object<string, string>|undefined}
- */
-goog.global.CLOSURE_CSS_NAME_MAPPING;
-
-
-if (!COMPILED && goog.global.CLOSURE_CSS_NAME_MAPPING) {
-  // This does not call goog.setCssNameMapping() because the JSCompiler
-  // requires that goog.setCssNameMapping() be called with an object literal.
-  goog.cssNameMapping_ = goog.global.CLOSURE_CSS_NAME_MAPPING;
-}
-
-
-/**
- * Gets a localized message.
- *
- * This function is a compiler primitive. If you give the compiler a localized
- * message bundle, it will replace the string at compile-time with a localized
- * version, and expand goog.getMsg call to a concatenated string.
- *
- * Messages must be initialized in the form:
- * <code>
- * var MSG_NAME = goog.getMsg('Hello {$placeholder}', {'placeholder': 'world'});
- * </code>
- *
- * This function produces a string which should be treated as plain text. Use
- * {@link goog.html.SafeHtmlFormatter} in conjunction with goog.getMsg to
- * produce SafeHtml.
- *
- * @param {string} str Translatable string, places holders in the form {$foo}.
- * @param {Object<string, string>=} opt_values Maps place holder name to value.
- * @return {string} message with placeholders filled.
- */
-goog.getMsg = function(str, opt_values) {
-  if (opt_values) {
-    str = str.replace(/\{\$([^}]+)}/g, function(match, key) {
-      return (opt_values != null && key in opt_values) ? opt_values[key] :
-                                                         match;
-    });
-  }
-  return str;
-};
-
-
-/**
- * Gets a localized message. If the message does not have a translation, gives a
- * fallback message.
- *
- * This is useful when introducing a new message that has not yet been
- * translated into all languages.
- *
- * This function is a compiler primitive. Must be used in the form:
- * <code>var x = goog.getMsgWithFallback(MSG_A, MSG_B);</code>
- * where MSG_A and MSG_B were initialized with goog.getMsg.
- *
- * @param {string} a The preferred message.
- * @param {string} b The fallback message.
- * @return {string} The best translated message.
- */
-goog.getMsgWithFallback = function(a, b) {
-  return a;
-};
-
-
-/**
- * Exposes an unobfuscated global namespace path for the given object.
- * Note that fields of the exported object *will* be obfuscated, unless they are
- * exported in turn via this function or goog.exportProperty.
- *
- * Also handy for making public items that are defined in anonymous closures.
- *
- * ex. goog.exportSymbol('public.path.Foo', Foo);
- *
- * ex. goog.exportSymbol('public.path.Foo.staticFunction', Foo.staticFunction);
- *     public.path.Foo.staticFunction();
- *
- * ex. goog.exportSymbol('public.path.Foo.prototype.myMethod',
- *                       Foo.prototype.myMethod);
- *     new public.path.Foo().myMethod();
- *
- * @param {string} publicPath Unobfuscated name to export.
- * @param {*} object Object the name should point to.
- * @param {Object=} opt_objectToExportTo The object to add the path to; default
- *     is goog.global.
- */
-goog.exportSymbol = function(publicPath, object, opt_objectToExportTo) {
-  goog.exportPath_(publicPath, object, opt_objectToExportTo);
-};
-
-
-/**
- * Exports a property unobfuscated into the object's namespace.
- * ex. goog.exportProperty(Foo, 'staticFunction', Foo.staticFunction);
- * ex. goog.exportProperty(Foo.prototype, 'myMethod', Foo.prototype.myMethod);
- * @param {Object} object Object whose static property is being exported.
- * @param {string} publicName Unobfuscated name to export.
- * @param {*} symbol Object the name should point to.
- */
-goog.exportProperty = function(object, publicName, symbol) {
-  object[publicName] = symbol;
-};
-
-
-/**
- * Inherit the prototype methods from one constructor into another.
- *
- * Usage:
- * <pre>
- * function ParentClass(a, b) { }
- * ParentClass.prototype.foo = function(a) { };
- *
- * function ChildClass(a, b, c) {
- *   ChildClass.base(this, 'constructor', a, b);
- * }
- * goog.inherits(ChildClass, ParentClass);
- *
- * var child = new ChildClass('a', 'b', 'see');
- * child.foo(); // This works.
- * </pre>
- *
- * @param {!Function} childCtor Child class.
- * @param {!Function} parentCtor Parent class.
- */
-goog.inherits = function(childCtor, parentCtor) {
-  /** @constructor */
-  function tempCtor() {}
-  tempCtor.prototype = parentCtor.prototype;
-  childCtor.superClass_ = parentCtor.prototype;
-  childCtor.prototype = new tempCtor();
-  /** @override */
-  childCtor.prototype.constructor = childCtor;
-
-  /**
-   * Calls superclass constructor/method.
-   *
-   * This function is only available if you use goog.inherits to
-   * express inheritance relationships between classes.
-   *
-   * NOTE: This is a replacement for goog.base and for superClass_
-   * property defined in childCtor.
-   *
-   * @param {!Object} me Should always be "this".
-   * @param {string} methodName The method name to call. Calling
-   *     superclass constructor can be done with the special string
-   *     'constructor'.
-   * @param {...*} var_args The arguments to pass to superclass
-   *     method/constructor.
-   * @return {*} The return value of the superclass method/constructor.
-   */
-  childCtor.base = function(me, methodName, var_args) {
-    // Copying using loop to avoid deop due to passing arguments object to
-    // function. This is faster in many JS engines as of late 2014.
-    var args = new Array(arguments.length - 2);
-    for (var i = 2; i < arguments.length; i++) {
-      args[i - 2] = arguments[i];
-    }
-    return parentCtor.prototype[methodName].apply(me, args);
-  };
-};
-
-
-/**
- * Call up to the superclass.
- *
- * If this is called from a constructor, then this calls the superclass
- * constructor with arguments 1-N.
- *
- * If this is called from a prototype method, then you must pass the name of the
- * method as the second argument to this function. If you do not, you will get a
- * runtime error. This calls the superclass' method with arguments 2-N.
- *
- * This function only works if you use goog.inherits to express inheritance
- * relationships between your classes.
- *
- * This function is a compiler primitive. At compile-time, the compiler will do
- * macro expansion to remove a lot of the extra overhead that this function
- * introduces. The compiler will also enforce a lot of the assumptions that this
- * function makes, and treat it as a compiler error if you break them.
- *
- * @param {!Object} me Should always be "this".
- * @param {*=} opt_methodName The method name if calling a super method.
- * @param {...*} var_args The rest of the arguments.
- * @return {*} The return value of the superclass method.
- * @suppress {es5Strict} This method can not be used in strict mode, but
- *     all Closure Library consumers must depend on this file.
- */
-goog.base = function(me, opt_methodName, var_args) {
-  var caller = arguments.callee.caller;
-
-  if (goog.STRICT_MODE_COMPATIBLE || (goog.DEBUG && !caller)) {
-    throw Error(
-        'arguments.caller not defined.  goog.base() cannot be used ' +
-        'with strict mode code. See ' +
-        'http://www.ecma-international.org/ecma-262/5.1/#sec-C');
-  }
-
-  if (caller.superClass_) {
-    // Copying using loop to avoid deop due to passing arguments object to
-    // function. This is faster in many JS engines as of late 2014.
-    var ctorArgs = new Array(arguments.length - 1);
-    for (var i = 1; i < arguments.length; i++) {
-      ctorArgs[i - 1] = arguments[i];
-    }
-    // This is a constructor. Call the superclass constructor.
-    return caller.superClass_.constructor.apply(me, ctorArgs);
-  }
-
-  // Copying using loop to avoid deop due to passing arguments object to
-  // function. This is faster in many JS engines as of late 2014.
-  var args = new Array(arguments.length - 2);
-  for (var i = 2; i < arguments.length; i++) {
-    args[i - 2] = arguments[i];
-  }
-  var foundCaller = false;
-  for (var ctor = me.constructor; ctor;
-       ctor = ctor.superClass_ && ctor.superClass_.constructor) {
-    if (ctor.prototype[opt_methodName] === caller) {
-      foundCaller = true;
-    } else if (foundCaller) {
-      return ctor.prototype[opt_methodName].apply(me, args);
-    }
-  }
-
-  // If we did not find the caller in the prototype chain, then one of two
-  // things happened:
-  // 1) The caller is an instance method.
-  // 2) This method was not called by the right caller.
-  if (me[opt_methodName] === caller) {
-    return me.constructor.prototype[opt_methodName].apply(me, args);
-  } else {
-    throw Error(
-        'goog.base called from a method of one name ' +
-        'to a method of a different name');
-  }
-};
-
-
-/**
- * Allow for aliasing within scope functions.  This function exists for
- * uncompiled code - in compiled code the calls will be inlined and the aliases
- * applied.  In uncompiled code the function is simply run since the aliases as
- * written are valid JavaScript.
- *
- *
- * @param {function()} fn Function to call.  This function can contain aliases
- *     to namespaces (e.g. "var dom = goog.dom") or classes
- *     (e.g. "var Timer = goog.Timer").
- */
-goog.scope = function(fn) {
-  if (goog.isInModuleLoader_()) {
-    throw Error('goog.scope is not supported within a goog.module.');
-  }
-  fn.call(goog.global);
-};
-
-
-/*
- * To support uncompiled, strict mode bundles that use eval to divide source
- * like so:
- *    eval('someSource;//# sourceUrl sourcefile.js');
- * We need to export the globally defined symbols "goog" and "COMPILED".
- * Exporting "goog" breaks the compiler optimizations, so we required that
- * be defined externally.
- * NOTE: We don't use goog.exportSymbol here because we don't want to trigger
- * extern generation when that compiler option is enabled.
- */
-if (!COMPILED) {
-  goog.global['COMPILED'] = COMPILED;
-}
-
-
-//==============================================================================
-// goog.defineClass implementation
-//==============================================================================
-
-
-/**
- * Creates a restricted form of a Closure "class":
- *   - from the compiler's perspective, the instance returned from the
- *     constructor is sealed (no new properties may be added).  This enables
- *     better checks.
- *   - the compiler will rewrite this definition to a form that is optimal
- *     for type checking and optimization (initially this will be a more
- *     traditional form).
- *
- * @param {Function} superClass The superclass, Object or null.
- * @param {goog.defineClass.ClassDescriptor} def
- *     An object literal describing
- *     the class.  It may have the following properties:
- *     "constructor": the constructor function
- *     "statics": an object literal containing methods to add to the constructor
- *        as "static" methods or a function that will receive the constructor
- *        function as its only parameter to which static properties can
- *        be added.
- *     all other properties are added to the prototype.
- * @return {!Function} The class constructor.
- */
-goog.defineClass = function(superClass, def) {
-  // TODO(johnlenz): consider making the superClass an optional parameter.
-  var constructor = def.constructor;
-  var statics = def.statics;
-  // Wrap the constructor prior to setting up the prototype and static methods.
-  if (!constructor || constructor == Object.prototype.constructor) {
-    constructor = function() {
-      throw Error('cannot instantiate an interface (no constructor defined).');
-    };
-  }
-
-  var cls = goog.defineClass.createSealingConstructor_(constructor, superClass);
-  if (superClass) {
-    goog.inherits(cls, superClass);
-  }
-
-  // Remove all the properties that should not be copied to the prototype.
-  delete def.constructor;
-  delete def.statics;
-
-  goog.defineClass.applyProperties_(cls.prototype, def);
-  if (statics != null) {
-    if (statics instanceof Function) {
-      statics(cls);
-    } else {
-      goog.defineClass.applyProperties_(cls, statics);
-    }
-  }
-
-  return cls;
-};
-
-
-/**
- * @typedef {{
- *   constructor: (!Function|undefined),
- *   statics: (Object|undefined|function(Function):void)
- * }}
- * @suppress {missingProvide}
- */
-goog.defineClass.ClassDescriptor;
-
-
-/**
- * @define {boolean} Whether the instances returned by goog.defineClass should
- *     be sealed when possible.
- *
- * When sealing is disabled the constructor function will not be wrapped by
- * goog.defineClass, making it incompatible with ES6 class methods.
- */
-goog.define('goog.defineClass.SEAL_CLASS_INSTANCES', goog.DEBUG);
-
-
-/**
- * If goog.defineClass.SEAL_CLASS_INSTANCES is enabled and Object.seal is
- * defined, this function will wrap the constructor in a function that seals the
- * results of the provided constructor function.
- *
- * @param {!Function} ctr The constructor whose results maybe be sealed.
- * @param {Function} superClass The superclass constructor.
- * @return {!Function} The replacement constructor.
- * @private
- */
-goog.defineClass.createSealingConstructor_ = function(ctr, superClass) {
-  if (!goog.defineClass.SEAL_CLASS_INSTANCES) {
-    // Do now wrap the constructor when sealing is disabled. Angular code
-    // depends on this for injection to work properly.
-    return ctr;
-  }
-
-  // Compute whether the constructor is sealable at definition time, rather
-  // than when the instance is being constructed.
-  var superclassSealable = !goog.defineClass.isUnsealable_(superClass);
-
-  /**
-   * @this {Object}
-   * @return {?}
-   */
-  var wrappedCtr = function() {
-    // Don't seal an instance of a subclass when it calls the constructor of
-    // its super class as there is most likely still setup to do.
-    var instance = ctr.apply(this, arguments) || this;
-    instance[goog.UID_PROPERTY_] = instance[goog.UID_PROPERTY_];
-
-    if (this.constructor === wrappedCtr && superclassSealable &&
-        Object.seal instanceof Function) {
-      Object.seal(instance);
-    }
-    return instance;
-  };
-
-  return wrappedCtr;
-};
-
-
-/**
- * @param {Function} ctr The constructor to test.
- * @returns {boolean} Whether the constructor has been tagged as unsealable
- *     using goog.tagUnsealableClass.
- * @private
- */
-goog.defineClass.isUnsealable_ = function(ctr) {
-  return ctr && ctr.prototype &&
-      ctr.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_];
-};
-
-
-// TODO(johnlenz): share these values with the goog.object
-/**
- * The names of the fields that are defined on Object.prototype.
- * @type {!Array<string>}
- * @private
- * @const
- */
-goog.defineClass.OBJECT_PROTOTYPE_FIELDS_ = [
-  'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',
-  'toLocaleString', 'toString', 'valueOf'
-];
-
-
-// TODO(johnlenz): share this function with the goog.object
-/**
- * @param {!Object} target The object to add properties to.
- * @param {!Object} source The object to copy properties from.
- * @private
- */
-goog.defineClass.applyProperties_ = function(target, source) {
-  // TODO(johnlenz): update this to support ES5 getters/setters
-
-  var key;
-  for (key in source) {
-    if (Object.prototype.hasOwnProperty.call(source, key)) {
-      target[key] = source[key];
-    }
-  }
-
-  // For IE the for-in-loop does not contain any properties that are not
-  // enumerable on the prototype object (for example isPrototypeOf from
-  // Object.prototype) and it will also not include 'replace' on objects that
-  // extend String and change 'replace' (not that it is common for anyone to
-  // extend anything except Object).
-  for (var i = 0; i < goog.defineClass.OBJECT_PROTOTYPE_FIELDS_.length; i++) {
-    key = goog.defineClass.OBJECT_PROTOTYPE_FIELDS_[i];
-    if (Object.prototype.hasOwnProperty.call(source, key)) {
-      target[key] = source[key];
-    }
-  }
-};
-
-
-/**
- * Sealing classes breaks the older idiom of assigning properties on the
- * prototype rather than in the constructor. As such, goog.defineClass
- * must not seal subclasses of these old-style classes until they are fixed.
- * Until then, this marks a class as "broken", instructing defineClass
- * not to seal subclasses.
- * @param {!Function} ctr The legacy constructor to tag as unsealable.
- */
-goog.tagUnsealableClass = function(ctr) {
-  if (!COMPILED && goog.defineClass.SEAL_CLASS_INSTANCES) {
-    ctr.prototype[goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_] = true;
-  }
-};
-
-
-/**
- * Name for unsealable tag property.
- * @const @private {string}
- */
-goog.UNSEALABLE_CONSTRUCTOR_PROPERTY_ = 'goog_defineClass_legacy_unsealable';
-
-goog.provide('ol');
-
-
-/**
- * Constants defined with the define tag cannot be changed in application
- * code, but can be set at compile time.
- * Some reduce the size of the build in advanced compile mode.
- */
-
-
-/**
- * @define {boolean} Enable debug mode. Default is `true`.
- */
-ol.DEBUG = true;
-
-
-/**
- * @define {boolean} Assume touch.  Default is `false`.
- */
-ol.ASSUME_TOUCH = false;
-
-
-/**
- * TODO: rename this to something having to do with tile grids
- * see https://github.com/openlayers/ol3/issues/2076
- * @define {number} Default maximum zoom for default tile grids.
- */
-ol.DEFAULT_MAX_ZOOM = 42;
-
-
-/**
- * @define {number} Default min zoom level for the map view.  Default is `0`.
- */
-ol.DEFAULT_MIN_ZOOM = 0;
-
-
-/**
- * @define {number} Default maximum allowed threshold  (in pixels) for
- *     reprojection triangulation. Default is `0.5`.
- */
-ol.DEFAULT_RASTER_REPROJECTION_ERROR_THRESHOLD = 0.5;
-
-
-/**
- * @define {number} Default tile size.
- */
-ol.DEFAULT_TILE_SIZE = 256;
-
-
-/**
- * @define {string} Default WMS version.
- */
-ol.DEFAULT_WMS_VERSION = '1.3.0';
-
-
-/**
- * @define {number} Hysteresis pixels.
- */
-ol.DRAG_BOX_HYSTERESIS_PIXELS = 8;
-
-
-/**
- * @define {boolean} Enable the Canvas renderer.  Default is `true`. Setting
- *     this to false at compile time in advanced mode removes all code
- *     supporting the Canvas renderer from the build.
- */
-ol.ENABLE_CANVAS = true;
-
-
-/**
- * @define {boolean} Enable rendering of ol.layer.Image based layers.  Default
- *     is `true`. Setting this to false at compile time in advanced mode removes
- *     all code supporting Image layers from the build.
- */
-ol.ENABLE_IMAGE = true;
-
-
-/**
- * @define {boolean} Enable integration with the Proj4js library.  Default is
- *     `true`.
- */
-ol.ENABLE_PROJ4JS = true;
-
-
-/**
- * @define {boolean} Enable automatic reprojection of raster sources. Default is
- *     `true`.
- */
-ol.ENABLE_RASTER_REPROJECTION = true;
-
-
-/**
- * @define {boolean} Enable rendering of ol.layer.Tile based layers.  Default is
- *     `true`. Setting this to false at compile time in advanced mode removes
- *     all code supporting Tile layers from the build.
- */
-ol.ENABLE_TILE = true;
-
-
-/**
- * @define {boolean} Enable rendering of ol.layer.Vector based layers.  Default
- *     is `true`. Setting this to false at compile time in advanced mode removes
- *     all code supporting Vector layers from the build.
- */
-ol.ENABLE_VECTOR = true;
-
-
-/**
- * @define {boolean} Enable rendering of ol.layer.VectorTile based layers.
- *     Default is `true`. Setting this to false at compile time in advanced mode
- *     removes all code supporting VectorTile layers from the build.
- */
-ol.ENABLE_VECTOR_TILE = true;
-
-
-/**
- * @define {boolean} Enable the WebGL renderer.  Default is `true`. Setting
- *     this to false at compile time in advanced mode removes all code
- *     supporting the WebGL renderer from the build.
- */
-ol.ENABLE_WEBGL = true;
-
-
-/**
- * @define {number} The size in pixels of the first atlas image. Default is
- * `256`.
- */
-ol.INITIAL_ATLAS_SIZE = 256;
-
-
-/**
- * @define {number} The maximum size in pixels of atlas images. Default is
- * `-1`, meaning it is not used (and `ol.WEBGL_MAX_TEXTURE_SIZE` is
- * used instead).
- */
-ol.MAX_ATLAS_SIZE = -1;
-
-
-/**
- * @define {number} Maximum mouse wheel delta.
- */
-ol.MOUSEWHEELZOOM_MAXDELTA = 1;
-
-
-/**
- * @define {number} Maximum width and/or height extent ratio that determines
- * when the overview map should be zoomed out.
- */
-ol.OVERVIEWMAP_MAX_RATIO = 0.75;
-
-
-/**
- * @define {number} Minimum width and/or height extent ratio that determines
- * when the overview map should be zoomed in.
- */
-ol.OVERVIEWMAP_MIN_RATIO = 0.1;
-
-
-/**
- * @define {number} Maximum number of source tiles for raster reprojection of
- *     a single tile.
- *     If too many source tiles are determined to be loaded to create a single
- *     reprojected tile the browser can become unresponsive or even crash.
- *     This can happen if the developer defines projections improperly and/or
- *     with unlimited extents.
- *     If too many tiles are required, no tiles are loaded and
- *     `ol.Tile.State.ERROR` state is set. Default is `100`.
- */
-ol.RASTER_REPROJECTION_MAX_SOURCE_TILES = 100;
-
-
-/**
- * @define {number} Maximum number of subdivision steps during raster
- *     reprojection triangulation. Prevents high memory usage and large
- *     number of proj4 calls (for certain transformations and areas).
- *     At most `2*(2^this)` triangles are created for each triangulated
- *     extent (tile/image). Default is `10`.
- */
-ol.RASTER_REPROJECTION_MAX_SUBDIVISION = 10;
-
-
-/**
- * @define {number} Maximum allowed size of triangle relative to world width.
- *     When transforming corners of world extent between certain projections,
- *     the resulting triangulation seems to have zero error and no subdivision
- *     is performed.
- *     If the triangle width is more than this (relative to world width; 0-1),
- *     subdivison is forced (up to `ol.RASTER_REPROJECTION_MAX_SUBDIVISION`).
- *     Default is `0.25`.
- */
-ol.RASTER_REPROJECTION_MAX_TRIANGLE_WIDTH = 0.25;
-
-
-/**
- * @define {number} Tolerance for geometry simplification in device pixels.
- */
-ol.SIMPLIFY_TOLERANCE = 0.5;
-
-
-/**
- * @define {number} Texture cache high water mark.
- */
-ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK = 1024;
-
-
-/**
- * @define {string} OpenLayers version.
- */
-ol.VERSION = '';
-
-
-/**
- * The maximum supported WebGL texture size in pixels. If WebGL is not
- * supported, the value is set to `undefined`.
- * @const
- * @type {number|undefined}
- */
-ol.WEBGL_MAX_TEXTURE_SIZE; // value is set in `ol.has`
-
-
-/**
- * List of supported WebGL extensions.
- * @const
- * @type {Array.<string>}
- */
-ol.WEBGL_EXTENSIONS; // value is set in `ol.has`
-
-
-/**
- * Inherit the prototype methods from one constructor into another.
- *
- * Usage:
- *
- *     function ParentClass(a, b) { }
- *     ParentClass.prototype.foo = function(a) { }
- *
- *     function ChildClass(a, b, c) {
- *       // Call parent constructor
- *       ParentClass.call(this, a, b);
- *     }
- *     ol.inherits(ChildClass, ParentClass);
- *
- *     var child = new ChildClass('a', 'b', 'see');
- *     child.foo(); // This works.
- *
- * @param {!Function} childCtor Child constructor.
- * @param {!Function} parentCtor Parent constructor.
- * @function
- * @api
- */
-ol.inherits = function(childCtor, parentCtor) {
-  childCtor.prototype = Object.create(parentCtor.prototype);
-  childCtor.prototype.constructor = childCtor;
-};
-
-
-/**
- * A reusable function, used e.g. as a default for callbacks.
- *
- * @return {undefined} Nothing.
- */
-ol.nullFunction = function() {};
-
-
-/**
- * Gets a unique ID for an object. This mutates the object so that further calls
- * with the same object as a parameter returns the same value. Unique IDs are generated
- * as a strictly increasing sequence. Adapted from goog.getUid.
- *
- * @param {Object} obj The object to get the unique ID for.
- * @return {number} The unique ID for the object.
- */
-ol.getUid = function(obj) {
-  return obj.ol_uid ||
-      (obj.ol_uid = ++ol.uidCounter_);
-};
-
-
-/**
- * Counter for getUid.
- * @type {number}
- * @private
- */
-ol.uidCounter_ = 0;
-
-goog.provide('ol.AssertionError');
-
-goog.require('ol');
-
-/**
- * Error object thrown when an assertion failed. This is an ECMA-262 Error,
- * extended with a `code` property.
- * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error}
- * @constructor
- * @extends {Error}
- * @implements {oli.AssertionError}
- * @param {number} code Error code.
- */
-ol.AssertionError = function(code) {
-
-  /**
-   * @type {string}
-   */
-  this.message = 'Assertion failed. See ' +
-      (ol.VERSION ? 'https://openlayers.org/en/' + ol.VERSION.split('-')[0] : '') +
-      '/doc/errors/#' + code + ' for details.';
-
-  /**
-   * Error code. The meaning of the code can be found on
-   * {@link https://openlayers.org/en/latest/errors.html} (replace `latest` with
-   * the version found in the OpenLayers script's header comment if a version
-   * other than the latest is used).
-   * @type {number}
-   * @api
-   */
-  this.code = code;
-
-  this.name = 'AssertionError';
-
-};
-ol.inherits(ol.AssertionError, Error);
-
-goog.provide('ol.asserts');
-
-goog.require('ol.AssertionError');
-
-
-/**
- * @param {*} assertion Assertion we expected to be truthy.
- * @param {number} errorCode Error code.
- */
-ol.asserts.assert = function(assertion, errorCode) {
-  if (!assertion) {
-    throw new ol.AssertionError(errorCode);
-  }
-};
-
-goog.provide('ol.math');
-
-goog.require('ol');
-goog.require('ol.asserts');
-
-
-/**
- * Takes a number and clamps it to within the provided bounds.
- * @param {number} value The input number.
- * @param {number} min The minimum value to return.
- * @param {number} max The maximum value to return.
- * @return {number} The input number if it is within bounds, or the nearest
- *     number within the bounds.
- */
-ol.math.clamp = function(value, min, max) {
-  return Math.min(Math.max(value, min), max);
-};
-
-
-/**
- * Return the hyperbolic cosine of a given number. The method will use the
- * native `Math.cosh` function if it is available, otherwise the hyperbolic
- * cosine will be calculated via the reference implementation of the Mozilla
- * developer network.
- *
- * @param {number} x X.
- * @return {number} Hyperbolic cosine of x.
- */
-ol.math.cosh = (function() {
-  // Wrapped in a iife, to save the overhead of checking for the native
-  // implementation on every invocation.
-  var cosh;
-  if ('cosh' in Math) {
-    // The environment supports the native Math.cosh function, use it…
-    cosh = Math.cosh;
-  } else {
-    // … else, use the reference implementation of MDN:
-    cosh = function(x) {
-      var y = Math.exp(x);
-      return (y + 1 / y) / 2;
-    };
-  }
-  return cosh;
-}());
-
-
-/**
- * @param {number} x X.
- * @return {number} The smallest power of two greater than or equal to x.
- */
-ol.math.roundUpToPowerOfTwo = function(x) {
-  ol.asserts.assert(0 < x, 29); // `x` must be greater than `0`
-  return Math.pow(2, Math.ceil(Math.log(x) / Math.LN2));
-};
-
-
-/**
- * Returns the square of the closest distance between the point (x, y) and the
- * line segment (x1, y1) to (x2, y2).
- * @param {number} x X.
- * @param {number} y Y.
- * @param {number} x1 X1.
- * @param {number} y1 Y1.
- * @param {number} x2 X2.
- * @param {number} y2 Y2.
- * @return {number} Squared distance.
- */
-ol.math.squaredSegmentDistance = function(x, y, x1, y1, x2, y2) {
-  var dx = x2 - x1;
-  var dy = y2 - y1;
-  if (dx !== 0 || dy !== 0) {
-    var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
-    if (t > 1) {
-      x1 = x2;
-      y1 = y2;
-    } else if (t > 0) {
-      x1 += dx * t;
-      y1 += dy * t;
-    }
-  }
-  return ol.math.squaredDistance(x, y, x1, y1);
-};
-
-
-/**
- * Returns the square of the distance between the points (x1, y1) and (x2, y2).
- * @param {number} x1 X1.
- * @param {number} y1 Y1.
- * @param {number} x2 X2.
- * @param {number} y2 Y2.
- * @return {number} Squared distance.
- */
-ol.math.squaredDistance = function(x1, y1, x2, y2) {
-  var dx = x2 - x1;
-  var dy = y2 - y1;
-  return dx * dx + dy * dy;
-};
-
-
-/**
- * Solves system of linear equations using Gaussian elimination method.
- *
- * @param {Array.<Array.<number>>} mat Augmented matrix (n x n + 1 column)
- *                                     in row-major order.
- * @return {Array.<number>} The resulting vector.
- */
-ol.math.solveLinearSystem = function(mat) {
-  var n = mat.length;
-
-  if (ol.DEBUG) {
-    for (var row = 0; row < n; row++) {
-      console.assert(mat[row].length == n + 1,
-                          'every row should have correct number of columns');
-    }
-  }
-
-  for (var i = 0; i < n; i++) {
-    // Find max in the i-th column (ignoring i - 1 first rows)
-    var maxRow = i;
-    var maxEl = Math.abs(mat[i][i]);
-    for (var r = i + 1; r < n; r++) {
-      var absValue = Math.abs(mat[r][i]);
-      if (absValue > maxEl) {
-        maxEl = absValue;
-        maxRow = r;
-      }
-    }
-
-    if (maxEl === 0) {
-      return null; // matrix is singular
-    }
-
-    // Swap max row with i-th (current) row
-    var tmp = mat[maxRow];
-    mat[maxRow] = mat[i];
-    mat[i] = tmp;
-
-    // Subtract the i-th row to make all the remaining rows 0 in the i-th column
-    for (var j = i + 1; j < n; j++) {
-      var coef = -mat[j][i] / mat[i][i];
-      for (var k = i; k < n + 1; k++) {
-        if (i == k) {
-          mat[j][k] = 0;
-        } else {
-          mat[j][k] += coef * mat[i][k];
-        }
-      }
-    }
-  }
-
-  // Solve Ax=b for upper triangular matrix A (mat)
-  var x = new Array(n);
-  for (var l = n - 1; l >= 0; l--) {
-    x[l] = mat[l][n] / mat[l][l];
-    for (var m = l - 1; m >= 0; m--) {
-      mat[m][n] -= mat[m][l] * x[l];
-    }
-  }
-  return x;
-};
-
-
-/**
- * Converts radians to to degrees.
- *
- * @param {number} angleInRadians Angle in radians.
- * @return {number} Angle in degrees.
- */
-ol.math.toDegrees = function(angleInRadians) {
-  return angleInRadians * 180 / Math.PI;
-};
-
-
-/**
- * Converts degrees to radians.
- *
- * @param {number} angleInDegrees Angle in degrees.
- * @return {number} Angle in radians.
- */
-ol.math.toRadians = function(angleInDegrees) {
-  return angleInDegrees * Math.PI / 180;
-};
-
-/**
- * Returns the modulo of a / b, depending on the sign of b.
- *
- * @param {number} a Dividend.
- * @param {number} b Divisor.
- * @return {number} Modulo.
- */
-ol.math.modulo = function(a, b) {
-  var r = a % b;
-  return r * b < 0 ? r + b : r;
-};
-
-/**
- * Calculates the linearly interpolated value of x between a and b.
- *
- * @param {number} a Number
- * @param {number} b Number
- * @param {number} x Value to be interpolated.
- * @return {number} Interpolated value.
- */
-ol.math.lerp = function(a, b, x) {
-  return a + x * (b - a);
-};
-
-goog.provide('ol.CenterConstraint');
-
-goog.require('ol.math');
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @return {ol.CenterConstraintType} The constraint.
- */
-ol.CenterConstraint.createExtent = function(extent) {
-  return (
-      /**
-       * @param {ol.Coordinate|undefined} center Center.
-       * @return {ol.Coordinate|undefined} Center.
-       */
-      function(center) {
-        if (center) {
-          return [
-            ol.math.clamp(center[0], extent[0], extent[2]),
-            ol.math.clamp(center[1], extent[1], extent[3])
-          ];
-        } else {
-          return undefined;
-        }
-      });
-};
-
-
-/**
- * @param {ol.Coordinate|undefined} center Center.
- * @return {ol.Coordinate|undefined} Center.
- */
-ol.CenterConstraint.none = function(center) {
-  return center;
-};
-
-goog.provide('ol.Constraints');
-
-
-/**
- * @constructor
- * @param {ol.CenterConstraintType} centerConstraint Center constraint.
- * @param {ol.ResolutionConstraintType} resolutionConstraint
- *     Resolution constraint.
- * @param {ol.RotationConstraintType} rotationConstraint
- *     Rotation constraint.
- */
-ol.Constraints = function(centerConstraint, resolutionConstraint, rotationConstraint) {
-
-  /**
-   * @type {ol.CenterConstraintType}
-   */
-  this.center = centerConstraint;
-
-  /**
-   * @type {ol.ResolutionConstraintType}
-   */
-  this.resolution = resolutionConstraint;
-
-  /**
-   * @type {ol.RotationConstraintType}
-   */
-  this.rotation = rotationConstraint;
-
-};
-
-goog.provide('ol.obj');
-
-
-/**
- * Polyfill for Object.assign().  Assigns enumerable and own properties from
- * one or more source objects to a target object.
- *
- * @see https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
- * @param {!Object} target The target object.
- * @param {...Object} var_sources The source object(s).
- * @return {!Object} The modified target object.
- */
-ol.obj.assign = (typeof Object.assign === 'function') ? Object.assign : function(target, var_sources) {
-  if (target === undefined || target === null) {
-    throw new TypeError('Cannot convert undefined or null to object');
-  }
-
-  var output = Object(target);
-  for (var i = 1, ii = arguments.length; i < ii; ++i) {
-    var source = arguments[i];
-    if (source !== undefined && source !== null) {
-      for (var key in source) {
-        if (source.hasOwnProperty(key)) {
-          output[key] = source[key];
-        }
-      }
-    }
-  }
-  return output;
-};
-
-
-/**
- * Removes all properties from an object.
- * @param {Object} object The object to clear.
- */
-ol.obj.clear = function(object) {
-  for (var property in object) {
-    delete object[property];
-  }
-};
-
-
-/**
- * Get an array of property values from an object.
- * @param {Object<K,V>} object The object from which to get the values.
- * @return {!Array<V>} The property values.
- * @template K,V
- */
-ol.obj.getValues = function(object) {
-  var values = [];
-  for (var property in object) {
-    values.push(object[property]);
-  }
-  return values;
-};
-
-
-/**
- * Determine if an object has any properties.
- * @param {Object} object The object to check.
- * @return {boolean} The object is empty.
- */
-ol.obj.isEmpty = function(object) {
-  var property;
-  for (property in object) {
-    return false;
-  }
-  return !property;
-};
-
-goog.provide('ol.events');
-
-goog.require('ol.obj');
-
-
-/**
- * @param {ol.EventsKey} listenerObj Listener object.
- * @return {ol.EventsListenerFunctionType} Bound listener.
- */
-ol.events.bindListener_ = function(listenerObj) {
-  var boundListener = function(evt) {
-    var listener = listenerObj.listener;
-    var bindTo = listenerObj.bindTo || listenerObj.target;
-    if (listenerObj.callOnce) {
-      ol.events.unlistenByKey(listenerObj);
-    }
-    return listener.call(bindTo, evt);
-  };
-  listenerObj.boundListener = boundListener;
-  return boundListener;
-};
-
-
-/**
- * Finds the matching {@link ol.EventsKey} in the given listener
- * array.
- *
- * @param {!Array<!ol.EventsKey>} listeners Array of listeners.
- * @param {!Function} listener The listener function.
- * @param {Object=} opt_this The `this` value inside the listener.
- * @param {boolean=} opt_setDeleteIndex Set the deleteIndex on the matching
- *     listener, for {@link ol.events.unlistenByKey}.
- * @return {ol.EventsKey|undefined} The matching listener object.
- * @private
- */
-ol.events.findListener_ = function(listeners, listener, opt_this,
-    opt_setDeleteIndex) {
-  var listenerObj;
-  for (var i = 0, ii = listeners.length; i < ii; ++i) {
-    listenerObj = listeners[i];
-    if (listenerObj.listener === listener &&
-        listenerObj.bindTo === opt_this) {
-      if (opt_setDeleteIndex) {
-        listenerObj.deleteIndex = i;
-      }
-      return listenerObj;
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @param {ol.EventTargetLike} target Target.
- * @param {string} type Type.
- * @return {Array.<ol.EventsKey>|undefined} Listeners.
- */
-ol.events.getListeners = function(target, type) {
-  var listenerMap = target.ol_lm;
-  return listenerMap ? listenerMap[type] : undefined;
-};
-
-
-/**
- * Get the lookup of listeners.  If one does not exist on the target, it is
- * created.
- * @param {ol.EventTargetLike} target Target.
- * @return {!Object.<string, Array.<ol.EventsKey>>} Map of
- *     listeners by event type.
- * @private
- */
-ol.events.getListenerMap_ = function(target) {
-  var listenerMap = target.ol_lm;
-  if (!listenerMap) {
-    listenerMap = target.ol_lm = {};
-  }
-  return listenerMap;
-};
-
-
-/**
- * Clean up all listener objects of the given type.  All properties on the
- * listener objects will be removed, and if no listeners remain in the listener
- * map, it will be removed from the target.
- * @param {ol.EventTargetLike} target Target.
- * @param {string} type Type.
- * @private
- */
-ol.events.removeListeners_ = function(target, type) {
-  var listeners = ol.events.getListeners(target, type);
-  if (listeners) {
-    for (var i = 0, ii = listeners.length; i < ii; ++i) {
-      target.removeEventListener(type, listeners[i].boundListener);
-      ol.obj.clear(listeners[i]);
-    }
-    listeners.length = 0;
-    var listenerMap = target.ol_lm;
-    if (listenerMap) {
-      delete listenerMap[type];
-      if (Object.keys(listenerMap).length === 0) {
-        delete target.ol_lm;
-      }
-    }
-  }
-};
-
-
-/**
- * Registers an event listener on an event target. Inspired by
- * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}
- *
- * This function efficiently binds a `listener` to a `this` object, and returns
- * a key for use with {@link ol.events.unlistenByKey}.
- *
- * @param {ol.EventTargetLike} target Event target.
- * @param {string} type Event type.
- * @param {ol.EventsListenerFunctionType} listener Listener.
- * @param {Object=} opt_this Object referenced by the `this` keyword in the
- *     listener. Default is the `target`.
- * @param {boolean=} opt_once If true, add the listener as one-off listener.
- * @return {ol.EventsKey} Unique key for the listener.
- */
-ol.events.listen = function(target, type, listener, opt_this, opt_once) {
-  var listenerMap = ol.events.getListenerMap_(target);
-  var listeners = listenerMap[type];
-  if (!listeners) {
-    listeners = listenerMap[type] = [];
-  }
-  var listenerObj = ol.events.findListener_(listeners, listener, opt_this,
-      false);
-  if (listenerObj) {
-    if (!opt_once) {
-      // Turn one-off listener into a permanent one.
-      listenerObj.callOnce = false;
-    }
-  } else {
-    listenerObj = /** @type {ol.EventsKey} */ ({
-      bindTo: opt_this,
-      callOnce: !!opt_once,
-      listener: listener,
-      target: target,
-      type: type
-    });
-    target.addEventListener(type, ol.events.bindListener_(listenerObj));
-    listeners.push(listenerObj);
-  }
-
-  return listenerObj;
-};
-
-
-/**
- * Registers a one-off event listener on an event target. Inspired by
- * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}
- *
- * This function efficiently binds a `listener` as self-unregistering listener
- * to a `this` object, and returns a key for use with
- * {@link ol.events.unlistenByKey} in case the listener needs to be unregistered
- * before it is called.
- *
- * When {@link ol.events.listen} is called with the same arguments after this
- * function, the self-unregistering listener will be turned into a permanent
- * listener.
- *
- * @param {ol.EventTargetLike} target Event target.
- * @param {string} type Event type.
- * @param {ol.EventsListenerFunctionType} listener Listener.
- * @param {Object=} opt_this Object referenced by the `this` keyword in the
- *     listener. Default is the `target`.
- * @return {ol.EventsKey} Key for unlistenByKey.
- */
-ol.events.listenOnce = function(target, type, listener, opt_this) {
-  return ol.events.listen(target, type, listener, opt_this, true);
-};
-
-
-/**
- * Unregisters an event listener on an event target. Inspired by
- * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}
- *
- * To return a listener, this function needs to be called with the exact same
- * arguments that were used for a previous {@link ol.events.listen} call.
- *
- * @param {ol.EventTargetLike} target Event target.
- * @param {string} type Event type.
- * @param {ol.EventsListenerFunctionType} listener Listener.
- * @param {Object=} opt_this Object referenced by the `this` keyword in the
- *     listener. Default is the `target`.
- */
-ol.events.unlisten = function(target, type, listener, opt_this) {
-  var listeners = ol.events.getListeners(target, type);
-  if (listeners) {
-    var listenerObj = ol.events.findListener_(listeners, listener, opt_this,
-        true);
-    if (listenerObj) {
-      ol.events.unlistenByKey(listenerObj);
-    }
-  }
-};
-
-
-/**
- * Unregisters event listeners on an event target. Inspired by
- * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}
- *
- * The argument passed to this function is the key returned from
- * {@link ol.events.listen} or {@link ol.events.listenOnce}.
- *
- * @param {ol.EventsKey} key The key.
- */
-ol.events.unlistenByKey = function(key) {
-  if (key && key.target) {
-    key.target.removeEventListener(key.type, key.boundListener);
-    var listeners = ol.events.getListeners(key.target, key.type);
-    if (listeners) {
-      var i = 'deleteIndex' in key ? key.deleteIndex : listeners.indexOf(key);
-      if (i !== -1) {
-        listeners.splice(i, 1);
-      }
-      if (listeners.length === 0) {
-        ol.events.removeListeners_(key.target, key.type);
-      }
-    }
-    ol.obj.clear(key);
-  }
-};
-
-
-/**
- * Unregisters all event listeners on an event target. Inspired by
- * {@link https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html}
- *
- * @param {ol.EventTargetLike} target Target.
- */
-ol.events.unlistenAll = function(target) {
-  var listenerMap = ol.events.getListenerMap_(target);
-  for (var type in listenerMap) {
-    ol.events.removeListeners_(target, type);
-  }
-};
-
-goog.provide('ol.Disposable');
-
-goog.require('ol');
-
-/**
- * Objects that need to clean up after themselves.
- * @constructor
- */
-ol.Disposable = function() {};
-
-/**
- * The object has already been disposed.
- * @type {boolean}
- * @private
- */
-ol.Disposable.prototype.disposed_ = false;
-
-/**
- * Clean up.
- */
-ol.Disposable.prototype.dispose = function() {
-  if (!this.disposed_) {
-    this.disposed_ = true;
-    this.disposeInternal();
-  }
-};
-
-/**
- * Extension point for disposable objects.
- * @protected
- */
-ol.Disposable.prototype.disposeInternal = ol.nullFunction;
-
-goog.provide('ol.events.Event');
-
-
-/**
- * @classdesc
- * Stripped down implementation of the W3C DOM Level 2 Event interface.
- * @see {@link https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface}
- *
- * This implementation only provides `type` and `target` properties, and
- * `stopPropagation` and `preventDefault` methods. It is meant as base class
- * for higher level events defined in the library, and works with
- * {@link ol.events.EventTarget}.
- *
- * @constructor
- * @implements {oli.events.Event}
- * @param {string} type Type.
- */
-ol.events.Event = function(type) {
-
-  /**
-   * @type {boolean}
-   */
-  this.propagationStopped;
-
-  /**
-   * The event type.
-   * @type {string}
-   * @api stable
-   */
-  this.type = type;
-
-  /**
-   * The event target.
-   * @type {Object}
-   * @api stable
-   */
-  this.target = null;
-
-};
-
-
-/**
- * Stop event propagation.
- * @function
- * @api stable
- */
-ol.events.Event.prototype.preventDefault =
-
-/**
- * Stop event propagation.
- * @function
- * @api stable
- */
-ol.events.Event.prototype.stopPropagation = function() {
-  this.propagationStopped = true;
-};
-
-
-/**
- * @param {Event|ol.events.Event} evt Event
- */
-ol.events.Event.stopPropagation = function(evt) {
-  evt.stopPropagation();
-};
-
-
-/**
- * @param {Event|ol.events.Event} evt Event
- */
-ol.events.Event.preventDefault = function(evt) {
-  evt.preventDefault();
-};
-
-goog.provide('ol.events.EventTarget');
-
-goog.require('ol');
-goog.require('ol.Disposable');
-goog.require('ol.events');
-goog.require('ol.events.Event');
-
-
-/**
- * @classdesc
- * A simplified implementation of the W3C DOM Level 2 EventTarget interface.
- * @see {@link https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget}
- *
- * There are two important simplifications compared to the specification:
- *
- * 1. The handling of `useCapture` in `addEventListener` and
- *    `removeEventListener`. There is no real capture model.
- * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.
- *    There is no event target hierarchy. When a listener calls
- *    `stopPropagation` or `preventDefault` on an event object, it means that no
- *    more listeners after this one will be called. Same as when the listener
- *    returns false.
- *
- * @constructor
- * @extends {ol.Disposable}
- */
-ol.events.EventTarget = function() {
-
-  ol.Disposable.call(this);
-
-  /**
-   * @private
-   * @type {!Object.<string, number>}
-   */
-  this.pendingRemovals_ = {};
-
-  /**
-   * @private
-   * @type {!Object.<string, number>}
-   */
-  this.dispatching_ = {};
-
-  /**
-   * @private
-   * @type {!Object.<string, Array.<ol.EventsListenerFunctionType>>}
-   */
-  this.listeners_ = {};
-
-};
-ol.inherits(ol.events.EventTarget, ol.Disposable);
-
-
-/**
- * @param {string} type Type.
- * @param {ol.EventsListenerFunctionType} listener Listener.
- */
-ol.events.EventTarget.prototype.addEventListener = function(type, listener) {
-  var listeners = this.listeners_[type];
-  if (!listeners) {
-    listeners = this.listeners_[type] = [];
-  }
-  if (listeners.indexOf(listener) === -1) {
-    listeners.push(listener);
-  }
-};
-
-
-/**
- * @param {{type: string,
- *     target: (EventTarget|ol.events.EventTarget|undefined)}|ol.events.Event|
- *     string} event Event or event type.
- * @return {boolean|undefined} `false` if anyone called preventDefault on the
- *     event object or if any of the listeners returned false.
- */
-ol.events.EventTarget.prototype.dispatchEvent = function(event) {
-  var evt = typeof event === 'string' ? new ol.events.Event(event) : event;
-  var type = evt.type;
-  evt.target = this;
-  var listeners = this.listeners_[type];
-  var propagate;
-  if (listeners) {
-    if (!(type in this.dispatching_)) {
-      this.dispatching_[type] = 0;
-      this.pendingRemovals_[type] = 0;
-    }
-    ++this.dispatching_[type];
-    for (var i = 0, ii = listeners.length; i < ii; ++i) {
-      if (listeners[i].call(this, evt) === false || evt.propagationStopped) {
-        propagate = false;
-        break;
-      }
-    }
-    --this.dispatching_[type];
-    if (this.dispatching_[type] === 0) {
-      var pendingRemovals = this.pendingRemovals_[type];
-      delete this.pendingRemovals_[type];
-      while (pendingRemovals--) {
-        this.removeEventListener(type, ol.nullFunction);
-      }
-      delete this.dispatching_[type];
-    }
-    return propagate;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.events.EventTarget.prototype.disposeInternal = function() {
-  ol.events.unlistenAll(this);
-};
-
-
-/**
- * Get the listeners for a specified event type. Listeners are returned in the
- * order that they will be called in.
- *
- * @param {string} type Type.
- * @return {Array.<ol.EventsListenerFunctionType>} Listeners.
- */
-ol.events.EventTarget.prototype.getListeners = function(type) {
-  return this.listeners_[type];
-};
-
-
-/**
- * @param {string=} opt_type Type. If not provided,
- *     `true` will be returned if this EventTarget has any listeners.
- * @return {boolean} Has listeners.
- */
-ol.events.EventTarget.prototype.hasListener = function(opt_type) {
-  return opt_type ?
-      opt_type in this.listeners_ :
-      Object.keys(this.listeners_).length > 0;
-};
-
-
-/**
- * @param {string} type Type.
- * @param {ol.EventsListenerFunctionType} listener Listener.
- */
-ol.events.EventTarget.prototype.removeEventListener = function(type, listener) {
-  var listeners = this.listeners_[type];
-  if (listeners) {
-    var index = listeners.indexOf(listener);
-    ol.DEBUG && console.assert(index != -1, 'listener not found');
-    if (type in this.pendingRemovals_) {
-      // make listener a no-op, and remove later in #dispatchEvent()
-      listeners[index] = ol.nullFunction;
-      ++this.pendingRemovals_[type];
-    } else {
-      listeners.splice(index, 1);
-      if (listeners.length === 0) {
-        delete this.listeners_[type];
-      }
-    }
-  }
-};
-
-goog.provide('ol.events.EventType');
-
-/**
- * @enum {string}
- * @const
- */
-ol.events.EventType = {
-  /**
-   * Generic change event. Triggered when the revision counter is increased.
-   * @event ol.events.Event#change
-   * @api
-   */
-  CHANGE: 'change',
-
-  CLICK: 'click',
-  DBLCLICK: 'dblclick',
-  DRAGENTER: 'dragenter',
-  DRAGOVER: 'dragover',
-  DROP: 'drop',
-  ERROR: 'error',
-  KEYDOWN: 'keydown',
-  KEYPRESS: 'keypress',
-  LOAD: 'load',
-  MOUSEDOWN: 'mousedown',
-  MOUSEMOVE: 'mousemove',
-  MOUSEOUT: 'mouseout',
-  MOUSEUP: 'mouseup',
-  MOUSEWHEEL: 'mousewheel',
-  MSPOINTERDOWN: 'mspointerdown',
-  RESIZE: 'resize',
-  TOUCHSTART: 'touchstart',
-  TOUCHMOVE: 'touchmove',
-  TOUCHEND: 'touchend',
-  WHEEL: 'wheel'
-};
-
-goog.provide('ol.Observable');
-
-goog.require('ol');
-goog.require('ol.events');
-goog.require('ol.events.EventTarget');
-goog.require('ol.events.EventType');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * An event target providing convenient methods for listener registration
- * and unregistration. A generic `change` event is always available through
- * {@link ol.Observable#changed}.
- *
- * @constructor
- * @extends {ol.events.EventTarget}
- * @fires ol.events.Event
- * @struct
- * @api stable
- */
-ol.Observable = function() {
-
-  ol.events.EventTarget.call(this);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.revision_ = 0;
-
-};
-ol.inherits(ol.Observable, ol.events.EventTarget);
-
-
-/**
- * Removes an event listener using the key returned by `on()` or `once()`.
- * @param {ol.EventsKey|Array.<ol.EventsKey>} key The key returned by `on()`
- *     or `once()` (or an array of keys).
- * @api stable
- */
-ol.Observable.unByKey = function(key) {
-  if (Array.isArray(key)) {
-    for (var i = 0, ii = key.length; i < ii; ++i) {
-      ol.events.unlistenByKey(key[i]);
-    }
-  } else {
-    ol.events.unlistenByKey(/** @type {ol.EventsKey} */ (key));
-  }
-};
-
-
-/**
- * Increases the revision counter and dispatches a 'change' event.
- * @api
- */
-ol.Observable.prototype.changed = function() {
-  ++this.revision_;
-  this.dispatchEvent(ol.events.EventType.CHANGE);
-};
-
-
-/**
- * Dispatches an event and calls all listeners listening for events
- * of this type. The event parameter can either be a string or an
- * Object with a `type` property.
- *
- * @param {{type: string,
- *     target: (EventTarget|ol.events.EventTarget|undefined)}|ol.events.Event|
- *     string} event Event object.
- * @function
- * @api
- */
-ol.Observable.prototype.dispatchEvent;
-
-
-/**
- * Get the version number for this object.  Each time the object is modified,
- * its version number will be incremented.
- * @return {number} Revision.
- * @api
- */
-ol.Observable.prototype.getRevision = function() {
-  return this.revision_;
-};
-
-
-/**
- * Listen for a certain type of event.
- * @param {string|Array.<string>} type The event type or array of event types.
- * @param {function(?): ?} listener The listener function.
- * @param {Object=} opt_this The object to use as `this` in `listener`.
- * @return {ol.EventsKey|Array.<ol.EventsKey>} Unique key for the listener. If
- *     called with an array of event types as the first argument, the return
- *     will be an array of keys.
- * @api stable
- */
-ol.Observable.prototype.on = function(type, listener, opt_this) {
-  if (Array.isArray(type)) {
-    var len = type.length;
-    var keys = new Array(len);
-    for (var i = 0; i < len; ++i) {
-      keys[i] = ol.events.listen(this, type[i], listener, opt_this);
-    }
-    return keys;
-  } else {
-    return ol.events.listen(
-        this, /** @type {string} */ (type), listener, opt_this);
-  }
-};
-
-
-/**
- * Listen once for a certain type of event.
- * @param {string|Array.<string>} type The event type or array of event types.
- * @param {function(?): ?} listener The listener function.
- * @param {Object=} opt_this The object to use as `this` in `listener`.
- * @return {ol.EventsKey|Array.<ol.EventsKey>} Unique key for the listener. If
- *     called with an array of event types as the first argument, the return
- *     will be an array of keys.
- * @api stable
- */
-ol.Observable.prototype.once = function(type, listener, opt_this) {
-  if (Array.isArray(type)) {
-    var len = type.length;
-    var keys = new Array(len);
-    for (var i = 0; i < len; ++i) {
-      keys[i] = ol.events.listenOnce(this, type[i], listener, opt_this);
-    }
-    return keys;
-  } else {
-    return ol.events.listenOnce(
-        this, /** @type {string} */ (type), listener, opt_this);
-  }
-};
-
-
-/**
- * Unlisten for a certain type of event.
- * @param {string|Array.<string>} type The event type or array of event types.
- * @param {function(?): ?} listener The listener function.
- * @param {Object=} opt_this The object which was used as `this` by the
- * `listener`.
- * @api stable
- */
-ol.Observable.prototype.un = function(type, listener, opt_this) {
-  if (Array.isArray(type)) {
-    for (var i = 0, ii = type.length; i < ii; ++i) {
-      ol.events.unlisten(this, type[i], listener, opt_this);
-    }
-    return;
-  } else {
-    ol.events.unlisten(this, /** @type {string} */ (type), listener, opt_this);
-  }
-};
-
-
-/**
- * Removes an event listener using the key returned by `on()` or `once()`.
- * Note that using the {@link ol.Observable.unByKey} static function is to
- * be preferred.
- * @param {ol.EventsKey|Array.<ol.EventsKey>} key The key returned by `on()`
- *     or `once()` (or an array of keys).
- * @function
- * @api stable
- */
-ol.Observable.prototype.unByKey = ol.Observable.unByKey;
-
-goog.provide('ol.Object');
-goog.provide('ol.ObjectEvent');
-goog.provide('ol.ObjectEventType');
-
-goog.require('ol');
-goog.require('ol.Observable');
-goog.require('ol.events.Event');
-goog.require('ol.obj');
-
-
-/**
- * @enum {string}
- */
-ol.ObjectEventType = {
-  /**
-   * Triggered when a property is changed.
-   * @event ol.ObjectEvent#propertychange
-   * @api stable
-   */
-  PROPERTYCHANGE: 'propertychange'
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.Object} instances are instances of this type.
- *
- * @param {string} type The event type.
- * @param {string} key The property name.
- * @param {*} oldValue The old value for `key`.
- * @extends {ol.events.Event}
- * @implements {oli.ObjectEvent}
- * @constructor
- */
-ol.ObjectEvent = function(type, key, oldValue) {
-  ol.events.Event.call(this, type);
-
-  /**
-   * The name of the property whose value is changing.
-   * @type {string}
-   * @api stable
-   */
-  this.key = key;
-
-  /**
-   * The old value. To get the new value use `e.target.get(e.key)` where
-   * `e` is the event object.
-   * @type {*}
-   * @api stable
-   */
-  this.oldValue = oldValue;
-
-};
-ol.inherits(ol.ObjectEvent, ol.events.Event);
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Most non-trivial classes inherit from this.
- *
- * This extends {@link ol.Observable} with observable properties, where each
- * property is observable as well as the object as a whole.
- *
- * Classes that inherit from this have pre-defined properties, to which you can
- * add your owns. The pre-defined properties are listed in this documentation as
- * 'Observable Properties', and have their own accessors; for example,
- * {@link ol.Map} has a `target` property, accessed with `getTarget()`  and
- * changed with `setTarget()`. Not all properties are however settable. There
- * are also general-purpose accessors `get()` and `set()`. For example,
- * `get('target')` is equivalent to `getTarget()`.
- *
- * The `set` accessors trigger a change event, and you can monitor this by
- * registering a listener. For example, {@link ol.View} has a `center`
- * property, so `view.on('change:center', function(evt) {...});` would call the
- * function whenever the value of the center property changes. Within the
- * function, `evt.target` would be the view, so `evt.target.getCenter()` would
- * return the new center.
- *
- * You can add your own observable properties with
- * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.
- * You can listen for changes on that property value with
- * `object.on('change:prop', listener)`. You can get a list of all
- * properties with {@link ol.Object#getProperties object.getProperties()}.
- *
- * Note that the observable properties are separate from standard JS properties.
- * You can, for example, give your map object a title with
- * `map.title='New title'` and with `map.set('title', 'Another title')`. The
- * first will be a `hasOwnProperty`; the second will appear in
- * `getProperties()`. Only the second is observable.
- *
- * Properties can be deleted by using the unset method. E.g.
- * object.unset('foo').
- *
- * @constructor
- * @extends {ol.Observable}
- * @param {Object.<string, *>=} opt_values An object with key-value pairs.
- * @fires ol.ObjectEvent
- * @api
- */
-ol.Object = function(opt_values) {
-  ol.Observable.call(this);
-
-  // Call ol.getUid to ensure that the order of objects' ids is the same as
-  // the order in which they were created.  This also helps to ensure that
-  // object properties are always added in the same order, which helps many
-  // JavaScript engines generate faster code.
-  ol.getUid(this);
-
-  /**
-   * @private
-   * @type {!Object.<string, *>}
-   */
-  this.values_ = {};
-
-  if (opt_values !== undefined) {
-    this.setProperties(opt_values);
-  }
-};
-ol.inherits(ol.Object, ol.Observable);
-
-
-/**
- * @private
- * @type {Object.<string, string>}
- */
-ol.Object.changeEventTypeCache_ = {};
-
-
-/**
- * @param {string} key Key name.
- * @return {string} Change name.
- */
-ol.Object.getChangeEventType = function(key) {
-  return ol.Object.changeEventTypeCache_.hasOwnProperty(key) ?
-      ol.Object.changeEventTypeCache_[key] :
-      (ol.Object.changeEventTypeCache_[key] = 'change:' + key);
-};
-
-
-/**
- * Gets a value.
- * @param {string} key Key name.
- * @return {*} Value.
- * @api stable
- */
-ol.Object.prototype.get = function(key) {
-  var value;
-  if (this.values_.hasOwnProperty(key)) {
-    value = this.values_[key];
-  }
-  return value;
-};
-
-
-/**
- * Get a list of object property names.
- * @return {Array.<string>} List of property names.
- * @api stable
- */
-ol.Object.prototype.getKeys = function() {
-  return Object.keys(this.values_);
-};
-
-
-/**
- * Get an object of all property names and values.
- * @return {Object.<string, *>} Object.
- * @api stable
- */
-ol.Object.prototype.getProperties = function() {
-  return ol.obj.assign({}, this.values_);
-};
-
-
-/**
- * @param {string} key Key name.
- * @param {*} oldValue Old value.
- */
-ol.Object.prototype.notify = function(key, oldValue) {
-  var eventType;
-  eventType = ol.Object.getChangeEventType(key);
-  this.dispatchEvent(new ol.ObjectEvent(eventType, key, oldValue));
-  eventType = ol.ObjectEventType.PROPERTYCHANGE;
-  this.dispatchEvent(new ol.ObjectEvent(eventType, key, oldValue));
-};
-
-
-/**
- * Sets a value.
- * @param {string} key Key name.
- * @param {*} value Value.
- * @param {boolean=} opt_silent Update without triggering an event.
- * @api stable
- */
-ol.Object.prototype.set = function(key, value, opt_silent) {
-  if (opt_silent) {
-    this.values_[key] = value;
-  } else {
-    var oldValue = this.values_[key];
-    this.values_[key] = value;
-    if (oldValue !== value) {
-      this.notify(key, oldValue);
-    }
-  }
-};
-
-
-/**
- * Sets a collection of key-value pairs.  Note that this changes any existing
- * properties and adds new ones (it does not remove any existing properties).
- * @param {Object.<string, *>} values Values.
- * @param {boolean=} opt_silent Update without triggering an event.
- * @api stable
- */
-ol.Object.prototype.setProperties = function(values, opt_silent) {
-  var key;
-  for (key in values) {
-    this.set(key, values[key], opt_silent);
-  }
-};
-
-
-/**
- * Unsets a property.
- * @param {string} key Key name.
- * @param {boolean=} opt_silent Unset without triggering an event.
- * @api stable
- */
-ol.Object.prototype.unset = function(key, opt_silent) {
-  if (key in this.values_) {
-    var oldValue = this.values_[key];
-    delete this.values_[key];
-    if (!opt_silent) {
-      this.notify(key, oldValue);
-    }
-  }
-};
-
-goog.provide('ol.array');
-
-goog.require('ol');
-
-
-/**
- * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.
- * https://github.com/darkskyapp/binary-search
- *
- * @param {Array.<*>} haystack Items to search through.
- * @param {*} needle The item to look for.
- * @param {Function=} opt_comparator Comparator function.
- * @return {number} The index of the item if found, -1 if not.
- */
-ol.array.binarySearch = function(haystack, needle, opt_comparator) {
-  var mid, cmp;
-  var comparator = opt_comparator || ol.array.numberSafeCompareFunction;
-  var low = 0;
-  var high = haystack.length;
-  var found = false;
-
-  while (low < high) {
-    /* Note that "(low + high) >>> 1" may overflow, and results in a typecast
-     * to double (which gives the wrong results). */
-    mid = low + (high - low >> 1);
-    cmp = +comparator(haystack[mid], needle);
-
-    if (cmp < 0.0) { /* Too low. */
-      low  = mid + 1;
-
-    } else { /* Key found or too high */
-      high = mid;
-      found = !cmp;
-    }
-  }
-
-  /* Key not found. */
-  return found ? low : ~low;
-};
-
-
-/**
- * Compare function for array sort that is safe for numbers.
- * @param {*} a The first object to be compared.
- * @param {*} b The second object to be compared.
- * @return {number} A negative number, zero, or a positive number as the first
- *     argument is less than, equal to, or greater than the second.
- */
-ol.array.numberSafeCompareFunction = function(a, b) {
-  return a > b ? 1 : a < b ? -1 : 0;
-};
-
-
-/**
- * Whether the array contains the given object.
- * @param {Array.<*>} arr The array to test for the presence of the element.
- * @param {*} obj The object for which to test.
- * @return {boolean} The object is in the array.
- */
-ol.array.includes = function(arr, obj) {
-  return arr.indexOf(obj) >= 0;
-};
-
-
-/**
- * @param {Array.<number>} arr Array.
- * @param {number} target Target.
- * @param {number} direction 0 means return the nearest, > 0
- *    means return the largest nearest, < 0 means return the
- *    smallest nearest.
- * @return {number} Index.
- */
-ol.array.linearFindNearest = function(arr, target, direction) {
-  var n = arr.length;
-  if (arr[0] <= target) {
-    return 0;
-  } else if (target <= arr[n - 1]) {
-    return n - 1;
-  } else {
-    var i;
-    if (direction > 0) {
-      for (i = 1; i < n; ++i) {
-        if (arr[i] < target) {
-          return i - 1;
-        }
-      }
-    } else if (direction < 0) {
-      for (i = 1; i < n; ++i) {
-        if (arr[i] <= target) {
-          return i;
-        }
-      }
-    } else {
-      for (i = 1; i < n; ++i) {
-        if (arr[i] == target) {
-          return i;
-        } else if (arr[i] < target) {
-          if (arr[i - 1] - target < target - arr[i]) {
-            return i - 1;
-          } else {
-            return i;
-          }
-        }
-      }
-    }
-    return n - 1;
-  }
-};
-
-
-/**
- * @param {Array.<*>} arr Array.
- * @param {number} begin Begin index.
- * @param {number} end End index.
- */
-ol.array.reverseSubArray = function(arr, begin, end) {
-  ol.DEBUG && console.assert(begin >= 0,
-      'Array begin index should be equal to or greater than 0');
-  ol.DEBUG && console.assert(end < arr.length,
-      'Array end index should be less than the array length');
-  while (begin < end) {
-    var tmp = arr[begin];
-    arr[begin] = arr[end];
-    arr[end] = tmp;
-    ++begin;
-    --end;
-  }
-};
-
-
-/**
- * @param {Array.<*>} arr Array.
- * @return {!Array.<?>} Flattened Array.
- */
-ol.array.flatten = function(arr) {
-  var data = arr.reduce(function(flattened, value) {
-    if (Array.isArray(value)) {
-      return flattened.concat(ol.array.flatten(value));
-    } else {
-      return flattened.concat(value);
-    }
-  }, []);
-  return data;
-};
-
-
-/**
- * @param {Array.<VALUE>} arr The array to modify.
- * @param {Array.<VALUE>|VALUE} data The elements or arrays of elements
- *     to add to arr.
- * @template VALUE
- */
-ol.array.extend = function(arr, data) {
-  var i;
-  var extension = Array.isArray(data) ? data : [data];
-  var length = extension.length;
-  for (i = 0; i < length; i++) {
-    arr[arr.length] = extension[i];
-  }
-};
-
-
-/**
- * @param {Array.<VALUE>} arr The array to modify.
- * @param {VALUE} obj The element to remove.
- * @template VALUE
- * @return {boolean} If the element was removed.
- */
-ol.array.remove = function(arr, obj) {
-  var i = arr.indexOf(obj);
-  var found = i > -1;
-  if (found) {
-    arr.splice(i, 1);
-  }
-  return found;
-};
-
-
-/**
- * @param {Array.<VALUE>} arr The array to search in.
- * @param {function(VALUE, number, ?) : boolean} func The function to compare.
- * @template VALUE
- * @return {VALUE} The element found.
- */
-ol.array.find = function(arr, func) {
-  var length = arr.length >>> 0;
-  var value;
-
-  for (var i = 0; i < length; i++) {
-    value = arr[i];
-    if (func(value, i, arr)) {
-      return value;
-    }
-  }
-  return null;
-};
-
-
-/**
- * @param {Array|Uint8ClampedArray} arr1 The first array to compare.
- * @param {Array|Uint8ClampedArray} arr2 The second array to compare.
- * @return {boolean} Whether the two arrays are equal.
- */
-ol.array.equals = function(arr1, arr2) {
-  var len1 = arr1.length;
-  if (len1 !== arr2.length) {
-    return false;
-  }
-  for (var i = 0; i < len1; i++) {
-    if (arr1[i] !== arr2[i]) {
-      return false;
-    }
-  }
-  return true;
-};
-
-
-/**
- * @param {Array.<*>} arr The array to sort (modifies original).
- * @param {Function} compareFnc Comparison function.
- */
-ol.array.stableSort = function(arr, compareFnc) {
-  var length = arr.length;
-  var tmp = Array(arr.length);
-  var i;
-  for (i = 0; i < length; i++) {
-    tmp[i] = {index: i, value: arr[i]};
-  }
-  tmp.sort(function(a, b) {
-    return compareFnc(a.value, b.value) || a.index - b.index;
-  });
-  for (i = 0; i < arr.length; i++) {
-    arr[i] = tmp[i].value;
-  }
-};
-
-
-/**
- * @param {Array.<*>} arr The array to search in.
- * @param {Function} func Comparison function.
- * @return {number} Return index.
- */
-ol.array.findIndex = function(arr, func) {
-  var index;
-  var found = !arr.every(function(el, idx) {
-    index = idx;
-    return !func(el, idx, arr);
-  });
-  return found ? index : -1;
-};
-
-
-/**
- * @param {Array.<*>} arr The array to test.
- * @param {Function=} opt_func Comparison function.
- * @param {boolean=} opt_strict Strictly sorted (default false).
- * @return {boolean} Return index.
- */
-ol.array.isSorted = function(arr, opt_func, opt_strict) {
-  var compare = opt_func || ol.array.numberSafeCompareFunction;
-  return arr.every(function(currentVal, index) {
-    if (index === 0) {
-      return true;
-    }
-    var res = compare(arr[index - 1], currentVal);
-    return !(res > 0 || opt_strict && res === 0);
-  });
-};
-
-goog.provide('ol.ResolutionConstraint');
-
-goog.require('ol.array');
-goog.require('ol.math');
-
-
-/**
- * @param {Array.<number>} resolutions Resolutions.
- * @return {ol.ResolutionConstraintType} Zoom function.
- */
-ol.ResolutionConstraint.createSnapToResolutions = function(resolutions) {
-  return (
-      /**
-       * @param {number|undefined} resolution Resolution.
-       * @param {number} delta Delta.
-       * @param {number} direction Direction.
-       * @return {number|undefined} Resolution.
-       */
-      function(resolution, delta, direction) {
-        if (resolution !== undefined) {
-          var z =
-              ol.array.linearFindNearest(resolutions, resolution, direction);
-          z = ol.math.clamp(z + delta, 0, resolutions.length - 1);
-          var index = Math.floor(z);
-          if (z != index && index < resolutions.length - 1) {
-            var power = resolutions[index] / resolutions[index + 1];
-            return resolutions[index] / Math.pow(power, z - index);
-          } else {
-            return resolutions[index];
-          }
-        } else {
-          return undefined;
-        }
-      });
-};
-
-
-/**
- * @param {number} power Power.
- * @param {number} maxResolution Maximum resolution.
- * @param {number=} opt_maxLevel Maximum level.
- * @return {ol.ResolutionConstraintType} Zoom function.
- */
-ol.ResolutionConstraint.createSnapToPower = function(power, maxResolution, opt_maxLevel) {
-  return (
-      /**
-       * @param {number|undefined} resolution Resolution.
-       * @param {number} delta Delta.
-       * @param {number} direction Direction.
-       * @return {number|undefined} Resolution.
-       */
-      function(resolution, delta, direction) {
-        if (resolution !== undefined) {
-          var offset = -direction / 2 + 0.5;
-          var oldLevel = Math.floor(
-              Math.log(maxResolution / resolution) / Math.log(power) + offset);
-          var newLevel = Math.max(oldLevel + delta, 0);
-          if (opt_maxLevel !== undefined) {
-            newLevel = Math.min(newLevel, opt_maxLevel);
-          }
-          return maxResolution / Math.pow(power, newLevel);
-        } else {
-          return undefined;
-        }
-      });
-};
-
-goog.provide('ol.RotationConstraint');
-
-goog.require('ol.math');
-
-
-/**
- * @param {number|undefined} rotation Rotation.
- * @param {number} delta Delta.
- * @return {number|undefined} Rotation.
- */
-ol.RotationConstraint.disable = function(rotation, delta) {
-  if (rotation !== undefined) {
-    return 0;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {number|undefined} rotation Rotation.
- * @param {number} delta Delta.
- * @return {number|undefined} Rotation.
- */
-ol.RotationConstraint.none = function(rotation, delta) {
-  if (rotation !== undefined) {
-    return rotation + delta;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {number} n N.
- * @return {ol.RotationConstraintType} Rotation constraint.
- */
-ol.RotationConstraint.createSnapToN = function(n) {
-  var theta = 2 * Math.PI / n;
-  return (
-      /**
-       * @param {number|undefined} rotation Rotation.
-       * @param {number} delta Delta.
-       * @return {number|undefined} Rotation.
-       */
-      function(rotation, delta) {
-        if (rotation !== undefined) {
-          rotation = Math.floor((rotation + delta) / theta + 0.5) * theta;
-          return rotation;
-        } else {
-          return undefined;
-        }
-      });
-};
-
-
-/**
- * @param {number=} opt_tolerance Tolerance.
- * @return {ol.RotationConstraintType} Rotation constraint.
- */
-ol.RotationConstraint.createSnapToZero = function(opt_tolerance) {
-  var tolerance = opt_tolerance || ol.math.toRadians(5);
-  return (
-      /**
-       * @param {number|undefined} rotation Rotation.
-       * @param {number} delta Delta.
-       * @return {number|undefined} Rotation.
-       */
-      function(rotation, delta) {
-        if (rotation !== undefined) {
-          if (Math.abs(rotation + delta) <= tolerance) {
-            return 0;
-          } else {
-            return rotation + delta;
-          }
-        } else {
-          return undefined;
-        }
-      });
-};
-
-goog.provide('ol.string');
-
-/**
- * @param {number} number Number to be formatted
- * @param {number} width The desired width
- * @param {number=} opt_precision Precision of the output string (i.e. number of decimal places)
- * @returns {string} Formatted string
-*/
-ol.string.padNumber = function(number, width, opt_precision) {
-  var numberString = opt_precision !== undefined ? number.toFixed(opt_precision) : '' + number;
-  var decimal = numberString.indexOf('.');
-  decimal = decimal === -1 ? numberString.length : decimal;
-  return decimal > width ? numberString : new Array(1 + width - decimal).join('0') + numberString;
-};
-
-/**
- * Adapted from https://github.com/omichelsen/compare-versions/blob/master/index.js
- * @param {string|number} v1 First version
- * @param {string|number} v2 Second version
- * @returns {number} Value
- */
-ol.string.compareVersions = function(v1, v2) {
-  var s1 = ('' + v1).split('.');
-  var s2 = ('' + v2).split('.');
-
-  for (var i = 0; i < Math.max(s1.length, s2.length); i++) {
-    var n1 = parseInt(s1[i] || '0', 10);
-    var n2 = parseInt(s2[i] || '0', 10);
-
-    if (n1 > n2) return 1;
-    if (n2 > n1) return -1;
-  }
-
-  return 0;
-};
-
-goog.provide('ol.coordinate');
-
-goog.require('ol.math');
-goog.require('ol.string');
-
-
-/**
- * Add `delta` to `coordinate`. `coordinate` is modified in place and returned
- * by the function.
- *
- * Example:
- *
- *     var coord = [7.85, 47.983333];
- *     ol.coordinate.add(coord, [-2, 4]);
- *     // coord is now [5.85, 51.983333]
- *
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {ol.Coordinate} delta Delta.
- * @return {ol.Coordinate} The input coordinate adjusted by the given delta.
- * @api stable
- */
-ol.coordinate.add = function(coordinate, delta) {
-  coordinate[0] += delta[0];
-  coordinate[1] += delta[1];
-  return coordinate;
-};
-
-
-/**
- * Calculates the point closest to the passed coordinate on the passed segment.
- * This is the foot of the perpendicular of the coordinate to the segment when
- * the foot is on the segment, or the closest segment coordinate when the foot
- * is outside the segment.
- *
- * @param {ol.Coordinate} coordinate The coordinate.
- * @param {Array.<ol.Coordinate>} segment The two coordinates of the segment.
- * @return {ol.Coordinate} The foot of the perpendicular of the coordinate to
- *     the segment.
- */
-ol.coordinate.closestOnSegment = function(coordinate, segment) {
-  var x0 = coordinate[0];
-  var y0 = coordinate[1];
-  var start = segment[0];
-  var end = segment[1];
-  var x1 = start[0];
-  var y1 = start[1];
-  var x2 = end[0];
-  var y2 = end[1];
-  var dx = x2 - x1;
-  var dy = y2 - y1;
-  var along = (dx === 0 && dy === 0) ? 0 :
-      ((dx * (x0 - x1)) + (dy * (y0 - y1))) / ((dx * dx + dy * dy) || 0);
-  var x, y;
-  if (along <= 0) {
-    x = x1;
-    y = y1;
-  } else if (along >= 1) {
-    x = x2;
-    y = y2;
-  } else {
-    x = x1 + along * dx;
-    y = y1 + along * dy;
-  }
-  return [x, y];
-};
-
-
-/**
- * Returns a {@link ol.CoordinateFormatType} function that can be used to format
- * a {ol.Coordinate} to a string.
- *
- * Example without specifying the fractional digits:
- *
- *     var coord = [7.85, 47.983333];
- *     var stringifyFunc = ol.coordinate.createStringXY();
- *     var out = stringifyFunc(coord);
- *     // out is now '8, 48'
- *
- * Example with explicitly specifying 2 fractional digits:
- *
- *     var coord = [7.85, 47.983333];
- *     var stringifyFunc = ol.coordinate.createStringXY(2);
- *     var out = stringifyFunc(coord);
- *     // out is now '7.85, 47.98'
- *
- * @param {number=} opt_fractionDigits The number of digits to include
- *    after the decimal point. Default is `0`.
- * @return {ol.CoordinateFormatType} Coordinate format.
- * @api stable
- */
-ol.coordinate.createStringXY = function(opt_fractionDigits) {
-  return (
-      /**
-       * @param {ol.Coordinate|undefined} coordinate Coordinate.
-       * @return {string} String XY.
-       */
-      function(coordinate) {
-        return ol.coordinate.toStringXY(coordinate, opt_fractionDigits);
-      });
-};
-
-
-/**
- * @private
- * @param {number} degrees Degrees.
- * @param {string} hemispheres Hemispheres.
- * @param {number=} opt_fractionDigits The number of digits to include
- *    after the decimal point. Default is `0`.
- * @return {string} String.
- */
-ol.coordinate.degreesToStringHDMS_ = function(degrees, hemispheres, opt_fractionDigits) {
-  var normalizedDegrees = ol.math.modulo(degrees + 180, 360) - 180;
-  var x = Math.abs(3600 * normalizedDegrees);
-  var dflPrecision = opt_fractionDigits || 0;
-  return Math.floor(x / 3600) + '\u00b0 ' +
-      ol.string.padNumber(Math.floor((x / 60) % 60), 2) + '\u2032 ' +
-      ol.string.padNumber((x % 60), 2, dflPrecision) + '\u2033 ' +
-      hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0);
-};
-
-
-/**
- * Transforms the given {@link ol.Coordinate} to a string using the given string
- * template. The strings `{x}` and `{y}` in the template will be replaced with
- * the first and second coordinate values respectively.
- *
- * Example without specifying the fractional digits:
- *
- *     var coord = [7.85, 47.983333];
- *     var template = 'Coordinate is ({x}|{y}).';
- *     var out = ol.coordinate.format(coord, template);
- *     // out is now 'Coordinate is (8|48).'
- *
- * Example explicitly specifying the fractional digits:
- *
- *     var coord = [7.85, 47.983333];
- *     var template = 'Coordinate is ({x}|{y}).';
- *     var out = ol.coordinate.format(coord, template, 2);
- *     // out is now 'Coordinate is (7.85|47.98).'
- *
- * @param {ol.Coordinate|undefined} coordinate Coordinate.
- * @param {string} template A template string with `{x}` and `{y}` placeholders
- *     that will be replaced by first and second coordinate values.
- * @param {number=} opt_fractionDigits The number of digits to include
- *    after the decimal point. Default is `0`.
- * @return {string} Formatted coordinate.
- * @api stable
- */
-ol.coordinate.format = function(coordinate, template, opt_fractionDigits) {
-  if (coordinate) {
-    return template
-      .replace('{x}', coordinate[0].toFixed(opt_fractionDigits))
-      .replace('{y}', coordinate[1].toFixed(opt_fractionDigits));
-  } else {
-    return '';
-  }
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate1 First coordinate.
- * @param {ol.Coordinate} coordinate2 Second coordinate.
- * @return {boolean} Whether the passed coordinates are equal.
- */
-ol.coordinate.equals = function(coordinate1, coordinate2) {
-  var equals = true;
-  for (var i = coordinate1.length - 1; i >= 0; --i) {
-    if (coordinate1[i] != coordinate2[i]) {
-      equals = false;
-      break;
-    }
-  }
-  return equals;
-};
-
-
-/**
- * Rotate `coordinate` by `angle`. `coordinate` is modified in place and
- * returned by the function.
- *
- * Example:
- *
- *     var coord = [7.85, 47.983333];
- *     var rotateRadians = Math.PI / 2; // 90 degrees
- *     ol.coordinate.rotate(coord, rotateRadians);
- *     // coord is now [-47.983333, 7.85]
- *
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} angle Angle in radian.
- * @return {ol.Coordinate} Coordinate.
- * @api stable
- */
-ol.coordinate.rotate = function(coordinate, angle) {
-  var cosAngle = Math.cos(angle);
-  var sinAngle = Math.sin(angle);
-  var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;
-  var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;
-  coordinate[0] = x;
-  coordinate[1] = y;
-  return coordinate;
-};
-
-
-/**
- * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned
- * by the function.
- *
- * Example:
- *
- *     var coord = [7.85, 47.983333];
- *     var scale = 1.2;
- *     ol.coordinate.scale(coord, scale);
- *     // coord is now [9.42, 57.5799996]
- *
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} scale Scale factor.
- * @return {ol.Coordinate} Coordinate.
- */
-ol.coordinate.scale = function(coordinate, scale) {
-  coordinate[0] *= scale;
-  coordinate[1] *= scale;
-  return coordinate;
-};
-
-
-/**
- * Subtract `delta` to `coordinate`. `coordinate` is modified in place and
- * returned by the function.
- *
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {ol.Coordinate} delta Delta.
- * @return {ol.Coordinate} Coordinate.
- */
-ol.coordinate.sub = function(coordinate, delta) {
-  coordinate[0] -= delta[0];
-  coordinate[1] -= delta[1];
-  return coordinate;
-};
-
-
-/**
- * @param {ol.Coordinate} coord1 First coordinate.
- * @param {ol.Coordinate} coord2 Second coordinate.
- * @return {number} Squared distance between coord1 and coord2.
- */
-ol.coordinate.squaredDistance = function(coord1, coord2) {
-  var dx = coord1[0] - coord2[0];
-  var dy = coord1[1] - coord2[1];
-  return dx * dx + dy * dy;
-};
-
-
-/**
- * Calculate the squared distance from a coordinate to a line segment.
- *
- * @param {ol.Coordinate} coordinate Coordinate of the point.
- * @param {Array.<ol.Coordinate>} segment Line segment (2 coordinates).
- * @return {number} Squared distance from the point to the line segment.
- */
-ol.coordinate.squaredDistanceToSegment = function(coordinate, segment) {
-  return ol.coordinate.squaredDistance(coordinate,
-      ol.coordinate.closestOnSegment(coordinate, segment));
-};
-
-
-/**
- * Format a geographic coordinate with the hemisphere, degrees, minutes, and
- * seconds.
- *
- * Example without specifying fractional digits:
- *
- *     var coord = [7.85, 47.983333];
- *     var out = ol.coordinate.toStringHDMS(coord);
- *     // out is now '47° 58′ 60″ N 7° 50′ 60″ E'
- *
- * Example explicitly specifying 1 fractional digit:
- *
- *     var coord = [7.85, 47.983333];
- *     var out = ol.coordinate.toStringHDMS(coord, 1);
- *     // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'
- *
- * @param {ol.Coordinate|undefined} coordinate Coordinate.
- * @param {number=} opt_fractionDigits The number of digits to include
- *    after the decimal point. Default is `0`.
- * @return {string} Hemisphere, degrees, minutes and seconds.
- * @api stable
- */
-ol.coordinate.toStringHDMS = function(coordinate, opt_fractionDigits) {
-  if (coordinate) {
-    return ol.coordinate.degreesToStringHDMS_(coordinate[1], 'NS', opt_fractionDigits) + ' ' +
-        ol.coordinate.degreesToStringHDMS_(coordinate[0], 'EW', opt_fractionDigits);
-  } else {
-    return '';
-  }
-};
-
-
-/**
- * Format a coordinate as a comma delimited string.
- *
- * Example without specifying fractional digits:
- *
- *     var coord = [7.85, 47.983333];
- *     var out = ol.coordinate.toStringXY(coord);
- *     // out is now '8, 48'
- *
- * Example explicitly specifying 1 fractional digit:
- *
- *     var coord = [7.85, 47.983333];
- *     var out = ol.coordinate.toStringXY(coord, 1);
- *     // out is now '7.8, 48.0'
- *
- * @param {ol.Coordinate|undefined} coordinate Coordinate.
- * @param {number=} opt_fractionDigits The number of digits to include
- *    after the decimal point. Default is `0`.
- * @return {string} XY.
- * @api stable
- */
-ol.coordinate.toStringXY = function(coordinate, opt_fractionDigits) {
-  return ol.coordinate.format(coordinate, '{x}, {y}', opt_fractionDigits);
-};
-
-goog.provide('ol.extent');
-goog.provide('ol.extent.Corner');
-goog.provide('ol.extent.Relationship');
-
-goog.require('ol');
-goog.require('ol.asserts');
-
-
-/**
- * Extent corner.
- * @enum {string}
- */
-ol.extent.Corner = {
-  BOTTOM_LEFT: 'bottom-left',
-  BOTTOM_RIGHT: 'bottom-right',
-  TOP_LEFT: 'top-left',
-  TOP_RIGHT: 'top-right'
-};
-
-
-/**
- * Relationship to an extent.
- * @enum {number}
- */
-ol.extent.Relationship = {
-  UNKNOWN: 0,
-  INTERSECTING: 1,
-  ABOVE: 2,
-  RIGHT: 4,
-  BELOW: 8,
-  LEFT: 16
-};
-
-
-/**
- * Build an extent that includes all given coordinates.
- *
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @return {ol.Extent} Bounding extent.
- * @api stable
- */
-ol.extent.boundingExtent = function(coordinates) {
-  var extent = ol.extent.createEmpty();
-  for (var i = 0, ii = coordinates.length; i < ii; ++i) {
-    ol.extent.extendCoordinate(extent, coordinates[i]);
-  }
-  return extent;
-};
-
-
-/**
- * @param {Array.<number>} xs Xs.
- * @param {Array.<number>} ys Ys.
- * @param {ol.Extent=} opt_extent Destination extent.
- * @private
- * @return {ol.Extent} Extent.
- */
-ol.extent.boundingExtentXYs_ = function(xs, ys, opt_extent) {
-  ol.DEBUG && console.assert(xs.length > 0, 'xs length should be larger than 0');
-  ol.DEBUG && console.assert(ys.length > 0, 'ys length should be larger than 0');
-  var minX = Math.min.apply(null, xs);
-  var minY = Math.min.apply(null, ys);
-  var maxX = Math.max.apply(null, xs);
-  var maxY = Math.max.apply(null, ys);
-  return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent);
-};
-
-
-/**
- * Return extent increased by the provided value.
- * @param {ol.Extent} extent Extent.
- * @param {number} value The amount by which the extent should be buffered.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} Extent.
- * @api stable
- */
-ol.extent.buffer = function(extent, value, opt_extent) {
-  if (opt_extent) {
-    opt_extent[0] = extent[0] - value;
-    opt_extent[1] = extent[1] - value;
-    opt_extent[2] = extent[2] + value;
-    opt_extent[3] = extent[3] + value;
-    return opt_extent;
-  } else {
-    return [
-      extent[0] - value,
-      extent[1] - value,
-      extent[2] + value,
-      extent[3] + value
-    ];
-  }
-};
-
-
-/**
- * Creates a clone of an extent.
- *
- * @param {ol.Extent} extent Extent to clone.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} The clone.
- */
-ol.extent.clone = function(extent, opt_extent) {
-  if (opt_extent) {
-    opt_extent[0] = extent[0];
-    opt_extent[1] = extent[1];
-    opt_extent[2] = extent[2];
-    opt_extent[3] = extent[3];
-    return opt_extent;
-  } else {
-    return extent.slice();
-  }
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number} x X.
- * @param {number} y Y.
- * @return {number} Closest squared distance.
- */
-ol.extent.closestSquaredDistanceXY = function(extent, x, y) {
-  var dx, dy;
-  if (x < extent[0]) {
-    dx = extent[0] - x;
-  } else if (extent[2] < x) {
-    dx = x - extent[2];
-  } else {
-    dx = 0;
-  }
-  if (y < extent[1]) {
-    dy = extent[1] - y;
-  } else if (extent[3] < y) {
-    dy = y - extent[3];
-  } else {
-    dy = 0;
-  }
-  return dx * dx + dy * dy;
-};
-
-
-/**
- * Check if the passed coordinate is contained or on the edge of the extent.
- *
- * @param {ol.Extent} extent Extent.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @return {boolean} The coordinate is contained in the extent.
- * @api stable
- */
-ol.extent.containsCoordinate = function(extent, coordinate) {
-  return ol.extent.containsXY(extent, coordinate[0], coordinate[1]);
-};
-
-
-/**
- * Check if one extent contains another.
- *
- * An extent is deemed contained if it lies completely within the other extent,
- * including if they share one or more edges.
- *
- * @param {ol.Extent} extent1 Extent 1.
- * @param {ol.Extent} extent2 Extent 2.
- * @return {boolean} The second extent is contained by or on the edge of the
- *     first.
- * @api stable
- */
-ol.extent.containsExtent = function(extent1, extent2) {
-  return extent1[0] <= extent2[0] && extent2[2] <= extent1[2] &&
-      extent1[1] <= extent2[1] && extent2[3] <= extent1[3];
-};
-
-
-/**
- * Check if the passed coordinate is contained or on the edge of the extent.
- *
- * @param {ol.Extent} extent Extent.
- * @param {number} x X coordinate.
- * @param {number} y Y coordinate.
- * @return {boolean} The x, y values are contained in the extent.
- * @api stable
- */
-ol.extent.containsXY = function(extent, x, y) {
-  return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];
-};
-
-
-/**
- * Get the relationship between a coordinate and extent.
- * @param {ol.Extent} extent The extent.
- * @param {ol.Coordinate} coordinate The coordinate.
- * @return {number} The relationship (bitwise compare with
- *     ol.extent.Relationship).
- */
-ol.extent.coordinateRelationship = function(extent, coordinate) {
-  var minX = extent[0];
-  var minY = extent[1];
-  var maxX = extent[2];
-  var maxY = extent[3];
-  var x = coordinate[0];
-  var y = coordinate[1];
-  var relationship = ol.extent.Relationship.UNKNOWN;
-  if (x < minX) {
-    relationship = relationship | ol.extent.Relationship.LEFT;
-  } else if (x > maxX) {
-    relationship = relationship | ol.extent.Relationship.RIGHT;
-  }
-  if (y < minY) {
-    relationship = relationship | ol.extent.Relationship.BELOW;
-  } else if (y > maxY) {
-    relationship = relationship | ol.extent.Relationship.ABOVE;
-  }
-  if (relationship === ol.extent.Relationship.UNKNOWN) {
-    relationship = ol.extent.Relationship.INTERSECTING;
-  }
-  return relationship;
-};
-
-
-/**
- * Create an empty extent.
- * @return {ol.Extent} Empty extent.
- * @api stable
- */
-ol.extent.createEmpty = function() {
-  return [Infinity, Infinity, -Infinity, -Infinity];
-};
-
-
-/**
- * Create a new extent or update the provided extent.
- * @param {number} minX Minimum X.
- * @param {number} minY Minimum Y.
- * @param {number} maxX Maximum X.
- * @param {number} maxY Maximum Y.
- * @param {ol.Extent=} opt_extent Destination extent.
- * @return {ol.Extent} Extent.
- */
-ol.extent.createOrUpdate = function(minX, minY, maxX, maxY, opt_extent) {
-  if (opt_extent) {
-    opt_extent[0] = minX;
-    opt_extent[1] = minY;
-    opt_extent[2] = maxX;
-    opt_extent[3] = maxY;
-    return opt_extent;
-  } else {
-    return [minX, minY, maxX, maxY];
-  }
-};
-
-
-/**
- * Create a new empty extent or make the provided one empty.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} Extent.
- */
-ol.extent.createOrUpdateEmpty = function(opt_extent) {
-  return ol.extent.createOrUpdate(
-      Infinity, Infinity, -Infinity, -Infinity, opt_extent);
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} Extent.
- */
-ol.extent.createOrUpdateFromCoordinate = function(coordinate, opt_extent) {
-  var x = coordinate[0];
-  var y = coordinate[1];
-  return ol.extent.createOrUpdate(x, y, x, y, opt_extent);
-};
-
-
-/**
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} Extent.
- */
-ol.extent.createOrUpdateFromCoordinates = function(coordinates, opt_extent) {
-  var extent = ol.extent.createOrUpdateEmpty(opt_extent);
-  return ol.extent.extendCoordinates(extent, coordinates);
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} Extent.
- */
-ol.extent.createOrUpdateFromFlatCoordinates = function(flatCoordinates, offset, end, stride, opt_extent) {
-  var extent = ol.extent.createOrUpdateEmpty(opt_extent);
-  return ol.extent.extendFlatCoordinates(
-      extent, flatCoordinates, offset, end, stride);
-};
-
-
-/**
- * @param {Array.<Array.<ol.Coordinate>>} rings Rings.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} Extent.
- */
-ol.extent.createOrUpdateFromRings = function(rings, opt_extent) {
-  var extent = ol.extent.createOrUpdateEmpty(opt_extent);
-  return ol.extent.extendRings(extent, rings);
-};
-
-
-/**
- * Determine if two extents are equivalent.
- * @param {ol.Extent} extent1 Extent 1.
- * @param {ol.Extent} extent2 Extent 2.
- * @return {boolean} The two extents are equivalent.
- * @api stable
- */
-ol.extent.equals = function(extent1, extent2) {
-  return extent1[0] == extent2[0] && extent1[2] == extent2[2] &&
-      extent1[1] == extent2[1] && extent1[3] == extent2[3];
-};
-
-
-/**
- * Modify an extent to include another extent.
- * @param {ol.Extent} extent1 The extent to be modified.
- * @param {ol.Extent} extent2 The extent that will be included in the first.
- * @return {ol.Extent} A reference to the first (extended) extent.
- * @api stable
- */
-ol.extent.extend = function(extent1, extent2) {
-  if (extent2[0] < extent1[0]) {
-    extent1[0] = extent2[0];
-  }
-  if (extent2[2] > extent1[2]) {
-    extent1[2] = extent2[2];
-  }
-  if (extent2[1] < extent1[1]) {
-    extent1[1] = extent2[1];
-  }
-  if (extent2[3] > extent1[3]) {
-    extent1[3] = extent2[3];
-  }
-  return extent1;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {ol.Coordinate} coordinate Coordinate.
- */
-ol.extent.extendCoordinate = function(extent, coordinate) {
-  if (coordinate[0] < extent[0]) {
-    extent[0] = coordinate[0];
-  }
-  if (coordinate[0] > extent[2]) {
-    extent[2] = coordinate[0];
-  }
-  if (coordinate[1] < extent[1]) {
-    extent[1] = coordinate[1];
-  }
-  if (coordinate[1] > extent[3]) {
-    extent[3] = coordinate[1];
-  }
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @return {ol.Extent} Extent.
- */
-ol.extent.extendCoordinates = function(extent, coordinates) {
-  var i, ii;
-  for (i = 0, ii = coordinates.length; i < ii; ++i) {
-    ol.extent.extendCoordinate(extent, coordinates[i]);
-  }
-  return extent;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @return {ol.Extent} Extent.
- */
-ol.extent.extendFlatCoordinates = function(extent, flatCoordinates, offset, end, stride) {
-  for (; offset < end; offset += stride) {
-    ol.extent.extendXY(
-        extent, flatCoordinates[offset], flatCoordinates[offset + 1]);
-  }
-  return extent;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {Array.<Array.<ol.Coordinate>>} rings Rings.
- * @return {ol.Extent} Extent.
- */
-ol.extent.extendRings = function(extent, rings) {
-  var i, ii;
-  for (i = 0, ii = rings.length; i < ii; ++i) {
-    ol.extent.extendCoordinates(extent, rings[i]);
-  }
-  return extent;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number} x X.
- * @param {number} y Y.
- */
-ol.extent.extendXY = function(extent, x, y) {
-  extent[0] = Math.min(extent[0], x);
-  extent[1] = Math.min(extent[1], y);
-  extent[2] = Math.max(extent[2], x);
-  extent[3] = Math.max(extent[3], y);
-};
-
-
-/**
- * This function calls `callback` for each corner of the extent. If the
- * callback returns a truthy value the function returns that value
- * immediately. Otherwise the function returns `false`.
- * @param {ol.Extent} extent Extent.
- * @param {function(this:T, ol.Coordinate): S} callback Callback.
- * @param {T=} opt_this Value to use as `this` when executing `callback`.
- * @return {S|boolean} Value.
- * @template S, T
- */
-ol.extent.forEachCorner = function(extent, callback, opt_this) {
-  var val;
-  val = callback.call(opt_this, ol.extent.getBottomLeft(extent));
-  if (val) {
-    return val;
-  }
-  val = callback.call(opt_this, ol.extent.getBottomRight(extent));
-  if (val) {
-    return val;
-  }
-  val = callback.call(opt_this, ol.extent.getTopRight(extent));
-  if (val) {
-    return val;
-  }
-  val = callback.call(opt_this, ol.extent.getTopLeft(extent));
-  if (val) {
-    return val;
-  }
-  return false;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @return {number} Area.
- */
-ol.extent.getArea = function(extent) {
-  var area = 0;
-  if (!ol.extent.isEmpty(extent)) {
-    area = ol.extent.getWidth(extent) * ol.extent.getHeight(extent);
-  }
-  return area;
-};
-
-
-/**
- * Get the bottom left coordinate of an extent.
- * @param {ol.Extent} extent Extent.
- * @return {ol.Coordinate} Bottom left coordinate.
- * @api stable
- */
-ol.extent.getBottomLeft = function(extent) {
-  return [extent[0], extent[1]];
-};
-
-
-/**
- * Get the bottom right coordinate of an extent.
- * @param {ol.Extent} extent Extent.
- * @return {ol.Coordinate} Bottom right coordinate.
- * @api stable
- */
-ol.extent.getBottomRight = function(extent) {
-  return [extent[2], extent[1]];
-};
-
-
-/**
- * Get the center coordinate of an extent.
- * @param {ol.Extent} extent Extent.
- * @return {ol.Coordinate} Center.
- * @api stable
- */
-ol.extent.getCenter = function(extent) {
-  return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];
-};
-
-
-/**
- * Get a corner coordinate of an extent.
- * @param {ol.Extent} extent Extent.
- * @param {ol.extent.Corner} corner Corner.
- * @return {ol.Coordinate} Corner coordinate.
- */
-ol.extent.getCorner = function(extent, corner) {
-  var coordinate;
-  if (corner === ol.extent.Corner.BOTTOM_LEFT) {
-    coordinate = ol.extent.getBottomLeft(extent);
-  } else if (corner === ol.extent.Corner.BOTTOM_RIGHT) {
-    coordinate = ol.extent.getBottomRight(extent);
-  } else if (corner === ol.extent.Corner.TOP_LEFT) {
-    coordinate = ol.extent.getTopLeft(extent);
-  } else if (corner === ol.extent.Corner.TOP_RIGHT) {
-    coordinate = ol.extent.getTopRight(extent);
-  } else {
-    ol.asserts.assert(false, 13); // Invalid corner
-  }
-  return /** @type {!ol.Coordinate} */ (coordinate);
-};
-
-
-/**
- * @param {ol.Extent} extent1 Extent 1.
- * @param {ol.Extent} extent2 Extent 2.
- * @return {number} Enlarged area.
- */
-ol.extent.getEnlargedArea = function(extent1, extent2) {
-  var minX = Math.min(extent1[0], extent2[0]);
-  var minY = Math.min(extent1[1], extent2[1]);
-  var maxX = Math.max(extent1[2], extent2[2]);
-  var maxY = Math.max(extent1[3], extent2[3]);
-  return (maxX - minX) * (maxY - minY);
-};
-
-
-/**
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {ol.Size} size Size.
- * @param {ol.Extent=} opt_extent Destination extent.
- * @return {ol.Extent} Extent.
- */
-ol.extent.getForViewAndSize = function(center, resolution, rotation, size, opt_extent) {
-  var dx = resolution * size[0] / 2;
-  var dy = resolution * size[1] / 2;
-  var cosRotation = Math.cos(rotation);
-  var sinRotation = Math.sin(rotation);
-  var xCos = dx * cosRotation;
-  var xSin = dx * sinRotation;
-  var yCos = dy * cosRotation;
-  var ySin = dy * sinRotation;
-  var x = center[0];
-  var y = center[1];
-  var x0 = x - xCos + ySin;
-  var x1 = x - xCos - ySin;
-  var x2 = x + xCos - ySin;
-  var x3 = x + xCos + ySin;
-  var y0 = y - xSin - yCos;
-  var y1 = y - xSin + yCos;
-  var y2 = y + xSin + yCos;
-  var y3 = y + xSin - yCos;
-  return ol.extent.createOrUpdate(
-      Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3),
-      Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3),
-      opt_extent);
-};
-
-
-/**
- * Get the height of an extent.
- * @param {ol.Extent} extent Extent.
- * @return {number} Height.
- * @api stable
- */
-ol.extent.getHeight = function(extent) {
-  return extent[3] - extent[1];
-};
-
-
-/**
- * @param {ol.Extent} extent1 Extent 1.
- * @param {ol.Extent} extent2 Extent 2.
- * @return {number} Intersection area.
- */
-ol.extent.getIntersectionArea = function(extent1, extent2) {
-  var intersection = ol.extent.getIntersection(extent1, extent2);
-  return ol.extent.getArea(intersection);
-};
-
-
-/**
- * Get the intersection of two extents.
- * @param {ol.Extent} extent1 Extent 1.
- * @param {ol.Extent} extent2 Extent 2.
- * @param {ol.Extent=} opt_extent Optional extent to populate with intersection.
- * @return {ol.Extent} Intersecting extent.
- * @api stable
- */
-ol.extent.getIntersection = function(extent1, extent2, opt_extent) {
-  var intersection = opt_extent ? opt_extent : ol.extent.createEmpty();
-  if (ol.extent.intersects(extent1, extent2)) {
-    if (extent1[0] > extent2[0]) {
-      intersection[0] = extent1[0];
-    } else {
-      intersection[0] = extent2[0];
-    }
-    if (extent1[1] > extent2[1]) {
-      intersection[1] = extent1[1];
-    } else {
-      intersection[1] = extent2[1];
-    }
-    if (extent1[2] < extent2[2]) {
-      intersection[2] = extent1[2];
-    } else {
-      intersection[2] = extent2[2];
-    }
-    if (extent1[3] < extent2[3]) {
-      intersection[3] = extent1[3];
-    } else {
-      intersection[3] = extent2[3];
-    }
-  }
-  return intersection;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @return {number} Margin.
- */
-ol.extent.getMargin = function(extent) {
-  return ol.extent.getWidth(extent) + ol.extent.getHeight(extent);
-};
-
-
-/**
- * Get the size (width, height) of an extent.
- * @param {ol.Extent} extent The extent.
- * @return {ol.Size} The extent size.
- * @api stable
- */
-ol.extent.getSize = function(extent) {
-  return [extent[2] - extent[0], extent[3] - extent[1]];
-};
-
-
-/**
- * Get the top left coordinate of an extent.
- * @param {ol.Extent} extent Extent.
- * @return {ol.Coordinate} Top left coordinate.
- * @api stable
- */
-ol.extent.getTopLeft = function(extent) {
-  return [extent[0], extent[3]];
-};
-
-
-/**
- * Get the top right coordinate of an extent.
- * @param {ol.Extent} extent Extent.
- * @return {ol.Coordinate} Top right coordinate.
- * @api stable
- */
-ol.extent.getTopRight = function(extent) {
-  return [extent[2], extent[3]];
-};
-
-
-/**
- * Get the width of an extent.
- * @param {ol.Extent} extent Extent.
- * @return {number} Width.
- * @api stable
- */
-ol.extent.getWidth = function(extent) {
-  return extent[2] - extent[0];
-};
-
-
-/**
- * Determine if one extent intersects another.
- * @param {ol.Extent} extent1 Extent 1.
- * @param {ol.Extent} extent2 Extent.
- * @return {boolean} The two extents intersect.
- * @api stable
- */
-ol.extent.intersects = function(extent1, extent2) {
-  return extent1[0] <= extent2[2] &&
-      extent1[2] >= extent2[0] &&
-      extent1[1] <= extent2[3] &&
-      extent1[3] >= extent2[1];
-};
-
-
-/**
- * Determine if an extent is empty.
- * @param {ol.Extent} extent Extent.
- * @return {boolean} Is empty.
- * @api stable
- */
-ol.extent.isEmpty = function(extent) {
-  return extent[2] < extent[0] || extent[3] < extent[1];
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} Extent.
- */
-ol.extent.returnOrUpdate = function(extent, opt_extent) {
-  if (opt_extent) {
-    opt_extent[0] = extent[0];
-    opt_extent[1] = extent[1];
-    opt_extent[2] = extent[2];
-    opt_extent[3] = extent[3];
-    return opt_extent;
-  } else {
-    return extent;
-  }
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number} value Value.
- */
-ol.extent.scaleFromCenter = function(extent, value) {
-  var deltaX = ((extent[2] - extent[0]) / 2) * (value - 1);
-  var deltaY = ((extent[3] - extent[1]) / 2) * (value - 1);
-  extent[0] -= deltaX;
-  extent[2] += deltaX;
-  extent[1] -= deltaY;
-  extent[3] += deltaY;
-};
-
-
-/**
- * Determine if the segment between two coordinates intersects (crosses,
- * touches, or is contained by) the provided extent.
- * @param {ol.Extent} extent The extent.
- * @param {ol.Coordinate} start Segment start coordinate.
- * @param {ol.Coordinate} end Segment end coordinate.
- * @return {boolean} The segment intersects the extent.
- */
-ol.extent.intersectsSegment = function(extent, start, end) {
-  var intersects = false;
-  var startRel = ol.extent.coordinateRelationship(extent, start);
-  var endRel = ol.extent.coordinateRelationship(extent, end);
-  if (startRel === ol.extent.Relationship.INTERSECTING ||
-      endRel === ol.extent.Relationship.INTERSECTING) {
-    intersects = true;
-  } else {
-    var minX = extent[0];
-    var minY = extent[1];
-    var maxX = extent[2];
-    var maxY = extent[3];
-    var startX = start[0];
-    var startY = start[1];
-    var endX = end[0];
-    var endY = end[1];
-    var slope = (endY - startY) / (endX - startX);
-    var x, y;
-    if (!!(endRel & ol.extent.Relationship.ABOVE) &&
-        !(startRel & ol.extent.Relationship.ABOVE)) {
-      // potentially intersects top
-      x = endX - ((endY - maxY) / slope);
-      intersects = x >= minX && x <= maxX;
-    }
-    if (!intersects && !!(endRel & ol.extent.Relationship.RIGHT) &&
-        !(startRel & ol.extent.Relationship.RIGHT)) {
-      // potentially intersects right
-      y = endY - ((endX - maxX) * slope);
-      intersects = y >= minY && y <= maxY;
-    }
-    if (!intersects && !!(endRel & ol.extent.Relationship.BELOW) &&
-        !(startRel & ol.extent.Relationship.BELOW)) {
-      // potentially intersects bottom
-      x = endX - ((endY - minY) / slope);
-      intersects = x >= minX && x <= maxX;
-    }
-    if (!intersects && !!(endRel & ol.extent.Relationship.LEFT) &&
-        !(startRel & ol.extent.Relationship.LEFT)) {
-      // potentially intersects left
-      y = endY - ((endX - minX) * slope);
-      intersects = y >= minY && y <= maxY;
-    }
-
-  }
-  return intersects;
-};
-
-
-/**
- * Apply a transform function to the extent.
- * @param {ol.Extent} extent Extent.
- * @param {ol.TransformFunction} transformFn Transform function.  Called with
- * [minX, minY, maxX, maxY] extent coordinates.
- * @param {ol.Extent=} opt_extent Destination extent.
- * @return {ol.Extent} Extent.
- * @api stable
- */
-ol.extent.applyTransform = function(extent, transformFn, opt_extent) {
-  var coordinates = [
-    extent[0], extent[1],
-    extent[0], extent[3],
-    extent[2], extent[1],
-    extent[2], extent[3]
-  ];
-  transformFn(coordinates, coordinates, 2);
-  var xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]];
-  var ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]];
-  return ol.extent.boundingExtentXYs_(xs, ys, opt_extent);
-};
-
-goog.provide('ol.functions');
-
-/**
- * Always returns true.
- * @returns {boolean} true.
- */
-ol.functions.TRUE = function() {
-  return true;
-};
-
-/**
- * Always returns false.
- * @returns {boolean} false.
- */
-ol.functions.FALSE = function() {
-  return false;
-};
-
-/**
- * @license
- * Latitude/longitude spherical geodesy formulae taken from
- * http://www.movable-type.co.uk/scripts/latlong.html
- * Licensed under CC-BY-3.0.
- */
-
-goog.provide('ol.Sphere');
-
-goog.require('ol.math');
-
-
-/**
- * @classdesc
- * Class to create objects that can be used with {@link
- * ol.geom.Polygon.circular}.
- *
- * For example to create a sphere whose radius is equal to the semi-major
- * axis of the WGS84 ellipsoid:
- *
- * ```js
- * var wgs84Sphere= new ol.Sphere(6378137);
- * ```
- *
- * @constructor
- * @param {number} radius Radius.
- * @api
- */
-ol.Sphere = function(radius) {
-
-  /**
-   * @type {number}
-   */
-  this.radius = radius;
-
-};
-
-
-/**
- * Returns the geodesic area for a list of coordinates.
- *
- * [Reference](http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409)
- * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for
- * Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
- * Laboratory, Pasadena, CA, June 2007
- *
- * @param {Array.<ol.Coordinate>} coordinates List of coordinates of a linear
- * ring. If the ring is oriented clockwise, the area will be positive,
- * otherwise it will be negative.
- * @return {number} Area.
- * @api
- */
-ol.Sphere.prototype.geodesicArea = function(coordinates) {
-  var area = 0, len = coordinates.length;
-  var x1 = coordinates[len - 1][0];
-  var y1 = coordinates[len - 1][1];
-  for (var i = 0; i < len; i++) {
-    var x2 = coordinates[i][0], y2 = coordinates[i][1];
-    area += ol.math.toRadians(x2 - x1) *
-        (2 + Math.sin(ol.math.toRadians(y1)) +
-        Math.sin(ol.math.toRadians(y2)));
-    x1 = x2;
-    y1 = y2;
-  }
-  return area * this.radius * this.radius / 2.0;
-};
-
-
-/**
- * Returns the distance from c1 to c2 using the haversine formula.
- *
- * @param {ol.Coordinate} c1 Coordinate 1.
- * @param {ol.Coordinate} c2 Coordinate 2.
- * @return {number} Haversine distance.
- * @api
- */
-ol.Sphere.prototype.haversineDistance = function(c1, c2) {
-  var lat1 = ol.math.toRadians(c1[1]);
-  var lat2 = ol.math.toRadians(c2[1]);
-  var deltaLatBy2 = (lat2 - lat1) / 2;
-  var deltaLonBy2 = ol.math.toRadians(c2[0] - c1[0]) / 2;
-  var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) +
-      Math.sin(deltaLonBy2) * Math.sin(deltaLonBy2) *
-      Math.cos(lat1) * Math.cos(lat2);
-  return 2 * this.radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
-};
-
-
-/**
- * Returns the coordinate at the given distance and bearing from `c1`.
- *
- * @param {ol.Coordinate} c1 The origin point (`[lon, lat]` in degrees).
- * @param {number} distance The great-circle distance between the origin
- *     point and the target point.
- * @param {number} bearing The bearing (in radians).
- * @return {ol.Coordinate} The target point.
- */
-ol.Sphere.prototype.offset = function(c1, distance, bearing) {
-  var lat1 = ol.math.toRadians(c1[1]);
-  var lon1 = ol.math.toRadians(c1[0]);
-  var dByR = distance / this.radius;
-  var lat = Math.asin(
-      Math.sin(lat1) * Math.cos(dByR) +
-      Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
-  var lon = lon1 + Math.atan2(
-      Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1),
-      Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
-  return [ol.math.toDegrees(lon), ol.math.toDegrees(lat)];
-};
-
-goog.provide('ol.sphere.NORMAL');
-
-goog.require('ol.Sphere');
-
-
-/**
- * The normal sphere.
- * @const
- * @type {ol.Sphere}
- */
-ol.sphere.NORMAL = new ol.Sphere(6370997);
-
-goog.provide('ol.proj');
-goog.provide('ol.proj.METERS_PER_UNIT');
-goog.provide('ol.proj.Projection');
-goog.provide('ol.proj.Units');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.obj');
-goog.require('ol.sphere.NORMAL');
-
-
-/**
- * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or
- * `'us-ft'`.
- * @enum {string}
- */
-ol.proj.Units = {
-  DEGREES: 'degrees',
-  FEET: 'ft',
-  METERS: 'm',
-  PIXELS: 'pixels',
-  TILE_PIXELS: 'tile-pixels',
-  USFEET: 'us-ft'
-};
-
-
-/**
- * Meters per unit lookup table.
- * @const
- * @type {Object.<ol.proj.Units, number>}
- * @api stable
- */
-ol.proj.METERS_PER_UNIT = {};
-ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] =
-    2 * Math.PI * ol.sphere.NORMAL.radius / 360;
-ol.proj.METERS_PER_UNIT[ol.proj.Units.FEET] = 0.3048;
-ol.proj.METERS_PER_UNIT[ol.proj.Units.METERS] = 1;
-ol.proj.METERS_PER_UNIT[ol.proj.Units.USFEET] = 1200 / 3937;
-
-
-/**
- * @classdesc
- * Projection definition class. One of these is created for each projection
- * supported in the application and stored in the {@link ol.proj} namespace.
- * You can use these in applications, but this is not required, as API params
- * and options use {@link ol.ProjectionLike} which means the simple string
- * code will suffice.
- *
- * You can use {@link ol.proj.get} to retrieve the object for a particular
- * projection.
- *
- * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together
- * with the following aliases:
- * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,
- *     urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,
- *     http://www.opengis.net/gml/srs/epsg.xml#4326,
- *     urn:x-ogc:def:crs:EPSG:4326
- * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,
- *     urn:ogc:def:crs:EPSG:6.18:3:3857,
- *     http://www.opengis.net/gml/srs/epsg.xml#3857
- *
- * If you use proj4js, aliases can be added using `proj4.defs()`; see
- * [documentation](https://github.com/proj4js/proj4js). To set an alternative
- * namespace for proj4, use {@link ol.proj.setProj4}.
- *
- * @constructor
- * @param {olx.ProjectionOptions} options Projection options.
- * @struct
- * @api stable
- */
-ol.proj.Projection = function(options) {
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.code_ = options.code;
-
-  /**
-   * @private
-   * @type {ol.proj.Units}
-   */
-  this.units_ = /** @type {ol.proj.Units} */ (options.units);
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.extent_ = options.extent !== undefined ? options.extent : null;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.worldExtent_ = options.worldExtent !== undefined ?
-      options.worldExtent : null;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.axisOrientation_ = options.axisOrientation !== undefined ?
-      options.axisOrientation : 'enu';
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.global_ = options.global !== undefined ? options.global : false;
-
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.canWrapX_ = !!(this.global_ && this.extent_);
-
-  /**
-  * @private
-  * @type {function(number, ol.Coordinate):number}
-  */
-  this.getPointResolutionFunc_ = options.getPointResolution !== undefined ?
-      options.getPointResolution : this.getPointResolution_;
-
-  /**
-   * @private
-   * @type {ol.tilegrid.TileGrid}
-   */
-  this.defaultTileGrid_ = null;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.metersPerUnit_ = options.metersPerUnit;
-
-  var projections = ol.proj.projections_;
-  var code = options.code;
-  ol.DEBUG && console.assert(code !== undefined,
-      'Option "code" is required for constructing instance');
-  if (ol.ENABLE_PROJ4JS) {
-    var proj4js = ol.proj.proj4_ || window['proj4'];
-    if (typeof proj4js == 'function' && projections[code] === undefined) {
-      var def = proj4js.defs(code);
-      if (def !== undefined) {
-        if (def.axis !== undefined && options.axisOrientation === undefined) {
-          this.axisOrientation_ = def.axis;
-        }
-        if (options.metersPerUnit === undefined) {
-          this.metersPerUnit_ = def.to_meter;
-        }
-        if (options.units === undefined) {
-          this.units_ = def.units;
-        }
-        var currentCode, currentDef, currentProj, proj4Transform;
-        for (currentCode in projections) {
-          currentDef = proj4js.defs(currentCode);
-          if (currentDef !== undefined) {
-            currentProj = ol.proj.get(currentCode);
-            if (currentDef === def) {
-              ol.proj.addEquivalentProjections([currentProj, this]);
-            } else {
-              proj4Transform = proj4js(currentCode, code);
-              ol.proj.addCoordinateTransforms(currentProj, this,
-                  proj4Transform.forward, proj4Transform.inverse);
-            }
-          }
-        }
-      }
-    }
-  }
-
-};
-
-
-/**
- * @return {boolean} The projection is suitable for wrapping the x-axis
- */
-ol.proj.Projection.prototype.canWrapX = function() {
-  return this.canWrapX_;
-};
-
-
-/**
- * Get the code for this projection, e.g. 'EPSG:4326'.
- * @return {string} Code.
- * @api stable
- */
-ol.proj.Projection.prototype.getCode = function() {
-  return this.code_;
-};
-
-
-/**
- * Get the validity extent for this projection.
- * @return {ol.Extent} Extent.
- * @api stable
- */
-ol.proj.Projection.prototype.getExtent = function() {
-  return this.extent_;
-};
-
-
-/**
- * Get the units of this projection.
- * @return {ol.proj.Units} Units.
- * @api stable
- */
-ol.proj.Projection.prototype.getUnits = function() {
-  return this.units_;
-};
-
-
-/**
- * Get the amount of meters per unit of this projection.  If the projection is
- * not configured with `metersPerUnit` or a units identifier, the return is
- * `undefined`.
- * @return {number|undefined} Meters.
- * @api stable
- */
-ol.proj.Projection.prototype.getMetersPerUnit = function() {
-  return this.metersPerUnit_ || ol.proj.METERS_PER_UNIT[this.units_];
-};
-
-
-/**
- * Get the world extent for this projection.
- * @return {ol.Extent} Extent.
- * @api
- */
-ol.proj.Projection.prototype.getWorldExtent = function() {
-  return this.worldExtent_;
-};
-
-
-/**
- * Get the axis orientation of this projection.
- * Example values are:
- * enu - the default easting, northing, elevation.
- * neu - northing, easting, up - useful for "lat/long" geographic coordinates,
- *     or south orientated transverse mercator.
- * wnu - westing, northing, up - some planetary coordinate systems have
- *     "west positive" coordinate systems
- * @return {string} Axis orientation.
- */
-ol.proj.Projection.prototype.getAxisOrientation = function() {
-  return this.axisOrientation_;
-};
-
-
-/**
- * Is this projection a global projection which spans the whole world?
- * @return {boolean} Whether the projection is global.
- * @api stable
- */
-ol.proj.Projection.prototype.isGlobal = function() {
-  return this.global_;
-};
-
-
-/**
-* Set if the projection is a global projection which spans the whole world
-* @param {boolean} global Whether the projection is global.
-* @api stable
-*/
-ol.proj.Projection.prototype.setGlobal = function(global) {
-  this.global_ = global;
-  this.canWrapX_ = !!(global && this.extent_);
-};
-
-
-/**
- * @return {ol.tilegrid.TileGrid} The default tile grid.
- */
-ol.proj.Projection.prototype.getDefaultTileGrid = function() {
-  return this.defaultTileGrid_;
-};
-
-
-/**
- * @param {ol.tilegrid.TileGrid} tileGrid The default tile grid.
- */
-ol.proj.Projection.prototype.setDefaultTileGrid = function(tileGrid) {
-  this.defaultTileGrid_ = tileGrid;
-};
-
-
-/**
- * Set the validity extent for this projection.
- * @param {ol.Extent} extent Extent.
- * @api stable
- */
-ol.proj.Projection.prototype.setExtent = function(extent) {
-  this.extent_ = extent;
-  this.canWrapX_ = !!(this.global_ && extent);
-};
-
-
-/**
- * Set the world extent for this projection.
- * @param {ol.Extent} worldExtent World extent
- *     [minlon, minlat, maxlon, maxlat].
- * @api
- */
-ol.proj.Projection.prototype.setWorldExtent = function(worldExtent) {
-  this.worldExtent_ = worldExtent;
-};
-
-
-/**
-* Set the getPointResolution function for this projection.
-* @param {function(number, ol.Coordinate):number} func Function
-* @api
-*/
-ol.proj.Projection.prototype.setGetPointResolution = function(func) {
-  this.getPointResolutionFunc_ = func;
-};
-
-
-/**
-* Default version.
-* Get the resolution of the point in degrees or distance units.
-* For projections with degrees as the unit this will simply return the
-* provided resolution. For other projections the point resolution is
-* estimated by transforming the 'point' pixel to EPSG:4326,
-* measuring its width and height on the normal sphere,
-* and taking the average of the width and height.
-* @param {number} resolution Nominal resolution in projection units.
-* @param {ol.Coordinate} point Point to find adjusted resolution at.
-* @return {number} Point resolution at point in projection units.
-* @private
-*/
-ol.proj.Projection.prototype.getPointResolution_ = function(resolution, point) {
-  var units = this.getUnits();
-  if (units == ol.proj.Units.DEGREES) {
-    return resolution;
-  } else {
-    // Estimate point resolution by transforming the center pixel to EPSG:4326,
-    // measuring its width and height on the normal sphere, and taking the
-    // average of the width and height.
-    var toEPSG4326 = ol.proj.getTransformFromProjections(
-        this, ol.proj.get('EPSG:4326'));
-    var vertices = [
-      point[0] - resolution / 2, point[1],
-      point[0] + resolution / 2, point[1],
-      point[0], point[1] - resolution / 2,
-      point[0], point[1] + resolution / 2
-    ];
-    vertices = toEPSG4326(vertices, vertices, 2);
-    var width = ol.sphere.NORMAL.haversineDistance(
-        vertices.slice(0, 2), vertices.slice(2, 4));
-    var height = ol.sphere.NORMAL.haversineDistance(
-        vertices.slice(4, 6), vertices.slice(6, 8));
-    var pointResolution = (width + height) / 2;
-    var metersPerUnit = this.getMetersPerUnit();
-    if (metersPerUnit !== undefined) {
-      pointResolution /= metersPerUnit;
-    }
-    return pointResolution;
-  }
-};
-
-
-/**
- * Get the resolution of the point in degrees or distance units.
- * For projections with degrees as the unit this will simply return the
- * provided resolution. The default for other projections is to estimate
- * the point resolution by transforming the 'point' pixel to EPSG:4326,
- * measuring its width and height on the normal sphere,
- * and taking the average of the width and height.
- * An alternative implementation may be given when constructing a
- * projection. For many local projections,
- * such a custom function will return the resolution unchanged.
- * @param {number} resolution Resolution in projection units.
- * @param {ol.Coordinate} point Point.
- * @return {number} Point resolution in projection units.
- * @api
- */
-ol.proj.Projection.prototype.getPointResolution = function(resolution, point) {
-  return this.getPointResolutionFunc_(resolution, point);
-};
-
-
-/**
- * @private
- * @type {Object.<string, ol.proj.Projection>}
- */
-ol.proj.projections_ = {};
-
-
-/**
- * @private
- * @type {Object.<string, Object.<string, ol.TransformFunction>>}
- */
-ol.proj.transforms_ = {};
-
-
-/**
- * @private
- * @type {proj4}
- */
-ol.proj.proj4_ = null;
-
-
-if (ol.ENABLE_PROJ4JS) {
-  /**
-   * Register proj4. If not explicitly registered, it will be assumed that
-   * proj4js will be loaded in the global namespace. For example in a
-   * browserify ES6 environment you could use:
-   *
-   *     import ol from 'openlayers';
-   *     import proj4 from 'proj4';
-   *     ol.proj.setProj4(proj4);
-   *
-   * @param {proj4} proj4 Proj4.
-   * @api
-   */
-  ol.proj.setProj4 = function(proj4) {
-    ol.DEBUG && console.assert(typeof proj4 == 'function',
-        'proj4 argument should be a function');
-    ol.proj.proj4_ = proj4;
-  };
-}
-
-
-/**
- * Registers transformation functions that don't alter coordinates. Those allow
- * to transform between projections with equal meaning.
- *
- * @param {Array.<ol.proj.Projection>} projections Projections.
- * @api
- */
-ol.proj.addEquivalentProjections = function(projections) {
-  ol.proj.addProjections(projections);
-  projections.forEach(function(source) {
-    projections.forEach(function(destination) {
-      if (source !== destination) {
-        ol.proj.addTransform(source, destination, ol.proj.cloneTransform);
-      }
-    });
-  });
-};
-
-
-/**
- * Registers transformation functions to convert coordinates in any projection
- * in projection1 to any projection in projection2.
- *
- * @param {Array.<ol.proj.Projection>} projections1 Projections with equal
- *     meaning.
- * @param {Array.<ol.proj.Projection>} projections2 Projections with equal
- *     meaning.
- * @param {ol.TransformFunction} forwardTransform Transformation from any
- *   projection in projection1 to any projection in projection2.
- * @param {ol.TransformFunction} inverseTransform Transform from any projection
- *   in projection2 to any projection in projection1..
- */
-ol.proj.addEquivalentTransforms = function(projections1, projections2, forwardTransform, inverseTransform) {
-  projections1.forEach(function(projection1) {
-    projections2.forEach(function(projection2) {
-      ol.proj.addTransform(projection1, projection2, forwardTransform);
-      ol.proj.addTransform(projection2, projection1, inverseTransform);
-    });
-  });
-};
-
-
-/**
- * Add a Projection object to the list of supported projections that can be
- * looked up by their code.
- *
- * @param {ol.proj.Projection} projection Projection instance.
- * @api stable
- */
-ol.proj.addProjection = function(projection) {
-  ol.proj.projections_[projection.getCode()] = projection;
-  ol.proj.addTransform(projection, projection, ol.proj.cloneTransform);
-};
-
-
-/**
- * @param {Array.<ol.proj.Projection>} projections Projections.
- */
-ol.proj.addProjections = function(projections) {
-  var addedProjections = [];
-  projections.forEach(function(projection) {
-    addedProjections.push(ol.proj.addProjection(projection));
-  });
-};
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.proj.clearAllProjections = function() {
-  ol.proj.projections_ = {};
-  ol.proj.transforms_ = {};
-};
-
-
-/**
- * @param {ol.proj.Projection|string|undefined} projection Projection.
- * @param {string} defaultCode Default code.
- * @return {ol.proj.Projection} Projection.
- */
-ol.proj.createProjection = function(projection, defaultCode) {
-  if (!projection) {
-    return ol.proj.get(defaultCode);
-  } else if (typeof projection === 'string') {
-    return ol.proj.get(projection);
-  } else {
-    return /** @type {ol.proj.Projection} */ (projection);
-  }
-};
-
-
-/**
- * Registers a conversion function to convert coordinates from the source
- * projection to the destination projection.
- *
- * @param {ol.proj.Projection} source Source.
- * @param {ol.proj.Projection} destination Destination.
- * @param {ol.TransformFunction} transformFn Transform.
- */
-ol.proj.addTransform = function(source, destination, transformFn) {
-  var sourceCode = source.getCode();
-  var destinationCode = destination.getCode();
-  var transforms = ol.proj.transforms_;
-  if (!(sourceCode in transforms)) {
-    transforms[sourceCode] = {};
-  }
-  transforms[sourceCode][destinationCode] = transformFn;
-};
-
-
-/**
- * Registers coordinate transform functions to convert coordinates between the
- * source projection and the destination projection.
- * The forward and inverse functions convert coordinate pairs; this function
- * converts these into the functions used internally which also handle
- * extents and coordinate arrays.
- *
- * @param {ol.ProjectionLike} source Source projection.
- * @param {ol.ProjectionLike} destination Destination projection.
- * @param {function(ol.Coordinate): ol.Coordinate} forward The forward transform
- *     function (that is, from the source projection to the destination
- *     projection) that takes a {@link ol.Coordinate} as argument and returns
- *     the transformed {@link ol.Coordinate}.
- * @param {function(ol.Coordinate): ol.Coordinate} inverse The inverse transform
- *     function (that is, from the destination projection to the source
- *     projection) that takes a {@link ol.Coordinate} as argument and returns
- *     the transformed {@link ol.Coordinate}.
- * @api stable
- */
-ol.proj.addCoordinateTransforms = function(source, destination, forward, inverse) {
-  var sourceProj = ol.proj.get(source);
-  var destProj = ol.proj.get(destination);
-  ol.proj.addTransform(sourceProj, destProj,
-      ol.proj.createTransformFromCoordinateTransform(forward));
-  ol.proj.addTransform(destProj, sourceProj,
-      ol.proj.createTransformFromCoordinateTransform(inverse));
-};
-
-
-/**
- * Creates a {@link ol.TransformFunction} from a simple 2D coordinate transform
- * function.
- * @param {function(ol.Coordinate): ol.Coordinate} transform Coordinate
- *     transform.
- * @return {ol.TransformFunction} Transform function.
- */
-ol.proj.createTransformFromCoordinateTransform = function(transform) {
-  return (
-      /**
-       * @param {Array.<number>} input Input.
-       * @param {Array.<number>=} opt_output Output.
-       * @param {number=} opt_dimension Dimension.
-       * @return {Array.<number>} Output.
-       */
-      function(input, opt_output, opt_dimension) {
-        var length = input.length;
-        var dimension = opt_dimension !== undefined ? opt_dimension : 2;
-        var output = opt_output !== undefined ? opt_output : new Array(length);
-        var point, i, j;
-        for (i = 0; i < length; i += dimension) {
-          point = transform([input[i], input[i + 1]]);
-          output[i] = point[0];
-          output[i + 1] = point[1];
-          for (j = dimension - 1; j >= 2; --j) {
-            output[i + j] = input[i + j];
-          }
-        }
-        return output;
-      });
-};
-
-
-/**
- * Unregisters the conversion function to convert coordinates from the source
- * projection to the destination projection.  This method is used to clean up
- * cached transforms during testing.
- *
- * @param {ol.proj.Projection} source Source projection.
- * @param {ol.proj.Projection} destination Destination projection.
- * @return {ol.TransformFunction} transformFn The unregistered transform.
- */
-ol.proj.removeTransform = function(source, destination) {
-  var sourceCode = source.getCode();
-  var destinationCode = destination.getCode();
-  var transforms = ol.proj.transforms_;
-  ol.DEBUG && console.assert(sourceCode in transforms,
-      'sourceCode should be in transforms');
-  ol.DEBUG && console.assert(destinationCode in transforms[sourceCode],
-      'destinationCode should be in transforms of sourceCode');
-  var transform = transforms[sourceCode][destinationCode];
-  delete transforms[sourceCode][destinationCode];
-  if (ol.obj.isEmpty(transforms[sourceCode])) {
-    delete transforms[sourceCode];
-  }
-  return transform;
-};
-
-
-/**
- * Transforms a coordinate from longitude/latitude to a different projection.
- * @param {ol.Coordinate} coordinate Coordinate as longitude and latitude, i.e.
- *     an array with longitude as 1st and latitude as 2nd element.
- * @param {ol.ProjectionLike=} opt_projection Target projection. The
- *     default is Web Mercator, i.e. 'EPSG:3857'.
- * @return {ol.Coordinate} Coordinate projected to the target projection.
- * @api stable
- */
-ol.proj.fromLonLat = function(coordinate, opt_projection) {
-  return ol.proj.transform(coordinate, 'EPSG:4326',
-      opt_projection !== undefined ? opt_projection : 'EPSG:3857');
-};
-
-
-/**
- * Transforms a coordinate to longitude/latitude.
- * @param {ol.Coordinate} coordinate Projected coordinate.
- * @param {ol.ProjectionLike=} opt_projection Projection of the coordinate.
- *     The default is Web Mercator, i.e. 'EPSG:3857'.
- * @return {ol.Coordinate} Coordinate as longitude and latitude, i.e. an array
- *     with longitude as 1st and latitude as 2nd element.
- * @api stable
- */
-ol.proj.toLonLat = function(coordinate, opt_projection) {
-  return ol.proj.transform(coordinate,
-      opt_projection !== undefined ? opt_projection : 'EPSG:3857', 'EPSG:4326');
-};
-
-
-/**
- * Fetches a Projection object for the code specified.
- *
- * @param {ol.ProjectionLike} projectionLike Either a code string which is
- *     a combination of authority and identifier such as "EPSG:4326", or an
- *     existing projection object, or undefined.
- * @return {ol.proj.Projection} Projection object, or null if not in list.
- * @api stable
- */
-ol.proj.get = function(projectionLike) {
-  var projection;
-  if (projectionLike instanceof ol.proj.Projection) {
-    projection = projectionLike;
-  } else if (typeof projectionLike === 'string') {
-    var code = projectionLike;
-    projection = ol.proj.projections_[code];
-    if (ol.ENABLE_PROJ4JS) {
-      var proj4js = ol.proj.proj4_ || window['proj4'];
-      if (projection === undefined && typeof proj4js == 'function' &&
-          proj4js.defs(code) !== undefined) {
-        projection = new ol.proj.Projection({code: code});
-        ol.proj.addProjection(projection);
-      }
-    }
-  }
-  return projection || null;
-};
-
-
-/**
- * Checks if two projections are the same, that is every coordinate in one
- * projection does represent the same geographic point as the same coordinate in
- * the other projection.
- *
- * @param {ol.proj.Projection} projection1 Projection 1.
- * @param {ol.proj.Projection} projection2 Projection 2.
- * @return {boolean} Equivalent.
- * @api
- */
-ol.proj.equivalent = function(projection1, projection2) {
-  if (projection1 === projection2) {
-    return true;
-  }
-  var equalUnits = projection1.getUnits() === projection2.getUnits();
-  if (projection1.getCode() === projection2.getCode()) {
-    return equalUnits;
-  } else {
-    var transformFn = ol.proj.getTransformFromProjections(
-        projection1, projection2);
-    return transformFn === ol.proj.cloneTransform && equalUnits;
-  }
-};
-
-
-/**
- * Given the projection-like objects, searches for a transformation
- * function to convert a coordinates array from the source projection to the
- * destination projection.
- *
- * @param {ol.ProjectionLike} source Source.
- * @param {ol.ProjectionLike} destination Destination.
- * @return {ol.TransformFunction} Transform function.
- * @api stable
- */
-ol.proj.getTransform = function(source, destination) {
-  var sourceProjection = ol.proj.get(source);
-  var destinationProjection = ol.proj.get(destination);
-  return ol.proj.getTransformFromProjections(
-      sourceProjection, destinationProjection);
-};
-
-
-/**
- * Searches in the list of transform functions for the function for converting
- * coordinates from the source projection to the destination projection.
- *
- * @param {ol.proj.Projection} sourceProjection Source Projection object.
- * @param {ol.proj.Projection} destinationProjection Destination Projection
- *     object.
- * @return {ol.TransformFunction} Transform function.
- */
-ol.proj.getTransformFromProjections = function(sourceProjection, destinationProjection) {
-  var transforms = ol.proj.transforms_;
-  var sourceCode = sourceProjection.getCode();
-  var destinationCode = destinationProjection.getCode();
-  var transform;
-  if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {
-    transform = transforms[sourceCode][destinationCode];
-  }
-  if (transform === undefined) {
-    ol.DEBUG && console.assert(transform !== undefined, 'transform should be defined');
-    transform = ol.proj.identityTransform;
-  }
-  return transform;
-};
-
-
-/**
- * @param {Array.<number>} input Input coordinate array.
- * @param {Array.<number>=} opt_output Output array of coordinate values.
- * @param {number=} opt_dimension Dimension.
- * @return {Array.<number>} Input coordinate array (same array as input).
- */
-ol.proj.identityTransform = function(input, opt_output, opt_dimension) {
-  if (opt_output !== undefined && input !== opt_output) {
-    // TODO: consider making this a warning instead
-    ol.DEBUG && console.assert(false, 'This should not be used internally.');
-    for (var i = 0, ii = input.length; i < ii; ++i) {
-      opt_output[i] = input[i];
-    }
-    input = opt_output;
-  }
-  return input;
-};
-
-
-/**
- * @param {Array.<number>} input Input coordinate array.
- * @param {Array.<number>=} opt_output Output array of coordinate values.
- * @param {number=} opt_dimension Dimension.
- * @return {Array.<number>} Output coordinate array (new array, same coordinate
- *     values).
- */
-ol.proj.cloneTransform = function(input, opt_output, opt_dimension) {
-  var output;
-  if (opt_output !== undefined) {
-    for (var i = 0, ii = input.length; i < ii; ++i) {
-      opt_output[i] = input[i];
-    }
-    output = opt_output;
-  } else {
-    output = input.slice();
-  }
-  return output;
-};
-
-
-/**
- * Transforms a coordinate from source projection to destination projection.
- * This returns a new coordinate (and does not modify the original).
- *
- * See {@link ol.proj.transformExtent} for extent transformation.
- * See the transform method of {@link ol.geom.Geometry} and its subclasses for
- * geometry transforms.
- *
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {ol.ProjectionLike} source Source projection-like.
- * @param {ol.ProjectionLike} destination Destination projection-like.
- * @return {ol.Coordinate} Coordinate.
- * @api stable
- */
-ol.proj.transform = function(coordinate, source, destination) {
-  var transformFn = ol.proj.getTransform(source, destination);
-  return transformFn(coordinate, undefined, coordinate.length);
-};
-
-
-/**
- * Transforms an extent from source projection to destination projection.  This
- * returns a new extent (and does not modify the original).
- *
- * @param {ol.Extent} extent The extent to transform.
- * @param {ol.ProjectionLike} source Source projection-like.
- * @param {ol.ProjectionLike} destination Destination projection-like.
- * @return {ol.Extent} The transformed extent.
- * @api stable
- */
-ol.proj.transformExtent = function(extent, source, destination) {
-  var transformFn = ol.proj.getTransform(source, destination);
-  return ol.extent.applyTransform(extent, transformFn);
-};
-
-
-/**
- * Transforms the given point to the destination projection.
- *
- * @param {ol.Coordinate} point Point.
- * @param {ol.proj.Projection} sourceProjection Source projection.
- * @param {ol.proj.Projection} destinationProjection Destination projection.
- * @return {ol.Coordinate} Point.
- */
-ol.proj.transformWithProjections = function(point, sourceProjection, destinationProjection) {
-  var transformFn = ol.proj.getTransformFromProjections(
-      sourceProjection, destinationProjection);
-  return transformFn(point);
-};
-
-goog.provide('ol.geom.Geometry');
-goog.provide('ol.geom.GeometryLayout');
-goog.provide('ol.geom.GeometryType');
-
-goog.require('ol');
-goog.require('ol.functions');
-goog.require('ol.Object');
-goog.require('ol.extent');
-goog.require('ol.proj');
-goog.require('ol.proj.Units');
-
-
-/**
- * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,
- * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,
- * `'GeometryCollection'`, `'Circle'`.
- * @enum {string}
- */
-ol.geom.GeometryType = {
-  POINT: 'Point',
-  LINE_STRING: 'LineString',
-  LINEAR_RING: 'LinearRing',
-  POLYGON: 'Polygon',
-  MULTI_POINT: 'MultiPoint',
-  MULTI_LINE_STRING: 'MultiLineString',
-  MULTI_POLYGON: 'MultiPolygon',
-  GEOMETRY_COLLECTION: 'GeometryCollection',
-  CIRCLE: 'Circle'
-};
-
-
-/**
- * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')
- * or measure ('M') coordinate is available. Supported values are `'XY'`,
- * `'XYZ'`, `'XYM'`, `'XYZM'`.
- * @enum {string}
- */
-ol.geom.GeometryLayout = {
-  XY: 'XY',
-  XYZ: 'XYZ',
-  XYM: 'XYM',
-  XYZM: 'XYZM'
-};
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Base class for vector geometries.
- *
- * To get notified of changes to the geometry, register a listener for the
- * generic `change` event on your geometry instance.
- *
- * @constructor
- * @extends {ol.Object}
- * @api stable
- */
-ol.geom.Geometry = function() {
-
-  ol.Object.call(this);
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.extent_ = ol.extent.createEmpty();
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.extentRevision_ = -1;
-
-  /**
-   * @protected
-   * @type {Object.<string, ol.geom.Geometry>}
-   */
-  this.simplifiedGeometryCache = {};
-
-  /**
-   * @protected
-   * @type {number}
-   */
-  this.simplifiedGeometryMaxMinSquaredTolerance = 0;
-
-  /**
-   * @protected
-   * @type {number}
-   */
-  this.simplifiedGeometryRevision = 0;
-
-};
-ol.inherits(ol.geom.Geometry, ol.Object);
-
-
-/**
- * Make a complete copy of the geometry.
- * @abstract
- * @return {!ol.geom.Geometry} Clone.
- */
-ol.geom.Geometry.prototype.clone = function() {};
-
-
-/**
- * @abstract
- * @param {number} x X.
- * @param {number} y Y.
- * @param {ol.Coordinate} closestPoint Closest point.
- * @param {number} minSquaredDistance Minimum squared distance.
- * @return {number} Minimum squared distance.
- */
-ol.geom.Geometry.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {};
-
-
-/**
- * Return the closest point of the geometry to the passed point as
- * {@link ol.Coordinate coordinate}.
- * @param {ol.Coordinate} point Point.
- * @param {ol.Coordinate=} opt_closestPoint Closest point.
- * @return {ol.Coordinate} Closest point.
- * @api stable
- */
-ol.geom.Geometry.prototype.getClosestPoint = function(point, opt_closestPoint) {
-  var closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];
-  this.closestPointXY(point[0], point[1], closestPoint, Infinity);
-  return closestPoint;
-};
-
-
-/**
- * Returns true if this geometry includes the specified coordinate. If the
- * coordinate is on the boundary of the geometry, returns false.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @return {boolean} Contains coordinate.
- * @api
- */
-ol.geom.Geometry.prototype.intersectsCoordinate = function(coordinate) {
-  return this.containsXY(coordinate[0], coordinate[1]);
-};
-
-
-/**
- * @abstract
- * @param {ol.Extent} extent Extent.
- * @protected
- * @return {ol.Extent} extent Extent.
- */
-ol.geom.Geometry.prototype.computeExtent = function(extent) {};
-
-
-/**
- * @param {number} x X.
- * @param {number} y Y.
- * @return {boolean} Contains (x, y).
- */
-ol.geom.Geometry.prototype.containsXY = ol.functions.FALSE;
-
-
-/**
- * Get the extent of the geometry.
- * @param {ol.Extent=} opt_extent Extent.
- * @return {ol.Extent} extent Extent.
- * @api stable
- */
-ol.geom.Geometry.prototype.getExtent = function(opt_extent) {
-  if (this.extentRevision_ != this.getRevision()) {
-    this.extent_ = this.computeExtent(this.extent_);
-    this.extentRevision_ = this.getRevision();
-  }
-  return ol.extent.returnOrUpdate(this.extent_, opt_extent);
-};
-
-
-/**
- * Rotate the geometry around a given coordinate. This modifies the geometry
- * coordinates in place.
- * @abstract
- * @param {number} angle Rotation angle in radians.
- * @param {ol.Coordinate} anchor The rotation center.
- * @api
- */
-ol.geom.Geometry.prototype.rotate = function(angle, anchor) {};
-
-
-/**
- * Scale the geometry (with an optional origin).  This modifies the geometry
- * coordinates in place.
- * @abstract
- * @param {number} sx The scaling factor in the x-direction.
- * @param {number=} opt_sy The scaling factor in the y-direction (defaults to
- *     sx).
- * @param {ol.Coordinate=} opt_anchor The scale origin (defaults to the center
- *     of the geometry extent).
- * @api
- */
-ol.geom.Geometry.prototype.scale = function(sx, opt_sy, opt_anchor) {};
-
-
-/**
- * Create a simplified version of this geometry.  For linestrings, this uses
- * the the {@link
- * https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
- * Douglas Peucker} algorithm.  For polygons, a quantization-based
- * simplification is used to preserve topology.
- * @function
- * @param {number} tolerance The tolerance distance for simplification.
- * @return {ol.geom.Geometry} A new, simplified version of the original
- *     geometry.
- * @api
- */
-ol.geom.Geometry.prototype.simplify = function(tolerance) {
-  return this.getSimplifiedGeometry(tolerance * tolerance);
-};
-
-
-/**
- * Create a simplified version of this geometry using the Douglas Peucker
- * algorithm.
- * @see https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm
- * @abstract
- * @param {number} squaredTolerance Squared tolerance.
- * @return {ol.geom.Geometry} Simplified geometry.
- */
-ol.geom.Geometry.prototype.getSimplifiedGeometry = function(squaredTolerance) {};
-
-
-/**
- * Get the type of this geometry.
- * @abstract
- * @return {ol.geom.GeometryType} Geometry type.
- */
-ol.geom.Geometry.prototype.getType = function() {};
-
-
-/**
- * Apply a transform function to each coordinate of the geometry.
- * The geometry is modified in place.
- * If you do not want the geometry modified in place, first `clone()` it and
- * then use this function on the clone.
- * @abstract
- * @param {ol.TransformFunction} transformFn Transform.
- */
-ol.geom.Geometry.prototype.applyTransform = function(transformFn) {};
-
-
-/**
- * Test if the geometry and the passed extent intersect.
- * @abstract
- * @param {ol.Extent} extent Extent.
- * @return {boolean} `true` if the geometry and the extent intersect.
- */
-ol.geom.Geometry.prototype.intersectsExtent = function(extent) {};
-
-
-/**
- * Translate the geometry.  This modifies the geometry coordinates in place.  If
- * instead you want a new geometry, first `clone()` this geometry.
- * @abstract
- * @param {number} deltaX Delta X.
- * @param {number} deltaY Delta Y.
- */
-ol.geom.Geometry.prototype.translate = function(deltaX, deltaY) {};
-
-
-/**
- * Transform each coordinate of the geometry from one coordinate reference
- * system to another. The geometry is modified in place.
- * For example, a line will be transformed to a line and a circle to a circle.
- * If you do not want the geometry modified in place, first `clone()` it and
- * then use this function on the clone.
- *
- * @param {ol.ProjectionLike} source The current projection.  Can be a
- *     string identifier or a {@link ol.proj.Projection} object.
- * @param {ol.ProjectionLike} destination The desired projection.  Can be a
- *     string identifier or a {@link ol.proj.Projection} object.
- * @return {ol.geom.Geometry} This geometry.  Note that original geometry is
- *     modified in place.
- * @api stable
- */
-ol.geom.Geometry.prototype.transform = function(source, destination) {
-  ol.DEBUG && console.assert(
-      ol.proj.get(source).getUnits() !== ol.proj.Units.TILE_PIXELS &&
-      ol.proj.get(destination).getUnits() !== ol.proj.Units.TILE_PIXELS,
-      'cannot transform geometries with TILE_PIXELS units');
-  this.applyTransform(ol.proj.getTransform(source, destination));
-  return this;
-};
-
-goog.provide('ol.geom.flat.transform');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {ol.Transform} transform Transform.
- * @param {Array.<number>=} opt_dest Destination.
- * @return {Array.<number>} Transformed coordinates.
- */
-ol.geom.flat.transform.transform2D = function(flatCoordinates, offset, end, stride, transform, opt_dest) {
-  var dest = opt_dest ? opt_dest : [];
-  var i = 0;
-  var j;
-  for (j = offset; j < end; j += stride) {
-    var x = flatCoordinates[j];
-    var y = flatCoordinates[j + 1];
-    dest[i++] = transform[0] * x + transform[2] * y + transform[4];
-    dest[i++] = transform[1] * x + transform[3] * y + transform[5];
-  }
-  if (opt_dest && dest.length != i) {
-    dest.length = i;
-  }
-  return dest;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} angle Angle.
- * @param {Array.<number>} anchor Rotation anchor point.
- * @param {Array.<number>=} opt_dest Destination.
- * @return {Array.<number>} Transformed coordinates.
- */
-ol.geom.flat.transform.rotate = function(flatCoordinates, offset, end, stride, angle, anchor, opt_dest) {
-  var dest = opt_dest ? opt_dest : [];
-  var cos = Math.cos(angle);
-  var sin = Math.sin(angle);
-  var anchorX = anchor[0];
-  var anchorY = anchor[1];
-  var i = 0;
-  for (var j = offset; j < end; j += stride) {
-    var deltaX = flatCoordinates[j] - anchorX;
-    var deltaY = flatCoordinates[j + 1] - anchorY;
-    dest[i++] = anchorX + deltaX * cos - deltaY * sin;
-    dest[i++] = anchorY + deltaX * sin + deltaY * cos;
-    for (var k = j + 2; k < j + stride; ++k) {
-      dest[i++] = flatCoordinates[k];
-    }
-  }
-  if (opt_dest && dest.length != i) {
-    dest.length = i;
-  }
-  return dest;
-};
-
-
-/**
- * Scale the coordinates.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} sx Scale factor in the x-direction.
- * @param {number} sy Scale factor in the y-direction.
- * @param {Array.<number>} anchor Scale anchor point.
- * @param {Array.<number>=} opt_dest Destination.
- * @return {Array.<number>} Transformed coordinates.
- */
-ol.geom.flat.transform.scale = function(flatCoordinates, offset, end, stride, sx, sy, anchor, opt_dest) {
-  var dest = opt_dest ? opt_dest : [];
-  var anchorX = anchor[0];
-  var anchorY = anchor[1];
-  var i = 0;
-  for (var j = offset; j < end; j += stride) {
-    var deltaX = flatCoordinates[j] - anchorX;
-    var deltaY = flatCoordinates[j + 1] - anchorY;
-    dest[i++] = anchorX + sx * deltaX;
-    dest[i++] = anchorY + sy * deltaY;
-    for (var k = j + 2; k < j + stride; ++k) {
-      dest[i++] = flatCoordinates[k];
-    }
-  }
-  if (opt_dest && dest.length != i) {
-    dest.length = i;
-  }
-  return dest;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} deltaX Delta X.
- * @param {number} deltaY Delta Y.
- * @param {Array.<number>=} opt_dest Destination.
- * @return {Array.<number>} Transformed coordinates.
- */
-ol.geom.flat.transform.translate = function(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {
-  var dest = opt_dest ? opt_dest : [];
-  var i = 0;
-  var j, k;
-  for (j = offset; j < end; j += stride) {
-    dest[i++] = flatCoordinates[j] + deltaX;
-    dest[i++] = flatCoordinates[j + 1] + deltaY;
-    for (k = j + 2; k < j + stride; ++k) {
-      dest[i++] = flatCoordinates[k];
-    }
-  }
-  if (opt_dest && dest.length != i) {
-    dest.length = i;
-  }
-  return dest;
-};
-
-goog.provide('ol.geom.SimpleGeometry');
-
-goog.require('ol');
-goog.require('ol.functions');
-goog.require('ol.extent');
-goog.require('ol.geom.Geometry');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.flat.transform');
-goog.require('ol.obj');
-
-
-/**
- * @classdesc
- * Abstract base class; only used for creating subclasses; do not instantiate
- * in apps, as cannot be rendered.
- *
- * @constructor
- * @extends {ol.geom.Geometry}
- * @api stable
- */
-ol.geom.SimpleGeometry = function() {
-
-  ol.geom.Geometry.call(this);
-
-  /**
-   * @protected
-   * @type {ol.geom.GeometryLayout}
-   */
-  this.layout = ol.geom.GeometryLayout.XY;
-
-  /**
-   * @protected
-   * @type {number}
-   */
-  this.stride = 2;
-
-  /**
-   * @protected
-   * @type {Array.<number>}
-   */
-  this.flatCoordinates = null;
-
-};
-ol.inherits(ol.geom.SimpleGeometry, ol.geom.Geometry);
-
-
-/**
- * @param {number} stride Stride.
- * @private
- * @return {ol.geom.GeometryLayout} layout Layout.
- */
-ol.geom.SimpleGeometry.getLayoutForStride_ = function(stride) {
-  var layout;
-  if (stride == 2) {
-    layout = ol.geom.GeometryLayout.XY;
-  } else if (stride == 3) {
-    layout = ol.geom.GeometryLayout.XYZ;
-  } else if (stride == 4) {
-    layout = ol.geom.GeometryLayout.XYZM;
-  }
-  ol.DEBUG && console.assert(layout, 'unsupported stride: ' + stride);
-  return /** @type {ol.geom.GeometryLayout} */ (layout);
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @return {number} Stride.
- */
-ol.geom.SimpleGeometry.getStrideForLayout = function(layout) {
-  var stride;
-  if (layout == ol.geom.GeometryLayout.XY) {
-    stride = 2;
-  } else if (layout == ol.geom.GeometryLayout.XYZ || layout == ol.geom.GeometryLayout.XYM) {
-    stride = 3;
-  } else if (layout == ol.geom.GeometryLayout.XYZM) {
-    stride = 4;
-  }
-  ol.DEBUG && console.assert(stride, 'unsupported layout: ' + layout);
-  return /** @type {number} */ (stride);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.SimpleGeometry.prototype.containsXY = ol.functions.FALSE;
-
-
-/**
- * @inheritDoc
- */
-ol.geom.SimpleGeometry.prototype.computeExtent = function(extent) {
-  return ol.extent.createOrUpdateFromFlatCoordinates(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
-      extent);
-};
-
-
-/**
- * @abstract
- * @return {Array} Coordinates.
- */
-ol.geom.SimpleGeometry.prototype.getCoordinates = function() {};
-
-
-/**
- * Return the first coordinate of the geometry.
- * @return {ol.Coordinate} First coordinate.
- * @api stable
- */
-ol.geom.SimpleGeometry.prototype.getFirstCoordinate = function() {
-  return this.flatCoordinates.slice(0, this.stride);
-};
-
-
-/**
- * @return {Array.<number>} Flat coordinates.
- */
-ol.geom.SimpleGeometry.prototype.getFlatCoordinates = function() {
-  return this.flatCoordinates;
-};
-
-
-/**
- * Return the last coordinate of the geometry.
- * @return {ol.Coordinate} Last point.
- * @api stable
- */
-ol.geom.SimpleGeometry.prototype.getLastCoordinate = function() {
-  return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride);
-};
-
-
-/**
- * Return the {@link ol.geom.GeometryLayout layout} of the geometry.
- * @return {ol.geom.GeometryLayout} Layout.
- * @api stable
- */
-ol.geom.SimpleGeometry.prototype.getLayout = function() {
-  return this.layout;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.SimpleGeometry.prototype.getSimplifiedGeometry = function(squaredTolerance) {
-  if (this.simplifiedGeometryRevision != this.getRevision()) {
-    ol.obj.clear(this.simplifiedGeometryCache);
-    this.simplifiedGeometryMaxMinSquaredTolerance = 0;
-    this.simplifiedGeometryRevision = this.getRevision();
-  }
-  // If squaredTolerance is negative or if we know that simplification will not
-  // have any effect then just return this.
-  if (squaredTolerance < 0 ||
-      (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&
-       squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance)) {
-    return this;
-  }
-  var key = squaredTolerance.toString();
-  if (this.simplifiedGeometryCache.hasOwnProperty(key)) {
-    return this.simplifiedGeometryCache[key];
-  } else {
-    var simplifiedGeometry =
-        this.getSimplifiedGeometryInternal(squaredTolerance);
-    var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();
-    if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {
-      this.simplifiedGeometryCache[key] = simplifiedGeometry;
-      return simplifiedGeometry;
-    } else {
-      // Simplification did not actually remove any coordinates.  We now know
-      // that any calls to getSimplifiedGeometry with a squaredTolerance less
-      // than or equal to the current squaredTolerance will also not have any
-      // effect.  This allows us to short circuit simplification (saving CPU
-      // cycles) and prevents the cache of simplified geometries from filling
-      // up with useless identical copies of this geometry (saving memory).
-      this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;
-      return this;
-    }
-  }
-};
-
-
-/**
- * @param {number} squaredTolerance Squared tolerance.
- * @return {ol.geom.SimpleGeometry} Simplified geometry.
- * @protected
- */
-ol.geom.SimpleGeometry.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
-  return this;
-};
-
-
-/**
- * @return {number} Stride.
- */
-ol.geom.SimpleGeometry.prototype.getStride = function() {
-  return this.stride;
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @protected
- */
-ol.geom.SimpleGeometry.prototype.setFlatCoordinatesInternal = function(layout, flatCoordinates) {
-  this.stride = ol.geom.SimpleGeometry.getStrideForLayout(layout);
-  this.layout = layout;
-  this.flatCoordinates = flatCoordinates;
-};
-
-
-/**
- * @abstract
- * @param {Array} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- */
-ol.geom.SimpleGeometry.prototype.setCoordinates = function(coordinates, opt_layout) {};
-
-
-/**
- * @param {ol.geom.GeometryLayout|undefined} layout Layout.
- * @param {Array} coordinates Coordinates.
- * @param {number} nesting Nesting.
- * @protected
- */
-ol.geom.SimpleGeometry.prototype.setLayout = function(layout, coordinates, nesting) {
-  /** @type {number} */
-  var stride;
-  if (layout) {
-    stride = ol.geom.SimpleGeometry.getStrideForLayout(layout);
-  } else {
-    var i;
-    for (i = 0; i < nesting; ++i) {
-      if (coordinates.length === 0) {
-        this.layout = ol.geom.GeometryLayout.XY;
-        this.stride = 2;
-        return;
-      } else {
-        coordinates = /** @type {Array} */ (coordinates[0]);
-      }
-    }
-    stride = coordinates.length;
-    layout = ol.geom.SimpleGeometry.getLayoutForStride_(stride);
-  }
-  this.layout = layout;
-  this.stride = stride;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.SimpleGeometry.prototype.applyTransform = function(transformFn) {
-  if (this.flatCoordinates) {
-    transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);
-    this.changed();
-  }
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.geom.SimpleGeometry.prototype.rotate = function(angle, anchor) {
-  var flatCoordinates = this.getFlatCoordinates();
-  if (flatCoordinates) {
-    var stride = this.getStride();
-    ol.geom.flat.transform.rotate(
-        flatCoordinates, 0, flatCoordinates.length,
-        stride, angle, anchor, flatCoordinates);
-    this.changed();
-  }
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.geom.SimpleGeometry.prototype.scale = function(sx, opt_sy, opt_anchor) {
-  var sy = opt_sy;
-  if (sy === undefined) {
-    sy = sx;
-  }
-  var anchor = opt_anchor;
-  if (!anchor) {
-    anchor = ol.extent.getCenter(this.getExtent());
-  }
-  var flatCoordinates = this.getFlatCoordinates();
-  if (flatCoordinates) {
-    var stride = this.getStride();
-    ol.geom.flat.transform.scale(
-        flatCoordinates, 0, flatCoordinates.length,
-        stride, sx, sy, anchor, flatCoordinates);
-    this.changed();
-  }
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.SimpleGeometry.prototype.translate = function(deltaX, deltaY) {
-  var flatCoordinates = this.getFlatCoordinates();
-  if (flatCoordinates) {
-    var stride = this.getStride();
-    ol.geom.flat.transform.translate(
-        flatCoordinates, 0, flatCoordinates.length, stride,
-        deltaX, deltaY, flatCoordinates);
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.SimpleGeometry} simpleGeometry Simple geometry.
- * @param {ol.Transform} transform Transform.
- * @param {Array.<number>=} opt_dest Destination.
- * @return {Array.<number>} Transformed flat coordinates.
- */
-ol.geom.SimpleGeometry.transform2D = function(simpleGeometry, transform, opt_dest) {
-  var flatCoordinates = simpleGeometry.getFlatCoordinates();
-  if (!flatCoordinates) {
-    return null;
-  } else {
-    var stride = simpleGeometry.getStride();
-    return ol.geom.flat.transform.transform2D(
-        flatCoordinates, 0, flatCoordinates.length, stride,
-        transform, opt_dest);
-  }
-};
-
-goog.provide('ol.geom.flat.area');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @return {number} Area.
- */
-ol.geom.flat.area.linearRing = function(flatCoordinates, offset, end, stride) {
-  var twiceArea = 0;
-  var x1 = flatCoordinates[end - stride];
-  var y1 = flatCoordinates[end - stride + 1];
-  for (; offset < end; offset += stride) {
-    var x2 = flatCoordinates[offset];
-    var y2 = flatCoordinates[offset + 1];
-    twiceArea += y1 * x2 - x1 * y2;
-    x1 = x2;
-    y1 = y2;
-  }
-  return twiceArea / 2;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @return {number} Area.
- */
-ol.geom.flat.area.linearRings = function(flatCoordinates, offset, ends, stride) {
-  var area = 0;
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    area += ol.geom.flat.area.linearRing(flatCoordinates, offset, end, stride);
-    offset = end;
-  }
-  return area;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @return {number} Area.
- */
-ol.geom.flat.area.linearRingss = function(flatCoordinates, offset, endss, stride) {
-  var area = 0;
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    area +=
-        ol.geom.flat.area.linearRings(flatCoordinates, offset, ends, stride);
-    offset = ends[ends.length - 1];
-  }
-  return area;
-};
-
-goog.provide('ol.geom.flat.closest');
-
-goog.require('ol');
-goog.require('ol.math');
-
-
-/**
- * Returns the point on the 2D line segment flatCoordinates[offset1] to
- * flatCoordinates[offset2] that is closest to the point (x, y).  Extra
- * dimensions are linearly interpolated.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset1 Offset 1.
- * @param {number} offset2 Offset 2.
- * @param {number} stride Stride.
- * @param {number} x X.
- * @param {number} y Y.
- * @param {Array.<number>} closestPoint Closest point.
- */
-ol.geom.flat.closest.point = function(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) {
-  var x1 = flatCoordinates[offset1];
-  var y1 = flatCoordinates[offset1 + 1];
-  var dx = flatCoordinates[offset2] - x1;
-  var dy = flatCoordinates[offset2 + 1] - y1;
-  var i, offset;
-  if (dx === 0 && dy === 0) {
-    offset = offset1;
-  } else {
-    var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
-    if (t > 1) {
-      offset = offset2;
-    } else if (t > 0) {
-      for (i = 0; i < stride; ++i) {
-        closestPoint[i] = ol.math.lerp(flatCoordinates[offset1 + i],
-            flatCoordinates[offset2 + i], t);
-      }
-      closestPoint.length = stride;
-      return;
-    } else {
-      offset = offset1;
-    }
-  }
-  for (i = 0; i < stride; ++i) {
-    closestPoint[i] = flatCoordinates[offset + i];
-  }
-  closestPoint.length = stride;
-};
-
-
-/**
- * Return the squared of the largest distance between any pair of consecutive
- * coordinates.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} maxSquaredDelta Max squared delta.
- * @return {number} Max squared delta.
- */
-ol.geom.flat.closest.getMaxSquaredDelta = function(flatCoordinates, offset, end, stride, maxSquaredDelta) {
-  var x1 = flatCoordinates[offset];
-  var y1 = flatCoordinates[offset + 1];
-  for (offset += stride; offset < end; offset += stride) {
-    var x2 = flatCoordinates[offset];
-    var y2 = flatCoordinates[offset + 1];
-    var squaredDelta = ol.math.squaredDistance(x1, y1, x2, y2);
-    if (squaredDelta > maxSquaredDelta) {
-      maxSquaredDelta = squaredDelta;
-    }
-    x1 = x2;
-    y1 = y2;
-  }
-  return maxSquaredDelta;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {number} maxSquaredDelta Max squared delta.
- * @return {number} Max squared delta.
- */
-ol.geom.flat.closest.getsMaxSquaredDelta = function(flatCoordinates, offset, ends, stride, maxSquaredDelta) {
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    maxSquaredDelta = ol.geom.flat.closest.getMaxSquaredDelta(
-        flatCoordinates, offset, end, stride, maxSquaredDelta);
-    offset = end;
-  }
-  return maxSquaredDelta;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @param {number} maxSquaredDelta Max squared delta.
- * @return {number} Max squared delta.
- */
-ol.geom.flat.closest.getssMaxSquaredDelta = function(flatCoordinates, offset, endss, stride, maxSquaredDelta) {
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    maxSquaredDelta = ol.geom.flat.closest.getsMaxSquaredDelta(
-        flatCoordinates, offset, ends, stride, maxSquaredDelta);
-    offset = ends[ends.length - 1];
-  }
-  return maxSquaredDelta;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} maxDelta Max delta.
- * @param {boolean} isRing Is ring.
- * @param {number} x X.
- * @param {number} y Y.
- * @param {Array.<number>} closestPoint Closest point.
- * @param {number} minSquaredDistance Minimum squared distance.
- * @param {Array.<number>=} opt_tmpPoint Temporary point object.
- * @return {number} Minimum squared distance.
- */
-ol.geom.flat.closest.getClosestPoint = function(flatCoordinates, offset, end,
-    stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,
-    opt_tmpPoint) {
-  if (offset == end) {
-    return minSquaredDistance;
-  }
-  var i, squaredDistance;
-  if (maxDelta === 0) {
-    // All points are identical, so just test the first point.
-    squaredDistance = ol.math.squaredDistance(
-        x, y, flatCoordinates[offset], flatCoordinates[offset + 1]);
-    if (squaredDistance < minSquaredDistance) {
-      for (i = 0; i < stride; ++i) {
-        closestPoint[i] = flatCoordinates[offset + i];
-      }
-      closestPoint.length = stride;
-      return squaredDistance;
-    } else {
-      return minSquaredDistance;
-    }
-  }
-  ol.DEBUG && console.assert(maxDelta > 0, 'maxDelta should be larger than 0');
-  var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
-  var index = offset + stride;
-  while (index < end) {
-    ol.geom.flat.closest.point(
-        flatCoordinates, index - stride, index, stride, x, y, tmpPoint);
-    squaredDistance = ol.math.squaredDistance(x, y, tmpPoint[0], tmpPoint[1]);
-    if (squaredDistance < minSquaredDistance) {
-      minSquaredDistance = squaredDistance;
-      for (i = 0; i < stride; ++i) {
-        closestPoint[i] = tmpPoint[i];
-      }
-      closestPoint.length = stride;
-      index += stride;
-    } else {
-      // Skip ahead multiple points, because we know that all the skipped
-      // points cannot be any closer than the closest point we have found so
-      // far.  We know this because we know how close the current point is, how
-      // close the closest point we have found so far is, and the maximum
-      // distance between consecutive points.  For example, if we're currently
-      // at distance 10, the best we've found so far is 3, and that the maximum
-      // distance between consecutive points is 2, then we'll need to skip at
-      // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of
-      // finding a closer point.  We use Math.max(..., 1) to ensure that we
-      // always advance at least one point, to avoid an infinite loop.
-      index += stride * Math.max(
-          ((Math.sqrt(squaredDistance) -
-            Math.sqrt(minSquaredDistance)) / maxDelta) | 0, 1);
-    }
-  }
-  if (isRing) {
-    // Check the closing segment.
-    ol.geom.flat.closest.point(
-        flatCoordinates, end - stride, offset, stride, x, y, tmpPoint);
-    squaredDistance = ol.math.squaredDistance(x, y, tmpPoint[0], tmpPoint[1]);
-    if (squaredDistance < minSquaredDistance) {
-      minSquaredDistance = squaredDistance;
-      for (i = 0; i < stride; ++i) {
-        closestPoint[i] = tmpPoint[i];
-      }
-      closestPoint.length = stride;
-    }
-  }
-  return minSquaredDistance;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {number} maxDelta Max delta.
- * @param {boolean} isRing Is ring.
- * @param {number} x X.
- * @param {number} y Y.
- * @param {Array.<number>} closestPoint Closest point.
- * @param {number} minSquaredDistance Minimum squared distance.
- * @param {Array.<number>=} opt_tmpPoint Temporary point object.
- * @return {number} Minimum squared distance.
- */
-ol.geom.flat.closest.getsClosestPoint = function(flatCoordinates, offset, ends,
-    stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,
-    opt_tmpPoint) {
-  var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    minSquaredDistance = ol.geom.flat.closest.getClosestPoint(
-        flatCoordinates, offset, end, stride,
-        maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);
-    offset = end;
-  }
-  return minSquaredDistance;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @param {number} maxDelta Max delta.
- * @param {boolean} isRing Is ring.
- * @param {number} x X.
- * @param {number} y Y.
- * @param {Array.<number>} closestPoint Closest point.
- * @param {number} minSquaredDistance Minimum squared distance.
- * @param {Array.<number>=} opt_tmpPoint Temporary point object.
- * @return {number} Minimum squared distance.
- */
-ol.geom.flat.closest.getssClosestPoint = function(flatCoordinates, offset,
-    endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance,
-    opt_tmpPoint) {
-  var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    minSquaredDistance = ol.geom.flat.closest.getsClosestPoint(
-        flatCoordinates, offset, ends, stride,
-        maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);
-    offset = ends[ends.length - 1];
-  }
-  return minSquaredDistance;
-};
-
-goog.provide('ol.geom.flat.deflate');
-
-goog.require('ol');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} stride Stride.
- * @return {number} offset Offset.
- */
-ol.geom.flat.deflate.coordinate = function(flatCoordinates, offset, coordinate, stride) {
-  ol.DEBUG && console.assert(coordinate.length == stride,
-      'length of the coordinate array should match stride');
-  var i, ii;
-  for (i = 0, ii = coordinate.length; i < ii; ++i) {
-    flatCoordinates[offset++] = coordinate[i];
-  }
-  return offset;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @param {number} stride Stride.
- * @return {number} offset Offset.
- */
-ol.geom.flat.deflate.coordinates = function(flatCoordinates, offset, coordinates, stride) {
-  var i, ii;
-  for (i = 0, ii = coordinates.length; i < ii; ++i) {
-    var coordinate = coordinates[i];
-    ol.DEBUG && console.assert(coordinate.length == stride,
-        'length of coordinate array should match stride');
-    var j;
-    for (j = 0; j < stride; ++j) {
-      flatCoordinates[offset++] = coordinate[j];
-    }
-  }
-  return offset;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<ol.Coordinate>>} coordinatess Coordinatess.
- * @param {number} stride Stride.
- * @param {Array.<number>=} opt_ends Ends.
- * @return {Array.<number>} Ends.
- */
-ol.geom.flat.deflate.coordinatess = function(flatCoordinates, offset, coordinatess, stride, opt_ends) {
-  var ends = opt_ends ? opt_ends : [];
-  var i = 0;
-  var j, jj;
-  for (j = 0, jj = coordinatess.length; j < jj; ++j) {
-    var end = ol.geom.flat.deflate.coordinates(
-        flatCoordinates, offset, coordinatess[j], stride);
-    ends[i++] = end;
-    offset = end;
-  }
-  ends.length = i;
-  return ends;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<Array.<ol.Coordinate>>>} coordinatesss Coordinatesss.
- * @param {number} stride Stride.
- * @param {Array.<Array.<number>>=} opt_endss Endss.
- * @return {Array.<Array.<number>>} Endss.
- */
-ol.geom.flat.deflate.coordinatesss = function(flatCoordinates, offset, coordinatesss, stride, opt_endss) {
-  var endss = opt_endss ? opt_endss : [];
-  var i = 0;
-  var j, jj;
-  for (j = 0, jj = coordinatesss.length; j < jj; ++j) {
-    var ends = ol.geom.flat.deflate.coordinatess(
-        flatCoordinates, offset, coordinatesss[j], stride, endss[i]);
-    endss[i++] = ends;
-    offset = ends[ends.length - 1];
-  }
-  endss.length = i;
-  return endss;
-};
-
-goog.provide('ol.geom.flat.inflate');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {Array.<ol.Coordinate>=} opt_coordinates Coordinates.
- * @return {Array.<ol.Coordinate>} Coordinates.
- */
-ol.geom.flat.inflate.coordinates = function(flatCoordinates, offset, end, stride, opt_coordinates) {
-  var coordinates = opt_coordinates !== undefined ? opt_coordinates : [];
-  var i = 0;
-  var j;
-  for (j = offset; j < end; j += stride) {
-    coordinates[i++] = flatCoordinates.slice(j, j + stride);
-  }
-  coordinates.length = i;
-  return coordinates;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {Array.<Array.<ol.Coordinate>>=} opt_coordinatess Coordinatess.
- * @return {Array.<Array.<ol.Coordinate>>} Coordinatess.
- */
-ol.geom.flat.inflate.coordinatess = function(flatCoordinates, offset, ends, stride, opt_coordinatess) {
-  var coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];
-  var i = 0;
-  var j, jj;
-  for (j = 0, jj = ends.length; j < jj; ++j) {
-    var end = ends[j];
-    coordinatess[i++] = ol.geom.flat.inflate.coordinates(
-        flatCoordinates, offset, end, stride, coordinatess[i]);
-    offset = end;
-  }
-  coordinatess.length = i;
-  return coordinatess;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @param {Array.<Array.<Array.<ol.Coordinate>>>=} opt_coordinatesss
- *     Coordinatesss.
- * @return {Array.<Array.<Array.<ol.Coordinate>>>} Coordinatesss.
- */
-ol.geom.flat.inflate.coordinatesss = function(flatCoordinates, offset, endss, stride, opt_coordinatesss) {
-  var coordinatesss = opt_coordinatesss !== undefined ? opt_coordinatesss : [];
-  var i = 0;
-  var j, jj;
-  for (j = 0, jj = endss.length; j < jj; ++j) {
-    var ends = endss[j];
-    coordinatesss[i++] = ol.geom.flat.inflate.coordinatess(
-        flatCoordinates, offset, ends, stride, coordinatesss[i]);
-    offset = ends[ends.length - 1];
-  }
-  coordinatesss.length = i;
-  return coordinatesss;
-};
-
-// Based on simplify-js https://github.com/mourner/simplify-js
-// Copyright (c) 2012, Vladimir Agafonkin
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-//    1. Redistributions of source code must retain the above copyright notice,
-//       this list of conditions and the following disclaimer.
-//
-//    2. Redistributions in binary form must reproduce the above copyright
-//       notice, this list of conditions and the following disclaimer in the
-//       documentation and/or other materials provided with the distribution.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-
-goog.provide('ol.geom.flat.simplify');
-
-goog.require('ol.math');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {boolean} highQuality Highest quality.
- * @param {Array.<number>=} opt_simplifiedFlatCoordinates Simplified flat
- *     coordinates.
- * @return {Array.<number>} Simplified line string.
- */
-ol.geom.flat.simplify.lineString = function(flatCoordinates, offset, end,
-    stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {
-  var simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined ?
-      opt_simplifiedFlatCoordinates : [];
-  if (!highQuality) {
-    end = ol.geom.flat.simplify.radialDistance(flatCoordinates, offset, end,
-        stride, squaredTolerance,
-        simplifiedFlatCoordinates, 0);
-    flatCoordinates = simplifiedFlatCoordinates;
-    offset = 0;
-    stride = 2;
-  }
-  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(
-      flatCoordinates, offset, end, stride, squaredTolerance,
-      simplifiedFlatCoordinates, 0);
-  return simplifiedFlatCoordinates;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat
- *     coordinates.
- * @param {number} simplifiedOffset Simplified offset.
- * @return {number} Simplified offset.
- */
-ol.geom.flat.simplify.douglasPeucker = function(flatCoordinates, offset, end,
-    stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {
-  var n = (end - offset) / stride;
-  if (n < 3) {
-    for (; offset < end; offset += stride) {
-      simplifiedFlatCoordinates[simplifiedOffset++] =
-          flatCoordinates[offset];
-      simplifiedFlatCoordinates[simplifiedOffset++] =
-          flatCoordinates[offset + 1];
-    }
-    return simplifiedOffset;
-  }
-  /** @type {Array.<number>} */
-  var markers = new Array(n);
-  markers[0] = 1;
-  markers[n - 1] = 1;
-  /** @type {Array.<number>} */
-  var stack = [offset, end - stride];
-  var index = 0;
-  var i;
-  while (stack.length > 0) {
-    var last = stack.pop();
-    var first = stack.pop();
-    var maxSquaredDistance = 0;
-    var x1 = flatCoordinates[first];
-    var y1 = flatCoordinates[first + 1];
-    var x2 = flatCoordinates[last];
-    var y2 = flatCoordinates[last + 1];
-    for (i = first + stride; i < last; i += stride) {
-      var x = flatCoordinates[i];
-      var y = flatCoordinates[i + 1];
-      var squaredDistance = ol.math.squaredSegmentDistance(
-          x, y, x1, y1, x2, y2);
-      if (squaredDistance > maxSquaredDistance) {
-        index = i;
-        maxSquaredDistance = squaredDistance;
-      }
-    }
-    if (maxSquaredDistance > squaredTolerance) {
-      markers[(index - offset) / stride] = 1;
-      if (first + stride < index) {
-        stack.push(first, index);
-      }
-      if (index + stride < last) {
-        stack.push(index, last);
-      }
-    }
-  }
-  for (i = 0; i < n; ++i) {
-    if (markers[i]) {
-      simplifiedFlatCoordinates[simplifiedOffset++] =
-          flatCoordinates[offset + i * stride];
-      simplifiedFlatCoordinates[simplifiedOffset++] =
-          flatCoordinates[offset + i * stride + 1];
-    }
-  }
-  return simplifiedOffset;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat
- *     coordinates.
- * @param {number} simplifiedOffset Simplified offset.
- * @param {Array.<number>} simplifiedEnds Simplified ends.
- * @return {number} Simplified offset.
- */
-ol.geom.flat.simplify.douglasPeuckers = function(flatCoordinates, offset,
-    ends, stride, squaredTolerance, simplifiedFlatCoordinates,
-    simplifiedOffset, simplifiedEnds) {
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    simplifiedOffset = ol.geom.flat.simplify.douglasPeucker(
-        flatCoordinates, offset, end, stride, squaredTolerance,
-        simplifiedFlatCoordinates, simplifiedOffset);
-    simplifiedEnds.push(simplifiedOffset);
-    offset = end;
-  }
-  return simplifiedOffset;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat
- *     coordinates.
- * @param {number} simplifiedOffset Simplified offset.
- * @param {Array.<Array.<number>>} simplifiedEndss Simplified endss.
- * @return {number} Simplified offset.
- */
-ol.geom.flat.simplify.douglasPeuckerss = function(
-    flatCoordinates, offset, endss, stride, squaredTolerance,
-    simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    var simplifiedEnds = [];
-    simplifiedOffset = ol.geom.flat.simplify.douglasPeuckers(
-        flatCoordinates, offset, ends, stride, squaredTolerance,
-        simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);
-    simplifiedEndss.push(simplifiedEnds);
-    offset = ends[ends.length - 1];
-  }
-  return simplifiedOffset;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat
- *     coordinates.
- * @param {number} simplifiedOffset Simplified offset.
- * @return {number} Simplified offset.
- */
-ol.geom.flat.simplify.radialDistance = function(flatCoordinates, offset, end,
-    stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {
-  if (end <= offset + stride) {
-    // zero or one point, no simplification possible, so copy and return
-    for (; offset < end; offset += stride) {
-      simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];
-      simplifiedFlatCoordinates[simplifiedOffset++] =
-          flatCoordinates[offset + 1];
-    }
-    return simplifiedOffset;
-  }
-  var x1 = flatCoordinates[offset];
-  var y1 = flatCoordinates[offset + 1];
-  // copy first point
-  simplifiedFlatCoordinates[simplifiedOffset++] = x1;
-  simplifiedFlatCoordinates[simplifiedOffset++] = y1;
-  var x2 = x1;
-  var y2 = y1;
-  for (offset += stride; offset < end; offset += stride) {
-    x2 = flatCoordinates[offset];
-    y2 = flatCoordinates[offset + 1];
-    if (ol.math.squaredDistance(x1, y1, x2, y2) > squaredTolerance) {
-      // copy point at offset
-      simplifiedFlatCoordinates[simplifiedOffset++] = x2;
-      simplifiedFlatCoordinates[simplifiedOffset++] = y2;
-      x1 = x2;
-      y1 = y2;
-    }
-  }
-  if (x2 != x1 || y2 != y1) {
-    // copy last point
-    simplifiedFlatCoordinates[simplifiedOffset++] = x2;
-    simplifiedFlatCoordinates[simplifiedOffset++] = y2;
-  }
-  return simplifiedOffset;
-};
-
-
-/**
- * @param {number} value Value.
- * @param {number} tolerance Tolerance.
- * @return {number} Rounded value.
- */
-ol.geom.flat.simplify.snap = function(value, tolerance) {
-  return tolerance * Math.round(value / tolerance);
-};
-
-
-/**
- * Simplifies a line string using an algorithm designed by Tim Schaub.
- * Coordinates are snapped to the nearest value in a virtual grid and
- * consecutive duplicate coordinates are discarded.  This effectively preserves
- * topology as the simplification of any subsection of a line string is
- * independent of the rest of the line string.  This means that, for examples,
- * the common edge between two polygons will be simplified to the same line
- * string independently in both polygons.  This implementation uses a single
- * pass over the coordinates and eliminates intermediate collinear points.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} tolerance Tolerance.
- * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat
- *     coordinates.
- * @param {number} simplifiedOffset Simplified offset.
- * @return {number} Simplified offset.
- */
-ol.geom.flat.simplify.quantize = function(flatCoordinates, offset, end, stride,
-    tolerance, simplifiedFlatCoordinates, simplifiedOffset) {
-  // do nothing if the line is empty
-  if (offset == end) {
-    return simplifiedOffset;
-  }
-  // snap the first coordinate (P1)
-  var x1 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);
-  var y1 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);
-  offset += stride;
-  // add the first coordinate to the output
-  simplifiedFlatCoordinates[simplifiedOffset++] = x1;
-  simplifiedFlatCoordinates[simplifiedOffset++] = y1;
-  // find the next coordinate that does not snap to the same value as the first
-  // coordinate (P2)
-  var x2, y2;
-  do {
-    x2 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);
-    y2 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);
-    offset += stride;
-    if (offset == end) {
-      // all coordinates snap to the same value, the line collapses to a point
-      // push the last snapped value anyway to ensure that the output contains
-      // at least two points
-      // FIXME should we really return at least two points anyway?
-      simplifiedFlatCoordinates[simplifiedOffset++] = x2;
-      simplifiedFlatCoordinates[simplifiedOffset++] = y2;
-      return simplifiedOffset;
-    }
-  } while (x2 == x1 && y2 == y1);
-  while (offset < end) {
-    var x3, y3;
-    // snap the next coordinate (P3)
-    x3 = ol.geom.flat.simplify.snap(flatCoordinates[offset], tolerance);
-    y3 = ol.geom.flat.simplify.snap(flatCoordinates[offset + 1], tolerance);
-    offset += stride;
-    // skip P3 if it is equal to P2
-    if (x3 == x2 && y3 == y2) {
-      continue;
-    }
-    // calculate the delta between P1 and P2
-    var dx1 = x2 - x1;
-    var dy1 = y2 - y1;
-    // calculate the delta between P3 and P1
-    var dx2 = x3 - x1;
-    var dy2 = y3 - y1;
-    // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from
-    // P1 in the same direction then P2 is on the straight line between P1 and
-    // P3
-    if ((dx1 * dy2 == dy1 * dx2) &&
-        ((dx1 < 0 && dx2 < dx1) || dx1 == dx2 || (dx1 > 0 && dx2 > dx1)) &&
-        ((dy1 < 0 && dy2 < dy1) || dy1 == dy2 || (dy1 > 0 && dy2 > dy1))) {
-      // discard P2 and set P2 = P3
-      x2 = x3;
-      y2 = y3;
-      continue;
-    }
-    // either P1, P2, and P3 are not colinear, or they are colinear but P3 is
-    // between P3 and P1 or on the opposite half of the line to P2.  add P2,
-    // and continue with P1 = P2 and P2 = P3
-    simplifiedFlatCoordinates[simplifiedOffset++] = x2;
-    simplifiedFlatCoordinates[simplifiedOffset++] = y2;
-    x1 = x2;
-    y1 = y2;
-    x2 = x3;
-    y2 = y3;
-  }
-  // add the last point (P2)
-  simplifiedFlatCoordinates[simplifiedOffset++] = x2;
-  simplifiedFlatCoordinates[simplifiedOffset++] = y2;
-  return simplifiedOffset;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {number} tolerance Tolerance.
- * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat
- *     coordinates.
- * @param {number} simplifiedOffset Simplified offset.
- * @param {Array.<number>} simplifiedEnds Simplified ends.
- * @return {number} Simplified offset.
- */
-ol.geom.flat.simplify.quantizes = function(
-    flatCoordinates, offset, ends, stride,
-    tolerance,
-    simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    simplifiedOffset = ol.geom.flat.simplify.quantize(
-        flatCoordinates, offset, end, stride,
-        tolerance,
-        simplifiedFlatCoordinates, simplifiedOffset);
-    simplifiedEnds.push(simplifiedOffset);
-    offset = end;
-  }
-  return simplifiedOffset;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @param {number} tolerance Tolerance.
- * @param {Array.<number>} simplifiedFlatCoordinates Simplified flat
- *     coordinates.
- * @param {number} simplifiedOffset Simplified offset.
- * @param {Array.<Array.<number>>} simplifiedEndss Simplified endss.
- * @return {number} Simplified offset.
- */
-ol.geom.flat.simplify.quantizess = function(
-    flatCoordinates, offset, endss, stride,
-    tolerance,
-    simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    var simplifiedEnds = [];
-    simplifiedOffset = ol.geom.flat.simplify.quantizes(
-        flatCoordinates, offset, ends, stride,
-        tolerance,
-        simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);
-    simplifiedEndss.push(simplifiedEnds);
-    offset = ends[ends.length - 1];
-  }
-  return simplifiedOffset;
-};
-
-goog.provide('ol.geom.LinearRing');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.area');
-goog.require('ol.geom.flat.closest');
-goog.require('ol.geom.flat.deflate');
-goog.require('ol.geom.flat.inflate');
-goog.require('ol.geom.flat.simplify');
-
-
-/**
- * @classdesc
- * Linear ring geometry. Only used as part of polygon; cannot be rendered
- * on its own.
- *
- * @constructor
- * @extends {ol.geom.SimpleGeometry}
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.LinearRing = function(coordinates, opt_layout) {
-
-  ol.geom.SimpleGeometry.call(this);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDelta_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDeltaRevision_ = -1;
-
-  this.setCoordinates(coordinates, opt_layout);
-
-};
-ol.inherits(ol.geom.LinearRing, ol.geom.SimpleGeometry);
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.LinearRing} Clone.
- * @api stable
- */
-ol.geom.LinearRing.prototype.clone = function() {
-  var linearRing = new ol.geom.LinearRing(null);
-  linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
-  return linearRing;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.LinearRing.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  if (minSquaredDistance <
-      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
-    return minSquaredDistance;
-  }
-  if (this.maxDeltaRevision_ != this.getRevision()) {
-    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getMaxSquaredDelta(
-        this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));
-    this.maxDeltaRevision_ = this.getRevision();
-  }
-  return ol.geom.flat.closest.getClosestPoint(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
-      this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);
-};
-
-
-/**
- * Return the area of the linear ring on projected plane.
- * @return {number} Area (on projected plane).
- * @api stable
- */
-ol.geom.LinearRing.prototype.getArea = function() {
-  return ol.geom.flat.area.linearRing(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
-};
-
-
-/**
- * Return the coordinates of the linear ring.
- * @return {Array.<ol.Coordinate>} Coordinates.
- * @api stable
- */
-ol.geom.LinearRing.prototype.getCoordinates = function() {
-  return ol.geom.flat.inflate.coordinates(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.LinearRing.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
-  var simplifiedFlatCoordinates = [];
-  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
-      squaredTolerance, simplifiedFlatCoordinates, 0);
-  var simplifiedLinearRing = new ol.geom.LinearRing(null);
-  simplifiedLinearRing.setFlatCoordinates(
-      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates);
-  return simplifiedLinearRing;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.LinearRing.prototype.getType = function() {
-  return ol.geom.GeometryType.LINEAR_RING;
-};
-
-
-/**
- * Set the coordinates of the linear ring.
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.LinearRing.prototype.setCoordinates = function(coordinates, opt_layout) {
-  if (!coordinates) {
-    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
-  } else {
-    this.setLayout(opt_layout, coordinates, 1);
-    if (!this.flatCoordinates) {
-      this.flatCoordinates = [];
-    }
-    this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(
-        this.flatCoordinates, 0, coordinates, this.stride);
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- */
-ol.geom.LinearRing.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
-  this.setFlatCoordinatesInternal(layout, flatCoordinates);
-  this.changed();
-};
-
-goog.provide('ol.geom.Point');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.deflate');
-goog.require('ol.math');
-
-
-/**
- * @classdesc
- * Point geometry.
- *
- * @constructor
- * @extends {ol.geom.SimpleGeometry}
- * @param {ol.Coordinate} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.Point = function(coordinates, opt_layout) {
-  ol.geom.SimpleGeometry.call(this);
-  this.setCoordinates(coordinates, opt_layout);
-};
-ol.inherits(ol.geom.Point, ol.geom.SimpleGeometry);
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.Point} Clone.
- * @api stable
- */
-ol.geom.Point.prototype.clone = function() {
-  var point = new ol.geom.Point(null);
-  point.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
-  return point;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.Point.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  var flatCoordinates = this.flatCoordinates;
-  var squaredDistance = ol.math.squaredDistance(
-      x, y, flatCoordinates[0], flatCoordinates[1]);
-  if (squaredDistance < minSquaredDistance) {
-    var stride = this.stride;
-    var i;
-    for (i = 0; i < stride; ++i) {
-      closestPoint[i] = flatCoordinates[i];
-    }
-    closestPoint.length = stride;
-    return squaredDistance;
-  } else {
-    return minSquaredDistance;
-  }
-};
-
-
-/**
- * Return the coordinate of the point.
- * @return {ol.Coordinate} Coordinates.
- * @api stable
- */
-ol.geom.Point.prototype.getCoordinates = function() {
-  return !this.flatCoordinates ? [] : this.flatCoordinates.slice();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.Point.prototype.computeExtent = function(extent) {
-  return ol.extent.createOrUpdateFromCoordinate(this.flatCoordinates, extent);
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.Point.prototype.getType = function() {
-  return ol.geom.GeometryType.POINT;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.Point.prototype.intersectsExtent = function(extent) {
-  return ol.extent.containsXY(extent,
-      this.flatCoordinates[0], this.flatCoordinates[1]);
-};
-
-
-/**
- * Set the coordinate of the point.
- * @param {ol.Coordinate} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.Point.prototype.setCoordinates = function(coordinates, opt_layout) {
-  if (!coordinates) {
-    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
-  } else {
-    this.setLayout(opt_layout, coordinates, 0);
-    if (!this.flatCoordinates) {
-      this.flatCoordinates = [];
-    }
-    this.flatCoordinates.length = ol.geom.flat.deflate.coordinate(
-        this.flatCoordinates, 0, coordinates, this.stride);
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- */
-ol.geom.Point.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
-  this.setFlatCoordinatesInternal(layout, flatCoordinates);
-  this.changed();
-};
-
-goog.provide('ol.geom.flat.contains');
-
-goog.require('ol');
-goog.require('ol.extent');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {ol.Extent} extent Extent.
- * @return {boolean} Contains extent.
- */
-ol.geom.flat.contains.linearRingContainsExtent = function(flatCoordinates, offset, end, stride, extent) {
-  var outside = ol.extent.forEachCorner(extent,
-      /**
-       * @param {ol.Coordinate} coordinate Coordinate.
-       * @return {boolean} Contains (x, y).
-       */
-      function(coordinate) {
-        return !ol.geom.flat.contains.linearRingContainsXY(flatCoordinates,
-            offset, end, stride, coordinate[0], coordinate[1]);
-      });
-  return !outside;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} x X.
- * @param {number} y Y.
- * @return {boolean} Contains (x, y).
- */
-ol.geom.flat.contains.linearRingContainsXY = function(flatCoordinates, offset, end, stride, x, y) {
-  // http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
-  var contains = false;
-  var x1 = flatCoordinates[end - stride];
-  var y1 = flatCoordinates[end - stride + 1];
-  for (; offset < end; offset += stride) {
-    var x2 = flatCoordinates[offset];
-    var y2 = flatCoordinates[offset + 1];
-    var intersect = ((y1 > y) != (y2 > y)) &&
-        (x < (x2 - x1) * (y - y1) / (y2 - y1) + x1);
-    if (intersect) {
-      contains = !contains;
-    }
-    x1 = x2;
-    y1 = y2;
-  }
-  return contains;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {number} x X.
- * @param {number} y Y.
- * @return {boolean} Contains (x, y).
- */
-ol.geom.flat.contains.linearRingsContainsXY = function(flatCoordinates, offset, ends, stride, x, y) {
-  ol.DEBUG && console.assert(ends.length > 0, 'ends should not be an empty array');
-  if (ends.length === 0) {
-    return false;
-  }
-  if (!ol.geom.flat.contains.linearRingContainsXY(
-      flatCoordinates, offset, ends[0], stride, x, y)) {
-    return false;
-  }
-  var i, ii;
-  for (i = 1, ii = ends.length; i < ii; ++i) {
-    if (ol.geom.flat.contains.linearRingContainsXY(
-        flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {
-      return false;
-    }
-  }
-  return true;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @param {number} x X.
- * @param {number} y Y.
- * @return {boolean} Contains (x, y).
- */
-ol.geom.flat.contains.linearRingssContainsXY = function(flatCoordinates, offset, endss, stride, x, y) {
-  ol.DEBUG && console.assert(endss.length > 0, 'endss should not be an empty array');
-  if (endss.length === 0) {
-    return false;
-  }
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    if (ol.geom.flat.contains.linearRingsContainsXY(
-        flatCoordinates, offset, ends, stride, x, y)) {
-      return true;
-    }
-    offset = ends[ends.length - 1];
-  }
-  return false;
-};
-
-goog.provide('ol.geom.flat.interiorpoint');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.geom.flat.contains');
-
-
-/**
- * Calculates a point that is likely to lie in the interior of the linear rings.
- * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {Array.<number>} flatCenters Flat centers.
- * @param {number} flatCentersOffset Flat center offset.
- * @param {Array.<number>=} opt_dest Destination.
- * @return {Array.<number>} Destination.
- */
-ol.geom.flat.interiorpoint.linearRings = function(flatCoordinates, offset,
-    ends, stride, flatCenters, flatCentersOffset, opt_dest) {
-  var i, ii, x, x1, x2, y1, y2;
-  var y = flatCenters[flatCentersOffset + 1];
-  /** @type {Array.<number>} */
-  var intersections = [];
-  // Calculate intersections with the horizontal line
-  var end = ends[0];
-  x1 = flatCoordinates[end - stride];
-  y1 = flatCoordinates[end - stride + 1];
-  for (i = offset; i < end; i += stride) {
-    x2 = flatCoordinates[i];
-    y2 = flatCoordinates[i + 1];
-    if ((y <= y1 && y2 <= y) || (y1 <= y && y <= y2)) {
-      x = (y - y1) / (y2 - y1) * (x2 - x1) + x1;
-      intersections.push(x);
-    }
-    x1 = x2;
-    y1 = y2;
-  }
-  // Find the longest segment of the horizontal line that has its center point
-  // inside the linear ring.
-  var pointX = NaN;
-  var maxSegmentLength = -Infinity;
-  intersections.sort(ol.array.numberSafeCompareFunction);
-  x1 = intersections[0];
-  for (i = 1, ii = intersections.length; i < ii; ++i) {
-    x2 = intersections[i];
-    var segmentLength = Math.abs(x2 - x1);
-    if (segmentLength > maxSegmentLength) {
-      x = (x1 + x2) / 2;
-      if (ol.geom.flat.contains.linearRingsContainsXY(
-          flatCoordinates, offset, ends, stride, x, y)) {
-        pointX = x;
-        maxSegmentLength = segmentLength;
-      }
-    }
-    x1 = x2;
-  }
-  if (isNaN(pointX)) {
-    // There is no horizontal line that has its center point inside the linear
-    // ring.  Use the center of the the linear ring's extent.
-    pointX = flatCenters[flatCentersOffset];
-  }
-  if (opt_dest) {
-    opt_dest.push(pointX, y);
-    return opt_dest;
-  } else {
-    return [pointX, y];
-  }
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @param {Array.<number>} flatCenters Flat centers.
- * @return {Array.<number>} Interior points.
- */
-ol.geom.flat.interiorpoint.linearRingss = function(flatCoordinates, offset, endss, stride, flatCenters) {
-  ol.DEBUG && console.assert(2 * endss.length == flatCenters.length,
-      'endss.length times 2 should be flatCenters.length');
-  var interiorPoints = [];
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    interiorPoints = ol.geom.flat.interiorpoint.linearRings(flatCoordinates,
-        offset, ends, stride, flatCenters, 2 * i, interiorPoints);
-    offset = ends[ends.length - 1];
-  }
-  return interiorPoints;
-};
-
-goog.provide('ol.geom.flat.segments');
-
-
-/**
- * This function calls `callback` for each segment of the flat coordinates
- * array. If the callback returns a truthy value the function returns that
- * value immediately. Otherwise the function returns `false`.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {function(this: S, ol.Coordinate, ol.Coordinate): T} callback Function
- *     called for each segment.
- * @param {S=} opt_this The object to be used as the value of 'this'
- *     within callback.
- * @return {T|boolean} Value.
- * @template T,S
- */
-ol.geom.flat.segments.forEach = function(flatCoordinates, offset, end, stride, callback, opt_this) {
-  var point1 = [flatCoordinates[offset], flatCoordinates[offset + 1]];
-  var point2 = [];
-  var ret;
-  for (; (offset + stride) < end; offset += stride) {
-    point2[0] = flatCoordinates[offset + stride];
-    point2[1] = flatCoordinates[offset + stride + 1];
-    ret = callback.call(opt_this, point1, point2);
-    if (ret) {
-      return ret;
-    }
-    point1[0] = point2[0];
-    point1[1] = point2[1];
-  }
-  return false;
-};
-
-goog.provide('ol.geom.flat.intersectsextent');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.geom.flat.contains');
-goog.require('ol.geom.flat.segments');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {ol.Extent} extent Extent.
- * @return {boolean} True if the geometry and the extent intersect.
- */
-ol.geom.flat.intersectsextent.lineString = function(flatCoordinates, offset, end, stride, extent) {
-  var coordinatesExtent = ol.extent.extendFlatCoordinates(
-      ol.extent.createEmpty(), flatCoordinates, offset, end, stride);
-  if (!ol.extent.intersects(extent, coordinatesExtent)) {
-    return false;
-  }
-  if (ol.extent.containsExtent(extent, coordinatesExtent)) {
-    return true;
-  }
-  if (coordinatesExtent[0] >= extent[0] &&
-      coordinatesExtent[2] <= extent[2]) {
-    return true;
-  }
-  if (coordinatesExtent[1] >= extent[1] &&
-      coordinatesExtent[3] <= extent[3]) {
-    return true;
-  }
-  return ol.geom.flat.segments.forEach(flatCoordinates, offset, end, stride,
-      /**
-       * @param {ol.Coordinate} point1 Start point.
-       * @param {ol.Coordinate} point2 End point.
-       * @return {boolean} `true` if the segment and the extent intersect,
-       *     `false` otherwise.
-       */
-      function(point1, point2) {
-        return ol.extent.intersectsSegment(extent, point1, point2);
-      });
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {ol.Extent} extent Extent.
- * @return {boolean} True if the geometry and the extent intersect.
- */
-ol.geom.flat.intersectsextent.lineStrings = function(flatCoordinates, offset, ends, stride, extent) {
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    if (ol.geom.flat.intersectsextent.lineString(
-        flatCoordinates, offset, ends[i], stride, extent)) {
-      return true;
-    }
-    offset = ends[i];
-  }
-  return false;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {ol.Extent} extent Extent.
- * @return {boolean} True if the geometry and the extent intersect.
- */
-ol.geom.flat.intersectsextent.linearRing = function(flatCoordinates, offset, end, stride, extent) {
-  if (ol.geom.flat.intersectsextent.lineString(
-      flatCoordinates, offset, end, stride, extent)) {
-    return true;
-  }
-  if (ol.geom.flat.contains.linearRingContainsXY(
-      flatCoordinates, offset, end, stride, extent[0], extent[1])) {
-    return true;
-  }
-  if (ol.geom.flat.contains.linearRingContainsXY(
-      flatCoordinates, offset, end, stride, extent[0], extent[3])) {
-    return true;
-  }
-  if (ol.geom.flat.contains.linearRingContainsXY(
-      flatCoordinates, offset, end, stride, extent[2], extent[1])) {
-    return true;
-  }
-  if (ol.geom.flat.contains.linearRingContainsXY(
-      flatCoordinates, offset, end, stride, extent[2], extent[3])) {
-    return true;
-  }
-  return false;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {ol.Extent} extent Extent.
- * @return {boolean} True if the geometry and the extent intersect.
- */
-ol.geom.flat.intersectsextent.linearRings = function(flatCoordinates, offset, ends, stride, extent) {
-  ol.DEBUG && console.assert(ends.length > 0, 'ends should not be an empty array');
-  if (!ol.geom.flat.intersectsextent.linearRing(
-      flatCoordinates, offset, ends[0], stride, extent)) {
-    return false;
-  }
-  if (ends.length === 1) {
-    return true;
-  }
-  var i, ii;
-  for (i = 1, ii = ends.length; i < ii; ++i) {
-    if (ol.geom.flat.contains.linearRingContainsExtent(
-        flatCoordinates, ends[i - 1], ends[i], stride, extent)) {
-      return false;
-    }
-  }
-  return true;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @param {ol.Extent} extent Extent.
- * @return {boolean} True if the geometry and the extent intersect.
- */
-ol.geom.flat.intersectsextent.linearRingss = function(flatCoordinates, offset, endss, stride, extent) {
-  ol.DEBUG && console.assert(endss.length > 0, 'endss should not be an empty array');
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    if (ol.geom.flat.intersectsextent.linearRings(
-        flatCoordinates, offset, ends, stride, extent)) {
-      return true;
-    }
-    offset = ends[ends.length - 1];
-  }
-  return false;
-};
-
-goog.provide('ol.geom.flat.reverse');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- */
-ol.geom.flat.reverse.coordinates = function(flatCoordinates, offset, end, stride) {
-  while (offset < end - stride) {
-    var i;
-    for (i = 0; i < stride; ++i) {
-      var tmp = flatCoordinates[offset + i];
-      flatCoordinates[offset + i] = flatCoordinates[end - stride + i];
-      flatCoordinates[end - stride + i] = tmp;
-    }
-    offset += stride;
-    end -= stride;
-  }
-};
-
-goog.provide('ol.geom.flat.orient');
-
-goog.require('ol');
-goog.require('ol.geom.flat.reverse');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @return {boolean} Is clockwise.
- */
-ol.geom.flat.orient.linearRingIsClockwise = function(flatCoordinates, offset, end, stride) {
-  // http://tinyurl.com/clockwise-method
-  // https://github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrlinearring.cpp
-  var edge = 0;
-  var x1 = flatCoordinates[end - stride];
-  var y1 = flatCoordinates[end - stride + 1];
-  for (; offset < end; offset += stride) {
-    var x2 = flatCoordinates[offset];
-    var y2 = flatCoordinates[offset + 1];
-    edge += (x2 - x1) * (y2 + y1);
-    x1 = x2;
-    y1 = y2;
-  }
-  return edge > 0;
-};
-
-
-/**
- * Determines if linear rings are oriented.  By default, left-hand orientation
- * is tested (first ring must be clockwise, remaining rings counter-clockwise).
- * To test for right-hand orientation, use the `opt_right` argument.
- *
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Array of end indexes.
- * @param {number} stride Stride.
- * @param {boolean=} opt_right Test for right-hand orientation
- *     (counter-clockwise exterior ring and clockwise interior rings).
- * @return {boolean} Rings are correctly oriented.
- */
-ol.geom.flat.orient.linearRingsAreOriented = function(flatCoordinates, offset, ends, stride, opt_right) {
-  var right = opt_right !== undefined ? opt_right : false;
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    var isClockwise = ol.geom.flat.orient.linearRingIsClockwise(
-        flatCoordinates, offset, end, stride);
-    if (i === 0) {
-      if ((right && isClockwise) || (!right && !isClockwise)) {
-        return false;
-      }
-    } else {
-      if ((right && !isClockwise) || (!right && isClockwise)) {
-        return false;
-      }
-    }
-    offset = end;
-  }
-  return true;
-};
-
-
-/**
- * Determines if linear rings are oriented.  By default, left-hand orientation
- * is tested (first ring must be clockwise, remaining rings counter-clockwise).
- * To test for right-hand orientation, use the `opt_right` argument.
- *
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Array of array of end indexes.
- * @param {number} stride Stride.
- * @param {boolean=} opt_right Test for right-hand orientation
- *     (counter-clockwise exterior ring and clockwise interior rings).
- * @return {boolean} Rings are correctly oriented.
- */
-ol.geom.flat.orient.linearRingssAreOriented = function(flatCoordinates, offset, endss, stride, opt_right) {
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    if (!ol.geom.flat.orient.linearRingsAreOriented(
-        flatCoordinates, offset, endss[i], stride, opt_right)) {
-      return false;
-    }
-  }
-  return true;
-};
-
-
-/**
- * Orient coordinates in a flat array of linear rings.  By default, rings
- * are oriented following the left-hand rule (clockwise for exterior and
- * counter-clockwise for interior rings).  To orient according to the
- * right-hand rule, use the `opt_right` argument.
- *
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {boolean=} opt_right Follow the right-hand rule for orientation.
- * @return {number} End.
- */
-ol.geom.flat.orient.orientLinearRings = function(flatCoordinates, offset, ends, stride, opt_right) {
-  var right = opt_right !== undefined ? opt_right : false;
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    var isClockwise = ol.geom.flat.orient.linearRingIsClockwise(
-        flatCoordinates, offset, end, stride);
-    var reverse = i === 0 ?
-        (right && isClockwise) || (!right && !isClockwise) :
-        (right && !isClockwise) || (!right && isClockwise);
-    if (reverse) {
-      ol.geom.flat.reverse.coordinates(flatCoordinates, offset, end, stride);
-    }
-    offset = end;
-  }
-  return offset;
-};
-
-
-/**
- * Orient coordinates in a flat array of linear rings.  By default, rings
- * are oriented following the left-hand rule (clockwise for exterior and
- * counter-clockwise for interior rings).  To orient according to the
- * right-hand rule, use the `opt_right` argument.
- *
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Array of array of end indexes.
- * @param {number} stride Stride.
- * @param {boolean=} opt_right Follow the right-hand rule for orientation.
- * @return {number} End.
- */
-ol.geom.flat.orient.orientLinearRingss = function(flatCoordinates, offset, endss, stride, opt_right) {
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    offset = ol.geom.flat.orient.orientLinearRings(
-        flatCoordinates, offset, endss[i], stride, opt_right);
-  }
-  return offset;
-};
-
-goog.provide('ol.geom.Polygon');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.LinearRing');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.area');
-goog.require('ol.geom.flat.closest');
-goog.require('ol.geom.flat.contains');
-goog.require('ol.geom.flat.deflate');
-goog.require('ol.geom.flat.inflate');
-goog.require('ol.geom.flat.interiorpoint');
-goog.require('ol.geom.flat.intersectsextent');
-goog.require('ol.geom.flat.orient');
-goog.require('ol.geom.flat.simplify');
-goog.require('ol.math');
-
-
-/**
- * @classdesc
- * Polygon geometry.
- *
- * @constructor
- * @extends {ol.geom.SimpleGeometry}
- * @param {Array.<Array.<ol.Coordinate>>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.Polygon = function(coordinates, opt_layout) {
-
-  ol.geom.SimpleGeometry.call(this);
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.ends_ = [];
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.flatInteriorPointRevision_ = -1;
-
-  /**
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.flatInteriorPoint_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDelta_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDeltaRevision_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.orientedRevision_ = -1;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.orientedFlatCoordinates_ = null;
-
-  this.setCoordinates(coordinates, opt_layout);
-
-};
-ol.inherits(ol.geom.Polygon, ol.geom.SimpleGeometry);
-
-
-/**
- * Append the passed linear ring to this polygon.
- * @param {ol.geom.LinearRing} linearRing Linear ring.
- * @api stable
- */
-ol.geom.Polygon.prototype.appendLinearRing = function(linearRing) {
-  ol.DEBUG && console.assert(linearRing.getLayout() == this.layout,
-      'layout of linearRing should match layout');
-  if (!this.flatCoordinates) {
-    this.flatCoordinates = linearRing.getFlatCoordinates().slice();
-  } else {
-    ol.array.extend(this.flatCoordinates, linearRing.getFlatCoordinates());
-  }
-  this.ends_.push(this.flatCoordinates.length);
-  this.changed();
-};
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.Polygon} Clone.
- * @api stable
- */
-ol.geom.Polygon.prototype.clone = function() {
-  var polygon = new ol.geom.Polygon(null);
-  polygon.setFlatCoordinates(
-      this.layout, this.flatCoordinates.slice(), this.ends_.slice());
-  return polygon;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.Polygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  if (minSquaredDistance <
-      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
-    return minSquaredDistance;
-  }
-  if (this.maxDeltaRevision_ != this.getRevision()) {
-    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getsMaxSquaredDelta(
-        this.flatCoordinates, 0, this.ends_, this.stride, 0));
-    this.maxDeltaRevision_ = this.getRevision();
-  }
-  return ol.geom.flat.closest.getsClosestPoint(
-      this.flatCoordinates, 0, this.ends_, this.stride,
-      this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.Polygon.prototype.containsXY = function(x, y) {
-  return ol.geom.flat.contains.linearRingsContainsXY(
-      this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);
-};
-
-
-/**
- * Return the area of the polygon on projected plane.
- * @return {number} Area (on projected plane).
- * @api stable
- */
-ol.geom.Polygon.prototype.getArea = function() {
-  return ol.geom.flat.area.linearRings(
-      this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride);
-};
-
-
-/**
- * Get the coordinate array for this geometry.  This array has the structure
- * of a GeoJSON coordinate array for polygons.
- *
- * @param {boolean=} opt_right Orient coordinates according to the right-hand
- *     rule (counter-clockwise for exterior and clockwise for interior rings).
- *     If `false`, coordinates will be oriented according to the left-hand rule
- *     (clockwise for exterior and counter-clockwise for interior rings).
- *     By default, coordinate orientation will depend on how the geometry was
- *     constructed.
- * @return {Array.<Array.<ol.Coordinate>>} Coordinates.
- * @api stable
- */
-ol.geom.Polygon.prototype.getCoordinates = function(opt_right) {
-  var flatCoordinates;
-  if (opt_right !== undefined) {
-    flatCoordinates = this.getOrientedFlatCoordinates().slice();
-    ol.geom.flat.orient.orientLinearRings(
-        flatCoordinates, 0, this.ends_, this.stride, opt_right);
-  } else {
-    flatCoordinates = this.flatCoordinates;
-  }
-
-  return ol.geom.flat.inflate.coordinatess(
-      flatCoordinates, 0, this.ends_, this.stride);
-};
-
-
-/**
- * @return {Array.<number>} Ends.
- */
-ol.geom.Polygon.prototype.getEnds = function() {
-  return this.ends_;
-};
-
-
-/**
- * @return {Array.<number>} Interior point.
- */
-ol.geom.Polygon.prototype.getFlatInteriorPoint = function() {
-  if (this.flatInteriorPointRevision_ != this.getRevision()) {
-    var flatCenter = ol.extent.getCenter(this.getExtent());
-    this.flatInteriorPoint_ = ol.geom.flat.interiorpoint.linearRings(
-        this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride,
-        flatCenter, 0);
-    this.flatInteriorPointRevision_ = this.getRevision();
-  }
-  return this.flatInteriorPoint_;
-};
-
-
-/**
- * Return an interior point of the polygon.
- * @return {ol.geom.Point} Interior point.
- * @api stable
- */
-ol.geom.Polygon.prototype.getInteriorPoint = function() {
-  return new ol.geom.Point(this.getFlatInteriorPoint());
-};
-
-
-/**
- * Return the number of rings of the polygon,  this includes the exterior
- * ring and any interior rings.
- *
- * @return {number} Number of rings.
- * @api
- */
-ol.geom.Polygon.prototype.getLinearRingCount = function() {
-  return this.ends_.length;
-};
-
-
-/**
- * Return the Nth linear ring of the polygon geometry. Return `null` if the
- * given index is out of range.
- * The exterior linear ring is available at index `0` and the interior rings
- * at index `1` and beyond.
- *
- * @param {number} index Index.
- * @return {ol.geom.LinearRing} Linear ring.
- * @api stable
- */
-ol.geom.Polygon.prototype.getLinearRing = function(index) {
-  ol.DEBUG && console.assert(0 <= index && index < this.ends_.length,
-      'index should be in between 0 and and length of this.ends_');
-  if (index < 0 || this.ends_.length <= index) {
-    return null;
-  }
-  var linearRing = new ol.geom.LinearRing(null);
-  linearRing.setFlatCoordinates(this.layout, this.flatCoordinates.slice(
-      index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]));
-  return linearRing;
-};
-
-
-/**
- * Return the linear rings of the polygon.
- * @return {Array.<ol.geom.LinearRing>} Linear rings.
- * @api stable
- */
-ol.geom.Polygon.prototype.getLinearRings = function() {
-  var layout = this.layout;
-  var flatCoordinates = this.flatCoordinates;
-  var ends = this.ends_;
-  var linearRings = [];
-  var offset = 0;
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    var linearRing = new ol.geom.LinearRing(null);
-    linearRing.setFlatCoordinates(layout, flatCoordinates.slice(offset, end));
-    linearRings.push(linearRing);
-    offset = end;
-  }
-  return linearRings;
-};
-
-
-/**
- * @return {Array.<number>} Oriented flat coordinates.
- */
-ol.geom.Polygon.prototype.getOrientedFlatCoordinates = function() {
-  if (this.orientedRevision_ != this.getRevision()) {
-    var flatCoordinates = this.flatCoordinates;
-    if (ol.geom.flat.orient.linearRingsAreOriented(
-        flatCoordinates, 0, this.ends_, this.stride)) {
-      this.orientedFlatCoordinates_ = flatCoordinates;
-    } else {
-      this.orientedFlatCoordinates_ = flatCoordinates.slice();
-      this.orientedFlatCoordinates_.length =
-          ol.geom.flat.orient.orientLinearRings(
-              this.orientedFlatCoordinates_, 0, this.ends_, this.stride);
-    }
-    this.orientedRevision_ = this.getRevision();
-  }
-  return this.orientedFlatCoordinates_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.Polygon.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
-  var simplifiedFlatCoordinates = [];
-  var simplifiedEnds = [];
-  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.quantizes(
-      this.flatCoordinates, 0, this.ends_, this.stride,
-      Math.sqrt(squaredTolerance),
-      simplifiedFlatCoordinates, 0, simplifiedEnds);
-  var simplifiedPolygon = new ol.geom.Polygon(null);
-  simplifiedPolygon.setFlatCoordinates(
-      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds);
-  return simplifiedPolygon;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.Polygon.prototype.getType = function() {
-  return ol.geom.GeometryType.POLYGON;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.Polygon.prototype.intersectsExtent = function(extent) {
-  return ol.geom.flat.intersectsextent.linearRings(
-      this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, extent);
-};
-
-
-/**
- * Set the coordinates of the polygon.
- * @param {Array.<Array.<ol.Coordinate>>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.Polygon.prototype.setCoordinates = function(coordinates, opt_layout) {
-  if (!coordinates) {
-    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_);
-  } else {
-    this.setLayout(opt_layout, coordinates, 2);
-    if (!this.flatCoordinates) {
-      this.flatCoordinates = [];
-    }
-    var ends = ol.geom.flat.deflate.coordinatess(
-        this.flatCoordinates, 0, coordinates, this.stride, this.ends_);
-    this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {Array.<number>} ends Ends.
- */
-ol.geom.Polygon.prototype.setFlatCoordinates = function(layout, flatCoordinates, ends) {
-  if (!flatCoordinates) {
-    ol.DEBUG && console.assert(ends && ends.length === 0,
-        'ends must be an empty array');
-  } else if (ends.length === 0) {
-    ol.DEBUG && console.assert(flatCoordinates.length === 0,
-        'flatCoordinates should be an empty array');
-  } else {
-    ol.DEBUG && console.assert(flatCoordinates.length == ends[ends.length - 1],
-        'the length of flatCoordinates should be the last entry of ends');
-  }
-  this.setFlatCoordinatesInternal(layout, flatCoordinates);
-  this.ends_ = ends;
-  this.changed();
-};
-
-
-/**
- * Create an approximation of a circle on the surface of a sphere.
- * @param {ol.Sphere} sphere The sphere.
- * @param {ol.Coordinate} center Center (`[lon, lat]` in degrees).
- * @param {number} radius The great-circle distance from the center to
- *     the polygon vertices.
- * @param {number=} opt_n Optional number of vertices for the resulting
- *     polygon. Default is `32`.
- * @return {ol.geom.Polygon} The "circular" polygon.
- * @api stable
- */
-ol.geom.Polygon.circular = function(sphere, center, radius, opt_n) {
-  var n = opt_n ? opt_n : 32;
-  /** @type {Array.<number>} */
-  var flatCoordinates = [];
-  var i;
-  for (i = 0; i < n; ++i) {
-    ol.array.extend(
-        flatCoordinates, sphere.offset(center, radius, 2 * Math.PI * i / n));
-  }
-  flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);
-  var polygon = new ol.geom.Polygon(null);
-  polygon.setFlatCoordinates(
-      ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]);
-  return polygon;
-};
-
-
-/**
- * Create a polygon from an extent. The layout used is `XY`.
- * @param {ol.Extent} extent The extent.
- * @return {ol.geom.Polygon} The polygon.
- * @api
- */
-ol.geom.Polygon.fromExtent = function(extent) {
-  var minX = extent[0];
-  var minY = extent[1];
-  var maxX = extent[2];
-  var maxY = extent[3];
-  var flatCoordinates =
-      [minX, minY, minX, maxY, maxX, maxY, maxX, minY, minX, minY];
-  var polygon = new ol.geom.Polygon(null);
-  polygon.setFlatCoordinates(
-      ol.geom.GeometryLayout.XY, flatCoordinates, [flatCoordinates.length]);
-  return polygon;
-};
-
-
-/**
- * Create a regular polygon from a circle.
- * @param {ol.geom.Circle} circle Circle geometry.
- * @param {number=} opt_sides Number of sides of the polygon. Default is 32.
- * @param {number=} opt_angle Start angle for the first vertex of the polygon in
- *     radians. Default is 0.
- * @return {ol.geom.Polygon} Polygon geometry.
- * @api
- */
-ol.geom.Polygon.fromCircle = function(circle, opt_sides, opt_angle) {
-  var sides = opt_sides ? opt_sides : 32;
-  var stride = circle.getStride();
-  var layout = circle.getLayout();
-  var polygon = new ol.geom.Polygon(null, layout);
-  var arrayLength = stride * (sides + 1);
-  var flatCoordinates = new Array(arrayLength);
-  for (var i = 0; i < arrayLength; i++) {
-    flatCoordinates[i] = 0;
-  }
-  var ends = [flatCoordinates.length];
-  polygon.setFlatCoordinates(layout, flatCoordinates, ends);
-  ol.geom.Polygon.makeRegular(
-      polygon, circle.getCenter(), circle.getRadius(), opt_angle);
-  return polygon;
-};
-
-
-/**
- * Modify the coordinates of a polygon to make it a regular polygon.
- * @param {ol.geom.Polygon} polygon Polygon geometry.
- * @param {ol.Coordinate} center Center of the regular polygon.
- * @param {number} radius Radius of the regular polygon.
- * @param {number=} opt_angle Start angle for the first vertex of the polygon in
- *     radians. Default is 0.
- */
-ol.geom.Polygon.makeRegular = function(polygon, center, radius, opt_angle) {
-  var flatCoordinates = polygon.getFlatCoordinates();
-  var layout = polygon.getLayout();
-  var stride = polygon.getStride();
-  var ends = polygon.getEnds();
-  ol.DEBUG && console.assert(ends.length === 1, 'only 1 ring is supported');
-  var sides = flatCoordinates.length / stride - 1;
-  var startAngle = opt_angle ? opt_angle : 0;
-  var angle, offset;
-  for (var i = 0; i <= sides; ++i) {
-    offset = i * stride;
-    angle = startAngle + (ol.math.modulo(i, sides) * 2 * Math.PI / sides);
-    flatCoordinates[offset] = center[0] + (radius * Math.cos(angle));
-    flatCoordinates[offset + 1] = center[1] + (radius * Math.sin(angle));
-  }
-  polygon.setFlatCoordinates(layout, flatCoordinates, ends);
-};
-
-goog.provide('ol.View');
-
-goog.require('ol');
-goog.require('ol.CenterConstraint');
-goog.require('ol.Constraints');
-goog.require('ol.Object');
-goog.require('ol.ResolutionConstraint');
-goog.require('ol.RotationConstraint');
-goog.require('ol.array');
-goog.require('ol.asserts');
-goog.require('ol.coordinate');
-goog.require('ol.extent');
-goog.require('ol.geom.Polygon');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.proj');
-goog.require('ol.proj.METERS_PER_UNIT');
-goog.require('ol.proj.Units');
-
-
-/**
- * @classdesc
- * An ol.View object represents a simple 2D view of the map.
- *
- * This is the object to act upon to change the center, resolution,
- * and rotation of the map.
- *
- * ### The view states
- *
- * An `ol.View` is determined by three states: `center`, `resolution`,
- * and `rotation`. Each state has a corresponding getter and setter, e.g.
- * `getCenter` and `setCenter` for the `center` state.
- *
- * An `ol.View` has a `projection`. The projection determines the
- * coordinate system of the center, and its units determine the units of the
- * resolution (projection units per pixel). The default projection is
- * Spherical Mercator (EPSG:3857).
- *
- * ### The constraints
- *
- * `setCenter`, `setResolution` and `setRotation` can be used to change the
- * states of the view. Any value can be passed to the setters. And the value
- * that is passed to a setter will effectively be the value set in the view,
- * and returned by the corresponding getter.
- *
- * But an `ol.View` object also has a *resolution constraint*, a
- * *rotation constraint* and a *center constraint*.
- *
- * As said above, no constraints are applied when the setters are used to set
- * new states for the view. Applying constraints is done explicitly through
- * the use of the `constrain*` functions (`constrainResolution` and
- * `constrainRotation` and `constrainCenter`).
- *
- * The main users of the constraints are the interactions and the
- * controls. For example, double-clicking on the map changes the view to
- * the "next" resolution. And releasing the fingers after pinch-zooming
- * snaps to the closest resolution (with an animation).
- *
- * The *resolution constraint* snaps to specific resolutions. It is
- * determined by the following options: `resolutions`, `maxResolution`,
- * `maxZoom`, and `zoomFactor`. If `resolutions` is set, the other three
- * options are ignored. See documentation for each option for more
- * information.
- *
- * The *rotation constraint* snaps to specific angles. It is determined
- * by the following options: `enableRotation` and `constrainRotation`.
- * By default the rotation value is snapped to zero when approaching the
- * horizontal.
- *
- * The *center constraint* is determined by the `extent` option. By
- * default the center is not constrained at all.
- *
- * @constructor
- * @extends {ol.Object}
- * @param {olx.ViewOptions=} opt_options View options.
- * @api stable
- */
-ol.View = function(opt_options) {
-  ol.Object.call(this);
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.hints_ = [0, 0];
-
-  /**
-   * @type {Object.<string, *>}
-   */
-  var properties = {};
-  properties[ol.View.Property.CENTER] = options.center !== undefined ?
-      options.center : null;
-
-  /**
-   * @private
-   * @const
-   * @type {ol.proj.Projection}
-   */
-  this.projection_ = ol.proj.createProjection(options.projection, 'EPSG:3857');
-
-  var resolutionConstraintInfo = ol.View.createResolutionConstraint_(
-      options);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxResolution_ = resolutionConstraintInfo.maxResolution;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.minResolution_ = resolutionConstraintInfo.minResolution;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;
-
-  /**
-   * @private
-   * @type {Array.<number>|undefined}
-   */
-  this.resolutions_ = options.resolutions;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.minZoom_ = resolutionConstraintInfo.minZoom;
-
-  var centerConstraint = ol.View.createCenterConstraint_(options);
-  var resolutionConstraint = resolutionConstraintInfo.constraint;
-  var rotationConstraint = ol.View.createRotationConstraint_(options);
-
-  /**
-   * @private
-   * @type {ol.Constraints}
-   */
-  this.constraints_ = new ol.Constraints(
-      centerConstraint, resolutionConstraint, rotationConstraint);
-
-  if (options.resolution !== undefined) {
-    properties[ol.View.Property.RESOLUTION] = options.resolution;
-  } else if (options.zoom !== undefined) {
-    properties[ol.View.Property.RESOLUTION] = this.constrainResolution(
-        this.maxResolution_, options.zoom - this.minZoom_);
-  }
-  properties[ol.View.Property.ROTATION] =
-      options.rotation !== undefined ? options.rotation : 0;
-  this.setProperties(properties);
-};
-ol.inherits(ol.View, ol.Object);
-
-
-/**
- * @param {number} rotation Target rotation.
- * @param {ol.Coordinate} anchor Rotation anchor.
- * @return {ol.Coordinate|undefined} Center for rotation and anchor.
- */
-ol.View.prototype.calculateCenterRotate = function(rotation, anchor) {
-  var center;
-  var currentCenter = this.getCenter();
-  if (currentCenter !== undefined) {
-    center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];
-    ol.coordinate.rotate(center, rotation - this.getRotation());
-    ol.coordinate.add(center, anchor);
-  }
-  return center;
-};
-
-
-/**
- * @param {number} resolution Target resolution.
- * @param {ol.Coordinate} anchor Zoom anchor.
- * @return {ol.Coordinate|undefined} Center for resolution and anchor.
- */
-ol.View.prototype.calculateCenterZoom = function(resolution, anchor) {
-  var center;
-  var currentCenter = this.getCenter();
-  var currentResolution = this.getResolution();
-  if (currentCenter !== undefined && currentResolution !== undefined) {
-    var x = anchor[0] -
-        resolution * (anchor[0] - currentCenter[0]) / currentResolution;
-    var y = anchor[1] -
-        resolution * (anchor[1] - currentCenter[1]) / currentResolution;
-    center = [x, y];
-  }
-  return center;
-};
-
-
-/**
- * Get the constrained center of this view.
- * @param {ol.Coordinate|undefined} center Center.
- * @return {ol.Coordinate|undefined} Constrained center.
- * @api
- */
-ol.View.prototype.constrainCenter = function(center) {
-  return this.constraints_.center(center);
-};
-
-
-/**
- * Get the constrained resolution of this view.
- * @param {number|undefined} resolution Resolution.
- * @param {number=} opt_delta Delta. Default is `0`.
- * @param {number=} opt_direction Direction. Default is `0`.
- * @return {number|undefined} Constrained resolution.
- * @api
- */
-ol.View.prototype.constrainResolution = function(
-    resolution, opt_delta, opt_direction) {
-  var delta = opt_delta || 0;
-  var direction = opt_direction || 0;
-  return this.constraints_.resolution(resolution, delta, direction);
-};
-
-
-/**
- * Get the constrained rotation of this view.
- * @param {number|undefined} rotation Rotation.
- * @param {number=} opt_delta Delta. Default is `0`.
- * @return {number|undefined} Constrained rotation.
- * @api
- */
-ol.View.prototype.constrainRotation = function(rotation, opt_delta) {
-  var delta = opt_delta || 0;
-  return this.constraints_.rotation(rotation, delta);
-};
-
-
-/**
- * Get the view center.
- * @return {ol.Coordinate|undefined} The center of the view.
- * @observable
- * @api stable
- */
-ol.View.prototype.getCenter = function() {
-  return /** @type {ol.Coordinate|undefined} */ (
-      this.get(ol.View.Property.CENTER));
-};
-
-
-/**
- * @param {Array.<number>=} opt_hints Destination array.
- * @return {Array.<number>} Hint.
- */
-ol.View.prototype.getHints = function(opt_hints) {
-  if (opt_hints !== undefined) {
-    opt_hints[0] = this.hints_[0];
-    opt_hints[1] = this.hints_[1];
-    return opt_hints;
-  } else {
-    return this.hints_.slice();
-  }
-};
-
-
-/**
- * Calculate the extent for the current view state and the passed size.
- * The size is the pixel dimensions of the box into which the calculated extent
- * should fit. In most cases you want to get the extent of the entire map,
- * that is `map.getSize()`.
- * @param {ol.Size} size Box pixel size.
- * @return {ol.Extent} Extent.
- * @api stable
- */
-ol.View.prototype.calculateExtent = function(size) {
-  var center = /** @type {!ol.Coordinate} */ (this.getCenter());
-  ol.asserts.assert(center, 1); // The view center is not defined
-  var resolution = /** @type {!number} */ (this.getResolution());
-  ol.asserts.assert(resolution !== undefined, 2); // The view resolution is not defined
-  var rotation = /** @type {!number} */ (this.getRotation());
-  ol.asserts.assert(rotation !== undefined, 3); // The view rotation is not defined
-
-  return ol.extent.getForViewAndSize(center, resolution, rotation, size);
-};
-
-
-/**
- * Get the maximum resolution of the view.
- * @return {number} The maximum resolution of the view.
- * @api
- */
-ol.View.prototype.getMaxResolution = function() {
-  return this.maxResolution_;
-};
-
-
-/**
- * Get the minimum resolution of the view.
- * @return {number} The minimum resolution of the view.
- * @api
- */
-ol.View.prototype.getMinResolution = function() {
-  return this.minResolution_;
-};
-
-
-/**
- * Get the view projection.
- * @return {ol.proj.Projection} The projection of the view.
- * @api stable
- */
-ol.View.prototype.getProjection = function() {
-  return this.projection_;
-};
-
-
-/**
- * Get the view resolution.
- * @return {number|undefined} The resolution of the view.
- * @observable
- * @api stable
- */
-ol.View.prototype.getResolution = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.View.Property.RESOLUTION));
-};
-
-
-/**
- * Get the resolutions for the view. This returns the array of resolutions
- * passed to the constructor of the {ol.View}, or undefined if none were given.
- * @return {Array.<number>|undefined} The resolutions of the view.
- * @api stable
- */
-ol.View.prototype.getResolutions = function() {
-  return this.resolutions_;
-};
-
-
-/**
- * Get the resolution for a provided extent (in map units) and size (in pixels).
- * @param {ol.Extent} extent Extent.
- * @param {ol.Size} size Box pixel size.
- * @return {number} The resolution at which the provided extent will render at
- *     the given size.
- */
-ol.View.prototype.getResolutionForExtent = function(extent, size) {
-  var xResolution = ol.extent.getWidth(extent) / size[0];
-  var yResolution = ol.extent.getHeight(extent) / size[1];
-  return Math.max(xResolution, yResolution);
-};
-
-
-/**
- * Return a function that returns a value between 0 and 1 for a
- * resolution. Exponential scaling is assumed.
- * @param {number=} opt_power Power.
- * @return {function(number): number} Resolution for value function.
- */
-ol.View.prototype.getResolutionForValueFunction = function(opt_power) {
-  var power = opt_power || 2;
-  var maxResolution = this.maxResolution_;
-  var minResolution = this.minResolution_;
-  var max = Math.log(maxResolution / minResolution) / Math.log(power);
-  return (
-      /**
-       * @param {number} value Value.
-       * @return {number} Resolution.
-       */
-      function(value) {
-        var resolution = maxResolution / Math.pow(power, value * max);
-        ol.DEBUG && console.assert(resolution >= minResolution &&
-            resolution <= maxResolution,
-            'calculated resolution outside allowed bounds (%s <= %s <= %s)',
-            minResolution, resolution, maxResolution);
-        return resolution;
-      });
-};
-
-
-/**
- * Get the view rotation.
- * @return {number} The rotation of the view in radians.
- * @observable
- * @api stable
- */
-ol.View.prototype.getRotation = function() {
-  return /** @type {number} */ (this.get(ol.View.Property.ROTATION));
-};
-
-
-/**
- * Return a function that returns a resolution for a value between
- * 0 and 1. Exponential scaling is assumed.
- * @param {number=} opt_power Power.
- * @return {function(number): number} Value for resolution function.
- */
-ol.View.prototype.getValueForResolutionFunction = function(opt_power) {
-  var power = opt_power || 2;
-  var maxResolution = this.maxResolution_;
-  var minResolution = this.minResolution_;
-  var max = Math.log(maxResolution / minResolution) / Math.log(power);
-  return (
-      /**
-       * @param {number} resolution Resolution.
-       * @return {number} Value.
-       */
-      function(resolution) {
-        var value =
-            (Math.log(maxResolution / resolution) / Math.log(power)) / max;
-        ol.DEBUG && console.assert(value >= 0 && value <= 1,
-            'calculated value (%s) ouside allowed range (0-1)', value);
-        return value;
-      });
-};
-
-
-/**
- * @return {olx.ViewState} View state.
- */
-ol.View.prototype.getState = function() {
-  ol.DEBUG && console.assert(this.isDef(),
-      'the view was not defined (had no center and/or resolution)');
-  var center = /** @type {ol.Coordinate} */ (this.getCenter());
-  var projection = this.getProjection();
-  var resolution = /** @type {number} */ (this.getResolution());
-  var rotation = this.getRotation();
-  return /** @type {olx.ViewState} */ ({
-    center: center.slice(),
-    projection: projection !== undefined ? projection : null,
-    resolution: resolution,
-    rotation: rotation
-  });
-};
-
-
-/**
- * Get the current zoom level. Return undefined if the current
- * resolution is undefined or not within the "resolution constraints".
- * @return {number|undefined} Zoom.
- * @api stable
- */
-ol.View.prototype.getZoom = function() {
-  var zoom;
-  var resolution = this.getResolution();
-  if (resolution !== undefined &&
-      resolution >= this.minResolution_ && resolution <= this.maxResolution_) {
-    var offset = this.minZoom_ || 0;
-    var max, zoomFactor;
-    if (this.resolutions_) {
-      var nearest = ol.array.linearFindNearest(this.resolutions_, resolution, 1);
-      offset += nearest;
-      if (nearest == this.resolutions_.length - 1) {
-        return offset;
-      }
-      max = this.resolutions_[nearest];
-      zoomFactor = max / this.resolutions_[nearest + 1];
-    } else {
-      max = this.maxResolution_;
-      zoomFactor = this.zoomFactor_;
-    }
-    zoom = offset + Math.log(max / resolution) / Math.log(zoomFactor);
-  }
-  return zoom;
-};
-
-
-/**
- * Fit the given geometry or extent based on the given map size and border.
- * The size is pixel dimensions of the box to fit the extent into.
- * In most cases you will want to use the map size, that is `map.getSize()`.
- * Takes care of the map angle.
- * @param {ol.geom.SimpleGeometry|ol.Extent} geometry Geometry.
- * @param {ol.Size} size Box pixel size.
- * @param {olx.view.FitOptions=} opt_options Options.
- * @api
- */
-ol.View.prototype.fit = function(geometry, size, opt_options) {
-  if (!(geometry instanceof ol.geom.SimpleGeometry)) {
-    ol.asserts.assert(Array.isArray(geometry),
-        24); // Invalid extent or geometry provided as `geometry`
-    ol.asserts.assert(!ol.extent.isEmpty(geometry),
-        25); // Cannot fit empty extent provided as `geometry`
-    geometry = ol.geom.Polygon.fromExtent(geometry);
-  }
-
-  var options = opt_options || {};
-
-  var padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0];
-  var constrainResolution = options.constrainResolution !== undefined ?
-      options.constrainResolution : true;
-  var nearest = options.nearest !== undefined ? options.nearest : false;
-  var minResolution;
-  if (options.minResolution !== undefined) {
-    minResolution = options.minResolution;
-  } else if (options.maxZoom !== undefined) {
-    minResolution = this.constrainResolution(
-        this.maxResolution_, options.maxZoom - this.minZoom_, 0);
-  } else {
-    minResolution = 0;
-  }
-  var coords = geometry.getFlatCoordinates();
-
-  // calculate rotated extent
-  var rotation = this.getRotation();
-  ol.DEBUG && console.assert(rotation !== undefined, 'rotation was not defined');
-  var cosAngle = Math.cos(-rotation);
-  var sinAngle = Math.sin(-rotation);
-  var minRotX = +Infinity;
-  var minRotY = +Infinity;
-  var maxRotX = -Infinity;
-  var maxRotY = -Infinity;
-  var stride = geometry.getStride();
-  for (var i = 0, ii = coords.length; i < ii; i += stride) {
-    var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;
-    var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;
-    minRotX = Math.min(minRotX, rotX);
-    minRotY = Math.min(minRotY, rotY);
-    maxRotX = Math.max(maxRotX, rotX);
-    maxRotY = Math.max(maxRotY, rotY);
-  }
-
-  // calculate resolution
-  var resolution = this.getResolutionForExtent(
-      [minRotX, minRotY, maxRotX, maxRotY],
-      [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]);
-  resolution = isNaN(resolution) ? minResolution :
-      Math.max(resolution, minResolution);
-  if (constrainResolution) {
-    var constrainedResolution = this.constrainResolution(resolution, 0, 0);
-    if (!nearest && constrainedResolution < resolution) {
-      constrainedResolution = this.constrainResolution(
-          constrainedResolution, -1, 0);
-    }
-    resolution = constrainedResolution;
-  }
-  this.setResolution(resolution);
-
-  // calculate center
-  sinAngle = -sinAngle; // go back to original rotation
-  var centerRotX = (minRotX + maxRotX) / 2;
-  var centerRotY = (minRotY + maxRotY) / 2;
-  centerRotX += (padding[1] - padding[3]) / 2 * resolution;
-  centerRotY += (padding[0] - padding[2]) / 2 * resolution;
-  var centerX = centerRotX * cosAngle - centerRotY * sinAngle;
-  var centerY = centerRotY * cosAngle + centerRotX * sinAngle;
-
-  this.setCenter([centerX, centerY]);
-};
-
-
-/**
- * Center on coordinate and view position.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {ol.Size} size Box pixel size.
- * @param {ol.Pixel} position Position on the view to center on.
- * @api
- */
-ol.View.prototype.centerOn = function(coordinate, size, position) {
-  // calculate rotated position
-  var rotation = this.getRotation();
-  var cosAngle = Math.cos(-rotation);
-  var sinAngle = Math.sin(-rotation);
-  var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;
-  var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;
-  var resolution = this.getResolution();
-  rotX += (size[0] / 2 - position[0]) * resolution;
-  rotY += (position[1] - size[1] / 2) * resolution;
-
-  // go back to original angle
-  sinAngle = -sinAngle; // go back to original rotation
-  var centerX = rotX * cosAngle - rotY * sinAngle;
-  var centerY = rotY * cosAngle + rotX * sinAngle;
-
-  this.setCenter([centerX, centerY]);
-};
-
-
-/**
- * @return {boolean} Is defined.
- */
-ol.View.prototype.isDef = function() {
-  return !!this.getCenter() && this.getResolution() !== undefined;
-};
-
-
-/**
- * Rotate the view around a given coordinate.
- * @param {number} rotation New rotation value for the view.
- * @param {ol.Coordinate=} opt_anchor The rotation center.
- * @api stable
- */
-ol.View.prototype.rotate = function(rotation, opt_anchor) {
-  if (opt_anchor !== undefined) {
-    var center = this.calculateCenterRotate(rotation, opt_anchor);
-    this.setCenter(center);
-  }
-  this.setRotation(rotation);
-};
-
-
-/**
- * Set the center of the current view.
- * @param {ol.Coordinate|undefined} center The center of the view.
- * @observable
- * @api stable
- */
-ol.View.prototype.setCenter = function(center) {
-  this.set(ol.View.Property.CENTER, center);
-};
-
-
-/**
- * @param {ol.View.Hint} hint Hint.
- * @param {number} delta Delta.
- * @return {number} New value.
- */
-ol.View.prototype.setHint = function(hint, delta) {
-  ol.DEBUG && console.assert(0 <= hint && hint < this.hints_.length,
-      'illegal hint (%s), must be between 0 and %s', hint, this.hints_.length);
-  this.hints_[hint] += delta;
-  ol.DEBUG && console.assert(this.hints_[hint] >= 0,
-      'Hint at %s must be positive, was %s', hint, this.hints_[hint]);
-  return this.hints_[hint];
-};
-
-
-/**
- * Set the resolution for this view.
- * @param {number|undefined} resolution The resolution of the view.
- * @observable
- * @api stable
- */
-ol.View.prototype.setResolution = function(resolution) {
-  this.set(ol.View.Property.RESOLUTION, resolution);
-};
-
-
-/**
- * Set the rotation for this view.
- * @param {number} rotation The rotation of the view in radians.
- * @observable
- * @api stable
- */
-ol.View.prototype.setRotation = function(rotation) {
-  this.set(ol.View.Property.ROTATION, rotation);
-};
-
-
-/**
- * Zoom to a specific zoom level.
- * @param {number} zoom Zoom level.
- * @api stable
- */
-ol.View.prototype.setZoom = function(zoom) {
-  var resolution = this.constrainResolution(
-      this.maxResolution_, zoom - this.minZoom_, 0);
-  this.setResolution(resolution);
-};
-
-
-/**
- * @param {olx.ViewOptions} options View options.
- * @private
- * @return {ol.CenterConstraintType} The constraint.
- */
-ol.View.createCenterConstraint_ = function(options) {
-  if (options.extent !== undefined) {
-    return ol.CenterConstraint.createExtent(options.extent);
-  } else {
-    return ol.CenterConstraint.none;
-  }
-};
-
-
-/**
- * @private
- * @param {olx.ViewOptions} options View options.
- * @return {{constraint: ol.ResolutionConstraintType, maxResolution: number,
- *     minResolution: number, zoomFactor: number}} The constraint.
- */
-ol.View.createResolutionConstraint_ = function(options) {
-  var resolutionConstraint;
-  var maxResolution;
-  var minResolution;
-
-  // TODO: move these to be ol constants
-  // see https://github.com/openlayers/ol3/issues/2076
-  var defaultMaxZoom = 28;
-  var defaultZoomFactor = 2;
-
-  var minZoom = options.minZoom !== undefined ?
-      options.minZoom : ol.DEFAULT_MIN_ZOOM;
-
-  var maxZoom = options.maxZoom !== undefined ?
-      options.maxZoom : defaultMaxZoom;
-
-  var zoomFactor = options.zoomFactor !== undefined ?
-      options.zoomFactor : defaultZoomFactor;
-
-  if (options.resolutions !== undefined) {
-    var resolutions = options.resolutions;
-    maxResolution = resolutions[0];
-    minResolution = resolutions[resolutions.length - 1];
-    resolutionConstraint = ol.ResolutionConstraint.createSnapToResolutions(
-        resolutions);
-  } else {
-    // calculate the default min and max resolution
-    var projection = ol.proj.createProjection(options.projection, 'EPSG:3857');
-    var extent = projection.getExtent();
-    var size = !extent ?
-        // use an extent that can fit the whole world if need be
-        360 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] /
-            projection.getMetersPerUnit() :
-        Math.max(ol.extent.getWidth(extent), ol.extent.getHeight(extent));
-
-    var defaultMaxResolution = size / ol.DEFAULT_TILE_SIZE / Math.pow(
-        defaultZoomFactor, ol.DEFAULT_MIN_ZOOM);
-
-    var defaultMinResolution = defaultMaxResolution / Math.pow(
-        defaultZoomFactor, defaultMaxZoom - ol.DEFAULT_MIN_ZOOM);
-
-    // user provided maxResolution takes precedence
-    maxResolution = options.maxResolution;
-    if (maxResolution !== undefined) {
-      minZoom = 0;
-    } else {
-      maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);
-    }
-
-    // user provided minResolution takes precedence
-    minResolution = options.minResolution;
-    if (minResolution === undefined) {
-      if (options.maxZoom !== undefined) {
-        if (options.maxResolution !== undefined) {
-          minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);
-        } else {
-          minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);
-        }
-      } else {
-        minResolution = defaultMinResolution;
-      }
-    }
-
-    // given discrete zoom levels, minResolution may be different than provided
-    maxZoom = minZoom + Math.floor(
-        Math.log(maxResolution / minResolution) / Math.log(zoomFactor));
-    minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);
-
-    resolutionConstraint = ol.ResolutionConstraint.createSnapToPower(
-        zoomFactor, maxResolution, maxZoom - minZoom);
-  }
-  return {constraint: resolutionConstraint, maxResolution: maxResolution,
-    minResolution: minResolution, minZoom: minZoom, zoomFactor: zoomFactor};
-};
-
-
-/**
- * @private
- * @param {olx.ViewOptions} options View options.
- * @return {ol.RotationConstraintType} Rotation constraint.
- */
-ol.View.createRotationConstraint_ = function(options) {
-  var enableRotation = options.enableRotation !== undefined ?
-      options.enableRotation : true;
-  if (enableRotation) {
-    var constrainRotation = options.constrainRotation;
-    if (constrainRotation === undefined || constrainRotation === true) {
-      return ol.RotationConstraint.createSnapToZero();
-    } else if (constrainRotation === false) {
-      return ol.RotationConstraint.none;
-    } else if (typeof constrainRotation === 'number') {
-      return ol.RotationConstraint.createSnapToN(constrainRotation);
-    } else {
-      ol.DEBUG && console.assert(false,
-          'illegal option for constrainRotation (%s)', constrainRotation);
-      return ol.RotationConstraint.none;
-    }
-  } else {
-    return ol.RotationConstraint.disable;
-  }
-};
-
-
-/**
- * @enum {string}
- */
-ol.View.Property = {
-  CENTER: 'center',
-  RESOLUTION: 'resolution',
-  ROTATION: 'rotation'
-};
-
-
-/**
- * @enum {number}
- */
-ol.View.Hint = {
-  ANIMATING: 0,
-  INTERACTING: 1
-};
-
-goog.provide('ol.easing');
-
-
-/**
- * Start slow and speed up.
- * @param {number} t Input between 0 and 1.
- * @return {number} Output between 0 and 1.
- * @api
- */
-ol.easing.easeIn = function(t) {
-  return Math.pow(t, 3);
-};
-
-
-/**
- * Start fast and slow down.
- * @param {number} t Input between 0 and 1.
- * @return {number} Output between 0 and 1.
- * @api
- */
-ol.easing.easeOut = function(t) {
-  return 1 - ol.easing.easeIn(1 - t);
-};
-
-
-/**
- * Start slow, speed up, and then slow down again.
- * @param {number} t Input between 0 and 1.
- * @return {number} Output between 0 and 1.
- * @api
- */
-ol.easing.inAndOut = function(t) {
-  return 3 * t * t - 2 * t * t * t;
-};
-
-
-/**
- * Maintain a constant speed over time.
- * @param {number} t Input between 0 and 1.
- * @return {number} Output between 0 and 1.
- * @api
- */
-ol.easing.linear = function(t) {
-  return t;
-};
-
-
-/**
- * Start slow, speed up, and at the very end slow down again.  This has the
- * same general behavior as {@link ol.easing.inAndOut}, but the final slowdown
- * is delayed.
- * @param {number} t Input between 0 and 1.
- * @return {number} Output between 0 and 1.
- * @api
- */
-ol.easing.upAndDown = function(t) {
-  if (t < 0.5) {
-    return ol.easing.inAndOut(2 * t);
-  } else {
-    return 1 - ol.easing.inAndOut(2 * (t - 0.5));
-  }
-};
-
-goog.provide('ol.animation');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.coordinate');
-goog.require('ol.easing');
-
-
-/**
- * Generate an animated transition that will "bounce" the resolution as it
- * approaches the final value.
- * @param {olx.animation.BounceOptions} options Bounce options.
- * @return {ol.PreRenderFunction} Pre-render function.
- * @api
- */
-ol.animation.bounce = function(options) {
-  var resolution = options.resolution;
-  var start = options.start ? options.start : Date.now();
-  var duration = options.duration !== undefined ? options.duration : 1000;
-  var easing = options.easing ?
-      options.easing : ol.easing.upAndDown;
-  return (
-      /**
-       * @param {ol.Map} map Map.
-       * @param {?olx.FrameState} frameState Frame state.
-       * @return {boolean} Run this function in the next frame.
-       */
-      function(map, frameState) {
-        if (frameState.time < start) {
-          frameState.animate = true;
-          frameState.viewHints[ol.View.Hint.ANIMATING] += 1;
-          return true;
-        } else if (frameState.time < start + duration) {
-          var delta = easing((frameState.time - start) / duration);
-          var deltaResolution = resolution - frameState.viewState.resolution;
-          frameState.animate = true;
-          frameState.viewState.resolution += delta * deltaResolution;
-          frameState.viewHints[ol.View.Hint.ANIMATING] += 1;
-          return true;
-        } else {
-          return false;
-        }
-      });
-};
-
-
-/**
- * Generate an animated transition while updating the view center.
- * @param {olx.animation.PanOptions} options Pan options.
- * @return {ol.PreRenderFunction} Pre-render function.
- * @api
- */
-ol.animation.pan = function(options) {
-  var source = options.source;
-  var start = options.start ? options.start : Date.now();
-  var sourceX = source[0];
-  var sourceY = source[1];
-  var duration = options.duration !== undefined ? options.duration : 1000;
-  var easing = options.easing ?
-      options.easing : ol.easing.inAndOut;
-  return (
-      /**
-       * @param {ol.Map} map Map.
-       * @param {?olx.FrameState} frameState Frame state.
-       * @return {boolean} Run this function in the next frame.
-       */
-      function(map, frameState) {
-        if (frameState.time < start) {
-          frameState.animate = true;
-          frameState.viewHints[ol.View.Hint.ANIMATING] += 1;
-          return true;
-        } else if (frameState.time < start + duration) {
-          var delta = 1 - easing((frameState.time - start) / duration);
-          var deltaX = sourceX - frameState.viewState.center[0];
-          var deltaY = sourceY - frameState.viewState.center[1];
-          frameState.animate = true;
-          frameState.viewState.center[0] += delta * deltaX;
-          frameState.viewState.center[1] += delta * deltaY;
-          frameState.viewHints[ol.View.Hint.ANIMATING] += 1;
-          return true;
-        } else {
-          return false;
-        }
-      });
-};
-
-
-/**
- * Generate an animated transition while updating the view rotation.
- * @param {olx.animation.RotateOptions} options Rotate options.
- * @return {ol.PreRenderFunction} Pre-render function.
- * @api
- */
-ol.animation.rotate = function(options) {
-  var sourceRotation = options.rotation ? options.rotation : 0;
-  var start = options.start ? options.start : Date.now();
-  var duration = options.duration !== undefined ? options.duration : 1000;
-  var easing = options.easing ?
-      options.easing : ol.easing.inAndOut;
-  var anchor = options.anchor ?
-      options.anchor : null;
-
-  return (
-      /**
-       * @param {ol.Map} map Map.
-       * @param {?olx.FrameState} frameState Frame state.
-       * @return {boolean} Run this function in the next frame.
-       */
-      function(map, frameState) {
-        if (frameState.time < start) {
-          frameState.animate = true;
-          frameState.viewHints[ol.View.Hint.ANIMATING] += 1;
-          return true;
-        } else if (frameState.time < start + duration) {
-          var delta = 1 - easing((frameState.time - start) / duration);
-          var deltaRotation =
-              (sourceRotation - frameState.viewState.rotation) * delta;
-          frameState.animate = true;
-          frameState.viewState.rotation += deltaRotation;
-          if (anchor) {
-            var center = frameState.viewState.center;
-            ol.coordinate.sub(center, anchor);
-            ol.coordinate.rotate(center, deltaRotation);
-            ol.coordinate.add(center, anchor);
-          }
-          frameState.viewHints[ol.View.Hint.ANIMATING] += 1;
-          return true;
-        } else {
-          return false;
-        }
-      });
-};
-
-
-/**
- * Generate an animated transition while updating the view resolution.
- * @param {olx.animation.ZoomOptions} options Zoom options.
- * @return {ol.PreRenderFunction} Pre-render function.
- * @api
- */
-ol.animation.zoom = function(options) {
-  var sourceResolution = options.resolution;
-  var start = options.start ? options.start : Date.now();
-  var duration = options.duration !== undefined ? options.duration : 1000;
-  var easing = options.easing ?
-      options.easing : ol.easing.inAndOut;
-  return (
-      /**
-       * @param {ol.Map} map Map.
-       * @param {?olx.FrameState} frameState Frame state.
-       * @return {boolean} Run this function in the next frame.
-       */
-      function(map, frameState) {
-        if (frameState.time < start) {
-          frameState.animate = true;
-          frameState.viewHints[ol.View.Hint.ANIMATING] += 1;
-          return true;
-        } else if (frameState.time < start + duration) {
-          var delta = 1 - easing((frameState.time - start) / duration);
-          var deltaResolution =
-              sourceResolution - frameState.viewState.resolution;
-          frameState.animate = true;
-          frameState.viewState.resolution += delta * deltaResolution;
-          frameState.viewHints[ol.View.Hint.ANIMATING] += 1;
-          return true;
-        } else {
-          return false;
-        }
-      });
-};
-
-goog.provide('ol.TileRange');
-
-
-/**
- * A representation of a contiguous block of tiles.  A tile range is specified
- * by its min/max tile coordinates and is inclusive of coordinates.
- *
- * @constructor
- * @param {number} minX Minimum X.
- * @param {number} maxX Maximum X.
- * @param {number} minY Minimum Y.
- * @param {number} maxY Maximum Y.
- * @struct
- */
-ol.TileRange = function(minX, maxX, minY, maxY) {
-
-  /**
-   * @type {number}
-   */
-  this.minX = minX;
-
-  /**
-   * @type {number}
-   */
-  this.maxX = maxX;
-
-  /**
-   * @type {number}
-   */
-  this.minY = minY;
-
-  /**
-   * @type {number}
-   */
-  this.maxY = maxY;
-
-};
-
-
-/**
- * @param {number} minX Minimum X.
- * @param {number} maxX Maximum X.
- * @param {number} minY Minimum Y.
- * @param {number} maxY Maximum Y.
- * @param {ol.TileRange|undefined} tileRange TileRange.
- * @return {ol.TileRange} Tile range.
- */
-ol.TileRange.createOrUpdate = function(minX, maxX, minY, maxY, tileRange) {
-  if (tileRange !== undefined) {
-    tileRange.minX = minX;
-    tileRange.maxX = maxX;
-    tileRange.minY = minY;
-    tileRange.maxY = maxY;
-    return tileRange;
-  } else {
-    return new ol.TileRange(minX, maxX, minY, maxY);
-  }
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @return {boolean} Contains tile coordinate.
- */
-ol.TileRange.prototype.contains = function(tileCoord) {
-  return this.containsXY(tileCoord[1], tileCoord[2]);
-};
-
-
-/**
- * @param {ol.TileRange} tileRange Tile range.
- * @return {boolean} Contains.
- */
-ol.TileRange.prototype.containsTileRange = function(tileRange) {
-  return this.minX <= tileRange.minX && tileRange.maxX <= this.maxX &&
-      this.minY <= tileRange.minY && tileRange.maxY <= this.maxY;
-};
-
-
-/**
- * @param {number} x Tile coordinate x.
- * @param {number} y Tile coordinate y.
- * @return {boolean} Contains coordinate.
- */
-ol.TileRange.prototype.containsXY = function(x, y) {
-  return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;
-};
-
-
-/**
- * @param {ol.TileRange} tileRange Tile range.
- * @return {boolean} Equals.
- */
-ol.TileRange.prototype.equals = function(tileRange) {
-  return this.minX == tileRange.minX && this.minY == tileRange.minY &&
-      this.maxX == tileRange.maxX && this.maxY == tileRange.maxY;
-};
-
-
-/**
- * @param {ol.TileRange} tileRange Tile range.
- */
-ol.TileRange.prototype.extend = function(tileRange) {
-  if (tileRange.minX < this.minX) {
-    this.minX = tileRange.minX;
-  }
-  if (tileRange.maxX > this.maxX) {
-    this.maxX = tileRange.maxX;
-  }
-  if (tileRange.minY < this.minY) {
-    this.minY = tileRange.minY;
-  }
-  if (tileRange.maxY > this.maxY) {
-    this.maxY = tileRange.maxY;
-  }
-};
-
-
-/**
- * @return {number} Height.
- */
-ol.TileRange.prototype.getHeight = function() {
-  return this.maxY - this.minY + 1;
-};
-
-
-/**
- * @return {ol.Size} Size.
- */
-ol.TileRange.prototype.getSize = function() {
-  return [this.getWidth(), this.getHeight()];
-};
-
-
-/**
- * @return {number} Width.
- */
-ol.TileRange.prototype.getWidth = function() {
-  return this.maxX - this.minX + 1;
-};
-
-
-/**
- * @param {ol.TileRange} tileRange Tile range.
- * @return {boolean} Intersects.
- */
-ol.TileRange.prototype.intersects = function(tileRange) {
-  return this.minX <= tileRange.maxX &&
-      this.maxX >= tileRange.minX &&
-      this.minY <= tileRange.maxY &&
-      this.maxY >= tileRange.minY;
-};
-
-goog.provide('ol.size');
-
-
-/**
- * Returns a buffered size.
- * @param {ol.Size} size Size.
- * @param {number} buffer Buffer.
- * @param {ol.Size=} opt_size Optional reusable size array.
- * @return {ol.Size} The buffered size.
- */
-ol.size.buffer = function(size, buffer, opt_size) {
-  if (opt_size === undefined) {
-    opt_size = [0, 0];
-  }
-  opt_size[0] = size[0] + 2 * buffer;
-  opt_size[1] = size[1] + 2 * buffer;
-  return opt_size;
-};
-
-
-/**
- * Determines if a size has a positive area.
- * @param {ol.Size} size The size to test.
- * @return {boolean} The size has a positive area.
- */
-ol.size.hasArea = function(size) {
-  return size[0] > 0 && size[1] > 0;
-};
-
-
-/**
- * Returns a size scaled by a ratio. The result will be an array of integers.
- * @param {ol.Size} size Size.
- * @param {number} ratio Ratio.
- * @param {ol.Size=} opt_size Optional reusable size array.
- * @return {ol.Size} The scaled size.
- */
-ol.size.scale = function(size, ratio, opt_size) {
-  if (opt_size === undefined) {
-    opt_size = [0, 0];
-  }
-  opt_size[0] = (size[0] * ratio + 0.5) | 0;
-  opt_size[1] = (size[1] * ratio + 0.5) | 0;
-  return opt_size;
-};
-
-
-/**
- * Returns an `ol.Size` array for the passed in number (meaning: square) or
- * `ol.Size` array.
- * (meaning: non-square),
- * @param {number|ol.Size} size Width and height.
- * @param {ol.Size=} opt_size Optional reusable size array.
- * @return {ol.Size} Size.
- * @api stable
- */
-ol.size.toSize = function(size, opt_size) {
-  if (Array.isArray(size)) {
-    return size;
-  } else {
-    if (opt_size === undefined) {
-      opt_size = [size, size];
-    } else {
-      opt_size[0] = opt_size[1] = /** @type {number} */ (size);
-    }
-    return opt_size;
-  }
-};
-
-goog.provide('ol.tilecoord');
-
-
-/**
- * @param {number} z Z.
- * @param {number} x X.
- * @param {number} y Y.
- * @param {ol.TileCoord=} opt_tileCoord Tile coordinate.
- * @return {ol.TileCoord} Tile coordinate.
- */
-ol.tilecoord.createOrUpdate = function(z, x, y, opt_tileCoord) {
-  if (opt_tileCoord !== undefined) {
-    opt_tileCoord[0] = z;
-    opt_tileCoord[1] = x;
-    opt_tileCoord[2] = y;
-    return opt_tileCoord;
-  } else {
-    return [z, x, y];
-  }
-};
-
-
-/**
- * @param {number} z Z.
- * @param {number} x X.
- * @param {number} y Y.
- * @return {string} Key.
- */
-ol.tilecoord.getKeyZXY = function(z, x, y) {
-  return z + '/' + x + '/' + y;
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coord.
- * @return {number} Hash.
- */
-ol.tilecoord.hash = function(tileCoord) {
-  return (tileCoord[1] << tileCoord[0]) + tileCoord[2];
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coord.
- * @return {string} Quad key.
- */
-ol.tilecoord.quadKey = function(tileCoord) {
-  var z = tileCoord[0];
-  var digits = new Array(z);
-  var mask = 1 << (z - 1);
-  var i, charCode;
-  for (i = 0; i < z; ++i) {
-    // 48 is charCode for 0 - '0'.charCodeAt(0)
-    charCode = 48;
-    if (tileCoord[1] & mask) {
-      charCode += 1;
-    }
-    if (tileCoord[2] & mask) {
-      charCode += 2;
-    }
-    digits[i] = String.fromCharCode(charCode);
-    mask >>= 1;
-  }
-  return digits.join('');
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {!ol.tilegrid.TileGrid} tileGrid Tile grid.
- * @return {boolean} Tile coordinate is within extent and zoom level range.
- */
-ol.tilecoord.withinExtentAndZ = function(tileCoord, tileGrid) {
-  var z = tileCoord[0];
-  var x = tileCoord[1];
-  var y = tileCoord[2];
-
-  if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {
-    return false;
-  }
-  var extent = tileGrid.getExtent();
-  var tileRange;
-  if (!extent) {
-    tileRange = tileGrid.getFullTileRange(z);
-  } else {
-    tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
-  }
-  if (!tileRange) {
-    return true;
-  } else {
-    return tileRange.containsXY(x, y);
-  }
-};
-
-goog.provide('ol.tilegrid.TileGrid');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.TileRange');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.math');
-goog.require('ol.size');
-goog.require('ol.tilecoord');
-
-
-/**
- * @classdesc
- * Base class for setting the grid pattern for sources accessing tiled-image
- * servers.
- *
- * @constructor
- * @param {olx.tilegrid.TileGridOptions} options Tile grid options.
- * @struct
- * @api stable
- */
-ol.tilegrid.TileGrid = function(options) {
-
-  /**
-   * @protected
-   * @type {number}
-   */
-  this.minZoom = options.minZoom !== undefined ? options.minZoom : 0;
-
-  /**
-   * @private
-   * @type {!Array.<number>}
-   */
-  this.resolutions_ = options.resolutions;
-  ol.asserts.assert(ol.array.isSorted(this.resolutions_, function(a, b) {
-    return b - a;
-  }, true), 17); // `resolutions` must be sorted in descending order
-
-  /**
-   * @protected
-   * @type {number}
-   */
-  this.maxZoom = this.resolutions_.length - 1;
-
-  /**
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.origin_ = options.origin !== undefined ? options.origin : null;
-
-  /**
-   * @private
-   * @type {Array.<ol.Coordinate>}
-   */
-  this.origins_ = null;
-  if (options.origins !== undefined) {
-    this.origins_ = options.origins;
-    ol.asserts.assert(this.origins_.length == this.resolutions_.length,
-        20); // Number of `origins` and `resolutions` must be equal
-  }
-
-  var extent = options.extent;
-
-  if (extent !== undefined &&
-      !this.origin_ && !this.origins_) {
-    this.origin_ = ol.extent.getTopLeft(extent);
-  }
-
-  ol.asserts.assert(
-      (!this.origin_ && this.origins_) || (this.origin_ && !this.origins_),
-      18); // Either `origin` or `origins` must be configured, never both
-
-  /**
-   * @private
-   * @type {Array.<number|ol.Size>}
-   */
-  this.tileSizes_ = null;
-  if (options.tileSizes !== undefined) {
-    this.tileSizes_ = options.tileSizes;
-    ol.asserts.assert(this.tileSizes_.length == this.resolutions_.length,
-        19); // Number of `tileSizes` and `resolutions` must be equal
-  }
-
-  /**
-   * @private
-   * @type {number|ol.Size}
-   */
-  this.tileSize_ = options.tileSize !== undefined ?
-      options.tileSize :
-      !this.tileSizes_ ? ol.DEFAULT_TILE_SIZE : null;
-  ol.asserts.assert(
-      (!this.tileSize_ && this.tileSizes_) ||
-      (this.tileSize_ && !this.tileSizes_),
-      22); // Either `tileSize` or `tileSizes` must be configured, never both
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.extent_ = extent !== undefined ? extent : null;
-
-
-  /**
-   * @private
-   * @type {Array.<ol.TileRange>}
-   */
-  this.fullTileRanges_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.tmpSize_ = [0, 0];
-
-  if (options.sizes !== undefined) {
-    ol.DEBUG && console.assert(options.sizes.length == this.resolutions_.length,
-        'number of sizes and resolutions must be equal');
-    this.fullTileRanges_ = options.sizes.map(function(size, z) {
-      ol.DEBUG && console.assert(size[0] !== 0, 'width must not be 0');
-      ol.DEBUG && console.assert(size[1] !== 0, 'height must not be 0');
-      var tileRange = new ol.TileRange(
-          Math.min(0, size[0]), Math.max(size[0] - 1, -1),
-          Math.min(0, size[1]), Math.max(size[1] - 1, -1));
-      return tileRange;
-    }, this);
-  } else if (extent) {
-    this.calculateTileRanges_(extent);
-  }
-
-};
-
-
-/**
- * @private
- * @type {ol.TileCoord}
- */
-ol.tilegrid.TileGrid.tmpTileCoord_ = [0, 0, 0];
-
-
-/**
- * Call a function with each tile coordinate for a given extent and zoom level.
- *
- * @param {ol.Extent} extent Extent.
- * @param {number} zoom Zoom level.
- * @param {function(ol.TileCoord)} callback Function called with each tile coordinate.
- * @api
- */
-ol.tilegrid.TileGrid.prototype.forEachTileCoord = function(extent, zoom, callback) {
-  var tileRange = this.getTileRangeForExtentAndZ(extent, zoom);
-  for (var i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) {
-    for (var j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) {
-      callback([zoom, i, j]);
-    }
-  }
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {function(this: T, number, ol.TileRange): boolean} callback Callback.
- * @param {T=} opt_this The object to use as `this` in `callback`.
- * @param {ol.TileRange=} opt_tileRange Temporary ol.TileRange object.
- * @param {ol.Extent=} opt_extent Temporary ol.Extent object.
- * @return {boolean} Callback succeeded.
- * @template T
- */
-ol.tilegrid.TileGrid.prototype.forEachTileCoordParentTileRange = function(tileCoord, callback, opt_this, opt_tileRange, opt_extent) {
-  var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);
-  var z = tileCoord[0] - 1;
-  while (z >= this.minZoom) {
-    if (callback.call(opt_this, z,
-        this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange))) {
-      return true;
-    }
-    --z;
-  }
-  return false;
-};
-
-
-/**
- * Get the extent for this tile grid, if it was configured.
- * @return {ol.Extent} Extent.
- */
-ol.tilegrid.TileGrid.prototype.getExtent = function() {
-  return this.extent_;
-};
-
-
-/**
- * Get the maximum zoom level for the grid.
- * @return {number} Max zoom.
- * @api
- */
-ol.tilegrid.TileGrid.prototype.getMaxZoom = function() {
-  return this.maxZoom;
-};
-
-
-/**
- * Get the minimum zoom level for the grid.
- * @return {number} Min zoom.
- * @api
- */
-ol.tilegrid.TileGrid.prototype.getMinZoom = function() {
-  return this.minZoom;
-};
-
-
-/**
- * Get the origin for the grid at the given zoom level.
- * @param {number} z Z.
- * @return {ol.Coordinate} Origin.
- * @api stable
- */
-ol.tilegrid.TileGrid.prototype.getOrigin = function(z) {
-  if (this.origin_) {
-    return this.origin_;
-  } else {
-    ol.DEBUG && console.assert(this.minZoom <= z && z <= this.maxZoom,
-        'given z is not in allowed range (%s <= %s <= %s)',
-        this.minZoom, z, this.maxZoom);
-    return this.origins_[z];
-  }
-};
-
-
-/**
- * Get the resolution for the given zoom level.
- * @param {number} z Z.
- * @return {number} Resolution.
- * @api stable
- */
-ol.tilegrid.TileGrid.prototype.getResolution = function(z) {
-  ol.DEBUG && console.assert(this.minZoom <= z && z <= this.maxZoom,
-      'given z is not in allowed range (%s <= %s <= %s)',
-      this.minZoom, z, this.maxZoom);
-  return this.resolutions_[z];
-};
-
-
-/**
- * Get the list of resolutions for the tile grid.
- * @return {Array.<number>} Resolutions.
- * @api stable
- */
-ol.tilegrid.TileGrid.prototype.getResolutions = function() {
-  return this.resolutions_;
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.TileRange=} opt_tileRange Temporary ol.TileRange object.
- * @param {ol.Extent=} opt_extent Temporary ol.Extent object.
- * @return {ol.TileRange} Tile range.
- */
-ol.tilegrid.TileGrid.prototype.getTileCoordChildTileRange = function(tileCoord, opt_tileRange, opt_extent) {
-  if (tileCoord[0] < this.maxZoom) {
-    var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);
-    return this.getTileRangeForExtentAndZ(
-        tileCoordExtent, tileCoord[0] + 1, opt_tileRange);
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @param {number} z Z.
- * @param {ol.TileRange} tileRange Tile range.
- * @param {ol.Extent=} opt_extent Temporary ol.Extent object.
- * @return {ol.Extent} Extent.
- */
-ol.tilegrid.TileGrid.prototype.getTileRangeExtent = function(z, tileRange, opt_extent) {
-  var origin = this.getOrigin(z);
-  var resolution = this.getResolution(z);
-  var tileSize = ol.size.toSize(this.getTileSize(z), this.tmpSize_);
-  var minX = origin[0] + tileRange.minX * tileSize[0] * resolution;
-  var maxX = origin[0] + (tileRange.maxX + 1) * tileSize[0] * resolution;
-  var minY = origin[1] + tileRange.minY * tileSize[1] * resolution;
-  var maxY = origin[1] + (tileRange.maxY + 1) * tileSize[1] * resolution;
-  return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent);
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number} resolution Resolution.
- * @param {ol.TileRange=} opt_tileRange Temporary tile range object.
- * @return {ol.TileRange} Tile range.
- */
-ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndResolution = function(extent, resolution, opt_tileRange) {
-  var tileCoord = ol.tilegrid.TileGrid.tmpTileCoord_;
-  this.getTileCoordForXYAndResolution_(
-      extent[0], extent[1], resolution, false, tileCoord);
-  var minX = tileCoord[1];
-  var minY = tileCoord[2];
-  this.getTileCoordForXYAndResolution_(
-      extent[2], extent[3], resolution, true, tileCoord);
-  return ol.TileRange.createOrUpdate(
-      minX, tileCoord[1], minY, tileCoord[2], opt_tileRange);
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number} z Z.
- * @param {ol.TileRange=} opt_tileRange Temporary tile range object.
- * @return {ol.TileRange} Tile range.
- */
-ol.tilegrid.TileGrid.prototype.getTileRangeForExtentAndZ = function(extent, z, opt_tileRange) {
-  var resolution = this.getResolution(z);
-  return this.getTileRangeForExtentAndResolution(
-      extent, resolution, opt_tileRange);
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @return {ol.Coordinate} Tile center.
- */
-ol.tilegrid.TileGrid.prototype.getTileCoordCenter = function(tileCoord) {
-  var origin = this.getOrigin(tileCoord[0]);
-  var resolution = this.getResolution(tileCoord[0]);
-  var tileSize = ol.size.toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);
-  return [
-    origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution,
-    origin[1] + (tileCoord[2] + 0.5) * tileSize[1] * resolution
-  ];
-};
-
-
-/**
- * Get the extent of a tile coordinate.
- *
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Extent=} opt_extent Temporary extent object.
- * @return {ol.Extent} Extent.
- * @api
- */
-ol.tilegrid.TileGrid.prototype.getTileCoordExtent = function(tileCoord, opt_extent) {
-  var origin = this.getOrigin(tileCoord[0]);
-  var resolution = this.getResolution(tileCoord[0]);
-  var tileSize = ol.size.toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);
-  var minX = origin[0] + tileCoord[1] * tileSize[0] * resolution;
-  var minY = origin[1] + tileCoord[2] * tileSize[1] * resolution;
-  var maxX = minX + tileSize[0] * resolution;
-  var maxY = minY + tileSize[1] * resolution;
-  return ol.extent.createOrUpdate(minX, minY, maxX, maxY, opt_extent);
-};
-
-
-/**
- * Get the tile coordinate for the given map coordinate and resolution.  This
- * method considers that coordinates that intersect tile boundaries should be
- * assigned the higher tile coordinate.
- *
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} resolution Resolution.
- * @param {ol.TileCoord=} opt_tileCoord Destination ol.TileCoord object.
- * @return {ol.TileCoord} Tile coordinate.
- * @api
- */
-ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution = function(coordinate, resolution, opt_tileCoord) {
-  return this.getTileCoordForXYAndResolution_(
-      coordinate[0], coordinate[1], resolution, false, opt_tileCoord);
-};
-
-
-/**
- * @param {number} x X.
- * @param {number} y Y.
- * @param {number} resolution Resolution.
- * @param {boolean} reverseIntersectionPolicy Instead of letting edge
- *     intersections go to the higher tile coordinate, let edge intersections
- *     go to the lower tile coordinate.
- * @param {ol.TileCoord=} opt_tileCoord Temporary ol.TileCoord object.
- * @return {ol.TileCoord} Tile coordinate.
- * @private
- */
-ol.tilegrid.TileGrid.prototype.getTileCoordForXYAndResolution_ = function(
-    x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) {
-  var z = this.getZForResolution(resolution);
-  var scale = resolution / this.getResolution(z);
-  var origin = this.getOrigin(z);
-  var tileSize = ol.size.toSize(this.getTileSize(z), this.tmpSize_);
-
-  var adjustX = reverseIntersectionPolicy ? 0.5 : 0;
-  var adjustY = reverseIntersectionPolicy ? 0 : 0.5;
-  var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);
-  var yFromOrigin = Math.floor((y - origin[1]) / resolution + adjustY);
-  var tileCoordX = scale * xFromOrigin / tileSize[0];
-  var tileCoordY = scale * yFromOrigin / tileSize[1];
-
-  if (reverseIntersectionPolicy) {
-    tileCoordX = Math.ceil(tileCoordX) - 1;
-    tileCoordY = Math.ceil(tileCoordY) - 1;
-  } else {
-    tileCoordX = Math.floor(tileCoordX);
-    tileCoordY = Math.floor(tileCoordY);
-  }
-
-  return ol.tilecoord.createOrUpdate(z, tileCoordX, tileCoordY, opt_tileCoord);
-};
-
-
-/**
- * Get a tile coordinate given a map coordinate and zoom level.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} z Zoom level.
- * @param {ol.TileCoord=} opt_tileCoord Destination ol.TileCoord object.
- * @return {ol.TileCoord} Tile coordinate.
- * @api
- */
-ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ = function(coordinate, z, opt_tileCoord) {
-  var resolution = this.getResolution(z);
-  return this.getTileCoordForXYAndResolution_(
-      coordinate[0], coordinate[1], resolution, false, opt_tileCoord);
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @return {number} Tile resolution.
- */
-ol.tilegrid.TileGrid.prototype.getTileCoordResolution = function(tileCoord) {
-  ol.DEBUG && console.assert(
-      this.minZoom <= tileCoord[0] && tileCoord[0] <= this.maxZoom,
-      'z of given tilecoord is not in allowed range (%s <= %s <= %s',
-      this.minZoom, tileCoord[0], this.maxZoom);
-  return this.resolutions_[tileCoord[0]];
-};
-
-
-/**
- * Get the tile size for a zoom level. The type of the return value matches the
- * `tileSize` or `tileSizes` that the tile grid was configured with. To always
- * get an `ol.Size`, run the result through `ol.size.toSize()`.
- * @param {number} z Z.
- * @return {number|ol.Size} Tile size.
- * @api stable
- */
-ol.tilegrid.TileGrid.prototype.getTileSize = function(z) {
-  if (this.tileSize_) {
-    return this.tileSize_;
-  } else {
-    ol.DEBUG && console.assert(this.minZoom <= z && z <= this.maxZoom,
-        'z is not in allowed range (%s <= %s <= %s',
-        this.minZoom, z, this.maxZoom);
-    return this.tileSizes_[z];
-  }
-};
-
-
-/**
- * @param {number} z Zoom level.
- * @return {ol.TileRange} Extent tile range for the specified zoom level.
- */
-ol.tilegrid.TileGrid.prototype.getFullTileRange = function(z) {
-  if (!this.fullTileRanges_) {
-    return null;
-  } else {
-    ol.DEBUG && console.assert(this.minZoom <= z && z <= this.maxZoom,
-        'z is not in allowed range (%s <= %s <= %s',
-        this.minZoom, z, this.maxZoom);
-    return this.fullTileRanges_[z];
-  }
-};
-
-
-/**
- * @param {number} resolution Resolution.
- * @param {number=} opt_direction If 0, the nearest resolution will be used.
- *     If 1, the nearest lower resolution will be used. If -1, the nearest
- *     higher resolution will be used. Default is 0.
- * @return {number} Z.
- * @api
- */
-ol.tilegrid.TileGrid.prototype.getZForResolution = function(
-    resolution, opt_direction) {
-  var z = ol.array.linearFindNearest(this.resolutions_, resolution,
-      opt_direction || 0);
-  return ol.math.clamp(z, this.minZoom, this.maxZoom);
-};
-
-
-/**
- * @param {!ol.Extent} extent Extent for this tile grid.
- * @private
- */
-ol.tilegrid.TileGrid.prototype.calculateTileRanges_ = function(extent) {
-  var length = this.resolutions_.length;
-  var fullTileRanges = new Array(length);
-  for (var z = this.minZoom; z < length; ++z) {
-    fullTileRanges[z] = this.getTileRangeForExtentAndZ(extent, z);
-  }
-  this.fullTileRanges_ = fullTileRanges;
-};
-
-goog.provide('ol.tilegrid');
-
-goog.require('ol');
-goog.require('ol.size');
-goog.require('ol.extent');
-goog.require('ol.extent.Corner');
-goog.require('ol.obj');
-goog.require('ol.proj');
-goog.require('ol.proj.METERS_PER_UNIT');
-goog.require('ol.proj.Units');
-goog.require('ol.tilegrid.TileGrid');
-
-
-/**
- * @param {ol.proj.Projection} projection Projection.
- * @return {!ol.tilegrid.TileGrid} Default tile grid for the passed projection.
- */
-ol.tilegrid.getForProjection = function(projection) {
-  var tileGrid = projection.getDefaultTileGrid();
-  if (!tileGrid) {
-    tileGrid = ol.tilegrid.createForProjection(projection);
-    projection.setDefaultTileGrid(tileGrid);
-  }
-  return tileGrid;
-};
-
-
-/**
- * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.proj.Projection} projection Projection.
- * @return {ol.TileCoord} Tile coordinate.
- */
-ol.tilegrid.wrapX = function(tileGrid, tileCoord, projection) {
-  var z = tileCoord[0];
-  var center = tileGrid.getTileCoordCenter(tileCoord);
-  var projectionExtent = ol.tilegrid.extentFromProjection(projection);
-  if (!ol.extent.containsCoordinate(projectionExtent, center)) {
-    var worldWidth = ol.extent.getWidth(projectionExtent);
-    var worldsAway = Math.ceil((projectionExtent[0] - center[0]) / worldWidth);
-    center[0] += worldWidth * worldsAway;
-    return tileGrid.getTileCoordForCoordAndZ(center, z);
-  } else {
-    return tileCoord;
-  }
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number=} opt_maxZoom Maximum zoom level (default is
- *     ol.DEFAULT_MAX_ZOOM).
- * @param {number|ol.Size=} opt_tileSize Tile size (default uses
- *     ol.DEFAULT_TILE_SIZE).
- * @param {ol.extent.Corner=} opt_corner Extent corner (default is
- *     ol.extent.Corner.TOP_LEFT).
- * @return {!ol.tilegrid.TileGrid} TileGrid instance.
- */
-ol.tilegrid.createForExtent = function(extent, opt_maxZoom, opt_tileSize, opt_corner) {
-  var corner = opt_corner !== undefined ?
-      opt_corner : ol.extent.Corner.TOP_LEFT;
-
-  var resolutions = ol.tilegrid.resolutionsFromExtent(
-      extent, opt_maxZoom, opt_tileSize);
-
-  return new ol.tilegrid.TileGrid({
-    extent: extent,
-    origin: ol.extent.getCorner(extent, corner),
-    resolutions: resolutions,
-    tileSize: opt_tileSize
-  });
-};
-
-
-/**
- * Creates a tile grid with a standard XYZ tiling scheme.
- * @param {olx.tilegrid.XYZOptions=} opt_options Tile grid options.
- * @return {ol.tilegrid.TileGrid} Tile grid instance.
- * @api
- */
-ol.tilegrid.createXYZ = function(opt_options) {
-  var options = /** @type {olx.tilegrid.TileGridOptions} */ ({});
-  ol.obj.assign(options, opt_options !== undefined ?
-      opt_options : /** @type {olx.tilegrid.XYZOptions} */ ({}));
-  if (options.extent === undefined) {
-    options.extent = ol.proj.get('EPSG:3857').getExtent();
-  }
-  options.resolutions = ol.tilegrid.resolutionsFromExtent(
-      options.extent, options.maxZoom, options.tileSize);
-  delete options.maxZoom;
-
-  return new ol.tilegrid.TileGrid(options);
-};
-
-
-/**
- * Create a resolutions array from an extent.  A zoom factor of 2 is assumed.
- * @param {ol.Extent} extent Extent.
- * @param {number=} opt_maxZoom Maximum zoom level (default is
- *     ol.DEFAULT_MAX_ZOOM).
- * @param {number|ol.Size=} opt_tileSize Tile size (default uses
- *     ol.DEFAULT_TILE_SIZE).
- * @return {!Array.<number>} Resolutions array.
- */
-ol.tilegrid.resolutionsFromExtent = function(extent, opt_maxZoom, opt_tileSize) {
-  var maxZoom = opt_maxZoom !== undefined ?
-      opt_maxZoom : ol.DEFAULT_MAX_ZOOM;
-
-  var height = ol.extent.getHeight(extent);
-  var width = ol.extent.getWidth(extent);
-
-  var tileSize = ol.size.toSize(opt_tileSize !== undefined ?
-      opt_tileSize : ol.DEFAULT_TILE_SIZE);
-  var maxResolution = Math.max(
-      width / tileSize[0], height / tileSize[1]);
-
-  var length = maxZoom + 1;
-  var resolutions = new Array(length);
-  for (var z = 0; z < length; ++z) {
-    resolutions[z] = maxResolution / Math.pow(2, z);
-  }
-  return resolutions;
-};
-
-
-/**
- * @param {ol.ProjectionLike} projection Projection.
- * @param {number=} opt_maxZoom Maximum zoom level (default is
- *     ol.DEFAULT_MAX_ZOOM).
- * @param {ol.Size=} opt_tileSize Tile size (default uses ol.DEFAULT_TILE_SIZE).
- * @param {ol.extent.Corner=} opt_corner Extent corner (default is
- *     ol.extent.Corner.BOTTOM_LEFT).
- * @return {!ol.tilegrid.TileGrid} TileGrid instance.
- */
-ol.tilegrid.createForProjection = function(projection, opt_maxZoom, opt_tileSize, opt_corner) {
-  var extent = ol.tilegrid.extentFromProjection(projection);
-  return ol.tilegrid.createForExtent(
-      extent, opt_maxZoom, opt_tileSize, opt_corner);
-};
-
-
-/**
- * Generate a tile grid extent from a projection.  If the projection has an
- * extent, it is used.  If not, a global extent is assumed.
- * @param {ol.ProjectionLike} projection Projection.
- * @return {ol.Extent} Extent.
- */
-ol.tilegrid.extentFromProjection = function(projection) {
-  projection = ol.proj.get(projection);
-  var extent = projection.getExtent();
-  if (!extent) {
-    var half = 180 * ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES] /
-        projection.getMetersPerUnit();
-    extent = ol.extent.createOrUpdate(-half, -half, half, half);
-  }
-  return extent;
-};
-
-goog.provide('ol.Attribution');
-
-goog.require('ol.TileRange');
-goog.require('ol.math');
-goog.require('ol.tilegrid');
-
-
-/**
- * @classdesc
- * An attribution for a layer source.
- *
- * Example:
- *
- *     source: new ol.source.OSM({
- *       attributions: [
- *         new ol.Attribution({
- *           html: 'All maps &copy; ' +
- *               '<a href="https://www.opencyclemap.org/">OpenCycleMap</a>'
- *         }),
- *         ol.source.OSM.ATTRIBUTION
- *       ],
- *     ..
- *
- * @constructor
- * @param {olx.AttributionOptions} options Attribution options.
- * @struct
- * @api stable
- */
-ol.Attribution = function(options) {
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.html_ = options.html;
-
-  /**
-   * @private
-   * @type {Object.<string, Array.<ol.TileRange>>}
-   */
-  this.tileRanges_ = options.tileRanges ? options.tileRanges : null;
-
-};
-
-
-/**
- * Get the attribution markup.
- * @return {string} The attribution HTML.
- * @api stable
- */
-ol.Attribution.prototype.getHTML = function() {
-  return this.html_;
-};
-
-
-/**
- * @param {Object.<string, ol.TileRange>} tileRanges Tile ranges.
- * @param {!ol.tilegrid.TileGrid} tileGrid Tile grid.
- * @param {!ol.proj.Projection} projection Projection.
- * @return {boolean} Intersects any tile range.
- */
-ol.Attribution.prototype.intersectsAnyTileRange = function(tileRanges, tileGrid, projection) {
-  if (!this.tileRanges_) {
-    return true;
-  }
-  var i, ii, tileRange, zKey;
-  for (zKey in tileRanges) {
-    if (!(zKey in this.tileRanges_)) {
-      continue;
-    }
-    tileRange = tileRanges[zKey];
-    var testTileRange;
-    for (i = 0, ii = this.tileRanges_[zKey].length; i < ii; ++i) {
-      testTileRange = this.tileRanges_[zKey][i];
-      if (testTileRange.intersects(tileRange)) {
-        return true;
-      }
-      var extentTileRange = tileGrid.getTileRangeForExtentAndZ(
-          ol.tilegrid.extentFromProjection(projection), parseInt(zKey, 10));
-      var width = extentTileRange.getWidth();
-      if (tileRange.minX < extentTileRange.minX ||
-          tileRange.maxX > extentTileRange.maxX) {
-        if (testTileRange.intersects(new ol.TileRange(
-            ol.math.modulo(tileRange.minX, width),
-            ol.math.modulo(tileRange.maxX, width),
-            tileRange.minY, tileRange.maxY))) {
-          return true;
-        }
-        if (tileRange.getWidth() > width &&
-            testTileRange.intersects(extentTileRange)) {
-          return true;
-        }
-      }
-    }
-  }
-  return false;
-};
-
-/**
- * An implementation of Google Maps' MVCArray.
- * @see https://developers.google.com/maps/documentation/javascript/reference
- */
-
-goog.provide('ol.Collection');
-
-goog.require('ol');
-goog.require('ol.events.Event');
-goog.require('ol.Object');
-
-
-/**
- * @classdesc
- * An expanded version of standard JS Array, adding convenience methods for
- * manipulation. Add and remove changes to the Collection trigger a Collection
- * event. Note that this does not cover changes to the objects _within_ the
- * Collection; they trigger events on the appropriate object, not on the
- * Collection as a whole.
- *
- * @constructor
- * @extends {ol.Object}
- * @fires ol.Collection.Event
- * @param {!Array.<T>=} opt_array Array.
- * @template T
- * @api stable
- */
-ol.Collection = function(opt_array) {
-
-  ol.Object.call(this);
-
-  /**
-   * @private
-   * @type {!Array.<T>}
-   */
-  this.array_ = opt_array ? opt_array : [];
-
-  this.updateLength_();
-
-};
-ol.inherits(ol.Collection, ol.Object);
-
-
-/**
- * Remove all elements from the collection.
- * @api stable
- */
-ol.Collection.prototype.clear = function() {
-  while (this.getLength() > 0) {
-    this.pop();
-  }
-};
-
-
-/**
- * Add elements to the collection.  This pushes each item in the provided array
- * to the end of the collection.
- * @param {!Array.<T>} arr Array.
- * @return {ol.Collection.<T>} This collection.
- * @api stable
- */
-ol.Collection.prototype.extend = function(arr) {
-  var i, ii;
-  for (i = 0, ii = arr.length; i < ii; ++i) {
-    this.push(arr[i]);
-  }
-  return this;
-};
-
-
-/**
- * Iterate over each element, calling the provided callback.
- * @param {function(this: S, T, number, Array.<T>): *} f The function to call
- *     for every element. This function takes 3 arguments (the element, the
- *     index and the array). The return value is ignored.
- * @param {S=} opt_this The object to use as `this` in `f`.
- * @template S
- * @api stable
- */
-ol.Collection.prototype.forEach = function(f, opt_this) {
-  this.array_.forEach(f, opt_this);
-};
-
-
-/**
- * Get a reference to the underlying Array object. Warning: if the array
- * is mutated, no events will be dispatched by the collection, and the
- * collection's "length" property won't be in sync with the actual length
- * of the array.
- * @return {!Array.<T>} Array.
- * @api stable
- */
-ol.Collection.prototype.getArray = function() {
-  return this.array_;
-};
-
-
-/**
- * Get the element at the provided index.
- * @param {number} index Index.
- * @return {T} Element.
- * @api stable
- */
-ol.Collection.prototype.item = function(index) {
-  return this.array_[index];
-};
-
-
-/**
- * Get the length of this collection.
- * @return {number} The length of the array.
- * @observable
- * @api stable
- */
-ol.Collection.prototype.getLength = function() {
-  return /** @type {number} */ (this.get(ol.Collection.Property.LENGTH));
-};
-
-
-/**
- * Insert an element at the provided index.
- * @param {number} index Index.
- * @param {T} elem Element.
- * @api stable
- */
-ol.Collection.prototype.insertAt = function(index, elem) {
-  this.array_.splice(index, 0, elem);
-  this.updateLength_();
-  this.dispatchEvent(
-      new ol.Collection.Event(ol.Collection.EventType.ADD, elem));
-};
-
-
-/**
- * Remove the last element of the collection and return it.
- * Return `undefined` if the collection is empty.
- * @return {T|undefined} Element.
- * @api stable
- */
-ol.Collection.prototype.pop = function() {
-  return this.removeAt(this.getLength() - 1);
-};
-
-
-/**
- * Insert the provided element at the end of the collection.
- * @param {T} elem Element.
- * @return {number} Length.
- * @api stable
- */
-ol.Collection.prototype.push = function(elem) {
-  var n = this.array_.length;
-  this.insertAt(n, elem);
-  return n;
-};
-
-
-/**
- * Remove the first occurrence of an element from the collection.
- * @param {T} elem Element.
- * @return {T|undefined} The removed element or undefined if none found.
- * @api stable
- */
-ol.Collection.prototype.remove = function(elem) {
-  var arr = this.array_;
-  var i, ii;
-  for (i = 0, ii = arr.length; i < ii; ++i) {
-    if (arr[i] === elem) {
-      return this.removeAt(i);
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * Remove the element at the provided index and return it.
- * Return `undefined` if the collection does not contain this index.
- * @param {number} index Index.
- * @return {T|undefined} Value.
- * @api stable
- */
-ol.Collection.prototype.removeAt = function(index) {
-  var prev = this.array_[index];
-  this.array_.splice(index, 1);
-  this.updateLength_();
-  this.dispatchEvent(
-      new ol.Collection.Event(ol.Collection.EventType.REMOVE, prev));
-  return prev;
-};
-
-
-/**
- * Set the element at the provided index.
- * @param {number} index Index.
- * @param {T} elem Element.
- * @api stable
- */
-ol.Collection.prototype.setAt = function(index, elem) {
-  var n = this.getLength();
-  if (index < n) {
-    var prev = this.array_[index];
-    this.array_[index] = elem;
-    this.dispatchEvent(
-        new ol.Collection.Event(ol.Collection.EventType.REMOVE, prev));
-    this.dispatchEvent(
-        new ol.Collection.Event(ol.Collection.EventType.ADD, elem));
-  } else {
-    var j;
-    for (j = n; j < index; ++j) {
-      this.insertAt(j, undefined);
-    }
-    this.insertAt(index, elem);
-  }
-};
-
-
-/**
- * @private
- */
-ol.Collection.prototype.updateLength_ = function() {
-  this.set(ol.Collection.Property.LENGTH, this.array_.length);
-};
-
-
-/**
- * @enum {string}
- */
-ol.Collection.Property = {
-  LENGTH: 'length'
-};
-
-
-/**
- * @enum {string}
- */
-ol.Collection.EventType = {
-  /**
-   * Triggered when an item is added to the collection.
-   * @event ol.Collection.Event#add
-   * @api stable
-   */
-  ADD: 'add',
-  /**
-   * Triggered when an item is removed from the collection.
-   * @event ol.Collection.Event#remove
-   * @api stable
-   */
-  REMOVE: 'remove'
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.Collection} instances are instances of this
- * type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.Collection.Event}
- * @param {ol.Collection.EventType} type Type.
- * @param {*=} opt_element Element.
- */
-ol.Collection.Event = function(type, opt_element) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The element that is added to or removed from the collection.
-   * @type {*}
-   * @api stable
-   */
-  this.element = opt_element;
-
-};
-ol.inherits(ol.Collection.Event, ol.events.Event);
-
-goog.provide('ol.color');
-
-goog.require('ol.asserts');
-goog.require('ol.math');
-
-
-/**
- * This RegExp matches # followed by 3 or 6 hex digits.
- * @const
- * @type {RegExp}
- * @private
- */
-ol.color.HEX_COLOR_RE_ = /^#(?:[0-9a-f]{3}){1,2}$/i;
-
-
-/**
- * Regular expression for matching and capturing RGB style strings.
- * @const
- * @type {RegExp}
- * @private
- */
-ol.color.RGB_COLOR_RE_ =
-    /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;
-
-
-/**
- * Regular expression for matching and capturing RGBA style strings.
- * @const
- * @type {RegExp}
- * @private
- */
-ol.color.RGBA_COLOR_RE_ =
-    /^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;
-
-
-/**
- * Regular expression for matching potential named color style strings.
- * @const
- * @type {RegExp}
- * @private
- */
-ol.color.NAMED_COLOR_RE_ =
-    /^([a-z]*)$/i;
-
-
-/**
- * Return the color as an array. This function maintains a cache of calculated
- * arrays which means the result should not be modified.
- * @param {ol.Color|string} color Color.
- * @return {ol.Color} Color.
- * @api
- */
-ol.color.asArray = function(color) {
-  if (Array.isArray(color)) {
-    return color;
-  } else {
-    return ol.color.fromString(/** @type {string} */ (color));
-  }
-};
-
-
-/**
- * Return the color as an rgba string.
- * @param {ol.Color|string} color Color.
- * @return {string} Rgba string.
- * @api
- */
-ol.color.asString = function(color) {
-  if (typeof color === 'string') {
-    return color;
-  } else {
-    return ol.color.toString(color);
-  }
-};
-
-/**
- * Return named color as an rgba string.
- * @param {string} color Named color.
- * @return {string} Rgb string.
- */
-ol.color.fromNamed = function(color) {
-  var el = document.createElement('div');
-  el.style.color = color;
-  document.body.appendChild(el);
-  var rgb = getComputedStyle(el).color;
-  document.body.removeChild(el);
-  return rgb;
-};
-
-
-/**
- * @param {string} s String.
- * @return {ol.Color} Color.
- */
-ol.color.fromString = (
-    function() {
-
-      // We maintain a small cache of parsed strings.  To provide cheap LRU-like
-      // semantics, whenever the cache grows too large we simply delete an
-      // arbitrary 25% of the entries.
-
-      /**
-       * @const
-       * @type {number}
-       */
-      var MAX_CACHE_SIZE = 1024;
-
-      /**
-       * @type {Object.<string, ol.Color>}
-       */
-      var cache = {};
-
-      /**
-       * @type {number}
-       */
-      var cacheSize = 0;
-
-      return (
-          /**
-           * @param {string} s String.
-           * @return {ol.Color} Color.
-           */
-          function(s) {
-            var color;
-            if (cache.hasOwnProperty(s)) {
-              color = cache[s];
-            } else {
-              if (cacheSize >= MAX_CACHE_SIZE) {
-                var i = 0;
-                var key;
-                for (key in cache) {
-                  if ((i++ & 3) === 0) {
-                    delete cache[key];
-                    --cacheSize;
-                  }
-                }
-              }
-              color = ol.color.fromStringInternal_(s);
-              cache[s] = color;
-              ++cacheSize;
-            }
-            return color;
-          });
-
-    })();
-
-
-/**
- * @param {string} s String.
- * @private
- * @return {ol.Color} Color.
- */
-ol.color.fromStringInternal_ = function(s) {
-  var r, g, b, a, color, match;
-
-  if (ol.color.NAMED_COLOR_RE_.exec(s)) {
-    s = ol.color.fromNamed(s);
-  }
-
-  if (ol.color.HEX_COLOR_RE_.exec(s)) { // hex
-    var n = s.length - 1; // number of hex digits
-    ol.asserts.assert(n == 3 || n == 6, 54); // Hex color should have 3 or 6 digits
-    var d = n == 3 ? 1 : 2; // number of digits per channel
-    r = parseInt(s.substr(1 + 0 * d, d), 16);
-    g = parseInt(s.substr(1 + 1 * d, d), 16);
-    b = parseInt(s.substr(1 + 2 * d, d), 16);
-    if (d == 1) {
-      r = (r << 4) + r;
-      g = (g << 4) + g;
-      b = (b << 4) + b;
-    }
-    a = 1;
-    color = [r, g, b, a];
-  } else if ((match = ol.color.RGBA_COLOR_RE_.exec(s))) { // rgba()
-    r = Number(match[1]);
-    g = Number(match[2]);
-    b = Number(match[3]);
-    a = Number(match[4]);
-    color = ol.color.normalize([r, g, b, a]);
-  } else if ((match = ol.color.RGB_COLOR_RE_.exec(s))) { // rgb()
-    r = Number(match[1]);
-    g = Number(match[2]);
-    b = Number(match[3]);
-    color = ol.color.normalize([r, g, b, 1]);
-  } else {
-    ol.asserts.assert(false, 14); // Invalid color
-  }
-  return /** @type {ol.Color} */ (color);
-};
-
-
-/**
- * @param {ol.Color} color Color.
- * @param {ol.Color=} opt_color Color.
- * @return {ol.Color} Clamped color.
- */
-ol.color.normalize = function(color, opt_color) {
-  var result = opt_color || [];
-  result[0] = ol.math.clamp((color[0] + 0.5) | 0, 0, 255);
-  result[1] = ol.math.clamp((color[1] + 0.5) | 0, 0, 255);
-  result[2] = ol.math.clamp((color[2] + 0.5) | 0, 0, 255);
-  result[3] = ol.math.clamp(color[3], 0, 1);
-  return result;
-};
-
-
-/**
- * @param {ol.Color} color Color.
- * @return {string} String.
- */
-ol.color.toString = function(color) {
-  var r = color[0];
-  if (r != (r | 0)) {
-    r = (r + 0.5) | 0;
-  }
-  var g = color[1];
-  if (g != (g | 0)) {
-    g = (g + 0.5) | 0;
-  }
-  var b = color[2];
-  if (b != (b | 0)) {
-    b = (b + 0.5) | 0;
-  }
-  var a = color[3] === undefined ? 1 : color[3];
-  return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
-};
-
-goog.provide('ol.colorlike');
-
-goog.require('ol.color');
-
-
-/**
- * @param {ol.Color|ol.ColorLike} color Color.
- * @return {ol.ColorLike} The color as an ol.ColorLike
- * @api
- */
-ol.colorlike.asColorLike = function(color) {
-  if (ol.colorlike.isColorLike(color)) {
-    return /** @type {string|CanvasPattern|CanvasGradient} */ (color);
-  } else {
-    return ol.color.asString(/** @type {ol.Color} */ (color));
-  }
-};
-
-
-/**
- * @param {?} color The value that is potentially an ol.ColorLike
- * @return {boolean} Whether the color is an ol.ColorLike
- */
-ol.colorlike.isColorLike = function(color) {
-  return (
-      typeof color === 'string' ||
-      color instanceof CanvasPattern ||
-      color instanceof CanvasGradient
-  );
-};
-
-goog.provide('ol.dom');
-
-
-/**
- * Create an html canvas element and returns its 2d context.
- * @param {number=} opt_width Canvas width.
- * @param {number=} opt_height Canvas height.
- * @return {CanvasRenderingContext2D} The context.
- */
-ol.dom.createCanvasContext2D = function(opt_width, opt_height) {
-  var canvas = document.createElement('CANVAS');
-  if (opt_width) {
-    canvas.width = opt_width;
-  }
-  if (opt_height) {
-    canvas.height = opt_height;
-  }
-  return canvas.getContext('2d');
-};
-
-
-/**
- * Get the current computed width for the given element including margin,
- * padding and border.
- * Equivalent to jQuery's `$(el).outerWidth(true)`.
- * @param {!Element} element Element.
- * @return {number} The width.
- */
-ol.dom.outerWidth = function(element) {
-  var width = element.offsetWidth;
-  var style = element.currentStyle || getComputedStyle(element);
-  width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);
-
-  return width;
-};
-
-
-/**
- * Get the current computed height for the given element including margin,
- * padding and border.
- * Equivalent to jQuery's `$(el).outerHeight(true)`.
- * @param {!Element} element Element.
- * @return {number} The height.
- */
-ol.dom.outerHeight = function(element) {
-  var height = element.offsetHeight;
-  var style = element.currentStyle || getComputedStyle(element);
-  height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);
-
-  return height;
-};
-
-/**
- * @param {Node} newNode Node to replace old node
- * @param {Node} oldNode The node to be replaced
- */
-ol.dom.replaceNode = function(newNode, oldNode) {
-  var parent = oldNode.parentNode;
-  if (parent) {
-    parent.replaceChild(newNode, oldNode);
-  }
-};
-
-/**
- * @param {Node} node The node to remove.
- * @returns {Node} The node that was removed or null.
- */
-ol.dom.removeNode = function(node) {
-  return node && node.parentNode ? node.parentNode.removeChild(node) : null;
-};
-
-/**
- * @param {Node} node The node to remove the children from.
- */
-ol.dom.removeChildren = function(node) {
-  while (node.lastChild) {
-    node.removeChild(node.lastChild);
-  }
-};
-
-goog.provide('ol.MapEvent');
-
-goog.require('ol');
-goog.require('ol.events.Event');
-
-
-/**
- * @classdesc
- * Events emitted as map events are instances of this type.
- * See {@link ol.Map} for which events trigger a map event.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.MapEvent}
- * @param {string} type Event type.
- * @param {ol.Map} map Map.
- * @param {?olx.FrameState=} opt_frameState Frame state.
- */
-ol.MapEvent = function(type, map, opt_frameState) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The map where the event occurred.
-   * @type {ol.Map}
-   * @api stable
-   */
-  this.map = map;
-
-  /**
-   * The frame state at the time of the event.
-   * @type {?olx.FrameState}
-   * @api
-   */
-  this.frameState = opt_frameState !== undefined ? opt_frameState : null;
-
-};
-ol.inherits(ol.MapEvent, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.MapEvent.Type = {
-
-  /**
-   * Triggered after a map frame is rendered.
-   * @event ol.MapEvent#postrender
-   * @api
-   */
-  POSTRENDER: 'postrender',
-
-  /**
-   * Triggered after the map is moved.
-   * @event ol.MapEvent#moveend
-   * @api stable
-   */
-  MOVEEND: 'moveend'
-
-};
-
-goog.provide('ol.control.Control');
-
-goog.require('ol.events');
-goog.require('ol');
-goog.require('ol.MapEvent');
-goog.require('ol.Object');
-goog.require('ol.dom');
-
-
-/**
- * @classdesc
- * A control is a visible widget with a DOM element in a fixed position on the
- * screen. They can involve user input (buttons), or be informational only;
- * the position is determined using CSS. By default these are placed in the
- * container with CSS class name `ol-overlaycontainer-stopevent`, but can use
- * any outside DOM element.
- *
- * This is the base class for controls. You can use it for simple custom
- * controls by creating the element with listeners, creating an instance:
- * ```js
- * var myControl = new ol.control.Control({element: myElement});
- * ```
- * and then adding this to the map.
- *
- * The main advantage of having this as a control rather than a simple separate
- * DOM element is that preventing propagation is handled for you. Controls
- * will also be `ol.Object`s in a `ol.Collection`, so you can use their
- * methods.
- *
- * You can also extend this base for your own control class. See
- * examples/custom-controls for an example of how to do this.
- *
- * @constructor
- * @extends {ol.Object}
- * @implements {oli.control.Control}
- * @param {olx.control.ControlOptions} options Control options.
- * @api stable
- */
-ol.control.Control = function(options) {
-
-  ol.Object.call(this);
-
-  /**
-   * @protected
-   * @type {Element}
-   */
-  this.element = options.element ? options.element : null;
-
-  /**
-   * @private
-   * @type {Element}
-   */
-  this.target_ = null;
-
-  /**
-   * @private
-   * @type {ol.Map}
-   */
-  this.map_ = null;
-
-  /**
-   * @protected
-   * @type {!Array.<ol.EventsKey>}
-   */
-  this.listenerKeys = [];
-
-  /**
-   * @type {function(ol.MapEvent)}
-   */
-  this.render = options.render ? options.render : ol.nullFunction;
-
-  if (options.target) {
-    this.setTarget(options.target);
-  }
-
-};
-ol.inherits(ol.control.Control, ol.Object);
-
-
-/**
- * @inheritDoc
- */
-ol.control.Control.prototype.disposeInternal = function() {
-  ol.dom.removeNode(this.element);
-  ol.Object.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * Get the map associated with this control.
- * @return {ol.Map} Map.
- * @api stable
- */
-ol.control.Control.prototype.getMap = function() {
-  return this.map_;
-};
-
-
-/**
- * Remove the control from its current map and attach it to the new map.
- * Subclasses may set up event handlers to get notified about changes to
- * the map here.
- * @param {ol.Map} map Map.
- * @api stable
- */
-ol.control.Control.prototype.setMap = function(map) {
-  if (this.map_) {
-    ol.dom.removeNode(this.element);
-  }
-  for (var i = 0, ii = this.listenerKeys.length; i < ii; ++i) {
-    ol.events.unlistenByKey(this.listenerKeys[i]);
-  }
-  this.listenerKeys.length = 0;
-  this.map_ = map;
-  if (this.map_) {
-    var target = this.target_ ?
-        this.target_ : map.getOverlayContainerStopEvent();
-    target.appendChild(this.element);
-    if (this.render !== ol.nullFunction) {
-      this.listenerKeys.push(ol.events.listen(map,
-          ol.MapEvent.Type.POSTRENDER, this.render, this));
-    }
-    map.render();
-  }
-};
-
-
-/**
- * This function is used to set a target element for the control. It has no
- * effect if it is called after the control has been added to the map (i.e.
- * after `setMap` is called on the control). If no `target` is set in the
- * options passed to the control constructor and if `setTarget` is not called
- * then the control is added to the map's overlay container.
- * @param {Element|string} target Target.
- * @api
- */
-ol.control.Control.prototype.setTarget = function(target) {
-  this.target_ = typeof target === 'string' ?
-    document.getElementById(target) :
-    target;
-};
-
-goog.provide('ol.css');
-
-
-/**
- * The CSS class for hidden feature.
- *
- * @const
- * @type {string}
- */
-ol.css.CLASS_HIDDEN = 'ol-hidden';
-
-
-/**
- * The CSS class that we'll give the DOM elements to have them unselectable.
- *
- * @const
- * @type {string}
- */
-ol.css.CLASS_UNSELECTABLE = 'ol-unselectable';
-
-
-/**
- * The CSS class for unsupported feature.
- *
- * @const
- * @type {string}
- */
-ol.css.CLASS_UNSUPPORTED = 'ol-unsupported';
-
-
-/**
- * The CSS class for controls.
- *
- * @const
- * @type {string}
- */
-ol.css.CLASS_CONTROL = 'ol-control';
-
-// FIXME handle date line wrap
-
-goog.provide('ol.control.Attribution');
-
-goog.require('ol');
-goog.require('ol.dom');
-goog.require('ol.control.Control');
-goog.require('ol.css');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.obj');
-
-
-/**
- * @classdesc
- * Control to show all the attributions associated with the layer sources
- * in the map. This control is one of the default controls included in maps.
- * By default it will show in the bottom right portion of the map, but this can
- * be changed by using a css selector for `.ol-attribution`.
- *
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.AttributionOptions=} opt_options Attribution options.
- * @api stable
- */
-ol.control.Attribution = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {Element}
-   */
-  this.ulElement_ = document.createElement('UL');
-
-  /**
-   * @private
-   * @type {Element}
-   */
-  this.logoLi_ = document.createElement('LI');
-
-  this.ulElement_.appendChild(this.logoLi_);
-  this.logoLi_.style.display = 'none';
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.collapsible_ = options.collapsible !== undefined ?
-      options.collapsible : true;
-
-  if (!this.collapsible_) {
-    this.collapsed_ = false;
-  }
-
-  var className = options.className !== undefined ? options.className : 'ol-attribution';
-
-  var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';
-
-  var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\u00BB';
-
-  if (typeof collapseLabel === 'string') {
-    /**
-     * @private
-     * @type {Node}
-     */
-    this.collapseLabel_ = document.createElement('span');
-    this.collapseLabel_.textContent = collapseLabel;
-  } else {
-    this.collapseLabel_ = collapseLabel;
-  }
-
-  var label = options.label !== undefined ? options.label : 'i';
-
-  if (typeof label === 'string') {
-    /**
-     * @private
-     * @type {Node}
-     */
-    this.label_ = document.createElement('span');
-    this.label_.textContent = label;
-  } else {
-    this.label_ = label;
-  }
-
-
-  var activeLabel = (this.collapsible_ && !this.collapsed_) ?
-      this.collapseLabel_ : this.label_;
-  var button = document.createElement('button');
-  button.setAttribute('type', 'button');
-  button.title = tipLabel;
-  button.appendChild(activeLabel);
-
-  ol.events.listen(button, ol.events.EventType.CLICK, this.handleClick_, this);
-
-  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
-      ol.css.CLASS_CONTROL +
-      (this.collapsed_ && this.collapsible_ ? ' ol-collapsed' : '') +
-      (this.collapsible_ ? '' : ' ol-uncollapsible');
-  var element = document.createElement('div');
-  element.className = cssClasses;
-  element.appendChild(this.ulElement_);
-  element.appendChild(button);
-
-  var render = options.render ? options.render : ol.control.Attribution.render;
-
-  ol.control.Control.call(this, {
-    element: element,
-    render: render,
-    target: options.target
-  });
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.renderedVisible_ = true;
-
-  /**
-   * @private
-   * @type {Object.<string, Element>}
-   */
-  this.attributionElements_ = {};
-
-  /**
-   * @private
-   * @type {Object.<string, boolean>}
-   */
-  this.attributionElementRenderedVisible_ = {};
-
-  /**
-   * @private
-   * @type {Object.<string, Element>}
-   */
-  this.logoElements_ = {};
-
-};
-ol.inherits(ol.control.Attribution, ol.control.Control);
-
-
-/**
- * @param {?olx.FrameState} frameState Frame state.
- * @return {Array.<Object.<string, ol.Attribution>>} Attributions.
- */
-ol.control.Attribution.prototype.getSourceAttributions = function(frameState) {
-  var i, ii, j, jj, tileRanges, source, sourceAttribution,
-      sourceAttributionKey, sourceAttributions, sourceKey;
-  var intersectsTileRange;
-  var layerStatesArray = frameState.layerStatesArray;
-  /** @type {Object.<string, ol.Attribution>} */
-  var attributions = ol.obj.assign({}, frameState.attributions);
-  /** @type {Object.<string, ol.Attribution>} */
-  var hiddenAttributions = {};
-  var projection = /** @type {!ol.proj.Projection} */ (frameState.viewState.projection);
-  for (i = 0, ii = layerStatesArray.length; i < ii; i++) {
-    source = layerStatesArray[i].layer.getSource();
-    if (!source) {
-      continue;
-    }
-    sourceKey = ol.getUid(source).toString();
-    sourceAttributions = source.getAttributions();
-    if (!sourceAttributions) {
-      continue;
-    }
-    for (j = 0, jj = sourceAttributions.length; j < jj; j++) {
-      sourceAttribution = sourceAttributions[j];
-      sourceAttributionKey = ol.getUid(sourceAttribution).toString();
-      if (sourceAttributionKey in attributions) {
-        continue;
-      }
-      tileRanges = frameState.usedTiles[sourceKey];
-      if (tileRanges) {
-        var tileGrid = /** @type {ol.source.Tile} */ (source).getTileGridForProjection(projection);
-        intersectsTileRange = sourceAttribution.intersectsAnyTileRange(
-            tileRanges, tileGrid, projection);
-      } else {
-        intersectsTileRange = false;
-      }
-      if (intersectsTileRange) {
-        if (sourceAttributionKey in hiddenAttributions) {
-          delete hiddenAttributions[sourceAttributionKey];
-        }
-        attributions[sourceAttributionKey] = sourceAttribution;
-      } else {
-        hiddenAttributions[sourceAttributionKey] = sourceAttribution;
-      }
-    }
-  }
-  return [attributions, hiddenAttributions];
-};
-
-
-/**
- * Update the attribution element.
- * @param {ol.MapEvent} mapEvent Map event.
- * @this {ol.control.Attribution}
- * @api
- */
-ol.control.Attribution.render = function(mapEvent) {
-  this.updateElement_(mapEvent.frameState);
-};
-
-
-/**
- * @private
- * @param {?olx.FrameState} frameState Frame state.
- */
-ol.control.Attribution.prototype.updateElement_ = function(frameState) {
-
-  if (!frameState) {
-    if (this.renderedVisible_) {
-      this.element.style.display = 'none';
-      this.renderedVisible_ = false;
-    }
-    return;
-  }
-
-  var attributions = this.getSourceAttributions(frameState);
-  /** @type {Object.<string, ol.Attribution>} */
-  var visibleAttributions = attributions[0];
-  /** @type {Object.<string, ol.Attribution>} */
-  var hiddenAttributions = attributions[1];
-
-  var attributionElement, attributionKey;
-  for (attributionKey in this.attributionElements_) {
-    if (attributionKey in visibleAttributions) {
-      if (!this.attributionElementRenderedVisible_[attributionKey]) {
-        this.attributionElements_[attributionKey].style.display = '';
-        this.attributionElementRenderedVisible_[attributionKey] = true;
-      }
-      delete visibleAttributions[attributionKey];
-    } else if (attributionKey in hiddenAttributions) {
-      if (this.attributionElementRenderedVisible_[attributionKey]) {
-        this.attributionElements_[attributionKey].style.display = 'none';
-        delete this.attributionElementRenderedVisible_[attributionKey];
-      }
-      delete hiddenAttributions[attributionKey];
-    } else {
-      ol.dom.removeNode(this.attributionElements_[attributionKey]);
-      delete this.attributionElements_[attributionKey];
-      delete this.attributionElementRenderedVisible_[attributionKey];
-    }
-  }
-  for (attributionKey in visibleAttributions) {
-    attributionElement = document.createElement('LI');
-    attributionElement.innerHTML =
-        visibleAttributions[attributionKey].getHTML();
-    this.ulElement_.appendChild(attributionElement);
-    this.attributionElements_[attributionKey] = attributionElement;
-    this.attributionElementRenderedVisible_[attributionKey] = true;
-  }
-  for (attributionKey in hiddenAttributions) {
-    attributionElement = document.createElement('LI');
-    attributionElement.innerHTML =
-        hiddenAttributions[attributionKey].getHTML();
-    attributionElement.style.display = 'none';
-    this.ulElement_.appendChild(attributionElement);
-    this.attributionElements_[attributionKey] = attributionElement;
-  }
-
-  var renderVisible =
-      !ol.obj.isEmpty(this.attributionElementRenderedVisible_) ||
-      !ol.obj.isEmpty(frameState.logos);
-  if (this.renderedVisible_ != renderVisible) {
-    this.element.style.display = renderVisible ? '' : 'none';
-    this.renderedVisible_ = renderVisible;
-  }
-  if (renderVisible &&
-      ol.obj.isEmpty(this.attributionElementRenderedVisible_)) {
-    this.element.classList.add('ol-logo-only');
-  } else {
-    this.element.classList.remove('ol-logo-only');
-  }
-
-  this.insertLogos_(frameState);
-
-};
-
-
-/**
- * @param {?olx.FrameState} frameState Frame state.
- * @private
- */
-ol.control.Attribution.prototype.insertLogos_ = function(frameState) {
-
-  var logo;
-  var logos = frameState.logos;
-  var logoElements = this.logoElements_;
-
-  for (logo in logoElements) {
-    if (!(logo in logos)) {
-      ol.dom.removeNode(logoElements[logo]);
-      delete logoElements[logo];
-    }
-  }
-
-  var image, logoElement, logoKey;
-  for (logoKey in logos) {
-    var logoValue = logos[logoKey];
-    if (logoValue instanceof HTMLElement) {
-      this.logoLi_.appendChild(logoValue);
-      logoElements[logoKey] = logoValue;
-    }
-    if (!(logoKey in logoElements)) {
-      image = new Image();
-      image.src = logoKey;
-      if (logoValue === '') {
-        logoElement = image;
-      } else {
-        logoElement = document.createElement('a');
-        logoElement.href = logoValue;
-        logoElement.appendChild(image);
-      }
-      this.logoLi_.appendChild(logoElement);
-      logoElements[logoKey] = logoElement;
-    }
-  }
-
-  this.logoLi_.style.display = !ol.obj.isEmpty(logos) ? '' : 'none';
-
-};
-
-
-/**
- * @param {Event} event The event to handle
- * @private
- */
-ol.control.Attribution.prototype.handleClick_ = function(event) {
-  event.preventDefault();
-  this.handleToggle_();
-};
-
-
-/**
- * @private
- */
-ol.control.Attribution.prototype.handleToggle_ = function() {
-  this.element.classList.toggle('ol-collapsed');
-  if (this.collapsed_) {
-    ol.dom.replaceNode(this.collapseLabel_, this.label_);
-  } else {
-    ol.dom.replaceNode(this.label_, this.collapseLabel_);
-  }
-  this.collapsed_ = !this.collapsed_;
-};
-
-
-/**
- * Return `true` if the attribution is collapsible, `false` otherwise.
- * @return {boolean} True if the widget is collapsible.
- * @api stable
- */
-ol.control.Attribution.prototype.getCollapsible = function() {
-  return this.collapsible_;
-};
-
-
-/**
- * Set whether the attribution should be collapsible.
- * @param {boolean} collapsible True if the widget is collapsible.
- * @api stable
- */
-ol.control.Attribution.prototype.setCollapsible = function(collapsible) {
-  if (this.collapsible_ === collapsible) {
-    return;
-  }
-  this.collapsible_ = collapsible;
-  this.element.classList.toggle('ol-uncollapsible');
-  if (!collapsible && this.collapsed_) {
-    this.handleToggle_();
-  }
-};
-
-
-/**
- * Collapse or expand the attribution according to the passed parameter. Will
- * not do anything if the attribution isn't collapsible or if the current
- * collapsed state is already the one requested.
- * @param {boolean} collapsed True if the widget is collapsed.
- * @api stable
- */
-ol.control.Attribution.prototype.setCollapsed = function(collapsed) {
-  if (!this.collapsible_ || this.collapsed_ === collapsed) {
-    return;
-  }
-  this.handleToggle_();
-};
-
-
-/**
- * Return `true` when the attribution is currently collapsed or `false`
- * otherwise.
- * @return {boolean} True if the widget is collapsed.
- * @api stable
- */
-ol.control.Attribution.prototype.getCollapsed = function() {
-  return this.collapsed_;
-};
-
-goog.provide('ol.control.FullScreen');
-
-goog.require('ol');
-goog.require('ol.control.Control');
-goog.require('ol.css');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-
-
-/**
- * @classdesc
- * Provides a button that when clicked fills up the full screen with the map.
- * The full screen source element is by default the element containing the map viewport unless
- * overriden by providing the `source` option. In which case, the dom
- * element introduced using this parameter will be displayed in full screen.
- *
- * When in full screen mode, a close button is shown to exit full screen mode.
- * The [Fullscreen API](http://www.w3.org/TR/fullscreen/) is used to
- * toggle the map in full screen mode.
- *
- *
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.FullScreenOptions=} opt_options Options.
- * @api stable
- */
-ol.control.FullScreen = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.cssClassName_ = options.className !== undefined ? options.className :
-      'ol-full-screen';
-
-  var label = options.label !== undefined ? options.label : '\u2922';
-
-  /**
-   * @private
-   * @type {Node}
-   */
-  this.labelNode_ = typeof label === 'string' ?
-      document.createTextNode(label) : label;
-
-  var labelActive = options.labelActive !== undefined ? options.labelActive : '\u00d7';
-
-  /**
-   * @private
-   * @type {Node}
-   */
-  this.labelActiveNode_ = typeof labelActive === 'string' ?
-      document.createTextNode(labelActive) : labelActive;
-
-  var tipLabel = options.tipLabel ? options.tipLabel : 'Toggle full-screen';
-  var button = document.createElement('button');
-  button.className = this.cssClassName_ + '-' + ol.control.FullScreen.isFullScreen();
-  button.setAttribute('type', 'button');
-  button.title = tipLabel;
-  button.appendChild(this.labelNode_);
-
-  ol.events.listen(button, ol.events.EventType.CLICK,
-      this.handleClick_, this);
-
-  var cssClasses = this.cssClassName_ + ' ' + ol.css.CLASS_UNSELECTABLE +
-      ' ' + ol.css.CLASS_CONTROL + ' ' +
-      (!ol.control.FullScreen.isFullScreenSupported() ? ol.css.CLASS_UNSUPPORTED : '');
-  var element = document.createElement('div');
-  element.className = cssClasses;
-  element.appendChild(button);
-
-  ol.control.Control.call(this, {
-    element: element,
-    target: options.target
-  });
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.keys_ = options.keys !== undefined ? options.keys : false;
-
-  /**
-   * @private
-   * @type {Element|string|undefined}
-   */
-  this.source_ = options.source;
-
-};
-ol.inherits(ol.control.FullScreen, ol.control.Control);
-
-
-/**
- * @param {Event} event The event to handle
- * @private
- */
-ol.control.FullScreen.prototype.handleClick_ = function(event) {
-  event.preventDefault();
-  this.handleFullScreen_();
-};
-
-
-/**
- * @private
- */
-ol.control.FullScreen.prototype.handleFullScreen_ = function() {
-  if (!ol.control.FullScreen.isFullScreenSupported()) {
-    return;
-  }
-  var map = this.getMap();
-  if (!map) {
-    return;
-  }
-  if (ol.control.FullScreen.isFullScreen()) {
-    ol.control.FullScreen.exitFullScreen();
-  } else {
-    var element;
-    if (this.source_) {
-      element = typeof this.source_ === 'string' ?
-        document.getElementById(this.source_) :
-        this.source_;
-    } else {
-      element = map.getTargetElement();
-    }
-    if (this.keys_) {
-      ol.control.FullScreen.requestFullScreenWithKeys(element);
-
-    } else {
-      ol.control.FullScreen.requestFullScreen(element);
-    }
-  }
-};
-
-
-/**
- * @private
- */
-ol.control.FullScreen.prototype.handleFullScreenChange_ = function() {
-  var button = this.element.firstElementChild;
-  var map = this.getMap();
-  if (ol.control.FullScreen.isFullScreen()) {
-    button.className = this.cssClassName_ + '-true';
-    ol.dom.replaceNode(this.labelActiveNode_, this.labelNode_);
-  } else {
-    button.className = this.cssClassName_ + '-false';
-    ol.dom.replaceNode(this.labelNode_, this.labelActiveNode_);
-  }
-  if (map) {
-    map.updateSize();
-  }
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.control.FullScreen.prototype.setMap = function(map) {
-  ol.control.Control.prototype.setMap.call(this, map);
-  if (map) {
-    this.listenerKeys.push(ol.events.listen(document,
-        ol.control.FullScreen.getChangeType_(),
-        this.handleFullScreenChange_, this)
-    );
-  }
-};
-
-/**
- * @return {boolean} Fullscreen is supported by the current platform.
- */
-ol.control.FullScreen.isFullScreenSupported = function() {
-  var body = document.body;
-  return !!(
-    body.webkitRequestFullscreen ||
-    (body.mozRequestFullScreen && document.mozFullScreenEnabled) ||
-    (body.msRequestFullscreen && document.msFullscreenEnabled) ||
-    (body.requestFullscreen && document.fullscreenEnabled)
-  );
-};
-
-/**
- * @return {boolean} Element is currently in fullscreen.
- */
-ol.control.FullScreen.isFullScreen = function() {
-  return !!(
-    document.webkitIsFullScreen || document.mozFullScreen ||
-    document.msFullscreenElement || document.fullscreenElement
-  );
-};
-
-/**
- * Request to fullscreen an element.
- * @param {Node} element Element to request fullscreen
- */
-ol.control.FullScreen.requestFullScreen = function(element) {
-  if (element.requestFullscreen) {
-    element.requestFullscreen();
-  } else if (element.msRequestFullscreen) {
-    element.msRequestFullscreen();
-  } else if (element.mozRequestFullScreen) {
-    element.mozRequestFullScreen();
-  } else if (element.webkitRequestFullscreen) {
-    element.webkitRequestFullscreen();
-  }
-};
-
-/**
- * Request to fullscreen an element with keyboard input.
- * @param {Node} element Element to request fullscreen
- */
-ol.control.FullScreen.requestFullScreenWithKeys = function(element) {
-  if (element.mozRequestFullScreenWithKeys) {
-    element.mozRequestFullScreenWithKeys();
-  } else if (element.webkitRequestFullscreen) {
-    element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);
-  } else {
-    ol.control.FullScreen.requestFullScreen(element);
-  }
-};
-
-/**
- * Exit fullscreen.
- */
-ol.control.FullScreen.exitFullScreen = function() {
-  if (document.exitFullscreen) {
-    document.exitFullscreen();
-  } else if (document.msExitFullscreen) {
-    document.msExitFullscreen();
-  } else if (document.mozCancelFullScreen) {
-    document.mozCancelFullScreen();
-  } else if (document.webkitExitFullscreen) {
-    document.webkitExitFullscreen();
-  }
-};
-
-/**
- * @return {string} Change type.
- * @private
- */
-ol.control.FullScreen.getChangeType_ = (function() {
-  var changeType;
-  return function() {
-    if (!changeType) {
-      var body = document.body;
-      if (body.webkitRequestFullscreen) {
-        changeType = 'webkitfullscreenchange';
-      } else if (body.mozRequestFullScreen) {
-        changeType = 'mozfullscreenchange';
-      } else if (body.msRequestFullscreen) {
-        changeType = 'MSFullscreenChange';
-      } else if (body.requestFullscreen) {
-        changeType = 'fullscreenchange';
-      }
-    }
-    return changeType;
-  };
-})();
-
-goog.provide('ol.control.Rotate');
-
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol');
-goog.require('ol.animation');
-goog.require('ol.control.Control');
-goog.require('ol.css');
-goog.require('ol.easing');
-
-
-/**
- * @classdesc
- * A button control to reset rotation to 0.
- * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css
- * selector is added to the button when the rotation is 0.
- *
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.RotateOptions=} opt_options Rotate options.
- * @api stable
- */
-ol.control.Rotate = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  var className = options.className !== undefined ? options.className : 'ol-rotate';
-
-  var label = options.label !== undefined ? options.label : '\u21E7';
-
-  /**
-   * @type {Element}
-   * @private
-   */
-  this.label_ = null;
-
-  if (typeof label === 'string') {
-    this.label_ = document.createElement('span');
-    this.label_.className = 'ol-compass';
-    this.label_.textContent = label;
-  } else {
-    this.label_ = label;
-    this.label_.classList.add('ol-compass');
-  }
-
-  var tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';
-
-  var button = document.createElement('button');
-  button.className = className + '-reset';
-  button.setAttribute('type', 'button');
-  button.title = tipLabel;
-  button.appendChild(this.label_);
-
-  ol.events.listen(button, ol.events.EventType.CLICK,
-      ol.control.Rotate.prototype.handleClick_, this);
-
-  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
-      ol.css.CLASS_CONTROL;
-  var element = document.createElement('div');
-  element.className = cssClasses;
-  element.appendChild(button);
-
-  var render = options.render ? options.render : ol.control.Rotate.render;
-
-  this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;
-
-  ol.control.Control.call(this, {
-    element: element,
-    render: render,
-    target: options.target
-  });
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 250;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.rotation_ = undefined;
-
-  if (this.autoHide_) {
-    this.element.classList.add(ol.css.CLASS_HIDDEN);
-  }
-
-};
-ol.inherits(ol.control.Rotate, ol.control.Control);
-
-
-/**
- * @param {Event} event The event to handle
- * @private
- */
-ol.control.Rotate.prototype.handleClick_ = function(event) {
-  event.preventDefault();
-  if (this.callResetNorth_ !== undefined) {
-    this.callResetNorth_();
-  } else {
-    this.resetNorth_();
-  }
-};
-
-
-/**
- * @private
- */
-ol.control.Rotate.prototype.resetNorth_ = function() {
-  var map = this.getMap();
-  var view = map.getView();
-  if (!view) {
-    // the map does not have a view, so we can't act
-    // upon it
-    return;
-  }
-  var currentRotation = view.getRotation();
-  if (currentRotation !== undefined) {
-    if (this.duration_ > 0) {
-      currentRotation = currentRotation % (2 * Math.PI);
-      if (currentRotation < -Math.PI) {
-        currentRotation += 2 * Math.PI;
-      }
-      if (currentRotation > Math.PI) {
-        currentRotation -= 2 * Math.PI;
-      }
-      map.beforeRender(ol.animation.rotate({
-        rotation: currentRotation,
-        duration: this.duration_,
-        easing: ol.easing.easeOut
-      }));
-    }
-    view.setRotation(0);
-  }
-};
-
-
-/**
- * Update the rotate control element.
- * @param {ol.MapEvent} mapEvent Map event.
- * @this {ol.control.Rotate}
- * @api
- */
-ol.control.Rotate.render = function(mapEvent) {
-  var frameState = mapEvent.frameState;
-  if (!frameState) {
-    return;
-  }
-  var rotation = frameState.viewState.rotation;
-  if (rotation != this.rotation_) {
-    var transform = 'rotate(' + rotation + 'rad)';
-    if (this.autoHide_) {
-      var contains = this.element.classList.contains(ol.css.CLASS_HIDDEN);
-      if (!contains && rotation === 0) {
-        this.element.classList.add(ol.css.CLASS_HIDDEN);
-      } else if (contains && rotation !== 0) {
-        this.element.classList.remove(ol.css.CLASS_HIDDEN);
-      }
-    }
-    this.label_.style.msTransform = transform;
-    this.label_.style.webkitTransform = transform;
-    this.label_.style.transform = transform;
-  }
-  this.rotation_ = rotation;
-};
-
-goog.provide('ol.control.Zoom');
-
-goog.require('ol');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.animation');
-goog.require('ol.control.Control');
-goog.require('ol.css');
-goog.require('ol.easing');
-
-
-/**
- * @classdesc
- * A control with 2 buttons, one for zoom in and one for zoom out.
- * This control is one of the default controls of a map. To style this control
- * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.
- *
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.ZoomOptions=} opt_options Zoom options.
- * @api stable
- */
-ol.control.Zoom = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  var className = options.className !== undefined ? options.className : 'ol-zoom';
-
-  var delta = options.delta !== undefined ? options.delta : 1;
-
-  var zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';
-  var zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\u2212';
-
-  var zoomInTipLabel = options.zoomInTipLabel !== undefined ?
-      options.zoomInTipLabel : 'Zoom in';
-  var zoomOutTipLabel = options.zoomOutTipLabel !== undefined ?
-      options.zoomOutTipLabel : 'Zoom out';
-
-  var inElement = document.createElement('button');
-  inElement.className = className + '-in';
-  inElement.setAttribute('type', 'button');
-  inElement.title = zoomInTipLabel;
-  inElement.appendChild(
-    typeof zoomInLabel === 'string' ? document.createTextNode(zoomInLabel) : zoomInLabel
-  );
-
-  ol.events.listen(inElement, ol.events.EventType.CLICK,
-      ol.control.Zoom.prototype.handleClick_.bind(this, delta));
-
-  var outElement = document.createElement('button');
-  outElement.className = className + '-out';
-  outElement.setAttribute('type', 'button');
-  outElement.title = zoomOutTipLabel;
-  outElement.appendChild(
-    typeof zoomOutLabel === 'string' ? document.createTextNode(zoomOutLabel) : zoomOutLabel
-  );
-
-  ol.events.listen(outElement, ol.events.EventType.CLICK,
-      ol.control.Zoom.prototype.handleClick_.bind(this, -delta));
-
-  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
-      ol.css.CLASS_CONTROL;
-  var element = document.createElement('div');
-  element.className = cssClasses;
-  element.appendChild(inElement);
-  element.appendChild(outElement);
-
-  ol.control.Control.call(this, {
-    element: element,
-    target: options.target
-  });
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 250;
-
-};
-ol.inherits(ol.control.Zoom, ol.control.Control);
-
-
-/**
- * @param {number} delta Zoom delta.
- * @param {Event} event The event to handle
- * @private
- */
-ol.control.Zoom.prototype.handleClick_ = function(delta, event) {
-  event.preventDefault();
-  this.zoomByDelta_(delta);
-};
-
-
-/**
- * @param {number} delta Zoom delta.
- * @private
- */
-ol.control.Zoom.prototype.zoomByDelta_ = function(delta) {
-  var map = this.getMap();
-  var view = map.getView();
-  if (!view) {
-    // the map does not have a view, so we can't act
-    // upon it
-    return;
-  }
-  var currentResolution = view.getResolution();
-  if (currentResolution) {
-    if (this.duration_ > 0) {
-      map.beforeRender(ol.animation.zoom({
-        resolution: currentResolution,
-        duration: this.duration_,
-        easing: ol.easing.easeOut
-      }));
-    }
-    var newResolution = view.constrainResolution(currentResolution, delta);
-    view.setResolution(newResolution);
-  }
-};
-
-goog.provide('ol.control');
-
-goog.require('ol');
-goog.require('ol.Collection');
-goog.require('ol.control.Attribution');
-goog.require('ol.control.Rotate');
-goog.require('ol.control.Zoom');
-
-
-/**
- * Set of controls included in maps by default. Unless configured otherwise,
- * this returns a collection containing an instance of each of the following
- * controls:
- * * {@link ol.control.Zoom}
- * * {@link ol.control.Rotate}
- * * {@link ol.control.Attribution}
- *
- * @param {olx.control.DefaultsOptions=} opt_options Defaults options.
- * @return {ol.Collection.<ol.control.Control>} Controls.
- * @api stable
- */
-ol.control.defaults = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  var controls = new ol.Collection();
-
-  var zoomControl = options.zoom !== undefined ? options.zoom : true;
-  if (zoomControl) {
-    controls.push(new ol.control.Zoom(options.zoomOptions));
-  }
-
-  var rotateControl = options.rotate !== undefined ? options.rotate : true;
-  if (rotateControl) {
-    controls.push(new ol.control.Rotate(options.rotateOptions));
-  }
-
-  var attributionControl = options.attribution !== undefined ?
-      options.attribution : true;
-  if (attributionControl) {
-    controls.push(new ol.control.Attribution(options.attributionOptions));
-  }
-
-  return controls;
-
-};
-
-// FIXME should listen on appropriate pane, once it is defined
-
-goog.provide('ol.control.MousePosition');
-
-goog.require('ol');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.Object');
-goog.require('ol.control.Control');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * A control to show the 2D coordinates of the mouse cursor. By default, these
- * are in the view projection, but can be in any supported projection.
- * By default the control is shown in the top right corner of the map, but this
- * can be changed by using the css selector `.ol-mouse-position`.
- *
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.MousePositionOptions=} opt_options Mouse position
- *     options.
- * @api stable
- */
-ol.control.MousePosition = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  var element = document.createElement('DIV');
-  element.className = options.className !== undefined ? options.className : 'ol-mouse-position';
-
-  var render = options.render ?
-      options.render : ol.control.MousePosition.render;
-
-  ol.control.Control.call(this, {
-    element: element,
-    render: render,
-    target: options.target
-  });
-
-  ol.events.listen(this,
-      ol.Object.getChangeEventType(ol.control.MousePosition.Property.PROJECTION),
-      this.handleProjectionChanged_, this);
-
-  if (options.coordinateFormat) {
-    this.setCoordinateFormat(options.coordinateFormat);
-  }
-  if (options.projection) {
-    this.setProjection(ol.proj.get(options.projection));
-  }
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.undefinedHTML_ = options.undefinedHTML !== undefined ? options.undefinedHTML : '';
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.renderedHTML_ = element.innerHTML;
-
-  /**
-   * @private
-   * @type {ol.proj.Projection}
-   */
-  this.mapProjection_ = null;
-
-  /**
-   * @private
-   * @type {?ol.TransformFunction}
-   */
-  this.transform_ = null;
-
-  /**
-   * @private
-   * @type {ol.Pixel}
-   */
-  this.lastMouseMovePixel_ = null;
-
-};
-ol.inherits(ol.control.MousePosition, ol.control.Control);
-
-
-/**
- * Update the mouseposition element.
- * @param {ol.MapEvent} mapEvent Map event.
- * @this {ol.control.MousePosition}
- * @api
- */
-ol.control.MousePosition.render = function(mapEvent) {
-  var frameState = mapEvent.frameState;
-  if (!frameState) {
-    this.mapProjection_ = null;
-  } else {
-    if (this.mapProjection_ != frameState.viewState.projection) {
-      this.mapProjection_ = frameState.viewState.projection;
-      this.transform_ = null;
-    }
-  }
-  this.updateHTML_(this.lastMouseMovePixel_);
-};
-
-
-/**
- * @private
- */
-ol.control.MousePosition.prototype.handleProjectionChanged_ = function() {
-  this.transform_ = null;
-};
-
-
-/**
- * Return the coordinate format type used to render the current position or
- * undefined.
- * @return {ol.CoordinateFormatType|undefined} The format to render the current
- *     position in.
- * @observable
- * @api stable
- */
-ol.control.MousePosition.prototype.getCoordinateFormat = function() {
-  return /** @type {ol.CoordinateFormatType|undefined} */ (
-      this.get(ol.control.MousePosition.Property.COORDINATE_FORMAT));
-};
-
-
-/**
- * Return the projection that is used to report the mouse position.
- * @return {ol.proj.Projection|undefined} The projection to report mouse
- *     position in.
- * @observable
- * @api stable
- */
-ol.control.MousePosition.prototype.getProjection = function() {
-  return /** @type {ol.proj.Projection|undefined} */ (
-      this.get(ol.control.MousePosition.Property.PROJECTION));
-};
-
-
-/**
- * @param {Event} event Browser event.
- * @protected
- */
-ol.control.MousePosition.prototype.handleMouseMove = function(event) {
-  var map = this.getMap();
-  this.lastMouseMovePixel_ = map.getEventPixel(event);
-  this.updateHTML_(this.lastMouseMovePixel_);
-};
-
-
-/**
- * @param {Event} event Browser event.
- * @protected
- */
-ol.control.MousePosition.prototype.handleMouseOut = function(event) {
-  this.updateHTML_(null);
-  this.lastMouseMovePixel_ = null;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.control.MousePosition.prototype.setMap = function(map) {
-  ol.control.Control.prototype.setMap.call(this, map);
-  if (map) {
-    var viewport = map.getViewport();
-    this.listenerKeys.push(
-        ol.events.listen(viewport, ol.events.EventType.MOUSEMOVE,
-            this.handleMouseMove, this),
-        ol.events.listen(viewport, ol.events.EventType.MOUSEOUT,
-            this.handleMouseOut, this)
-    );
-  }
-};
-
-
-/**
- * Set the coordinate format type used to render the current position.
- * @param {ol.CoordinateFormatType} format The format to render the current
- *     position in.
- * @observable
- * @api stable
- */
-ol.control.MousePosition.prototype.setCoordinateFormat = function(format) {
-  this.set(ol.control.MousePosition.Property.COORDINATE_FORMAT, format);
-};
-
-
-/**
- * Set the projection that is used to report the mouse position.
- * @param {ol.proj.Projection} projection The projection to report mouse
- *     position in.
- * @observable
- * @api stable
- */
-ol.control.MousePosition.prototype.setProjection = function(projection) {
-  this.set(ol.control.MousePosition.Property.PROJECTION, projection);
-};
-
-
-/**
- * @param {?ol.Pixel} pixel Pixel.
- * @private
- */
-ol.control.MousePosition.prototype.updateHTML_ = function(pixel) {
-  var html = this.undefinedHTML_;
-  if (pixel && this.mapProjection_) {
-    if (!this.transform_) {
-      var projection = this.getProjection();
-      if (projection) {
-        this.transform_ = ol.proj.getTransformFromProjections(
-            this.mapProjection_, projection);
-      } else {
-        this.transform_ = ol.proj.identityTransform;
-      }
-    }
-    var map = this.getMap();
-    var coordinate = map.getCoordinateFromPixel(pixel);
-    if (coordinate) {
-      this.transform_(coordinate, coordinate);
-      var coordinateFormat = this.getCoordinateFormat();
-      if (coordinateFormat) {
-        html = coordinateFormat(coordinate);
-      } else {
-        html = coordinate.toString();
-      }
-    }
-  }
-  if (!this.renderedHTML_ || html != this.renderedHTML_) {
-    this.element.innerHTML = html;
-    this.renderedHTML_ = html;
-  }
-};
-
-
-/**
- * @enum {string}
- */
-ol.control.MousePosition.Property = {
-  PROJECTION: 'projection',
-  COORDINATE_FORMAT: 'coordinateFormat'
-};
-
-goog.provide('ol.pointer.EventType');
-
-
-/**
- * Constants for event names.
- * @enum {string}
- */
-ol.pointer.EventType = {
-  POINTERMOVE: 'pointermove',
-  POINTERDOWN: 'pointerdown',
-  POINTERUP: 'pointerup',
-  POINTEROVER: 'pointerover',
-  POINTEROUT: 'pointerout',
-  POINTERENTER: 'pointerenter',
-  POINTERLEAVE: 'pointerleave',
-  POINTERCANCEL: 'pointercancel'
-};
-
-goog.provide('ol.webgl');
-
-
-/** Constants taken from goog.webgl
- */
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.ONE = 1;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.SRC_ALPHA = 0x0302;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.COLOR_ATTACHMENT0 = 0x8CE0;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.COLOR_BUFFER_BIT = 0x00004000;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.TRIANGLES = 0x0004;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.TRIANGLE_STRIP = 0x0005;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.ONE_MINUS_SRC_ALPHA = 0x0303;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.ARRAY_BUFFER = 0x8892;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.ELEMENT_ARRAY_BUFFER = 0x8893;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.STREAM_DRAW = 0x88E0;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.STATIC_DRAW = 0x88E4;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.DYNAMIC_DRAW = 0x88E8;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.CULL_FACE = 0x0B44;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.BLEND = 0x0BE2;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.STENCIL_TEST = 0x0B90;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.DEPTH_TEST = 0x0B71;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.SCISSOR_TEST = 0x0C11;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.UNSIGNED_BYTE = 0x1401;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.UNSIGNED_SHORT = 0x1403;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.UNSIGNED_INT = 0x1405;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.FLOAT = 0x1406;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.RGBA = 0x1908;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.FRAGMENT_SHADER = 0x8B30;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.VERTEX_SHADER = 0x8B31;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.LINK_STATUS = 0x8B82;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.LINEAR = 0x2601;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.TEXTURE_MAG_FILTER = 0x2800;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.TEXTURE_MIN_FILTER = 0x2801;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.TEXTURE_WRAP_S = 0x2802;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.TEXTURE_WRAP_T = 0x2803;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.TEXTURE_2D = 0x0DE1;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.TEXTURE0 = 0x84C0;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.CLAMP_TO_EDGE = 0x812F;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.COMPILE_STATUS = 0x8B81;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.webgl.FRAMEBUFFER = 0x8D40;
-
-
-/** end of goog.webgl constants
- */
-
-
-/**
- * @const
- * @private
- * @type {Array.<string>}
- */
-ol.webgl.CONTEXT_IDS_ = [
-  'experimental-webgl',
-  'webgl',
-  'webkit-3d',
-  'moz-webgl'
-];
-
-
-/**
- * @param {HTMLCanvasElement} canvas Canvas.
- * @param {Object=} opt_attributes Attributes.
- * @return {WebGLRenderingContext} WebGL rendering context.
- */
-ol.webgl.getContext = function(canvas, opt_attributes) {
-  var context, i, ii = ol.webgl.CONTEXT_IDS_.length;
-  for (i = 0; i < ii; ++i) {
-    try {
-      context = canvas.getContext(ol.webgl.CONTEXT_IDS_[i], opt_attributes);
-      if (context) {
-        return /** @type {!WebGLRenderingContext} */ (context);
-      }
-    } catch (e) {
-      // pass
-    }
-  }
-  return null;
-};
-
-goog.provide('ol.has');
-
-goog.require('ol');
-goog.require('ol.webgl');
-
-var ua = typeof navigator !== 'undefined' ?
-    navigator.userAgent.toLowerCase() : '';
-
-/**
- * User agent string says we are dealing with Firefox as browser.
- * @type {boolean}
- */
-ol.has.FIREFOX = ua.indexOf('firefox') !== -1;
-
-/**
- * User agent string says we are dealing with Safari as browser.
- * @type {boolean}
- */
-ol.has.SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;
-
-/**
- * User agent string says we are dealing with a WebKit engine.
- * @type {boolean}
- */
-ol.has.WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;
-
-/**
- * User agent string says we are dealing with a Mac as platform.
- * @type {boolean}
- */
-ol.has.MAC = ua.indexOf('macintosh') !== -1;
-
-
-/**
- * The ratio between physical pixels and device-independent pixels
- * (dips) on the device (`window.devicePixelRatio`).
- * @const
- * @type {number}
- * @api stable
- */
-ol.has.DEVICE_PIXEL_RATIO = window.devicePixelRatio || 1;
-
-
-/**
- * True if the browser's Canvas implementation implements {get,set}LineDash.
- * @type {boolean}
- */
-ol.has.CANVAS_LINE_DASH = false;
-
-
-/**
- * True if both the library and browser support Canvas.  Always `false`
- * if `ol.ENABLE_CANVAS` is set to `false` at compile time.
- * @const
- * @type {boolean}
- * @api stable
- */
-ol.has.CANVAS = ol.ENABLE_CANVAS && (
-    /**
-     * @return {boolean} Canvas supported.
-     */
-    function() {
-      if (!('HTMLCanvasElement' in window)) {
-        return false;
-      }
-      try {
-        var context = document.createElement('CANVAS').getContext('2d');
-        if (!context) {
-          return false;
-        } else {
-          if (context.setLineDash !== undefined) {
-            ol.has.CANVAS_LINE_DASH = true;
-          }
-          return true;
-        }
-      } catch (e) {
-        return false;
-      }
-    })();
-
-
-/**
- * Indicates if DeviceOrientation is supported in the user's browser.
- * @const
- * @type {boolean}
- * @api stable
- */
-ol.has.DEVICE_ORIENTATION = 'DeviceOrientationEvent' in window;
-
-
-/**
- * Is HTML5 geolocation supported in the current browser?
- * @const
- * @type {boolean}
- * @api stable
- */
-ol.has.GEOLOCATION = 'geolocation' in navigator;
-
-
-/**
- * True if browser supports touch events.
- * @const
- * @type {boolean}
- * @api stable
- */
-ol.has.TOUCH = ol.ASSUME_TOUCH || 'ontouchstart' in window;
-
-
-/**
- * True if browser supports pointer events.
- * @const
- * @type {boolean}
- */
-ol.has.POINTER = 'PointerEvent' in window;
-
-
-/**
- * True if browser supports ms pointer events (IE 10).
- * @const
- * @type {boolean}
- */
-ol.has.MSPOINTER = !!(navigator.msPointerEnabled);
-
-
-/**
- * True if both OpenLayers and browser support WebGL.  Always `false`
- * if `ol.ENABLE_WEBGL` is set to `false` at compile time.
- * @const
- * @type {boolean}
- * @api stable
- */
-ol.has.WEBGL;
-
-
-(function() {
-  if (ol.ENABLE_WEBGL) {
-    var hasWebGL = false;
-    var textureSize;
-    var /** @type {Array.<string>} */ extensions = [];
-
-    if ('WebGLRenderingContext' in window) {
-      try {
-        var canvas = /** @type {HTMLCanvasElement} */
-            (document.createElement('CANVAS'));
-        var gl = ol.webgl.getContext(canvas, {
-          failIfMajorPerformanceCaveat: true
-        });
-        if (gl) {
-          hasWebGL = true;
-          textureSize = /** @type {number} */
-              (gl.getParameter(gl.MAX_TEXTURE_SIZE));
-          extensions = gl.getSupportedExtensions();
-        }
-      } catch (e) {
-        // pass
-      }
-    }
-    ol.has.WEBGL = hasWebGL;
-    ol.WEBGL_EXTENSIONS = extensions;
-    ol.WEBGL_MAX_TEXTURE_SIZE = textureSize;
-  }
-})();
-
-goog.provide('ol.pointer.EventSource');
-
-
-/**
- * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.
- * @param {!Object.<string, function(Event)>} mapping Event
- *     mapping.
- * @constructor
- */
-ol.pointer.EventSource = function(dispatcher, mapping) {
-  /**
-   * @type {ol.pointer.PointerEventHandler}
-   */
-  this.dispatcher = dispatcher;
-
-  /**
-   * @private
-   * @const
-   * @type {!Object.<string, function(Event)>}
-   */
-  this.mapping_ = mapping;
-};
-
-
-/**
- * List of events supported by this source.
- * @return {Array.<string>} Event names
- */
-ol.pointer.EventSource.prototype.getEvents = function() {
-  return Object.keys(this.mapping_);
-};
-
-
-/**
- * Returns a mapping between the supported event types and
- * the handlers that should handle an event.
- * @return {Object.<string, function(Event)>}
- *         Event/Handler mapping
- */
-ol.pointer.EventSource.prototype.getMapping = function() {
-  return this.mapping_;
-};
-
-
-/**
- * Returns the handler that should handle a given event type.
- * @param {string} eventType The event type.
- * @return {function(Event)} Handler
- */
-ol.pointer.EventSource.prototype.getHandlerForEvent = function(eventType) {
-  return this.mapping_[eventType];
-};
-
-// Based on https://github.com/Polymer/PointerEvents
-
-// Copyright (c) 2013 The Polymer Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-goog.provide('ol.pointer.MouseSource');
-
-goog.require('ol');
-goog.require('ol.pointer.EventSource');
-
-
-/**
- * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.
- * @constructor
- * @extends {ol.pointer.EventSource}
- */
-ol.pointer.MouseSource = function(dispatcher) {
-  var mapping = {
-    'mousedown': this.mousedown,
-    'mousemove': this.mousemove,
-    'mouseup': this.mouseup,
-    'mouseover': this.mouseover,
-    'mouseout': this.mouseout
-  };
-  ol.pointer.EventSource.call(this, dispatcher, mapping);
-
-  /**
-   * @const
-   * @type {!Object.<string, Event|Object>}
-   */
-  this.pointerMap = dispatcher.pointerMap;
-
-  /**
-   * @const
-   * @type {Array.<ol.Pixel>}
-   */
-  this.lastTouches = [];
-};
-ol.inherits(ol.pointer.MouseSource, ol.pointer.EventSource);
-
-
-/**
- * @const
- * @type {number}
- */
-ol.pointer.MouseSource.POINTER_ID = 1;
-
-
-/**
- * @const
- * @type {string}
- */
-ol.pointer.MouseSource.POINTER_TYPE = 'mouse';
-
-
-/**
- * Radius around touchend that swallows mouse events.
- *
- * @const
- * @type {number}
- */
-ol.pointer.MouseSource.DEDUP_DIST = 25;
-
-
-/**
- * Detect if a mouse event was simulated from a touch by
- * checking if previously there was a touch event at the
- * same position.
- *
- * FIXME - Known problem with the native Android browser on
- * Samsung GT-I9100 (Android 4.1.2):
- * In case the page is scrolled, this function does not work
- * correctly when a canvas is used (WebGL or canvas renderer).
- * Mouse listeners on canvas elements (for this browser), create
- * two mouse events: One 'good' and one 'bad' one (on other browsers or
- * when a div is used, there is only one event). For the 'bad' one,
- * clientX/clientY and also pageX/pageY are wrong when the page
- * is scrolled. Because of that, this function can not detect if
- * the events were simulated from a touch event. As result, a
- * pointer event at a wrong position is dispatched, which confuses
- * the map interactions.
- * It is unclear, how one can get the correct position for the event
- * or detect that the positions are invalid.
- *
- * @private
- * @param {Event} inEvent The in event.
- * @return {boolean} True, if the event was generated by a touch.
- */
-ol.pointer.MouseSource.prototype.isEventSimulatedFromTouch_ = function(inEvent) {
-  var lts = this.lastTouches;
-  var x = inEvent.clientX, y = inEvent.clientY;
-  for (var i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {
-    // simulated mouse events will be swallowed near a primary touchend
-    var dx = Math.abs(x - t[0]), dy = Math.abs(y - t[1]);
-    if (dx <= ol.pointer.MouseSource.DEDUP_DIST &&
-        dy <= ol.pointer.MouseSource.DEDUP_DIST) {
-      return true;
-    }
-  }
-  return false;
-};
-
-
-/**
- * Creates a copy of the original event that will be used
- * for the fake pointer event.
- *
- * @param {Event} inEvent The in event.
- * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.
- * @return {Object} The copied event.
- */
-ol.pointer.MouseSource.prepareEvent = function(inEvent, dispatcher) {
-  var e = dispatcher.cloneEvent(inEvent, inEvent);
-
-  // forward mouse preventDefault
-  var pd = e.preventDefault;
-  e.preventDefault = function() {
-    inEvent.preventDefault();
-    pd();
-  };
-
-  e.pointerId = ol.pointer.MouseSource.POINTER_ID;
-  e.isPrimary = true;
-  e.pointerType = ol.pointer.MouseSource.POINTER_TYPE;
-
-  return e;
-};
-
-
-/**
- * Handler for `mousedown`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MouseSource.prototype.mousedown = function(inEvent) {
-  if (!this.isEventSimulatedFromTouch_(inEvent)) {
-    // TODO(dfreedman) workaround for some elements not sending mouseup
-    // http://crbug/149091
-    if (ol.pointer.MouseSource.POINTER_ID.toString() in this.pointerMap) {
-      this.cancel(inEvent);
-    }
-    var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
-    this.pointerMap[ol.pointer.MouseSource.POINTER_ID.toString()] = inEvent;
-    this.dispatcher.down(e, inEvent);
-  }
-};
-
-
-/**
- * Handler for `mousemove`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MouseSource.prototype.mousemove = function(inEvent) {
-  if (!this.isEventSimulatedFromTouch_(inEvent)) {
-    var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
-    this.dispatcher.move(e, inEvent);
-  }
-};
-
-
-/**
- * Handler for `mouseup`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MouseSource.prototype.mouseup = function(inEvent) {
-  if (!this.isEventSimulatedFromTouch_(inEvent)) {
-    var p = this.pointerMap[ol.pointer.MouseSource.POINTER_ID.toString()];
-
-    if (p && p.button === inEvent.button) {
-      var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
-      this.dispatcher.up(e, inEvent);
-      this.cleanupMouse();
-    }
-  }
-};
-
-
-/**
- * Handler for `mouseover`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MouseSource.prototype.mouseover = function(inEvent) {
-  if (!this.isEventSimulatedFromTouch_(inEvent)) {
-    var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
-    this.dispatcher.enterOver(e, inEvent);
-  }
-};
-
-
-/**
- * Handler for `mouseout`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MouseSource.prototype.mouseout = function(inEvent) {
-  if (!this.isEventSimulatedFromTouch_(inEvent)) {
-    var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
-    this.dispatcher.leaveOut(e, inEvent);
-  }
-};
-
-
-/**
- * Dispatches a `pointercancel` event.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MouseSource.prototype.cancel = function(inEvent) {
-  var e = ol.pointer.MouseSource.prepareEvent(inEvent, this.dispatcher);
-  this.dispatcher.cancel(e, inEvent);
-  this.cleanupMouse();
-};
-
-
-/**
- * Remove the mouse from the list of active pointers.
- */
-ol.pointer.MouseSource.prototype.cleanupMouse = function() {
-  delete this.pointerMap[ol.pointer.MouseSource.POINTER_ID.toString()];
-};
-
-// Based on https://github.com/Polymer/PointerEvents
-
-// Copyright (c) 2013 The Polymer Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-goog.provide('ol.pointer.MsSource');
-
-goog.require('ol');
-goog.require('ol.pointer.EventSource');
-
-
-/**
- * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.
- * @constructor
- * @extends {ol.pointer.EventSource}
- */
-ol.pointer.MsSource = function(dispatcher) {
-  var mapping = {
-    'MSPointerDown': this.msPointerDown,
-    'MSPointerMove': this.msPointerMove,
-    'MSPointerUp': this.msPointerUp,
-    'MSPointerOut': this.msPointerOut,
-    'MSPointerOver': this.msPointerOver,
-    'MSPointerCancel': this.msPointerCancel,
-    'MSGotPointerCapture': this.msGotPointerCapture,
-    'MSLostPointerCapture': this.msLostPointerCapture
-  };
-  ol.pointer.EventSource.call(this, dispatcher, mapping);
-
-  /**
-   * @const
-   * @type {!Object.<string, Event|Object>}
-   */
-  this.pointerMap = dispatcher.pointerMap;
-
-  /**
-   * @const
-   * @type {Array.<string>}
-   */
-  this.POINTER_TYPES = [
-    '',
-    'unavailable',
-    'touch',
-    'pen',
-    'mouse'
-  ];
-};
-ol.inherits(ol.pointer.MsSource, ol.pointer.EventSource);
-
-
-/**
- * Creates a copy of the original event that will be used
- * for the fake pointer event.
- *
- * @private
- * @param {Event} inEvent The in event.
- * @return {Object} The copied event.
- */
-ol.pointer.MsSource.prototype.prepareEvent_ = function(inEvent) {
-  var e = inEvent;
-  if (typeof inEvent.pointerType === 'number') {
-    e = this.dispatcher.cloneEvent(inEvent, inEvent);
-    e.pointerType = this.POINTER_TYPES[inEvent.pointerType];
-  }
-
-  return e;
-};
-
-
-/**
- * Remove this pointer from the list of active pointers.
- * @param {number} pointerId Pointer identifier.
- */
-ol.pointer.MsSource.prototype.cleanup = function(pointerId) {
-  delete this.pointerMap[pointerId.toString()];
-};
-
-
-/**
- * Handler for `msPointerDown`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MsSource.prototype.msPointerDown = function(inEvent) {
-  this.pointerMap[inEvent.pointerId.toString()] = inEvent;
-  var e = this.prepareEvent_(inEvent);
-  this.dispatcher.down(e, inEvent);
-};
-
-
-/**
- * Handler for `msPointerMove`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MsSource.prototype.msPointerMove = function(inEvent) {
-  var e = this.prepareEvent_(inEvent);
-  this.dispatcher.move(e, inEvent);
-};
-
-
-/**
- * Handler for `msPointerUp`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MsSource.prototype.msPointerUp = function(inEvent) {
-  var e = this.prepareEvent_(inEvent);
-  this.dispatcher.up(e, inEvent);
-  this.cleanup(inEvent.pointerId);
-};
-
-
-/**
- * Handler for `msPointerOut`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MsSource.prototype.msPointerOut = function(inEvent) {
-  var e = this.prepareEvent_(inEvent);
-  this.dispatcher.leaveOut(e, inEvent);
-};
-
-
-/**
- * Handler for `msPointerOver`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MsSource.prototype.msPointerOver = function(inEvent) {
-  var e = this.prepareEvent_(inEvent);
-  this.dispatcher.enterOver(e, inEvent);
-};
-
-
-/**
- * Handler for `msPointerCancel`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MsSource.prototype.msPointerCancel = function(inEvent) {
-  var e = this.prepareEvent_(inEvent);
-  this.dispatcher.cancel(e, inEvent);
-  this.cleanup(inEvent.pointerId);
-};
-
-
-/**
- * Handler for `msLostPointerCapture`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MsSource.prototype.msLostPointerCapture = function(inEvent) {
-  var e = this.dispatcher.makeEvent('lostpointercapture',
-      inEvent, inEvent);
-  this.dispatcher.dispatchEvent(e);
-};
-
-
-/**
- * Handler for `msGotPointerCapture`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.MsSource.prototype.msGotPointerCapture = function(inEvent) {
-  var e = this.dispatcher.makeEvent('gotpointercapture',
-      inEvent, inEvent);
-  this.dispatcher.dispatchEvent(e);
-};
-
-// Based on https://github.com/Polymer/PointerEvents
-
-// Copyright (c) 2013 The Polymer Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-goog.provide('ol.pointer.NativeSource');
-
-goog.require('ol');
-goog.require('ol.pointer.EventSource');
-
-
-/**
- * @param {ol.pointer.PointerEventHandler} dispatcher Event handler.
- * @constructor
- * @extends {ol.pointer.EventSource}
- */
-ol.pointer.NativeSource = function(dispatcher) {
-  var mapping = {
-    'pointerdown': this.pointerDown,
-    'pointermove': this.pointerMove,
-    'pointerup': this.pointerUp,
-    'pointerout': this.pointerOut,
-    'pointerover': this.pointerOver,
-    'pointercancel': this.pointerCancel,
-    'gotpointercapture': this.gotPointerCapture,
-    'lostpointercapture': this.lostPointerCapture
-  };
-  ol.pointer.EventSource.call(this, dispatcher, mapping);
-};
-ol.inherits(ol.pointer.NativeSource, ol.pointer.EventSource);
-
-
-/**
- * Handler for `pointerdown`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.NativeSource.prototype.pointerDown = function(inEvent) {
-  this.dispatcher.fireNativeEvent(inEvent);
-};
-
-
-/**
- * Handler for `pointermove`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.NativeSource.prototype.pointerMove = function(inEvent) {
-  this.dispatcher.fireNativeEvent(inEvent);
-};
-
-
-/**
- * Handler for `pointerup`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.NativeSource.prototype.pointerUp = function(inEvent) {
-  this.dispatcher.fireNativeEvent(inEvent);
-};
-
-
-/**
- * Handler for `pointerout`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.NativeSource.prototype.pointerOut = function(inEvent) {
-  this.dispatcher.fireNativeEvent(inEvent);
-};
-
-
-/**
- * Handler for `pointerover`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.NativeSource.prototype.pointerOver = function(inEvent) {
-  this.dispatcher.fireNativeEvent(inEvent);
-};
-
-
-/**
- * Handler for `pointercancel`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.NativeSource.prototype.pointerCancel = function(inEvent) {
-  this.dispatcher.fireNativeEvent(inEvent);
-};
-
-
-/**
- * Handler for `lostpointercapture`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.NativeSource.prototype.lostPointerCapture = function(inEvent) {
-  this.dispatcher.fireNativeEvent(inEvent);
-};
-
-
-/**
- * Handler for `gotpointercapture`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.NativeSource.prototype.gotPointerCapture = function(inEvent) {
-  this.dispatcher.fireNativeEvent(inEvent);
-};
-
-// Based on https://github.com/Polymer/PointerEvents
-
-// Copyright (c) 2013 The Polymer Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-goog.provide('ol.pointer.PointerEvent');
-
-
-goog.require('ol');
-goog.require('ol.events.Event');
-
-
-/**
- * A class for pointer events.
- *
- * This class is used as an abstraction for mouse events,
- * touch events and even native pointer events.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @param {string} type The type of the event to create.
- * @param {Event} originalEvent The event.
- * @param {Object.<string, ?>=} opt_eventDict An optional dictionary of
- *    initial event properties.
- */
-ol.pointer.PointerEvent = function(type, originalEvent, opt_eventDict) {
-  ol.events.Event.call(this, type);
-
-  /**
-   * @const
-   * @type {Event}
-   */
-  this.originalEvent = originalEvent;
-
-  var eventDict = opt_eventDict ? opt_eventDict : {};
-
-  /**
-   * @type {number}
-   */
-  this.buttons = this.getButtons_(eventDict);
-
-  /**
-   * @type {number}
-   */
-  this.pressure = this.getPressure_(eventDict, this.buttons);
-
-  // MouseEvent related properties
-
-  /**
-   * @type {boolean}
-   */
-  this.bubbles = 'bubbles' in eventDict ? eventDict['bubbles'] : false;
-
-  /**
-   * @type {boolean}
-   */
-  this.cancelable = 'cancelable' in eventDict ? eventDict['cancelable'] : false;
-
-  /**
-   * @type {Object}
-   */
-  this.view = 'view' in eventDict ? eventDict['view'] : null;
-
-  /**
-   * @type {number}
-   */
-  this.detail = 'detail' in eventDict ? eventDict['detail'] : null;
-
-  /**
-   * @type {number}
-   */
-  this.screenX = 'screenX' in eventDict ? eventDict['screenX'] : 0;
-
-  /**
-   * @type {number}
-   */
-  this.screenY = 'screenY' in eventDict ? eventDict['screenY'] : 0;
-
-  /**
-   * @type {number}
-   */
-  this.clientX = 'clientX' in eventDict ? eventDict['clientX'] : 0;
-
-  /**
-   * @type {number}
-   */
-  this.clientY = 'clientY' in eventDict ? eventDict['clientY'] : 0;
-
-  /**
-   * @type {boolean}
-   */
-  this.ctrlKey = 'ctrlKey' in eventDict ? eventDict['ctrlKey'] : false;
-
-  /**
-   * @type {boolean}
-   */
-  this.altKey = 'altKey' in eventDict ? eventDict['altKey'] : false;
-
-  /**
-   * @type {boolean}
-   */
-  this.shiftKey = 'shiftKey' in eventDict ? eventDict['shiftKey'] : false;
-
-  /**
-   * @type {boolean}
-   */
-  this.metaKey = 'metaKey' in eventDict ? eventDict['metaKey'] : false;
-
-  /**
-   * @type {number}
-   */
-  this.button = 'button' in eventDict ? eventDict['button'] : 0;
-
-  /**
-   * @type {Node}
-   */
-  this.relatedTarget = 'relatedTarget' in eventDict ?
-      eventDict['relatedTarget'] : null;
-
-  // PointerEvent related properties
-
-  /**
-   * @const
-   * @type {number}
-   */
-  this.pointerId = 'pointerId' in eventDict ? eventDict['pointerId'] : 0;
-
-  /**
-   * @type {number}
-   */
-  this.width = 'width' in eventDict ? eventDict['width'] : 0;
-
-  /**
-   * @type {number}
-   */
-  this.height = 'height' in eventDict ? eventDict['height'] : 0;
-
-  /**
-   * @type {number}
-   */
-  this.tiltX = 'tiltX' in eventDict ? eventDict['tiltX'] : 0;
-
-  /**
-   * @type {number}
-   */
-  this.tiltY = 'tiltY' in eventDict ? eventDict['tiltY'] : 0;
-
-  /**
-   * @type {string}
-   */
-  this.pointerType = 'pointerType' in eventDict ? eventDict['pointerType'] : '';
-
-  /**
-   * @type {number}
-   */
-  this.hwTimestamp = 'hwTimestamp' in eventDict ? eventDict['hwTimestamp'] : 0;
-
-  /**
-   * @type {boolean}
-   */
-  this.isPrimary = 'isPrimary' in eventDict ? eventDict['isPrimary'] : false;
-
-  // keep the semantics of preventDefault
-  if (originalEvent.preventDefault) {
-    this.preventDefault = function() {
-      originalEvent.preventDefault();
-    };
-  }
-};
-ol.inherits(ol.pointer.PointerEvent, ol.events.Event);
-
-
-/**
- * @private
- * @param {Object.<string, ?>} eventDict The event dictionary.
- * @return {number} Button indicator.
- */
-ol.pointer.PointerEvent.prototype.getButtons_ = function(eventDict) {
-  // According to the w3c spec,
-  // http://www.w3.org/TR/DOM-Level-3-Events/#events-MouseEvent-button
-  // MouseEvent.button == 0 can mean either no mouse button depressed, or the
-  // left mouse button depressed.
-  //
-  // As of now, the only way to distinguish between the two states of
-  // MouseEvent.button is by using the deprecated MouseEvent.which property, as
-  // this maps mouse buttons to positive integers > 0, and uses 0 to mean that
-  // no mouse button is held.
-  //
-  // MouseEvent.which is derived from MouseEvent.button at MouseEvent creation,
-  // but initMouseEvent does not expose an argument with which to set
-  // MouseEvent.which. Calling initMouseEvent with a buttonArg of 0 will set
-  // MouseEvent.button == 0 and MouseEvent.which == 1, breaking the expectations
-  // of app developers.
-  //
-  // The only way to propagate the correct state of MouseEvent.which and
-  // MouseEvent.button to a new MouseEvent.button == 0 and MouseEvent.which == 0
-  // is to call initMouseEvent with a buttonArg value of -1.
-  //
-  // This is fixed with DOM Level 4's use of buttons
-  var buttons;
-  if (eventDict.buttons || ol.pointer.PointerEvent.HAS_BUTTONS) {
-    buttons = eventDict.buttons;
-  } else {
-    switch (eventDict.which) {
-      case 1: buttons = 1; break;
-      case 2: buttons = 4; break;
-      case 3: buttons = 2; break;
-      default: buttons = 0;
-    }
-  }
-  return buttons;
-};
-
-
-/**
- * @private
- * @param {Object.<string, ?>} eventDict The event dictionary.
- * @param {number} buttons Button indicator.
- * @return {number} The pressure.
- */
-ol.pointer.PointerEvent.prototype.getPressure_ = function(eventDict, buttons) {
-  // Spec requires that pointers without pressure specified use 0.5 for down
-  // state and 0 for up state.
-  var pressure = 0;
-  if (eventDict.pressure) {
-    pressure = eventDict.pressure;
-  } else {
-    pressure = buttons ? 0.5 : 0;
-  }
-  return pressure;
-};
-
-
-/**
- * Is the `buttons` property supported?
- * @type {boolean}
- */
-ol.pointer.PointerEvent.HAS_BUTTONS = false;
-
-
-/**
- * Checks if the `buttons` property is supported.
- */
-(function() {
-  try {
-    var ev = new MouseEvent('click', {buttons: 1});
-    ol.pointer.PointerEvent.HAS_BUTTONS = ev.buttons === 1;
-  } catch (e) {
-    // pass
-  }
-})();
-
-// Based on https://github.com/Polymer/PointerEvents
-
-// Copyright (c) 2013 The Polymer Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-goog.provide('ol.pointer.TouchSource');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.pointer.EventSource');
-goog.require('ol.pointer.MouseSource');
-
-
-/**
- * @constructor
- * @param {ol.pointer.PointerEventHandler} dispatcher The event handler.
- * @param {ol.pointer.MouseSource} mouseSource Mouse source.
- * @extends {ol.pointer.EventSource}
- */
-ol.pointer.TouchSource = function(dispatcher, mouseSource) {
-  var mapping = {
-    'touchstart': this.touchstart,
-    'touchmove': this.touchmove,
-    'touchend': this.touchend,
-    'touchcancel': this.touchcancel
-  };
-  ol.pointer.EventSource.call(this, dispatcher, mapping);
-
-  /**
-   * @const
-   * @type {!Object.<string, Event|Object>}
-   */
-  this.pointerMap = dispatcher.pointerMap;
-
-  /**
-   * @const
-   * @type {ol.pointer.MouseSource}
-   */
-  this.mouseSource = mouseSource;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.firstTouchId_ = undefined;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.clickCount_ = 0;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.resetId_ = undefined;
-};
-ol.inherits(ol.pointer.TouchSource, ol.pointer.EventSource);
-
-
-/**
- * Mouse event timeout: This should be long enough to
- * ignore compat mouse events made by touch.
- * @const
- * @type {number}
- */
-ol.pointer.TouchSource.DEDUP_TIMEOUT = 2500;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.pointer.TouchSource.CLICK_COUNT_TIMEOUT = 200;
-
-
-/**
- * @const
- * @type {string}
- */
-ol.pointer.TouchSource.POINTER_TYPE = 'touch';
-
-
-/**
- * @private
- * @param {Touch} inTouch The in touch.
- * @return {boolean} True, if this is the primary touch.
- */
-ol.pointer.TouchSource.prototype.isPrimaryTouch_ = function(inTouch) {
-  return this.firstTouchId_ === inTouch.identifier;
-};
-
-
-/**
- * Set primary touch if there are no pointers, or the only pointer is the mouse.
- * @param {Touch} inTouch The in touch.
- * @private
- */
-ol.pointer.TouchSource.prototype.setPrimaryTouch_ = function(inTouch) {
-  var count = Object.keys(this.pointerMap).length;
-  if (count === 0 || (count === 1 &&
-      ol.pointer.MouseSource.POINTER_ID.toString() in this.pointerMap)) {
-    this.firstTouchId_ = inTouch.identifier;
-    this.cancelResetClickCount_();
-  }
-};
-
-
-/**
- * @private
- * @param {Object} inPointer The in pointer object.
- */
-ol.pointer.TouchSource.prototype.removePrimaryPointer_ = function(inPointer) {
-  if (inPointer.isPrimary) {
-    this.firstTouchId_ = undefined;
-    this.resetClickCount_();
-  }
-};
-
-
-/**
- * @private
- */
-ol.pointer.TouchSource.prototype.resetClickCount_ = function() {
-  this.resetId_ = setTimeout(
-      this.resetClickCountHandler_.bind(this),
-      ol.pointer.TouchSource.CLICK_COUNT_TIMEOUT);
-};
-
-
-/**
- * @private
- */
-ol.pointer.TouchSource.prototype.resetClickCountHandler_ = function() {
-  this.clickCount_ = 0;
-  this.resetId_ = undefined;
-};
-
-
-/**
- * @private
- */
-ol.pointer.TouchSource.prototype.cancelResetClickCount_ = function() {
-  if (this.resetId_ !== undefined) {
-    clearTimeout(this.resetId_);
-  }
-};
-
-
-/**
- * @private
- * @param {Event} browserEvent Browser event
- * @param {Touch} inTouch Touch event
- * @return {Object} A pointer object.
- */
-ol.pointer.TouchSource.prototype.touchToPointer_ = function(browserEvent, inTouch) {
-  var e = this.dispatcher.cloneEvent(browserEvent, inTouch);
-  // Spec specifies that pointerId 1 is reserved for Mouse.
-  // Touch identifiers can start at 0.
-  // Add 2 to the touch identifier for compatibility.
-  e.pointerId = inTouch.identifier + 2;
-  // TODO: check if this is necessary?
-  //e.target = findTarget(e);
-  e.bubbles = true;
-  e.cancelable = true;
-  e.detail = this.clickCount_;
-  e.button = 0;
-  e.buttons = 1;
-  e.width = inTouch.webkitRadiusX || inTouch.radiusX || 0;
-  e.height = inTouch.webkitRadiusY || inTouch.radiusY || 0;
-  e.pressure = inTouch.webkitForce || inTouch.force || 0.5;
-  e.isPrimary = this.isPrimaryTouch_(inTouch);
-  e.pointerType = ol.pointer.TouchSource.POINTER_TYPE;
-
-  // make sure that the properties that are different for
-  // each `Touch` object are not copied from the BrowserEvent object
-  e.clientX = inTouch.clientX;
-  e.clientY = inTouch.clientY;
-  e.screenX = inTouch.screenX;
-  e.screenY = inTouch.screenY;
-
-  return e;
-};
-
-
-/**
- * @private
- * @param {Event} inEvent Touch event
- * @param {function(Event, Object)} inFunction In function.
- */
-ol.pointer.TouchSource.prototype.processTouches_ = function(inEvent, inFunction) {
-  var touches = Array.prototype.slice.call(
-      inEvent.changedTouches);
-  var count = touches.length;
-  function preventDefault() {
-    inEvent.preventDefault();
-  }
-  var i, pointer;
-  for (i = 0; i < count; ++i) {
-    pointer = this.touchToPointer_(inEvent, touches[i]);
-    // forward touch preventDefaults
-    pointer.preventDefault = preventDefault;
-    inFunction.call(this, inEvent, pointer);
-  }
-};
-
-
-/**
- * @private
- * @param {TouchList} touchList The touch list.
- * @param {number} searchId Search identifier.
- * @return {boolean} True, if the `Touch` with the given id is in the list.
- */
-ol.pointer.TouchSource.prototype.findTouch_ = function(touchList, searchId) {
-  var l = touchList.length;
-  var touch;
-  for (var i = 0; i < l; i++) {
-    touch = touchList[i];
-    if (touch.identifier === searchId) {
-      return true;
-    }
-  }
-  return false;
-};
-
-
-/**
- * In some instances, a touchstart can happen without a touchend. This
- * leaves the pointermap in a broken state.
- * Therefore, on every touchstart, we remove the touches that did not fire a
- * touchend event.
- * To keep state globally consistent, we fire a pointercancel for
- * this "abandoned" touch
- *
- * @private
- * @param {Event} inEvent The in event.
- */
-ol.pointer.TouchSource.prototype.vacuumTouches_ = function(inEvent) {
-  var touchList = inEvent.touches;
-  // pointerMap.getCount() should be < touchList.length here,
-  // as the touchstart has not been processed yet.
-  var keys = Object.keys(this.pointerMap);
-  var count = keys.length;
-  if (count >= touchList.length) {
-    var d = [];
-    var i, key, value;
-    for (i = 0; i < count; ++i) {
-      key = keys[i];
-      value = this.pointerMap[key];
-      // Never remove pointerId == 1, which is mouse.
-      // Touch identifiers are 2 smaller than their pointerId, which is the
-      // index in pointermap.
-      if (key != ol.pointer.MouseSource.POINTER_ID &&
-          !this.findTouch_(touchList, key - 2)) {
-        d.push(value.out);
-      }
-    }
-    for (i = 0; i < d.length; ++i) {
-      this.cancelOut_(inEvent, d[i]);
-    }
-  }
-};
-
-
-/**
- * Handler for `touchstart`, triggers `pointerover`,
- * `pointerenter` and `pointerdown` events.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.TouchSource.prototype.touchstart = function(inEvent) {
-  this.vacuumTouches_(inEvent);
-  this.setPrimaryTouch_(inEvent.changedTouches[0]);
-  this.dedupSynthMouse_(inEvent);
-  this.clickCount_++;
-  this.processTouches_(inEvent, this.overDown_);
-};
-
-
-/**
- * @private
- * @param {Event} browserEvent The event.
- * @param {Object} inPointer The in pointer object.
- */
-ol.pointer.TouchSource.prototype.overDown_ = function(browserEvent, inPointer) {
-  this.pointerMap[inPointer.pointerId] = {
-    target: inPointer.target,
-    out: inPointer,
-    outTarget: inPointer.target
-  };
-  this.dispatcher.over(inPointer, browserEvent);
-  this.dispatcher.enter(inPointer, browserEvent);
-  this.dispatcher.down(inPointer, browserEvent);
-};
-
-
-/**
- * Handler for `touchmove`.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.TouchSource.prototype.touchmove = function(inEvent) {
-  inEvent.preventDefault();
-  this.processTouches_(inEvent, this.moveOverOut_);
-};
-
-
-/**
- * @private
- * @param {Event} browserEvent The event.
- * @param {Object} inPointer The in pointer.
- */
-ol.pointer.TouchSource.prototype.moveOverOut_ = function(browserEvent, inPointer) {
-  var event = inPointer;
-  var pointer = this.pointerMap[event.pointerId];
-  // a finger drifted off the screen, ignore it
-  if (!pointer) {
-    return;
-  }
-  var outEvent = pointer.out;
-  var outTarget = pointer.outTarget;
-  this.dispatcher.move(event, browserEvent);
-  if (outEvent && outTarget !== event.target) {
-    outEvent.relatedTarget = event.target;
-    event.relatedTarget = outTarget;
-    // recover from retargeting by shadow
-    outEvent.target = outTarget;
-    if (event.target) {
-      this.dispatcher.leaveOut(outEvent, browserEvent);
-      this.dispatcher.enterOver(event, browserEvent);
-    } else {
-      // clean up case when finger leaves the screen
-      event.target = outTarget;
-      event.relatedTarget = null;
-      this.cancelOut_(browserEvent, event);
-    }
-  }
-  pointer.out = event;
-  pointer.outTarget = event.target;
-};
-
-
-/**
- * Handler for `touchend`, triggers `pointerup`,
- * `pointerout` and `pointerleave` events.
- *
- * @param {Event} inEvent The event.
- */
-ol.pointer.TouchSource.prototype.touchend = function(inEvent) {
-  this.dedupSynthMouse_(inEvent);
-  this.processTouches_(inEvent, this.upOut_);
-};
-
-
-/**
- * @private
- * @param {Event} browserEvent An event.
- * @param {Object} inPointer The inPointer object.
- */
-ol.pointer.TouchSource.prototype.upOut_ = function(browserEvent, inPointer) {
-  this.dispatcher.up(inPointer, browserEvent);
-  this.dispatcher.out(inPointer, browserEvent);
-  this.dispatcher.leave(inPointer, browserEvent);
-  this.cleanUpPointer_(inPointer);
-};
-
-
-/**
- * Handler for `touchcancel`, triggers `pointercancel`,
- * `pointerout` and `pointerleave` events.
- *
- * @param {Event} inEvent The in event.
- */
-ol.pointer.TouchSource.prototype.touchcancel = function(inEvent) {
-  this.processTouches_(inEvent, this.cancelOut_);
-};
-
-
-/**
- * @private
- * @param {Event} browserEvent The event.
- * @param {Object} inPointer The in pointer.
- */
-ol.pointer.TouchSource.prototype.cancelOut_ = function(browserEvent, inPointer) {
-  this.dispatcher.cancel(inPointer, browserEvent);
-  this.dispatcher.out(inPointer, browserEvent);
-  this.dispatcher.leave(inPointer, browserEvent);
-  this.cleanUpPointer_(inPointer);
-};
-
-
-/**
- * @private
- * @param {Object} inPointer The inPointer object.
- */
-ol.pointer.TouchSource.prototype.cleanUpPointer_ = function(inPointer) {
-  delete this.pointerMap[inPointer.pointerId];
-  this.removePrimaryPointer_(inPointer);
-};
-
-
-/**
- * Prevent synth mouse events from creating pointer events.
- *
- * @private
- * @param {Event} inEvent The in event.
- */
-ol.pointer.TouchSource.prototype.dedupSynthMouse_ = function(inEvent) {
-  var lts = this.mouseSource.lastTouches;
-  var t = inEvent.changedTouches[0];
-  // only the primary finger will synth mouse events
-  if (this.isPrimaryTouch_(t)) {
-    // remember x/y of last touch
-    var lt = [t.clientX, t.clientY];
-    lts.push(lt);
-
-    setTimeout(function() {
-      // remove touch after timeout
-      ol.array.remove(lts, lt);
-    }, ol.pointer.TouchSource.DEDUP_TIMEOUT);
-  }
-};
-
-// Based on https://github.com/Polymer/PointerEvents
-
-// Copyright (c) 2013 The Polymer Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-goog.provide('ol.pointer.PointerEventHandler');
-
-goog.require('ol');
-goog.require('ol.events');
-goog.require('ol.events.EventTarget');
-
-goog.require('ol.has');
-goog.require('ol.pointer.EventType');
-goog.require('ol.pointer.MouseSource');
-goog.require('ol.pointer.MsSource');
-goog.require('ol.pointer.NativeSource');
-goog.require('ol.pointer.PointerEvent');
-goog.require('ol.pointer.TouchSource');
-
-
-/**
- * @constructor
- * @extends {ol.events.EventTarget}
- * @param {Element|HTMLDocument} element Viewport element.
- */
-ol.pointer.PointerEventHandler = function(element) {
-  ol.events.EventTarget.call(this);
-
-  /**
-   * @const
-   * @private
-   * @type {Element|HTMLDocument}
-   */
-  this.element_ = element;
-
-  /**
-   * @const
-   * @type {!Object.<string, Event|Object>}
-   */
-  this.pointerMap = {};
-
-  /**
-   * @type {Object.<string, function(Event)>}
-   * @private
-   */
-  this.eventMap_ = {};
-
-  /**
-   * @type {Array.<ol.pointer.EventSource>}
-   * @private
-   */
-  this.eventSourceList_ = [];
-
-  this.registerSources();
-};
-ol.inherits(ol.pointer.PointerEventHandler, ol.events.EventTarget);
-
-
-/**
- * Set up the event sources (mouse, touch and native pointers)
- * that generate pointer events.
- */
-ol.pointer.PointerEventHandler.prototype.registerSources = function() {
-  if (ol.has.POINTER) {
-    this.registerSource('native', new ol.pointer.NativeSource(this));
-  } else if (ol.has.MSPOINTER) {
-    this.registerSource('ms', new ol.pointer.MsSource(this));
-  } else {
-    var mouseSource = new ol.pointer.MouseSource(this);
-    this.registerSource('mouse', mouseSource);
-
-    if (ol.has.TOUCH) {
-      this.registerSource('touch',
-          new ol.pointer.TouchSource(this, mouseSource));
-    }
-  }
-
-  // register events on the viewport element
-  this.register_();
-};
-
-
-/**
- * Add a new event source that will generate pointer events.
- *
- * @param {string} name A name for the event source
- * @param {ol.pointer.EventSource} source The source event.
- */
-ol.pointer.PointerEventHandler.prototype.registerSource = function(name, source) {
-  var s = source;
-  var newEvents = s.getEvents();
-
-  if (newEvents) {
-    newEvents.forEach(function(e) {
-      var handler = s.getHandlerForEvent(e);
-
-      if (handler) {
-        this.eventMap_[e] = handler.bind(s);
-      }
-    }, this);
-    this.eventSourceList_.push(s);
-  }
-};
-
-
-/**
- * Set up the events for all registered event sources.
- * @private
- */
-ol.pointer.PointerEventHandler.prototype.register_ = function() {
-  var l = this.eventSourceList_.length;
-  var eventSource;
-  for (var i = 0; i < l; i++) {
-    eventSource = this.eventSourceList_[i];
-    this.addEvents_(eventSource.getEvents());
-  }
-};
-
-
-/**
- * Remove all registered events.
- * @private
- */
-ol.pointer.PointerEventHandler.prototype.unregister_ = function() {
-  var l = this.eventSourceList_.length;
-  var eventSource;
-  for (var i = 0; i < l; i++) {
-    eventSource = this.eventSourceList_[i];
-    this.removeEvents_(eventSource.getEvents());
-  }
-};
-
-
-/**
- * Calls the right handler for a new event.
- * @private
- * @param {Event} inEvent Browser event.
- */
-ol.pointer.PointerEventHandler.prototype.eventHandler_ = function(inEvent) {
-  var type = inEvent.type;
-  var handler = this.eventMap_[type];
-  if (handler) {
-    handler(inEvent);
-  }
-};
-
-
-/**
- * Setup listeners for the given events.
- * @private
- * @param {Array.<string>} events List of events.
- */
-ol.pointer.PointerEventHandler.prototype.addEvents_ = function(events) {
-  events.forEach(function(eventName) {
-    ol.events.listen(this.element_, eventName, this.eventHandler_, this);
-  }, this);
-};
-
-
-/**
- * Unregister listeners for the given events.
- * @private
- * @param {Array.<string>} events List of events.
- */
-ol.pointer.PointerEventHandler.prototype.removeEvents_ = function(events) {
-  events.forEach(function(e) {
-    ol.events.unlisten(this.element_, e, this.eventHandler_, this);
-  }, this);
-};
-
-
-/**
- * Returns a snapshot of inEvent, with writable properties.
- *
- * @param {Event} event Browser event.
- * @param {Event|Touch} inEvent An event that contains
- *    properties to copy.
- * @return {Object} An object containing shallow copies of
- *    `inEvent`'s properties.
- */
-ol.pointer.PointerEventHandler.prototype.cloneEvent = function(event, inEvent) {
-  var eventCopy = {}, p;
-  for (var i = 0, ii = ol.pointer.CLONE_PROPS.length; i < ii; i++) {
-    p = ol.pointer.CLONE_PROPS[i][0];
-    eventCopy[p] = event[p] || inEvent[p] || ol.pointer.CLONE_PROPS[i][1];
-  }
-
-  return eventCopy;
-};
-
-
-// EVENTS
-
-
-/**
- * Triggers a 'pointerdown' event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.down = function(data, event) {
-  this.fireEvent(ol.pointer.EventType.POINTERDOWN, data, event);
-};
-
-
-/**
- * Triggers a 'pointermove' event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.move = function(data, event) {
-  this.fireEvent(ol.pointer.EventType.POINTERMOVE, data, event);
-};
-
-
-/**
- * Triggers a 'pointerup' event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.up = function(data, event) {
-  this.fireEvent(ol.pointer.EventType.POINTERUP, data, event);
-};
-
-
-/**
- * Triggers a 'pointerenter' event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.enter = function(data, event) {
-  data.bubbles = false;
-  this.fireEvent(ol.pointer.EventType.POINTERENTER, data, event);
-};
-
-
-/**
- * Triggers a 'pointerleave' event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.leave = function(data, event) {
-  data.bubbles = false;
-  this.fireEvent(ol.pointer.EventType.POINTERLEAVE, data, event);
-};
-
-
-/**
- * Triggers a 'pointerover' event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.over = function(data, event) {
-  data.bubbles = true;
-  this.fireEvent(ol.pointer.EventType.POINTEROVER, data, event);
-};
-
-
-/**
- * Triggers a 'pointerout' event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.out = function(data, event) {
-  data.bubbles = true;
-  this.fireEvent(ol.pointer.EventType.POINTEROUT, data, event);
-};
-
-
-/**
- * Triggers a 'pointercancel' event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.cancel = function(data, event) {
-  this.fireEvent(ol.pointer.EventType.POINTERCANCEL, data, event);
-};
-
-
-/**
- * Triggers a combination of 'pointerout' and 'pointerleave' events.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.leaveOut = function(data, event) {
-  this.out(data, event);
-  if (!this.contains_(data.target, data.relatedTarget)) {
-    this.leave(data, event);
-  }
-};
-
-
-/**
- * Triggers a combination of 'pointerover' and 'pointerevents' events.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.enterOver = function(data, event) {
-  this.over(data, event);
-  if (!this.contains_(data.target, data.relatedTarget)) {
-    this.enter(data, event);
-  }
-};
-
-
-/**
- * @private
- * @param {Element} container The container element.
- * @param {Element} contained The contained element.
- * @return {boolean} Returns true if the container element
- *   contains the other element.
- */
-ol.pointer.PointerEventHandler.prototype.contains_ = function(container, contained) {
-  if (!container || !contained) {
-    return false;
-  }
-  return container.contains(contained);
-};
-
-
-// EVENT CREATION AND TRACKING
-/**
- * Creates a new Event of type `inType`, based on the information in
- * `data`.
- *
- * @param {string} inType A string representing the type of event to create.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- * @return {ol.pointer.PointerEvent} A PointerEvent of type `inType`.
- */
-ol.pointer.PointerEventHandler.prototype.makeEvent = function(inType, data, event) {
-  return new ol.pointer.PointerEvent(inType, event, data);
-};
-
-
-/**
- * Make and dispatch an event in one call.
- * @param {string} inType A string representing the type of event.
- * @param {Object} data Pointer event data.
- * @param {Event} event The event.
- */
-ol.pointer.PointerEventHandler.prototype.fireEvent = function(inType, data, event) {
-  var e = this.makeEvent(inType, data, event);
-  this.dispatchEvent(e);
-};
-
-
-/**
- * Creates a pointer event from a native pointer event
- * and dispatches this event.
- * @param {Event} event A platform event with a target.
- */
-ol.pointer.PointerEventHandler.prototype.fireNativeEvent = function(event) {
-  var e = this.makeEvent(event.type, event, event);
-  this.dispatchEvent(e);
-};
-
-
-/**
- * Wrap a native mouse event into a pointer event.
- * This proxy method is required for the legacy IE support.
- * @param {string} eventType The pointer event type.
- * @param {Event} event The event.
- * @return {ol.pointer.PointerEvent} The wrapped event.
- */
-ol.pointer.PointerEventHandler.prototype.wrapMouseEvent = function(eventType, event) {
-  var pointerEvent = this.makeEvent(
-      eventType, ol.pointer.MouseSource.prepareEvent(event, this), event);
-  return pointerEvent;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.pointer.PointerEventHandler.prototype.disposeInternal = function() {
-  this.unregister_();
-  ol.events.EventTarget.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * Properties to copy when cloning an event, with default values.
- * @type {Array.<Array>}
- */
-ol.pointer.CLONE_PROPS = [
-  // MouseEvent
-  ['bubbles', false],
-  ['cancelable', false],
-  ['view', null],
-  ['detail', null],
-  ['screenX', 0],
-  ['screenY', 0],
-  ['clientX', 0],
-  ['clientY', 0],
-  ['ctrlKey', false],
-  ['altKey', false],
-  ['shiftKey', false],
-  ['metaKey', false],
-  ['button', 0],
-  ['relatedTarget', null],
-  // DOM Level 3
-  ['buttons', 0],
-  // PointerEvent
-  ['pointerId', 0],
-  ['width', 0],
-  ['height', 0],
-  ['pressure', 0],
-  ['tiltX', 0],
-  ['tiltY', 0],
-  ['pointerType', ''],
-  ['hwTimestamp', 0],
-  ['isPrimary', false],
-  // event instance
-  ['type', ''],
-  ['target', null],
-  ['currentTarget', null],
-  ['which', 0]
-];
-
-goog.provide('ol.MapBrowserEvent');
-goog.provide('ol.MapBrowserEvent.EventType');
-goog.provide('ol.MapBrowserEventHandler');
-goog.provide('ol.MapBrowserPointerEvent');
-
-goog.require('ol');
-goog.require('ol.MapEvent');
-goog.require('ol.events');
-goog.require('ol.events.EventTarget');
-goog.require('ol.events.EventType');
-goog.require('ol.pointer.EventType');
-goog.require('ol.pointer.PointerEventHandler');
-
-
-/**
- * @classdesc
- * Events emitted as map browser events are instances of this type.
- * See {@link ol.Map} for which events trigger a map browser event.
- *
- * @constructor
- * @extends {ol.MapEvent}
- * @implements {oli.MapBrowserEvent}
- * @param {string} type Event type.
- * @param {ol.Map} map Map.
- * @param {Event} browserEvent Browser event.
- * @param {boolean=} opt_dragging Is the map currently being dragged?
- * @param {?olx.FrameState=} opt_frameState Frame state.
- */
-ol.MapBrowserEvent = function(type, map, browserEvent, opt_dragging,
-    opt_frameState) {
-
-  ol.MapEvent.call(this, type, map, opt_frameState);
-
-  /**
-   * The original browser event.
-   * @const
-   * @type {Event}
-   * @api stable
-   */
-  this.originalEvent = browserEvent;
-
-  /**
-   * The pixel of the original browser event.
-   * @type {ol.Pixel}
-   * @api stable
-   */
-  this.pixel = map.getEventPixel(browserEvent);
-
-  /**
-   * The coordinate of the original browser event.
-   * @type {ol.Coordinate}
-   * @api stable
-   */
-  this.coordinate = map.getCoordinateFromPixel(this.pixel);
-
-  /**
-   * Indicates if the map is currently being dragged. Only set for
-   * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.
-   *
-   * @type {boolean}
-   * @api stable
-   */
-  this.dragging = opt_dragging !== undefined ? opt_dragging : false;
-
-};
-ol.inherits(ol.MapBrowserEvent, ol.MapEvent);
-
-
-/**
- * Prevents the default browser action.
- * @see https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault
- * @override
- * @api stable
- */
-ol.MapBrowserEvent.prototype.preventDefault = function() {
-  ol.MapEvent.prototype.preventDefault.call(this);
-  this.originalEvent.preventDefault();
-};
-
-
-/**
- * Prevents further propagation of the current event.
- * @see https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation
- * @override
- * @api stable
- */
-ol.MapBrowserEvent.prototype.stopPropagation = function() {
-  ol.MapEvent.prototype.stopPropagation.call(this);
-  this.originalEvent.stopPropagation();
-};
-
-
-/**
- * @constructor
- * @extends {ol.MapBrowserEvent}
- * @param {string} type Event type.
- * @param {ol.Map} map Map.
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @param {boolean=} opt_dragging Is the map currently being dragged?
- * @param {?olx.FrameState=} opt_frameState Frame state.
- */
-ol.MapBrowserPointerEvent = function(type, map, pointerEvent, opt_dragging,
-    opt_frameState) {
-
-  ol.MapBrowserEvent.call(this, type, map, pointerEvent.originalEvent, opt_dragging,
-      opt_frameState);
-
-  /**
-   * @const
-   * @type {ol.pointer.PointerEvent}
-   */
-  this.pointerEvent = pointerEvent;
-
-};
-ol.inherits(ol.MapBrowserPointerEvent, ol.MapBrowserEvent);
-
-
-/**
- * @param {ol.Map} map The map with the viewport to listen to events on.
- * @constructor
- * @extends {ol.events.EventTarget}
- */
-ol.MapBrowserEventHandler = function(map) {
-
-  ol.events.EventTarget.call(this);
-
-  /**
-   * This is the element that we will listen to the real events on.
-   * @type {ol.Map}
-   * @private
-   */
-  this.map_ = map;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.clickTimeoutId_ = 0;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.dragging_ = false;
-
-  /**
-   * @type {!Array.<ol.EventsKey>}
-   * @private
-   */
-  this.dragListenerKeys_ = [];
-
-  /**
-   * The most recent "down" type event (or null if none have occurred).
-   * Set on pointerdown.
-   * @type {ol.pointer.PointerEvent}
-   * @private
-   */
-  this.down_ = null;
-
-  var element = this.map_.getViewport();
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.activePointers_ = 0;
-
-  /**
-   * @type {!Object.<number, boolean>}
-   * @private
-   */
-  this.trackedTouches_ = {};
-
-  /**
-   * Event handler which generates pointer events for
-   * the viewport element.
-   *
-   * @type {ol.pointer.PointerEventHandler}
-   * @private
-   */
-  this.pointerEventHandler_ = new ol.pointer.PointerEventHandler(element);
-
-  /**
-   * Event handler which generates pointer events for
-   * the document (used when dragging).
-   *
-   * @type {ol.pointer.PointerEventHandler}
-   * @private
-   */
-  this.documentPointerEventHandler_ = null;
-
-  /**
-   * @type {?ol.EventsKey}
-   * @private
-   */
-  this.pointerdownListenerKey_ = ol.events.listen(this.pointerEventHandler_,
-      ol.pointer.EventType.POINTERDOWN,
-      this.handlePointerDown_, this);
-
-  /**
-   * @type {?ol.EventsKey}
-   * @private
-   */
-  this.relayedListenerKey_ = ol.events.listen(this.pointerEventHandler_,
-      ol.pointer.EventType.POINTERMOVE,
-      this.relayEvent_, this);
-
-};
-ol.inherits(ol.MapBrowserEventHandler, ol.events.EventTarget);
-
-
-/**
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @private
- */
-ol.MapBrowserEventHandler.prototype.emulateClick_ = function(pointerEvent) {
-  var newEvent = new ol.MapBrowserPointerEvent(
-      ol.MapBrowserEvent.EventType.CLICK, this.map_, pointerEvent);
-  this.dispatchEvent(newEvent);
-  if (this.clickTimeoutId_ !== 0) {
-    // double-click
-    clearTimeout(this.clickTimeoutId_);
-    this.clickTimeoutId_ = 0;
-    newEvent = new ol.MapBrowserPointerEvent(
-        ol.MapBrowserEvent.EventType.DBLCLICK, this.map_, pointerEvent);
-    this.dispatchEvent(newEvent);
-  } else {
-    // click
-    this.clickTimeoutId_ = setTimeout(function() {
-      this.clickTimeoutId_ = 0;
-      var newEvent = new ol.MapBrowserPointerEvent(
-          ol.MapBrowserEvent.EventType.SINGLECLICK, this.map_, pointerEvent);
-      this.dispatchEvent(newEvent);
-    }.bind(this), 250);
-  }
-};
-
-
-/**
- * Keeps track on how many pointers are currently active.
- *
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @private
- */
-ol.MapBrowserEventHandler.prototype.updateActivePointers_ = function(pointerEvent) {
-  var event = pointerEvent;
-
-  if (event.type == ol.MapBrowserEvent.EventType.POINTERUP ||
-      event.type == ol.MapBrowserEvent.EventType.POINTERCANCEL) {
-    delete this.trackedTouches_[event.pointerId];
-  } else if (event.type == ol.MapBrowserEvent.EventType.POINTERDOWN) {
-    this.trackedTouches_[event.pointerId] = true;
-  }
-  this.activePointers_ = Object.keys(this.trackedTouches_).length;
-};
-
-
-/**
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @private
- */
-ol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(pointerEvent) {
-  this.updateActivePointers_(pointerEvent);
-  var newEvent = new ol.MapBrowserPointerEvent(
-      ol.MapBrowserEvent.EventType.POINTERUP, this.map_, pointerEvent);
-  this.dispatchEvent(newEvent);
-
-  // We emulate click events on left mouse button click, touch contact, and pen
-  // contact. isMouseActionButton returns true in these cases (evt.button is set
-  // to 0).
-  // See http://www.w3.org/TR/pointerevents/#button-states
-  if (!this.dragging_ && this.isMouseActionButton_(pointerEvent)) {
-    ol.DEBUG && console.assert(this.down_, 'this.down_ must be truthy');
-    this.emulateClick_(this.down_);
-  }
-
-  ol.DEBUG && console.assert(this.activePointers_ >= 0,
-      'this.activePointers_ should be equal to or larger than 0');
-  if (this.activePointers_ === 0) {
-    this.dragListenerKeys_.forEach(ol.events.unlistenByKey);
-    this.dragListenerKeys_.length = 0;
-    this.dragging_ = false;
-    this.down_ = null;
-    this.documentPointerEventHandler_.dispose();
-    this.documentPointerEventHandler_ = null;
-  }
-};
-
-
-/**
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @return {boolean} If the left mouse button was pressed.
- * @private
- */
-ol.MapBrowserEventHandler.prototype.isMouseActionButton_ = function(pointerEvent) {
-  return pointerEvent.button === 0;
-};
-
-
-/**
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @private
- */
-ol.MapBrowserEventHandler.prototype.handlePointerDown_ = function(pointerEvent) {
-  this.updateActivePointers_(pointerEvent);
-  var newEvent = new ol.MapBrowserPointerEvent(
-      ol.MapBrowserEvent.EventType.POINTERDOWN, this.map_, pointerEvent);
-  this.dispatchEvent(newEvent);
-
-  this.down_ = pointerEvent;
-
-  if (this.dragListenerKeys_.length === 0) {
-    /* Set up a pointer event handler on the `document`,
-     * which is required when the pointer is moved outside
-     * the viewport when dragging.
-     */
-    this.documentPointerEventHandler_ =
-        new ol.pointer.PointerEventHandler(document);
-
-    this.dragListenerKeys_.push(
-      ol.events.listen(this.documentPointerEventHandler_,
-          ol.MapBrowserEvent.EventType.POINTERMOVE,
-          this.handlePointerMove_, this),
-      ol.events.listen(this.documentPointerEventHandler_,
-          ol.MapBrowserEvent.EventType.POINTERUP,
-          this.handlePointerUp_, this),
-      /* Note that the listener for `pointercancel is set up on
-       * `pointerEventHandler_` and not `documentPointerEventHandler_` like
-       * the `pointerup` and `pointermove` listeners.
-       *
-       * The reason for this is the following: `TouchSource.vacuumTouches_()`
-       * issues `pointercancel` events, when there was no `touchend` for a
-       * `touchstart`. Now, let's say a first `touchstart` is registered on
-       * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.
-       * But `documentPointerEventHandler_` doesn't know about the first
-       * `touchstart`. If there is no `touchend` for the `touchstart`, we can
-       * only receive a `touchcancel` from `pointerEventHandler_`, because it is
-       * only registered there.
-       */
-      ol.events.listen(this.pointerEventHandler_,
-          ol.MapBrowserEvent.EventType.POINTERCANCEL,
-          this.handlePointerUp_, this)
-    );
-  }
-};
-
-
-/**
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @private
- */
-ol.MapBrowserEventHandler.prototype.handlePointerMove_ = function(pointerEvent) {
-  // Fix IE10 on windows Surface : When you tap the tablet, it triggers
-  // multiple pointermove events between pointerdown and pointerup with
-  // the exact same coordinates of the pointerdown event. To avoid a
-  // 'false' touchmove event to be dispatched , we test if the pointer
-  // effectively moved.
-  if (this.isMoving_(pointerEvent)) {
-    this.dragging_ = true;
-    var newEvent = new ol.MapBrowserPointerEvent(
-        ol.MapBrowserEvent.EventType.POINTERDRAG, this.map_, pointerEvent,
-        this.dragging_);
-    this.dispatchEvent(newEvent);
-  }
-
-  // Some native android browser triggers mousemove events during small period
-  // of time. See: https://code.google.com/p/android/issues/detail?id=5491 or
-  // https://code.google.com/p/android/issues/detail?id=19827
-  // ex: Galaxy Tab P3110 + Android 4.1.1
-  pointerEvent.preventDefault();
-};
-
-
-/**
- * Wrap and relay a pointer event.  Note that this requires that the type
- * string for the MapBrowserPointerEvent matches the PointerEvent type.
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @private
- */
-ol.MapBrowserEventHandler.prototype.relayEvent_ = function(pointerEvent) {
-  var dragging = !!(this.down_ && this.isMoving_(pointerEvent));
-  this.dispatchEvent(new ol.MapBrowserPointerEvent(
-      pointerEvent.type, this.map_, pointerEvent, dragging));
-};
-
-
-/**
- * @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
- * @return {boolean} Is moving.
- * @private
- */
-ol.MapBrowserEventHandler.prototype.isMoving_ = function(pointerEvent) {
-  return pointerEvent.clientX != this.down_.clientX ||
-      pointerEvent.clientY != this.down_.clientY;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.MapBrowserEventHandler.prototype.disposeInternal = function() {
-  if (this.relayedListenerKey_) {
-    ol.events.unlistenByKey(this.relayedListenerKey_);
-    this.relayedListenerKey_ = null;
-  }
-  if (this.pointerdownListenerKey_) {
-    ol.events.unlistenByKey(this.pointerdownListenerKey_);
-    this.pointerdownListenerKey_ = null;
-  }
-
-  this.dragListenerKeys_.forEach(ol.events.unlistenByKey);
-  this.dragListenerKeys_.length = 0;
-
-  if (this.documentPointerEventHandler_) {
-    this.documentPointerEventHandler_.dispose();
-    this.documentPointerEventHandler_ = null;
-  }
-  if (this.pointerEventHandler_) {
-    this.pointerEventHandler_.dispose();
-    this.pointerEventHandler_ = null;
-  }
-  ol.events.EventTarget.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * Constants for event names.
- * @enum {string}
- */
-ol.MapBrowserEvent.EventType = {
-
-  /**
-   * A true single click with no dragging and no double click. Note that this
-   * event is delayed by 250 ms to ensure that it is not a double click.
-   * @event ol.MapBrowserEvent#singleclick
-   * @api stable
-   */
-  SINGLECLICK: 'singleclick',
-
-  /**
-   * A click with no dragging. A double click will fire two of this.
-   * @event ol.MapBrowserEvent#click
-   * @api stable
-   */
-  CLICK: ol.events.EventType.CLICK,
-
-  /**
-   * A true double click, with no dragging.
-   * @event ol.MapBrowserEvent#dblclick
-   * @api stable
-   */
-  DBLCLICK: ol.events.EventType.DBLCLICK,
-
-  /**
-   * Triggered when a pointer is dragged.
-   * @event ol.MapBrowserEvent#pointerdrag
-   * @api
-   */
-  POINTERDRAG: 'pointerdrag',
-
-  /**
-   * Triggered when a pointer is moved. Note that on touch devices this is
-   * triggered when the map is panned, so is not the same as mousemove.
-   * @event ol.MapBrowserEvent#pointermove
-   * @api stable
-   */
-  POINTERMOVE: 'pointermove',
-
-  POINTERDOWN: 'pointerdown',
-  POINTERUP: 'pointerup',
-  POINTEROVER: 'pointerover',
-  POINTEROUT: 'pointerout',
-  POINTERENTER: 'pointerenter',
-  POINTERLEAVE: 'pointerleave',
-  POINTERCANCEL: 'pointercancel'
-};
-
-goog.provide('ol.Tile');
-
-goog.require('ol');
-goog.require('ol.events.EventTarget');
-goog.require('ol.events.EventType');
-
-
-/**
- * @classdesc
- * Base class for tiles.
- *
- * @constructor
- * @extends {ol.events.EventTarget}
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Tile.State} state State.
- */
-ol.Tile = function(tileCoord, state) {
-
-  ol.events.EventTarget.call(this);
-
-  /**
-   * @type {ol.TileCoord}
-   */
-  this.tileCoord = tileCoord;
-
-  /**
-   * @protected
-   * @type {ol.Tile.State}
-   */
-  this.state = state;
-
-  /**
-   * An "interim" tile for this tile. The interim tile may be used while this
-   * one is loading, for "smooth" transitions when changing params/dimensions
-   * on the source.
-   * @type {ol.Tile}
-   */
-  this.interimTile = null;
-
-  /**
-   * A key assigned to the tile. This is used by the tile source to determine
-   * if this tile can effectively be used, or if a new tile should be created
-   * and this one be used as an interim tile for this new tile.
-   * @type {string}
-   */
-  this.key = '';
-
-};
-ol.inherits(ol.Tile, ol.events.EventTarget);
-
-
-/**
- * @protected
- */
-ol.Tile.prototype.changed = function() {
-  this.dispatchEvent(ol.events.EventType.CHANGE);
-};
-
-
-/**
- * Get the HTML image element for this tile (may be a Canvas, Image, or Video).
- * @abstract
- * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.
- */
-ol.Tile.prototype.getImage = function() {};
-
-
-/**
- * @return {string} Key.
- */
-ol.Tile.prototype.getKey = function() {
-  return this.key + '/' + this.tileCoord;
-};
-
-/**
- * Get the interim tile most suitable for rendering using the chain of interim
- * tiles. This corresponds to the  most recent tile that has been loaded, if no
- * such tile exists, the original tile is returned.
- * @return {!ol.Tile} Best tile for rendering.
- */
-ol.Tile.prototype.getInterimTile = function() {
-  if (!this.interimTile) {
-    //empty chain
-    return this;
-  }
-  var tile = this.interimTile;
-
-  // find the first loaded tile and return it. Since the chain is sorted in
-  // decreasing order of creation time, there is no need to search the remainder
-  // of the list (all those tiles correspond to older requests and will be
-  // cleaned up by refreshInterimChain)
-  do {
-    if (tile.getState() == ol.Tile.State.LOADED) {
-      return tile;
-    }
-    tile = tile.interimTile;
-  } while (tile);
-
-  // we can not find a better tile
-  return this;
-};
-
-/**
- * Goes through the chain of interim tiles and discards sections of the chain
- * that are no longer relevant.
- */
-ol.Tile.prototype.refreshInterimChain = function() {
-  if (!this.interimTile) {
-    return;
-  }
-
-  var tile = this.interimTile;
-  var prev = this;
-
-  do {
-    if (tile.getState() == ol.Tile.State.LOADED) {
-      //we have a loaded tile, we can discard the rest of the list
-      //we would could abort any LOADING tile request
-      //older than this tile (i.e. any LOADING tile following this entry in the chain)
-      tile.interimTile = null;
-      break;
-    } else if (tile.getState() == ol.Tile.State.LOADING) {
-      //keep this LOADING tile any loaded tiles later in the chain are
-      //older than this tile, so we're still interested in the request
-      prev = tile;
-    } else if (tile.getState() == ol.Tile.State.IDLE) {
-      //the head of the list is the most current tile, we don't need
-      //to start any other requests for this chain
-      prev.interimTile = tile.interimTile;
-    } else {
-      prev = tile;
-    }
-    tile = prev.interimTile;
-  } while (tile);
-};
-
-/**
- * Get the tile coordinate for this tile.
- * @return {ol.TileCoord} The tile coordinate.
- * @api
- */
-ol.Tile.prototype.getTileCoord = function() {
-  return this.tileCoord;
-};
-
-
-/**
- * @return {ol.Tile.State} State.
- */
-ol.Tile.prototype.getState = function() {
-  return this.state;
-};
-
-
-/**
- * Load the image or retry if loading previously failed.
- * Loading is taken care of by the tile queue, and calling this method is
- * only needed for preloading or for reloading in case of an error.
- * @abstract
- * @api
- */
-ol.Tile.prototype.load = function() {};
-
-
-/**
- * @enum {number}
- */
-ol.Tile.State = {
-  IDLE: 0,
-  LOADING: 1,
-  LOADED: 2,
-  ERROR: 3,
-  EMPTY: 4,
-  ABORT: 5
-};
-
-goog.provide('ol.structs.PriorityQueue');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.obj');
-
-
-/**
- * Priority queue.
- *
- * The implementation is inspired from the Closure Library's Heap class and
- * Python's heapq module.
- *
- * @see http://closure-library.googlecode.com/svn/docs/closure_goog_structs_heap.js.source.html
- * @see http://hg.python.org/cpython/file/2.7/Lib/heapq.py
- *
- * @constructor
- * @param {function(T): number} priorityFunction Priority function.
- * @param {function(T): string} keyFunction Key function.
- * @struct
- * @template T
- */
-ol.structs.PriorityQueue = function(priorityFunction, keyFunction) {
-
-  /**
-   * @type {function(T): number}
-   * @private
-   */
-  this.priorityFunction_ = priorityFunction;
-
-  /**
-   * @type {function(T): string}
-   * @private
-   */
-  this.keyFunction_ = keyFunction;
-
-  /**
-   * @type {Array.<T>}
-   * @private
-   */
-  this.elements_ = [];
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.priorities_ = [];
-
-  /**
-   * @type {Object.<string, boolean>}
-   * @private
-   */
-  this.queuedElements_ = {};
-
-};
-
-
-/**
- * @const
- * @type {number}
- */
-ol.structs.PriorityQueue.DROP = Infinity;
-
-
-if (ol.DEBUG) {
-  /**
-   * FIXME empty description for jsdoc
-   */
-  ol.structs.PriorityQueue.prototype.assertValid = function() {
-    var elements = this.elements_;
-    var priorities = this.priorities_;
-    var n = elements.length;
-    console.assert(priorities.length == n);
-    var i, priority;
-    for (i = 0; i < (n >> 1) - 1; ++i) {
-      priority = priorities[i];
-      console.assert(priority <= priorities[this.getLeftChildIndex_(i)],
-          'priority smaller than or equal to priority of left child (%s <= %s)',
-          priority, priorities[this.getLeftChildIndex_(i)]);
-      console.assert(priority <= priorities[this.getRightChildIndex_(i)],
-          'priority smaller than or equal to priority of right child (%s <= %s)',
-          priority, priorities[this.getRightChildIndex_(i)]);
-    }
-  };
-}
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.structs.PriorityQueue.prototype.clear = function() {
-  this.elements_.length = 0;
-  this.priorities_.length = 0;
-  ol.obj.clear(this.queuedElements_);
-};
-
-
-/**
- * Remove and return the highest-priority element. O(log N).
- * @return {T} Element.
- */
-ol.structs.PriorityQueue.prototype.dequeue = function() {
-  var elements = this.elements_;
-  ol.DEBUG && console.assert(elements.length > 0,
-      'must have elements in order to be able to dequeue');
-  var priorities = this.priorities_;
-  var element = elements[0];
-  if (elements.length == 1) {
-    elements.length = 0;
-    priorities.length = 0;
-  } else {
-    elements[0] = elements.pop();
-    priorities[0] = priorities.pop();
-    this.siftUp_(0);
-  }
-  var elementKey = this.keyFunction_(element);
-  ol.DEBUG && console.assert(elementKey in this.queuedElements_,
-      'key %s is not listed as queued', elementKey);
-  delete this.queuedElements_[elementKey];
-  return element;
-};
-
-
-/**
- * Enqueue an element. O(log N).
- * @param {T} element Element.
- * @return {boolean} The element was added to the queue.
- */
-ol.structs.PriorityQueue.prototype.enqueue = function(element) {
-  ol.asserts.assert(!(this.keyFunction_(element) in this.queuedElements_),
-      31); // Tried to enqueue an `element` that was already added to the queue
-  var priority = this.priorityFunction_(element);
-  if (priority != ol.structs.PriorityQueue.DROP) {
-    this.elements_.push(element);
-    this.priorities_.push(priority);
-    this.queuedElements_[this.keyFunction_(element)] = true;
-    this.siftDown_(0, this.elements_.length - 1);
-    return true;
-  }
-  return false;
-};
-
-
-/**
- * @return {number} Count.
- */
-ol.structs.PriorityQueue.prototype.getCount = function() {
-  return this.elements_.length;
-};
-
-
-/**
- * Gets the index of the left child of the node at the given index.
- * @param {number} index The index of the node to get the left child for.
- * @return {number} The index of the left child.
- * @private
- */
-ol.structs.PriorityQueue.prototype.getLeftChildIndex_ = function(index) {
-  return index * 2 + 1;
-};
-
-
-/**
- * Gets the index of the right child of the node at the given index.
- * @param {number} index The index of the node to get the right child for.
- * @return {number} The index of the right child.
- * @private
- */
-ol.structs.PriorityQueue.prototype.getRightChildIndex_ = function(index) {
-  return index * 2 + 2;
-};
-
-
-/**
- * Gets the index of the parent of the node at the given index.
- * @param {number} index The index of the node to get the parent for.
- * @return {number} The index of the parent.
- * @private
- */
-ol.structs.PriorityQueue.prototype.getParentIndex_ = function(index) {
-  return (index - 1) >> 1;
-};
-
-
-/**
- * Make this a heap. O(N).
- * @private
- */
-ol.structs.PriorityQueue.prototype.heapify_ = function() {
-  var i;
-  for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {
-    this.siftUp_(i);
-  }
-};
-
-
-/**
- * @return {boolean} Is empty.
- */
-ol.structs.PriorityQueue.prototype.isEmpty = function() {
-  return this.elements_.length === 0;
-};
-
-
-/**
- * @param {string} key Key.
- * @return {boolean} Is key queued.
- */
-ol.structs.PriorityQueue.prototype.isKeyQueued = function(key) {
-  return key in this.queuedElements_;
-};
-
-
-/**
- * @param {T} element Element.
- * @return {boolean} Is queued.
- */
-ol.structs.PriorityQueue.prototype.isQueued = function(element) {
-  return this.isKeyQueued(this.keyFunction_(element));
-};
-
-
-/**
- * @param {number} index The index of the node to move down.
- * @private
- */
-ol.structs.PriorityQueue.prototype.siftUp_ = function(index) {
-  var elements = this.elements_;
-  var priorities = this.priorities_;
-  var count = elements.length;
-  var element = elements[index];
-  var priority = priorities[index];
-  var startIndex = index;
-
-  while (index < (count >> 1)) {
-    var lIndex = this.getLeftChildIndex_(index);
-    var rIndex = this.getRightChildIndex_(index);
-
-    var smallerChildIndex = rIndex < count &&
-        priorities[rIndex] < priorities[lIndex] ?
-        rIndex : lIndex;
-
-    elements[index] = elements[smallerChildIndex];
-    priorities[index] = priorities[smallerChildIndex];
-    index = smallerChildIndex;
-  }
-
-  elements[index] = element;
-  priorities[index] = priority;
-  this.siftDown_(startIndex, index);
-};
-
-
-/**
- * @param {number} startIndex The index of the root.
- * @param {number} index The index of the node to move up.
- * @private
- */
-ol.structs.PriorityQueue.prototype.siftDown_ = function(startIndex, index) {
-  var elements = this.elements_;
-  var priorities = this.priorities_;
-  var element = elements[index];
-  var priority = priorities[index];
-
-  while (index > startIndex) {
-    var parentIndex = this.getParentIndex_(index);
-    if (priorities[parentIndex] > priority) {
-      elements[index] = elements[parentIndex];
-      priorities[index] = priorities[parentIndex];
-      index = parentIndex;
-    } else {
-      break;
-    }
-  }
-  elements[index] = element;
-  priorities[index] = priority;
-};
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.structs.PriorityQueue.prototype.reprioritize = function() {
-  var priorityFunction = this.priorityFunction_;
-  var elements = this.elements_;
-  var priorities = this.priorities_;
-  var index = 0;
-  var n = elements.length;
-  var element, i, priority;
-  for (i = 0; i < n; ++i) {
-    element = elements[i];
-    priority = priorityFunction(element);
-    if (priority == ol.structs.PriorityQueue.DROP) {
-      delete this.queuedElements_[this.keyFunction_(element)];
-    } else {
-      priorities[index] = priority;
-      elements[index++] = element;
-    }
-  }
-  elements.length = index;
-  priorities.length = index;
-  this.heapify_();
-};
-
-goog.provide('ol.TileQueue');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.structs.PriorityQueue');
-
-
-/**
- * @constructor
- * @extends {ol.structs.PriorityQueue.<Array>}
- * @param {ol.TilePriorityFunction} tilePriorityFunction
- *     Tile priority function.
- * @param {function(): ?} tileChangeCallback
- *     Function called on each tile change event.
- * @struct
- */
-ol.TileQueue = function(tilePriorityFunction, tileChangeCallback) {
-
-  ol.structs.PriorityQueue.call(
-      this,
-      /**
-       * @param {Array} element Element.
-       * @return {number} Priority.
-       */
-      function(element) {
-        return tilePriorityFunction.apply(null, element);
-      },
-      /**
-       * @param {Array} element Element.
-       * @return {string} Key.
-       */
-      function(element) {
-        return /** @type {ol.Tile} */ (element[0]).getKey();
-      });
-
-  /**
-   * @private
-   * @type {function(): ?}
-   */
-  this.tileChangeCallback_ = tileChangeCallback;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.tilesLoading_ = 0;
-
-  /**
-   * @private
-   * @type {!Object.<string,boolean>}
-   */
-  this.tilesLoadingKeys_ = {};
-
-};
-ol.inherits(ol.TileQueue, ol.structs.PriorityQueue);
-
-
-/**
- * @inheritDoc
- */
-ol.TileQueue.prototype.enqueue = function(element) {
-  var added = ol.structs.PriorityQueue.prototype.enqueue.call(this, element);
-  if (added) {
-    var tile = element[0];
-    ol.events.listen(tile, ol.events.EventType.CHANGE,
-        this.handleTileChange, this);
-  }
-  return added;
-};
-
-
-/**
- * @return {number} Number of tiles loading.
- */
-ol.TileQueue.prototype.getTilesLoading = function() {
-  return this.tilesLoading_;
-};
-
-
-/**
- * @param {ol.events.Event} event Event.
- * @protected
- */
-ol.TileQueue.prototype.handleTileChange = function(event) {
-  var tile = /** @type {ol.Tile} */ (event.target);
-  var state = tile.getState();
-  if (state === ol.Tile.State.LOADED || state === ol.Tile.State.ERROR ||
-      state === ol.Tile.State.EMPTY || state === ol.Tile.State.ABORT) {
-    ol.events.unlisten(tile, ol.events.EventType.CHANGE,
-        this.handleTileChange, this);
-    var tileKey = tile.getKey();
-    if (tileKey in this.tilesLoadingKeys_) {
-      delete this.tilesLoadingKeys_[tileKey];
-      --this.tilesLoading_;
-    }
-    this.tileChangeCallback_();
-  }
-  ol.DEBUG && console.assert(Object.keys(this.tilesLoadingKeys_).length === this.tilesLoading_);
-};
-
-
-/**
- * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.
- * @param {number} maxNewLoads Maximum number of new tiles to load.
- */
-ol.TileQueue.prototype.loadMoreTiles = function(maxTotalLoading, maxNewLoads) {
-  var newLoads = 0;
-  var tile, tileKey;
-  while (this.tilesLoading_ < maxTotalLoading && newLoads < maxNewLoads &&
-         this.getCount() > 0) {
-    tile = /** @type {ol.Tile} */ (this.dequeue()[0]);
-    tileKey = tile.getKey();
-    if (tile.getState() === ol.Tile.State.IDLE && !(tileKey in this.tilesLoadingKeys_)) {
-      this.tilesLoadingKeys_[tileKey] = true;
-      ++this.tilesLoading_;
-      ++newLoads;
-      tile.load();
-    }
-    ol.DEBUG && console.assert(Object.keys(this.tilesLoadingKeys_).length === this.tilesLoading_);
-  }
-};
-
-goog.provide('ol.Kinetic');
-
-goog.require('ol.animation');
-
-
-/**
- * @classdesc
- * Implementation of inertial deceleration for map movement.
- *
- * @constructor
- * @param {number} decay Rate of decay (must be negative).
- * @param {number} minVelocity Minimum velocity (pixels/millisecond).
- * @param {number} delay Delay to consider to calculate the kinetic
- *     initial values (milliseconds).
- * @struct
- * @api
- */
-ol.Kinetic = function(decay, minVelocity, delay) {
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.decay_ = decay;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.minVelocity_ = minVelocity;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.delay_ = delay;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.points_ = [];
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.angle_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.initialVelocity_ = 0;
-};
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.Kinetic.prototype.begin = function() {
-  this.points_.length = 0;
-  this.angle_ = 0;
-  this.initialVelocity_ = 0;
-};
-
-
-/**
- * @param {number} x X.
- * @param {number} y Y.
- */
-ol.Kinetic.prototype.update = function(x, y) {
-  this.points_.push(x, y, Date.now());
-};
-
-
-/**
- * @return {boolean} Whether we should do kinetic animation.
- */
-ol.Kinetic.prototype.end = function() {
-  if (this.points_.length < 6) {
-    // at least 2 points are required (i.e. there must be at least 6 elements
-    // in the array)
-    return false;
-  }
-  var delay = Date.now() - this.delay_;
-  var lastIndex = this.points_.length - 3;
-  if (this.points_[lastIndex + 2] < delay) {
-    // the last tracked point is too old, which means that the user stopped
-    // panning before releasing the map
-    return false;
-  }
-
-  // get the first point which still falls into the delay time
-  var firstIndex = lastIndex - 3;
-  while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {
-    firstIndex -= 3;
-  }
-  var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];
-  var dx = this.points_[lastIndex] - this.points_[firstIndex];
-  var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];
-  this.angle_ = Math.atan2(dy, dx);
-  this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;
-  return this.initialVelocity_ > this.minVelocity_;
-};
-
-
-/**
- * @param {ol.Coordinate} source Source coordinate for the animation.
- * @return {ol.PreRenderFunction} Pre-render function for kinetic animation.
- */
-ol.Kinetic.prototype.pan = function(source) {
-  var decay = this.decay_;
-  var initialVelocity = this.initialVelocity_;
-  var velocity = this.minVelocity_ - initialVelocity;
-  var duration = this.getDuration_();
-  var easingFunction = (
-      /**
-       * @param {number} t T.
-       * @return {number} Easing.
-       */
-      function(t) {
-        return initialVelocity * (Math.exp((decay * t) * duration) - 1) /
-            velocity;
-      });
-  return ol.animation.pan({
-    source: source,
-    duration: duration,
-    easing: easingFunction
-  });
-};
-
-
-/**
- * @private
- * @return {number} Duration of animation (milliseconds).
- */
-ol.Kinetic.prototype.getDuration_ = function() {
-  return Math.log(this.minVelocity_ / this.initialVelocity_) / this.decay_;
-};
-
-
-/**
- * @return {number} Total distance travelled (pixels).
- */
-ol.Kinetic.prototype.getDistance = function() {
-  return (this.minVelocity_ - this.initialVelocity_) / this.decay_;
-};
-
-
-/**
- * @return {number} Angle of the kinetic panning animation (radians).
- */
-ol.Kinetic.prototype.getAngle = function() {
-  return this.angle_;
-};
-
-// FIXME factor out key precondition (shift et. al)
-
-goog.provide('ol.interaction.Interaction');
-
-goog.require('ol');
-goog.require('ol.Object');
-goog.require('ol.animation');
-goog.require('ol.easing');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * User actions that change the state of the map. Some are similar to controls,
- * but are not associated with a DOM element.
- * For example, {@link ol.interaction.KeyboardZoom} is functionally the same as
- * {@link ol.control.Zoom}, but triggered by a keyboard event not a button
- * element event.
- * Although interactions do not have a DOM element, some of them do render
- * vectors and so are visible on the screen.
- *
- * @constructor
- * @param {olx.interaction.InteractionOptions} options Options.
- * @extends {ol.Object}
- * @api
- */
-ol.interaction.Interaction = function(options) {
-
-  ol.Object.call(this);
-
-  /**
-   * @private
-   * @type {ol.Map}
-   */
-  this.map_ = null;
-
-  this.setActive(true);
-
-  /**
-   * @type {function(ol.MapBrowserEvent):boolean}
-   */
-  this.handleEvent = options.handleEvent;
-
-};
-ol.inherits(ol.interaction.Interaction, ol.Object);
-
-
-/**
- * Return whether the interaction is currently active.
- * @return {boolean} `true` if the interaction is active, `false` otherwise.
- * @observable
- * @api
- */
-ol.interaction.Interaction.prototype.getActive = function() {
-  return /** @type {boolean} */ (
-      this.get(ol.interaction.Interaction.Property.ACTIVE));
-};
-
-
-/**
- * Get the map associated with this interaction.
- * @return {ol.Map} Map.
- * @api
- */
-ol.interaction.Interaction.prototype.getMap = function() {
-  return this.map_;
-};
-
-
-/**
- * Activate or deactivate the interaction.
- * @param {boolean} active Active.
- * @observable
- * @api
- */
-ol.interaction.Interaction.prototype.setActive = function(active) {
-  this.set(ol.interaction.Interaction.Property.ACTIVE, active);
-};
-
-
-/**
- * Remove the interaction from its current map and attach it to the new map.
- * Subclasses may set up event handlers to get notified about changes to
- * the map here.
- * @param {ol.Map} map Map.
- */
-ol.interaction.Interaction.prototype.setMap = function(map) {
-  this.map_ = map;
-};
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {ol.View} view View.
- * @param {ol.Coordinate} delta Delta.
- * @param {number=} opt_duration Duration.
- */
-ol.interaction.Interaction.pan = function(map, view, delta, opt_duration) {
-  var currentCenter = view.getCenter();
-  if (currentCenter) {
-    if (opt_duration && opt_duration > 0) {
-      map.beforeRender(ol.animation.pan({
-        source: currentCenter,
-        duration: opt_duration,
-        easing: ol.easing.linear
-      }));
-    }
-    var center = view.constrainCenter(
-        [currentCenter[0] + delta[0], currentCenter[1] + delta[1]]);
-    view.setCenter(center);
-  }
-};
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {ol.View} view View.
- * @param {number|undefined} rotation Rotation.
- * @param {ol.Coordinate=} opt_anchor Anchor coordinate.
- * @param {number=} opt_duration Duration.
- */
-ol.interaction.Interaction.rotate = function(map, view, rotation, opt_anchor, opt_duration) {
-  rotation = view.constrainRotation(rotation, 0);
-  ol.interaction.Interaction.rotateWithoutConstraints(
-      map, view, rotation, opt_anchor, opt_duration);
-};
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {ol.View} view View.
- * @param {number|undefined} rotation Rotation.
- * @param {ol.Coordinate=} opt_anchor Anchor coordinate.
- * @param {number=} opt_duration Duration.
- */
-ol.interaction.Interaction.rotateWithoutConstraints = function(map, view, rotation, opt_anchor, opt_duration) {
-  if (rotation !== undefined) {
-    var currentRotation = view.getRotation();
-    var currentCenter = view.getCenter();
-    if (currentRotation !== undefined && currentCenter &&
-        opt_duration && opt_duration > 0) {
-      map.beforeRender(ol.animation.rotate({
-        rotation: currentRotation,
-        duration: opt_duration,
-        easing: ol.easing.easeOut
-      }));
-      if (opt_anchor) {
-        map.beforeRender(ol.animation.pan({
-          source: currentCenter,
-          duration: opt_duration,
-          easing: ol.easing.easeOut
-        }));
-      }
-    }
-    view.rotate(rotation, opt_anchor);
-  }
-};
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {ol.View} view View.
- * @param {number|undefined} resolution Resolution to go to.
- * @param {ol.Coordinate=} opt_anchor Anchor coordinate.
- * @param {number=} opt_duration Duration.
- * @param {number=} opt_direction Zooming direction; > 0 indicates
- *     zooming out, in which case the constraints system will select
- *     the largest nearest resolution; < 0 indicates zooming in, in
- *     which case the constraints system will select the smallest
- *     nearest resolution; == 0 indicates that the zooming direction
- *     is unknown/not relevant, in which case the constraints system
- *     will select the nearest resolution. If not defined 0 is
- *     assumed.
- */
-ol.interaction.Interaction.zoom = function(map, view, resolution, opt_anchor, opt_duration, opt_direction) {
-  resolution = view.constrainResolution(resolution, 0, opt_direction);
-  ol.interaction.Interaction.zoomWithoutConstraints(
-      map, view, resolution, opt_anchor, opt_duration);
-};
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {ol.View} view View.
- * @param {number} delta Delta from previous zoom level.
- * @param {ol.Coordinate=} opt_anchor Anchor coordinate.
- * @param {number=} opt_duration Duration.
- */
-ol.interaction.Interaction.zoomByDelta = function(map, view, delta, opt_anchor, opt_duration) {
-  var currentResolution = view.getResolution();
-  var resolution = view.constrainResolution(currentResolution, delta, 0);
-  ol.interaction.Interaction.zoomWithoutConstraints(
-      map, view, resolution, opt_anchor, opt_duration);
-};
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {ol.View} view View.
- * @param {number|undefined} resolution Resolution to go to.
- * @param {ol.Coordinate=} opt_anchor Anchor coordinate.
- * @param {number=} opt_duration Duration.
- */
-ol.interaction.Interaction.zoomWithoutConstraints = function(map, view, resolution, opt_anchor, opt_duration) {
-  if (resolution) {
-    var currentResolution = view.getResolution();
-    var currentCenter = view.getCenter();
-    if (currentResolution !== undefined && currentCenter &&
-        resolution !== currentResolution &&
-        opt_duration && opt_duration > 0) {
-      map.beforeRender(ol.animation.zoom({
-        resolution: currentResolution,
-        duration: opt_duration,
-        easing: ol.easing.easeOut
-      }));
-      if (opt_anchor) {
-        map.beforeRender(ol.animation.pan({
-          source: currentCenter,
-          duration: opt_duration,
-          easing: ol.easing.easeOut
-        }));
-      }
-    }
-    if (opt_anchor) {
-      var center = view.calculateCenterZoom(resolution, opt_anchor);
-      view.setCenter(center);
-    }
-    view.setResolution(resolution);
-  }
-};
-
-
-/**
- * @enum {string}
- */
-ol.interaction.Interaction.Property = {
-  ACTIVE: 'active'
-};
-
-goog.provide('ol.interaction.DoubleClickZoom');
-
-goog.require('ol');
-goog.require('ol.MapBrowserEvent.EventType');
-goog.require('ol.interaction.Interaction');
-
-
-/**
- * @classdesc
- * Allows the user to zoom by double-clicking on the map.
- *
- * @constructor
- * @extends {ol.interaction.Interaction}
- * @param {olx.interaction.DoubleClickZoomOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.DoubleClickZoom = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.delta_ = options.delta ? options.delta : 1;
-
-  ol.interaction.Interaction.call(this, {
-    handleEvent: ol.interaction.DoubleClickZoom.handleEvent
-  });
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 250;
-
-};
-ol.inherits(ol.interaction.DoubleClickZoom, ol.interaction.Interaction);
-
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} (if it was a
- * doubleclick) and eventually zooms the map.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.DoubleClickZoom}
- * @api
- */
-ol.interaction.DoubleClickZoom.handleEvent = function(mapBrowserEvent) {
-  var stopEvent = false;
-  var browserEvent = mapBrowserEvent.originalEvent;
-  if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK) {
-    var map = mapBrowserEvent.map;
-    var anchor = mapBrowserEvent.coordinate;
-    var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;
-    var view = map.getView();
-    ol.interaction.Interaction.zoomByDelta(
-        map, view, delta, anchor, this.duration_);
-    mapBrowserEvent.preventDefault();
-    stopEvent = true;
-  }
-  return !stopEvent;
-};
-
-goog.provide('ol.events.condition');
-
-goog.require('ol.MapBrowserEvent.EventType');
-goog.require('ol.asserts');
-goog.require('ol.functions');
-goog.require('ol.has');
-
-
-/**
- * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when
- * additionally the shift-key is pressed).
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if only the alt key is pressed.
- * @api stable
- */
-ol.events.condition.altKeyOnly = function(mapBrowserEvent) {
-  var originalEvent = mapBrowserEvent.originalEvent;
-  return (
-      originalEvent.altKey &&
-      !(originalEvent.metaKey || originalEvent.ctrlKey) &&
-      !originalEvent.shiftKey);
-};
-
-
-/**
- * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise
- * (e.g. when additionally the platform-modifier-key is pressed).
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if only the alt and shift keys are pressed.
- * @api stable
- */
-ol.events.condition.altShiftKeysOnly = function(mapBrowserEvent) {
-  var originalEvent = mapBrowserEvent.originalEvent;
-  return (
-      originalEvent.altKey &&
-      !(originalEvent.metaKey || originalEvent.ctrlKey) &&
-      originalEvent.shiftKey);
-};
-
-
-/**
- * Return always true.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True.
- * @function
- * @api stable
- */
-ol.events.condition.always = ol.functions.TRUE;
-
-
-/**
- * Return `true` if the event is a `click` event, `false` otherwise.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if the event is a map `click` event.
- * @api stable
- */
-ol.events.condition.click = function(mapBrowserEvent) {
-  return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.CLICK;
-};
-
-
-/**
- * Return `true` if the event has an "action"-producing mouse button.
- *
- * By definition, this includes left-click on windows/linux, and left-click
- * without the ctrl key on Macs.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} The result.
- */
-ol.events.condition.mouseActionButton = function(mapBrowserEvent) {
-  var originalEvent = mapBrowserEvent.originalEvent;
-  return originalEvent.button == 0 &&
-      !(ol.has.WEBKIT && ol.has.MAC && originalEvent.ctrlKey);
-};
-
-
-/**
- * Return always false.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} False.
- * @function
- * @api stable
- */
-ol.events.condition.never = ol.functions.FALSE;
-
-
-/**
- * Return `true` if the browser event is a `pointermove` event, `false`
- * otherwise.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if the browser event is a `pointermove` event.
- * @api
- */
-ol.events.condition.pointerMove = function(mapBrowserEvent) {
-  return mapBrowserEvent.type == 'pointermove';
-};
-
-
-/**
- * Return `true` if the event is a map `singleclick` event, `false` otherwise.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if the event is a map `singleclick` event.
- * @api stable
- */
-ol.events.condition.singleClick = function(mapBrowserEvent) {
-  return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.SINGLECLICK;
-};
-
-
-/**
- * Return `true` if the event is a map `dblclick` event, `false` otherwise.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if the event is a map `dblclick` event.
- * @api stable
- */
-ol.events.condition.doubleClick = function(mapBrowserEvent) {
-  return mapBrowserEvent.type == ol.MapBrowserEvent.EventType.DBLCLICK;
-};
-
-
-/**
- * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is
- * pressed.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True only if there no modifier keys are pressed.
- * @api stable
- */
-ol.events.condition.noModifierKeys = function(mapBrowserEvent) {
-  var originalEvent = mapBrowserEvent.originalEvent;
-  return (
-      !originalEvent.altKey &&
-      !(originalEvent.metaKey || originalEvent.ctrlKey) &&
-      !originalEvent.shiftKey);
-};
-
-
-/**
- * Return `true` if only the platform-modifier-key (the meta-key on Mac,
- * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally
- * the shift-key is pressed).
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if only the platform modifier key is pressed.
- * @api stable
- */
-ol.events.condition.platformModifierKeyOnly = function(mapBrowserEvent) {
-  var originalEvent = mapBrowserEvent.originalEvent;
-  return (
-      !originalEvent.altKey &&
-      (ol.has.MAC ? originalEvent.metaKey : originalEvent.ctrlKey) &&
-      !originalEvent.shiftKey);
-};
-
-
-/**
- * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when
- * additionally the alt-key is pressed).
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if only the shift key is pressed.
- * @api stable
- */
-ol.events.condition.shiftKeyOnly = function(mapBrowserEvent) {
-  var originalEvent = mapBrowserEvent.originalEvent;
-  return (
-      !originalEvent.altKey &&
-      !(originalEvent.metaKey || originalEvent.ctrlKey) &&
-      originalEvent.shiftKey);
-};
-
-
-/**
- * Return `true` if the target element is not editable, i.e. not a `<input>`-,
- * `<select>`- or `<textarea>`-element, `false` otherwise.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True only if the target element is not editable.
- * @api
- */
-ol.events.condition.targetNotEditable = function(mapBrowserEvent) {
-  var target = mapBrowserEvent.originalEvent.target;
-  var tagName = target.tagName;
-  return (
-      tagName !== 'INPUT' &&
-      tagName !== 'SELECT' &&
-      tagName !== 'TEXTAREA');
-};
-
-
-/**
- * Return `true` if the event originates from a mouse device.
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if the event originates from a mouse device.
- * @api stable
- */
-ol.events.condition.mouseOnly = function(mapBrowserEvent) {
-  ol.asserts.assert(mapBrowserEvent.pointerEvent, 56); // mapBrowserEvent must originate from a pointer event
-  // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType
-  return /** @type {ol.MapBrowserEvent} */ (mapBrowserEvent).pointerEvent.pointerType == 'mouse';
-};
-
-
-/**
- * Return `true` if the event originates from a primary pointer in
- * contact with the surface or if the left mouse button is pressed.
- * @see http://www.w3.org/TR/pointerevents/#button-states
- *
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} True if the event originates from a primary pointer.
- * @api
- */
-ol.events.condition.primaryAction = function(mapBrowserEvent) {
-  var pointerEvent = mapBrowserEvent.pointerEvent;
-  return pointerEvent.isPrimary && pointerEvent.button === 0;
-};
-
-goog.provide('ol.interaction.Pointer');
-
-goog.require('ol');
-goog.require('ol.functions');
-goog.require('ol.MapBrowserEvent.EventType');
-goog.require('ol.MapBrowserPointerEvent');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.obj');
-
-
-/**
- * @classdesc
- * Base class that calls user-defined functions on `down`, `move` and `up`
- * events. This class also manages "drag sequences".
- *
- * When the `handleDownEvent` user function returns `true` a drag sequence is
- * started. During a drag sequence the `handleDragEvent` user function is
- * called on `move` events. The drag sequence ends when the `handleUpEvent`
- * user function is called and returns `false`.
- *
- * @constructor
- * @param {olx.interaction.PointerOptions=} opt_options Options.
- * @extends {ol.interaction.Interaction}
- * @api
- */
-ol.interaction.Pointer = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  var handleEvent = options.handleEvent ?
-      options.handleEvent : ol.interaction.Pointer.handleEvent;
-
-  ol.interaction.Interaction.call(this, {
-    handleEvent: handleEvent
-  });
-
-  /**
-   * @type {function(ol.MapBrowserPointerEvent):boolean}
-   * @private
-   */
-  this.handleDownEvent_ = options.handleDownEvent ?
-      options.handleDownEvent : ol.interaction.Pointer.handleDownEvent;
-
-  /**
-   * @type {function(ol.MapBrowserPointerEvent)}
-   * @private
-   */
-  this.handleDragEvent_ = options.handleDragEvent ?
-      options.handleDragEvent : ol.interaction.Pointer.handleDragEvent;
-
-  /**
-   * @type {function(ol.MapBrowserPointerEvent)}
-   * @private
-   */
-  this.handleMoveEvent_ = options.handleMoveEvent ?
-      options.handleMoveEvent : ol.interaction.Pointer.handleMoveEvent;
-
-  /**
-   * @type {function(ol.MapBrowserPointerEvent):boolean}
-   * @private
-   */
-  this.handleUpEvent_ = options.handleUpEvent ?
-      options.handleUpEvent : ol.interaction.Pointer.handleUpEvent;
-
-  /**
-   * @type {boolean}
-   * @protected
-   */
-  this.handlingDownUpSequence = false;
-
-  /**
-   * @type {Object.<number, ol.pointer.PointerEvent>}
-   * @private
-   */
-  this.trackedPointers_ = {};
-
-  /**
-   * @type {Array.<ol.pointer.PointerEvent>}
-   * @protected
-   */
-  this.targetPointers = [];
-
-};
-ol.inherits(ol.interaction.Pointer, ol.interaction.Interaction);
-
-
-/**
- * @param {Array.<ol.pointer.PointerEvent>} pointerEvents List of events.
- * @return {ol.Pixel} Centroid pixel.
- */
-ol.interaction.Pointer.centroid = function(pointerEvents) {
-  var length = pointerEvents.length;
-  var clientX = 0;
-  var clientY = 0;
-  for (var i = 0; i < length; i++) {
-    clientX += pointerEvents[i].clientX;
-    clientY += pointerEvents[i].clientY;
-  }
-  return [clientX / length, clientY / length];
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Whether the event is a pointerdown, pointerdrag
- *     or pointerup event.
- * @private
- */
-ol.interaction.Pointer.prototype.isPointerDraggingEvent_ = function(mapBrowserEvent) {
-  var type = mapBrowserEvent.type;
-  return (
-      type === ol.MapBrowserEvent.EventType.POINTERDOWN ||
-      type === ol.MapBrowserEvent.EventType.POINTERDRAG ||
-      type === ol.MapBrowserEvent.EventType.POINTERUP);
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @private
- */
-ol.interaction.Pointer.prototype.updateTrackedPointers_ = function(mapBrowserEvent) {
-  if (this.isPointerDraggingEvent_(mapBrowserEvent)) {
-    var event = mapBrowserEvent.pointerEvent;
-
-    if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERUP) {
-      delete this.trackedPointers_[event.pointerId];
-    } else if (mapBrowserEvent.type ==
-        ol.MapBrowserEvent.EventType.POINTERDOWN) {
-      this.trackedPointers_[event.pointerId] = event;
-    } else if (event.pointerId in this.trackedPointers_) {
-      // update only when there was a pointerdown event for this pointer
-      this.trackedPointers_[event.pointerId] = event;
-    }
-    this.targetPointers = ol.obj.getValues(this.trackedPointers_);
-  }
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @this {ol.interaction.Pointer}
- */
-ol.interaction.Pointer.handleDragEvent = ol.nullFunction;
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Capture dragging.
- * @this {ol.interaction.Pointer}
- */
-ol.interaction.Pointer.handleUpEvent = ol.functions.FALSE;
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Capture dragging.
- * @this {ol.interaction.Pointer}
- */
-ol.interaction.Pointer.handleDownEvent = ol.functions.FALSE;
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @this {ol.interaction.Pointer}
- */
-ol.interaction.Pointer.handleMoveEvent = ol.nullFunction;
-
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} and may call into
- * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are
- * detected.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.Pointer}
- * @api
- */
-ol.interaction.Pointer.handleEvent = function(mapBrowserEvent) {
-  if (!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) {
-    return true;
-  }
-
-  var stopEvent = false;
-  this.updateTrackedPointers_(mapBrowserEvent);
-  if (this.handlingDownUpSequence) {
-    if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERDRAG) {
-      this.handleDragEvent_(mapBrowserEvent);
-    } else if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERUP) {
-      this.handlingDownUpSequence = this.handleUpEvent_(mapBrowserEvent);
-    }
-  }
-  if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERDOWN) {
-    var handled = this.handleDownEvent_(mapBrowserEvent);
-    this.handlingDownUpSequence = handled;
-    stopEvent = this.shouldStopEvent(handled);
-  } else if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERMOVE) {
-    this.handleMoveEvent_(mapBrowserEvent);
-  }
-  return !stopEvent;
-};
-
-
-/**
- * This method is used to determine if "down" events should be propagated to
- * other interactions or should be stopped.
- *
- * The method receives the return code of the "handleDownEvent" function.
- *
- * By default this function is the "identity" function. It's overidden in
- * child classes.
- *
- * @param {boolean} handled Was the event handled by the interaction?
- * @return {boolean} Should the event be stopped?
- * @protected
- */
-ol.interaction.Pointer.prototype.shouldStopEvent = function(handled) {
-  return handled;
-};
-
-goog.provide('ol.interaction.DragPan');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.coordinate');
-goog.require('ol.events.condition');
-goog.require('ol.functions');
-goog.require('ol.interaction.Pointer');
-
-
-/**
- * @classdesc
- * Allows the user to pan the map by dragging the map.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @param {olx.interaction.DragPanOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.DragPan = function(opt_options) {
-
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.DragPan.handleDownEvent_,
-    handleDragEvent: ol.interaction.DragPan.handleDragEvent_,
-    handleUpEvent: ol.interaction.DragPan.handleUpEvent_
-  });
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {ol.Kinetic|undefined}
-   */
-  this.kinetic_ = options.kinetic;
-
-  /**
-   * @private
-   * @type {?ol.PreRenderFunction}
-   */
-  this.kineticPreRenderFn_ = null;
-
-  /**
-   * @type {ol.Pixel}
-   */
-  this.lastCentroid = null;
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition ?
-      options.condition : ol.events.condition.noModifierKeys;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.noKinetic_ = false;
-
-};
-ol.inherits(ol.interaction.DragPan, ol.interaction.Pointer);
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @this {ol.interaction.DragPan}
- * @private
- */
-ol.interaction.DragPan.handleDragEvent_ = function(mapBrowserEvent) {
-  ol.DEBUG && console.assert(this.targetPointers.length >= 1,
-      'the length of this.targetPointers should be more than 1');
-  var centroid =
-      ol.interaction.Pointer.centroid(this.targetPointers);
-  if (this.kinetic_) {
-    this.kinetic_.update(centroid[0], centroid[1]);
-  }
-  if (this.lastCentroid) {
-    var deltaX = this.lastCentroid[0] - centroid[0];
-    var deltaY = centroid[1] - this.lastCentroid[1];
-    var map = mapBrowserEvent.map;
-    var view = map.getView();
-    var viewState = view.getState();
-    var center = [deltaX, deltaY];
-    ol.coordinate.scale(center, viewState.resolution);
-    ol.coordinate.rotate(center, viewState.rotation);
-    ol.coordinate.add(center, viewState.center);
-    center = view.constrainCenter(center);
-    view.setCenter(center);
-  }
-  this.lastCentroid = centroid;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.DragPan}
- * @private
- */
-ol.interaction.DragPan.handleUpEvent_ = function(mapBrowserEvent) {
-  var map = mapBrowserEvent.map;
-  var view = map.getView();
-  if (this.targetPointers.length === 0) {
-    if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {
-      var distance = this.kinetic_.getDistance();
-      var angle = this.kinetic_.getAngle();
-      var center = /** @type {!ol.Coordinate} */ (view.getCenter());
-      this.kineticPreRenderFn_ = this.kinetic_.pan(center);
-      map.beforeRender(this.kineticPreRenderFn_);
-      var centerpx = map.getPixelFromCoordinate(center);
-      var dest = map.getCoordinateFromPixel([
-        centerpx[0] - distance * Math.cos(angle),
-        centerpx[1] - distance * Math.sin(angle)
-      ]);
-      dest = view.constrainCenter(dest);
-      view.setCenter(dest);
-    } else {
-      // the view is not updated, force a render
-      map.render();
-    }
-    view.setHint(ol.View.Hint.INTERACTING, -1);
-    return false;
-  } else {
-    this.lastCentroid = null;
-    return true;
-  }
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.DragPan}
- * @private
- */
-ol.interaction.DragPan.handleDownEvent_ = function(mapBrowserEvent) {
-  if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {
-    var map = mapBrowserEvent.map;
-    var view = map.getView();
-    this.lastCentroid = null;
-    if (!this.handlingDownUpSequence) {
-      view.setHint(ol.View.Hint.INTERACTING, 1);
-    }
-    if (this.kineticPreRenderFn_ &&
-        map.removePreRenderFunction(this.kineticPreRenderFn_)) {
-      view.setCenter(mapBrowserEvent.frameState.viewState.center);
-      this.kineticPreRenderFn_ = null;
-    }
-    if (this.kinetic_) {
-      this.kinetic_.begin();
-    }
-    // No kinetic as soon as more than one pointer on the screen is
-    // detected. This is to prevent nasty pans after pinch.
-    this.noKinetic_ = this.targetPointers.length > 1;
-    return true;
-  } else {
-    return false;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.DragPan.prototype.shouldStopEvent = ol.functions.FALSE;
-
-goog.provide('ol.interaction.DragRotate');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.events.condition');
-goog.require('ol.functions');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.interaction.Pointer');
-
-
-/**
- * @classdesc
- * Allows the user to rotate the map by clicking and dragging on the map,
- * normally combined with an {@link ol.events.condition} that limits
- * it to when the alt and shift keys are held down.
- *
- * This interaction is only supported for mouse devices.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @param {olx.interaction.DragRotateOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.DragRotate = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.DragRotate.handleDownEvent_,
-    handleDragEvent: ol.interaction.DragRotate.handleDragEvent_,
-    handleUpEvent: ol.interaction.DragRotate.handleUpEvent_
-  });
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition ?
-      options.condition : ol.events.condition.altShiftKeysOnly;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.lastAngle_ = undefined;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 250;
-};
-ol.inherits(ol.interaction.DragRotate, ol.interaction.Pointer);
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @this {ol.interaction.DragRotate}
- * @private
- */
-ol.interaction.DragRotate.handleDragEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return;
-  }
-
-  var map = mapBrowserEvent.map;
-  var size = map.getSize();
-  var offset = mapBrowserEvent.pixel;
-  var theta =
-      Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);
-  if (this.lastAngle_ !== undefined) {
-    var delta = theta - this.lastAngle_;
-    var view = map.getView();
-    var rotation = view.getRotation();
-    ol.interaction.Interaction.rotateWithoutConstraints(
-        map, view, rotation - delta);
-  }
-  this.lastAngle_ = theta;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.DragRotate}
- * @private
- */
-ol.interaction.DragRotate.handleUpEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return true;
-  }
-
-  var map = mapBrowserEvent.map;
-  var view = map.getView();
-  view.setHint(ol.View.Hint.INTERACTING, -1);
-  var rotation = view.getRotation();
-  ol.interaction.Interaction.rotate(map, view, rotation,
-      undefined, this.duration_);
-  return false;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.DragRotate}
- * @private
- */
-ol.interaction.DragRotate.handleDownEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return false;
-  }
-
-  if (ol.events.condition.mouseActionButton(mapBrowserEvent) &&
-      this.condition_(mapBrowserEvent)) {
-    var map = mapBrowserEvent.map;
-    map.getView().setHint(ol.View.Hint.INTERACTING, 1);
-    this.lastAngle_ = undefined;
-    return true;
-  } else {
-    return false;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.DragRotate.prototype.shouldStopEvent = ol.functions.FALSE;
-
-// FIXME add rotation
-
-goog.provide('ol.render.Box');
-
-goog.require('ol');
-goog.require('ol.Disposable');
-goog.require('ol.geom.Polygon');
-
-
-/**
- * @constructor
- * @extends {ol.Disposable}
- * @param {string} className CSS class name.
- */
-ol.render.Box = function(className) {
-
-  /**
-   * @type {ol.geom.Polygon}
-   * @private
-   */
-  this.geometry_ = null;
-
-  /**
-   * @type {HTMLDivElement}
-   * @private
-   */
-  this.element_ = /** @type {HTMLDivElement} */ (document.createElement('div'));
-  this.element_.style.position = 'absolute';
-  this.element_.className = 'ol-box ' + className;
-
-  /**
-   * @private
-   * @type {ol.Map}
-   */
-  this.map_ = null;
-
-  /**
-   * @private
-   * @type {ol.Pixel}
-   */
-  this.startPixel_ = null;
-
-  /**
-   * @private
-   * @type {ol.Pixel}
-   */
-  this.endPixel_ = null;
-
-};
-ol.inherits(ol.render.Box, ol.Disposable);
-
-
-/**
- * @inheritDoc
- */
-ol.render.Box.prototype.disposeInternal = function() {
-  this.setMap(null);
-};
-
-
-/**
- * @private
- */
-ol.render.Box.prototype.render_ = function() {
-  var startPixel = this.startPixel_;
-  var endPixel = this.endPixel_;
-  var px = 'px';
-  var style = this.element_.style;
-  style.left = Math.min(startPixel[0], endPixel[0]) + px;
-  style.top = Math.min(startPixel[1], endPixel[1]) + px;
-  style.width = Math.abs(endPixel[0] - startPixel[0]) + px;
-  style.height = Math.abs(endPixel[1] - startPixel[1]) + px;
-};
-
-
-/**
- * @param {ol.Map} map Map.
- */
-ol.render.Box.prototype.setMap = function(map) {
-  if (this.map_) {
-    this.map_.getOverlayContainer().removeChild(this.element_);
-    var style = this.element_.style;
-    style.left = style.top = style.width = style.height = 'inherit';
-  }
-  this.map_ = map;
-  if (this.map_) {
-    this.map_.getOverlayContainer().appendChild(this.element_);
-  }
-};
-
-
-/**
- * @param {ol.Pixel} startPixel Start pixel.
- * @param {ol.Pixel} endPixel End pixel.
- */
-ol.render.Box.prototype.setPixels = function(startPixel, endPixel) {
-  this.startPixel_ = startPixel;
-  this.endPixel_ = endPixel;
-  this.createOrUpdateGeometry();
-  this.render_();
-};
-
-
-/**
- * Creates or updates the cached geometry.
- */
-ol.render.Box.prototype.createOrUpdateGeometry = function() {
-  var startPixel = this.startPixel_;
-  var endPixel = this.endPixel_;
-  var pixels = [
-    startPixel,
-    [startPixel[0], endPixel[1]],
-    endPixel,
-    [endPixel[0], startPixel[1]]
-  ];
-  var coordinates = pixels.map(this.map_.getCoordinateFromPixel, this.map_);
-  // close the polygon
-  coordinates[4] = coordinates[0].slice();
-  if (!this.geometry_) {
-    this.geometry_ = new ol.geom.Polygon([coordinates]);
-  } else {
-    this.geometry_.setCoordinates([coordinates]);
-  }
-};
-
-
-/**
- * @return {ol.geom.Polygon} Geometry.
- */
-ol.render.Box.prototype.getGeometry = function() {
-  return this.geometry_;
-};
-
-// FIXME draw drag box
-goog.provide('ol.interaction.DragBox');
-
-goog.require('ol.events.Event');
-goog.require('ol');
-goog.require('ol.events.condition');
-goog.require('ol.interaction.Pointer');
-goog.require('ol.render.Box');
-
-
-/**
- * @const
- * @type {number}
- */
-ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED =
-    ol.DRAG_BOX_HYSTERESIS_PIXELS *
-    ol.DRAG_BOX_HYSTERESIS_PIXELS;
-
-
-/**
- * @classdesc
- * Allows the user to draw a vector box by clicking and dragging on the map,
- * normally combined with an {@link ol.events.condition} that limits
- * it to when the shift or other key is held down. This is used, for example,
- * for zooming to a specific area of the map
- * (see {@link ol.interaction.DragZoom} and
- * {@link ol.interaction.DragRotateAndZoom}).
- *
- * This interaction is only supported for mouse devices.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @fires ol.interaction.DragBox.Event
- * @param {olx.interaction.DragBoxOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.DragBox = function(opt_options) {
-
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.DragBox.handleDownEvent_,
-    handleDragEvent: ol.interaction.DragBox.handleDragEvent_,
-    handleUpEvent: ol.interaction.DragBox.handleUpEvent_
-  });
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @type {ol.render.Box}
-   * @private
-   */
-  this.box_ = new ol.render.Box(options.className || 'ol-dragbox');
-
-  /**
-   * @type {ol.Pixel}
-   * @private
-   */
-  this.startPixel_ = null;
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition ?
-      options.condition : ol.events.condition.always;
-
-  /**
-   * @private
-   * @type {ol.DragBoxEndConditionType}
-   */
-  this.boxEndCondition_ = options.boxEndCondition ?
-      options.boxEndCondition : ol.interaction.DragBox.defaultBoxEndCondition;
-};
-ol.inherits(ol.interaction.DragBox, ol.interaction.Pointer);
-
-
-/**
- * The default condition for determining whether the boxend event
- * should fire.
- * @param  {ol.MapBrowserEvent} mapBrowserEvent The originating MapBrowserEvent
- *  leading to the box end.
- * @param  {ol.Pixel} startPixel      The starting pixel of the box.
- * @param  {ol.Pixel} endPixel        The end pixel of the box.
- * @return {boolean} Whether or not the boxend condition should be fired.
- */
-ol.interaction.DragBox.defaultBoxEndCondition = function(mapBrowserEvent,
-    startPixel, endPixel) {
-  var width = endPixel[0] - startPixel[0];
-  var height = endPixel[1] - startPixel[1];
-  return width * width + height * height >=
-      ol.DRAG_BOX_HYSTERESIS_PIXELS_SQUARED;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @this {ol.interaction.DragBox}
- * @private
- */
-ol.interaction.DragBox.handleDragEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return;
-  }
-
-  this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);
-
-  this.dispatchEvent(new ol.interaction.DragBox.Event(ol.interaction.DragBox.EventType.BOXDRAG,
-    mapBrowserEvent.coordinate, mapBrowserEvent));
-};
-
-
-/**
- * Returns geometry of last drawn box.
- * @return {ol.geom.Polygon} Geometry.
- * @api stable
- */
-ol.interaction.DragBox.prototype.getGeometry = function() {
-  return this.box_.getGeometry();
-};
-
-
-/**
- * To be overriden by child classes.
- * FIXME: use constructor option instead of relying on overridding.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @protected
- */
-ol.interaction.DragBox.prototype.onBoxEnd = ol.nullFunction;
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.DragBox}
- * @private
- */
-ol.interaction.DragBox.handleUpEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return true;
-  }
-
-  this.box_.setMap(null);
-
-  if (this.boxEndCondition_(mapBrowserEvent,
-      this.startPixel_, mapBrowserEvent.pixel)) {
-    this.onBoxEnd(mapBrowserEvent);
-    this.dispatchEvent(new ol.interaction.DragBox.Event(ol.interaction.DragBox.EventType.BOXEND,
-        mapBrowserEvent.coordinate, mapBrowserEvent));
-  }
-  return false;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.DragBox}
- * @private
- */
-ol.interaction.DragBox.handleDownEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return false;
-  }
-
-  if (ol.events.condition.mouseActionButton(mapBrowserEvent) &&
-      this.condition_(mapBrowserEvent)) {
-    this.startPixel_ = mapBrowserEvent.pixel;
-    this.box_.setMap(mapBrowserEvent.map);
-    this.box_.setPixels(this.startPixel_, this.startPixel_);
-    this.dispatchEvent(new ol.interaction.DragBox.Event(ol.interaction.DragBox.EventType.BOXSTART,
-        mapBrowserEvent.coordinate, mapBrowserEvent));
-    return true;
-  } else {
-    return false;
-  }
-};
-
-
-/**
- * @enum {string}
- */
-ol.interaction.DragBox.EventType = {
-  /**
-   * Triggered upon drag box start.
-   * @event ol.interaction.DragBox.Event#boxstart
-   * @api stable
-   */
-  BOXSTART: 'boxstart',
-
-  /**
-   * Triggered on drag when box is active.
-   * @event ol.interaction.DragBox.Event#boxdrag
-   * @api
-   */
-  BOXDRAG: 'boxdrag',
-
-  /**
-   * Triggered upon drag box end.
-   * @event ol.interaction.DragBox.Event#boxend
-   * @api stable
-   */
-  BOXEND: 'boxend'
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.interaction.DragBox} instances are instances of
- * this type.
- *
- * @param {string} type The event type.
- * @param {ol.Coordinate} coordinate The event coordinate.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Originating event.
- * @extends {ol.events.Event}
- * @constructor
- * @implements {oli.DragBoxEvent}
- */
-ol.interaction.DragBox.Event = function(type, coordinate, mapBrowserEvent) {
-  ol.events.Event.call(this, type);
-
-  /**
-   * The coordinate of the drag event.
-   * @const
-   * @type {ol.Coordinate}
-   * @api stable
-   */
-  this.coordinate = coordinate;
-
-  /**
-   * @const
-   * @type {ol.MapBrowserEvent}
-   * @api
-   */
-  this.mapBrowserEvent = mapBrowserEvent;
-
-};
-ol.inherits(ol.interaction.DragBox.Event, ol.events.Event);
-
-goog.provide('ol.interaction.DragZoom');
-
-goog.require('ol');
-goog.require('ol.animation');
-goog.require('ol.easing');
-goog.require('ol.events.condition');
-goog.require('ol.extent');
-goog.require('ol.interaction.DragBox');
-
-
-/**
- * @classdesc
- * Allows the user to zoom the map by clicking and dragging on the map,
- * normally combined with an {@link ol.events.condition} that limits
- * it to when a key, shift by default, is held down.
- *
- * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or
- * your custom one configured with `className`.
- *
- * @constructor
- * @extends {ol.interaction.DragBox}
- * @param {olx.interaction.DragZoomOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.DragZoom = function(opt_options) {
-  var options = opt_options ? opt_options : {};
-
-  var condition = options.condition ?
-      options.condition : ol.events.condition.shiftKeyOnly;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 200;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.out_ = options.out !== undefined ? options.out : false;
-
-  ol.interaction.DragBox.call(this, {
-    condition: condition,
-    className: options.className || 'ol-dragzoom'
-  });
-
-};
-ol.inherits(ol.interaction.DragZoom, ol.interaction.DragBox);
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.DragZoom.prototype.onBoxEnd = function() {
-  var map = this.getMap();
-
-  var view = /** @type {!ol.View} */ (map.getView());
-
-  var size = /** @type {!ol.Size} */ (map.getSize());
-
-  var extent = this.getGeometry().getExtent();
-
-  if (this.out_) {
-    var mapExtent = view.calculateExtent(size);
-    var boxPixelExtent = ol.extent.createOrUpdateFromCoordinates([
-      map.getPixelFromCoordinate(ol.extent.getBottomLeft(extent)),
-      map.getPixelFromCoordinate(ol.extent.getTopRight(extent))]);
-    var factor = view.getResolutionForExtent(boxPixelExtent, size);
-
-    ol.extent.scaleFromCenter(mapExtent, 1 / factor);
-    extent = mapExtent;
-  }
-
-  var resolution = view.constrainResolution(
-      view.getResolutionForExtent(extent, size));
-
-  var currentResolution = /** @type {number} */ (view.getResolution());
-
-  var currentCenter = /** @type {!ol.Coordinate} */ (view.getCenter());
-
-  map.beforeRender(ol.animation.zoom({
-    resolution: currentResolution,
-    duration: this.duration_,
-    easing: ol.easing.easeOut
-  }));
-  map.beforeRender(ol.animation.pan({
-    source: currentCenter,
-    duration: this.duration_,
-    easing: ol.easing.easeOut
-  }));
-
-  view.setCenter(ol.extent.getCenter(extent));
-  view.setResolution(resolution);
-};
-
-goog.provide('ol.events.KeyCode');
-
-/**
- * @enum {number}
- * @const
- */
-ol.events.KeyCode = {
-  LEFT: 37,
-  UP: 38,
-  RIGHT: 39,
-  DOWN: 40
-};
-
-goog.provide('ol.interaction.KeyboardPan');
-
-goog.require('ol');
-goog.require('ol.coordinate');
-goog.require('ol.events.EventType');
-goog.require('ol.events.KeyCode');
-goog.require('ol.events.condition');
-goog.require('ol.interaction.Interaction');
-
-
-/**
- * @classdesc
- * Allows the user to pan the map using keyboard arrows.
- * Note that, although this interaction is by default included in maps,
- * the keys can only be used when browser focus is on the element to which
- * the keyboard events are attached. By default, this is the map div,
- * though you can change this with the `keyboardEventTarget` in
- * {@link ol.Map}. `document` never loses focus but, for any other element,
- * focus will have to be on, and returned to, this element if the keys are to
- * function.
- * See also {@link ol.interaction.KeyboardZoom}.
- *
- * @constructor
- * @extends {ol.interaction.Interaction}
- * @param {olx.interaction.KeyboardPanOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.KeyboardPan = function(opt_options) {
-
-  ol.interaction.Interaction.call(this, {
-    handleEvent: ol.interaction.KeyboardPan.handleEvent
-  });
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @param {ol.MapBrowserEvent} mapBrowserEvent Browser event.
-   * @return {boolean} Combined condition result.
-   */
-  this.defaultCondition_ = function(mapBrowserEvent) {
-    return ol.events.condition.noModifierKeys(mapBrowserEvent) &&
-      ol.events.condition.targetNotEditable(mapBrowserEvent);
-  };
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition !== undefined ?
-      options.condition : this.defaultCondition_;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 100;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.pixelDelta_ = options.pixelDelta !== undefined ?
-      options.pixelDelta : 128;
-
-};
-ol.inherits(ol.interaction.KeyboardPan, ol.interaction.Interaction);
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} if it was a
- * `KeyEvent`, and decides the direction to pan to (if an arrow key was
- * pressed).
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.KeyboardPan}
- * @api
- */
-ol.interaction.KeyboardPan.handleEvent = function(mapBrowserEvent) {
-  var stopEvent = false;
-  if (mapBrowserEvent.type == ol.events.EventType.KEYDOWN) {
-    var keyEvent = mapBrowserEvent.originalEvent;
-    var keyCode = keyEvent.keyCode;
-    if (this.condition_(mapBrowserEvent) &&
-        (keyCode == ol.events.KeyCode.DOWN ||
-        keyCode == ol.events.KeyCode.LEFT ||
-        keyCode == ol.events.KeyCode.RIGHT ||
-        keyCode == ol.events.KeyCode.UP)) {
-      var map = mapBrowserEvent.map;
-      var view = map.getView();
-      var mapUnitsDelta = view.getResolution() * this.pixelDelta_;
-      var deltaX = 0, deltaY = 0;
-      if (keyCode == ol.events.KeyCode.DOWN) {
-        deltaY = -mapUnitsDelta;
-      } else if (keyCode == ol.events.KeyCode.LEFT) {
-        deltaX = -mapUnitsDelta;
-      } else if (keyCode == ol.events.KeyCode.RIGHT) {
-        deltaX = mapUnitsDelta;
-      } else {
-        deltaY = mapUnitsDelta;
-      }
-      var delta = [deltaX, deltaY];
-      ol.coordinate.rotate(delta, view.getRotation());
-      ol.interaction.Interaction.pan(map, view, delta, this.duration_);
-      mapBrowserEvent.preventDefault();
-      stopEvent = true;
-    }
-  }
-  return !stopEvent;
-};
-
-goog.provide('ol.interaction.KeyboardZoom');
-
-goog.require('ol');
-goog.require('ol.events.EventType');
-goog.require('ol.events.condition');
-goog.require('ol.interaction.Interaction');
-
-
-/**
- * @classdesc
- * Allows the user to zoom the map using keyboard + and -.
- * Note that, although this interaction is by default included in maps,
- * the keys can only be used when browser focus is on the element to which
- * the keyboard events are attached. By default, this is the map div,
- * though you can change this with the `keyboardEventTarget` in
- * {@link ol.Map}. `document` never loses focus but, for any other element,
- * focus will have to be on, and returned to, this element if the keys are to
- * function.
- * See also {@link ol.interaction.KeyboardPan}.
- *
- * @constructor
- * @param {olx.interaction.KeyboardZoomOptions=} opt_options Options.
- * @extends {ol.interaction.Interaction}
- * @api stable
- */
-ol.interaction.KeyboardZoom = function(opt_options) {
-
-  ol.interaction.Interaction.call(this, {
-    handleEvent: ol.interaction.KeyboardZoom.handleEvent
-  });
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition ? options.condition :
-          ol.events.condition.targetNotEditable;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.delta_ = options.delta ? options.delta : 1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 100;
-
-};
-ol.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction);
-
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} if it was a
- * `KeyEvent`, and decides whether to zoom in or out (depending on whether the
- * key pressed was '+' or '-').
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.KeyboardZoom}
- * @api
- */
-ol.interaction.KeyboardZoom.handleEvent = function(mapBrowserEvent) {
-  var stopEvent = false;
-  if (mapBrowserEvent.type == ol.events.EventType.KEYDOWN ||
-      mapBrowserEvent.type == ol.events.EventType.KEYPRESS) {
-    var keyEvent = mapBrowserEvent.originalEvent;
-    var charCode = keyEvent.charCode;
-    if (this.condition_(mapBrowserEvent) &&
-        (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))) {
-      var map = mapBrowserEvent.map;
-      var delta = (charCode == '+'.charCodeAt(0)) ? this.delta_ : -this.delta_;
-      var view = map.getView();
-      ol.interaction.Interaction.zoomByDelta(
-          map, view, delta, undefined, this.duration_);
-      mapBrowserEvent.preventDefault();
-      stopEvent = true;
-    }
-  }
-  return !stopEvent;
-};
-
-goog.provide('ol.interaction.MouseWheelZoom');
-
-goog.require('ol');
-goog.require('ol.events.EventType');
-goog.require('ol.has');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.math');
-
-
-/**
- * @classdesc
- * Allows the user to zoom the map by scrolling the mouse wheel.
- *
- * @constructor
- * @extends {ol.interaction.Interaction}
- * @param {olx.interaction.MouseWheelZoomOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.MouseWheelZoom = function(opt_options) {
-
-  ol.interaction.Interaction.call(this, {
-    handleEvent: ol.interaction.MouseWheelZoom.handleEvent
-  });
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.delta_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 250;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.timeout_ = options.timeout !== undefined ? options.timeout : 80;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.useAnchor_ = options.useAnchor !== undefined ? options.useAnchor : true;
-
-  /**
-   * @private
-   * @type {?ol.Coordinate}
-   */
-  this.lastAnchor_ = null;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.startTime_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.timeoutId_ = undefined;
-
-};
-ol.inherits(ol.interaction.MouseWheelZoom, ol.interaction.Interaction);
-
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} (if it was a
- * mousewheel-event) and eventually zooms the map.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.MouseWheelZoom}
- * @api
- */
-ol.interaction.MouseWheelZoom.handleEvent = function(mapBrowserEvent) {
-  var stopEvent = false;
-  if (mapBrowserEvent.type == ol.events.EventType.WHEEL ||
-      mapBrowserEvent.type == ol.events.EventType.MOUSEWHEEL) {
-    var map = mapBrowserEvent.map;
-    var wheelEvent = /** @type {WheelEvent} */ (mapBrowserEvent.originalEvent);
-
-    if (this.useAnchor_) {
-      this.lastAnchor_ = mapBrowserEvent.coordinate;
-    }
-
-    // Delta normalisation inspired by
-    // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js
-    //TODO There's more good stuff in there for inspiration to improve this interaction.
-    var delta;
-    if (mapBrowserEvent.type == ol.events.EventType.WHEEL) {
-      delta = wheelEvent.deltaY;
-      if (ol.has.FIREFOX &&
-          wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {
-        delta /= ol.has.DEVICE_PIXEL_RATIO;
-      }
-      if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {
-        delta *= 40;
-      }
-    } else if (mapBrowserEvent.type == ol.events.EventType.MOUSEWHEEL) {
-      delta = -wheelEvent.wheelDeltaY;
-      if (ol.has.SAFARI) {
-        delta /= 3;
-      }
-    }
-
-    this.delta_ += delta;
-
-    if (this.startTime_ === undefined) {
-      this.startTime_ = Date.now();
-    }
-
-    var timeLeft = Math.max(this.timeout_ - (Date.now() - this.startTime_), 0);
-
-    clearTimeout(this.timeoutId_);
-    this.timeoutId_ = setTimeout(
-        this.doZoom_.bind(this, map), timeLeft);
-
-    mapBrowserEvent.preventDefault();
-    stopEvent = true;
-  }
-  return !stopEvent;
-};
-
-
-/**
- * @private
- * @param {ol.Map} map Map.
- */
-ol.interaction.MouseWheelZoom.prototype.doZoom_ = function(map) {
-  var maxDelta = ol.MOUSEWHEELZOOM_MAXDELTA;
-  var delta = ol.math.clamp(this.delta_, -maxDelta, maxDelta);
-
-  var view = map.getView();
-
-  ol.interaction.Interaction.zoomByDelta(map, view, -delta, this.lastAnchor_,
-      this.duration_);
-
-  this.delta_ = 0;
-  this.lastAnchor_ = null;
-  this.startTime_ = undefined;
-  this.timeoutId_ = undefined;
-};
-
-
-/**
- * Enable or disable using the mouse's location as an anchor when zooming
- * @param {boolean} useAnchor true to zoom to the mouse's location, false
- * to zoom to the center of the map
- * @api
- */
-ol.interaction.MouseWheelZoom.prototype.setMouseAnchor = function(useAnchor) {
-  this.useAnchor_ = useAnchor;
-  if (!useAnchor) {
-    this.lastAnchor_ = null;
-  }
-};
-
-goog.provide('ol.interaction.PinchRotate');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.functions');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.interaction.Pointer');
-
-
-/**
- * @classdesc
- * Allows the user to rotate the map by twisting with two fingers
- * on a touch screen.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @param {olx.interaction.PinchRotateOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.PinchRotate = function(opt_options) {
-
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.PinchRotate.handleDownEvent_,
-    handleDragEvent: ol.interaction.PinchRotate.handleDragEvent_,
-    handleUpEvent: ol.interaction.PinchRotate.handleUpEvent_
-  });
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.anchor_ = null;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.lastAngle_ = undefined;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.rotating_ = false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.rotationDelta_ = 0.0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 250;
-
-};
-ol.inherits(ol.interaction.PinchRotate, ol.interaction.Pointer);
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @this {ol.interaction.PinchRotate}
- * @private
- */
-ol.interaction.PinchRotate.handleDragEvent_ = function(mapBrowserEvent) {
-  ol.DEBUG && console.assert(this.targetPointers.length >= 2,
-      'length of this.targetPointers should be greater than or equal to 2');
-  var rotationDelta = 0.0;
-
-  var touch0 = this.targetPointers[0];
-  var touch1 = this.targetPointers[1];
-
-  // angle between touches
-  var angle = Math.atan2(
-      touch1.clientY - touch0.clientY,
-      touch1.clientX - touch0.clientX);
-
-  if (this.lastAngle_ !== undefined) {
-    var delta = angle - this.lastAngle_;
-    this.rotationDelta_ += delta;
-    if (!this.rotating_ &&
-        Math.abs(this.rotationDelta_) > this.threshold_) {
-      this.rotating_ = true;
-    }
-    rotationDelta = delta;
-  }
-  this.lastAngle_ = angle;
-
-  var map = mapBrowserEvent.map;
-
-  // rotate anchor point.
-  // FIXME: should be the intersection point between the lines:
-  //     touch0,touch1 and previousTouch0,previousTouch1
-  var viewportPosition = map.getViewport().getBoundingClientRect();
-  var centroid = ol.interaction.Pointer.centroid(this.targetPointers);
-  centroid[0] -= viewportPosition.left;
-  centroid[1] -= viewportPosition.top;
-  this.anchor_ = map.getCoordinateFromPixel(centroid);
-
-  // rotate
-  if (this.rotating_) {
-    var view = map.getView();
-    var rotation = view.getRotation();
-    map.render();
-    ol.interaction.Interaction.rotateWithoutConstraints(map, view,
-        rotation + rotationDelta, this.anchor_);
-  }
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.PinchRotate}
- * @private
- */
-ol.interaction.PinchRotate.handleUpEvent_ = function(mapBrowserEvent) {
-  if (this.targetPointers.length < 2) {
-    var map = mapBrowserEvent.map;
-    var view = map.getView();
-    view.setHint(ol.View.Hint.INTERACTING, -1);
-    if (this.rotating_) {
-      var rotation = view.getRotation();
-      ol.interaction.Interaction.rotate(
-          map, view, rotation, this.anchor_, this.duration_);
-    }
-    return false;
-  } else {
-    return true;
-  }
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.PinchRotate}
- * @private
- */
-ol.interaction.PinchRotate.handleDownEvent_ = function(mapBrowserEvent) {
-  if (this.targetPointers.length >= 2) {
-    var map = mapBrowserEvent.map;
-    this.anchor_ = null;
-    this.lastAngle_ = undefined;
-    this.rotating_ = false;
-    this.rotationDelta_ = 0.0;
-    if (!this.handlingDownUpSequence) {
-      map.getView().setHint(ol.View.Hint.INTERACTING, 1);
-    }
-    map.render();
-    return true;
-  } else {
-    return false;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.PinchRotate.prototype.shouldStopEvent = ol.functions.FALSE;
-
-goog.provide('ol.interaction.PinchZoom');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.functions');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.interaction.Pointer');
-
-
-/**
- * @classdesc
- * Allows the user to zoom the map by pinching with two fingers
- * on a touch screen.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @param {olx.interaction.PinchZoomOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.PinchZoom = function(opt_options) {
-
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.PinchZoom.handleDownEvent_,
-    handleDragEvent: ol.interaction.PinchZoom.handleDragEvent_,
-    handleUpEvent: ol.interaction.PinchZoom.handleUpEvent_
-  });
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.anchor_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 400;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.lastDistance_ = undefined;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.lastScaleDelta_ = 1;
-
-};
-ol.inherits(ol.interaction.PinchZoom, ol.interaction.Pointer);
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @this {ol.interaction.PinchZoom}
- * @private
- */
-ol.interaction.PinchZoom.handleDragEvent_ = function(mapBrowserEvent) {
-  ol.DEBUG && console.assert(this.targetPointers.length >= 2,
-      'length of this.targetPointers should be 2 or more');
-  var scaleDelta = 1.0;
-
-  var touch0 = this.targetPointers[0];
-  var touch1 = this.targetPointers[1];
-  var dx = touch0.clientX - touch1.clientX;
-  var dy = touch0.clientY - touch1.clientY;
-
-  // distance between touches
-  var distance = Math.sqrt(dx * dx + dy * dy);
-
-  if (this.lastDistance_ !== undefined) {
-    scaleDelta = this.lastDistance_ / distance;
-  }
-  this.lastDistance_ = distance;
-  if (scaleDelta != 1.0) {
-    this.lastScaleDelta_ = scaleDelta;
-  }
-
-  var map = mapBrowserEvent.map;
-  var view = map.getView();
-  var resolution = view.getResolution();
-
-  // scale anchor point.
-  var viewportPosition = map.getViewport().getBoundingClientRect();
-  var centroid = ol.interaction.Pointer.centroid(this.targetPointers);
-  centroid[0] -= viewportPosition.left;
-  centroid[1] -= viewportPosition.top;
-  this.anchor_ = map.getCoordinateFromPixel(centroid);
-
-  // scale, bypass the resolution constraint
-  map.render();
-  ol.interaction.Interaction.zoomWithoutConstraints(
-      map, view, resolution * scaleDelta, this.anchor_);
-
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.PinchZoom}
- * @private
- */
-ol.interaction.PinchZoom.handleUpEvent_ = function(mapBrowserEvent) {
-  if (this.targetPointers.length < 2) {
-    var map = mapBrowserEvent.map;
-    var view = map.getView();
-    view.setHint(ol.View.Hint.INTERACTING, -1);
-    var resolution = view.getResolution();
-    // Zoom to final resolution, with an animation, and provide a
-    // direction not to zoom out/in if user was pinching in/out.
-    // Direction is > 0 if pinching out, and < 0 if pinching in.
-    var direction = this.lastScaleDelta_ - 1;
-    ol.interaction.Interaction.zoom(map, view, resolution,
-        this.anchor_, this.duration_, direction);
-    return false;
-  } else {
-    return true;
-  }
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.PinchZoom}
- * @private
- */
-ol.interaction.PinchZoom.handleDownEvent_ = function(mapBrowserEvent) {
-  if (this.targetPointers.length >= 2) {
-    var map = mapBrowserEvent.map;
-    this.anchor_ = null;
-    this.lastDistance_ = undefined;
-    this.lastScaleDelta_ = 1;
-    if (!this.handlingDownUpSequence) {
-      map.getView().setHint(ol.View.Hint.INTERACTING, 1);
-    }
-    map.render();
-    return true;
-  } else {
-    return false;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.PinchZoom.prototype.shouldStopEvent = ol.functions.FALSE;
-
-goog.provide('ol.interaction');
-
-goog.require('ol');
-goog.require('ol.Collection');
-goog.require('ol.Kinetic');
-goog.require('ol.interaction.DoubleClickZoom');
-goog.require('ol.interaction.DragPan');
-goog.require('ol.interaction.DragRotate');
-goog.require('ol.interaction.DragZoom');
-goog.require('ol.interaction.KeyboardPan');
-goog.require('ol.interaction.KeyboardZoom');
-goog.require('ol.interaction.MouseWheelZoom');
-goog.require('ol.interaction.PinchRotate');
-goog.require('ol.interaction.PinchZoom');
-
-
-/**
- * Set of interactions included in maps by default. Specific interactions can be
- * excluded by setting the appropriate option to false in the constructor
- * options, but the order of the interactions is fixed.  If you want to specify
- * a different order for interactions, you will need to create your own
- * {@link ol.interaction.Interaction} instances and insert them into a
- * {@link ol.Collection} in the order you want before creating your
- * {@link ol.Map} instance. The default set of interactions, in sequence, is:
- * * {@link ol.interaction.DragRotate}
- * * {@link ol.interaction.DoubleClickZoom}
- * * {@link ol.interaction.DragPan}
- * * {@link ol.interaction.PinchRotate}
- * * {@link ol.interaction.PinchZoom}
- * * {@link ol.interaction.KeyboardPan}
- * * {@link ol.interaction.KeyboardZoom}
- * * {@link ol.interaction.MouseWheelZoom}
- * * {@link ol.interaction.DragZoom}
- *
- * @param {olx.interaction.DefaultsOptions=} opt_options Defaults options.
- * @return {ol.Collection.<ol.interaction.Interaction>} A collection of
- * interactions to be used with the ol.Map constructor's interactions option.
- * @api stable
- */
-ol.interaction.defaults = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  var interactions = new ol.Collection();
-
-  var kinetic = new ol.Kinetic(-0.005, 0.05, 100);
-
-  var altShiftDragRotate = options.altShiftDragRotate !== undefined ?
-      options.altShiftDragRotate : true;
-  if (altShiftDragRotate) {
-    interactions.push(new ol.interaction.DragRotate());
-  }
-
-  var doubleClickZoom = options.doubleClickZoom !== undefined ?
-      options.doubleClickZoom : true;
-  if (doubleClickZoom) {
-    interactions.push(new ol.interaction.DoubleClickZoom({
-      delta: options.zoomDelta,
-      duration: options.zoomDuration
-    }));
-  }
-
-  var dragPan = options.dragPan !== undefined ? options.dragPan : true;
-  if (dragPan) {
-    interactions.push(new ol.interaction.DragPan({
-      kinetic: kinetic
-    }));
-  }
-
-  var pinchRotate = options.pinchRotate !== undefined ? options.pinchRotate :
-      true;
-  if (pinchRotate) {
-    interactions.push(new ol.interaction.PinchRotate());
-  }
-
-  var pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;
-  if (pinchZoom) {
-    interactions.push(new ol.interaction.PinchZoom({
-      duration: options.zoomDuration
-    }));
-  }
-
-  var keyboard = options.keyboard !== undefined ? options.keyboard : true;
-  if (keyboard) {
-    interactions.push(new ol.interaction.KeyboardPan());
-    interactions.push(new ol.interaction.KeyboardZoom({
-      delta: options.zoomDelta,
-      duration: options.zoomDuration
-    }));
-  }
-
-  var mouseWheelZoom = options.mouseWheelZoom !== undefined ?
-      options.mouseWheelZoom : true;
-  if (mouseWheelZoom) {
-    interactions.push(new ol.interaction.MouseWheelZoom({
-      duration: options.zoomDuration
-    }));
-  }
-
-  var shiftDragZoom = options.shiftDragZoom !== undefined ?
-      options.shiftDragZoom : true;
-  if (shiftDragZoom) {
-    interactions.push(new ol.interaction.DragZoom({
-      duration: options.zoomDuration
-    }));
-  }
-
-  return interactions;
-
-};
-
-goog.provide('ol.layer.Base');
-goog.provide('ol.layer.LayerProperty');
-
-goog.require('ol');
-goog.require('ol.Object');
-goog.require('ol.math');
-goog.require('ol.obj');
-
-
-/**
- * @enum {string}
- */
-ol.layer.LayerProperty = {
-  OPACITY: 'opacity',
-  VISIBLE: 'visible',
-  EXTENT: 'extent',
-  Z_INDEX: 'zIndex',
-  MAX_RESOLUTION: 'maxResolution',
-  MIN_RESOLUTION: 'minResolution',
-  SOURCE: 'source'
-};
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Note that with `ol.layer.Base` and all its subclasses, any property set in
- * the options is set as a {@link ol.Object} property on the layer object, so
- * is observable, and has get/set accessors.
- *
- * @constructor
- * @extends {ol.Object}
- * @param {olx.layer.BaseOptions} options Layer options.
- * @api stable
- */
-ol.layer.Base = function(options) {
-
-  ol.Object.call(this);
-
-  /**
-   * @type {Object.<string, *>}
-   */
-  var properties = ol.obj.assign({}, options);
-  properties[ol.layer.LayerProperty.OPACITY] =
-      options.opacity !== undefined ? options.opacity : 1;
-  properties[ol.layer.LayerProperty.VISIBLE] =
-      options.visible !== undefined ? options.visible : true;
-  properties[ol.layer.LayerProperty.Z_INDEX] =
-      options.zIndex !== undefined ? options.zIndex : 0;
-  properties[ol.layer.LayerProperty.MAX_RESOLUTION] =
-      options.maxResolution !== undefined ? options.maxResolution : Infinity;
-  properties[ol.layer.LayerProperty.MIN_RESOLUTION] =
-      options.minResolution !== undefined ? options.minResolution : 0;
-
-  this.setProperties(properties);
-
-  /**
-   * @type {ol.LayerState}
-   * @private
-   */
-  this.state_ = /** @type {ol.LayerState} */ ({
-    layer: /** @type {ol.layer.Layer} */ (this),
-    managed: true
-  });
-
-};
-ol.inherits(ol.layer.Base, ol.Object);
-
-
-/**
- * @return {ol.LayerState} Layer state.
- */
-ol.layer.Base.prototype.getLayerState = function() {
-  this.state_.opacity = ol.math.clamp(this.getOpacity(), 0, 1);
-  this.state_.sourceState = this.getSourceState();
-  this.state_.visible = this.getVisible();
-  this.state_.extent = this.getExtent();
-  this.state_.zIndex = this.getZIndex();
-  this.state_.maxResolution = this.getMaxResolution();
-  this.state_.minResolution = Math.max(this.getMinResolution(), 0);
-
-  return this.state_;
-};
-
-
-/**
- * @abstract
- * @param {Array.<ol.layer.Layer>=} opt_array Array of layers (to be
- *     modified in place).
- * @return {Array.<ol.layer.Layer>} Array of layers.
- */
-ol.layer.Base.prototype.getLayersArray = function(opt_array) {};
-
-
-/**
- * @abstract
- * @param {Array.<ol.LayerState>=} opt_states Optional list of layer
- *     states (to be modified in place).
- * @return {Array.<ol.LayerState>} List of layer states.
- */
-ol.layer.Base.prototype.getLayerStatesArray = function(opt_states) {};
-
-
-/**
- * Return the {@link ol.Extent extent} of the layer or `undefined` if it
- * will be visible regardless of extent.
- * @return {ol.Extent|undefined} The layer extent.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.getExtent = function() {
-  return /** @type {ol.Extent|undefined} */ (
-      this.get(ol.layer.LayerProperty.EXTENT));
-};
-
-
-/**
- * Return the maximum resolution of the layer.
- * @return {number} The maximum resolution of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.getMaxResolution = function() {
-  return /** @type {number} */ (
-      this.get(ol.layer.LayerProperty.MAX_RESOLUTION));
-};
-
-
-/**
- * Return the minimum resolution of the layer.
- * @return {number} The minimum resolution of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.getMinResolution = function() {
-  return /** @type {number} */ (
-      this.get(ol.layer.LayerProperty.MIN_RESOLUTION));
-};
-
-
-/**
- * Return the opacity of the layer (between 0 and 1).
- * @return {number} The opacity of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.getOpacity = function() {
-  return /** @type {number} */ (this.get(ol.layer.LayerProperty.OPACITY));
-};
-
-
-/**
- * @abstract
- * @return {ol.source.State} Source state.
- */
-ol.layer.Base.prototype.getSourceState = function() {};
-
-
-/**
- * Return the visibility of the layer (`true` or `false`).
- * @return {boolean} The visibility of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.getVisible = function() {
-  return /** @type {boolean} */ (this.get(ol.layer.LayerProperty.VISIBLE));
-};
-
-
-/**
- * Return the Z-index of the layer, which is used to order layers before
- * rendering. The default Z-index is 0.
- * @return {number} The Z-index of the layer.
- * @observable
- * @api
- */
-ol.layer.Base.prototype.getZIndex = function() {
-  return /** @type {number} */ (this.get(ol.layer.LayerProperty.Z_INDEX));
-};
-
-
-/**
- * Set the extent at which the layer is visible.  If `undefined`, the layer
- * will be visible at all extents.
- * @param {ol.Extent|undefined} extent The extent of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.setExtent = function(extent) {
-  this.set(ol.layer.LayerProperty.EXTENT, extent);
-};
-
-
-/**
- * Set the maximum resolution at which the layer is visible.
- * @param {number} maxResolution The maximum resolution of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.setMaxResolution = function(maxResolution) {
-  this.set(ol.layer.LayerProperty.MAX_RESOLUTION, maxResolution);
-};
-
-
-/**
- * Set the minimum resolution at which the layer is visible.
- * @param {number} minResolution The minimum resolution of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.setMinResolution = function(minResolution) {
-  this.set(ol.layer.LayerProperty.MIN_RESOLUTION, minResolution);
-};
-
-
-/**
- * Set the opacity of the layer, allowed values range from 0 to 1.
- * @param {number} opacity The opacity of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.setOpacity = function(opacity) {
-  this.set(ol.layer.LayerProperty.OPACITY, opacity);
-};
-
-
-/**
- * Set the visibility of the layer (`true` or `false`).
- * @param {boolean} visible The visibility of the layer.
- * @observable
- * @api stable
- */
-ol.layer.Base.prototype.setVisible = function(visible) {
-  this.set(ol.layer.LayerProperty.VISIBLE, visible);
-};
-
-
-/**
- * Set Z-index of the layer, which is used to order layers before rendering.
- * The default Z-index is 0.
- * @param {number} zindex The z-index of the layer.
- * @observable
- * @api
- */
-ol.layer.Base.prototype.setZIndex = function(zindex) {
-  this.set(ol.layer.LayerProperty.Z_INDEX, zindex);
-};
-
-goog.provide('ol.source.State');
-
-
-/**
- * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.
- * @enum {string}
- */
-ol.source.State = {
-  UNDEFINED: 'undefined',
-  LOADING: 'loading',
-  READY: 'ready',
-  ERROR: 'error'
-};
-
-
-goog.provide('ol.layer.Group');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.Collection');
-goog.require('ol.Object');
-goog.require('ol.ObjectEventType');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.layer.Base');
-goog.require('ol.obj');
-goog.require('ol.source.State');
-
-
-/**
- * @classdesc
- * A {@link ol.Collection} of layers that are handled together.
- *
- * A generic `change` event is triggered when the group/Collection changes.
- *
- * @constructor
- * @extends {ol.layer.Base}
- * @param {olx.layer.GroupOptions=} opt_options Layer options.
- * @api stable
- */
-ol.layer.Group = function(opt_options) {
-
-  var options = opt_options || {};
-  var baseOptions = /** @type {olx.layer.GroupOptions} */
-      (ol.obj.assign({}, options));
-  delete baseOptions.layers;
-
-  var layers = options.layers;
-
-  ol.layer.Base.call(this, baseOptions);
-
-  /**
-   * @private
-   * @type {Array.<ol.EventsKey>}
-   */
-  this.layersListenerKeys_ = [];
-
-  /**
-   * @private
-   * @type {Object.<string, Array.<ol.EventsKey>>}
-   */
-  this.listenerKeys_ = {};
-
-  ol.events.listen(this,
-      ol.Object.getChangeEventType(ol.layer.Group.Property.LAYERS),
-      this.handleLayersChanged_, this);
-
-  if (layers) {
-    if (Array.isArray(layers)) {
-      layers = new ol.Collection(layers.slice());
-    } else {
-      ol.asserts.assert(layers instanceof ol.Collection,
-          43); // Expected `layers` to be an array or an `ol.Collection`
-      layers = layers;
-    }
-  } else {
-    layers = new ol.Collection();
-  }
-
-  this.setLayers(layers);
-
-};
-ol.inherits(ol.layer.Group, ol.layer.Base);
-
-
-/**
- * @private
- */
-ol.layer.Group.prototype.handleLayerChange_ = function() {
-  if (this.getVisible()) {
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.events.Event} event Event.
- * @private
- */
-ol.layer.Group.prototype.handleLayersChanged_ = function(event) {
-  this.layersListenerKeys_.forEach(ol.events.unlistenByKey);
-  this.layersListenerKeys_.length = 0;
-
-  var layers = this.getLayers();
-  this.layersListenerKeys_.push(
-      ol.events.listen(layers, ol.Collection.EventType.ADD,
-          this.handleLayersAdd_, this),
-      ol.events.listen(layers, ol.Collection.EventType.REMOVE,
-          this.handleLayersRemove_, this));
-
-  for (var id in this.listenerKeys_) {
-    this.listenerKeys_[id].forEach(ol.events.unlistenByKey);
-  }
-  ol.obj.clear(this.listenerKeys_);
-
-  var layersArray = layers.getArray();
-  var i, ii, layer;
-  for (i = 0, ii = layersArray.length; i < ii; i++) {
-    layer = layersArray[i];
-    this.listenerKeys_[ol.getUid(layer).toString()] = [
-      ol.events.listen(layer, ol.ObjectEventType.PROPERTYCHANGE,
-          this.handleLayerChange_, this),
-      ol.events.listen(layer, ol.events.EventType.CHANGE,
-          this.handleLayerChange_, this)
-    ];
-  }
-
-  this.changed();
-};
-
-
-/**
- * @param {ol.Collection.Event} collectionEvent Collection event.
- * @private
- */
-ol.layer.Group.prototype.handleLayersAdd_ = function(collectionEvent) {
-  var layer = /** @type {ol.layer.Base} */ (collectionEvent.element);
-  var key = ol.getUid(layer).toString();
-  ol.DEBUG && console.assert(!(key in this.listenerKeys_),
-      'listeners already registered');
-  this.listenerKeys_[key] = [
-    ol.events.listen(layer, ol.ObjectEventType.PROPERTYCHANGE,
-        this.handleLayerChange_, this),
-    ol.events.listen(layer, ol.events.EventType.CHANGE,
-        this.handleLayerChange_, this)
-  ];
-  this.changed();
-};
-
-
-/**
- * @param {ol.Collection.Event} collectionEvent Collection event.
- * @private
- */
-ol.layer.Group.prototype.handleLayersRemove_ = function(collectionEvent) {
-  var layer = /** @type {ol.layer.Base} */ (collectionEvent.element);
-  var key = ol.getUid(layer).toString();
-  ol.DEBUG && console.assert(key in this.listenerKeys_, 'no listeners to unregister');
-  this.listenerKeys_[key].forEach(ol.events.unlistenByKey);
-  delete this.listenerKeys_[key];
-  this.changed();
-};
-
-
-/**
- * Returns the {@link ol.Collection collection} of {@link ol.layer.Layer layers}
- * in this group.
- * @return {!ol.Collection.<ol.layer.Base>} Collection of
- *   {@link ol.layer.Base layers} that are part of this group.
- * @observable
- * @api stable
- */
-ol.layer.Group.prototype.getLayers = function() {
-  return /** @type {!ol.Collection.<ol.layer.Base>} */ (this.get(
-      ol.layer.Group.Property.LAYERS));
-};
-
-
-/**
- * Set the {@link ol.Collection collection} of {@link ol.layer.Layer layers}
- * in this group.
- * @param {!ol.Collection.<ol.layer.Base>} layers Collection of
- *   {@link ol.layer.Base layers} that are part of this group.
- * @observable
- * @api stable
- */
-ol.layer.Group.prototype.setLayers = function(layers) {
-  this.set(ol.layer.Group.Property.LAYERS, layers);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.layer.Group.prototype.getLayersArray = function(opt_array) {
-  var array = opt_array !== undefined ? opt_array : [];
-  this.getLayers().forEach(function(layer) {
-    layer.getLayersArray(array);
-  });
-  return array;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.layer.Group.prototype.getLayerStatesArray = function(opt_states) {
-  var states = opt_states !== undefined ? opt_states : [];
-
-  var pos = states.length;
-
-  this.getLayers().forEach(function(layer) {
-    layer.getLayerStatesArray(states);
-  });
-
-  var ownLayerState = this.getLayerState();
-  var i, ii, layerState;
-  for (i = pos, ii = states.length; i < ii; i++) {
-    layerState = states[i];
-    layerState.opacity *= ownLayerState.opacity;
-    layerState.visible = layerState.visible && ownLayerState.visible;
-    layerState.maxResolution = Math.min(
-        layerState.maxResolution, ownLayerState.maxResolution);
-    layerState.minResolution = Math.max(
-        layerState.minResolution, ownLayerState.minResolution);
-    if (ownLayerState.extent !== undefined) {
-      if (layerState.extent !== undefined) {
-        layerState.extent = ol.extent.getIntersection(
-            layerState.extent, ownLayerState.extent);
-      } else {
-        layerState.extent = ownLayerState.extent;
-      }
-    }
-  }
-
-  return states;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.layer.Group.prototype.getSourceState = function() {
-  return ol.source.State.READY;
-};
-
-/**
- * @enum {string}
- */
-ol.layer.Group.Property = {
-  LAYERS: 'layers'
-};
-
-goog.provide('ol.proj.EPSG3857');
-
-goog.require('ol');
-goog.require('ol.math');
-goog.require('ol.proj');
-goog.require('ol.proj.Projection');
-goog.require('ol.proj.Units');
-
-
-/**
- * @classdesc
- * Projection object for web/spherical Mercator (EPSG:3857).
- *
- * @constructor
- * @extends {ol.proj.Projection}
- * @param {string} code Code.
- * @private
- */
-ol.proj.EPSG3857_ = function(code) {
-  ol.proj.Projection.call(this, {
-    code: code,
-    units: ol.proj.Units.METERS,
-    extent: ol.proj.EPSG3857.EXTENT,
-    global: true,
-    worldExtent: ol.proj.EPSG3857.WORLD_EXTENT
-  });
-};
-ol.inherits(ol.proj.EPSG3857_, ol.proj.Projection);
-
-
-/**
- * @inheritDoc
- */
-ol.proj.EPSG3857_.prototype.getPointResolution = function(resolution, point) {
-  return resolution / ol.math.cosh(point[1] / ol.proj.EPSG3857.RADIUS);
-};
-
-
-/**
- * @const
- * @type {number}
- */
-ol.proj.EPSG3857.RADIUS = 6378137;
-
-
-/**
- * @const
- * @type {number}
- */
-ol.proj.EPSG3857.HALF_SIZE = Math.PI * ol.proj.EPSG3857.RADIUS;
-
-
-/**
- * @const
- * @type {ol.Extent}
- */
-ol.proj.EPSG3857.EXTENT = [
-  -ol.proj.EPSG3857.HALF_SIZE, -ol.proj.EPSG3857.HALF_SIZE,
-  ol.proj.EPSG3857.HALF_SIZE, ol.proj.EPSG3857.HALF_SIZE
-];
-
-
-/**
- * @const
- * @type {ol.Extent}
- */
-ol.proj.EPSG3857.WORLD_EXTENT = [-180, -85, 180, 85];
-
-
-/**
- * Lists several projection codes with the same meaning as EPSG:3857.
- *
- * @type {Array.<string>}
- */
-ol.proj.EPSG3857.CODES = [
-  'EPSG:3857',
-  'EPSG:102100',
-  'EPSG:102113',
-  'EPSG:900913',
-  'urn:ogc:def:crs:EPSG:6.18:3:3857',
-  'urn:ogc:def:crs:EPSG::3857',
-  'http://www.opengis.net/gml/srs/epsg.xml#3857'
-];
-
-
-/**
- * Projections equal to EPSG:3857.
- *
- * @const
- * @type {Array.<ol.proj.Projection>}
- */
-ol.proj.EPSG3857.PROJECTIONS = ol.proj.EPSG3857.CODES.map(function(code) {
-  return new ol.proj.EPSG3857_(code);
-});
-
-
-/**
- * Transformation from EPSG:4326 to EPSG:3857.
- *
- * @param {Array.<number>} input Input array of coordinate values.
- * @param {Array.<number>=} opt_output Output array of coordinate values.
- * @param {number=} opt_dimension Dimension (default is `2`).
- * @return {Array.<number>} Output array of coordinate values.
- */
-ol.proj.EPSG3857.fromEPSG4326 = function(input, opt_output, opt_dimension) {
-  var length = input.length,
-      dimension = opt_dimension > 1 ? opt_dimension : 2,
-      output = opt_output;
-  if (output === undefined) {
-    if (dimension > 2) {
-      // preserve values beyond second dimension
-      output = input.slice();
-    } else {
-      output = new Array(length);
-    }
-  }
-  ol.DEBUG && console.assert(output.length % dimension === 0,
-      'modulus of output.length with dimension should be 0');
-  var halfSize = ol.proj.EPSG3857.HALF_SIZE;
-  for (var i = 0; i < length; i += dimension) {
-    output[i] = halfSize * input[i] / 180;
-    var y = ol.proj.EPSG3857.RADIUS *
-        Math.log(Math.tan(Math.PI * (input[i + 1] + 90) / 360));
-    if (y > halfSize) {
-      y = halfSize;
-    } else if (y < -halfSize) {
-      y = -halfSize;
-    }
-    output[i + 1] = y;
-  }
-  return output;
-};
-
-
-/**
- * Transformation from EPSG:3857 to EPSG:4326.
- *
- * @param {Array.<number>} input Input array of coordinate values.
- * @param {Array.<number>=} opt_output Output array of coordinate values.
- * @param {number=} opt_dimension Dimension (default is `2`).
- * @return {Array.<number>} Output array of coordinate values.
- */
-ol.proj.EPSG3857.toEPSG4326 = function(input, opt_output, opt_dimension) {
-  var length = input.length,
-      dimension = opt_dimension > 1 ? opt_dimension : 2,
-      output = opt_output;
-  if (output === undefined) {
-    if (dimension > 2) {
-      // preserve values beyond second dimension
-      output = input.slice();
-    } else {
-      output = new Array(length);
-    }
-  }
-  ol.DEBUG && console.assert(output.length % dimension === 0,
-      'modulus of output.length with dimension should be 0');
-  for (var i = 0; i < length; i += dimension) {
-    output[i] = 180 * input[i] / ol.proj.EPSG3857.HALF_SIZE;
-    output[i + 1] = 360 * Math.atan(
-        Math.exp(input[i + 1] / ol.proj.EPSG3857.RADIUS)) / Math.PI - 90;
-  }
-  return output;
-};
-
-goog.provide('ol.sphere.WGS84');
-
-goog.require('ol.Sphere');
-
-
-/**
- * A sphere with radius equal to the semi-major axis of the WGS84 ellipsoid.
- * @const
- * @type {ol.Sphere}
- */
-ol.sphere.WGS84 = new ol.Sphere(6378137);
-
-goog.provide('ol.proj.EPSG4326');
-
-goog.require('ol');
-goog.require('ol.proj');
-goog.require('ol.proj.Projection');
-goog.require('ol.proj.Units');
-goog.require('ol.sphere.WGS84');
-
-
-/**
- * @classdesc
- * Projection object for WGS84 geographic coordinates (EPSG:4326).
- *
- * Note that OpenLayers does not strictly comply with the EPSG definition.
- * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).
- * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.
- *
- * @constructor
- * @extends {ol.proj.Projection}
- * @param {string} code Code.
- * @param {string=} opt_axisOrientation Axis orientation.
- * @private
- */
-ol.proj.EPSG4326_ = function(code, opt_axisOrientation) {
-  ol.proj.Projection.call(this, {
-    code: code,
-    units: ol.proj.Units.DEGREES,
-    extent: ol.proj.EPSG4326.EXTENT,
-    axisOrientation: opt_axisOrientation,
-    global: true,
-    metersPerUnit: ol.proj.EPSG4326.METERS_PER_UNIT,
-    worldExtent: ol.proj.EPSG4326.EXTENT
-  });
-};
-ol.inherits(ol.proj.EPSG4326_, ol.proj.Projection);
-
-
-/**
- * @inheritDoc
- */
-ol.proj.EPSG4326_.prototype.getPointResolution = function(resolution, point) {
-  return resolution;
-};
-
-
-/**
- * Extent of the EPSG:4326 projection which is the whole world.
- *
- * @const
- * @type {ol.Extent}
- */
-ol.proj.EPSG4326.EXTENT = [-180, -90, 180, 90];
-
-
-/**
- * @const
- * @type {number}
- */
-ol.proj.EPSG4326.METERS_PER_UNIT = Math.PI * ol.sphere.WGS84.radius / 180;
-
-
-/**
- * Projections equal to EPSG:4326.
- *
- * @const
- * @type {Array.<ol.proj.Projection>}
- */
-ol.proj.EPSG4326.PROJECTIONS = [
-  new ol.proj.EPSG4326_('CRS:84'),
-  new ol.proj.EPSG4326_('EPSG:4326', 'neu'),
-  new ol.proj.EPSG4326_('urn:ogc:def:crs:EPSG::4326', 'neu'),
-  new ol.proj.EPSG4326_('urn:ogc:def:crs:EPSG:6.6:4326', 'neu'),
-  new ol.proj.EPSG4326_('urn:ogc:def:crs:OGC:1.3:CRS84'),
-  new ol.proj.EPSG4326_('urn:ogc:def:crs:OGC:2:84'),
-  new ol.proj.EPSG4326_('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'),
-  new ol.proj.EPSG4326_('urn:x-ogc:def:crs:EPSG:4326', 'neu')
-];
-
-goog.provide('ol.proj.common');
-
-goog.require('ol.proj');
-goog.require('ol.proj.EPSG3857');
-goog.require('ol.proj.EPSG4326');
-
-
-/**
- * FIXME empty description for jsdoc
- * @api
- */
-ol.proj.common.add = function() {
-  // Add transformations that don't alter coordinates to convert within set of
-  // projections with equal meaning.
-  ol.proj.addEquivalentProjections(ol.proj.EPSG3857.PROJECTIONS);
-  ol.proj.addEquivalentProjections(ol.proj.EPSG4326.PROJECTIONS);
-  // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like
-  // coordinates and back.
-  ol.proj.addEquivalentTransforms(
-      ol.proj.EPSG4326.PROJECTIONS,
-      ol.proj.EPSG3857.PROJECTIONS,
-      ol.proj.EPSG3857.fromEPSG4326,
-      ol.proj.EPSG3857.toEPSG4326);
-};
-
-goog.provide('ol.renderer.Type');
-
-
-/**
- * Available renderers: `'canvas'` or `'webgl'`.
- * @enum {string}
- */
-ol.renderer.Type = {
-  CANVAS: 'canvas',
-  WEBGL: 'webgl'
-};
-
-goog.provide('ol.render.Event');
-
-goog.require('ol');
-goog.require('ol.events.Event');
-
-
-/**
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.render.Event}
- * @param {ol.render.Event.Type} type Type.
- * @param {ol.render.VectorContext=} opt_vectorContext Vector context.
- * @param {olx.FrameState=} opt_frameState Frame state.
- * @param {?CanvasRenderingContext2D=} opt_context Context.
- * @param {?ol.webgl.Context=} opt_glContext WebGL Context.
- */
-ol.render.Event = function(
-    type, opt_vectorContext, opt_frameState, opt_context,
-    opt_glContext) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * For canvas, this is an instance of {@link ol.render.canvas.Immediate}.
-   * @type {ol.render.VectorContext|undefined}
-   * @api
-   */
-  this.vectorContext = opt_vectorContext;
-
-  /**
-   * An object representing the current render frame state.
-   * @type {olx.FrameState|undefined}
-   * @api
-   */
-  this.frameState = opt_frameState;
-
-  /**
-   * Canvas context. Only available when a Canvas renderer is used, null
-   * otherwise.
-   * @type {CanvasRenderingContext2D|null|undefined}
-   * @api
-   */
-  this.context = opt_context;
-
-  /**
-   * WebGL context. Only available when a WebGL renderer is used, null
-   * otherwise.
-   * @type {ol.webgl.Context|null|undefined}
-   * @api
-   */
-  this.glContext = opt_glContext;
-
-};
-ol.inherits(ol.render.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.render.Event.Type = {
-  /**
-   * @event ol.render.Event#postcompose
-   * @api
-   */
-  POSTCOMPOSE: 'postcompose',
-  /**
-   * @event ol.render.Event#precompose
-   * @api
-   */
-  PRECOMPOSE: 'precompose',
-  /**
-   * @event ol.render.Event#render
-   * @api
-   */
-  RENDER: 'render'
-};
-
-goog.provide('ol.layer.Layer');
-
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol');
-goog.require('ol.Object');
-goog.require('ol.layer.Base');
-goog.require('ol.layer.LayerProperty');
-goog.require('ol.obj');
-goog.require('ol.render.Event');
-goog.require('ol.source.State');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * A visual representation of raster or vector map data.
- * Layers group together those properties that pertain to how the data is to be
- * displayed, irrespective of the source of that data.
- *
- * Layers are usually added to a map with {@link ol.Map#addLayer}. Components
- * like {@link ol.interaction.Select} use unmanaged layers internally. These
- * unmanaged layers are associated with the map using
- * {@link ol.layer.Layer#setMap} instead.
- *
- * A generic `change` event is fired when the state of the source changes.
- *
- * @constructor
- * @extends {ol.layer.Base}
- * @fires ol.render.Event
- * @param {olx.layer.LayerOptions} options Layer options.
- * @api stable
- */
-ol.layer.Layer = function(options) {
-
-  var baseOptions = ol.obj.assign({}, options);
-  delete baseOptions.source;
-
-  ol.layer.Base.call(this, /** @type {olx.layer.BaseOptions} */ (baseOptions));
-
-  /**
-   * @private
-   * @type {?ol.EventsKey}
-   */
-  this.mapPrecomposeKey_ = null;
-
-  /**
-   * @private
-   * @type {?ol.EventsKey}
-   */
-  this.mapRenderKey_ = null;
-
-  /**
-   * @private
-   * @type {?ol.EventsKey}
-   */
-  this.sourceChangeKey_ = null;
-
-  if (options.map) {
-    this.setMap(options.map);
-  }
-
-  ol.events.listen(this,
-      ol.Object.getChangeEventType(ol.layer.LayerProperty.SOURCE),
-      this.handleSourcePropertyChange_, this);
-
-  var source = options.source ? options.source : null;
-  this.setSource(source);
-};
-ol.inherits(ol.layer.Layer, ol.layer.Base);
-
-
-/**
- * Return `true` if the layer is visible, and if the passed resolution is
- * between the layer's minResolution and maxResolution. The comparison is
- * inclusive for `minResolution` and exclusive for `maxResolution`.
- * @param {ol.LayerState} layerState Layer state.
- * @param {number} resolution Resolution.
- * @return {boolean} The layer is visible at the given resolution.
- */
-ol.layer.Layer.visibleAtResolution = function(layerState, resolution) {
-  return layerState.visible && resolution >= layerState.minResolution &&
-      resolution < layerState.maxResolution;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.layer.Layer.prototype.getLayersArray = function(opt_array) {
-  var array = opt_array ? opt_array : [];
-  array.push(this);
-  return array;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.layer.Layer.prototype.getLayerStatesArray = function(opt_states) {
-  var states = opt_states ? opt_states : [];
-  states.push(this.getLayerState());
-  return states;
-};
-
-
-/**
- * Get the layer source.
- * @return {ol.source.Source} The layer source (or `null` if not yet set).
- * @observable
- * @api stable
- */
-ol.layer.Layer.prototype.getSource = function() {
-  var source = this.get(ol.layer.LayerProperty.SOURCE);
-  return /** @type {ol.source.Source} */ (source) || null;
-};
-
-
-/**
-  * @inheritDoc
-  */
-ol.layer.Layer.prototype.getSourceState = function() {
-  var source = this.getSource();
-  return !source ? ol.source.State.UNDEFINED : source.getState();
-};
-
-
-/**
- * @private
- */
-ol.layer.Layer.prototype.handleSourceChange_ = function() {
-  this.changed();
-};
-
-
-/**
- * @private
- */
-ol.layer.Layer.prototype.handleSourcePropertyChange_ = function() {
-  if (this.sourceChangeKey_) {
-    ol.events.unlistenByKey(this.sourceChangeKey_);
-    this.sourceChangeKey_ = null;
-  }
-  var source = this.getSource();
-  if (source) {
-    this.sourceChangeKey_ = ol.events.listen(source,
-        ol.events.EventType.CHANGE, this.handleSourceChange_, this);
-  }
-  this.changed();
-};
-
-
-/**
- * Sets the layer to be rendered on top of other layers on a map. The map will
- * not manage this layer in its layers collection, and the callback in
- * {@link ol.Map#forEachLayerAtPixel} will receive `null` as layer. This
- * is useful for temporary layers. To remove an unmanaged layer from the map,
- * use `#setMap(null)`.
- *
- * To add the layer to a map and have it managed by the map, use
- * {@link ol.Map#addLayer} instead.
- * @param {ol.Map} map Map.
- * @api
- */
-ol.layer.Layer.prototype.setMap = function(map) {
-  if (this.mapPrecomposeKey_) {
-    ol.events.unlistenByKey(this.mapPrecomposeKey_);
-    this.mapPrecomposeKey_ = null;
-  }
-  if (!map) {
-    this.changed();
-  }
-  if (this.mapRenderKey_) {
-    ol.events.unlistenByKey(this.mapRenderKey_);
-    this.mapRenderKey_ = null;
-  }
-  if (map) {
-    this.mapPrecomposeKey_ = ol.events.listen(
-        map, ol.render.Event.Type.PRECOMPOSE, function(evt) {
-          var layerState = this.getLayerState();
-          layerState.managed = false;
-          layerState.zIndex = Infinity;
-          evt.frameState.layerStatesArray.push(layerState);
-          evt.frameState.layerStates[ol.getUid(this)] = layerState;
-        }, this);
-    this.mapRenderKey_ = ol.events.listen(
-        this, ol.events.EventType.CHANGE, map.render, map);
-    this.changed();
-  }
-};
-
-
-/**
- * Set the layer source.
- * @param {ol.source.Source} source The layer source.
- * @observable
- * @api stable
- */
-ol.layer.Layer.prototype.setSource = function(source) {
-  this.set(ol.layer.LayerProperty.SOURCE, source);
-};
-
-goog.provide('ol.style.IconImageCache');
-
-goog.require('ol');
-goog.require('ol.color');
-
-
-/**
- * @constructor
- */
-ol.style.IconImageCache = function() {
-
-  /**
-   * @type {Object.<string, ol.style.IconImage>}
-   * @private
-   */
-  this.cache_ = {};
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.cacheSize_ = 0;
-
-  /**
-   * @const
-   * @type {number}
-   * @private
-   */
-  this.maxCacheSize_ = 32;
-};
-
-
-/**
- * @param {string} src Src.
- * @param {?string} crossOrigin Cross origin.
- * @param {ol.Color} color Color.
- * @return {string} Cache key.
- */
-ol.style.IconImageCache.getKey = function(src, crossOrigin, color) {
-  ol.DEBUG && console.assert(crossOrigin !== undefined,
-      'argument crossOrigin must be defined');
-  var colorString = color ? ol.color.asString(color) : 'null';
-  return crossOrigin + ':' + src + ':' + colorString;
-};
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.style.IconImageCache.prototype.clear = function() {
-  this.cache_ = {};
-  this.cacheSize_ = 0;
-};
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.style.IconImageCache.prototype.expire = function() {
-  if (this.cacheSize_ > this.maxCacheSize_) {
-    var i = 0;
-    var key, iconImage;
-    for (key in this.cache_) {
-      iconImage = this.cache_[key];
-      if ((i++ & 3) === 0 && !iconImage.hasListener()) {
-        delete this.cache_[key];
-        --this.cacheSize_;
-      }
-    }
-  }
-};
-
-
-/**
- * @param {string} src Src.
- * @param {?string} crossOrigin Cross origin.
- * @param {ol.Color} color Color.
- * @return {ol.style.IconImage} Icon image.
- */
-ol.style.IconImageCache.prototype.get = function(src, crossOrigin, color) {
-  var key = ol.style.IconImageCache.getKey(src, crossOrigin, color);
-  return key in this.cache_ ? this.cache_[key] : null;
-};
-
-
-/**
- * @param {string} src Src.
- * @param {?string} crossOrigin Cross origin.
- * @param {ol.Color} color Color.
- * @param {ol.style.IconImage} iconImage Icon image.
- */
-ol.style.IconImageCache.prototype.set = function(src, crossOrigin, color,
-                                                 iconImage) {
-  var key = ol.style.IconImageCache.getKey(src, crossOrigin, color);
-  this.cache_[key] = iconImage;
-  ++this.cacheSize_;
-};
-
-goog.provide('ol.style');
-
-goog.require('ol.style.IconImageCache');
-
-ol.style.iconImageCache = new ol.style.IconImageCache();
-
-goog.provide('ol.transform');
-
-goog.require('ol.asserts');
-
-
-/**
- * Collection of affine 2d transformation functions. The functions work on an
- * array of 6 elements. The element order is compatible with the [SVGMatrix
- * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is
- * a subset (elements a to f) of a 3x3 martrix:
- * ```
- * [ a c e ]
- * [ b d f ]
- * [ 0 0 1 ]
- * ```
- */
-
-
-/**
- * @private
- * @type {ol.Transform}
- */
-ol.transform.tmp_ = new Array(6);
-
-
-/**
- * Create an identity transform.
- * @return {!ol.Transform} Identity transform.
- */
-ol.transform.create = function() {
-  return [1, 0, 0, 1, 0, 0];
-};
-
-
-/**
- * Resets the given transform to an identity transform.
- * @param {!ol.Transform} transform Transform.
- * @return {!ol.Transform} Transform.
- */
-ol.transform.reset = function(transform) {
-  return ol.transform.set(transform, 1, 0, 0, 1, 0, 0);
-};
-
-
-/**
- * Multiply the underlying matrices of two transforms and return the result in
- * the first transform.
- * @param {!ol.Transform} transform1 Transform parameters of matrix 1.
- * @param {!ol.Transform} transform2 Transform parameters of matrix 2.
- * @return {!ol.Transform} transform1 multiplied with transform2.
- */
-ol.transform.multiply = function(transform1, transform2) {
-  var a1 = transform1[0];
-  var b1 = transform1[1];
-  var c1 = transform1[2];
-  var d1 = transform1[3];
-  var e1 = transform1[4];
-  var f1 = transform1[5];
-  var a2 = transform2[0];
-  var b2 = transform2[1];
-  var c2 = transform2[2];
-  var d2 = transform2[3];
-  var e2 = transform2[4];
-  var f2 = transform2[5];
-
-  transform1[0] = a1 * a2 + c1 * b2;
-  transform1[1] = b1 * a2 + d1 * b2;
-  transform1[2] = a1 * c2 + c1 * d2;
-  transform1[3] = b1 * c2 + d1 * d2;
-  transform1[4] = a1 * e2 + c1 * f2 + e1;
-  transform1[5] = b1 * e2 + d1 * f2 + f1;
-
-  return transform1;
-};
-
-/**
- * Set the transform components a-f on a given transform.
- * @param {!ol.Transform} transform Transform.
- * @param {number} a The a component of the transform.
- * @param {number} b The b component of the transform.
- * @param {number} c The c component of the transform.
- * @param {number} d The d component of the transform.
- * @param {number} e The e component of the transform.
- * @param {number} f The f component of the transform.
- * @return {!ol.Transform} Matrix with transform applied.
- */
-ol.transform.set = function(transform, a, b, c, d, e, f) {
-  transform[0] = a;
-  transform[1] = b;
-  transform[2] = c;
-  transform[3] = d;
-  transform[4] = e;
-  transform[5] = f;
-  return transform;
-};
-
-
-/**
- * Set transform on one matrix from another matrix.
- * @param {!ol.Transform} transform1 Matrix to set transform to.
- * @param {!ol.Transform} transform2 Matrix to set transform from.
- * @return {!ol.Transform} transform1 with transform from transform2 applied.
- */
-ol.transform.setFromArray = function(transform1, transform2) {
-  transform1[0] = transform2[0];
-  transform1[1] = transform2[1];
-  transform1[2] = transform2[2];
-  transform1[3] = transform2[3];
-  transform1[4] = transform2[4];
-  transform1[5] = transform2[5];
-  return transform1;
-};
-
-
-/**
- * Transforms the given coordinate with the given transform returning the
- * resulting, transformed coordinate. The coordinate will be modified in-place.
- *
- * @param {ol.Transform} transform The transformation.
- * @param {ol.Coordinate|ol.Pixel} coordinate The coordinate to transform.
- * @return {ol.Coordinate|ol.Pixel} return coordinate so that operations can be
- *     chained together.
- */
-ol.transform.apply = function(transform, coordinate) {
-  var x = coordinate[0], y = coordinate[1];
-  coordinate[0] = transform[0] * x + transform[2] * y + transform[4];
-  coordinate[1] = transform[1] * x + transform[3] * y + transform[5];
-  return coordinate;
-};
-
-
-/**
- * Applies rotation to the given transform.
- * @param {!ol.Transform} transform Transform.
- * @param {number} angle Angle in radians.
- * @return {!ol.Transform} The rotated transform.
- */
-ol.transform.rotate = function(transform, angle) {
-  var cos = Math.cos(angle);
-  var sin = Math.sin(angle);
-  return ol.transform.multiply(transform,
-      ol.transform.set(ol.transform.tmp_, cos, sin, -sin, cos, 0, 0));
-};
-
-
-/**
- * Applies scale to a given transform.
- * @param {!ol.Transform} transform Transform.
- * @param {number} x Scale factor x.
- * @param {number} y Scale factor y.
- * @return {!ol.Transform} The scaled transform.
- */
-ol.transform.scale = function(transform, x, y) {
-  return ol.transform.multiply(transform,
-      ol.transform.set(ol.transform.tmp_, x, 0, 0, y, 0, 0));
-};
-
-
-/**
- * Applies translation to the given transform.
- * @param {!ol.Transform} transform Transform.
- * @param {number} dx Translation x.
- * @param {number} dy Translation y.
- * @return {!ol.Transform} The translated transform.
- */
-ol.transform.translate = function(transform, dx, dy) {
-  return ol.transform.multiply(transform,
-      ol.transform.set(ol.transform.tmp_, 1, 0, 0, 1, dx, dy));
-};
-
-
-/**
- * Creates a composite transform given an initial translation, scale, rotation, and
- * final translation (in that order only, not commutative).
- * @param {!ol.Transform} transform The transform (will be modified in place).
- * @param {number} dx1 Initial translation x.
- * @param {number} dy1 Initial translation y.
- * @param {number} sx Scale factor x.
- * @param {number} sy Scale factor y.
- * @param {number} angle Rotation (in counter-clockwise radians).
- * @param {number} dx2 Final translation x.
- * @param {number} dy2 Final translation y.
- * @return {!ol.Transform} The composite transform.
- */
-ol.transform.compose = function(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {
-  var sin = Math.sin(angle);
-  var cos = Math.cos(angle);
-  transform[0] = sx * cos;
-  transform[1] = sy * sin;
-  transform[2] = -sx * sin;
-  transform[3] = sy * cos;
-  transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;
-  transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;
-  return transform;
-};
-
-
-/**
- * Invert the given transform.
- * @param {!ol.Transform} transform Transform.
- * @return {!ol.Transform} Inverse of the transform.
- */
-ol.transform.invert = function(transform) {
-  var det = ol.transform.determinant(transform);
-  ol.asserts.assert(det !== 0, 32); // Transformation matrix cannot be inverted
-
-  var a = transform[0];
-  var b = transform[1];
-  var c = transform[2];
-  var d = transform[3];
-  var e = transform[4];
-  var f = transform[5];
-
-  transform[0] = d / det;
-  transform[1] = -b / det;
-  transform[2] = -c / det;
-  transform[3] = a / det;
-  transform[4] = (c * f - d * e) / det;
-  transform[5] = -(a * f - b * e) / det;
-
-  return transform;
-};
-
-
-/**
- * Returns the determinant of the given matrix.
- * @param {!ol.Transform} mat Matrix.
- * @return {number} Determinant.
- */
-ol.transform.determinant = function(mat) {
-  return mat[0] * mat[3] - mat[1] * mat[2];
-};
-
-goog.provide('ol.renderer.Map');
-
-goog.require('ol');
-goog.require('ol.Disposable');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.functions');
-goog.require('ol.layer.Layer');
-goog.require('ol.style');
-goog.require('ol.transform');
-
-
-/**
- * @constructor
- * @extends {ol.Disposable}
- * @param {Element} container Container.
- * @param {ol.Map} map Map.
- * @struct
- */
-ol.renderer.Map = function(container, map) {
-
-  ol.Disposable.call(this);
-
-
-  /**
-   * @private
-   * @type {ol.Map}
-   */
-  this.map_ = map;
-
-  /**
-   * @private
-   * @type {Object.<string, ol.renderer.Layer>}
-   */
-  this.layerRenderers_ = {};
-
-  /**
-   * @private
-   * @type {Object.<string, ol.EventsKey>}
-   */
-  this.layerRendererListeners_ = {};
-
-};
-ol.inherits(ol.renderer.Map, ol.Disposable);
-
-
-/**
- * @param {olx.FrameState} frameState FrameState.
- * @protected
- */
-ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) {
-  var viewState = frameState.viewState;
-  var coordinateToPixelTransform = frameState.coordinateToPixelTransform;
-  var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;
-  ol.DEBUG && console.assert(coordinateToPixelTransform,
-      'frameState has a coordinateToPixelTransform');
-
-  ol.transform.compose(coordinateToPixelTransform,
-      frameState.size[0] / 2, frameState.size[1] / 2,
-      1 / viewState.resolution, -1 / viewState.resolution,
-      -viewState.rotation,
-      -viewState.center[0], -viewState.center[1]);
-
-  ol.transform.invert(
-      ol.transform.setFromArray(pixelToCoordinateTransform, coordinateToPixelTransform));
-};
-
-
-/**
- * @abstract
- * @param {ol.layer.Layer} layer Layer.
- * @protected
- * @return {ol.renderer.Layer} layerRenderer Layer renderer.
- */
-ol.renderer.Map.prototype.createLayerRenderer = function(layer) {};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.Map.prototype.disposeInternal = function() {
-  for (var id in this.layerRenderers_) {
-    this.layerRenderers_[id].dispose();
-  }
-};
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {olx.FrameState} frameState Frame state.
- * @private
- */
-ol.renderer.Map.expireIconCache_ = function(map, frameState) {
-  var cache = ol.style.iconImageCache;
-  cache.expire();
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {olx.FrameState} frameState FrameState.
- * @param {function(this: S, (ol.Feature|ol.render.Feature),
- *     ol.layer.Layer): T} callback Feature callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @param {function(this: U, ol.layer.Layer): boolean} layerFilter Layer filter
- *     function, only layers which are visible and for which this function
- *     returns `true` will be tested for features.  By default, all visible
- *     layers will be tested.
- * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.
- * @return {T|undefined} Callback result.
- * @template S,T,U
- */
-ol.renderer.Map.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, callback, thisArg,
-        layerFilter, thisArg2) {
-  var result;
-  var viewState = frameState.viewState;
-  var viewResolution = viewState.resolution;
-
-  /**
-   * @param {ol.Feature|ol.render.Feature} feature Feature.
-   * @param {ol.layer.Layer} layer Layer.
-   * @return {?} Callback result.
-   */
-  function forEachFeatureAtCoordinate(feature, layer) {
-    var key = ol.getUid(feature).toString();
-    var managed = frameState.layerStates[ol.getUid(layer)].managed;
-    if (!(key in frameState.skippedFeatureUids && !managed)) {
-      return callback.call(thisArg, feature, managed ? layer : null);
-    }
-  }
-
-  var projection = viewState.projection;
-
-  var translatedCoordinate = coordinate;
-  if (projection.canWrapX()) {
-    var projectionExtent = projection.getExtent();
-    var worldWidth = ol.extent.getWidth(projectionExtent);
-    var x = coordinate[0];
-    if (x < projectionExtent[0] || x > projectionExtent[2]) {
-      var worldsAway = Math.ceil((projectionExtent[0] - x) / worldWidth);
-      translatedCoordinate = [x + worldWidth * worldsAway, coordinate[1]];
-    }
-  }
-
-  var layerStates = frameState.layerStatesArray;
-  var numLayers = layerStates.length;
-  var i;
-  for (i = numLayers - 1; i >= 0; --i) {
-    var layerState = layerStates[i];
-    var layer = layerState.layer;
-    if (ol.layer.Layer.visibleAtResolution(layerState, viewResolution) &&
-        layerFilter.call(thisArg2, layer)) {
-      var layerRenderer = this.getLayerRenderer(layer);
-      if (layer.getSource()) {
-        result = layerRenderer.forEachFeatureAtCoordinate(
-            layer.getSource().getWrapX() ? translatedCoordinate : coordinate,
-            frameState, forEachFeatureAtCoordinate, thisArg);
-      }
-      if (result) {
-        return result;
-      }
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @param {ol.Pixel} pixel Pixel.
- * @param {olx.FrameState} frameState FrameState.
- * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer
- *     callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @param {function(this: U, ol.layer.Layer): boolean} layerFilter Layer filter
- *     function, only layers which are visible and for which this function
- *     returns `true` will be tested for features.  By default, all visible
- *     layers will be tested.
- * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.
- * @return {T|undefined} Callback result.
- * @template S,T,U
- */
-ol.renderer.Map.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg,
-        layerFilter, thisArg2) {
-  var result;
-  var viewState = frameState.viewState;
-  var viewResolution = viewState.resolution;
-
-  var layerStates = frameState.layerStatesArray;
-  var numLayers = layerStates.length;
-  var i;
-  for (i = numLayers - 1; i >= 0; --i) {
-    var layerState = layerStates[i];
-    var layer = layerState.layer;
-    if (ol.layer.Layer.visibleAtResolution(layerState, viewResolution) &&
-        layerFilter.call(thisArg2, layer)) {
-      var layerRenderer = this.getLayerRenderer(layer);
-      result = layerRenderer.forEachLayerAtPixel(
-          pixel, frameState, callback, thisArg);
-      if (result) {
-        return result;
-      }
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {olx.FrameState} frameState FrameState.
- * @param {function(this: U, ol.layer.Layer): boolean} layerFilter Layer filter
- *     function, only layers which are visible and for which this function
- *     returns `true` will be tested for features.  By default, all visible
- *     layers will be tested.
- * @param {U} thisArg Value to use as `this` when executing `layerFilter`.
- * @return {boolean} Is there a feature at the given coordinate?
- * @template U
- */
-ol.renderer.Map.prototype.hasFeatureAtCoordinate = function(coordinate, frameState, layerFilter, thisArg) {
-  var hasFeature = this.forEachFeatureAtCoordinate(
-      coordinate, frameState, ol.functions.TRUE, this, layerFilter, thisArg);
-
-  return hasFeature !== undefined;
-};
-
-
-/**
- * @param {ol.layer.Layer} layer Layer.
- * @protected
- * @return {ol.renderer.Layer} Layer renderer.
- */
-ol.renderer.Map.prototype.getLayerRenderer = function(layer) {
-  var layerKey = ol.getUid(layer).toString();
-  if (layerKey in this.layerRenderers_) {
-    return this.layerRenderers_[layerKey];
-  } else {
-    var layerRenderer = this.createLayerRenderer(layer);
-    this.layerRenderers_[layerKey] = layerRenderer;
-    this.layerRendererListeners_[layerKey] = ol.events.listen(layerRenderer,
-        ol.events.EventType.CHANGE, this.handleLayerRendererChange_, this);
-
-    return layerRenderer;
-  }
-};
-
-
-/**
- * @param {string} layerKey Layer key.
- * @protected
- * @return {ol.renderer.Layer} Layer renderer.
- */
-ol.renderer.Map.prototype.getLayerRendererByKey = function(layerKey) {
-  ol.DEBUG && console.assert(layerKey in this.layerRenderers_,
-      'given layerKey (%s) exists in layerRenderers', layerKey);
-  return this.layerRenderers_[layerKey];
-};
-
-
-/**
- * @protected
- * @return {Object.<string, ol.renderer.Layer>} Layer renderers.
- */
-ol.renderer.Map.prototype.getLayerRenderers = function() {
-  return this.layerRenderers_;
-};
-
-
-/**
- * @return {ol.Map} Map.
- */
-ol.renderer.Map.prototype.getMap = function() {
-  return this.map_;
-};
-
-
-/**
- * @abstract
- * @return {string} Type
- */
-ol.renderer.Map.prototype.getType = function() {};
-
-
-/**
- * Handle changes in a layer renderer.
- * @private
- */
-ol.renderer.Map.prototype.handleLayerRendererChange_ = function() {
-  this.map_.render();
-};
-
-
-/**
- * @param {string} layerKey Layer key.
- * @return {ol.renderer.Layer} Layer renderer.
- * @private
- */
-ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) {
-  ol.DEBUG && console.assert(layerKey in this.layerRenderers_,
-      'given layerKey (%s) exists in layerRenderers', layerKey);
-  var layerRenderer = this.layerRenderers_[layerKey];
-  delete this.layerRenderers_[layerKey];
-
-  ol.DEBUG && console.assert(layerKey in this.layerRendererListeners_,
-      'given layerKey (%s) exists in layerRendererListeners', layerKey);
-  ol.events.unlistenByKey(this.layerRendererListeners_[layerKey]);
-  delete this.layerRendererListeners_[layerKey];
-
-  return layerRenderer;
-};
-
-
-/**
- * Render.
- * @param {?olx.FrameState} frameState Frame state.
- */
-ol.renderer.Map.prototype.renderFrame = ol.nullFunction;
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {olx.FrameState} frameState Frame state.
- * @private
- */
-ol.renderer.Map.prototype.removeUnusedLayerRenderers_ = function(map, frameState) {
-  var layerKey;
-  for (layerKey in this.layerRenderers_) {
-    if (!frameState || !(layerKey in frameState.layerStates)) {
-      this.removeLayerRendererByKey_(layerKey).dispose();
-    }
-  }
-};
-
-
-/**
- * @param {olx.FrameState} frameState Frame state.
- * @protected
- */
-ol.renderer.Map.prototype.scheduleExpireIconCache = function(frameState) {
-  frameState.postRenderFunctions.push(
-    /** @type {ol.PostRenderFunction} */ (ol.renderer.Map.expireIconCache_)
-  );
-};
-
-
-/**
- * @param {!olx.FrameState} frameState Frame state.
- * @protected
- */
-ol.renderer.Map.prototype.scheduleRemoveUnusedLayerRenderers = function(frameState) {
-  var layerKey;
-  for (layerKey in this.layerRenderers_) {
-    if (!(layerKey in frameState.layerStates)) {
-      frameState.postRenderFunctions.push(
-        /** @type {ol.PostRenderFunction} */ (this.removeUnusedLayerRenderers_.bind(this))
-      );
-      return;
-    }
-  }
-};
-
-
-/**
- * @param {ol.LayerState} state1 First layer state.
- * @param {ol.LayerState} state2 Second layer state.
- * @return {number} The zIndex difference.
- */
-ol.renderer.Map.sortByZIndex = function(state1, state2) {
-  return state1.zIndex - state2.zIndex;
-};
-
-goog.provide('ol.layer.Image');
-
-goog.require('ol');
-goog.require('ol.layer.Layer');
-
-
-/**
- * @classdesc
- * Server-rendered images that are available for arbitrary extents and
- * resolutions.
- * Note that any property set in the options is set as a {@link ol.Object}
- * property on the layer object; for example, setting `title: 'My Title'` in the
- * options means that `title` is observable, and has get/set accessors.
- *
- * @constructor
- * @extends {ol.layer.Layer}
- * @fires ol.render.Event
- * @param {olx.layer.ImageOptions=} opt_options Layer options.
- * @api stable
- */
-ol.layer.Image = function(opt_options) {
-  var options = opt_options ? opt_options : {};
-  ol.layer.Layer.call(this,  /** @type {olx.layer.LayerOptions} */ (options));
-};
-ol.inherits(ol.layer.Image, ol.layer.Layer);
-
-
-/**
- * Return the associated {@link ol.source.Image source} of the image layer.
- * @function
- * @return {ol.source.Image} Source.
- * @api stable
- */
-ol.layer.Image.prototype.getSource;
-
-goog.provide('ol.layer.Tile');
-
-goog.require('ol');
-goog.require('ol.layer.Layer');
-goog.require('ol.obj');
-
-
-/**
- * @classdesc
- * For layer sources that provide pre-rendered, tiled images in grids that are
- * organized by zoom levels for specific resolutions.
- * Note that any property set in the options is set as a {@link ol.Object}
- * property on the layer object; for example, setting `title: 'My Title'` in the
- * options means that `title` is observable, and has get/set accessors.
- *
- * @constructor
- * @extends {ol.layer.Layer}
- * @fires ol.render.Event
- * @param {olx.layer.TileOptions=} opt_options Tile layer options.
- * @api stable
- */
-ol.layer.Tile = function(opt_options) {
-  var options = opt_options ? opt_options : {};
-
-  var baseOptions = ol.obj.assign({}, options);
-
-  delete baseOptions.preload;
-  delete baseOptions.useInterimTilesOnError;
-  ol.layer.Layer.call(this,  /** @type {olx.layer.LayerOptions} */ (baseOptions));
-
-  this.setPreload(options.preload !== undefined ? options.preload : 0);
-  this.setUseInterimTilesOnError(options.useInterimTilesOnError !== undefined ?
-      options.useInterimTilesOnError : true);
-};
-ol.inherits(ol.layer.Tile, ol.layer.Layer);
-
-
-/**
- * Return the level as number to which we will preload tiles up to.
- * @return {number} The level to preload tiles up to.
- * @observable
- * @api
- */
-ol.layer.Tile.prototype.getPreload = function() {
-  return /** @type {number} */ (this.get(ol.layer.Tile.Property.PRELOAD));
-};
-
-
-/**
- * Return the associated {@link ol.source.Tile tilesource} of the layer.
- * @function
- * @return {ol.source.Tile} Source.
- * @api stable
- */
-ol.layer.Tile.prototype.getSource;
-
-
-/**
- * Set the level as number to which we will preload tiles up to.
- * @param {number} preload The level to preload tiles up to.
- * @observable
- * @api
- */
-ol.layer.Tile.prototype.setPreload = function(preload) {
-  this.set(ol.layer.Tile.Property.PRELOAD, preload);
-};
-
-
-/**
- * Whether we use interim tiles on error.
- * @return {boolean} Use interim tiles on error.
- * @observable
- * @api
- */
-ol.layer.Tile.prototype.getUseInterimTilesOnError = function() {
-  return /** @type {boolean} */ (
-      this.get(ol.layer.Tile.Property.USE_INTERIM_TILES_ON_ERROR));
-};
-
-
-/**
- * Set whether we use interim tiles on error.
- * @param {boolean} useInterimTilesOnError Use interim tiles on error.
- * @observable
- * @api
- */
-ol.layer.Tile.prototype.setUseInterimTilesOnError = function(useInterimTilesOnError) {
-  this.set(
-      ol.layer.Tile.Property.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);
-};
-
-
-/**
- * @enum {string}
- */
-ol.layer.Tile.Property = {
-  PRELOAD: 'preload',
-  USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError'
-};
-
-goog.provide('ol.ImageBase');
-
-goog.require('ol');
-goog.require('ol.events.EventTarget');
-goog.require('ol.events.EventType');
-
-
-/**
- * @constructor
- * @extends {ol.events.EventTarget}
- * @param {ol.Extent} extent Extent.
- * @param {number|undefined} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.Image.State} state State.
- * @param {Array.<ol.Attribution>} attributions Attributions.
- */
-ol.ImageBase = function(extent, resolution, pixelRatio, state, attributions) {
-
-  ol.events.EventTarget.call(this);
-
-  /**
-   * @private
-   * @type {Array.<ol.Attribution>}
-   */
-  this.attributions_ = attributions;
-
-  /**
-   * @protected
-   * @type {ol.Extent}
-   */
-  this.extent = extent;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.pixelRatio_ = pixelRatio;
-
-  /**
-   * @protected
-   * @type {number|undefined}
-   */
-  this.resolution = resolution;
-
-  /**
-   * @protected
-   * @type {ol.Image.State}
-   */
-  this.state = state;
-
-};
-ol.inherits(ol.ImageBase, ol.events.EventTarget);
-
-
-/**
- * @protected
- */
-ol.ImageBase.prototype.changed = function() {
-  this.dispatchEvent(ol.events.EventType.CHANGE);
-};
-
-
-/**
- * @return {Array.<ol.Attribution>} Attributions.
- */
-ol.ImageBase.prototype.getAttributions = function() {
-  return this.attributions_;
-};
-
-
-/**
- * @return {ol.Extent} Extent.
- */
-ol.ImageBase.prototype.getExtent = function() {
-  return this.extent;
-};
-
-
-/**
- * @abstract
- * @param {Object=} opt_context Object.
- * @return {HTMLCanvasElement|Image|HTMLVideoElement} Image.
- */
-ol.ImageBase.prototype.getImage = function(opt_context) {};
-
-
-/**
- * @return {number} PixelRatio.
- */
-ol.ImageBase.prototype.getPixelRatio = function() {
-  return this.pixelRatio_;
-};
-
-
-/**
- * @return {number} Resolution.
- */
-ol.ImageBase.prototype.getResolution = function() {
-  ol.DEBUG && console.assert(this.resolution !== undefined, 'resolution not yet set');
-  return /** @type {number} */ (this.resolution);
-};
-
-
-/**
- * @return {ol.Image.State} State.
- */
-ol.ImageBase.prototype.getState = function() {
-  return this.state;
-};
-
-
-/**
- * Load not yet loaded URI.
- * @abstract
- */
-ol.ImageBase.prototype.load = function() {};
-
-goog.provide('ol.Image');
-
-goog.require('ol');
-goog.require('ol.ImageBase');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.obj');
-
-
-/**
- * @constructor
- * @extends {ol.ImageBase}
- * @param {ol.Extent} extent Extent.
- * @param {number|undefined} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {Array.<ol.Attribution>} attributions Attributions.
- * @param {string} src Image source URI.
- * @param {?string} crossOrigin Cross origin.
- * @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.
- */
-ol.Image = function(extent, resolution, pixelRatio, attributions, src,
-    crossOrigin, imageLoadFunction) {
-
-  ol.ImageBase.call(this, extent, resolution, pixelRatio, ol.Image.State.IDLE,
-      attributions);
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.src_ = src;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement|Image|HTMLVideoElement}
-   */
-  this.image_ = new Image();
-  if (crossOrigin !== null) {
-    this.image_.crossOrigin = crossOrigin;
-  }
-
-  /**
-   * @private
-   * @type {Object.<number, (HTMLCanvasElement|Image|HTMLVideoElement)>}
-   */
-  this.imageByContext_ = {};
-
-  /**
-   * @private
-   * @type {Array.<ol.EventsKey>}
-   */
-  this.imageListenerKeys_ = null;
-
-  /**
-   * @protected
-   * @type {ol.Image.State}
-   */
-  this.state = ol.Image.State.IDLE;
-
-  /**
-   * @private
-   * @type {ol.ImageLoadFunctionType}
-   */
-  this.imageLoadFunction_ = imageLoadFunction;
-
-};
-ol.inherits(ol.Image, ol.ImageBase);
-
-
-/**
- * Get the HTML image element (may be a Canvas, Image, or Video).
- * @param {Object=} opt_context Object.
- * @return {HTMLCanvasElement|Image|HTMLVideoElement} Image.
- * @api
- */
-ol.Image.prototype.getImage = function(opt_context) {
-  if (opt_context !== undefined) {
-    var image;
-    var key = ol.getUid(opt_context);
-    if (key in this.imageByContext_) {
-      return this.imageByContext_[key];
-    } else if (ol.obj.isEmpty(this.imageByContext_)) {
-      image = this.image_;
-    } else {
-      image = /** @type {Image} */ (this.image_.cloneNode(false));
-    }
-    this.imageByContext_[key] = image;
-    return image;
-  } else {
-    return this.image_;
-  }
-};
-
-
-/**
- * Tracks loading or read errors.
- *
- * @private
- */
-ol.Image.prototype.handleImageError_ = function() {
-  this.state = ol.Image.State.ERROR;
-  this.unlistenImage_();
-  this.changed();
-};
-
-
-/**
- * Tracks successful image load.
- *
- * @private
- */
-ol.Image.prototype.handleImageLoad_ = function() {
-  if (this.resolution === undefined) {
-    this.resolution = ol.extent.getHeight(this.extent) / this.image_.height;
-  }
-  this.state = ol.Image.State.LOADED;
-  this.unlistenImage_();
-  this.changed();
-};
-
-
-/**
- * Load the image or retry if loading previously failed.
- * Loading is taken care of by the tile queue, and calling this method is
- * only needed for preloading or for reloading in case of an error.
- * @api
- */
-ol.Image.prototype.load = function() {
-  if (this.state == ol.Image.State.IDLE || this.state == ol.Image.State.ERROR) {
-    this.state = ol.Image.State.LOADING;
-    this.changed();
-    ol.DEBUG && console.assert(!this.imageListenerKeys_,
-        'this.imageListenerKeys_ should be null');
-    this.imageListenerKeys_ = [
-      ol.events.listenOnce(this.image_, ol.events.EventType.ERROR,
-          this.handleImageError_, this),
-      ol.events.listenOnce(this.image_, ol.events.EventType.LOAD,
-          this.handleImageLoad_, this)
-    ];
-    this.imageLoadFunction_(this, this.src_);
-  }
-};
-
-
-/**
- * @param {HTMLCanvasElement|Image|HTMLVideoElement} image Image.
- */
-ol.Image.prototype.setImage = function(image) {
-  this.image_ = image;
-};
-
-
-/**
- * Discards event handlers which listen for load completion or errors.
- *
- * @private
- */
-ol.Image.prototype.unlistenImage_ = function() {
-  this.imageListenerKeys_.forEach(ol.events.unlistenByKey);
-  this.imageListenerKeys_ = null;
-};
-
-
-/**
- * @enum {number}
- */
-ol.Image.State = {
-  IDLE: 0,
-  LOADING: 1,
-  LOADED: 2,
-  ERROR: 3
-};
-
-goog.provide('ol.render.canvas');
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.canvas.defaultFont = '10px sans-serif';
-
-
-/**
- * @const
- * @type {ol.Color}
- */
-ol.render.canvas.defaultFillStyle = [0, 0, 0, 1];
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.canvas.defaultLineCap = 'round';
-
-
-/**
- * @const
- * @type {Array.<number>}
- */
-ol.render.canvas.defaultLineDash = [];
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.canvas.defaultLineJoin = 'round';
-
-
-/**
- * @const
- * @type {number}
- */
-ol.render.canvas.defaultMiterLimit = 10;
-
-
-/**
- * @const
- * @type {ol.Color}
- */
-ol.render.canvas.defaultStrokeStyle = [0, 0, 0, 1];
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.canvas.defaultTextAlign = 'center';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.canvas.defaultTextBaseline = 'middle';
-
-
-/**
- * @const
- * @type {number}
- */
-ol.render.canvas.defaultLineWidth = 1;
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {number} rotation Rotation.
- * @param {number} offsetX X offset.
- * @param {number} offsetY Y offset.
- */
-ol.render.canvas.rotateAtOffset = function(context, rotation, offsetX, offsetY) {
-  if (rotation !== 0) {
-    context.translate(offsetX, offsetY);
-    context.rotate(rotation);
-    context.translate(-offsetX, -offsetY);
-  }
-};
-
-goog.provide('ol.style.Image');
-
-
-/**
- * @classdesc
- * A base class used for creating subclasses and not instantiated in
- * apps. Base class for {@link ol.style.Icon}, {@link ol.style.Circle} and
- * {@link ol.style.RegularShape}.
- *
- * @constructor
- * @param {ol.StyleImageOptions} options Options.
- * @api
- */
-ol.style.Image = function(options) {
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.opacity_ = options.opacity;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.rotateWithView_ = options.rotateWithView;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.rotation_ = options.rotation;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.scale_ = options.scale;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.snapToPixel_ = options.snapToPixel;
-
-};
-
-
-/**
- * Get the symbolizer opacity.
- * @return {number} Opacity.
- * @api
- */
-ol.style.Image.prototype.getOpacity = function() {
-  return this.opacity_;
-};
-
-
-/**
- * Determine whether the symbolizer rotates with the map.
- * @return {boolean} Rotate with map.
- * @api
- */
-ol.style.Image.prototype.getRotateWithView = function() {
-  return this.rotateWithView_;
-};
-
-
-/**
- * Get the symoblizer rotation.
- * @return {number} Rotation.
- * @api
- */
-ol.style.Image.prototype.getRotation = function() {
-  return this.rotation_;
-};
-
-
-/**
- * Get the symbolizer scale.
- * @return {number} Scale.
- * @api
- */
-ol.style.Image.prototype.getScale = function() {
-  return this.scale_;
-};
-
-
-/**
- * Determine whether the symbolizer should be snapped to a pixel.
- * @return {boolean} The symbolizer should snap to a pixel.
- * @api
- */
-ol.style.Image.prototype.getSnapToPixel = function() {
-  return this.snapToPixel_;
-};
-
-
-/**
- * Get the anchor point in pixels. The anchor determines the center point for the
- * symbolizer.
- * @abstract
- * @return {Array.<number>} Anchor.
- */
-ol.style.Image.prototype.getAnchor = function() {};
-
-
-/**
- * Get the image element for the symbolizer.
- * @abstract
- * @param {number} pixelRatio Pixel ratio.
- * @return {HTMLCanvasElement|HTMLVideoElement|Image} Image element.
- */
-ol.style.Image.prototype.getImage = function(pixelRatio) {};
-
-
-/**
- * @abstract
- * @param {number} pixelRatio Pixel ratio.
- * @return {HTMLCanvasElement|HTMLVideoElement|Image} Image element.
- */
-ol.style.Image.prototype.getHitDetectionImage = function(pixelRatio) {};
-
-
-/**
- * @abstract
- * @return {ol.Image.State} Image state.
- */
-ol.style.Image.prototype.getImageState = function() {};
-
-
-/**
- * @abstract
- * @return {ol.Size} Image size.
- */
-ol.style.Image.prototype.getImageSize = function() {};
-
-
-/**
- * @abstract
- * @return {ol.Size} Size of the hit-detection image.
- */
-ol.style.Image.prototype.getHitDetectionImageSize = function() {};
-
-
-/**
- * Get the origin of the symbolizer.
- * @abstract
- * @return {Array.<number>} Origin.
- */
-ol.style.Image.prototype.getOrigin = function() {};
-
-
-/**
- * Get the size of the symbolizer (in pixels).
- * @abstract
- * @return {ol.Size} Size.
- */
-ol.style.Image.prototype.getSize = function() {};
-
-
-/**
- * Set the opacity.
- *
- * @param {number} opacity Opacity.
- * @api
- */
-ol.style.Image.prototype.setOpacity = function(opacity) {
-  this.opacity_ = opacity;
-};
-
-
-/**
- * Set whether to rotate the style with the view.
- *
- * @param {boolean} rotateWithView Rotate with map.
- */
-ol.style.Image.prototype.setRotateWithView = function(rotateWithView) {
-  this.rotateWithView_ = rotateWithView;
-};
-
-
-/**
- * Set the rotation.
- *
- * @param {number} rotation Rotation.
- * @api
- */
-ol.style.Image.prototype.setRotation = function(rotation) {
-  this.rotation_ = rotation;
-};
-
-
-/**
- * Set the scale.
- *
- * @param {number} scale Scale.
- * @api
- */
-ol.style.Image.prototype.setScale = function(scale) {
-  this.scale_ = scale;
-};
-
-
-/**
- * Set whether to snap the image to the closest pixel.
- *
- * @param {boolean} snapToPixel Snap to pixel?
- */
-ol.style.Image.prototype.setSnapToPixel = function(snapToPixel) {
-  this.snapToPixel_ = snapToPixel;
-};
-
-
-/**
- * @abstract
- * @param {function(this: T, ol.events.Event)} listener Listener function.
- * @param {T} thisArg Value to use as `this` when executing `listener`.
- * @return {ol.EventsKey|undefined} Listener key.
- * @template T
- */
-ol.style.Image.prototype.listenImageChange = function(listener, thisArg) {};
-
-
-/**
- * Load not yet loaded URI.
- * @abstract
- */
-ol.style.Image.prototype.load = function() {};
-
-
-/**
- * @abstract
- * @param {function(this: T, ol.events.Event)} listener Listener function.
- * @param {T} thisArg Value to use as `this` when executing `listener`.
- * @template T
- */
-ol.style.Image.prototype.unlistenImageChange = function(listener, thisArg) {};
-
-goog.provide('ol.style.Circle');
-
-goog.require('ol');
-goog.require('ol.color');
-goog.require('ol.colorlike');
-goog.require('ol.dom');
-goog.require('ol.has');
-goog.require('ol.Image');
-goog.require('ol.render.canvas');
-goog.require('ol.style.Image');
-
-
-/**
- * @classdesc
- * Set circle style for vector features.
- *
- * @constructor
- * @param {olx.style.CircleOptions=} opt_options Options.
- * @extends {ol.style.Image}
- * @api
- */
-ol.style.Circle = function(opt_options) {
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {ol.style.AtlasManager|undefined}
-   */
-  this.atlasManager_ = options.atlasManager;
-
-  /**
-   * @private
-   * @type {Array.<string>}
-   */
-  this.checksums_ = null;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = null;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.hitDetectionCanvas_ = null;
-
-  /**
-   * @private
-   * @type {ol.style.Fill}
-   */
-  this.fill_ = options.fill !== undefined ? options.fill : null;
-
-  /**
-   * @private
-   * @type {ol.style.Stroke}
-   */
-  this.stroke_ = options.stroke !== undefined ? options.stroke : null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.radius_ = options.radius;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.origin_ = [0, 0];
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.anchor_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.size_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.imageSize_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.hitDetectionImageSize_ = null;
-
-  this.render_(this.atlasManager_);
-
-  /**
-   * @type {boolean}
-   */
-  var snapToPixel = options.snapToPixel !== undefined ?
-      options.snapToPixel : true;
-
-  ol.style.Image.call(this, {
-    opacity: 1,
-    rotateWithView: false,
-    rotation: 0,
-    scale: 1,
-    snapToPixel: snapToPixel
-  });
-
-};
-ol.inherits(ol.style.Circle, ol.style.Image);
-
-
-/**
- * Clones the style.  If an atlasmanger was provided to the original style it will be used in the cloned style, too.
- * @return {ol.style.Image} The cloned style.
- * @api
- */
-ol.style.Circle.prototype.clone = function() {
-  var style = new ol.style.Circle({
-    fill: this.getFill() ? this.getFill().clone() : undefined,
-    stroke: this.getStroke() ? this.getStroke().clone() : undefined,
-    radius: this.getRadius(),
-    snapToPixel: this.getSnapToPixel(),
-    atlasManager: this.atlasManager_
-  });
-  style.setOpacity(this.getOpacity());
-  style.setScale(this.getScale());
-  return style;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.getAnchor = function() {
-  return this.anchor_;
-};
-
-
-/**
- * Get the fill style for the circle.
- * @return {ol.style.Fill} Fill style.
- * @api
- */
-ol.style.Circle.prototype.getFill = function() {
-  return this.fill_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.getHitDetectionImage = function(pixelRatio) {
-  return this.hitDetectionCanvas_;
-};
-
-
-/**
- * Get the image used to render the circle.
- * @param {number} pixelRatio Pixel ratio.
- * @return {HTMLCanvasElement} Canvas element.
- * @api
- */
-ol.style.Circle.prototype.getImage = function(pixelRatio) {
-  return this.canvas_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.getImageState = function() {
-  return ol.Image.State.LOADED;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.getImageSize = function() {
-  return this.imageSize_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.getHitDetectionImageSize = function() {
-  return this.hitDetectionImageSize_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.getOrigin = function() {
-  return this.origin_;
-};
-
-
-/**
- * Get the circle radius.
- * @return {number} Radius.
- * @api
- */
-ol.style.Circle.prototype.getRadius = function() {
-  return this.radius_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.getSize = function() {
-  return this.size_;
-};
-
-
-/**
- * Get the stroke style for the circle.
- * @return {ol.style.Stroke} Stroke style.
- * @api
- */
-ol.style.Circle.prototype.getStroke = function() {
-  return this.stroke_;
-};
-
-
-/**
- * Set the circle radius.
- *
- * @param {number} radius Circle radius.
- * @api
- */
-ol.style.Circle.prototype.setRadius = function(radius) {
-  this.radius_ = radius;
-  this.render_(this.atlasManager_);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.listenImageChange = ol.nullFunction;
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.load = ol.nullFunction;
-
-
-/**
- * @inheritDoc
- */
-ol.style.Circle.prototype.unlistenImageChange = ol.nullFunction;
-
-
-/**
- * @private
- * @param {ol.style.AtlasManager|undefined} atlasManager An atlas manager.
- */
-ol.style.Circle.prototype.render_ = function(atlasManager) {
-  var imageSize;
-  var lineDash = null;
-  var strokeStyle;
-  var strokeWidth = 0;
-
-  if (this.stroke_) {
-    strokeStyle = ol.colorlike.asColorLike(this.stroke_.getColor());
-    strokeWidth = this.stroke_.getWidth();
-    if (strokeWidth === undefined) {
-      strokeWidth = ol.render.canvas.defaultLineWidth;
-    }
-    lineDash = this.stroke_.getLineDash();
-    if (!ol.has.CANVAS_LINE_DASH) {
-      lineDash = null;
-    }
-  }
-
-
-  var size = 2 * (this.radius_ + strokeWidth) + 1;
-
-  /** @type {ol.CircleRenderOptions} */
-  var renderOptions = {
-    strokeStyle: strokeStyle,
-    strokeWidth: strokeWidth,
-    size: size,
-    lineDash: lineDash
-  };
-
-  if (atlasManager === undefined) {
-    // no atlas manager is used, create a new canvas
-    var context = ol.dom.createCanvasContext2D(size, size);
-    this.canvas_ = context.canvas;
-
-    // canvas.width and height are rounded to the closest integer
-    size = this.canvas_.width;
-    imageSize = size;
-
-    // draw the circle on the canvas
-    this.draw_(renderOptions, context, 0, 0);
-
-    this.createHitDetectionCanvas_(renderOptions);
-  } else {
-    // an atlas manager is used, add the symbol to an atlas
-    size = Math.round(size);
-
-    var hasCustomHitDetectionImage = !this.fill_;
-    var renderHitDetectionCallback;
-    if (hasCustomHitDetectionImage) {
-      // render the hit-detection image into a separate atlas image
-      renderHitDetectionCallback =
-          this.drawHitDetectionCanvas_.bind(this, renderOptions);
-    }
-
-    var id = this.getChecksum();
-    var info = atlasManager.add(
-        id, size, size, this.draw_.bind(this, renderOptions),
-        renderHitDetectionCallback);
-    ol.DEBUG && console.assert(info, 'circle radius is too large');
-
-    this.canvas_ = info.image;
-    this.origin_ = [info.offsetX, info.offsetY];
-    imageSize = info.image.width;
-
-    if (hasCustomHitDetectionImage) {
-      this.hitDetectionCanvas_ = info.hitImage;
-      this.hitDetectionImageSize_ =
-          [info.hitImage.width, info.hitImage.height];
-    } else {
-      this.hitDetectionCanvas_ = this.canvas_;
-      this.hitDetectionImageSize_ = [imageSize, imageSize];
-    }
-  }
-
-  this.anchor_ = [size / 2, size / 2];
-  this.size_ = [size, size];
-  this.imageSize_ = [imageSize, imageSize];
-};
-
-
-/**
- * @private
- * @param {ol.CircleRenderOptions} renderOptions Render options.
- * @param {CanvasRenderingContext2D} context The rendering context.
- * @param {number} x The origin for the symbol (x).
- * @param {number} y The origin for the symbol (y).
- */
-ol.style.Circle.prototype.draw_ = function(renderOptions, context, x, y) {
-  // reset transform
-  context.setTransform(1, 0, 0, 1, 0, 0);
-
-  // then move to (x, y)
-  context.translate(x, y);
-
-  context.beginPath();
-  context.arc(
-      renderOptions.size / 2, renderOptions.size / 2,
-      this.radius_, 0, 2 * Math.PI, true);
-
-  if (this.fill_) {
-    context.fillStyle = ol.colorlike.asColorLike(this.fill_.getColor());
-    context.fill();
-  }
-  if (this.stroke_) {
-    context.strokeStyle = renderOptions.strokeStyle;
-    context.lineWidth = renderOptions.strokeWidth;
-    if (renderOptions.lineDash) {
-      context.setLineDash(renderOptions.lineDash);
-    }
-    context.stroke();
-  }
-  context.closePath();
-};
-
-
-/**
- * @private
- * @param {ol.CircleRenderOptions} renderOptions Render options.
- */
-ol.style.Circle.prototype.createHitDetectionCanvas_ = function(renderOptions) {
-  this.hitDetectionImageSize_ = [renderOptions.size, renderOptions.size];
-  if (this.fill_) {
-    this.hitDetectionCanvas_ = this.canvas_;
-    return;
-  }
-
-  // if no fill style is set, create an extra hit-detection image with a
-  // default fill style
-  var context = ol.dom.createCanvasContext2D(renderOptions.size, renderOptions.size);
-  this.hitDetectionCanvas_ = context.canvas;
-
-  this.drawHitDetectionCanvas_(renderOptions, context, 0, 0);
-};
-
-
-/**
- * @private
- * @param {ol.CircleRenderOptions} renderOptions Render options.
- * @param {CanvasRenderingContext2D} context The context.
- * @param {number} x The origin for the symbol (x).
- * @param {number} y The origin for the symbol (y).
- */
-ol.style.Circle.prototype.drawHitDetectionCanvas_ = function(renderOptions, context, x, y) {
-  // reset transform
-  context.setTransform(1, 0, 0, 1, 0, 0);
-
-  // then move to (x, y)
-  context.translate(x, y);
-
-  context.beginPath();
-  context.arc(
-      renderOptions.size / 2, renderOptions.size / 2,
-      this.radius_, 0, 2 * Math.PI, true);
-
-  context.fillStyle = ol.color.asString(ol.render.canvas.defaultFillStyle);
-  context.fill();
-  if (this.stroke_) {
-    context.strokeStyle = renderOptions.strokeStyle;
-    context.lineWidth = renderOptions.strokeWidth;
-    if (renderOptions.lineDash) {
-      context.setLineDash(renderOptions.lineDash);
-    }
-    context.stroke();
-  }
-  context.closePath();
-};
-
-
-/**
- * @return {string} The checksum.
- */
-ol.style.Circle.prototype.getChecksum = function() {
-  var strokeChecksum = this.stroke_ ?
-      this.stroke_.getChecksum() : '-';
-  var fillChecksum = this.fill_ ?
-      this.fill_.getChecksum() : '-';
-
-  var recalculate = !this.checksums_ ||
-      (strokeChecksum != this.checksums_[1] ||
-      fillChecksum != this.checksums_[2] ||
-      this.radius_ != this.checksums_[3]);
-
-  if (recalculate) {
-    var checksum = 'c' + strokeChecksum + fillChecksum +
-        (this.radius_ !== undefined ? this.radius_.toString() : '-');
-    this.checksums_ = [checksum, strokeChecksum, fillChecksum, this.radius_];
-  }
-
-  return this.checksums_[0];
-};
-
-goog.provide('ol.style.Fill');
-
-goog.require('ol');
-goog.require('ol.color');
-
-
-/**
- * @classdesc
- * Set fill style for vector features.
- *
- * @constructor
- * @param {olx.style.FillOptions=} opt_options Options.
- * @api
- */
-ol.style.Fill = function(opt_options) {
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {ol.Color|ol.ColorLike}
-   */
-  this.color_ = options.color !== undefined ? options.color : null;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.checksum_ = undefined;
-};
-
-
-/**
- * Clones the style. The color is not cloned if it is an {@link ol.ColorLike}.
- * @return {ol.style.Fill} The cloned style.
- * @api
- */
-ol.style.Fill.prototype.clone = function() {
-  var color = this.getColor();
-  return new ol.style.Fill({
-    color: (color && color.slice) ? color.slice() : color || undefined
-  });
-};
-
-
-/**
- * Get the fill color.
- * @return {ol.Color|ol.ColorLike} Color.
- * @api
- */
-ol.style.Fill.prototype.getColor = function() {
-  return this.color_;
-};
-
-
-/**
- * Set the color.
- *
- * @param {ol.Color|ol.ColorLike} color Color.
- * @api
- */
-ol.style.Fill.prototype.setColor = function(color) {
-  this.color_ = color;
-  this.checksum_ = undefined;
-};
-
-
-/**
- * @return {string} The checksum.
- */
-ol.style.Fill.prototype.getChecksum = function() {
-  if (this.checksum_ === undefined) {
-    if (
-        this.color_ instanceof CanvasPattern ||
-        this.color_ instanceof CanvasGradient
-    ) {
-      this.checksum_ = ol.getUid(this.color_).toString();
-    } else {
-      this.checksum_ = 'f' + (this.color_ ?
-          ol.color.asString(this.color_) : '-');
-    }
-  }
-
-  return this.checksum_;
-};
-
-goog.provide('ol.style.Stroke');
-
-goog.require('ol');
-
-
-/**
- * @classdesc
- * Set stroke style for vector features.
- * Note that the defaults given are the Canvas defaults, which will be used if
- * option is not defined. The `get` functions return whatever was entered in
- * the options; they will not return the default.
- *
- * @constructor
- * @param {olx.style.StrokeOptions=} opt_options Options.
- * @api
- */
-ol.style.Stroke = function(opt_options) {
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {ol.Color|ol.ColorLike}
-   */
-  this.color_ = options.color !== undefined ? options.color : null;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.lineCap_ = options.lineCap;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.lineJoin_ = options.lineJoin;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.miterLimit_ = options.miterLimit;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.width_ = options.width;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.checksum_ = undefined;
-};
-
-
-/**
- * Clones the style.
- * @return {ol.style.Stroke} The cloned style.
- * @api
- */
-ol.style.Stroke.prototype.clone = function() {
-  var color = this.getColor();
-  return new ol.style.Stroke({
-    color: (color && color.slice) ? color.slice() : color || undefined,
-    lineCap: this.getLineCap(),
-    lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,
-    lineJoin: this.getLineJoin(),
-    miterLimit: this.getMiterLimit(),
-    width: this.getWidth()
-  });
-};
-
-
-/**
- * Get the stroke color.
- * @return {ol.Color|ol.ColorLike} Color.
- * @api
- */
-ol.style.Stroke.prototype.getColor = function() {
-  return this.color_;
-};
-
-
-/**
- * Get the line cap type for the stroke.
- * @return {string|undefined} Line cap.
- * @api
- */
-ol.style.Stroke.prototype.getLineCap = function() {
-  return this.lineCap_;
-};
-
-
-/**
- * Get the line dash style for the stroke.
- * @return {Array.<number>} Line dash.
- * @api
- */
-ol.style.Stroke.prototype.getLineDash = function() {
-  return this.lineDash_;
-};
-
-
-/**
- * Get the line join type for the stroke.
- * @return {string|undefined} Line join.
- * @api
- */
-ol.style.Stroke.prototype.getLineJoin = function() {
-  return this.lineJoin_;
-};
-
-
-/**
- * Get the miter limit for the stroke.
- * @return {number|undefined} Miter limit.
- * @api
- */
-ol.style.Stroke.prototype.getMiterLimit = function() {
-  return this.miterLimit_;
-};
-
-
-/**
- * Get the stroke width.
- * @return {number|undefined} Width.
- * @api
- */
-ol.style.Stroke.prototype.getWidth = function() {
-  return this.width_;
-};
-
-
-/**
- * Set the color.
- *
- * @param {ol.Color|ol.ColorLike} color Color.
- * @api
- */
-ol.style.Stroke.prototype.setColor = function(color) {
-  this.color_ = color;
-  this.checksum_ = undefined;
-};
-
-
-/**
- * Set the line cap.
- *
- * @param {string|undefined} lineCap Line cap.
- * @api
- */
-ol.style.Stroke.prototype.setLineCap = function(lineCap) {
-  this.lineCap_ = lineCap;
-  this.checksum_ = undefined;
-};
-
-
-/**
- * Set the line dash.
- *
- * Please note that Internet Explorer 10 and lower [do not support][mdn] the
- * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this
- * property will have no visual effect in these browsers.
- *
- * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility
- *
- * @param {Array.<number>} lineDash Line dash.
- * @api
- */
-ol.style.Stroke.prototype.setLineDash = function(lineDash) {
-  this.lineDash_ = lineDash;
-  this.checksum_ = undefined;
-};
-
-
-/**
- * Set the line join.
- *
- * @param {string|undefined} lineJoin Line join.
- * @api
- */
-ol.style.Stroke.prototype.setLineJoin = function(lineJoin) {
-  this.lineJoin_ = lineJoin;
-  this.checksum_ = undefined;
-};
-
-
-/**
- * Set the miter limit.
- *
- * @param {number|undefined} miterLimit Miter limit.
- * @api
- */
-ol.style.Stroke.prototype.setMiterLimit = function(miterLimit) {
-  this.miterLimit_ = miterLimit;
-  this.checksum_ = undefined;
-};
-
-
-/**
- * Set the width.
- *
- * @param {number|undefined} width Width.
- * @api
- */
-ol.style.Stroke.prototype.setWidth = function(width) {
-  this.width_ = width;
-  this.checksum_ = undefined;
-};
-
-
-/**
- * @return {string} The checksum.
- */
-ol.style.Stroke.prototype.getChecksum = function() {
-  if (this.checksum_ === undefined) {
-    this.checksum_ = 's';
-    if (this.color_) {
-      if (typeof this.color_ === 'string') {
-        this.checksum_ += this.color_;
-      } else {
-        this.checksum_ += ol.getUid(this.color_).toString();
-      }
-    } else {
-      this.checksum_ += '-';
-    }
-    this.checksum_ += ',' +
-        (this.lineCap_ !== undefined ?
-            this.lineCap_.toString() : '-') + ',' +
-        (this.lineDash_ ?
-            this.lineDash_.toString() : '-') + ',' +
-        (this.lineJoin_ !== undefined ?
-            this.lineJoin_ : '-') + ',' +
-        (this.miterLimit_ !== undefined ?
-            this.miterLimit_.toString() : '-') + ',' +
-        (this.width_ !== undefined ?
-            this.width_.toString() : '-');
-  }
-
-  return this.checksum_;
-};
-
-goog.provide('ol.style.Style');
-
-goog.require('ol.asserts');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.style.Circle');
-goog.require('ol.style.Fill');
-goog.require('ol.style.Stroke');
-
-
-/**
- * @classdesc
- * Container for vector feature rendering styles. Any changes made to the style
- * or its children through `set*()` methods will not take effect until the
- * feature or layer that uses the style is re-rendered.
- *
- * @constructor
- * @struct
- * @param {olx.style.StyleOptions=} opt_options Style options.
- * @api
- */
-ol.style.Style = function(opt_options) {
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {string|ol.geom.Geometry|ol.StyleGeometryFunction}
-   */
-  this.geometry_ = null;
-
-  /**
-   * @private
-   * @type {!ol.StyleGeometryFunction}
-   */
-  this.geometryFunction_ = ol.style.Style.defaultGeometryFunction;
-
-  if (options.geometry !== undefined) {
-    this.setGeometry(options.geometry);
-  }
-
-  /**
-   * @private
-   * @type {ol.style.Fill}
-   */
-  this.fill_ = options.fill !== undefined ? options.fill : null;
-
-  /**
-   * @private
-   * @type {ol.style.Image}
-   */
-  this.image_ = options.image !== undefined ? options.image : null;
-
-  /**
-   * @private
-   * @type {ol.style.Stroke}
-   */
-  this.stroke_ = options.stroke !== undefined ? options.stroke : null;
-
-  /**
-   * @private
-   * @type {ol.style.Text}
-   */
-  this.text_ = options.text !== undefined ? options.text : null;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.zIndex_ = options.zIndex;
-
-};
-
-
-/**
- * Clones the style.
- * @return {ol.style.Style} The cloned style.
- * @api
- */
-ol.style.Style.prototype.clone = function() {
-  var geometry = this.getGeometry();
-  if (geometry && geometry.clone) {
-    geometry = geometry.clone();
-  }
-  return new ol.style.Style({
-    geometry: geometry,
-    fill: this.getFill() ? this.getFill().clone() : undefined,
-    image: this.getImage() ? this.getImage().clone() : undefined,
-    stroke: this.getStroke() ? this.getStroke().clone() : undefined,
-    text: this.getText() ? this.getText().clone() : undefined,
-    zIndex: this.getZIndex()
-  });
-};
-
-
-/**
- * Get the geometry to be rendered.
- * @return {string|ol.geom.Geometry|ol.StyleGeometryFunction}
- * Feature property or geometry or function that returns the geometry that will
- * be rendered with this style.
- * @api
- */
-ol.style.Style.prototype.getGeometry = function() {
-  return this.geometry_;
-};
-
-
-/**
- * Get the function used to generate a geometry for rendering.
- * @return {!ol.StyleGeometryFunction} Function that is called with a feature
- * and returns the geometry to render instead of the feature's geometry.
- * @api
- */
-ol.style.Style.prototype.getGeometryFunction = function() {
-  return this.geometryFunction_;
-};
-
-
-/**
- * Get the fill style.
- * @return {ol.style.Fill} Fill style.
- * @api
- */
-ol.style.Style.prototype.getFill = function() {
-  return this.fill_;
-};
-
-
-/**
- * Get the image style.
- * @return {ol.style.Image} Image style.
- * @api
- */
-ol.style.Style.prototype.getImage = function() {
-  return this.image_;
-};
-
-
-/**
- * Get the stroke style.
- * @return {ol.style.Stroke} Stroke style.
- * @api
- */
-ol.style.Style.prototype.getStroke = function() {
-  return this.stroke_;
-};
-
-
-/**
- * Get the text style.
- * @return {ol.style.Text} Text style.
- * @api
- */
-ol.style.Style.prototype.getText = function() {
-  return this.text_;
-};
-
-
-/**
- * Get the z-index for the style.
- * @return {number|undefined} ZIndex.
- * @api
- */
-ol.style.Style.prototype.getZIndex = function() {
-  return this.zIndex_;
-};
-
-
-/**
- * Set a geometry that is rendered instead of the feature's geometry.
- *
- * @param {string|ol.geom.Geometry|ol.StyleGeometryFunction} geometry
- *     Feature property or geometry or function returning a geometry to render
- *     for this style.
- * @api
- */
-ol.style.Style.prototype.setGeometry = function(geometry) {
-  if (typeof geometry === 'function') {
-    this.geometryFunction_ = geometry;
-  } else if (typeof geometry === 'string') {
-    this.geometryFunction_ = function(feature) {
-      return /** @type {ol.geom.Geometry} */ (feature.get(geometry));
-    };
-  } else if (!geometry) {
-    this.geometryFunction_ = ol.style.Style.defaultGeometryFunction;
-  } else if (geometry !== undefined) {
-    this.geometryFunction_ = function() {
-      return /** @type {ol.geom.Geometry} */ (geometry);
-    };
-  }
-  this.geometry_ = geometry;
-};
-
-
-/**
- * Set the z-index.
- *
- * @param {number|undefined} zIndex ZIndex.
- * @api
- */
-ol.style.Style.prototype.setZIndex = function(zIndex) {
-  this.zIndex_ = zIndex;
-};
-
-
-/**
- * Convert the provided object into a style function.  Functions passed through
- * unchanged.  Arrays of ol.style.Style or single style objects wrapped in a
- * new style function.
- * @param {ol.StyleFunction|Array.<ol.style.Style>|ol.style.Style} obj
- *     A style function, a single style, or an array of styles.
- * @return {ol.StyleFunction} A style function.
- */
-ol.style.Style.createFunction = function(obj) {
-  var styleFunction;
-
-  if (typeof obj === 'function') {
-    styleFunction = obj;
-  } else {
-    /**
-     * @type {Array.<ol.style.Style>}
-     */
-    var styles;
-    if (Array.isArray(obj)) {
-      styles = obj;
-    } else {
-      ol.asserts.assert(obj instanceof ol.style.Style,
-          41); // Expected an `ol.style.Style` or an array of `ol.style.Style`
-      styles = [obj];
-    }
-    styleFunction = function() {
-      return styles;
-    };
-  }
-  return styleFunction;
-};
-
-
-/**
- * @type {Array.<ol.style.Style>}
- * @private
- */
-ol.style.Style.default_ = null;
-
-
-/**
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @param {number} resolution Resolution.
- * @return {Array.<ol.style.Style>} Style.
- */
-ol.style.Style.defaultFunction = function(feature, resolution) {
-  // We don't use an immediately-invoked function
-  // and a closure so we don't get an error at script evaluation time in
-  // browsers that do not support Canvas. (ol.style.Circle does
-  // canvas.getContext('2d') at construction time, which will cause an.error
-  // in such browsers.)
-  if (!ol.style.Style.default_) {
-    var fill = new ol.style.Fill({
-      color: 'rgba(255,255,255,0.4)'
-    });
-    var stroke = new ol.style.Stroke({
-      color: '#3399CC',
-      width: 1.25
-    });
-    ol.style.Style.default_ = [
-      new ol.style.Style({
-        image: new ol.style.Circle({
-          fill: fill,
-          stroke: stroke,
-          radius: 5
-        }),
-        fill: fill,
-        stroke: stroke
-      })
-    ];
-  }
-  return ol.style.Style.default_;
-};
-
-
-/**
- * Default styles for editing features.
- * @return {Object.<ol.geom.GeometryType, Array.<ol.style.Style>>} Styles
- */
-ol.style.Style.createDefaultEditing = function() {
-  /** @type {Object.<ol.geom.GeometryType, Array.<ol.style.Style>>} */
-  var styles = {};
-  var white = [255, 255, 255, 1];
-  var blue = [0, 153, 255, 1];
-  var width = 3;
-  styles[ol.geom.GeometryType.POLYGON] = [
-    new ol.style.Style({
-      fill: new ol.style.Fill({
-        color: [255, 255, 255, 0.5]
-      })
-    })
-  ];
-  styles[ol.geom.GeometryType.MULTI_POLYGON] =
-      styles[ol.geom.GeometryType.POLYGON];
-
-  styles[ol.geom.GeometryType.LINE_STRING] = [
-    new ol.style.Style({
-      stroke: new ol.style.Stroke({
-        color: white,
-        width: width + 2
-      })
-    }),
-    new ol.style.Style({
-      stroke: new ol.style.Stroke({
-        color: blue,
-        width: width
-      })
-    })
-  ];
-  styles[ol.geom.GeometryType.MULTI_LINE_STRING] =
-      styles[ol.geom.GeometryType.LINE_STRING];
-
-  styles[ol.geom.GeometryType.CIRCLE] =
-      styles[ol.geom.GeometryType.POLYGON].concat(
-          styles[ol.geom.GeometryType.LINE_STRING]
-      );
-
-
-  styles[ol.geom.GeometryType.POINT] = [
-    new ol.style.Style({
-      image: new ol.style.Circle({
-        radius: width * 2,
-        fill: new ol.style.Fill({
-          color: blue
-        }),
-        stroke: new ol.style.Stroke({
-          color: white,
-          width: width / 2
-        })
-      }),
-      zIndex: Infinity
-    })
-  ];
-  styles[ol.geom.GeometryType.MULTI_POINT] =
-      styles[ol.geom.GeometryType.POINT];
-
-  styles[ol.geom.GeometryType.GEOMETRY_COLLECTION] =
-      styles[ol.geom.GeometryType.POLYGON].concat(
-          styles[ol.geom.GeometryType.LINE_STRING],
-          styles[ol.geom.GeometryType.POINT]
-      );
-
-  return styles;
-};
-
-
-/**
- * Function that is called with a feature and returns its default geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature to get the geometry
- *     for.
- * @return {ol.geom.Geometry|ol.render.Feature|undefined} Geometry to render.
- */
-ol.style.Style.defaultGeometryFunction = function(feature) {
-  return feature.getGeometry();
-};
-
-goog.provide('ol.layer.Vector');
-
-goog.require('ol');
-goog.require('ol.layer.Layer');
-goog.require('ol.obj');
-goog.require('ol.style.Style');
-
-
-/**
- * @classdesc
- * Vector data that is rendered client-side.
- * Note that any property set in the options is set as a {@link ol.Object}
- * property on the layer object; for example, setting `title: 'My Title'` in the
- * options means that `title` is observable, and has get/set accessors.
- *
- * @constructor
- * @extends {ol.layer.Layer}
- * @fires ol.render.Event
- * @param {olx.layer.VectorOptions=} opt_options Options.
- * @api stable
- */
-ol.layer.Vector = function(opt_options) {
-
-  var options = opt_options ?
-      opt_options : /** @type {olx.layer.VectorOptions} */ ({});
-
-  ol.DEBUG && console.assert(
-      options.renderOrder === undefined || !options.renderOrder ||
-      typeof options.renderOrder === 'function',
-      'renderOrder must be a comparator function');
-
-  var baseOptions = ol.obj.assign({}, options);
-
-  delete baseOptions.style;
-  delete baseOptions.renderBuffer;
-  delete baseOptions.updateWhileAnimating;
-  delete baseOptions.updateWhileInteracting;
-  ol.layer.Layer.call(this, /** @type {olx.layer.LayerOptions} */ (baseOptions));
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.renderBuffer_ = options.renderBuffer !== undefined ?
-      options.renderBuffer : 100;
-
-  /**
-   * User provided style.
-   * @type {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction}
-   * @private
-   */
-  this.style_ = null;
-
-  /**
-   * Style function for use within the library.
-   * @type {ol.StyleFunction|undefined}
-   * @private
-   */
-  this.styleFunction_ = undefined;
-
-  this.setStyle(options.style);
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.updateWhileAnimating_ = options.updateWhileAnimating !== undefined ?
-      options.updateWhileAnimating : false;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.updateWhileInteracting_ = options.updateWhileInteracting !== undefined ?
-      options.updateWhileInteracting : false;
-
-};
-ol.inherits(ol.layer.Vector, ol.layer.Layer);
-
-
-/**
- * @return {number|undefined} Render buffer.
- */
-ol.layer.Vector.prototype.getRenderBuffer = function() {
-  return this.renderBuffer_;
-};
-
-
-/**
- * @return {function(ol.Feature, ol.Feature): number|null|undefined} Render
- *     order.
- */
-ol.layer.Vector.prototype.getRenderOrder = function() {
-  return /** @type {function(ol.Feature, ol.Feature):number|null|undefined} */ (
-      this.get(ol.layer.Vector.Property.RENDER_ORDER));
-};
-
-
-/**
- * Return the associated {@link ol.source.Vector vectorsource} of the layer.
- * @function
- * @return {ol.source.Vector} Source.
- * @api stable
- */
-ol.layer.Vector.prototype.getSource;
-
-
-/**
- * Get the style for features.  This returns whatever was passed to the `style`
- * option at construction or to the `setStyle` method.
- * @return {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction}
- *     Layer style.
- * @api stable
- */
-ol.layer.Vector.prototype.getStyle = function() {
-  return this.style_;
-};
-
-
-/**
- * Get the style function.
- * @return {ol.StyleFunction|undefined} Layer style function.
- * @api stable
- */
-ol.layer.Vector.prototype.getStyleFunction = function() {
-  return this.styleFunction_;
-};
-
-
-/**
- * @return {boolean} Whether the rendered layer should be updated while
- *     animating.
- */
-ol.layer.Vector.prototype.getUpdateWhileAnimating = function() {
-  return this.updateWhileAnimating_;
-};
-
-
-/**
- * @return {boolean} Whether the rendered layer should be updated while
- *     interacting.
- */
-ol.layer.Vector.prototype.getUpdateWhileInteracting = function() {
-  return this.updateWhileInteracting_;
-};
-
-
-/**
- * @param {function(ol.Feature, ol.Feature):number|null|undefined} renderOrder
- *     Render order.
- */
-ol.layer.Vector.prototype.setRenderOrder = function(renderOrder) {
-  ol.DEBUG && console.assert(
-      renderOrder === undefined || !renderOrder ||
-      typeof renderOrder === 'function',
-      'renderOrder must be a comparator function');
-  this.set(ol.layer.Vector.Property.RENDER_ORDER, renderOrder);
-};
-
-
-/**
- * Set the style for features.  This can be a single style object, an array
- * of styles, or a function that takes a feature and resolution and returns
- * an array of styles. If it is `undefined` the default style is used. If
- * it is `null` the layer has no style (a `null` style), so only features
- * that have their own styles will be rendered in the layer. See
- * {@link ol.style} for information on the default style.
- * @param {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction|null|undefined}
- *     style Layer style.
- * @api stable
- */
-ol.layer.Vector.prototype.setStyle = function(style) {
-  this.style_ = style !== undefined ? style : ol.style.Style.defaultFunction;
-  this.styleFunction_ = style === null ?
-      undefined : ol.style.Style.createFunction(this.style_);
-  this.changed();
-};
-
-
-/**
- * @enum {string}
- */
-ol.layer.Vector.Property = {
-  RENDER_ORDER: 'renderOrder'
-};
-
-goog.provide('ol.layer.VectorTile');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.layer.Tile');
-goog.require('ol.layer.Vector');
-goog.require('ol.obj');
-
-
-/**
- * @classdesc
- * Layer for vector tile data that is rendered client-side.
- * Note that any property set in the options is set as a {@link ol.Object}
- * property on the layer object; for example, setting `title: 'My Title'` in the
- * options means that `title` is observable, and has get/set accessors.
- *
- * @constructor
- * @extends {ol.layer.Vector}
- * @param {olx.layer.VectorTileOptions=} opt_options Options.
- * @api
- */
-ol.layer.VectorTile = function(opt_options) {
-  var options = opt_options ? opt_options : {};
-
-  var baseOptions = ol.obj.assign({}, options);
-
-  delete baseOptions.preload;
-  delete baseOptions.useInterimTilesOnError;
-  ol.layer.Vector.call(this,  /** @type {olx.layer.VectorOptions} */ (baseOptions));
-
-  this.setPreload(options.preload ? options.preload : 0);
-  this.setUseInterimTilesOnError(options.useInterimTilesOnError ?
-      options.useInterimTilesOnError : true);
-
-  ol.asserts.assert(options.renderMode == undefined ||
-      options.renderMode == ol.layer.VectorTile.RenderType.IMAGE ||
-      options.renderMode == ol.layer.VectorTile.RenderType.HYBRID ||
-      options.renderMode == ol.layer.VectorTile.RenderType.VECTOR,
-      28); // `renderMode` must be `'image'`, `'hybrid'` or `'vector'`
-
-  /**
-   * @private
-   * @type {ol.layer.VectorTile.RenderType|string}
-   */
-  this.renderMode_ = options.renderMode || ol.layer.VectorTile.RenderType.HYBRID;
-
-};
-ol.inherits(ol.layer.VectorTile, ol.layer.Vector);
-
-
-/**
- * Return the level as number to which we will preload tiles up to.
- * @return {number} The level to preload tiles up to.
- * @observable
- * @api
- */
-ol.layer.VectorTile.prototype.getPreload = function() {
-  return /** @type {number} */ (this.get(ol.layer.VectorTile.Property.PRELOAD));
-};
-
-
-/**
- * @return {ol.layer.VectorTile.RenderType|string} The render mode.
- */
-ol.layer.VectorTile.prototype.getRenderMode = function() {
-  return this.renderMode_;
-};
-
-
-/**
- * Whether we use interim tiles on error.
- * @return {boolean} Use interim tiles on error.
- * @observable
- * @api
- */
-ol.layer.VectorTile.prototype.getUseInterimTilesOnError = function() {
-  return /** @type {boolean} */ (
-      this.get(ol.layer.VectorTile.Property.USE_INTERIM_TILES_ON_ERROR));
-};
-
-
-/**
- * Set the level as number to which we will preload tiles up to.
- * @param {number} preload The level to preload tiles up to.
- * @observable
- * @api
- */
-ol.layer.VectorTile.prototype.setPreload = function(preload) {
-  this.set(ol.layer.Tile.Property.PRELOAD, preload);
-};
-
-
-/**
- * Set whether we use interim tiles on error.
- * @param {boolean} useInterimTilesOnError Use interim tiles on error.
- * @observable
- * @api
- */
-ol.layer.VectorTile.prototype.setUseInterimTilesOnError = function(useInterimTilesOnError) {
-  this.set(
-      ol.layer.Tile.Property.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);
-};
-
-
-/**
- * @enum {string}
- */
-ol.layer.VectorTile.Property = {
-  PRELOAD: 'preload',
-  USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError'
-};
-
-
-/**
- * @enum {string}
- * Render mode for vector tiles:
- *  * `'image'`: Vector tiles are rendered as images. Great performance, but
- *    point symbols and texts are always rotated with the view and pixels are
- *    scaled during zoom animations.
- *  * `'hybrid'`: Polygon and line elements are rendered as images, so pixels
- *    are scaled during zoom animations. Point symbols and texts are accurately
- *    rendered as vectors and can stay upright on rotated views.
- *  * `'vector'`: Vector tiles are rendered as vectors. Most accurate rendering
- *    even during animations, but slower performance than the other options.
- * @api
- */
-ol.layer.VectorTile.RenderType = {
-  IMAGE: 'image',
-  HYBRID: 'hybrid',
-  VECTOR: 'vector'
-};
-
-goog.provide('ol.render.VectorContext');
-
-
-/**
- * Context for drawing geometries.  A vector context is available on render
- * events and does not need to be constructed directly.
- * @constructor
- * @struct
- * @api
- */
-ol.render.VectorContext = function() {
-};
-
-
-/**
- * Render a geometry.
- *
- * @abstract
- * @param {ol.geom.Geometry} geometry The geometry to render.
- */
-ol.render.VectorContext.prototype.drawGeometry = function(geometry) {};
-
-
-/**
- * Set the rendering style.
- *
- * @abstract
- * @param {ol.style.Style} style The rendering style.
- */
-ol.render.VectorContext.prototype.setStyle = function(style) {};
-
-
-/**
- * @abstract
- * @param {ol.geom.Circle} circleGeometry Circle geometry.
- * @param {ol.Feature} feature Feature,
- */
-ol.render.VectorContext.prototype.drawCircle = function(circleGeometry, feature) {};
-
-
-/**
- * @abstract
- * @param {ol.Feature} feature Feature.
- * @param {ol.style.Style} style Style.
- */
-ol.render.VectorContext.prototype.drawFeature = function(feature, style) {};
-
-
-/**
- * @abstract
- * @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry
- *     collection.
- * @param {ol.Feature} feature Feature.
- */
-ol.render.VectorContext.prototype.drawGeometryCollection = function(geometryCollectionGeometry, feature) {};
-
-
-/**
- * @abstract
- * @param {ol.geom.LineString|ol.render.Feature} lineStringGeometry Line
- *     string geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- */
-ol.render.VectorContext.prototype.drawLineString = function(lineStringGeometry, feature) {};
-
-
-/**
- * @abstract
- * @param {ol.geom.MultiLineString|ol.render.Feature} multiLineStringGeometry
- *     MultiLineString geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- */
-ol.render.VectorContext.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {};
-
-
-/**
- * @abstract
- * @param {ol.geom.MultiPoint|ol.render.Feature} multiPointGeometry MultiPoint
- *     geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- */
-ol.render.VectorContext.prototype.drawMultiPoint = function(multiPointGeometry, feature) {};
-
-
-/**
- * @abstract
- * @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry.
- * @param {ol.Feature} feature Feature.
- */
-ol.render.VectorContext.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {};
-
-
-/**
- * @abstract
- * @param {ol.geom.Point|ol.render.Feature} pointGeometry Point geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- */
-ol.render.VectorContext.prototype.drawPoint = function(pointGeometry, feature) {};
-
-
-/**
- * @abstract
- * @param {ol.geom.Polygon|ol.render.Feature} polygonGeometry Polygon
- *     geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- */
-ol.render.VectorContext.prototype.drawPolygon = function(polygonGeometry, feature) {};
-
-
-/**
- * @abstract
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- */
-ol.render.VectorContext.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, feature) {};
-
-
-/**
- * @abstract
- * @param {ol.style.Fill} fillStyle Fill style.
- * @param {ol.style.Stroke} strokeStyle Stroke style.
- */
-ol.render.VectorContext.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {};
-
-
-/**
- * @abstract
- * @param {ol.style.Image} imageStyle Image style.
- */
-ol.render.VectorContext.prototype.setImageStyle = function(imageStyle) {};
-
-
-/**
- * @abstract
- * @param {ol.style.Text} textStyle Text style.
- */
-ol.render.VectorContext.prototype.setTextStyle = function(textStyle) {};
-
-// FIXME test, especially polygons with holes and multipolygons
-// FIXME need to handle large thick features (where pixel size matters)
-// FIXME add offset and end to ol.geom.flat.transform.transform2D?
-
-goog.provide('ol.render.canvas.Immediate');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.colorlike');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.transform');
-goog.require('ol.has');
-goog.require('ol.render.VectorContext');
-goog.require('ol.render.canvas');
-goog.require('ol.transform');
-
-
-/**
- * @classdesc
- * A concrete subclass of {@link ol.render.VectorContext} that implements
- * direct rendering of features and geometries to an HTML5 Canvas context.
- * Instances of this class are created internally by the library and
- * provided to application code as vectorContext member of the
- * {@link ol.render.Event} object associated with postcompose, precompose and
- * render events emitted by layers and maps.
- *
- * @constructor
- * @extends {ol.render.VectorContext}
- * @param {CanvasRenderingContext2D} context Context.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.Extent} extent Extent.
- * @param {ol.Transform} transform Transform.
- * @param {number} viewRotation View rotation.
- * @struct
- */
-ol.render.canvas.Immediate = function(context, pixelRatio, extent, transform, viewRotation) {
-  ol.render.VectorContext.call(this);
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.context_ = context;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.pixelRatio_ = pixelRatio;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.extent_ = extent;
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.transform_ = transform;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.viewRotation_ = viewRotation;
-
-  /**
-   * @private
-   * @type {?ol.CanvasFillState}
-   */
-  this.contextFillState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasStrokeState}
-   */
-  this.contextStrokeState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasTextState}
-   */
-  this.contextTextState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasFillState}
-   */
-  this.fillState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasStrokeState}
-   */
-  this.strokeState_ = null;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement|HTMLVideoElement|Image}
-   */
-  this.image_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageAnchorX_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageAnchorY_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageHeight_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageOpacity_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageOriginX_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageOriginY_ = 0;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.imageRotateWithView_ = false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageRotation_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageScale_ = 0;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.imageSnapToPixel_ = false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.imageWidth_ = 0;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.text_ = '';
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textOffsetX_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textOffsetY_ = 0;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.textRotateWithView_ = false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textRotation_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textScale_ = 0;
-
-  /**
-   * @private
-   * @type {?ol.CanvasFillState}
-   */
-  this.textFillState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasStrokeState}
-   */
-  this.textStrokeState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasTextState}
-   */
-  this.textState_ = null;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.pixelCoordinates_ = [];
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.tmpLocalTransform_ = ol.transform.create();
-
-};
-ol.inherits(ol.render.canvas.Immediate, ol.render.VectorContext);
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @private
- */
-ol.render.canvas.Immediate.prototype.drawImages_ = function(flatCoordinates, offset, end, stride) {
-  if (!this.image_) {
-    return;
-  }
-  ol.DEBUG && console.assert(offset === 0, 'offset should be 0');
-  ol.DEBUG && console.assert(end == flatCoordinates.length,
-      'end should be equal to the length of flatCoordinates');
-  var pixelCoordinates = ol.geom.flat.transform.transform2D(
-      flatCoordinates, offset, end, 2, this.transform_,
-      this.pixelCoordinates_);
-  var context = this.context_;
-  var localTransform = this.tmpLocalTransform_;
-  var alpha = context.globalAlpha;
-  if (this.imageOpacity_ != 1) {
-    context.globalAlpha = alpha * this.imageOpacity_;
-  }
-  var rotation = this.imageRotation_;
-  if (this.imageRotateWithView_) {
-    rotation += this.viewRotation_;
-  }
-  var i, ii;
-  for (i = 0, ii = pixelCoordinates.length; i < ii; i += 2) {
-    var x = pixelCoordinates[i] - this.imageAnchorX_;
-    var y = pixelCoordinates[i + 1] - this.imageAnchorY_;
-    if (this.imageSnapToPixel_) {
-      x = Math.round(x);
-      y = Math.round(y);
-    }
-    if (rotation !== 0 || this.imageScale_ != 1) {
-      var centerX = x + this.imageAnchorX_;
-      var centerY = y + this.imageAnchorY_;
-      ol.transform.compose(localTransform,
-          centerX, centerY,
-          this.imageScale_, this.imageScale_,
-          rotation,
-          -centerX, -centerY);
-      context.setTransform.apply(context, localTransform);
-    }
-    context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_,
-        this.imageWidth_, this.imageHeight_, x, y,
-        this.imageWidth_, this.imageHeight_);
-  }
-  if (rotation !== 0 || this.imageScale_ != 1) {
-    context.setTransform(1, 0, 0, 1, 0, 0);
-  }
-  if (this.imageOpacity_ != 1) {
-    context.globalAlpha = alpha;
-  }
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @private
- */
-ol.render.canvas.Immediate.prototype.drawText_ = function(flatCoordinates, offset, end, stride) {
-  if (!this.textState_ || this.text_ === '') {
-    return;
-  }
-  if (this.textFillState_) {
-    this.setContextFillState_(this.textFillState_);
-  }
-  if (this.textStrokeState_) {
-    this.setContextStrokeState_(this.textStrokeState_);
-  }
-  this.setContextTextState_(this.textState_);
-  ol.DEBUG && console.assert(offset === 0, 'offset should be 0');
-  ol.DEBUG && console.assert(end == flatCoordinates.length,
-      'end should be equal to the length of flatCoordinates');
-  var pixelCoordinates = ol.geom.flat.transform.transform2D(
-      flatCoordinates, offset, end, stride, this.transform_,
-      this.pixelCoordinates_);
-  var context = this.context_;
-  var rotation = this.textRotation_;
-  if (this.textRotateWithView_) {
-    rotation += this.viewRotation_;
-  }
-  for (; offset < end; offset += stride) {
-    var x = pixelCoordinates[offset] + this.textOffsetX_;
-    var y = pixelCoordinates[offset + 1] + this.textOffsetY_;
-    if (rotation !== 0 || this.textScale_ != 1) {
-      var localTransform = ol.transform.compose(this.tmpLocalTransform_,
-          x, y,
-          this.textScale_, this.textScale_,
-          rotation,
-          -x, -y);
-      context.setTransform.apply(context, localTransform);
-    }
-    if (this.textStrokeState_) {
-      context.strokeText(this.text_, x, y);
-    }
-    if (this.textFillState_) {
-      context.fillText(this.text_, x, y);
-    }
-  }
-  if (rotation !== 0 || this.textScale_ != 1) {
-    context.setTransform(1, 0, 0, 1, 0, 0);
-  }
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {boolean} close Close.
- * @private
- * @return {number} end End.
- */
-ol.render.canvas.Immediate.prototype.moveToLineTo_ = function(flatCoordinates, offset, end, stride, close) {
-  var context = this.context_;
-  var pixelCoordinates = ol.geom.flat.transform.transform2D(
-      flatCoordinates, offset, end, stride, this.transform_,
-      this.pixelCoordinates_);
-  context.moveTo(pixelCoordinates[0], pixelCoordinates[1]);
-  var length = pixelCoordinates.length;
-  if (close) {
-    length -= 2;
-  }
-  for (var i = 2; i < length; i += 2) {
-    context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]);
-  }
-  if (close) {
-    context.closePath();
-  }
-  return end;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @private
- * @return {number} End.
- */
-ol.render.canvas.Immediate.prototype.drawRings_ = function(flatCoordinates, offset, ends, stride) {
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    offset = this.moveToLineTo_(
-        flatCoordinates, offset, ends[i], stride, true);
-  }
-  return offset;
-};
-
-
-/**
- * Render a circle geometry into the canvas.  Rendering is immediate and uses
- * the current fill and stroke styles.
- *
- * @param {ol.geom.Circle} geometry Circle geometry.
- * @api
- */
-ol.render.canvas.Immediate.prototype.drawCircle = function(geometry) {
-  if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {
-    return;
-  }
-  if (this.fillState_ || this.strokeState_) {
-    if (this.fillState_) {
-      this.setContextFillState_(this.fillState_);
-    }
-    if (this.strokeState_) {
-      this.setContextStrokeState_(this.strokeState_);
-    }
-    var pixelCoordinates = ol.geom.SimpleGeometry.transform2D(
-        geometry, this.transform_, this.pixelCoordinates_);
-    var dx = pixelCoordinates[2] - pixelCoordinates[0];
-    var dy = pixelCoordinates[3] - pixelCoordinates[1];
-    var radius = Math.sqrt(dx * dx + dy * dy);
-    var context = this.context_;
-    context.beginPath();
-    context.arc(
-        pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI);
-    if (this.fillState_) {
-      context.fill();
-    }
-    if (this.strokeState_) {
-      context.stroke();
-    }
-  }
-  if (this.text_ !== '') {
-    this.drawText_(geometry.getCenter(), 0, 2, 2);
-  }
-};
-
-
-/**
- * Set the rendering style.  Note that since this is an immediate rendering API,
- * any `zIndex` on the provided style will be ignored.
- *
- * @param {ol.style.Style} style The rendering style.
- * @api
- */
-ol.render.canvas.Immediate.prototype.setStyle = function(style) {
-  this.setFillStrokeStyle(style.getFill(), style.getStroke());
-  this.setImageStyle(style.getImage());
-  this.setTextStyle(style.getText());
-};
-
-
-/**
- * Render a geometry into the canvas.  Call
- * {@link ol.render.canvas.Immediate#setStyle} first to set the rendering style.
- *
- * @param {ol.geom.Geometry|ol.render.Feature} geometry The geometry to render.
- * @api
- */
-ol.render.canvas.Immediate.prototype.drawGeometry = function(geometry) {
-  var type = geometry.getType();
-  switch (type) {
-    case ol.geom.GeometryType.POINT:
-      this.drawPoint(/** @type {ol.geom.Point} */ (geometry));
-      break;
-    case ol.geom.GeometryType.LINE_STRING:
-      this.drawLineString(/** @type {ol.geom.LineString} */ (geometry));
-      break;
-    case ol.geom.GeometryType.POLYGON:
-      this.drawPolygon(/** @type {ol.geom.Polygon} */ (geometry));
-      break;
-    case ol.geom.GeometryType.MULTI_POINT:
-      this.drawMultiPoint(/** @type {ol.geom.MultiPoint} */ (geometry));
-      break;
-    case ol.geom.GeometryType.MULTI_LINE_STRING:
-      this.drawMultiLineString(/** @type {ol.geom.MultiLineString} */ (geometry));
-      break;
-    case ol.geom.GeometryType.MULTI_POLYGON:
-      this.drawMultiPolygon(/** @type {ol.geom.MultiPolygon} */ (geometry));
-      break;
-    case ol.geom.GeometryType.GEOMETRY_COLLECTION:
-      this.drawGeometryCollection(/** @type {ol.geom.GeometryCollection} */ (geometry));
-      break;
-    case ol.geom.GeometryType.CIRCLE:
-      this.drawCircle(/** @type {ol.geom.Circle} */ (geometry));
-      break;
-    default:
-      ol.DEBUG && console.assert(false, 'Unsupported geometry type: ' + type);
-  }
-};
-
-
-/**
- * Render a feature into the canvas.  Note that any `zIndex` on the provided
- * style will be ignored - features are rendered immediately in the order that
- * this method is called.  If you need `zIndex` support, you should be using an
- * {@link ol.layer.Vector} instead.
- *
- * @param {ol.Feature} feature Feature.
- * @param {ol.style.Style} style Style.
- * @api
- */
-ol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) {
-  var geometry = style.getGeometryFunction()(feature);
-  if (!geometry ||
-      !ol.extent.intersects(this.extent_, geometry.getExtent())) {
-    return;
-  }
-  this.setStyle(style);
-  this.drawGeometry(geometry);
-};
-
-
-/**
- * Render a GeometryCollection to the canvas.  Rendering is immediate and
- * uses the current styles appropriate for each geometry in the collection.
- *
- * @param {ol.geom.GeometryCollection} geometry Geometry collection.
- */
-ol.render.canvas.Immediate.prototype.drawGeometryCollection = function(geometry) {
-  var geometries = geometry.getGeometriesArray();
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    this.drawGeometry(geometries[i]);
-  }
-};
-
-
-/**
- * Render a Point geometry into the canvas.  Rendering is immediate and uses
- * the current style.
- *
- * @param {ol.geom.Point|ol.render.Feature} geometry Point geometry.
- */
-ol.render.canvas.Immediate.prototype.drawPoint = function(geometry) {
-  var flatCoordinates = geometry.getFlatCoordinates();
-  var stride = geometry.getStride();
-  if (this.image_) {
-    this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);
-  }
-  if (this.text_ !== '') {
-    this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);
-  }
-};
-
-
-/**
- * Render a MultiPoint geometry  into the canvas.  Rendering is immediate and
- * uses the current style.
- *
- * @param {ol.geom.MultiPoint|ol.render.Feature} geometry MultiPoint geometry.
- */
-ol.render.canvas.Immediate.prototype.drawMultiPoint = function(geometry) {
-  var flatCoordinates = geometry.getFlatCoordinates();
-  var stride = geometry.getStride();
-  if (this.image_) {
-    this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);
-  }
-  if (this.text_ !== '') {
-    this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);
-  }
-};
-
-
-/**
- * Render a LineString into the canvas.  Rendering is immediate and uses
- * the current style.
- *
- * @param {ol.geom.LineString|ol.render.Feature} geometry LineString geometry.
- */
-ol.render.canvas.Immediate.prototype.drawLineString = function(geometry) {
-  if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {
-    return;
-  }
-  if (this.strokeState_) {
-    this.setContextStrokeState_(this.strokeState_);
-    var context = this.context_;
-    var flatCoordinates = geometry.getFlatCoordinates();
-    context.beginPath();
-    this.moveToLineTo_(flatCoordinates, 0, flatCoordinates.length,
-        geometry.getStride(), false);
-    context.stroke();
-  }
-  if (this.text_ !== '') {
-    var flatMidpoint = geometry.getFlatMidpoint();
-    this.drawText_(flatMidpoint, 0, 2, 2);
-  }
-};
-
-
-/**
- * Render a MultiLineString geometry into the canvas.  Rendering is immediate
- * and uses the current style.
- *
- * @param {ol.geom.MultiLineString|ol.render.Feature} geometry MultiLineString
- *     geometry.
- */
-ol.render.canvas.Immediate.prototype.drawMultiLineString = function(geometry) {
-  var geometryExtent = geometry.getExtent();
-  if (!ol.extent.intersects(this.extent_, geometryExtent)) {
-    return;
-  }
-  if (this.strokeState_) {
-    this.setContextStrokeState_(this.strokeState_);
-    var context = this.context_;
-    var flatCoordinates = geometry.getFlatCoordinates();
-    var offset = 0;
-    var ends = geometry.getEnds();
-    var stride = geometry.getStride();
-    context.beginPath();
-    var i, ii;
-    for (i = 0, ii = ends.length; i < ii; ++i) {
-      offset = this.moveToLineTo_(
-          flatCoordinates, offset, ends[i], stride, false);
-    }
-    context.stroke();
-  }
-  if (this.text_ !== '') {
-    var flatMidpoints = geometry.getFlatMidpoints();
-    this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);
-  }
-};
-
-
-/**
- * Render a Polygon geometry into the canvas.  Rendering is immediate and uses
- * the current style.
- *
- * @param {ol.geom.Polygon|ol.render.Feature} geometry Polygon geometry.
- */
-ol.render.canvas.Immediate.prototype.drawPolygon = function(geometry) {
-  if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {
-    return;
-  }
-  if (this.strokeState_ || this.fillState_) {
-    if (this.fillState_) {
-      this.setContextFillState_(this.fillState_);
-    }
-    if (this.strokeState_) {
-      this.setContextStrokeState_(this.strokeState_);
-    }
-    var context = this.context_;
-    context.beginPath();
-    this.drawRings_(geometry.getOrientedFlatCoordinates(),
-        0, geometry.getEnds(), geometry.getStride());
-    if (this.fillState_) {
-      context.fill();
-    }
-    if (this.strokeState_) {
-      context.stroke();
-    }
-  }
-  if (this.text_ !== '') {
-    var flatInteriorPoint = geometry.getFlatInteriorPoint();
-    this.drawText_(flatInteriorPoint, 0, 2, 2);
-  }
-};
-
-
-/**
- * Render MultiPolygon geometry into the canvas.  Rendering is immediate and
- * uses the current style.
- * @param {ol.geom.MultiPolygon} geometry MultiPolygon geometry.
- */
-ol.render.canvas.Immediate.prototype.drawMultiPolygon = function(geometry) {
-  if (!ol.extent.intersects(this.extent_, geometry.getExtent())) {
-    return;
-  }
-  if (this.strokeState_ || this.fillState_) {
-    if (this.fillState_) {
-      this.setContextFillState_(this.fillState_);
-    }
-    if (this.strokeState_) {
-      this.setContextStrokeState_(this.strokeState_);
-    }
-    var context = this.context_;
-    var flatCoordinates = geometry.getOrientedFlatCoordinates();
-    var offset = 0;
-    var endss = geometry.getEndss();
-    var stride = geometry.getStride();
-    var i, ii;
-    context.beginPath();
-    for (i = 0, ii = endss.length; i < ii; ++i) {
-      var ends = endss[i];
-      offset = this.drawRings_(flatCoordinates, offset, ends, stride);
-    }
-    if (this.fillState_) {
-      context.fill();
-    }
-    if (this.strokeState_) {
-      context.stroke();
-    }
-  }
-  if (this.text_ !== '') {
-    var flatInteriorPoints = geometry.getFlatInteriorPoints();
-    this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);
-  }
-};
-
-
-/**
- * @param {ol.CanvasFillState} fillState Fill state.
- * @private
- */
-ol.render.canvas.Immediate.prototype.setContextFillState_ = function(fillState) {
-  var context = this.context_;
-  var contextFillState = this.contextFillState_;
-  if (!contextFillState) {
-    context.fillStyle = fillState.fillStyle;
-    this.contextFillState_ = {
-      fillStyle: fillState.fillStyle
-    };
-  } else {
-    if (contextFillState.fillStyle != fillState.fillStyle) {
-      contextFillState.fillStyle = context.fillStyle = fillState.fillStyle;
-    }
-  }
-};
-
-
-/**
- * @param {ol.CanvasStrokeState} strokeState Stroke state.
- * @private
- */
-ol.render.canvas.Immediate.prototype.setContextStrokeState_ = function(strokeState) {
-  var context = this.context_;
-  var contextStrokeState = this.contextStrokeState_;
-  if (!contextStrokeState) {
-    context.lineCap = strokeState.lineCap;
-    if (ol.has.CANVAS_LINE_DASH) {
-      context.setLineDash(strokeState.lineDash);
-    }
-    context.lineJoin = strokeState.lineJoin;
-    context.lineWidth = strokeState.lineWidth;
-    context.miterLimit = strokeState.miterLimit;
-    context.strokeStyle = strokeState.strokeStyle;
-    this.contextStrokeState_ = {
-      lineCap: strokeState.lineCap,
-      lineDash: strokeState.lineDash,
-      lineJoin: strokeState.lineJoin,
-      lineWidth: strokeState.lineWidth,
-      miterLimit: strokeState.miterLimit,
-      strokeStyle: strokeState.strokeStyle
-    };
-  } else {
-    if (contextStrokeState.lineCap != strokeState.lineCap) {
-      contextStrokeState.lineCap = context.lineCap = strokeState.lineCap;
-    }
-    if (ol.has.CANVAS_LINE_DASH) {
-      if (!ol.array.equals(
-          contextStrokeState.lineDash, strokeState.lineDash)) {
-        context.setLineDash(contextStrokeState.lineDash = strokeState.lineDash);
-      }
-    }
-    if (contextStrokeState.lineJoin != strokeState.lineJoin) {
-      contextStrokeState.lineJoin = context.lineJoin = strokeState.lineJoin;
-    }
-    if (contextStrokeState.lineWidth != strokeState.lineWidth) {
-      contextStrokeState.lineWidth = context.lineWidth = strokeState.lineWidth;
-    }
-    if (contextStrokeState.miterLimit != strokeState.miterLimit) {
-      contextStrokeState.miterLimit = context.miterLimit =
-          strokeState.miterLimit;
-    }
-    if (contextStrokeState.strokeStyle != strokeState.strokeStyle) {
-      contextStrokeState.strokeStyle = context.strokeStyle =
-          strokeState.strokeStyle;
-    }
-  }
-};
-
-
-/**
- * @param {ol.CanvasTextState} textState Text state.
- * @private
- */
-ol.render.canvas.Immediate.prototype.setContextTextState_ = function(textState) {
-  var context = this.context_;
-  var contextTextState = this.contextTextState_;
-  if (!contextTextState) {
-    context.font = textState.font;
-    context.textAlign = textState.textAlign;
-    context.textBaseline = textState.textBaseline;
-    this.contextTextState_ = {
-      font: textState.font,
-      textAlign: textState.textAlign,
-      textBaseline: textState.textBaseline
-    };
-  } else {
-    if (contextTextState.font != textState.font) {
-      contextTextState.font = context.font = textState.font;
-    }
-    if (contextTextState.textAlign != textState.textAlign) {
-      contextTextState.textAlign = context.textAlign = textState.textAlign;
-    }
-    if (contextTextState.textBaseline != textState.textBaseline) {
-      contextTextState.textBaseline = context.textBaseline =
-          textState.textBaseline;
-    }
-  }
-};
-
-
-/**
- * Set the fill and stroke style for subsequent draw operations.  To clear
- * either fill or stroke styles, pass null for the appropriate parameter.
- *
- * @param {ol.style.Fill} fillStyle Fill style.
- * @param {ol.style.Stroke} strokeStyle Stroke style.
- */
-ol.render.canvas.Immediate.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
-  if (!fillStyle) {
-    this.fillState_ = null;
-  } else {
-    var fillStyleColor = fillStyle.getColor();
-    this.fillState_ = {
-      fillStyle: ol.colorlike.asColorLike(fillStyleColor ?
-          fillStyleColor : ol.render.canvas.defaultFillStyle)
-    };
-  }
-  if (!strokeStyle) {
-    this.strokeState_ = null;
-  } else {
-    var strokeStyleColor = strokeStyle.getColor();
-    var strokeStyleLineCap = strokeStyle.getLineCap();
-    var strokeStyleLineDash = strokeStyle.getLineDash();
-    var strokeStyleLineJoin = strokeStyle.getLineJoin();
-    var strokeStyleWidth = strokeStyle.getWidth();
-    var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
-    this.strokeState_ = {
-      lineCap: strokeStyleLineCap !== undefined ?
-          strokeStyleLineCap : ol.render.canvas.defaultLineCap,
-      lineDash: strokeStyleLineDash ?
-          strokeStyleLineDash : ol.render.canvas.defaultLineDash,
-      lineJoin: strokeStyleLineJoin !== undefined ?
-          strokeStyleLineJoin : ol.render.canvas.defaultLineJoin,
-      lineWidth: this.pixelRatio_ * (strokeStyleWidth !== undefined ?
-          strokeStyleWidth : ol.render.canvas.defaultLineWidth),
-      miterLimit: strokeStyleMiterLimit !== undefined ?
-          strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit,
-      strokeStyle: ol.colorlike.asColorLike(strokeStyleColor ?
-          strokeStyleColor : ol.render.canvas.defaultStrokeStyle)
-    };
-  }
-};
-
-
-/**
- * Set the image style for subsequent draw operations.  Pass null to remove
- * the image style.
- *
- * @param {ol.style.Image} imageStyle Image style.
- */
-ol.render.canvas.Immediate.prototype.setImageStyle = function(imageStyle) {
-  if (!imageStyle) {
-    this.image_ = null;
-  } else {
-    var imageAnchor = imageStyle.getAnchor();
-    // FIXME pixel ratio
-    var imageImage = imageStyle.getImage(1);
-    var imageOrigin = imageStyle.getOrigin();
-    var imageSize = imageStyle.getSize();
-    ol.DEBUG && console.assert(imageImage, 'imageImage must be truthy');
-    this.imageAnchorX_ = imageAnchor[0];
-    this.imageAnchorY_ = imageAnchor[1];
-    this.imageHeight_ = imageSize[1];
-    this.image_ = imageImage;
-    this.imageOpacity_ = imageStyle.getOpacity();
-    this.imageOriginX_ = imageOrigin[0];
-    this.imageOriginY_ = imageOrigin[1];
-    this.imageRotateWithView_ = imageStyle.getRotateWithView();
-    this.imageRotation_ = imageStyle.getRotation();
-    this.imageScale_ = imageStyle.getScale();
-    this.imageSnapToPixel_ = imageStyle.getSnapToPixel();
-    this.imageWidth_ = imageSize[0];
-  }
-};
-
-
-/**
- * Set the text style for subsequent draw operations.  Pass null to
- * remove the text style.
- *
- * @param {ol.style.Text} textStyle Text style.
- */
-ol.render.canvas.Immediate.prototype.setTextStyle = function(textStyle) {
-  if (!textStyle) {
-    this.text_ = '';
-  } else {
-    var textFillStyle = textStyle.getFill();
-    if (!textFillStyle) {
-      this.textFillState_ = null;
-    } else {
-      var textFillStyleColor = textFillStyle.getColor();
-      this.textFillState_ = {
-        fillStyle: ol.colorlike.asColorLike(textFillStyleColor ?
-            textFillStyleColor : ol.render.canvas.defaultFillStyle)
-      };
-    }
-    var textStrokeStyle = textStyle.getStroke();
-    if (!textStrokeStyle) {
-      this.textStrokeState_ = null;
-    } else {
-      var textStrokeStyleColor = textStrokeStyle.getColor();
-      var textStrokeStyleLineCap = textStrokeStyle.getLineCap();
-      var textStrokeStyleLineDash = textStrokeStyle.getLineDash();
-      var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();
-      var textStrokeStyleWidth = textStrokeStyle.getWidth();
-      var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();
-      this.textStrokeState_ = {
-        lineCap: textStrokeStyleLineCap !== undefined ?
-            textStrokeStyleLineCap : ol.render.canvas.defaultLineCap,
-        lineDash: textStrokeStyleLineDash ?
-            textStrokeStyleLineDash : ol.render.canvas.defaultLineDash,
-        lineJoin: textStrokeStyleLineJoin !== undefined ?
-            textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin,
-        lineWidth: textStrokeStyleWidth !== undefined ?
-            textStrokeStyleWidth : ol.render.canvas.defaultLineWidth,
-        miterLimit: textStrokeStyleMiterLimit !== undefined ?
-            textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit,
-        strokeStyle: ol.colorlike.asColorLike(textStrokeStyleColor ?
-            textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle)
-      };
-    }
-    var textFont = textStyle.getFont();
-    var textOffsetX = textStyle.getOffsetX();
-    var textOffsetY = textStyle.getOffsetY();
-    var textRotateWithView = textStyle.getRotateWithView();
-    var textRotation = textStyle.getRotation();
-    var textScale = textStyle.getScale();
-    var textText = textStyle.getText();
-    var textTextAlign = textStyle.getTextAlign();
-    var textTextBaseline = textStyle.getTextBaseline();
-    this.textState_ = {
-      font: textFont !== undefined ?
-          textFont : ol.render.canvas.defaultFont,
-      textAlign: textTextAlign !== undefined ?
-          textTextAlign : ol.render.canvas.defaultTextAlign,
-      textBaseline: textTextBaseline !== undefined ?
-          textTextBaseline : ol.render.canvas.defaultTextBaseline
-    };
-    this.text_ = textText !== undefined ? textText : '';
-    this.textOffsetX_ =
-        textOffsetX !== undefined ? (this.pixelRatio_ * textOffsetX) : 0;
-    this.textOffsetY_ =
-        textOffsetY !== undefined ? (this.pixelRatio_ * textOffsetY) : 0;
-    this.textRotateWithView_ = textRotateWithView !== undefined ? textRotateWithView : false;
-    this.textRotation_ = textRotation !== undefined ? textRotation : 0;
-    this.textScale_ = this.pixelRatio_ * (textScale !== undefined ?
-        textScale : 1);
-  }
-};
-
-goog.provide('ol.renderer.Layer');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.Observable');
-goog.require('ol.Tile');
-goog.require('ol.asserts');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.functions');
-goog.require('ol.source.State');
-goog.require('ol.transform');
-
-
-/**
- * @constructor
- * @extends {ol.Observable}
- * @param {ol.layer.Layer} layer Layer.
- * @struct
- */
-ol.renderer.Layer = function(layer) {
-
-  ol.Observable.call(this);
-
-  /**
-   * @private
-   * @type {ol.layer.Layer}
-   */
-  this.layer_ = layer;
-
-
-};
-ol.inherits(ol.renderer.Layer, ol.Observable);
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {olx.FrameState} frameState Frame state.
- * @param {function(this: S, (ol.Feature|ol.render.Feature), ol.layer.Layer): T}
- *     callback Feature callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @return {T|undefined} Callback result.
- * @template S,T
- */
-ol.renderer.Layer.prototype.forEachFeatureAtCoordinate = ol.nullFunction;
-
-
-/**
- * @param {ol.Pixel} pixel Pixel.
- * @param {olx.FrameState} frameState Frame state.
- * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @return {T|undefined} Callback result.
- * @template S,T
- */
-ol.renderer.Layer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
-  var coordinate = ol.transform.apply(
-      frameState.pixelToCoordinateTransform, pixel.slice());
-
-  var hasFeature = this.forEachFeatureAtCoordinate(
-      coordinate, frameState, ol.functions.TRUE, this);
-
-  if (hasFeature) {
-    return callback.call(thisArg, this.layer_, null);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {olx.FrameState} frameState Frame state.
- * @return {boolean} Is there a feature at the given coordinate?
- */
-ol.renderer.Layer.prototype.hasFeatureAtCoordinate = ol.functions.FALSE;
-
-
-/**
- * Create a function that adds loaded tiles to the tile lookup.
- * @param {ol.source.Tile} source Tile source.
- * @param {ol.proj.Projection} projection Projection of the tiles.
- * @param {Object.<number, Object.<string, ol.Tile>>} tiles Lookup of loaded
- *     tiles by zoom level.
- * @return {function(number, ol.TileRange):boolean} A function that can be
- *     called with a zoom level and a tile range to add loaded tiles to the
- *     lookup.
- * @protected
- */
-ol.renderer.Layer.prototype.createLoadedTileFinder = function(source, projection, tiles) {
-  return (
-      /**
-       * @param {number} zoom Zoom level.
-       * @param {ol.TileRange} tileRange Tile range.
-       * @return {boolean} The tile range is fully loaded.
-       */
-      function(zoom, tileRange) {
-        function callback(tile) {
-          if (!tiles[zoom]) {
-            tiles[zoom] = {};
-          }
-          tiles[zoom][tile.tileCoord.toString()] = tile;
-        }
-        return source.forEachLoadedTile(projection, zoom, tileRange, callback);
-      });
-};
-
-
-/**
- * @return {ol.layer.Layer} Layer.
- */
-ol.renderer.Layer.prototype.getLayer = function() {
-  return this.layer_;
-};
-
-
-/**
- * Handle changes in image state.
- * @param {ol.events.Event} event Image change event.
- * @private
- */
-ol.renderer.Layer.prototype.handleImageChange_ = function(event) {
-  var image = /** @type {ol.Image} */ (event.target);
-  if (image.getState() === ol.Image.State.LOADED) {
-    this.renderIfReadyAndVisible();
-  }
-};
-
-
-/**
- * Load the image if not already loaded, and register the image change
- * listener if needed.
- * @param {ol.ImageBase} image Image.
- * @return {boolean} `true` if the image is already loaded, `false`
- *     otherwise.
- * @protected
- */
-ol.renderer.Layer.prototype.loadImage = function(image) {
-  var imageState = image.getState();
-  if (imageState != ol.Image.State.LOADED &&
-      imageState != ol.Image.State.ERROR) {
-    // the image is either "idle" or "loading", register the change
-    // listener (a noop if the listener was already registered)
-    ol.DEBUG && console.assert(imageState == ol.Image.State.IDLE ||
-        imageState == ol.Image.State.LOADING,
-        'imageState is "idle" or "loading"');
-    ol.events.listen(image, ol.events.EventType.CHANGE,
-        this.handleImageChange_, this);
-  }
-  if (imageState == ol.Image.State.IDLE) {
-    image.load();
-    imageState = image.getState();
-    ol.DEBUG && console.assert(imageState == ol.Image.State.LOADING ||
-        imageState == ol.Image.State.LOADED,
-        'imageState is "loading" or "loaded"');
-  }
-  return imageState == ol.Image.State.LOADED;
-};
-
-
-/**
- * @protected
- */
-ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() {
-  var layer = this.getLayer();
-  if (layer.getVisible() && layer.getSourceState() == ol.source.State.READY) {
-    this.changed();
-  }
-};
-
-
-/**
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.source.Tile} tileSource Tile source.
- * @protected
- */
-ol.renderer.Layer.prototype.scheduleExpireCache = function(frameState, tileSource) {
-  if (tileSource.canExpireCache()) {
-    /**
-     * @param {ol.source.Tile} tileSource Tile source.
-     * @param {ol.Map} map Map.
-     * @param {olx.FrameState} frameState Frame state.
-     */
-    var postRenderFunction = function(tileSource, map, frameState) {
-      var tileSourceKey = ol.getUid(tileSource).toString();
-      tileSource.expireCache(frameState.viewState.projection,
-                             frameState.usedTiles[tileSourceKey]);
-    }.bind(null, tileSource);
-
-    frameState.postRenderFunctions.push(
-      /** @type {ol.PostRenderFunction} */ (postRenderFunction)
-    );
-  }
-};
-
-
-/**
- * @param {Object.<string, ol.Attribution>} attributionsSet Attributions
- *     set (target).
- * @param {Array.<ol.Attribution>} attributions Attributions (source).
- * @protected
- */
-ol.renderer.Layer.prototype.updateAttributions = function(attributionsSet, attributions) {
-  if (attributions) {
-    var attribution, i, ii;
-    for (i = 0, ii = attributions.length; i < ii; ++i) {
-      attribution = attributions[i];
-      attributionsSet[ol.getUid(attribution).toString()] = attribution;
-    }
-  }
-};
-
-
-/**
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.source.Source} source Source.
- * @protected
- */
-ol.renderer.Layer.prototype.updateLogos = function(frameState, source) {
-  var logo = source.getLogo();
-  if (logo !== undefined) {
-    if (typeof logo === 'string') {
-      frameState.logos[logo] = '';
-    } else if (logo) {
-      ol.asserts.assert(typeof logo.href == 'string', 44); // `logo.href` should be a string.
-      ol.asserts.assert(typeof logo.src == 'string', 45); // `logo.src` should be a string.
-      frameState.logos[logo.src] = logo.href;
-    }
-  }
-};
-
-
-/**
- * @param {Object.<string, Object.<string, ol.TileRange>>} usedTiles Used tiles.
- * @param {ol.source.Tile} tileSource Tile source.
- * @param {number} z Z.
- * @param {ol.TileRange} tileRange Tile range.
- * @protected
- */
-ol.renderer.Layer.prototype.updateUsedTiles = function(usedTiles, tileSource, z, tileRange) {
-  // FIXME should we use tilesToDrawByZ instead?
-  var tileSourceKey = ol.getUid(tileSource).toString();
-  var zKey = z.toString();
-  if (tileSourceKey in usedTiles) {
-    if (zKey in usedTiles[tileSourceKey]) {
-      usedTiles[tileSourceKey][zKey].extend(tileRange);
-    } else {
-      usedTiles[tileSourceKey][zKey] = tileRange;
-    }
-  } else {
-    usedTiles[tileSourceKey] = {};
-    usedTiles[tileSourceKey][zKey] = tileRange;
-  }
-};
-
-
-/**
- * Manage tile pyramid.
- * This function performs a number of functions related to the tiles at the
- * current zoom and lower zoom levels:
- * - registers idle tiles in frameState.wantedTiles so that they are not
- *   discarded by the tile queue
- * - enqueues missing tiles
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.source.Tile} tileSource Tile source.
- * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @param {ol.Extent} extent Extent.
- * @param {number} currentZ Current Z.
- * @param {number} preload Load low resolution tiles up to 'preload' levels.
- * @param {function(this: T, ol.Tile)=} opt_tileCallback Tile callback.
- * @param {T=} opt_this Object to use as `this` in `opt_tileCallback`.
- * @protected
- * @template T
- */
-ol.renderer.Layer.prototype.manageTilePyramid = function(
-    frameState, tileSource, tileGrid, pixelRatio, projection, extent,
-    currentZ, preload, opt_tileCallback, opt_this) {
-  var tileSourceKey = ol.getUid(tileSource).toString();
-  if (!(tileSourceKey in frameState.wantedTiles)) {
-    frameState.wantedTiles[tileSourceKey] = {};
-  }
-  var wantedTiles = frameState.wantedTiles[tileSourceKey];
-  var tileQueue = frameState.tileQueue;
-  var minZoom = tileGrid.getMinZoom();
-  var tile, tileRange, tileResolution, x, y, z;
-  for (z = currentZ; z >= minZoom; --z) {
-    tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z, tileRange);
-    tileResolution = tileGrid.getResolution(z);
-    for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
-      for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
-        if (currentZ - z <= preload) {
-          tile = tileSource.getTile(z, x, y, pixelRatio, projection);
-          if (tile.getState() == ol.Tile.State.IDLE) {
-            wantedTiles[tile.getKey()] = true;
-            if (!tileQueue.isKeyQueued(tile.getKey())) {
-              tileQueue.enqueue([tile, tileSourceKey,
-                tileGrid.getTileCoordCenter(tile.tileCoord), tileResolution]);
-            }
-          }
-          if (opt_tileCallback !== undefined) {
-            opt_tileCallback.call(opt_this, tile);
-          }
-        } else {
-          tileSource.useTile(z, x, y, projection);
-        }
-      }
-    }
-  }
-};
-
-goog.provide('ol.renderer.canvas.Layer');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.render.Event');
-goog.require('ol.render.canvas');
-goog.require('ol.render.canvas.Immediate');
-goog.require('ol.renderer.Layer');
-goog.require('ol.transform');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.Layer}
- * @param {ol.layer.Layer} layer Layer.
- */
-ol.renderer.canvas.Layer = function(layer) {
-
-  ol.renderer.Layer.call(this, layer);
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.transform_ = ol.transform.create();
-
-};
-ol.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer);
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.Extent} extent Clip extent.
- * @protected
- */
-ol.renderer.canvas.Layer.prototype.clip = function(context, frameState, extent) {
-  var pixelRatio = frameState.pixelRatio;
-  var width = frameState.size[0] * pixelRatio;
-  var height = frameState.size[1] * pixelRatio;
-  var rotation = frameState.viewState.rotation;
-  var topLeft = ol.extent.getTopLeft(/** @type {ol.Extent} */ (extent));
-  var topRight = ol.extent.getTopRight(/** @type {ol.Extent} */ (extent));
-  var bottomRight = ol.extent.getBottomRight(/** @type {ol.Extent} */ (extent));
-  var bottomLeft = ol.extent.getBottomLeft(/** @type {ol.Extent} */ (extent));
-
-  ol.transform.apply(frameState.coordinateToPixelTransform, topLeft);
-  ol.transform.apply(frameState.coordinateToPixelTransform, topRight);
-  ol.transform.apply(frameState.coordinateToPixelTransform, bottomRight);
-  ol.transform.apply(frameState.coordinateToPixelTransform, bottomLeft);
-
-  context.save();
-  ol.render.canvas.rotateAtOffset(context, -rotation, width / 2, height / 2);
-  context.beginPath();
-  context.moveTo(topLeft[0] * pixelRatio, topLeft[1] * pixelRatio);
-  context.lineTo(topRight[0] * pixelRatio, topRight[1] * pixelRatio);
-  context.lineTo(bottomRight[0] * pixelRatio, bottomRight[1] * pixelRatio);
-  context.lineTo(bottomLeft[0] * pixelRatio, bottomLeft[1] * pixelRatio);
-  context.clip();
-  ol.render.canvas.rotateAtOffset(context, rotation, width / 2, height / 2);
-};
-
-
-/**
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.LayerState} layerState Layer state.
- * @param {CanvasRenderingContext2D} context Context.
- */
-ol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerState, context) {
-
-  this.dispatchPreComposeEvent(context, frameState);
-
-  var image = this.getImage();
-  if (image) {
-
-    // clipped rendering if layer extent is set
-    var extent = layerState.extent;
-    var clipped = extent !== undefined;
-    if (clipped) {
-      this.clip(context, frameState, /** @type {ol.Extent} */ (extent));
-    }
-
-    var imageTransform = this.getImageTransform();
-    // for performance reasons, context.save / context.restore is not used
-    // to save and restore the transformation matrix and the opacity.
-    // see http://jsperf.com/context-save-restore-versus-variable
-    var alpha = context.globalAlpha;
-    context.globalAlpha = layerState.opacity;
-
-    // for performance reasons, context.setTransform is only used
-    // when the view is rotated. see http://jsperf.com/canvas-transform
-    var dx = imageTransform[4];
-    var dy = imageTransform[5];
-    var dw = image.width * imageTransform[0];
-    var dh = image.height * imageTransform[3];
-    context.drawImage(image, 0, 0, +image.width, +image.height,
-        Math.round(dx), Math.round(dy), Math.round(dw), Math.round(dh));
-    context.globalAlpha = alpha;
-
-    if (clipped) {
-      context.restore();
-    }
-  }
-
-  this.dispatchPostComposeEvent(context, frameState);
-
-};
-
-
-/**
- * @param {ol.render.Event.Type} type Event type.
- * @param {CanvasRenderingContext2D} context Context.
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.Transform=} opt_transform Transform.
- * @private
- */
-ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState, opt_transform) {
-  var layer = this.getLayer();
-  if (layer.hasListener(type)) {
-    var width = frameState.size[0] * frameState.pixelRatio;
-    var height = frameState.size[1] * frameState.pixelRatio;
-    var rotation = frameState.viewState.rotation;
-    ol.render.canvas.rotateAtOffset(context, -rotation, width / 2, height / 2);
-    var transform = opt_transform !== undefined ?
-        opt_transform : this.getTransform(frameState, 0);
-    var render = new ol.render.canvas.Immediate(
-        context, frameState.pixelRatio, frameState.extent, transform,
-        frameState.viewState.rotation);
-    var composeEvent = new ol.render.Event(type, render, frameState,
-        context, null);
-    layer.dispatchEvent(composeEvent);
-    ol.render.canvas.rotateAtOffset(context, rotation, width / 2, height / 2);
-  }
-};
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.Transform=} opt_transform Transform.
- * @protected
- */
-ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = function(context, frameState, opt_transform) {
-  this.dispatchComposeEvent_(ol.render.Event.Type.POSTCOMPOSE, context,
-      frameState, opt_transform);
-};
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.Transform=} opt_transform Transform.
- * @protected
- */
-ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = function(context, frameState, opt_transform) {
-  this.dispatchComposeEvent_(ol.render.Event.Type.PRECOMPOSE, context,
-      frameState, opt_transform);
-};
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.Transform=} opt_transform Transform.
- * @protected
- */
-ol.renderer.canvas.Layer.prototype.dispatchRenderEvent = function(context, frameState, opt_transform) {
-  this.dispatchComposeEvent_(ol.render.Event.Type.RENDER, context,
-      frameState, opt_transform);
-};
-
-
-/**
- * @abstract
- * @return {HTMLCanvasElement|HTMLVideoElement|Image} Canvas.
- */
-ol.renderer.canvas.Layer.prototype.getImage = function() {};
-
-
-/**
- * @abstract
- * @return {!ol.Transform} Image transform.
- */
-ol.renderer.canvas.Layer.prototype.getImageTransform = function() {};
-
-
-/**
- * @param {olx.FrameState} frameState Frame state.
- * @param {number} offsetX Offset on the x-axis in view coordinates.
- * @protected
- * @return {!ol.Transform} Transform.
- */
-ol.renderer.canvas.Layer.prototype.getTransform = function(frameState, offsetX) {
-  var viewState = frameState.viewState;
-  var pixelRatio = frameState.pixelRatio;
-  var dx1 = pixelRatio * frameState.size[0] / 2;
-  var dy1 = pixelRatio * frameState.size[1] / 2;
-  var sx = pixelRatio / viewState.resolution;
-  var sy = -sx;
-  var angle = -viewState.rotation;
-  var dx2 = -viewState.center[0] + offsetX;
-  var dy2 = -viewState.center[1];
-  return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);
-};
-
-
-/**
- * @abstract
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.LayerState} layerState Layer state.
- * @return {boolean} whether composeFrame should be called.
- */
-ol.renderer.canvas.Layer.prototype.prepareFrame = function(frameState, layerState) {};
-
-
-/**
- * @param {ol.Pixel} pixelOnMap Pixel.
- * @param {ol.Transform} imageTransformInv The transformation matrix
- *        to convert from a map pixel to a canvas pixel.
- * @return {ol.Pixel} The pixel.
- * @protected
- */
-ol.renderer.canvas.Layer.prototype.getPixelOnCanvas = function(pixelOnMap, imageTransformInv) {
-  return ol.transform.apply(imageTransformInv, pixelOnMap.slice());
-};
-
-goog.provide('ol.render.ReplayGroup');
-
-
-/**
- * Base class for replay groups.
- * @constructor
- */
-ol.render.ReplayGroup = function() {};
-
-
-/**
- * @abstract
- * @param {number|undefined} zIndex Z index.
- * @param {ol.render.ReplayType} replayType Replay type.
- * @return {ol.render.VectorContext} Replay.
- */
-ol.render.ReplayGroup.prototype.getReplay = function(zIndex, replayType) {};
-
-
-/**
- * @abstract
- * @return {boolean} Is empty.
- */
-ol.render.ReplayGroup.prototype.isEmpty = function() {};
-
-goog.provide('ol.render.canvas.Instruction');
-
-/**
- * @enum {number}
- */
-ol.render.canvas.Instruction = {
-  BEGIN_GEOMETRY: 0,
-  BEGIN_PATH: 1,
-  CIRCLE: 2,
-  CLOSE_PATH: 3,
-  DRAW_IMAGE: 4,
-  DRAW_TEXT: 5,
-  END_GEOMETRY: 6,
-  FILL: 7,
-  MOVE_TO_LINE_TO: 8,
-  SET_FILL_STYLE: 9,
-  SET_STROKE_STYLE: 10,
-  SET_TEXT_STYLE: 11,
-  STROKE: 12
-};
-
-goog.provide('ol.render.canvas.Replay');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.colorlike');
-goog.require('ol.extent');
-goog.require('ol.extent.Relationship');
-goog.require('ol.geom.flat.transform');
-goog.require('ol.has');
-goog.require('ol.obj');
-goog.require('ol.render.VectorContext');
-goog.require('ol.render.canvas');
-goog.require('ol.render.canvas.Instruction');
-goog.require('ol.transform');
-
-
-/**
- * @constructor
- * @extends {ol.render.VectorContext}
- * @param {number} tolerance Tolerance.
- * @param {ol.Extent} maxExtent Maximum extent.
- * @param {number} resolution Resolution.
- * @param {boolean} overlaps The replay can have overlapping geometries.
- * @struct
- */
-ol.render.canvas.Replay = function(tolerance, maxExtent, resolution, overlaps) {
-  ol.render.VectorContext.call(this);
-
-  /**
-   * @protected
-   * @type {number}
-   */
-  this.tolerance = tolerance;
-
-  /**
-   * @protected
-   * @const
-   * @type {ol.Extent}
-   */
-  this.maxExtent = maxExtent;
-
-  /**
-   * @protected
-   * @type {boolean}
-   */
-  this.overlaps = overlaps;
-
-  /**
-   * @protected
-   * @type {number}
-   */
-  this.maxLineWidth = 0;
-
-  /**
-   * @protected
-   * @const
-   * @type {number}
-   */
-  this.resolution = resolution;
-
-  /**
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.fillOrigin_;
-
-  /**
-   * @private
-   * @type {Array.<*>}
-   */
-  this.beginGeometryInstruction1_ = null;
-
-  /**
-   * @private
-   * @type {Array.<*>}
-   */
-  this.beginGeometryInstruction2_ = null;
-
-  /**
-   * @protected
-   * @type {Array.<*>}
-   */
-  this.instructions = [];
-
-  /**
-   * @protected
-   * @type {Array.<number>}
-   */
-  this.coordinates = [];
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.renderedTransform_ = ol.transform.create();
-
-  /**
-   * @protected
-   * @type {Array.<*>}
-   */
-  this.hitDetectionInstructions = [];
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.pixelCoordinates_ = [];
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.tmpLocalTransform_ = ol.transform.create();
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.resetTransform_ = ol.transform.create();
-};
-ol.inherits(ol.render.canvas.Replay, ol.render.VectorContext);
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {boolean} closed Last input coordinate equals first.
- * @param {boolean} skipFirst Skip first coordinate.
- * @protected
- * @return {number} My end.
- */
-ol.render.canvas.Replay.prototype.appendFlatCoordinates = function(flatCoordinates, offset, end, stride, closed, skipFirst) {
-
-  var myEnd = this.coordinates.length;
-  var extent = this.getBufferedMaxExtent();
-  if (skipFirst) {
-    offset += stride;
-  }
-  var lastCoord = [flatCoordinates[offset], flatCoordinates[offset + 1]];
-  var nextCoord = [NaN, NaN];
-  var skipped = true;
-
-  var i, lastRel, nextRel;
-  for (i = offset + stride; i < end; i += stride) {
-    nextCoord[0] = flatCoordinates[i];
-    nextCoord[1] = flatCoordinates[i + 1];
-    nextRel = ol.extent.coordinateRelationship(extent, nextCoord);
-    if (nextRel !== lastRel) {
-      if (skipped) {
-        this.coordinates[myEnd++] = lastCoord[0];
-        this.coordinates[myEnd++] = lastCoord[1];
-      }
-      this.coordinates[myEnd++] = nextCoord[0];
-      this.coordinates[myEnd++] = nextCoord[1];
-      skipped = false;
-    } else if (nextRel === ol.extent.Relationship.INTERSECTING) {
-      this.coordinates[myEnd++] = nextCoord[0];
-      this.coordinates[myEnd++] = nextCoord[1];
-      skipped = false;
-    } else {
-      skipped = true;
-    }
-    lastCoord[0] = nextCoord[0];
-    lastCoord[1] = nextCoord[1];
-    lastRel = nextRel;
-  }
-
-  // Last coordinate equals first or only one point to append:
-  if ((closed && skipped) || i === offset + stride) {
-    this.coordinates[myEnd++] = lastCoord[0];
-    this.coordinates[myEnd++] = lastCoord[1];
-  }
-  return myEnd;
-};
-
-
-/**
- * @protected
- * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- */
-ol.render.canvas.Replay.prototype.beginGeometry = function(geometry, feature) {
-  this.beginGeometryInstruction1_ =
-      [ol.render.canvas.Instruction.BEGIN_GEOMETRY, feature, 0];
-  this.instructions.push(this.beginGeometryInstruction1_);
-  this.beginGeometryInstruction2_ =
-      [ol.render.canvas.Instruction.BEGIN_GEOMETRY, feature, 0];
-  this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);
-};
-
-
-/**
- * @private
- * @param {CanvasRenderingContext2D} context Context.
- * @param {number} rotation Rotation.
- */
-ol.render.canvas.Replay.prototype.fill_ = function(context, rotation) {
-  if (this.fillOrigin_) {
-    var origin = ol.transform.apply(this.renderedTransform_, this.fillOrigin_.slice());
-    context.translate(origin[0], origin[1]);
-    context.rotate(rotation);
-  }
-  context.fill();
-  if (this.fillOrigin_) {
-    context.setTransform.apply(context, this.resetTransform_);
-  }
-};
-
-
-/**
- * @private
- * @param {CanvasRenderingContext2D} context Context.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.Transform} transform Transform.
- * @param {number} viewRotation View rotation.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *     to skip.
- * @param {Array.<*>} instructions Instructions array.
- * @param {function((ol.Feature|ol.render.Feature)): T|undefined}
- *     featureCallback Feature callback.
- * @param {ol.Extent=} opt_hitExtent Only check features that intersect this
- *     extent.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.canvas.Replay.prototype.replay_ = function(
-    context, pixelRatio, transform, viewRotation, skippedFeaturesHash,
-    instructions, featureCallback, opt_hitExtent) {
-  /** @type {Array.<number>} */
-  var pixelCoordinates;
-  if (ol.array.equals(transform, this.renderedTransform_)) {
-    pixelCoordinates = this.pixelCoordinates_;
-  } else {
-    pixelCoordinates = ol.geom.flat.transform.transform2D(
-        this.coordinates, 0, this.coordinates.length, 2,
-        transform, this.pixelCoordinates_);
-    ol.transform.setFromArray(this.renderedTransform_, transform);
-    ol.DEBUG && console.assert(pixelCoordinates === this.pixelCoordinates_,
-        'pixelCoordinates should be the same as this.pixelCoordinates_');
-  }
-  var skipFeatures = !ol.obj.isEmpty(skippedFeaturesHash);
-  var i = 0; // instruction index
-  var ii = instructions.length; // end of instructions
-  var d = 0; // data index
-  var dd; // end of per-instruction data
-  var localTransform = this.tmpLocalTransform_;
-  var resetTransform = this.resetTransform_;
-  var prevX, prevY, roundX, roundY;
-  var pendingFill = 0;
-  var pendingStroke = 0;
-  // When the batch size gets too big, performance decreases. 200 is a good
-  // balance between batch size and number of fill/stroke instructions.
-  var batchSize =
-      this.instructions != instructions || this.overlaps ? 0 : 200;
-  while (i < ii) {
-    var instruction = instructions[i];
-    var type = /** @type {ol.render.canvas.Instruction} */ (instruction[0]);
-    var feature, fill, stroke, text, x, y;
-    switch (type) {
-      case ol.render.canvas.Instruction.BEGIN_GEOMETRY:
-        feature = /** @type {ol.Feature|ol.render.Feature} */ (instruction[1]);
-        if ((skipFeatures &&
-            skippedFeaturesHash[ol.getUid(feature).toString()]) ||
-            !feature.getGeometry()) {
-          i = /** @type {number} */ (instruction[2]);
-        } else if (opt_hitExtent !== undefined && !ol.extent.intersects(
-            opt_hitExtent, feature.getGeometry().getExtent())) {
-          i = /** @type {number} */ (instruction[2]) + 1;
-        } else {
-          ++i;
-        }
-        break;
-      case ol.render.canvas.Instruction.BEGIN_PATH:
-        if (pendingFill > batchSize) {
-          this.fill_(context, viewRotation);
-          pendingFill = 0;
-        }
-        if (pendingStroke > batchSize) {
-          context.stroke();
-          pendingStroke = 0;
-        }
-        if (!pendingFill && !pendingStroke) {
-          context.beginPath();
-        }
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.CIRCLE:
-        ol.DEBUG && console.assert(typeof instruction[1] === 'number',
-            'second instruction should be a number');
-        d = /** @type {number} */ (instruction[1]);
-        var x1 = pixelCoordinates[d];
-        var y1 = pixelCoordinates[d + 1];
-        var x2 = pixelCoordinates[d + 2];
-        var y2 = pixelCoordinates[d + 3];
-        var dx = x2 - x1;
-        var dy = y2 - y1;
-        var r = Math.sqrt(dx * dx + dy * dy);
-        context.moveTo(x1 + r, y1);
-        context.arc(x1, y1, r, 0, 2 * Math.PI, true);
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.CLOSE_PATH:
-        context.closePath();
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.DRAW_IMAGE:
-        ol.DEBUG && console.assert(typeof instruction[1] === 'number',
-            'second instruction should be a number');
-        d = /** @type {number} */ (instruction[1]);
-        ol.DEBUG && console.assert(typeof instruction[2] === 'number',
-            'third instruction should be a number');
-        dd = /** @type {number} */ (instruction[2]);
-        var image =  /** @type {HTMLCanvasElement|HTMLVideoElement|Image} */
-            (instruction[3]);
-        // Remaining arguments in DRAW_IMAGE are in alphabetical order
-        var anchorX = /** @type {number} */ (instruction[4]) * pixelRatio;
-        var anchorY = /** @type {number} */ (instruction[5]) * pixelRatio;
-        var height = /** @type {number} */ (instruction[6]);
-        var opacity = /** @type {number} */ (instruction[7]);
-        var originX = /** @type {number} */ (instruction[8]);
-        var originY = /** @type {number} */ (instruction[9]);
-        var rotateWithView = /** @type {boolean} */ (instruction[10]);
-        var rotation = /** @type {number} */ (instruction[11]);
-        var scale = /** @type {number} */ (instruction[12]);
-        var snapToPixel = /** @type {boolean} */ (instruction[13]);
-        var width = /** @type {number} */ (instruction[14]);
-        if (rotateWithView) {
-          rotation += viewRotation;
-        }
-        for (; d < dd; d += 2) {
-          x = pixelCoordinates[d] - anchorX;
-          y = pixelCoordinates[d + 1] - anchorY;
-          if (snapToPixel) {
-            x = Math.round(x);
-            y = Math.round(y);
-          }
-          if (scale != 1 || rotation !== 0) {
-            var centerX = x + anchorX;
-            var centerY = y + anchorY;
-            ol.transform.compose(localTransform,
-                centerX, centerY, scale, scale, rotation, -centerX, -centerY);
-            context.setTransform.apply(context, localTransform);
-          }
-          var alpha = context.globalAlpha;
-          if (opacity != 1) {
-            context.globalAlpha = alpha * opacity;
-          }
-
-          var w = (width + originX > image.width) ? image.width - originX : width;
-          var h = (height + originY > image.height) ? image.height - originY : height;
-
-          context.drawImage(image, originX, originY, w, h,
-              x, y, w * pixelRatio, h * pixelRatio);
-
-          if (opacity != 1) {
-            context.globalAlpha = alpha;
-          }
-          if (scale != 1 || rotation !== 0) {
-            context.setTransform.apply(context, resetTransform);
-          }
-        }
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.DRAW_TEXT:
-        ol.DEBUG && console.assert(typeof instruction[1] === 'number',
-            '2nd instruction should be a number');
-        d = /** @type {number} */ (instruction[1]);
-        ol.DEBUG && console.assert(typeof instruction[2] === 'number',
-            '3rd instruction should be a number');
-        dd = /** @type {number} */ (instruction[2]);
-        ol.DEBUG && console.assert(typeof instruction[3] === 'string',
-            '4th instruction should be a string');
-        text = /** @type {string} */ (instruction[3]);
-        ol.DEBUG && console.assert(typeof instruction[4] === 'number',
-            '5th instruction should be a number');
-        var offsetX = /** @type {number} */ (instruction[4]) * pixelRatio;
-        ol.DEBUG && console.assert(typeof instruction[5] === 'number',
-            '6th instruction should be a number');
-        var offsetY = /** @type {number} */ (instruction[5]) * pixelRatio;
-        ol.DEBUG && console.assert(typeof instruction[6] === 'number',
-            '7th instruction should be a number');
-        rotation = /** @type {number} */ (instruction[6]);
-        ol.DEBUG && console.assert(typeof instruction[7] === 'number',
-            '8th instruction should be a number');
-        scale = /** @type {number} */ (instruction[7]) * pixelRatio;
-        ol.DEBUG && console.assert(typeof instruction[8] === 'boolean',
-            '9th instruction should be a boolean');
-        fill = /** @type {boolean} */ (instruction[8]);
-        ol.DEBUG && console.assert(typeof instruction[9] === 'boolean',
-            '10th instruction should be a boolean');
-        stroke = /** @type {boolean} */ (instruction[9]);
-        rotateWithView = /** @type {boolean} */ (instruction[10]);
-        if (rotateWithView) {
-          rotation += viewRotation;
-        }
-        for (; d < dd; d += 2) {
-          x = pixelCoordinates[d] + offsetX;
-          y = pixelCoordinates[d + 1] + offsetY;
-          if (scale != 1 || rotation !== 0) {
-            ol.transform.compose(localTransform, x, y, scale, scale, rotation, -x, -y);
-            context.setTransform.apply(context, localTransform);
-          }
-
-          // Support multiple lines separated by \n
-          var lines = text.split('\n');
-          var numLines = lines.length;
-          var fontSize, lineY;
-          if (numLines > 1) {
-            // Estimate line height using width of capital M, and add padding
-            fontSize = Math.round(context.measureText('M').width * 1.5);
-            lineY = y - (((numLines - 1) / 2) * fontSize);
-          } else {
-            // No need to calculate line height/offset for a single line
-            fontSize = 0;
-            lineY = y;
-          }
-
-          for (var lineIndex = 0; lineIndex < numLines; lineIndex++) {
-            var line = lines[lineIndex];
-            if (stroke) {
-              context.strokeText(line, x, lineY);
-            }
-            if (fill) {
-              context.fillText(line, x, lineY);
-            }
-
-            // Move next line down by fontSize px
-            lineY = lineY + fontSize;
-          }
-
-          if (scale != 1 || rotation !== 0) {
-            context.setTransform.apply(context, resetTransform);
-          }
-        }
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.END_GEOMETRY:
-        if (featureCallback !== undefined) {
-          feature =
-              /** @type {ol.Feature|ol.render.Feature} */ (instruction[1]);
-          var result = featureCallback(feature);
-          if (result) {
-            return result;
-          }
-        }
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.FILL:
-        if (batchSize) {
-          pendingFill++;
-        } else {
-          this.fill_(context, viewRotation);
-        }
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.MOVE_TO_LINE_TO:
-        ol.DEBUG && console.assert(typeof instruction[1] === 'number',
-            '2nd instruction should be a number');
-        d = /** @type {number} */ (instruction[1]);
-        ol.DEBUG && console.assert(typeof instruction[2] === 'number',
-            '3rd instruction should be a number');
-        dd = /** @type {number} */ (instruction[2]);
-        x = pixelCoordinates[d];
-        y = pixelCoordinates[d + 1];
-        roundX = (x + 0.5) | 0;
-        roundY = (y + 0.5) | 0;
-        if (roundX !== prevX || roundY !== prevY) {
-          context.moveTo(x, y);
-          prevX = roundX;
-          prevY = roundY;
-        }
-        for (d += 2; d < dd; d += 2) {
-          x = pixelCoordinates[d];
-          y = pixelCoordinates[d + 1];
-          roundX = (x + 0.5) | 0;
-          roundY = (y + 0.5) | 0;
-          if (d == dd - 2 || roundX !== prevX || roundY !== prevY) {
-            context.lineTo(x, y);
-            prevX = roundX;
-            prevY = roundY;
-          }
-        }
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.SET_FILL_STYLE:
-        ol.DEBUG && console.assert(
-            ol.colorlike.isColorLike(instruction[1]),
-            '2nd instruction should be a string, ' +
-            'CanvasPattern, or CanvasGradient');
-        this.fillOrigin_ = instruction[2];
-
-        if (pendingFill) {
-          this.fill_(context, viewRotation);
-          pendingFill = 0;
-        }
-
-        context.fillStyle = /** @type {ol.ColorLike} */ (instruction[1]);
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.SET_STROKE_STYLE:
-        ol.DEBUG && console.assert(ol.colorlike.isColorLike(instruction[1]),
-            '2nd instruction should be a string, CanvasPattern, or CanvasGradient');
-        ol.DEBUG && console.assert(typeof instruction[2] === 'number',
-            '3rd instruction should be a number');
-        ol.DEBUG && console.assert(typeof instruction[3] === 'string',
-            '4rd instruction should be a string');
-        ol.DEBUG && console.assert(typeof instruction[4] === 'string',
-            '5th instruction should be a string');
-        ol.DEBUG && console.assert(typeof instruction[5] === 'number',
-            '6th instruction should be a number');
-        ol.DEBUG && console.assert(instruction[6],
-            '7th instruction should not be null');
-        var usePixelRatio = instruction[7] !== undefined ?
-            instruction[7] : true;
-        var lineWidth = /** @type {number} */ (instruction[2]);
-        if (pendingStroke) {
-          context.stroke();
-          pendingStroke = 0;
-        }
-        context.strokeStyle = /** @type {ol.ColorLike} */ (instruction[1]);
-        context.lineWidth = usePixelRatio ? lineWidth * pixelRatio : lineWidth;
-        context.lineCap = /** @type {string} */ (instruction[3]);
-        context.lineJoin = /** @type {string} */ (instruction[4]);
-        context.miterLimit = /** @type {number} */ (instruction[5]);
-        if (ol.has.CANVAS_LINE_DASH) {
-          context.setLineDash(/** @type {Array.<number>} */ (instruction[6]));
-        }
-        prevX = NaN;
-        prevY = NaN;
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.SET_TEXT_STYLE:
-        ol.DEBUG && console.assert(typeof instruction[1] === 'string',
-            '2nd instruction should be a string');
-        ol.DEBUG && console.assert(typeof instruction[2] === 'string',
-            '3rd instruction should be a string');
-        ol.DEBUG && console.assert(typeof instruction[3] === 'string',
-            '4th instruction should be a string');
-        context.font = /** @type {string} */ (instruction[1]);
-        context.textAlign = /** @type {string} */ (instruction[2]);
-        context.textBaseline = /** @type {string} */ (instruction[3]);
-        ++i;
-        break;
-      case ol.render.canvas.Instruction.STROKE:
-        if (batchSize) {
-          pendingStroke++;
-        } else {
-          context.stroke();
-        }
-        ++i;
-        break;
-      default:
-        ol.DEBUG && console.assert(false, 'Unknown canvas render instruction');
-        ++i; // consume the instruction anyway, to avoid an infinite loop
-        break;
-    }
-  }
-  if (pendingFill) {
-    this.fill_(context, viewRotation);
-  }
-  if (pendingStroke) {
-    context.stroke();
-  }
-  // assert that all instructions were consumed
-  ol.DEBUG && console.assert(i == instructions.length,
-      'all instructions should be consumed');
-  return undefined;
-};
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.Transform} transform Transform.
- * @param {number} viewRotation View rotation.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *     to skip.
- */
-ol.render.canvas.Replay.prototype.replay = function(
-    context, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
-  var instructions = this.instructions;
-  this.replay_(context, pixelRatio, transform, viewRotation,
-      skippedFeaturesHash, instructions, undefined, undefined);
-};
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {ol.Transform} transform Transform.
- * @param {number} viewRotation View rotation.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *     to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T=} opt_featureCallback
- *     Feature callback.
- * @param {ol.Extent=} opt_hitExtent Only check features that intersect this
- *     extent.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.canvas.Replay.prototype.replayHitDetection = function(
-    context, transform, viewRotation, skippedFeaturesHash,
-    opt_featureCallback, opt_hitExtent) {
-  var instructions = this.hitDetectionInstructions;
-  return this.replay_(context, 1, transform, viewRotation,
-      skippedFeaturesHash, instructions, opt_featureCallback, opt_hitExtent);
-};
-
-
-/**
- * Reverse the hit detection instructions.
- */
-ol.render.canvas.Replay.prototype.reverseHitDetectionInstructions = function() {
-  var hitDetectionInstructions = this.hitDetectionInstructions;
-  // step 1 - reverse array
-  hitDetectionInstructions.reverse();
-  // step 2 - reverse instructions within geometry blocks
-  var i;
-  var n = hitDetectionInstructions.length;
-  var instruction;
-  var type;
-  var begin = -1;
-  for (i = 0; i < n; ++i) {
-    instruction = hitDetectionInstructions[i];
-    type = /** @type {ol.render.canvas.Instruction} */ (instruction[0]);
-    if (type == ol.render.canvas.Instruction.END_GEOMETRY) {
-      ol.DEBUG && console.assert(begin == -1, 'begin should be -1');
-      begin = i;
-    } else if (type == ol.render.canvas.Instruction.BEGIN_GEOMETRY) {
-      instruction[2] = i;
-      ol.DEBUG && console.assert(begin >= 0,
-          'begin should be larger than or equal to 0');
-      ol.array.reverseSubArray(this.hitDetectionInstructions, begin, i);
-      begin = -1;
-    }
-  }
-};
-
-
-/**
- * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- */
-ol.render.canvas.Replay.prototype.endGeometry = function(geometry, feature) {
-  ol.DEBUG && console.assert(this.beginGeometryInstruction1_,
-      'this.beginGeometryInstruction1_ should not be null');
-  this.beginGeometryInstruction1_[2] = this.instructions.length;
-  this.beginGeometryInstruction1_ = null;
-  ol.DEBUG && console.assert(this.beginGeometryInstruction2_,
-      'this.beginGeometryInstruction2_ should not be null');
-  this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length;
-  this.beginGeometryInstruction2_ = null;
-  var endGeometryInstruction =
-      [ol.render.canvas.Instruction.END_GEOMETRY, feature];
-  this.instructions.push(endGeometryInstruction);
-  this.hitDetectionInstructions.push(endGeometryInstruction);
-};
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.render.canvas.Replay.prototype.finish = ol.nullFunction;
-
-
-/**
- * Get the buffered rendering extent.  Rendering will be clipped to the extent
- * provided to the constructor.  To account for symbolizers that may intersect
- * this extent, we calculate a buffered extent (e.g. based on stroke width).
- * @return {ol.Extent} The buffered rendering extent.
- * @protected
- */
-ol.render.canvas.Replay.prototype.getBufferedMaxExtent = function() {
-  return this.maxExtent;
-};
-
-goog.provide('ol.render.canvas.ImageReplay');
-
-goog.require('ol');
-goog.require('ol.render.canvas.Instruction');
-goog.require('ol.render.canvas.Replay');
-
-
-/**
- * @constructor
- * @extends {ol.render.canvas.Replay}
- * @param {number} tolerance Tolerance.
- * @param {ol.Extent} maxExtent Maximum extent.
- * @param {number} resolution Resolution.
- * @param {boolean} overlaps The replay can have overlapping geometries.
- * @struct
- */
-ol.render.canvas.ImageReplay = function(tolerance, maxExtent, resolution, overlaps) {
-  ol.render.canvas.Replay.call(this, tolerance, maxExtent, resolution, overlaps);
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement|HTMLVideoElement|Image}
-   */
-  this.hitDetectionImage_ = null;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement|HTMLVideoElement|Image}
-   */
-  this.image_ = null;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.anchorX_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.anchorY_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.height_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.opacity_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.originX_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.originY_ = undefined;
-
-  /**
-   * @private
-   * @type {boolean|undefined}
-   */
-  this.rotateWithView_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.rotation_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.scale_ = undefined;
-
-  /**
-   * @private
-   * @type {boolean|undefined}
-   */
-  this.snapToPixel_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.width_ = undefined;
-
-};
-ol.inherits(ol.render.canvas.ImageReplay, ol.render.canvas.Replay);
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @private
- * @return {number} My end.
- */
-ol.render.canvas.ImageReplay.prototype.drawCoordinates_ = function(flatCoordinates, offset, end, stride) {
-  return this.appendFlatCoordinates(
-      flatCoordinates, offset, end, stride, false, false);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.ImageReplay.prototype.drawPoint = function(pointGeometry, feature) {
-  if (!this.image_) {
-    return;
-  }
-  ol.DEBUG && console.assert(this.anchorX_ !== undefined,
-      'this.anchorX_ should be defined');
-  ol.DEBUG && console.assert(this.anchorY_ !== undefined,
-      'this.anchorY_ should be defined');
-  ol.DEBUG && console.assert(this.height_ !== undefined,
-      'this.height_ should be defined');
-  ol.DEBUG && console.assert(this.opacity_ !== undefined,
-      'this.opacity_ should be defined');
-  ol.DEBUG && console.assert(this.originX_ !== undefined,
-      'this.originX_ should be defined');
-  ol.DEBUG && console.assert(this.originY_ !== undefined,
-      'this.originY_ should be defined');
-  ol.DEBUG && console.assert(this.rotateWithView_ !== undefined,
-      'this.rotateWithView_ should be defined');
-  ol.DEBUG && console.assert(this.rotation_ !== undefined,
-      'this.rotation_ should be defined');
-  ol.DEBUG && console.assert(this.scale_ !== undefined,
-      'this.scale_ should be defined');
-  ol.DEBUG && console.assert(this.width_ !== undefined,
-      'this.width_ should be defined');
-  this.beginGeometry(pointGeometry, feature);
-  var flatCoordinates = pointGeometry.getFlatCoordinates();
-  var stride = pointGeometry.getStride();
-  var myBegin = this.coordinates.length;
-  var myEnd = this.drawCoordinates_(
-      flatCoordinates, 0, flatCoordinates.length, stride);
-  this.instructions.push([
-    ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_,
-    // Remaining arguments to DRAW_IMAGE are in alphabetical order
-    this.anchorX_, this.anchorY_, this.height_, this.opacity_,
-    this.originX_, this.originY_, this.rotateWithView_, this.rotation_,
-    this.scale_, this.snapToPixel_, this.width_
-  ]);
-  this.hitDetectionInstructions.push([
-    ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd,
-    this.hitDetectionImage_,
-    // Remaining arguments to DRAW_IMAGE are in alphabetical order
-    this.anchorX_, this.anchorY_, this.height_, this.opacity_,
-    this.originX_, this.originY_, this.rotateWithView_, this.rotation_,
-    this.scale_, this.snapToPixel_, this.width_
-  ]);
-  this.endGeometry(pointGeometry, feature);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.ImageReplay.prototype.drawMultiPoint = function(multiPointGeometry, feature) {
-  if (!this.image_) {
-    return;
-  }
-  ol.DEBUG && console.assert(this.anchorX_ !== undefined,
-      'this.anchorX_ should be defined');
-  ol.DEBUG && console.assert(this.anchorY_ !== undefined,
-      'this.anchorY_ should be defined');
-  ol.DEBUG && console.assert(this.height_ !== undefined,
-      'this.height_ should be defined');
-  ol.DEBUG && console.assert(this.opacity_ !== undefined,
-      'this.opacity_ should be defined');
-  ol.DEBUG && console.assert(this.originX_ !== undefined,
-      'this.originX_ should be defined');
-  ol.DEBUG && console.assert(this.originY_ !== undefined,
-      'this.originY_ should be defined');
-  ol.DEBUG && console.assert(this.rotateWithView_ !== undefined,
-      'this.rotateWithView_ should be defined');
-  ol.DEBUG && console.assert(this.rotation_ !== undefined,
-      'this.rotation_ should be defined');
-  ol.DEBUG && console.assert(this.scale_ !== undefined,
-      'this.scale_ should be defined');
-  ol.DEBUG && console.assert(this.width_ !== undefined,
-      'this.width_ should be defined');
-  this.beginGeometry(multiPointGeometry, feature);
-  var flatCoordinates = multiPointGeometry.getFlatCoordinates();
-  var stride = multiPointGeometry.getStride();
-  var myBegin = this.coordinates.length;
-  var myEnd = this.drawCoordinates_(
-      flatCoordinates, 0, flatCoordinates.length, stride);
-  this.instructions.push([
-    ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd, this.image_,
-    // Remaining arguments to DRAW_IMAGE are in alphabetical order
-    this.anchorX_, this.anchorY_, this.height_, this.opacity_,
-    this.originX_, this.originY_, this.rotateWithView_, this.rotation_,
-    this.scale_, this.snapToPixel_, this.width_
-  ]);
-  this.hitDetectionInstructions.push([
-    ol.render.canvas.Instruction.DRAW_IMAGE, myBegin, myEnd,
-    this.hitDetectionImage_,
-    // Remaining arguments to DRAW_IMAGE are in alphabetical order
-    this.anchorX_, this.anchorY_, this.height_, this.opacity_,
-    this.originX_, this.originY_, this.rotateWithView_, this.rotation_,
-    this.scale_, this.snapToPixel_, this.width_
-  ]);
-  this.endGeometry(multiPointGeometry, feature);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.ImageReplay.prototype.finish = function() {
-  this.reverseHitDetectionInstructions();
-  // FIXME this doesn't really protect us against further calls to draw*Geometry
-  this.anchorX_ = undefined;
-  this.anchorY_ = undefined;
-  this.hitDetectionImage_ = null;
-  this.image_ = null;
-  this.height_ = undefined;
-  this.scale_ = undefined;
-  this.opacity_ = undefined;
-  this.originX_ = undefined;
-  this.originY_ = undefined;
-  this.rotateWithView_ = undefined;
-  this.rotation_ = undefined;
-  this.snapToPixel_ = undefined;
-  this.width_ = undefined;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.ImageReplay.prototype.setImageStyle = function(imageStyle) {
-  ol.DEBUG && console.assert(imageStyle, 'imageStyle should not be null');
-  var anchor = imageStyle.getAnchor();
-  ol.DEBUG && console.assert(anchor, 'anchor should not be null');
-  var size = imageStyle.getSize();
-  ol.DEBUG && console.assert(size, 'size should not be null');
-  var hitDetectionImage = imageStyle.getHitDetectionImage(1);
-  ol.DEBUG && console.assert(hitDetectionImage,
-      'hitDetectionImage should not be null');
-  var image = imageStyle.getImage(1);
-  ol.DEBUG && console.assert(image, 'image should not be null');
-  var origin = imageStyle.getOrigin();
-  ol.DEBUG && console.assert(origin, 'origin should not be null');
-  this.anchorX_ = anchor[0];
-  this.anchorY_ = anchor[1];
-  this.hitDetectionImage_ = hitDetectionImage;
-  this.image_ = image;
-  this.height_ = size[1];
-  this.opacity_ = imageStyle.getOpacity();
-  this.originX_ = origin[0];
-  this.originY_ = origin[1];
-  this.rotateWithView_ = imageStyle.getRotateWithView();
-  this.rotation_ = imageStyle.getRotation();
-  this.scale_ = imageStyle.getScale();
-  this.snapToPixel_ = imageStyle.getSnapToPixel();
-  this.width_ = size[0];
-};
-
-goog.provide('ol.render.canvas.LineStringReplay');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.colorlike');
-goog.require('ol.extent');
-goog.require('ol.render.canvas');
-goog.require('ol.render.canvas.Instruction');
-goog.require('ol.render.canvas.Replay');
-
-
-/**
- * @constructor
- * @extends {ol.render.canvas.Replay}
- * @param {number} tolerance Tolerance.
- * @param {ol.Extent} maxExtent Maximum extent.
- * @param {number} resolution Resolution.
- * @param {boolean} overlaps The replay can have overlapping geometries.
- * @struct
- */
-ol.render.canvas.LineStringReplay = function(tolerance, maxExtent, resolution, overlaps) {
-
-  ol.render.canvas.Replay.call(this, tolerance, maxExtent, resolution, overlaps);
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.bufferedMaxExtent_ = null;
-
-  /**
-   * @private
-   * @type {{currentStrokeStyle: (ol.ColorLike|undefined),
-   *         currentLineCap: (string|undefined),
-   *         currentLineDash: Array.<number>,
-   *         currentLineJoin: (string|undefined),
-   *         currentLineWidth: (number|undefined),
-   *         currentMiterLimit: (number|undefined),
-   *         lastStroke: number,
-   *         strokeStyle: (ol.ColorLike|undefined),
-   *         lineCap: (string|undefined),
-   *         lineDash: Array.<number>,
-   *         lineJoin: (string|undefined),
-   *         lineWidth: (number|undefined),
-   *         miterLimit: (number|undefined)}|null}
-   */
-  this.state_ = {
-    currentStrokeStyle: undefined,
-    currentLineCap: undefined,
-    currentLineDash: null,
-    currentLineJoin: undefined,
-    currentLineWidth: undefined,
-    currentMiterLimit: undefined,
-    lastStroke: 0,
-    strokeStyle: undefined,
-    lineCap: undefined,
-    lineDash: null,
-    lineJoin: undefined,
-    lineWidth: undefined,
-    miterLimit: undefined
-  };
-
-};
-ol.inherits(ol.render.canvas.LineStringReplay, ol.render.canvas.Replay);
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @private
- * @return {number} end.
- */
-ol.render.canvas.LineStringReplay.prototype.drawFlatCoordinates_ = function(flatCoordinates, offset, end, stride) {
-  var myBegin = this.coordinates.length;
-  var myEnd = this.appendFlatCoordinates(
-      flatCoordinates, offset, end, stride, false, false);
-  var moveToLineToInstruction =
-      [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd];
-  this.instructions.push(moveToLineToInstruction);
-  this.hitDetectionInstructions.push(moveToLineToInstruction);
-  return end;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.LineStringReplay.prototype.getBufferedMaxExtent = function() {
-  if (!this.bufferedMaxExtent_) {
-    this.bufferedMaxExtent_ = ol.extent.clone(this.maxExtent);
-    if (this.maxLineWidth > 0) {
-      var width = this.resolution * (this.maxLineWidth + 1) / 2;
-      ol.extent.buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);
-    }
-  }
-  return this.bufferedMaxExtent_;
-};
-
-
-/**
- * @private
- */
-ol.render.canvas.LineStringReplay.prototype.setStrokeStyle_ = function() {
-  var state = this.state_;
-  var strokeStyle = state.strokeStyle;
-  var lineCap = state.lineCap;
-  var lineDash = state.lineDash;
-  var lineJoin = state.lineJoin;
-  var lineWidth = state.lineWidth;
-  var miterLimit = state.miterLimit;
-  ol.DEBUG && console.assert(strokeStyle !== undefined,
-      'strokeStyle should be defined');
-  ol.DEBUG && console.assert(lineCap !== undefined, 'lineCap should be defined');
-  ol.DEBUG && console.assert(lineDash, 'lineDash should not be null');
-  ol.DEBUG && console.assert(lineJoin !== undefined, 'lineJoin should be defined');
-  ol.DEBUG && console.assert(lineWidth !== undefined, 'lineWidth should be defined');
-  ol.DEBUG && console.assert(miterLimit !== undefined, 'miterLimit should be defined');
-  if (state.currentStrokeStyle != strokeStyle ||
-      state.currentLineCap != lineCap ||
-      !ol.array.equals(state.currentLineDash, lineDash) ||
-      state.currentLineJoin != lineJoin ||
-      state.currentLineWidth != lineWidth ||
-      state.currentMiterLimit != miterLimit) {
-    if (state.lastStroke != this.coordinates.length) {
-      this.instructions.push(
-          [ol.render.canvas.Instruction.STROKE]);
-      state.lastStroke = this.coordinates.length;
-    }
-    this.instructions.push(
-        [ol.render.canvas.Instruction.SET_STROKE_STYLE,
-         strokeStyle, lineWidth, lineCap, lineJoin, miterLimit, lineDash],
-        [ol.render.canvas.Instruction.BEGIN_PATH]);
-    state.currentStrokeStyle = strokeStyle;
-    state.currentLineCap = lineCap;
-    state.currentLineDash = lineDash;
-    state.currentLineJoin = lineJoin;
-    state.currentLineWidth = lineWidth;
-    state.currentMiterLimit = miterLimit;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.LineStringReplay.prototype.drawLineString = function(lineStringGeometry, feature) {
-  var state = this.state_;
-  ol.DEBUG && console.assert(state, 'state should not be null');
-  var strokeStyle = state.strokeStyle;
-  var lineWidth = state.lineWidth;
-  if (strokeStyle === undefined || lineWidth === undefined) {
-    return;
-  }
-  this.setStrokeStyle_();
-  this.beginGeometry(lineStringGeometry, feature);
-  this.hitDetectionInstructions.push(
-      [ol.render.canvas.Instruction.SET_STROKE_STYLE,
-       state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
-       state.miterLimit, state.lineDash],
-      [ol.render.canvas.Instruction.BEGIN_PATH]);
-  var flatCoordinates = lineStringGeometry.getFlatCoordinates();
-  var stride = lineStringGeometry.getStride();
-  this.drawFlatCoordinates_(
-      flatCoordinates, 0, flatCoordinates.length, stride);
-  this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]);
-  this.endGeometry(lineStringGeometry, feature);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.LineStringReplay.prototype.drawMultiLineString = function(multiLineStringGeometry, feature) {
-  var state = this.state_;
-  ol.DEBUG && console.assert(state, 'state should not be null');
-  var strokeStyle = state.strokeStyle;
-  var lineWidth = state.lineWidth;
-  if (strokeStyle === undefined || lineWidth === undefined) {
-    return;
-  }
-  this.setStrokeStyle_();
-  this.beginGeometry(multiLineStringGeometry, feature);
-  this.hitDetectionInstructions.push(
-      [ol.render.canvas.Instruction.SET_STROKE_STYLE,
-       state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
-       state.miterLimit, state.lineDash],
-      [ol.render.canvas.Instruction.BEGIN_PATH]);
-  var ends = multiLineStringGeometry.getEnds();
-  var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();
-  var stride = multiLineStringGeometry.getStride();
-  var offset = 0;
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    offset = this.drawFlatCoordinates_(
-        flatCoordinates, offset, ends[i], stride);
-  }
-  this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]);
-  this.endGeometry(multiLineStringGeometry, feature);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.LineStringReplay.prototype.finish = function() {
-  var state = this.state_;
-  ol.DEBUG && console.assert(state, 'state should not be null');
-  if (state.lastStroke != this.coordinates.length) {
-    this.instructions.push([ol.render.canvas.Instruction.STROKE]);
-  }
-  this.reverseHitDetectionInstructions();
-  this.state_ = null;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.LineStringReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
-  ol.DEBUG && console.assert(this.state_, 'this.state_ should not be null');
-  ol.DEBUG && console.assert(!fillStyle, 'fillStyle should be null');
-  ol.DEBUG && console.assert(strokeStyle, 'strokeStyle should not be null');
-  var strokeStyleColor = strokeStyle.getColor();
-  this.state_.strokeStyle = ol.colorlike.asColorLike(strokeStyleColor ?
-      strokeStyleColor : ol.render.canvas.defaultStrokeStyle);
-  var strokeStyleLineCap = strokeStyle.getLineCap();
-  this.state_.lineCap = strokeStyleLineCap !== undefined ?
-      strokeStyleLineCap : ol.render.canvas.defaultLineCap;
-  var strokeStyleLineDash = strokeStyle.getLineDash();
-  this.state_.lineDash = strokeStyleLineDash ?
-      strokeStyleLineDash : ol.render.canvas.defaultLineDash;
-  var strokeStyleLineJoin = strokeStyle.getLineJoin();
-  this.state_.lineJoin = strokeStyleLineJoin !== undefined ?
-      strokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
-  var strokeStyleWidth = strokeStyle.getWidth();
-  this.state_.lineWidth = strokeStyleWidth !== undefined ?
-      strokeStyleWidth : ol.render.canvas.defaultLineWidth;
-  var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
-  this.state_.miterLimit = strokeStyleMiterLimit !== undefined ?
-      strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
-
-  if (this.state_.lineWidth > this.maxLineWidth) {
-    this.maxLineWidth = this.state_.lineWidth;
-    // invalidate the buffered max extent cache
-    this.bufferedMaxExtent_ = null;
-  }
-};
-
-goog.provide('ol.render.canvas.PolygonReplay');
-
-goog.require('ol');
-goog.require('ol.color');
-goog.require('ol.colorlike');
-goog.require('ol.extent');
-goog.require('ol.geom.flat.simplify');
-goog.require('ol.render.canvas');
-goog.require('ol.render.canvas.Instruction');
-goog.require('ol.render.canvas.Replay');
-
-
-/**
- * @constructor
- * @extends {ol.render.canvas.Replay}
- * @param {number} tolerance Tolerance.
- * @param {ol.Extent} maxExtent Maximum extent.
- * @param {number} resolution Resolution.
- * @param {boolean} overlaps The replay can have overlapping geometries.
- * @struct
- */
-ol.render.canvas.PolygonReplay = function(tolerance, maxExtent, resolution, overlaps) {
-
-  ol.render.canvas.Replay.call(this, tolerance, maxExtent, resolution, overlaps);
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.bufferedMaxExtent_ = null;
-
-  /**
-   * @private
-   * @type {{currentFillStyle: (ol.ColorLike|undefined),
-   *         currentStrokeStyle: (ol.ColorLike|undefined),
-   *         currentLineCap: (string|undefined),
-   *         currentLineDash: Array.<number>,
-   *         currentLineJoin: (string|undefined),
-   *         currentLineWidth: (number|undefined),
-   *         currentMiterLimit: (number|undefined),
-   *         fillStyle: (ol.ColorLike|undefined),
-   *         strokeStyle: (ol.ColorLike|undefined),
-   *         lineCap: (string|undefined),
-   *         lineDash: Array.<number>,
-   *         lineJoin: (string|undefined),
-   *         lineWidth: (number|undefined),
-   *         miterLimit: (number|undefined)}|null}
-   */
-  this.state_ = {
-    currentFillStyle: undefined,
-    currentStrokeStyle: undefined,
-    currentLineCap: undefined,
-    currentLineDash: null,
-    currentLineJoin: undefined,
-    currentLineWidth: undefined,
-    currentMiterLimit: undefined,
-    fillStyle: undefined,
-    strokeStyle: undefined,
-    lineCap: undefined,
-    lineDash: null,
-    lineJoin: undefined,
-    lineWidth: undefined,
-    miterLimit: undefined
-  };
-
-};
-ol.inherits(ol.render.canvas.PolygonReplay, ol.render.canvas.Replay);
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @private
- * @return {number} End.
- */
-ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ = function(flatCoordinates, offset, ends, stride) {
-  var state = this.state_;
-  var fill = state.fillStyle !== undefined;
-  var stroke = state.strokeStyle != undefined;
-  var numEnds = ends.length;
-  var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH];
-  this.instructions.push(beginPathInstruction);
-  this.hitDetectionInstructions.push(beginPathInstruction);
-  for (var i = 0; i < numEnds; ++i) {
-    var end = ends[i];
-    var myBegin = this.coordinates.length;
-    var myEnd = this.appendFlatCoordinates(
-        flatCoordinates, offset, end, stride, true, !stroke);
-    var moveToLineToInstruction =
-        [ol.render.canvas.Instruction.MOVE_TO_LINE_TO, myBegin, myEnd];
-    this.instructions.push(moveToLineToInstruction);
-    this.hitDetectionInstructions.push(moveToLineToInstruction);
-    if (stroke) {
-      // Performance optimization: only call closePath() when we have a stroke.
-      // Otherwise the ring is closed already (see appendFlatCoordinates above).
-      var closePathInstruction = [ol.render.canvas.Instruction.CLOSE_PATH];
-      this.instructions.push(closePathInstruction);
-      this.hitDetectionInstructions.push(closePathInstruction);
-    }
-    offset = end;
-  }
-  var fillInstruction = [ol.render.canvas.Instruction.FILL];
-  this.hitDetectionInstructions.push(fillInstruction);
-  if (fill) {
-    this.instructions.push(fillInstruction);
-  }
-  if (stroke) {
-    ol.DEBUG && console.assert(state.lineWidth !== undefined,
-        'state.lineWidth should be defined');
-    var strokeInstruction = [ol.render.canvas.Instruction.STROKE];
-    this.instructions.push(strokeInstruction);
-    this.hitDetectionInstructions.push(strokeInstruction);
-  }
-  return offset;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.PolygonReplay.prototype.drawCircle = function(circleGeometry, feature) {
-  var state = this.state_;
-  ol.DEBUG && console.assert(state, 'state should not be null');
-  var fillStyle = state.fillStyle;
-  var strokeStyle = state.strokeStyle;
-  if (fillStyle === undefined && strokeStyle === undefined) {
-    return;
-  }
-  if (strokeStyle !== undefined) {
-    ol.DEBUG && console.assert(state.lineWidth !== undefined,
-        'state.lineWidth should be defined');
-  }
-  this.setFillStrokeStyles_(circleGeometry);
-  this.beginGeometry(circleGeometry, feature);
-  // always fill the circle for hit detection
-  this.hitDetectionInstructions.push(
-      [ol.render.canvas.Instruction.SET_FILL_STYLE,
-       ol.color.asString(ol.render.canvas.defaultFillStyle)]);
-  if (state.strokeStyle !== undefined) {
-    this.hitDetectionInstructions.push(
-        [ol.render.canvas.Instruction.SET_STROKE_STYLE,
-         state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
-         state.miterLimit, state.lineDash]);
-  }
-  var flatCoordinates = circleGeometry.getFlatCoordinates();
-  var stride = circleGeometry.getStride();
-  var myBegin = this.coordinates.length;
-  this.appendFlatCoordinates(
-      flatCoordinates, 0, flatCoordinates.length, stride, false, false);
-  var beginPathInstruction = [ol.render.canvas.Instruction.BEGIN_PATH];
-  var circleInstruction = [ol.render.canvas.Instruction.CIRCLE, myBegin];
-  this.instructions.push(beginPathInstruction, circleInstruction);
-  this.hitDetectionInstructions.push(beginPathInstruction, circleInstruction);
-  var fillInstruction = [ol.render.canvas.Instruction.FILL];
-  this.hitDetectionInstructions.push(fillInstruction);
-  if (state.fillStyle !== undefined) {
-    this.instructions.push(fillInstruction);
-  }
-  if (state.strokeStyle !== undefined) {
-    ol.DEBUG && console.assert(state.lineWidth !== undefined,
-        'state.lineWidth should be defined');
-    var strokeInstruction = [ol.render.canvas.Instruction.STROKE];
-    this.instructions.push(strokeInstruction);
-    this.hitDetectionInstructions.push(strokeInstruction);
-  }
-  this.endGeometry(circleGeometry, feature);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.PolygonReplay.prototype.drawPolygon = function(polygonGeometry, feature) {
-  var state = this.state_;
-  ol.DEBUG && console.assert(state, 'state should not be null');
-  var strokeStyle = state.strokeStyle;
-  ol.DEBUG && console.assert(state.fillStyle !== undefined || strokeStyle !== undefined,
-      'fillStyle or strokeStyle should be defined');
-  if (strokeStyle !== undefined) {
-    ol.DEBUG && console.assert(state.lineWidth !== undefined,
-        'state.lineWidth should be defined');
-  }
-  this.setFillStrokeStyles_(polygonGeometry);
-  this.beginGeometry(polygonGeometry, feature);
-  // always fill the polygon for hit detection
-  this.hitDetectionInstructions.push(
-      [ol.render.canvas.Instruction.SET_FILL_STYLE,
-       ol.color.asString(ol.render.canvas.defaultFillStyle)]);
-  if (state.strokeStyle !== undefined) {
-    this.hitDetectionInstructions.push(
-        [ol.render.canvas.Instruction.SET_STROKE_STYLE,
-         state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
-         state.miterLimit, state.lineDash]);
-  }
-  var ends = polygonGeometry.getEnds();
-  var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();
-  var stride = polygonGeometry.getStride();
-  this.drawFlatCoordinatess_(flatCoordinates, 0, ends, stride);
-  this.endGeometry(polygonGeometry, feature);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.PolygonReplay.prototype.drawMultiPolygon = function(multiPolygonGeometry, feature) {
-  var state = this.state_;
-  ol.DEBUG && console.assert(state, 'state should not be null');
-  var fillStyle = state.fillStyle;
-  var strokeStyle = state.strokeStyle;
-  if (fillStyle === undefined && strokeStyle === undefined) {
-    return;
-  }
-  if (strokeStyle !== undefined) {
-    ol.DEBUG && console.assert(state.lineWidth !== undefined,
-        'state.lineWidth should be defined');
-  }
-  this.setFillStrokeStyles_(multiPolygonGeometry);
-  this.beginGeometry(multiPolygonGeometry, feature);
-  // always fill the multi-polygon for hit detection
-  this.hitDetectionInstructions.push(
-      [ol.render.canvas.Instruction.SET_FILL_STYLE,
-       ol.color.asString(ol.render.canvas.defaultFillStyle)]);
-  if (state.strokeStyle !== undefined) {
-    this.hitDetectionInstructions.push(
-        [ol.render.canvas.Instruction.SET_STROKE_STYLE,
-         state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
-         state.miterLimit, state.lineDash]);
-  }
-  var endss = multiPolygonGeometry.getEndss();
-  var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates();
-  var stride = multiPolygonGeometry.getStride();
-  var offset = 0;
-  var i, ii;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    offset = this.drawFlatCoordinatess_(
-        flatCoordinates, offset, endss[i], stride);
-  }
-  this.endGeometry(multiPolygonGeometry, feature);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.PolygonReplay.prototype.finish = function() {
-  ol.DEBUG && console.assert(this.state_, 'this.state_ should not be null');
-  this.reverseHitDetectionInstructions();
-  this.state_ = null;
-  // We want to preserve topology when drawing polygons.  Polygons are
-  // simplified using quantization and point elimination. However, we might
-  // have received a mix of quantized and non-quantized geometries, so ensure
-  // that all are quantized by quantizing all coordinates in the batch.
-  var tolerance = this.tolerance;
-  if (tolerance !== 0) {
-    var coordinates = this.coordinates;
-    var i, ii;
-    for (i = 0, ii = coordinates.length; i < ii; ++i) {
-      coordinates[i] = ol.geom.flat.simplify.snap(coordinates[i], tolerance);
-    }
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.PolygonReplay.prototype.getBufferedMaxExtent = function() {
-  if (!this.bufferedMaxExtent_) {
-    this.bufferedMaxExtent_ = ol.extent.clone(this.maxExtent);
-    if (this.maxLineWidth > 0) {
-      var width = this.resolution * (this.maxLineWidth + 1) / 2;
-      ol.extent.buffer(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);
-    }
-  }
-  return this.bufferedMaxExtent_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyle = function(fillStyle, strokeStyle) {
-  ol.DEBUG && console.assert(this.state_, 'this.state_ should not be null');
-  ol.DEBUG && console.assert(fillStyle || strokeStyle,
-      'fillStyle or strokeStyle should not be null');
-  var state = this.state_;
-  if (fillStyle) {
-    var fillStyleColor = fillStyle.getColor();
-    state.fillStyle = ol.colorlike.asColorLike(fillStyleColor ?
-        fillStyleColor : ol.render.canvas.defaultFillStyle);
-  } else {
-    state.fillStyle = undefined;
-  }
-  if (strokeStyle) {
-    var strokeStyleColor = strokeStyle.getColor();
-    state.strokeStyle = ol.colorlike.asColorLike(strokeStyleColor ?
-        strokeStyleColor : ol.render.canvas.defaultStrokeStyle);
-    var strokeStyleLineCap = strokeStyle.getLineCap();
-    state.lineCap = strokeStyleLineCap !== undefined ?
-        strokeStyleLineCap : ol.render.canvas.defaultLineCap;
-    var strokeStyleLineDash = strokeStyle.getLineDash();
-    state.lineDash = strokeStyleLineDash ?
-        strokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash;
-    var strokeStyleLineJoin = strokeStyle.getLineJoin();
-    state.lineJoin = strokeStyleLineJoin !== undefined ?
-        strokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
-    var strokeStyleWidth = strokeStyle.getWidth();
-    state.lineWidth = strokeStyleWidth !== undefined ?
-        strokeStyleWidth : ol.render.canvas.defaultLineWidth;
-    var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
-    state.miterLimit = strokeStyleMiterLimit !== undefined ?
-        strokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
-
-    if (state.lineWidth > this.maxLineWidth) {
-      this.maxLineWidth = state.lineWidth;
-      // invalidate the buffered max extent cache
-      this.bufferedMaxExtent_ = null;
-    }
-  } else {
-    state.strokeStyle = undefined;
-    state.lineCap = undefined;
-    state.lineDash = null;
-    state.lineJoin = undefined;
-    state.lineWidth = undefined;
-    state.miterLimit = undefined;
-  }
-};
-
-
-/**
- * @private
- * @param {ol.geom.Geometry|ol.render.Feature} geometry Geometry.
- */
-ol.render.canvas.PolygonReplay.prototype.setFillStrokeStyles_ = function(geometry) {
-  var state = this.state_;
-  var fillStyle = state.fillStyle;
-  var strokeStyle = state.strokeStyle;
-  var lineCap = state.lineCap;
-  var lineDash = state.lineDash;
-  var lineJoin = state.lineJoin;
-  var lineWidth = state.lineWidth;
-  var miterLimit = state.miterLimit;
-  if (fillStyle !== undefined && (typeof fillStyle !== 'string' || state.currentFillStyle != fillStyle)) {
-    var fillInstruction = [ol.render.canvas.Instruction.SET_FILL_STYLE, fillStyle];
-    if (typeof fillStyle !== 'string') {
-      var fillExtent = geometry.getExtent();
-      fillInstruction.push([fillExtent[0], fillExtent[3]]);
-    }
-    this.instructions.push(fillInstruction);
-    state.currentFillStyle = state.fillStyle;
-  }
-  if (strokeStyle !== undefined) {
-    ol.DEBUG && console.assert(lineCap !== undefined, 'lineCap should be defined');
-    ol.DEBUG && console.assert(lineDash, 'lineDash should not be null');
-    ol.DEBUG && console.assert(lineJoin !== undefined, 'lineJoin should be defined');
-    ol.DEBUG && console.assert(lineWidth !== undefined, 'lineWidth should be defined');
-    ol.DEBUG && console.assert(miterLimit !== undefined,
-        'miterLimit should be defined');
-    if (state.currentStrokeStyle != strokeStyle ||
-        state.currentLineCap != lineCap ||
-        state.currentLineDash != lineDash ||
-        state.currentLineJoin != lineJoin ||
-        state.currentLineWidth != lineWidth ||
-        state.currentMiterLimit != miterLimit) {
-      this.instructions.push(
-          [ol.render.canvas.Instruction.SET_STROKE_STYLE,
-           strokeStyle, lineWidth, lineCap, lineJoin, miterLimit, lineDash]);
-      state.currentStrokeStyle = strokeStyle;
-      state.currentLineCap = lineCap;
-      state.currentLineDash = lineDash;
-      state.currentLineJoin = lineJoin;
-      state.currentLineWidth = lineWidth;
-      state.currentMiterLimit = miterLimit;
-    }
-  }
-};
-
-goog.provide('ol.render.canvas.TextReplay');
-
-goog.require('ol');
-goog.require('ol.colorlike');
-goog.require('ol.render.canvas');
-goog.require('ol.render.canvas.Instruction');
-goog.require('ol.render.canvas.Replay');
-
-
-/**
- * @constructor
- * @extends {ol.render.canvas.Replay}
- * @param {number} tolerance Tolerance.
- * @param {ol.Extent} maxExtent Maximum extent.
- * @param {number} resolution Resolution.
- * @param {boolean} overlaps The replay can have overlapping geometries.
- * @struct
- */
-ol.render.canvas.TextReplay = function(tolerance, maxExtent, resolution, overlaps) {
-
-  ol.render.canvas.Replay.call(this, tolerance, maxExtent, resolution, overlaps);
-
-  /**
-   * @private
-   * @type {?ol.CanvasFillState}
-   */
-  this.replayFillState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasStrokeState}
-   */
-  this.replayStrokeState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasTextState}
-   */
-  this.replayTextState_ = null;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.text_ = '';
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textOffsetX_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textOffsetY_ = 0;
-
-  /**
-   * @private
-   * @type {boolean|undefined}
-   */
-  this.textRotateWithView_ = undefined;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textRotation_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textScale_ = 0;
-
-  /**
-   * @private
-   * @type {?ol.CanvasFillState}
-   */
-  this.textFillState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasStrokeState}
-   */
-  this.textStrokeState_ = null;
-
-  /**
-   * @private
-   * @type {?ol.CanvasTextState}
-   */
-  this.textState_ = null;
-
-};
-ol.inherits(ol.render.canvas.TextReplay, ol.render.canvas.Replay);
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.TextReplay.prototype.drawText = function(flatCoordinates, offset, end, stride, geometry, feature) {
-  if (this.text_ === '' || !this.textState_ ||
-      (!this.textFillState_ && !this.textStrokeState_)) {
-    return;
-  }
-  if (this.textFillState_) {
-    this.setReplayFillState_(this.textFillState_);
-  }
-  if (this.textStrokeState_) {
-    this.setReplayStrokeState_(this.textStrokeState_);
-  }
-  this.setReplayTextState_(this.textState_);
-  this.beginGeometry(geometry, feature);
-  var myBegin = this.coordinates.length;
-  var myEnd =
-      this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false, false);
-  var fill = !!this.textFillState_;
-  var stroke = !!this.textStrokeState_;
-  var drawTextInstruction = [
-    ol.render.canvas.Instruction.DRAW_TEXT, myBegin, myEnd, this.text_,
-    this.textOffsetX_, this.textOffsetY_, this.textRotation_, this.textScale_,
-    fill, stroke, this.textRotateWithView_];
-  this.instructions.push(drawTextInstruction);
-  this.hitDetectionInstructions.push(drawTextInstruction);
-  this.endGeometry(geometry, feature);
-};
-
-
-/**
- * @param {ol.CanvasFillState} fillState Fill state.
- * @private
- */
-ol.render.canvas.TextReplay.prototype.setReplayFillState_ = function(fillState) {
-  var replayFillState = this.replayFillState_;
-  if (replayFillState &&
-      replayFillState.fillStyle == fillState.fillStyle) {
-    return;
-  }
-  var setFillStyleInstruction =
-      [ol.render.canvas.Instruction.SET_FILL_STYLE, fillState.fillStyle];
-  this.instructions.push(setFillStyleInstruction);
-  this.hitDetectionInstructions.push(setFillStyleInstruction);
-  if (!replayFillState) {
-    this.replayFillState_ = {
-      fillStyle: fillState.fillStyle
-    };
-  } else {
-    replayFillState.fillStyle = fillState.fillStyle;
-  }
-};
-
-
-/**
- * @param {ol.CanvasStrokeState} strokeState Stroke state.
- * @private
- */
-ol.render.canvas.TextReplay.prototype.setReplayStrokeState_ = function(strokeState) {
-  var replayStrokeState = this.replayStrokeState_;
-  if (replayStrokeState &&
-      replayStrokeState.lineCap == strokeState.lineCap &&
-      replayStrokeState.lineDash == strokeState.lineDash &&
-      replayStrokeState.lineJoin == strokeState.lineJoin &&
-      replayStrokeState.lineWidth == strokeState.lineWidth &&
-      replayStrokeState.miterLimit == strokeState.miterLimit &&
-      replayStrokeState.strokeStyle == strokeState.strokeStyle) {
-    return;
-  }
-  var setStrokeStyleInstruction = [
-    ol.render.canvas.Instruction.SET_STROKE_STYLE, strokeState.strokeStyle,
-    strokeState.lineWidth, strokeState.lineCap, strokeState.lineJoin,
-    strokeState.miterLimit, strokeState.lineDash, false
-  ];
-  this.instructions.push(setStrokeStyleInstruction);
-  this.hitDetectionInstructions.push(setStrokeStyleInstruction);
-  if (!replayStrokeState) {
-    this.replayStrokeState_ = {
-      lineCap: strokeState.lineCap,
-      lineDash: strokeState.lineDash,
-      lineJoin: strokeState.lineJoin,
-      lineWidth: strokeState.lineWidth,
-      miterLimit: strokeState.miterLimit,
-      strokeStyle: strokeState.strokeStyle
-    };
-  } else {
-    replayStrokeState.lineCap = strokeState.lineCap;
-    replayStrokeState.lineDash = strokeState.lineDash;
-    replayStrokeState.lineJoin = strokeState.lineJoin;
-    replayStrokeState.lineWidth = strokeState.lineWidth;
-    replayStrokeState.miterLimit = strokeState.miterLimit;
-    replayStrokeState.strokeStyle = strokeState.strokeStyle;
-  }
-};
-
-
-/**
- * @param {ol.CanvasTextState} textState Text state.
- * @private
- */
-ol.render.canvas.TextReplay.prototype.setReplayTextState_ = function(textState) {
-  var replayTextState = this.replayTextState_;
-  if (replayTextState &&
-      replayTextState.font == textState.font &&
-      replayTextState.textAlign == textState.textAlign &&
-      replayTextState.textBaseline == textState.textBaseline) {
-    return;
-  }
-  var setTextStyleInstruction = [ol.render.canvas.Instruction.SET_TEXT_STYLE,
-    textState.font, textState.textAlign, textState.textBaseline];
-  this.instructions.push(setTextStyleInstruction);
-  this.hitDetectionInstructions.push(setTextStyleInstruction);
-  if (!replayTextState) {
-    this.replayTextState_ = {
-      font: textState.font,
-      textAlign: textState.textAlign,
-      textBaseline: textState.textBaseline
-    };
-  } else {
-    replayTextState.font = textState.font;
-    replayTextState.textAlign = textState.textAlign;
-    replayTextState.textBaseline = textState.textBaseline;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.TextReplay.prototype.setTextStyle = function(textStyle) {
-  if (!textStyle) {
-    this.text_ = '';
-  } else {
-    var textFillStyle = textStyle.getFill();
-    if (!textFillStyle) {
-      this.textFillState_ = null;
-    } else {
-      var textFillStyleColor = textFillStyle.getColor();
-      var fillStyle = ol.colorlike.asColorLike(textFillStyleColor ?
-          textFillStyleColor : ol.render.canvas.defaultFillStyle);
-      if (!this.textFillState_) {
-        this.textFillState_ = {
-          fillStyle: fillStyle
-        };
-      } else {
-        var textFillState = this.textFillState_;
-        textFillState.fillStyle = fillStyle;
-      }
-    }
-    var textStrokeStyle = textStyle.getStroke();
-    if (!textStrokeStyle) {
-      this.textStrokeState_ = null;
-    } else {
-      var textStrokeStyleColor = textStrokeStyle.getColor();
-      var textStrokeStyleLineCap = textStrokeStyle.getLineCap();
-      var textStrokeStyleLineDash = textStrokeStyle.getLineDash();
-      var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();
-      var textStrokeStyleWidth = textStrokeStyle.getWidth();
-      var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();
-      var lineCap = textStrokeStyleLineCap !== undefined ?
-          textStrokeStyleLineCap : ol.render.canvas.defaultLineCap;
-      var lineDash = textStrokeStyleLineDash ?
-          textStrokeStyleLineDash.slice() : ol.render.canvas.defaultLineDash;
-      var lineJoin = textStrokeStyleLineJoin !== undefined ?
-          textStrokeStyleLineJoin : ol.render.canvas.defaultLineJoin;
-      var lineWidth = textStrokeStyleWidth !== undefined ?
-          textStrokeStyleWidth : ol.render.canvas.defaultLineWidth;
-      var miterLimit = textStrokeStyleMiterLimit !== undefined ?
-          textStrokeStyleMiterLimit : ol.render.canvas.defaultMiterLimit;
-      var strokeStyle = ol.colorlike.asColorLike(textStrokeStyleColor ?
-          textStrokeStyleColor : ol.render.canvas.defaultStrokeStyle);
-      if (!this.textStrokeState_) {
-        this.textStrokeState_ = {
-          lineCap: lineCap,
-          lineDash: lineDash,
-          lineJoin: lineJoin,
-          lineWidth: lineWidth,
-          miterLimit: miterLimit,
-          strokeStyle: strokeStyle
-        };
-      } else {
-        var textStrokeState = this.textStrokeState_;
-        textStrokeState.lineCap = lineCap;
-        textStrokeState.lineDash = lineDash;
-        textStrokeState.lineJoin = lineJoin;
-        textStrokeState.lineWidth = lineWidth;
-        textStrokeState.miterLimit = miterLimit;
-        textStrokeState.strokeStyle = strokeStyle;
-      }
-    }
-    var textFont = textStyle.getFont();
-    var textOffsetX = textStyle.getOffsetX();
-    var textOffsetY = textStyle.getOffsetY();
-    var textRotateWithView = textStyle.getRotateWithView();
-    var textRotation = textStyle.getRotation();
-    var textScale = textStyle.getScale();
-    var textText = textStyle.getText();
-    var textTextAlign = textStyle.getTextAlign();
-    var textTextBaseline = textStyle.getTextBaseline();
-    var font = textFont !== undefined ?
-        textFont : ol.render.canvas.defaultFont;
-    var textAlign = textTextAlign !== undefined ?
-        textTextAlign : ol.render.canvas.defaultTextAlign;
-    var textBaseline = textTextBaseline !== undefined ?
-        textTextBaseline : ol.render.canvas.defaultTextBaseline;
-    if (!this.textState_) {
-      this.textState_ = {
-        font: font,
-        textAlign: textAlign,
-        textBaseline: textBaseline
-      };
-    } else {
-      var textState = this.textState_;
-      textState.font = font;
-      textState.textAlign = textAlign;
-      textState.textBaseline = textBaseline;
-    }
-    this.text_ = textText !== undefined ? textText : '';
-    this.textOffsetX_ = textOffsetX !== undefined ? textOffsetX : 0;
-    this.textOffsetY_ = textOffsetY !== undefined ? textOffsetY : 0;
-    this.textRotateWithView_ = textRotateWithView !== undefined ? textRotateWithView : false;
-    this.textRotation_ = textRotation !== undefined ? textRotation : 0;
-    this.textScale_ = textScale !== undefined ? textScale : 1;
-  }
-};
-
-goog.provide('ol.render.ReplayType');
-
-
-/**
- * @enum {string}
- */
-ol.render.ReplayType = {
-  IMAGE: 'Image',
-  LINE_STRING: 'LineString',
-  POLYGON: 'Polygon',
-  TEXT: 'Text'
-};
-
-goog.provide('ol.render.replay');
-
-goog.require('ol.render.ReplayType');
-
-
-/**
- * @const
- * @type {Array.<ol.render.ReplayType>}
- */
-ol.render.replay.ORDER = [
-  ol.render.ReplayType.POLYGON,
-  ol.render.ReplayType.LINE_STRING,
-  ol.render.ReplayType.IMAGE,
-  ol.render.ReplayType.TEXT
-];
-
-goog.provide('ol.render.canvas.ReplayGroup');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.dom');
-goog.require('ol.extent');
-goog.require('ol.geom.flat.transform');
-goog.require('ol.obj');
-goog.require('ol.render.ReplayGroup');
-goog.require('ol.render.canvas.ImageReplay');
-goog.require('ol.render.canvas.LineStringReplay');
-goog.require('ol.render.canvas.PolygonReplay');
-goog.require('ol.render.canvas.TextReplay');
-goog.require('ol.render.replay');
-goog.require('ol.transform');
-
-
-/**
- * @constructor
- * @extends {ol.render.ReplayGroup}
- * @param {number} tolerance Tolerance.
- * @param {ol.Extent} maxExtent Max extent.
- * @param {number} resolution Resolution.
- * @param {boolean} overlaps The replay group can have overlapping geometries.
- * @param {number=} opt_renderBuffer Optional rendering buffer.
- * @struct
- */
-ol.render.canvas.ReplayGroup = function(
-    tolerance, maxExtent, resolution, overlaps, opt_renderBuffer) {
-  ol.render.ReplayGroup.call(this);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.tolerance_ = tolerance;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.maxExtent_ = maxExtent;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.overlaps_ = overlaps;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.resolution_ = resolution;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.renderBuffer_ = opt_renderBuffer;
-
-  /**
-   * @private
-   * @type {!Object.<string,
-   *        Object.<ol.render.ReplayType, ol.render.canvas.Replay>>}
-   */
-  this.replaysByZIndex_ = {};
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.hitDetectionContext_ = ol.dom.createCanvasContext2D(1, 1);
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.hitDetectionTransform_ = ol.transform.create();
-
-};
-ol.inherits(ol.render.canvas.ReplayGroup, ol.render.ReplayGroup);
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.render.canvas.ReplayGroup.prototype.finish = function() {
-  var zKey;
-  for (zKey in this.replaysByZIndex_) {
-    var replays = this.replaysByZIndex_[zKey];
-    var replayKey;
-    for (replayKey in replays) {
-      replays[replayKey].finish();
-    }
-  }
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *     to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T} callback Feature
- *     callback.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.canvas.ReplayGroup.prototype.forEachFeatureAtCoordinate = function(
-    coordinate, resolution, rotation, skippedFeaturesHash, callback) {
-
-  var transform = ol.transform.compose(this.hitDetectionTransform_,
-      0.5, 0.5,
-      1 / resolution, -1 / resolution,
-      -rotation,
-      -coordinate[0], -coordinate[1]);
-
-  var context = this.hitDetectionContext_;
-  context.clearRect(0, 0, 1, 1);
-
-  /**
-   * @type {ol.Extent}
-   */
-  var hitExtent;
-  if (this.renderBuffer_ !== undefined) {
-    hitExtent = ol.extent.createEmpty();
-    ol.extent.extendCoordinate(hitExtent, coordinate);
-    ol.extent.buffer(hitExtent, resolution * this.renderBuffer_, hitExtent);
-  }
-
-  return this.replayHitDetection_(context, transform, rotation,
-      skippedFeaturesHash,
-      /**
-       * @param {ol.Feature|ol.render.Feature} feature Feature.
-       * @return {?} Callback result.
-       */
-      function(feature) {
-        var imageData = context.getImageData(0, 0, 1, 1).data;
-        if (imageData[3] > 0) {
-          var result = callback(feature);
-          if (result) {
-            return result;
-          }
-          context.clearRect(0, 0, 1, 1);
-        }
-      }, hitExtent);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.ReplayGroup.prototype.getReplay = function(zIndex, replayType) {
-  var zIndexKey = zIndex !== undefined ? zIndex.toString() : '0';
-  var replays = this.replaysByZIndex_[zIndexKey];
-  if (replays === undefined) {
-    replays = {};
-    this.replaysByZIndex_[zIndexKey] = replays;
-  }
-  var replay = replays[replayType];
-  if (replay === undefined) {
-    var Constructor = ol.render.canvas.ReplayGroup.BATCH_CONSTRUCTORS_[replayType];
-    ol.DEBUG && console.assert(Constructor !== undefined,
-        replayType +
-        ' constructor missing from ol.render.canvas.ReplayGroup.BATCH_CONSTRUCTORS_');
-    replay = new Constructor(this.tolerance_, this.maxExtent_,
-        this.resolution_, this.overlaps_);
-    replays[replayType] = replay;
-  }
-  return replay;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.canvas.ReplayGroup.prototype.isEmpty = function() {
-  return ol.obj.isEmpty(this.replaysByZIndex_);
-};
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.Transform} transform Transform.
- * @param {number} viewRotation View rotation.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *     to skip.
- * @param {Array.<ol.render.ReplayType>=} opt_replayTypes Ordered replay types
- *     to replay. Default is {@link ol.render.replay.ORDER}
- */
-ol.render.canvas.ReplayGroup.prototype.replay = function(context, pixelRatio,
-    transform, viewRotation, skippedFeaturesHash, opt_replayTypes) {
-
-  /** @type {Array.<number>} */
-  var zs = Object.keys(this.replaysByZIndex_).map(Number);
-  zs.sort(ol.array.numberSafeCompareFunction);
-
-  // setup clipping so that the parts of over-simplified geometries are not
-  // visible outside the current extent when panning
-  var maxExtent = this.maxExtent_;
-  var minX = maxExtent[0];
-  var minY = maxExtent[1];
-  var maxX = maxExtent[2];
-  var maxY = maxExtent[3];
-  var flatClipCoords = [minX, minY, minX, maxY, maxX, maxY, maxX, minY];
-  ol.geom.flat.transform.transform2D(
-      flatClipCoords, 0, 8, 2, transform, flatClipCoords);
-  context.save();
-  context.beginPath();
-  context.moveTo(flatClipCoords[0], flatClipCoords[1]);
-  context.lineTo(flatClipCoords[2], flatClipCoords[3]);
-  context.lineTo(flatClipCoords[4], flatClipCoords[5]);
-  context.lineTo(flatClipCoords[6], flatClipCoords[7]);
-  context.clip();
-
-  var replayTypes = opt_replayTypes ? opt_replayTypes : ol.render.replay.ORDER;
-  var i, ii, j, jj, replays, replay;
-  for (i = 0, ii = zs.length; i < ii; ++i) {
-    replays = this.replaysByZIndex_[zs[i].toString()];
-    for (j = 0, jj = replayTypes.length; j < jj; ++j) {
-      replay = replays[replayTypes[j]];
-      if (replay !== undefined) {
-        replay.replay(context, pixelRatio, transform, viewRotation,
-            skippedFeaturesHash);
-      }
-    }
-  }
-
-  context.restore();
-};
-
-
-/**
- * @private
- * @param {CanvasRenderingContext2D} context Context.
- * @param {ol.Transform} transform Transform.
- * @param {number} viewRotation View rotation.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *     to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T} featureCallback
- *     Feature callback.
- * @param {ol.Extent=} opt_hitExtent Only check features that intersect this
- *     extent.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
-    context, transform, viewRotation, skippedFeaturesHash,
-    featureCallback, opt_hitExtent) {
-  /** @type {Array.<number>} */
-  var zs = Object.keys(this.replaysByZIndex_).map(Number);
-  zs.sort(function(a, b) {
-    return b - a;
-  });
-
-  var i, ii, j, replays, replay, result;
-  for (i = 0, ii = zs.length; i < ii; ++i) {
-    replays = this.replaysByZIndex_[zs[i].toString()];
-    for (j = ol.render.replay.ORDER.length - 1; j >= 0; --j) {
-      replay = replays[ol.render.replay.ORDER[j]];
-      if (replay !== undefined) {
-        result = replay.replayHitDetection(context, transform, viewRotation,
-            skippedFeaturesHash, featureCallback, opt_hitExtent);
-        if (result) {
-          return result;
-        }
-      }
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @const
- * @private
- * @type {Object.<ol.render.ReplayType,
- *                function(new: ol.render.canvas.Replay, number, ol.Extent,
- *                number, boolean)>}
- */
-ol.render.canvas.ReplayGroup.BATCH_CONSTRUCTORS_ = {
-  'Image': ol.render.canvas.ImageReplay,
-  'LineString': ol.render.canvas.LineStringReplay,
-  'Polygon': ol.render.canvas.PolygonReplay,
-  'Text': ol.render.canvas.TextReplay
-};
-
-goog.provide('ol.renderer.vector');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.render.ReplayType');
-
-
-/**
- * @param {ol.Feature|ol.render.Feature} feature1 Feature 1.
- * @param {ol.Feature|ol.render.Feature} feature2 Feature 2.
- * @return {number} Order.
- */
-ol.renderer.vector.defaultOrder = function(feature1, feature2) {
-  return ol.getUid(feature1) - ol.getUid(feature2);
-};
-
-
-/**
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @return {number} Squared pixel tolerance.
- */
-ol.renderer.vector.getSquaredTolerance = function(resolution, pixelRatio) {
-  var tolerance = ol.renderer.vector.getTolerance(resolution, pixelRatio);
-  return tolerance * tolerance;
-};
-
-
-/**
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @return {number} Pixel tolerance.
- */
-ol.renderer.vector.getTolerance = function(resolution, pixelRatio) {
-  return ol.SIMPLIFY_TOLERANCE * resolution / pixelRatio;
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.geom.Circle} geometry Geometry.
- * @param {ol.style.Style} style Style.
- * @param {ol.Feature} feature Feature.
- * @private
- */
-ol.renderer.vector.renderCircleGeometry_ = function(replayGroup, geometry, style, feature) {
-  var fillStyle = style.getFill();
-  var strokeStyle = style.getStroke();
-  if (fillStyle || strokeStyle) {
-    var polygonReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.POLYGON);
-    polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
-    polygonReplay.drawCircle(geometry, feature);
-  }
-  var textStyle = style.getText();
-  if (textStyle) {
-    var textReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.TEXT);
-    textReplay.setTextStyle(textStyle);
-    textReplay.drawText(geometry.getCenter(), 0, 2, 2, geometry, feature);
-  }
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @param {ol.style.Style} style Style.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {function(this: T, ol.events.Event)} listener Listener function.
- * @param {T} thisArg Value to use as `this` when executing `listener`.
- * @return {boolean} `true` if style is loading.
- * @template T
- */
-ol.renderer.vector.renderFeature = function(
-    replayGroup, feature, style, squaredTolerance, listener, thisArg) {
-  var loading = false;
-  var imageStyle, imageState;
-  imageStyle = style.getImage();
-  if (imageStyle) {
-    imageState = imageStyle.getImageState();
-    if (imageState == ol.Image.State.LOADED ||
-        imageState == ol.Image.State.ERROR) {
-      imageStyle.unlistenImageChange(listener, thisArg);
-    } else {
-      if (imageState == ol.Image.State.IDLE) {
-        imageStyle.load();
-      }
-      imageState = imageStyle.getImageState();
-      ol.DEBUG && console.assert(imageState == ol.Image.State.LOADING,
-          'imageState should be LOADING');
-      imageStyle.listenImageChange(listener, thisArg);
-      loading = true;
-    }
-  }
-  ol.renderer.vector.renderFeature_(replayGroup, feature, style,
-      squaredTolerance);
-  return loading;
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @param {ol.style.Style} style Style.
- * @param {number} squaredTolerance Squared tolerance.
- * @private
- */
-ol.renderer.vector.renderFeature_ = function(
-    replayGroup, feature, style, squaredTolerance) {
-  var geometry = style.getGeometryFunction()(feature);
-  if (!geometry) {
-    return;
-  }
-  var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance);
-  var geometryRenderer =
-      ol.renderer.vector.GEOMETRY_RENDERERS_[simplifiedGeometry.getType()];
-  geometryRenderer(replayGroup, simplifiedGeometry, style, feature);
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.geom.GeometryCollection} geometry Geometry.
- * @param {ol.style.Style} style Style.
- * @param {ol.Feature} feature Feature.
- * @private
- */
-ol.renderer.vector.renderGeometryCollectionGeometry_ = function(replayGroup, geometry, style, feature) {
-  var geometries = geometry.getGeometriesArray();
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    var geometryRenderer =
-        ol.renderer.vector.GEOMETRY_RENDERERS_[geometries[i].getType()];
-    geometryRenderer(replayGroup, geometries[i], style, feature);
-  }
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.geom.LineString|ol.render.Feature} geometry Geometry.
- * @param {ol.style.Style} style Style.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @private
- */
-ol.renderer.vector.renderLineStringGeometry_ = function(replayGroup, geometry, style, feature) {
-  var strokeStyle = style.getStroke();
-  if (strokeStyle) {
-    var lineStringReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.LINE_STRING);
-    lineStringReplay.setFillStrokeStyle(null, strokeStyle);
-    lineStringReplay.drawLineString(geometry, feature);
-  }
-  var textStyle = style.getText();
-  if (textStyle) {
-    var textReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.TEXT);
-    textReplay.setTextStyle(textStyle);
-    textReplay.drawText(geometry.getFlatMidpoint(), 0, 2, 2, geometry, feature);
-  }
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.geom.MultiLineString|ol.render.Feature} geometry Geometry.
- * @param {ol.style.Style} style Style.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @private
- */
-ol.renderer.vector.renderMultiLineStringGeometry_ = function(replayGroup, geometry, style, feature) {
-  var strokeStyle = style.getStroke();
-  if (strokeStyle) {
-    var lineStringReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.LINE_STRING);
-    lineStringReplay.setFillStrokeStyle(null, strokeStyle);
-    lineStringReplay.drawMultiLineString(geometry, feature);
-  }
-  var textStyle = style.getText();
-  if (textStyle) {
-    var textReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.TEXT);
-    textReplay.setTextStyle(textStyle);
-    var flatMidpointCoordinates = geometry.getFlatMidpoints();
-    textReplay.drawText(flatMidpointCoordinates, 0,
-        flatMidpointCoordinates.length, 2, geometry, feature);
-  }
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.geom.MultiPolygon} geometry Geometry.
- * @param {ol.style.Style} style Style.
- * @param {ol.Feature} feature Feature.
- * @private
- */
-ol.renderer.vector.renderMultiPolygonGeometry_ = function(replayGroup, geometry, style, feature) {
-  var fillStyle = style.getFill();
-  var strokeStyle = style.getStroke();
-  if (strokeStyle || fillStyle) {
-    var polygonReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.POLYGON);
-    polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
-    polygonReplay.drawMultiPolygon(geometry, feature);
-  }
-  var textStyle = style.getText();
-  if (textStyle) {
-    var textReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.TEXT);
-    textReplay.setTextStyle(textStyle);
-    var flatInteriorPointCoordinates = geometry.getFlatInteriorPoints();
-    textReplay.drawText(flatInteriorPointCoordinates, 0,
-        flatInteriorPointCoordinates.length, 2, geometry, feature);
-  }
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.geom.Point|ol.render.Feature} geometry Geometry.
- * @param {ol.style.Style} style Style.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @private
- */
-ol.renderer.vector.renderPointGeometry_ = function(replayGroup, geometry, style, feature) {
-  var imageStyle = style.getImage();
-  if (imageStyle) {
-    if (imageStyle.getImageState() != ol.Image.State.LOADED) {
-      return;
-    }
-    var imageReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.IMAGE);
-    imageReplay.setImageStyle(imageStyle);
-    imageReplay.drawPoint(geometry, feature);
-  }
-  var textStyle = style.getText();
-  if (textStyle) {
-    var textReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.TEXT);
-    textReplay.setTextStyle(textStyle);
-    textReplay.drawText(geometry.getFlatCoordinates(), 0, 2, 2, geometry,
-        feature);
-  }
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.geom.MultiPoint|ol.render.Feature} geometry Geometry.
- * @param {ol.style.Style} style Style.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @private
- */
-ol.renderer.vector.renderMultiPointGeometry_ = function(replayGroup, geometry, style, feature) {
-  var imageStyle = style.getImage();
-  if (imageStyle) {
-    if (imageStyle.getImageState() != ol.Image.State.LOADED) {
-      return;
-    }
-    var imageReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.IMAGE);
-    imageReplay.setImageStyle(imageStyle);
-    imageReplay.drawMultiPoint(geometry, feature);
-  }
-  var textStyle = style.getText();
-  if (textStyle) {
-    var textReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.TEXT);
-    textReplay.setTextStyle(textStyle);
-    var flatCoordinates = geometry.getFlatCoordinates();
-    textReplay.drawText(flatCoordinates, 0, flatCoordinates.length,
-        geometry.getStride(), geometry, feature);
-  }
-};
-
-
-/**
- * @param {ol.render.ReplayGroup} replayGroup Replay group.
- * @param {ol.geom.Polygon|ol.render.Feature} geometry Geometry.
- * @param {ol.style.Style} style Style.
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @private
- */
-ol.renderer.vector.renderPolygonGeometry_ = function(replayGroup, geometry, style, feature) {
-  var fillStyle = style.getFill();
-  var strokeStyle = style.getStroke();
-  if (fillStyle || strokeStyle) {
-    var polygonReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.POLYGON);
-    polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
-    polygonReplay.drawPolygon(geometry, feature);
-  }
-  var textStyle = style.getText();
-  if (textStyle) {
-    var textReplay = replayGroup.getReplay(
-        style.getZIndex(), ol.render.ReplayType.TEXT);
-    textReplay.setTextStyle(textStyle);
-    textReplay.drawText(
-        geometry.getFlatInteriorPoint(), 0, 2, 2, geometry, feature);
-  }
-};
-
-
-/**
- * @const
- * @private
- * @type {Object.<ol.geom.GeometryType,
- *                function(ol.render.ReplayGroup, ol.geom.Geometry,
- *                         ol.style.Style, Object)>}
- */
-ol.renderer.vector.GEOMETRY_RENDERERS_ = {
-  'Point': ol.renderer.vector.renderPointGeometry_,
-  'LineString': ol.renderer.vector.renderLineStringGeometry_,
-  'Polygon': ol.renderer.vector.renderPolygonGeometry_,
-  'MultiPoint': ol.renderer.vector.renderMultiPointGeometry_,
-  'MultiLineString': ol.renderer.vector.renderMultiLineStringGeometry_,
-  'MultiPolygon': ol.renderer.vector.renderMultiPolygonGeometry_,
-  'GeometryCollection': ol.renderer.vector.renderGeometryCollectionGeometry_,
-  'Circle': ol.renderer.vector.renderCircleGeometry_
-};
-
-goog.provide('ol.ImageCanvas');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.ImageBase');
-
-
-/**
- * @constructor
- * @extends {ol.ImageBase}
- * @param {ol.Extent} extent Extent.
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {Array.<ol.Attribution>} attributions Attributions.
- * @param {HTMLCanvasElement} canvas Canvas.
- * @param {ol.ImageCanvasLoader=} opt_loader Optional loader function to
- *     support asynchronous canvas drawing.
- */
-ol.ImageCanvas = function(extent, resolution, pixelRatio, attributions,
-    canvas, opt_loader) {
-
-  /**
-   * Optional canvas loader function.
-   * @type {?ol.ImageCanvasLoader}
-   * @private
-   */
-  this.loader_ = opt_loader !== undefined ? opt_loader : null;
-
-  var state = opt_loader !== undefined ?
-      ol.Image.State.IDLE : ol.Image.State.LOADED;
-
-  ol.ImageBase.call(this, extent, resolution, pixelRatio, state, attributions);
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = canvas;
-
-  /**
-   * @private
-   * @type {Error}
-   */
-  this.error_ = null;
-
-};
-ol.inherits(ol.ImageCanvas, ol.ImageBase);
-
-
-/**
- * Get any error associated with asynchronous rendering.
- * @return {Error} Any error that occurred during rendering.
- */
-ol.ImageCanvas.prototype.getError = function() {
-  return this.error_;
-};
-
-
-/**
- * Handle async drawing complete.
- * @param {Error} err Any error during drawing.
- * @private
- */
-ol.ImageCanvas.prototype.handleLoad_ = function(err) {
-  if (err) {
-    this.error_ = err;
-    this.state = ol.Image.State.ERROR;
-  } else {
-    this.state = ol.Image.State.LOADED;
-  }
-  this.changed();
-};
-
-
-/**
- * Trigger drawing on canvas.
- */
-ol.ImageCanvas.prototype.load = function() {
-  if (this.state == ol.Image.State.IDLE) {
-    ol.DEBUG && console.assert(this.loader_, 'this.loader_ must be set');
-    this.state = ol.Image.State.LOADING;
-    this.changed();
-    this.loader_(this.handleLoad_.bind(this));
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.ImageCanvas.prototype.getImage = function(opt_context) {
-  return this.canvas_;
-};
-
-goog.provide('ol.reproj');
-
-goog.require('ol');
-goog.require('ol.dom');
-goog.require('ol.extent');
-goog.require('ol.math');
-goog.require('ol.proj');
-
-
-/**
- * We need to employ more sophisticated solution
- * if the web browser antialiases clipping edges on canvas.
- *
- * Currently only Chrome does not antialias the edges, but this is probably
- * going to be "fixed" in the future: http://crbug.com/424291
- *
- * @type {boolean}
- * @private
- */
-ol.reproj.browserAntialiasesClip_ = (function() {
-  // Adapted from http://stackoverflow.com/questions/4565112/javascript-how-to-find-out-if-the-user-browser-is-chrome
-  var isOpera = navigator.userAgent.indexOf('OPR') > -1;
-  var isIEedge = navigator.userAgent.indexOf('Edge') > -1;
-  return !(
-    !navigator.userAgent.match('CriOS') &&  // Not Chrome on iOS
-    'chrome' in window && // Has chrome in window
-    navigator.vendor === 'Google Inc.' && // Vendor is Google.
-    isOpera == false && // Not Opera
-    isIEedge == false // Not Edge
-  );
-})();
-
-
-/**
- * Calculates ideal resolution to use from the source in order to achieve
- * pixel mapping as close as possible to 1:1 during reprojection.
- * The resolution is calculated regardless of what resolutions
- * are actually available in the dataset (TileGrid, Image, ...).
- *
- * @param {ol.proj.Projection} sourceProj Source projection.
- * @param {ol.proj.Projection} targetProj Target projection.
- * @param {ol.Coordinate} targetCenter Target center.
- * @param {number} targetResolution Target resolution.
- * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.
- */
-ol.reproj.calculateSourceResolution = function(sourceProj, targetProj,
-    targetCenter, targetResolution) {
-
-  var sourceCenter = ol.proj.transform(targetCenter, targetProj, sourceProj);
-
-  // calculate the ideal resolution of the source data
-  var sourceResolution =
-      targetProj.getPointResolution(targetResolution, targetCenter);
-
-  var targetMetersPerUnit = targetProj.getMetersPerUnit();
-  if (targetMetersPerUnit !== undefined) {
-    sourceResolution *= targetMetersPerUnit;
-  }
-  var sourceMetersPerUnit = sourceProj.getMetersPerUnit();
-  if (sourceMetersPerUnit !== undefined) {
-    sourceResolution /= sourceMetersPerUnit;
-  }
-
-  // Based on the projection properties, the point resolution at the specified
-  // coordinates may be slightly different. We need to reverse-compensate this
-  // in order to achieve optimal results.
-
-  var compensationFactor =
-      sourceProj.getPointResolution(sourceResolution, sourceCenter) /
-      sourceResolution;
-
-  if (isFinite(compensationFactor) && compensationFactor > 0) {
-    sourceResolution /= compensationFactor;
-  }
-
-  return sourceResolution;
-};
-
-
-/**
- * Enlarge the clipping triangle point by 1 pixel to ensure the edges overlap
- * in order to mask gaps caused by antialiasing.
- *
- * @param {number} centroidX Centroid of the triangle (x coordinate in pixels).
- * @param {number} centroidY Centroid of the triangle (y coordinate in pixels).
- * @param {number} x X coordinate of the point (in pixels).
- * @param {number} y Y coordinate of the point (in pixels).
- * @return {ol.Coordinate} New point 1 px farther from the centroid.
- * @private
- */
-ol.reproj.enlargeClipPoint_ = function(centroidX, centroidY, x, y) {
-  var dX = x - centroidX, dY = y - centroidY;
-  var distance = Math.sqrt(dX * dX + dY * dY);
-  return [Math.round(x + dX / distance), Math.round(y + dY / distance)];
-};
-
-
-/**
- * Renders the source data into new canvas based on the triangulation.
- *
- * @param {number} width Width of the canvas.
- * @param {number} height Height of the canvas.
- * @param {number} pixelRatio Pixel ratio.
- * @param {number} sourceResolution Source resolution.
- * @param {ol.Extent} sourceExtent Extent of the data source.
- * @param {number} targetResolution Target resolution.
- * @param {ol.Extent} targetExtent Target extent.
- * @param {ol.reproj.Triangulation} triangulation Calculated triangulation.
- * @param {Array.<{extent: ol.Extent,
- *                 image: (HTMLCanvasElement|Image|HTMLVideoElement)}>} sources
- *             Array of sources.
- * @param {number} gutter Gutter of the sources.
- * @param {boolean=} opt_renderEdges Render reprojection edges.
- * @return {HTMLCanvasElement} Canvas with reprojected data.
- */
-ol.reproj.render = function(width, height, pixelRatio,
-    sourceResolution, sourceExtent, targetResolution, targetExtent,
-    triangulation, sources, gutter, opt_renderEdges) {
-
-  var context = ol.dom.createCanvasContext2D(Math.round(pixelRatio * width),
-                                             Math.round(pixelRatio * height));
-
-  if (sources.length === 0) {
-    return context.canvas;
-  }
-
-  context.scale(pixelRatio, pixelRatio);
-
-  var sourceDataExtent = ol.extent.createEmpty();
-  sources.forEach(function(src, i, arr) {
-    ol.extent.extend(sourceDataExtent, src.extent);
-  });
-
-  var canvasWidthInUnits = ol.extent.getWidth(sourceDataExtent);
-  var canvasHeightInUnits = ol.extent.getHeight(sourceDataExtent);
-  var stitchContext = ol.dom.createCanvasContext2D(
-      Math.round(pixelRatio * canvasWidthInUnits / sourceResolution),
-      Math.round(pixelRatio * canvasHeightInUnits / sourceResolution));
-
-  var stitchScale = pixelRatio / sourceResolution;
-
-  sources.forEach(function(src, i, arr) {
-    var xPos = src.extent[0] - sourceDataExtent[0];
-    var yPos = -(src.extent[3] - sourceDataExtent[3]);
-    var srcWidth = ol.extent.getWidth(src.extent);
-    var srcHeight = ol.extent.getHeight(src.extent);
-
-    stitchContext.drawImage(
-        src.image,
-        gutter, gutter,
-        src.image.width - 2 * gutter, src.image.height - 2 * gutter,
-        xPos * stitchScale, yPos * stitchScale,
-        srcWidth * stitchScale, srcHeight * stitchScale);
-  });
-
-  var targetTopLeft = ol.extent.getTopLeft(targetExtent);
-
-  triangulation.getTriangles().forEach(function(triangle, i, arr) {
-    /* Calculate affine transform (src -> dst)
-     * Resulting matrix can be used to transform coordinate
-     * from `sourceProjection` to destination pixels.
-     *
-     * To optimize number of context calls and increase numerical stability,
-     * we also do the following operations:
-     * trans(-topLeftExtentCorner), scale(1 / targetResolution), scale(1, -1)
-     * here before solving the linear system so [ui, vi] are pixel coordinates.
-     *
-     * Src points: xi, yi
-     * Dst points: ui, vi
-     * Affine coefficients: aij
-     *
-     * | x0 y0 1  0  0 0 |   |a00|   |u0|
-     * | x1 y1 1  0  0 0 |   |a01|   |u1|
-     * | x2 y2 1  0  0 0 | x |a02| = |u2|
-     * |  0  0 0 x0 y0 1 |   |a10|   |v0|
-     * |  0  0 0 x1 y1 1 |   |a11|   |v1|
-     * |  0  0 0 x2 y2 1 |   |a12|   |v2|
-     */
-    var source = triangle.source, target = triangle.target;
-    var x0 = source[0][0], y0 = source[0][1],
-        x1 = source[1][0], y1 = source[1][1],
-        x2 = source[2][0], y2 = source[2][1];
-    var u0 = (target[0][0] - targetTopLeft[0]) / targetResolution,
-        v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;
-    var u1 = (target[1][0] - targetTopLeft[0]) / targetResolution,
-        v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;
-    var u2 = (target[2][0] - targetTopLeft[0]) / targetResolution,
-        v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;
-
-    // Shift all the source points to improve numerical stability
-    // of all the subsequent calculations. The [x0, y0] is used here.
-    // This is also used to simplify the linear system.
-    var sourceNumericalShiftX = x0, sourceNumericalShiftY = y0;
-    x0 = 0;
-    y0 = 0;
-    x1 -= sourceNumericalShiftX;
-    y1 -= sourceNumericalShiftY;
-    x2 -= sourceNumericalShiftX;
-    y2 -= sourceNumericalShiftY;
-
-    var augmentedMatrix = [
-      [x1, y1, 0, 0, u1 - u0],
-      [x2, y2, 0, 0, u2 - u0],
-      [0, 0, x1, y1, v1 - v0],
-      [0, 0, x2, y2, v2 - v0]
-    ];
-    var affineCoefs = ol.math.solveLinearSystem(augmentedMatrix);
-    if (!affineCoefs) {
-      return;
-    }
-
-    context.save();
-    context.beginPath();
-    if (ol.reproj.browserAntialiasesClip_) {
-      var centroidX = (u0 + u1 + u2) / 3, centroidY = (v0 + v1 + v2) / 3;
-      var p0 = ol.reproj.enlargeClipPoint_(centroidX, centroidY, u0, v0);
-      var p1 = ol.reproj.enlargeClipPoint_(centroidX, centroidY, u1, v1);
-      var p2 = ol.reproj.enlargeClipPoint_(centroidX, centroidY, u2, v2);
-
-      context.moveTo(p1[0], p1[1]);
-      context.lineTo(p0[0], p0[1]);
-      context.lineTo(p2[0], p2[1]);
-    } else {
-      context.moveTo(u1, v1);
-      context.lineTo(u0, v0);
-      context.lineTo(u2, v2);
-    }
-    context.clip();
-
-    context.transform(
-        affineCoefs[0], affineCoefs[2], affineCoefs[1], affineCoefs[3], u0, v0);
-
-    context.translate(sourceDataExtent[0] - sourceNumericalShiftX,
-                      sourceDataExtent[3] - sourceNumericalShiftY);
-
-    context.scale(sourceResolution / pixelRatio,
-                  -sourceResolution / pixelRatio);
-
-    context.drawImage(stitchContext.canvas, 0, 0);
-    context.restore();
-  });
-
-  if (opt_renderEdges) {
-    context.save();
-
-    context.strokeStyle = 'black';
-    context.lineWidth = 1;
-
-    triangulation.getTriangles().forEach(function(triangle, i, arr) {
-      var target = triangle.target;
-      var u0 = (target[0][0] - targetTopLeft[0]) / targetResolution,
-          v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;
-      var u1 = (target[1][0] - targetTopLeft[0]) / targetResolution,
-          v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;
-      var u2 = (target[2][0] - targetTopLeft[0]) / targetResolution,
-          v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;
-
-      context.beginPath();
-      context.moveTo(u1, v1);
-      context.lineTo(u0, v0);
-      context.lineTo(u2, v2);
-      context.closePath();
-      context.stroke();
-    });
-
-    context.restore();
-  }
-  return context.canvas;
-};
-
-goog.provide('ol.reproj.Triangulation');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.math');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * Class containing triangulation of the given target extent.
- * Used for determining source data and the reprojection itself.
- *
- * @param {ol.proj.Projection} sourceProj Source projection.
- * @param {ol.proj.Projection} targetProj Target projection.
- * @param {ol.Extent} targetExtent Target extent to triangulate.
- * @param {ol.Extent} maxSourceExtent Maximal source extent that can be used.
- * @param {number} errorThreshold Acceptable error (in source units).
- * @constructor
- */
-ol.reproj.Triangulation = function(sourceProj, targetProj, targetExtent,
-    maxSourceExtent, errorThreshold) {
-
-  /**
-   * @type {ol.proj.Projection}
-   * @private
-   */
-  this.sourceProj_ = sourceProj;
-
-  /**
-   * @type {ol.proj.Projection}
-   * @private
-   */
-  this.targetProj_ = targetProj;
-
-  /** @type {!Object.<string, ol.Coordinate>} */
-  var transformInvCache = {};
-  var transformInv = ol.proj.getTransform(this.targetProj_, this.sourceProj_);
-
-  /**
-   * @param {ol.Coordinate} c A coordinate.
-   * @return {ol.Coordinate} Transformed coordinate.
-   * @private
-   */
-  this.transformInv_ = function(c) {
-    var key = c[0] + '/' + c[1];
-    if (!transformInvCache[key]) {
-      transformInvCache[key] = transformInv(c);
-    }
-    return transformInvCache[key];
-  };
-
-  /**
-   * @type {ol.Extent}
-   * @private
-   */
-  this.maxSourceExtent_ = maxSourceExtent;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.errorThresholdSquared_ = errorThreshold * errorThreshold;
-
-  /**
-   * @type {Array.<ol.ReprojTriangle>}
-   * @private
-   */
-  this.triangles_ = [];
-
-  /**
-   * Indicates that the triangulation crosses edge of the source projection.
-   * @type {boolean}
-   * @private
-   */
-  this.wrapsXInSource_ = false;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.canWrapXInSource_ = this.sourceProj_.canWrapX() &&
-      !!maxSourceExtent &&
-      !!this.sourceProj_.getExtent() &&
-      (ol.extent.getWidth(maxSourceExtent) ==
-       ol.extent.getWidth(this.sourceProj_.getExtent()));
-
-  /**
-   * @type {?number}
-   * @private
-   */
-  this.sourceWorldWidth_ = this.sourceProj_.getExtent() ?
-      ol.extent.getWidth(this.sourceProj_.getExtent()) : null;
-
-  /**
-   * @type {?number}
-   * @private
-   */
-  this.targetWorldWidth_ = this.targetProj_.getExtent() ?
-      ol.extent.getWidth(this.targetProj_.getExtent()) : null;
-
-  var destinationTopLeft = ol.extent.getTopLeft(targetExtent);
-  var destinationTopRight = ol.extent.getTopRight(targetExtent);
-  var destinationBottomRight = ol.extent.getBottomRight(targetExtent);
-  var destinationBottomLeft = ol.extent.getBottomLeft(targetExtent);
-  var sourceTopLeft = this.transformInv_(destinationTopLeft);
-  var sourceTopRight = this.transformInv_(destinationTopRight);
-  var sourceBottomRight = this.transformInv_(destinationBottomRight);
-  var sourceBottomLeft = this.transformInv_(destinationBottomLeft);
-
-  this.addQuad_(
-      destinationTopLeft, destinationTopRight,
-      destinationBottomRight, destinationBottomLeft,
-      sourceTopLeft, sourceTopRight, sourceBottomRight, sourceBottomLeft,
-      ol.RASTER_REPROJECTION_MAX_SUBDIVISION);
-
-  if (this.wrapsXInSource_) {
-    // Fix coordinates (ol.proj returns wrapped coordinates, "unwrap" here).
-    // This significantly simplifies the rest of the reprojection process.
-
-    ol.DEBUG && console.assert(this.sourceWorldWidth_ !== null);
-    var leftBound = Infinity;
-    this.triangles_.forEach(function(triangle, i, arr) {
-      leftBound = Math.min(leftBound,
-          triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]);
-    });
-
-    // Shift triangles to be as close to `leftBound` as possible
-    // (if the distance is more than `worldWidth / 2` it can be closer.
-    this.triangles_.forEach(function(triangle) {
-      if (Math.max(triangle.source[0][0], triangle.source[1][0],
-          triangle.source[2][0]) - leftBound > this.sourceWorldWidth_ / 2) {
-        var newTriangle = [[triangle.source[0][0], triangle.source[0][1]],
-                           [triangle.source[1][0], triangle.source[1][1]],
-                           [triangle.source[2][0], triangle.source[2][1]]];
-        if ((newTriangle[0][0] - leftBound) > this.sourceWorldWidth_ / 2) {
-          newTriangle[0][0] -= this.sourceWorldWidth_;
-        }
-        if ((newTriangle[1][0] - leftBound) > this.sourceWorldWidth_ / 2) {
-          newTriangle[1][0] -= this.sourceWorldWidth_;
-        }
-        if ((newTriangle[2][0] - leftBound) > this.sourceWorldWidth_ / 2) {
-          newTriangle[2][0] -= this.sourceWorldWidth_;
-        }
-
-        // Rarely (if the extent contains both the dateline and prime meridian)
-        // the shift can in turn break some triangles.
-        // Detect this here and don't shift in such cases.
-        var minX = Math.min(
-            newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);
-        var maxX = Math.max(
-            newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);
-        if ((maxX - minX) < this.sourceWorldWidth_ / 2) {
-          triangle.source = newTriangle;
-        }
-      }
-    }, this);
-  }
-
-  transformInvCache = {};
-};
-
-
-/**
- * Adds triangle to the triangulation.
- * @param {ol.Coordinate} a The target a coordinate.
- * @param {ol.Coordinate} b The target b coordinate.
- * @param {ol.Coordinate} c The target c coordinate.
- * @param {ol.Coordinate} aSrc The source a coordinate.
- * @param {ol.Coordinate} bSrc The source b coordinate.
- * @param {ol.Coordinate} cSrc The source c coordinate.
- * @private
- */
-ol.reproj.Triangulation.prototype.addTriangle_ = function(a, b, c,
-    aSrc, bSrc, cSrc) {
-  this.triangles_.push({
-    source: [aSrc, bSrc, cSrc],
-    target: [a, b, c]
-  });
-};
-
-
-/**
- * Adds quad (points in clock-wise order) to the triangulation
- * (and reprojects the vertices) if valid.
- * Performs quad subdivision if needed to increase precision.
- *
- * @param {ol.Coordinate} a The target a coordinate.
- * @param {ol.Coordinate} b The target b coordinate.
- * @param {ol.Coordinate} c The target c coordinate.
- * @param {ol.Coordinate} d The target d coordinate.
- * @param {ol.Coordinate} aSrc The source a coordinate.
- * @param {ol.Coordinate} bSrc The source b coordinate.
- * @param {ol.Coordinate} cSrc The source c coordinate.
- * @param {ol.Coordinate} dSrc The source d coordinate.
- * @param {number} maxSubdivision Maximal allowed subdivision of the quad.
- * @private
- */
-ol.reproj.Triangulation.prototype.addQuad_ = function(a, b, c, d,
-    aSrc, bSrc, cSrc, dSrc, maxSubdivision) {
-
-  var sourceQuadExtent = ol.extent.boundingExtent([aSrc, bSrc, cSrc, dSrc]);
-  var sourceCoverageX = this.sourceWorldWidth_ ?
-      ol.extent.getWidth(sourceQuadExtent) / this.sourceWorldWidth_ : null;
-  var sourceWorldWidth = /** @type {number} */ (this.sourceWorldWidth_);
-
-  // when the quad is wrapped in the source projection
-  // it covers most of the projection extent, but not fully
-  var wrapsX = this.sourceProj_.canWrapX() &&
-               sourceCoverageX > 0.5 && sourceCoverageX < 1;
-
-  var needsSubdivision = false;
-
-  if (maxSubdivision > 0) {
-    if (this.targetProj_.isGlobal() && this.targetWorldWidth_) {
-      var targetQuadExtent = ol.extent.boundingExtent([a, b, c, d]);
-      var targetCoverageX =
-          ol.extent.getWidth(targetQuadExtent) / this.targetWorldWidth_;
-      needsSubdivision |=
-          targetCoverageX > ol.RASTER_REPROJECTION_MAX_TRIANGLE_WIDTH;
-    }
-    if (!wrapsX && this.sourceProj_.isGlobal() && sourceCoverageX) {
-      needsSubdivision |=
-          sourceCoverageX > ol.RASTER_REPROJECTION_MAX_TRIANGLE_WIDTH;
-    }
-  }
-
-  if (!needsSubdivision && this.maxSourceExtent_) {
-    if (!ol.extent.intersects(sourceQuadExtent, this.maxSourceExtent_)) {
-      // whole quad outside source projection extent -> ignore
-      return;
-    }
-  }
-
-  if (!needsSubdivision) {
-    if (!isFinite(aSrc[0]) || !isFinite(aSrc[1]) ||
-        !isFinite(bSrc[0]) || !isFinite(bSrc[1]) ||
-        !isFinite(cSrc[0]) || !isFinite(cSrc[1]) ||
-        !isFinite(dSrc[0]) || !isFinite(dSrc[1])) {
-      if (maxSubdivision > 0) {
-        needsSubdivision = true;
-      } else {
-        return;
-      }
-    }
-  }
-
-  if (maxSubdivision > 0) {
-    if (!needsSubdivision) {
-      var center = [(a[0] + c[0]) / 2, (a[1] + c[1]) / 2];
-      var centerSrc = this.transformInv_(center);
-
-      var dx;
-      if (wrapsX) {
-        var centerSrcEstimX =
-            (ol.math.modulo(aSrc[0], sourceWorldWidth) +
-             ol.math.modulo(cSrc[0], sourceWorldWidth)) / 2;
-        dx = centerSrcEstimX -
-            ol.math.modulo(centerSrc[0], sourceWorldWidth);
-      } else {
-        dx = (aSrc[0] + cSrc[0]) / 2 - centerSrc[0];
-      }
-      var dy = (aSrc[1] + cSrc[1]) / 2 - centerSrc[1];
-      var centerSrcErrorSquared = dx * dx + dy * dy;
-      needsSubdivision = centerSrcErrorSquared > this.errorThresholdSquared_;
-    }
-    if (needsSubdivision) {
-      if (Math.abs(a[0] - c[0]) <= Math.abs(a[1] - c[1])) {
-        // split horizontally (top & bottom)
-        var bc = [(b[0] + c[0]) / 2, (b[1] + c[1]) / 2];
-        var bcSrc = this.transformInv_(bc);
-        var da = [(d[0] + a[0]) / 2, (d[1] + a[1]) / 2];
-        var daSrc = this.transformInv_(da);
-
-        this.addQuad_(
-            a, b, bc, da, aSrc, bSrc, bcSrc, daSrc, maxSubdivision - 1);
-        this.addQuad_(
-            da, bc, c, d, daSrc, bcSrc, cSrc, dSrc, maxSubdivision - 1);
-      } else {
-        // split vertically (left & right)
-        var ab = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];
-        var abSrc = this.transformInv_(ab);
-        var cd = [(c[0] + d[0]) / 2, (c[1] + d[1]) / 2];
-        var cdSrc = this.transformInv_(cd);
-
-        this.addQuad_(
-            a, ab, cd, d, aSrc, abSrc, cdSrc, dSrc, maxSubdivision - 1);
-        this.addQuad_(
-            ab, b, c, cd, abSrc, bSrc, cSrc, cdSrc, maxSubdivision - 1);
-      }
-      return;
-    }
-  }
-
-  if (wrapsX) {
-    if (!this.canWrapXInSource_) {
-      return;
-    }
-    this.wrapsXInSource_ = true;
-  }
-
-  this.addTriangle_(a, c, d, aSrc, cSrc, dSrc);
-  this.addTriangle_(a, b, c, aSrc, bSrc, cSrc);
-};
-
-
-/**
- * Calculates extent of the 'source' coordinates from all the triangles.
- *
- * @return {ol.Extent} Calculated extent.
- */
-ol.reproj.Triangulation.prototype.calculateSourceExtent = function() {
-  var extent = ol.extent.createEmpty();
-
-  this.triangles_.forEach(function(triangle, i, arr) {
-    var src = triangle.source;
-    ol.extent.extendCoordinate(extent, src[0]);
-    ol.extent.extendCoordinate(extent, src[1]);
-    ol.extent.extendCoordinate(extent, src[2]);
-  });
-
-  return extent;
-};
-
-
-/**
- * @return {Array.<ol.ReprojTriangle>} Array of the calculated triangles.
- */
-ol.reproj.Triangulation.prototype.getTriangles = function() {
-  return this.triangles_;
-};
-
-goog.provide('ol.reproj.Image');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.ImageBase');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.reproj');
-goog.require('ol.reproj.Triangulation');
-
-
-/**
- * @classdesc
- * Class encapsulating single reprojected image.
- * See {@link ol.source.Image}.
- *
- * @constructor
- * @extends {ol.ImageBase}
- * @param {ol.proj.Projection} sourceProj Source projection (of the data).
- * @param {ol.proj.Projection} targetProj Target projection.
- * @param {ol.Extent} targetExtent Target extent.
- * @param {number} targetResolution Target resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.ReprojImageFunctionType} getImageFunction
- *     Function returning source images (extent, resolution, pixelRatio).
- */
-ol.reproj.Image = function(sourceProj, targetProj,
-    targetExtent, targetResolution, pixelRatio, getImageFunction) {
-
-  /**
-   * @private
-   * @type {ol.proj.Projection}
-   */
-  this.targetProj_ = targetProj;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.maxSourceExtent_ = sourceProj.getExtent();
-  var maxTargetExtent = targetProj.getExtent();
-
-  var limitedTargetExtent = maxTargetExtent ?
-      ol.extent.getIntersection(targetExtent, maxTargetExtent) : targetExtent;
-
-  var targetCenter = ol.extent.getCenter(limitedTargetExtent);
-  var sourceResolution = ol.reproj.calculateSourceResolution(
-      sourceProj, targetProj, targetCenter, targetResolution);
-
-  var errorThresholdInPixels = ol.DEFAULT_RASTER_REPROJECTION_ERROR_THRESHOLD;
-
-  /**
-   * @private
-   * @type {!ol.reproj.Triangulation}
-   */
-  this.triangulation_ = new ol.reproj.Triangulation(
-      sourceProj, targetProj, limitedTargetExtent, this.maxSourceExtent_,
-      sourceResolution * errorThresholdInPixels);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.targetResolution_ = targetResolution;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.targetExtent_ = targetExtent;
-
-  var sourceExtent = this.triangulation_.calculateSourceExtent();
-
-  /**
-   * @private
-   * @type {ol.ImageBase}
-   */
-  this.sourceImage_ =
-      getImageFunction(sourceExtent, sourceResolution, pixelRatio);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.sourcePixelRatio_ =
-      this.sourceImage_ ? this.sourceImage_.getPixelRatio() : 1;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = null;
-
-  /**
-   * @private
-   * @type {?ol.EventsKey}
-   */
-  this.sourceListenerKey_ = null;
-
-
-  var state = ol.Image.State.LOADED;
-  var attributions = [];
-
-  if (this.sourceImage_) {
-    state = ol.Image.State.IDLE;
-    attributions = this.sourceImage_.getAttributions();
-  }
-
-  ol.ImageBase.call(this, targetExtent, targetResolution, this.sourcePixelRatio_,
-            state, attributions);
-};
-ol.inherits(ol.reproj.Image, ol.ImageBase);
-
-
-/**
- * @inheritDoc
- */
-ol.reproj.Image.prototype.disposeInternal = function() {
-  if (this.state == ol.Image.State.LOADING) {
-    this.unlistenSource_();
-  }
-  ol.ImageBase.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.reproj.Image.prototype.getImage = function(opt_context) {
-  return this.canvas_;
-};
-
-
-/**
- * @return {ol.proj.Projection} Projection.
- */
-ol.reproj.Image.prototype.getProjection = function() {
-  return this.targetProj_;
-};
-
-
-/**
- * @private
- */
-ol.reproj.Image.prototype.reproject_ = function() {
-  var sourceState = this.sourceImage_.getState();
-  if (sourceState == ol.Image.State.LOADED) {
-    var width = ol.extent.getWidth(this.targetExtent_) / this.targetResolution_;
-    var height =
-        ol.extent.getHeight(this.targetExtent_) / this.targetResolution_;
-
-    this.canvas_ = ol.reproj.render(width, height, this.sourcePixelRatio_,
-        this.sourceImage_.getResolution(), this.maxSourceExtent_,
-        this.targetResolution_, this.targetExtent_, this.triangulation_, [{
-          extent: this.sourceImage_.getExtent(),
-          image: this.sourceImage_.getImage()
-        }], 0);
-  }
-  this.state = sourceState;
-  this.changed();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.reproj.Image.prototype.load = function() {
-  if (this.state == ol.Image.State.IDLE) {
-    this.state = ol.Image.State.LOADING;
-    this.changed();
-
-    var sourceState = this.sourceImage_.getState();
-    if (sourceState == ol.Image.State.LOADED ||
-        sourceState == ol.Image.State.ERROR) {
-      this.reproject_();
-    } else {
-      this.sourceListenerKey_ = ol.events.listen(this.sourceImage_,
-          ol.events.EventType.CHANGE, function(e) {
-            var sourceState = this.sourceImage_.getState();
-            if (sourceState == ol.Image.State.LOADED ||
-                sourceState == ol.Image.State.ERROR) {
-              this.unlistenSource_();
-              this.reproject_();
-            }
-          }, this);
-      this.sourceImage_.load();
-    }
-  }
-};
-
-
-/**
- * @private
- */
-ol.reproj.Image.prototype.unlistenSource_ = function() {
-  ol.DEBUG && console.assert(this.sourceListenerKey_,
-      'this.sourceListenerKey_ should not be null');
-  ol.events.unlistenByKey(/** @type {!ol.EventsKey} */ (this.sourceListenerKey_));
-  this.sourceListenerKey_ = null;
-};
-
-goog.provide('ol.source.Source');
-
-goog.require('ol');
-goog.require('ol.Attribution');
-goog.require('ol.Object');
-goog.require('ol.proj');
-goog.require('ol.source.State');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Base class for {@link ol.layer.Layer} sources.
- *
- * A generic `change` event is triggered when the state of the source changes.
- *
- * @constructor
- * @extends {ol.Object}
- * @param {ol.SourceSourceOptions} options Source options.
- * @api stable
- */
-ol.source.Source = function(options) {
-
-  ol.Object.call(this);
-
-  /**
-   * @private
-   * @type {ol.proj.Projection}
-   */
-  this.projection_ = ol.proj.get(options.projection);
-
-  /**
-   * @private
-   * @type {Array.<ol.Attribution>}
-   */
-  this.attributions_ = ol.source.Source.toAttributionsArray_(options.attributions);
-
-  /**
-   * @private
-   * @type {string|olx.LogoOptions|undefined}
-   */
-  this.logo_ = options.logo;
-
-  /**
-   * @private
-   * @type {ol.source.State}
-   */
-  this.state_ = options.state !== undefined ?
-      options.state : ol.source.State.READY;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.wrapX_ = options.wrapX !== undefined ? options.wrapX : false;
-
-};
-ol.inherits(ol.source.Source, ol.Object);
-
-/**
- * Turns various ways of defining an attribution to an array of `ol.Attributions`.
- *
- * @param {ol.AttributionLike|undefined}
- *     attributionLike The attributions as string, array of strings,
- *     `ol.Attribution`, array of `ol.Attribution` or undefined.
- * @return {Array.<ol.Attribution>} The array of `ol.Attribution` or null if
- *     `undefined` was given.
- */
-ol.source.Source.toAttributionsArray_ = function(attributionLike) {
-  if (typeof attributionLike === 'string') {
-    return [new ol.Attribution({html: attributionLike})];
-  } else if (attributionLike instanceof ol.Attribution) {
-    return [attributionLike];
-  } else if (Array.isArray(attributionLike)) {
-    var len = attributionLike.length;
-    var attributions = new Array(len);
-    for (var i = 0; i < len; i++) {
-      var item = attributionLike[i];
-      if (typeof item === 'string') {
-        attributions[i] = new ol.Attribution({html: item});
-      } else {
-        attributions[i] = item;
-      }
-    }
-    return attributions;
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {Object.<string, boolean>} skippedFeatureUids Skipped feature uids.
- * @param {function((ol.Feature|ol.render.Feature)): T} callback Feature
- *     callback.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.source.Source.prototype.forEachFeatureAtCoordinate = ol.nullFunction;
-
-
-/**
- * Get the attributions of the source.
- * @return {Array.<ol.Attribution>} Attributions.
- * @api stable
- */
-ol.source.Source.prototype.getAttributions = function() {
-  return this.attributions_;
-};
-
-
-/**
- * Get the logo of the source.
- * @return {string|olx.LogoOptions|undefined} Logo.
- * @api stable
- */
-ol.source.Source.prototype.getLogo = function() {
-  return this.logo_;
-};
-
-
-/**
- * Get the projection of the source.
- * @return {ol.proj.Projection} Projection.
- * @api
- */
-ol.source.Source.prototype.getProjection = function() {
-  return this.projection_;
-};
-
-
-/**
- * @abstract
- * @return {Array.<number>|undefined} Resolutions.
- */
-ol.source.Source.prototype.getResolutions = function() {};
-
-
-/**
- * Get the state of the source, see {@link ol.source.State} for possible states.
- * @return {ol.source.State} State.
- * @api
- */
-ol.source.Source.prototype.getState = function() {
-  return this.state_;
-};
-
-
-/**
- * @return {boolean|undefined} Wrap X.
- */
-ol.source.Source.prototype.getWrapX = function() {
-  return this.wrapX_;
-};
-
-
-/**
- * Refreshes the source and finally dispatches a 'change' event.
- * @api
- */
-ol.source.Source.prototype.refresh = function() {
-  this.changed();
-};
-
-
-/**
- * Set the attributions of the source.
- * @param {ol.AttributionLike|undefined} attributions Attributions.
- *     Can be passed as `string`, `Array<string>`, `{@link ol.Attribution}`,
- *     `Array<{@link ol.Attribution}>` or `undefined`.
- * @api
- */
-ol.source.Source.prototype.setAttributions = function(attributions) {
-  this.attributions_ = ol.source.Source.toAttributionsArray_(attributions);
-  this.changed();
-};
-
-
-/**
- * Set the logo of the source.
- * @param {string|olx.LogoOptions|undefined} logo Logo.
- */
-ol.source.Source.prototype.setLogo = function(logo) {
-  this.logo_ = logo;
-};
-
-
-/**
- * Set the state of the source.
- * @param {ol.source.State} state State.
- * @protected
- */
-ol.source.Source.prototype.setState = function(state) {
-  this.state_ = state;
-  this.changed();
-};
-
-goog.provide('ol.source.Image');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.array');
-goog.require('ol.events.Event');
-goog.require('ol.extent');
-goog.require('ol.proj');
-goog.require('ol.reproj.Image');
-goog.require('ol.source.Source');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Base class for sources providing a single image.
- *
- * @constructor
- * @extends {ol.source.Source}
- * @param {ol.SourceImageOptions} options Single image source options.
- * @api
- */
-ol.source.Image = function(options) {
-
-  ol.source.Source.call(this, {
-    attributions: options.attributions,
-    extent: options.extent,
-    logo: options.logo,
-    projection: options.projection,
-    state: options.state
-  });
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.resolutions_ = options.resolutions !== undefined ?
-      options.resolutions : null;
-  ol.DEBUG && console.assert(!this.resolutions_ ||
-      ol.array.isSorted(this.resolutions_,
-          function(a, b) {
-            return b - a;
-          }, true), 'resolutions must be null or sorted in descending order');
-
-
-  /**
-   * @private
-   * @type {ol.reproj.Image}
-   */
-  this.reprojectedImage_ = null;
-
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.reprojectedRevision_ = 0;
-
-};
-ol.inherits(ol.source.Image, ol.source.Source);
-
-
-/**
- * @return {Array.<number>} Resolutions.
- */
-ol.source.Image.prototype.getResolutions = function() {
-  return this.resolutions_;
-};
-
-
-/**
- * @protected
- * @param {number} resolution Resolution.
- * @return {number} Resolution.
- */
-ol.source.Image.prototype.findNearestResolution = function(resolution) {
-  if (this.resolutions_) {
-    var idx = ol.array.linearFindNearest(this.resolutions_, resolution, 0);
-    resolution = this.resolutions_[idx];
-  }
-  return resolution;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @return {ol.ImageBase} Single image.
- */
-ol.source.Image.prototype.getImage = function(extent, resolution, pixelRatio, projection) {
-  var sourceProjection = this.getProjection();
-  if (!ol.ENABLE_RASTER_REPROJECTION ||
-      !sourceProjection ||
-      !projection ||
-      ol.proj.equivalent(sourceProjection, projection)) {
-    if (sourceProjection) {
-      projection = sourceProjection;
-    }
-    return this.getImageInternal(extent, resolution, pixelRatio, projection);
-  } else {
-    if (this.reprojectedImage_) {
-      if (this.reprojectedRevision_ == this.getRevision() &&
-          ol.proj.equivalent(
-              this.reprojectedImage_.getProjection(), projection) &&
-          this.reprojectedImage_.getResolution() == resolution &&
-          this.reprojectedImage_.getPixelRatio() == pixelRatio &&
-          ol.extent.equals(this.reprojectedImage_.getExtent(), extent)) {
-        return this.reprojectedImage_;
-      }
-      this.reprojectedImage_.dispose();
-      this.reprojectedImage_ = null;
-    }
-
-    this.reprojectedImage_ = new ol.reproj.Image(
-        sourceProjection, projection, extent, resolution, pixelRatio,
-        function(extent, resolution, pixelRatio) {
-          return this.getImageInternal(extent, resolution,
-              pixelRatio, sourceProjection);
-        }.bind(this));
-    this.reprojectedRevision_ = this.getRevision();
-
-    return this.reprojectedImage_;
-  }
-};
-
-
-/**
- * @abstract
- * @param {ol.Extent} extent Extent.
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @return {ol.ImageBase} Single image.
- * @protected
- */
-ol.source.Image.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {};
-
-
-/**
- * Handle image change events.
- * @param {ol.events.Event} event Event.
- * @protected
- */
-ol.source.Image.prototype.handleImageChange = function(event) {
-  var image = /** @type {ol.Image} */ (event.target);
-  switch (image.getState()) {
-    case ol.Image.State.LOADING:
-      this.dispatchEvent(
-          new ol.source.Image.Event(ol.source.Image.EventType.IMAGELOADSTART,
-              image));
-      break;
-    case ol.Image.State.LOADED:
-      this.dispatchEvent(
-          new ol.source.Image.Event(ol.source.Image.EventType.IMAGELOADEND,
-              image));
-      break;
-    case ol.Image.State.ERROR:
-      this.dispatchEvent(
-          new ol.source.Image.Event(ol.source.Image.EventType.IMAGELOADERROR,
-              image));
-      break;
-    default:
-      // pass
-  }
-};
-
-
-/**
- * Default image load function for image sources that use ol.Image image
- * instances.
- * @param {ol.Image} image Image.
- * @param {string} src Source.
- */
-ol.source.Image.defaultImageLoadFunction = function(image, src) {
-  image.getImage().src = src;
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.source.Image} instances are instances of this
- * type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.source.ImageEvent}
- * @param {string} type Type.
- * @param {ol.Image} image The image.
- */
-ol.source.Image.Event = function(type, image) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The image related to the event.
-   * @type {ol.Image}
-   * @api
-   */
-  this.image = image;
-
-};
-ol.inherits(ol.source.Image.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.source.Image.EventType = {
-
-  /**
-   * Triggered when an image starts loading.
-   * @event ol.source.Image.Event#imageloadstart
-   * @api
-   */
-  IMAGELOADSTART: 'imageloadstart',
-
-  /**
-   * Triggered when an image finishes loading.
-   * @event ol.source.Image.Event#imageloadend
-   * @api
-   */
-  IMAGELOADEND: 'imageloadend',
-
-  /**
-   * Triggered if image loading results in an error.
-   * @event ol.source.Image.Event#imageloaderror
-   * @api
-   */
-  IMAGELOADERROR: 'imageloaderror'
-
-};
-
-goog.provide('ol.source.ImageCanvas');
-
-goog.require('ol');
-goog.require('ol.ImageCanvas');
-goog.require('ol.extent');
-goog.require('ol.source.Image');
-
-
-/**
- * @classdesc
- * Base class for image sources where a canvas element is the image.
- *
- * @constructor
- * @extends {ol.source.Image}
- * @param {olx.source.ImageCanvasOptions} options Constructor options.
- * @api
- */
-ol.source.ImageCanvas = function(options) {
-
-  ol.source.Image.call(this, {
-    attributions: options.attributions,
-    logo: options.logo,
-    projection: options.projection,
-    resolutions: options.resolutions,
-    state: options.state
-  });
-
-  /**
-   * @private
-   * @type {ol.CanvasFunctionType}
-   */
-  this.canvasFunction_ = options.canvasFunction;
-
-  /**
-   * @private
-   * @type {ol.ImageCanvas}
-   */
-  this.canvas_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedRevision_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.ratio_ = options.ratio !== undefined ?
-      options.ratio : 1.5;
-
-};
-ol.inherits(ol.source.ImageCanvas, ol.source.Image);
-
-
-/**
- * @inheritDoc
- */
-ol.source.ImageCanvas.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {
-  resolution = this.findNearestResolution(resolution);
-
-  var canvas = this.canvas_;
-  if (canvas &&
-      this.renderedRevision_ == this.getRevision() &&
-      canvas.getResolution() == resolution &&
-      canvas.getPixelRatio() == pixelRatio &&
-      ol.extent.containsExtent(canvas.getExtent(), extent)) {
-    return canvas;
-  }
-
-  extent = extent.slice();
-  ol.extent.scaleFromCenter(extent, this.ratio_);
-  var width = ol.extent.getWidth(extent) / resolution;
-  var height = ol.extent.getHeight(extent) / resolution;
-  var size = [width * pixelRatio, height * pixelRatio];
-
-  var canvasElement = this.canvasFunction_(
-      extent, resolution, pixelRatio, size, projection);
-  if (canvasElement) {
-    canvas = new ol.ImageCanvas(extent, resolution, pixelRatio,
-        this.getAttributions(), canvasElement);
-  }
-  this.canvas_ = canvas;
-  this.renderedRevision_ = this.getRevision();
-
-  return canvas;
-};
-
-goog.provide('ol.source.ImageVector');
-
-goog.require('ol');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.render.canvas.ReplayGroup');
-goog.require('ol.renderer.vector');
-goog.require('ol.source.ImageCanvas');
-goog.require('ol.style.Style');
-goog.require('ol.transform');
-
-
-/**
- * @classdesc
- * An image source whose images are canvas elements into which vector features
- * read from a vector source (`ol.source.Vector`) are drawn. An
- * `ol.source.ImageVector` object is to be used as the `source` of an image
- * layer (`ol.layer.Image`). Image layers are rotated, scaled, and translated,
- * as opposed to being re-rendered, during animations and interactions. So, like
- * any other image layer, an image layer configured with an
- * `ol.source.ImageVector` will exhibit this behaviour. This is in contrast to a
- * vector layer, where vector features are re-drawn during animations and
- * interactions.
- *
- * @constructor
- * @extends {ol.source.ImageCanvas}
- * @param {olx.source.ImageVectorOptions} options Options.
- * @api
- */
-ol.source.ImageVector = function(options) {
-
-  /**
-   * @private
-   * @type {ol.source.Vector}
-   */
-  this.source_ = options.source;
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.transform_ = ol.transform.create();
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.canvasContext_ = ol.dom.createCanvasContext2D();
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.canvasSize_ = [0, 0];
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderBuffer_ = options.renderBuffer == undefined ? 100 : options.renderBuffer;
-
-  /**
-   * @private
-   * @type {ol.render.canvas.ReplayGroup}
-   */
-  this.replayGroup_ = null;
-
-  ol.source.ImageCanvas.call(this, {
-    attributions: options.attributions,
-    canvasFunction: this.canvasFunctionInternal_.bind(this),
-    logo: options.logo,
-    projection: options.projection,
-    ratio: options.ratio,
-    resolutions: options.resolutions,
-    state: this.source_.getState()
-  });
-
-  /**
-   * User provided style.
-   * @type {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction}
-   * @private
-   */
-  this.style_ = null;
-
-  /**
-   * Style function for use within the library.
-   * @type {ol.StyleFunction|undefined}
-   * @private
-   */
-  this.styleFunction_ = undefined;
-
-  this.setStyle(options.style);
-
-  ol.events.listen(this.source_, ol.events.EventType.CHANGE,
-      this.handleSourceChange_, this);
-
-};
-ol.inherits(ol.source.ImageVector, ol.source.ImageCanvas);
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.Size} size Size.
- * @param {ol.proj.Projection} projection Projection;
- * @return {HTMLCanvasElement} Canvas element.
- * @private
- */
-ol.source.ImageVector.prototype.canvasFunctionInternal_ = function(extent, resolution, pixelRatio, size, projection) {
-
-  var replayGroup = new ol.render.canvas.ReplayGroup(
-      ol.renderer.vector.getTolerance(resolution, pixelRatio), extent,
-      resolution, this.source_.getOverlaps(), this.renderBuffer_);
-
-  this.source_.loadFeatures(extent, resolution, projection);
-
-  var loading = false;
-  this.source_.forEachFeatureInExtent(extent,
-      /**
-       * @param {ol.Feature} feature Feature.
-       */
-      function(feature) {
-        loading = loading ||
-            this.renderFeature_(feature, resolution, pixelRatio, replayGroup);
-      }, this);
-  replayGroup.finish();
-
-  if (loading) {
-    return null;
-  }
-
-  if (this.canvasSize_[0] != size[0] || this.canvasSize_[1] != size[1]) {
-    this.canvasContext_.canvas.width = size[0];
-    this.canvasContext_.canvas.height = size[1];
-    this.canvasSize_[0] = size[0];
-    this.canvasSize_[1] = size[1];
-  } else {
-    this.canvasContext_.clearRect(0, 0, size[0], size[1]);
-  }
-
-  var transform = this.getTransform_(ol.extent.getCenter(extent),
-      resolution, pixelRatio, size);
-  replayGroup.replay(this.canvasContext_, pixelRatio, transform, 0, {});
-
-  this.replayGroup_ = replayGroup;
-
-  return this.canvasContext_.canvas;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.ImageVector.prototype.forEachFeatureAtCoordinate = function(
-    coordinate, resolution, rotation, skippedFeatureUids, callback) {
-  if (!this.replayGroup_) {
-    return undefined;
-  } else {
-    /** @type {Object.<string, boolean>} */
-    var features = {};
-    return this.replayGroup_.forEachFeatureAtCoordinate(
-        coordinate, resolution, 0, skippedFeatureUids,
-        /**
-         * @param {ol.Feature|ol.render.Feature} feature Feature.
-         * @return {?} Callback result.
-         */
-        function(feature) {
-          var key = ol.getUid(feature).toString();
-          if (!(key in features)) {
-            features[key] = true;
-            return callback(feature);
-          }
-        });
-  }
-};
-
-
-/**
- * Get a reference to the wrapped source.
- * @return {ol.source.Vector} Source.
- * @api
- */
-ol.source.ImageVector.prototype.getSource = function() {
-  return this.source_;
-};
-
-
-/**
- * Get the style for features.  This returns whatever was passed to the `style`
- * option at construction or to the `setStyle` method.
- * @return {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction}
- *     Layer style.
- * @api stable
- */
-ol.source.ImageVector.prototype.getStyle = function() {
-  return this.style_;
-};
-
-
-/**
- * Get the style function.
- * @return {ol.StyleFunction|undefined} Layer style function.
- * @api stable
- */
-ol.source.ImageVector.prototype.getStyleFunction = function() {
-  return this.styleFunction_;
-};
-
-
-/**
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.Size} size Size.
- * @return {!ol.Transform} Transform.
- * @private
- */
-ol.source.ImageVector.prototype.getTransform_ = function(center, resolution, pixelRatio, size) {
-  var dx1 = size[0] / 2;
-  var dy1 = size[1] / 2;
-  var sx = pixelRatio / resolution;
-  var sy = -sx;
-  var dx2 = -center[0];
-  var dy2 = -center[1];
-
-  return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, 0, dx2, dy2);
-};
-
-
-/**
- * Handle changes in image style state.
- * @param {ol.events.Event} event Image style change event.
- * @private
- */
-ol.source.ImageVector.prototype.handleImageChange_ = function(event) {
-  this.changed();
-};
-
-
-/**
- * @private
- */
-ol.source.ImageVector.prototype.handleSourceChange_ = function() {
-  // setState will trigger a CHANGE event, so we always rely
-  // change events by calling setState.
-  this.setState(this.source_.getState());
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group.
- * @return {boolean} `true` if an image is loading.
- * @private
- */
-ol.source.ImageVector.prototype.renderFeature_ = function(feature, resolution, pixelRatio, replayGroup) {
-  var styles;
-  var styleFunction = feature.getStyleFunction();
-  if (styleFunction) {
-    styles = styleFunction.call(feature, resolution);
-  } else if (this.styleFunction_) {
-    styles = this.styleFunction_(feature, resolution);
-  }
-  if (!styles) {
-    return false;
-  }
-  var i, ii, loading = false;
-  if (!Array.isArray(styles)) {
-    styles = [styles];
-  }
-  for (i = 0, ii = styles.length; i < ii; ++i) {
-    loading = ol.renderer.vector.renderFeature(
-        replayGroup, feature, styles[i],
-        ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
-        this.handleImageChange_, this) || loading;
-  }
-  return loading;
-};
-
-
-/**
- * Set the style for features.  This can be a single style object, an array
- * of styles, or a function that takes a feature and resolution and returns
- * an array of styles. If it is `undefined` the default style is used. If
- * it is `null` the layer has no style (a `null` style), so only features
- * that have their own styles will be rendered in the layer. See
- * {@link ol.style} for information on the default style.
- * @param {ol.style.Style|Array.<ol.style.Style>|ol.StyleFunction|undefined}
- *     style Layer style.
- * @api stable
- */
-ol.source.ImageVector.prototype.setStyle = function(style) {
-  this.style_ = style !== undefined ? style : ol.style.Style.defaultFunction;
-  this.styleFunction_ = !style ?
-      undefined : ol.style.Style.createFunction(this.style_);
-  this.changed();
-};
-
-goog.provide('ol.renderer.canvas.ImageLayer');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.dom');
-goog.require('ol.extent');
-goog.require('ol.functions');
-goog.require('ol.proj');
-goog.require('ol.renderer.canvas.Layer');
-goog.require('ol.source.ImageVector');
-goog.require('ol.transform');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.canvas.Layer}
- * @param {ol.layer.Image} imageLayer Single image layer.
- */
-ol.renderer.canvas.ImageLayer = function(imageLayer) {
-
-  ol.renderer.canvas.Layer.call(this, imageLayer);
-
-  /**
-   * @private
-   * @type {?ol.ImageBase}
-   */
-  this.image_ = null;
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.imageTransform_ = ol.transform.create();
-
-  /**
-   * @private
-   * @type {?ol.Transform}
-   */
-  this.imageTransformInv_ = null;
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.hitCanvasContext_ = null;
-
-};
-ol.inherits(ol.renderer.canvas.ImageLayer, ol.renderer.canvas.Layer);
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.ImageLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, callback, thisArg) {
-  var layer = this.getLayer();
-  var source = layer.getSource();
-  var resolution = frameState.viewState.resolution;
-  var rotation = frameState.viewState.rotation;
-  var skippedFeatureUids = frameState.skippedFeatureUids;
-  return source.forEachFeatureAtCoordinate(
-      coordinate, resolution, rotation, skippedFeatureUids,
-      /**
-       * @param {ol.Feature|ol.render.Feature} feature Feature.
-       * @return {?} Callback result.
-       */
-      function(feature) {
-        return callback.call(thisArg, feature, layer);
-      });
-};
-
-
-/**
- * @param {ol.Pixel} pixel Pixel.
- * @param {olx.FrameState} frameState FrameState.
- * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer
- *     callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @return {T|undefined} Callback result.
- * @template S,T,U
- */
-ol.renderer.canvas.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
-  if (!this.getImage()) {
-    return undefined;
-  }
-
-  if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
-    // for ImageVector sources use the original hit-detection logic,
-    // so that for example also transparent polygons are detected
-    var coordinate = ol.transform.apply(
-        frameState.pixelToCoordinateTransform, pixel.slice());
-    var hasFeature = this.forEachFeatureAtCoordinate(
-        coordinate, frameState, ol.functions.TRUE, this);
-
-    if (hasFeature) {
-      return callback.call(thisArg, this.getLayer(), null);
-    } else {
-      return undefined;
-    }
-  } else {
-    // for all other image sources directly check the image
-    if (!this.imageTransformInv_) {
-      this.imageTransformInv_ = ol.transform.invert(this.imageTransform_.slice());
-    }
-
-    var pixelOnCanvas =
-        this.getPixelOnCanvas(pixel, this.imageTransformInv_);
-
-    if (!this.hitCanvasContext_) {
-      this.hitCanvasContext_ = ol.dom.createCanvasContext2D(1, 1);
-    }
-
-    this.hitCanvasContext_.clearRect(0, 0, 1, 1);
-    this.hitCanvasContext_.drawImage(
-        this.getImage(), pixelOnCanvas[0], pixelOnCanvas[1], 1, 1, 0, 0, 1, 1);
-
-    var imageData = this.hitCanvasContext_.getImageData(0, 0, 1, 1).data;
-    if (imageData[3] > 0) {
-      return callback.call(thisArg, this.getLayer(),  imageData);
-    } else {
-      return undefined;
-    }
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.ImageLayer.prototype.getImage = function() {
-  return !this.image_ ? null : this.image_.getImage();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.ImageLayer.prototype.getImageTransform = function() {
-  return this.imageTransform_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, layerState) {
-
-  var pixelRatio = frameState.pixelRatio;
-  var viewState = frameState.viewState;
-  var viewCenter = viewState.center;
-  var viewResolution = viewState.resolution;
-
-  var image;
-  var imageLayer = /** @type {ol.layer.Image} */ (this.getLayer());
-  var imageSource = imageLayer.getSource();
-
-  var hints = frameState.viewHints;
-
-  var renderedExtent = frameState.extent;
-  if (layerState.extent !== undefined) {
-    renderedExtent = ol.extent.getIntersection(
-        renderedExtent, layerState.extent);
-  }
-
-  if (!hints[ol.View.Hint.ANIMATING] && !hints[ol.View.Hint.INTERACTING] &&
-      !ol.extent.isEmpty(renderedExtent)) {
-    var projection = viewState.projection;
-    if (!ol.ENABLE_RASTER_REPROJECTION) {
-      var sourceProjection = imageSource.getProjection();
-      if (sourceProjection) {
-        ol.DEBUG && console.assert(ol.proj.equivalent(projection, sourceProjection),
-            'projection and sourceProjection are equivalent');
-        projection = sourceProjection;
-      }
-    }
-    image = imageSource.getImage(
-        renderedExtent, viewResolution, pixelRatio, projection);
-    if (image) {
-      var loaded = this.loadImage(image);
-      if (loaded) {
-        this.image_ = image;
-      }
-    }
-  }
-
-  if (this.image_) {
-    image = this.image_;
-    var imageExtent = image.getExtent();
-    var imageResolution = image.getResolution();
-    var imagePixelRatio = image.getPixelRatio();
-    var scale = pixelRatio * imageResolution /
-        (viewResolution * imagePixelRatio);
-    var transform = ol.transform.reset(this.imageTransform_);
-    ol.transform.translate(transform,
-        pixelRatio * frameState.size[0] / 2,
-        pixelRatio * frameState.size[1] / 2);
-    ol.transform.scale(transform, scale, scale);
-    ol.transform.translate(transform,
-        imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution,
-        imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution);
-    this.imageTransformInv_ = null;
-    this.updateAttributions(frameState.attributions, image.getAttributions());
-    this.updateLogos(frameState, imageSource);
-  }
-
-  return !!this.image_;
-};
-
-// FIXME find correct globalCompositeOperation
-
-goog.provide('ol.renderer.canvas.TileLayer');
-
-goog.require('ol');
-goog.require('ol.transform');
-goog.require('ol.TileRange');
-goog.require('ol.Tile');
-goog.require('ol.array');
-goog.require('ol.dom');
-goog.require('ol.extent');
-goog.require('ol.render.canvas');
-goog.require('ol.render.Event');
-goog.require('ol.renderer.canvas.Layer');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.canvas.Layer}
- * @param {ol.layer.Tile|ol.layer.VectorTile} tileLayer Tile layer.
- */
-ol.renderer.canvas.TileLayer = function(tileLayer) {
-
-  ol.renderer.canvas.Layer.call(this, tileLayer);
-
-  /**
-   * @protected
-   * @type {CanvasRenderingContext2D}
-   */
-  this.context = ol.dom.createCanvasContext2D();
-
-  /**
-   * @protected
-   * @type {!Array.<ol.Tile|undefined>}
-   */
-  this.renderedTiles = [];
-
-  /**
-   * @protected
-   * @type {ol.Extent}
-   */
-  this.tmpExtent = ol.extent.createEmpty();
-
-  /**
-   * @private
-   * @type {ol.TileCoord}
-   */
-  this.tmpTileCoord_ = [0, 0, 0];
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.imageTransform_ = ol.transform.create();
-
-  /**
-   * @protected
-   * @type {number}
-   */
-  this.zDirection = 0;
-
-};
-ol.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.Layer);
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.TileLayer.prototype.composeFrame = function(
-    frameState, layerState, context) {
-  var transform = this.getTransform(frameState, 0);
-  this.dispatchPreComposeEvent(context, frameState, transform);
-  this.renderTileImages(context, frameState, layerState);
-  this.dispatchPostComposeEvent(context, frameState, transform);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.TileLayer.prototype.prepareFrame = function(
-    frameState, layerState) {
-
-  var pixelRatio = frameState.pixelRatio;
-  var viewState = frameState.viewState;
-  var projection = viewState.projection;
-
-  var tileLayer = this.getLayer();
-  var tileSource = /** @type {ol.source.Tile} */ (tileLayer.getSource());
-  var tileGrid = tileSource.getTileGridForProjection(projection);
-  var z = tileGrid.getZForResolution(viewState.resolution, this.zDirection);
-  var tileResolution = tileGrid.getResolution(z);
-  var extent = frameState.extent;
-
-  if (layerState.extent !== undefined) {
-    extent = ol.extent.getIntersection(extent, layerState.extent);
-  }
-  if (ol.extent.isEmpty(extent)) {
-    // Return false to prevent the rendering of the layer.
-    return false;
-  }
-
-  var tileRange = tileGrid.getTileRangeForExtentAndResolution(
-      extent, tileResolution);
-
-  /**
-   * @type {Object.<number, Object.<string, ol.Tile>>}
-   */
-  var tilesToDrawByZ = {};
-  tilesToDrawByZ[z] = {};
-
-  var findLoadedTiles = this.createLoadedTileFinder(
-      tileSource, projection, tilesToDrawByZ);
-
-  var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
-
-  var tmpExtent = this.tmpExtent;
-  var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
-  var childTileRange, fullyLoaded, tile, x, y;
-  var drawableTile = (
-      /**
-       * @param {!ol.Tile} tile Tile.
-       * @return {boolean} Tile is selected.
-       */
-      function(tile) {
-        var tileState = tile.getState();
-        return tileState == ol.Tile.State.LOADED ||
-            tileState == ol.Tile.State.EMPTY ||
-            tileState == ol.Tile.State.ERROR && !useInterimTilesOnError;
-      });
-  for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
-    for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
-      tile = tileSource.getTile(z, x, y, pixelRatio, projection);
-      if (!drawableTile(tile)) {
-        tile = tile.getInterimTile();
-      }
-      if (drawableTile(tile)) {
-        tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
-        continue;
-      }
-      fullyLoaded = tileGrid.forEachTileCoordParentTileRange(
-          tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);
-      if (!fullyLoaded) {
-        childTileRange = tileGrid.getTileCoordChildTileRange(
-            tile.tileCoord, tmpTileRange, tmpExtent);
-        if (childTileRange) {
-          findLoadedTiles(z + 1, childTileRange);
-        }
-      }
-
-    }
-  }
-
-  /** @type {Array.<number>} */
-  var zs = Object.keys(tilesToDrawByZ).map(Number);
-  zs.sort(ol.array.numberSafeCompareFunction);
-  var renderables = this.renderedTiles;
-  renderables.length = 0;
-  var i, ii, currentZ, tileCoordKey, tilesToDraw;
-  for (i = 0, ii = zs.length; i < ii; ++i) {
-    currentZ = zs[i];
-    tilesToDraw = tilesToDrawByZ[currentZ];
-    for (tileCoordKey in tilesToDraw) {
-      tile = tilesToDraw[tileCoordKey];
-      if (tile.getState() == ol.Tile.State.LOADED) {
-        renderables.push(tile);
-      }
-    }
-  }
-
-  this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
-  this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio,
-      projection, extent, z, tileLayer.getPreload());
-  this.scheduleExpireCache(frameState, tileSource);
-  this.updateLogos(frameState, tileSource);
-
-  return true;
-};
-
-
-/**
- * @param {ol.Pixel} pixel Pixel.
- * @param {olx.FrameState} frameState FrameState.
- * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer
- *     callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @return {T|undefined} Callback result.
- * @template S,T,U
- */
-ol.renderer.canvas.TileLayer.prototype.forEachLayerAtPixel = function(
-    pixel, frameState, callback, thisArg) {
-  var canvas = this.context.canvas;
-  var size = frameState.size;
-  var pixelRatio = frameState.pixelRatio;
-  canvas.width = size[0] * pixelRatio;
-  canvas.height = size[1] * pixelRatio;
-  this.composeFrame(frameState, this.getLayer().getLayerState(), this.context);
-
-  var imageData = this.context.getImageData(
-      pixel[0], pixel[1], 1, 1).data;
-
-  if (imageData[3] > 0) {
-    return callback.call(thisArg, this.getLayer(),  imageData);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.LayerState} layerState Layer state.
- * @protected
- */
-ol.renderer.canvas.TileLayer.prototype.renderTileImages = function(context, frameState, layerState) {
-  var tilesToDraw = this.renderedTiles;
-  if (tilesToDraw.length === 0) {
-    return;
-  }
-
-  var pixelRatio = frameState.pixelRatio;
-  var viewState = frameState.viewState;
-  var center = viewState.center;
-  var projection = viewState.projection;
-  var resolution = viewState.resolution;
-  var rotation = viewState.rotation;
-  var size = frameState.size;
-  var offsetX = Math.round(pixelRatio * size[0] / 2);
-  var offsetY = Math.round(pixelRatio * size[1] / 2);
-  var pixelScale = pixelRatio / resolution;
-  var layer = this.getLayer();
-  var source = /** @type {ol.source.Tile} */ (layer.getSource());
-  var tileGutter = source.getTilePixelRatio(pixelRatio) * source.getGutter(projection);
-  var tileGrid = source.getTileGridForProjection(projection);
-
-  var hasRenderListeners = layer.hasListener(ol.render.Event.Type.RENDER);
-  var renderContext = context;
-  var drawScale = 1;
-  var drawOffsetX, drawOffsetY, drawSize;
-  if (rotation || hasRenderListeners) {
-    renderContext = this.context;
-    var renderCanvas = renderContext.canvas;
-    drawScale = source.getTilePixelRatio(pixelRatio) / pixelRatio;
-    var width = context.canvas.width * drawScale;
-    var height = context.canvas.height * drawScale;
-    // Make sure the canvas is big enough for all possible rotation angles
-    drawSize = Math.round(Math.sqrt(width * width + height * height));
-    if (renderCanvas.width != drawSize) {
-      renderCanvas.width = renderCanvas.height = drawSize;
-    } else {
-      renderContext.clearRect(0, 0, drawSize, drawSize);
-    }
-    drawOffsetX = (drawSize - width) / 2 / drawScale;
-    drawOffsetY = (drawSize - height) / 2 / drawScale;
-    pixelScale *= drawScale;
-    offsetX = Math.round(drawScale * (offsetX + drawOffsetX));
-    offsetY = Math.round(drawScale * (offsetY + drawOffsetY));
-  }
-  // for performance reasons, context.save / context.restore is not used
-  // to save and restore the transformation matrix and the opacity.
-  // see http://jsperf.com/context-save-restore-versus-variable
-  var alpha = renderContext.globalAlpha;
-  renderContext.globalAlpha = layerState.opacity;
-
-  var pixelExtents;
-  var opaque = source.getOpaque(projection) && layerState.opacity == 1;
-  if (!opaque) {
-    tilesToDraw.reverse();
-    pixelExtents = [];
-  }
-
-  var extent = layerState.extent;
-  var clipped = extent !== undefined;
-  if (clipped) {
-    var topLeft = ol.extent.getTopLeft(/** @type {ol.Extent} */ (extent));
-    var topRight = ol.extent.getTopRight(/** @type {ol.Extent} */ (extent));
-    var bottomRight = ol.extent.getBottomRight(/** @type {ol.Extent} */ (extent));
-    var bottomLeft = ol.extent.getBottomLeft(/** @type {ol.Extent} */ (extent));
-
-    ol.transform.apply(frameState.coordinateToPixelTransform, topLeft);
-    ol.transform.apply(frameState.coordinateToPixelTransform, topRight);
-    ol.transform.apply(frameState.coordinateToPixelTransform, bottomRight);
-    ol.transform.apply(frameState.coordinateToPixelTransform, bottomLeft);
-
-    var ox = drawOffsetX || 0;
-    var oy = drawOffsetY || 0;
-    renderContext.save();
-    var cx = (renderContext.canvas.width) / 2;
-    var cy = (renderContext.canvas.height) / 2;
-    ol.render.canvas.rotateAtOffset(renderContext, -rotation, cx, cy);
-    renderContext.beginPath();
-    renderContext.moveTo(drawScale * (topLeft[0] * pixelRatio + ox),
-        drawScale * (topLeft[1] * pixelRatio + oy));
-    renderContext.lineTo(drawScale * (topRight[0] * pixelRatio + ox),
-        drawScale * (topRight[1] * pixelRatio + oy));
-    renderContext.lineTo(drawScale * (bottomRight[0] * pixelRatio + ox),
-        drawScale * (bottomRight[1] * pixelRatio + oy));
-    renderContext.lineTo(drawScale * (bottomLeft[0] * pixelRatio + ox),
-        drawScale * (bottomLeft[1] * pixelRatio + oy));
-    renderContext.clip();
-    ol.render.canvas.rotateAtOffset(renderContext, rotation, cx, cy);
-  }
-
-  for (var i = 0, ii = tilesToDraw.length; i < ii; ++i) {
-    var tile = tilesToDraw[i];
-    var tileCoord = tile.getTileCoord();
-    var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent);
-    var currentZ = tileCoord[0];
-    // Calculate all insert points by tile widths from a common origin to avoid
-    // gaps caused by rounding
-    var origin = ol.extent.getBottomLeft(tileGrid.getTileCoordExtent(
-        tileGrid.getTileCoordForCoordAndZ(center, currentZ, this.tmpTileCoord_)));
-    var w = Math.round(ol.extent.getWidth(tileExtent) * pixelScale);
-    var h = Math.round(ol.extent.getHeight(tileExtent) * pixelScale);
-    var left = Math.round((tileExtent[0] - origin[0]) * pixelScale / w) * w +
-        offsetX + Math.round((origin[0] - center[0]) * pixelScale);
-    var top = Math.round((origin[1] - tileExtent[3]) * pixelScale / h) * h +
-        offsetY + Math.round((center[1] - origin[1]) * pixelScale);
-    if (!opaque) {
-      var pixelExtent = [left, top, left + w, top + h];
-      // Create a clip mask for regions in this low resolution tile that are
-      // already filled by a higher resolution tile
-      renderContext.save();
-      for (var j = 0, jj = pixelExtents.length; j < jj; ++j) {
-        var clipExtent = pixelExtents[j];
-        if (ol.extent.intersects(pixelExtent, clipExtent)) {
-          renderContext.beginPath();
-          // counter-clockwise (outer ring) for current tile
-          renderContext.moveTo(pixelExtent[0], pixelExtent[1]);
-          renderContext.lineTo(pixelExtent[0], pixelExtent[3]);
-          renderContext.lineTo(pixelExtent[2], pixelExtent[3]);
-          renderContext.lineTo(pixelExtent[2], pixelExtent[1]);
-          // clockwise (inner ring) for higher resolution tile
-          renderContext.moveTo(clipExtent[0], clipExtent[1]);
-          renderContext.lineTo(clipExtent[2], clipExtent[1]);
-          renderContext.lineTo(clipExtent[2], clipExtent[3]);
-          renderContext.lineTo(clipExtent[0], clipExtent[3]);
-          renderContext.closePath();
-          renderContext.clip();
-        }
-      }
-      pixelExtents.push(pixelExtent);
-    }
-    var tilePixelSize = source.getTilePixelSize(currentZ, pixelRatio, projection);
-    renderContext.drawImage(tile.getImage(), tileGutter, tileGutter,
-        tilePixelSize[0], tilePixelSize[1], left, top, w, h);
-    if (!opaque) {
-      renderContext.restore();
-    }
-  }
-
-  if (clipped) {
-    renderContext.restore();
-  }
-
-  if (hasRenderListeners) {
-    var dX = drawOffsetX - offsetX / drawScale + offsetX;
-    var dY = drawOffsetY - offsetY / drawScale + offsetY;
-    var imageTransform = ol.transform.compose(this.imageTransform_,
-        drawSize / 2 - dX, drawSize / 2 - dY,
-        pixelScale, -pixelScale,
-        -rotation,
-        -center[0] + dX / pixelScale, -center[1] - dY / pixelScale);
-    this.dispatchRenderEvent(renderContext, frameState, imageTransform);
-  }
-  if (rotation || hasRenderListeners) {
-    context.drawImage(renderContext.canvas, -Math.round(drawOffsetX),
-        -Math.round(drawOffsetY), drawSize / drawScale, drawSize / drawScale);
-  }
-  renderContext.globalAlpha = alpha;
-};
-
-
-/**
- * @function
- * @return {ol.layer.Tile|ol.layer.VectorTile}
- */
-ol.renderer.canvas.TileLayer.prototype.getLayer;
-
-goog.provide('ol.renderer.canvas.VectorLayer');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.dom');
-goog.require('ol.extent');
-goog.require('ol.render.Event');
-goog.require('ol.render.canvas');
-goog.require('ol.render.canvas.ReplayGroup');
-goog.require('ol.renderer.canvas.Layer');
-goog.require('ol.renderer.vector');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.canvas.Layer}
- * @param {ol.layer.Vector} vectorLayer Vector layer.
- */
-ol.renderer.canvas.VectorLayer = function(vectorLayer) {
-
-  ol.renderer.canvas.Layer.call(this, vectorLayer);
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.dirty_ = false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedRevision_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedResolution_ = NaN;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.renderedExtent_ = ol.extent.createEmpty();
-
-  /**
-   * @private
-   * @type {function(ol.Feature, ol.Feature): number|null}
-   */
-  this.renderedRenderOrder_ = null;
-
-  /**
-   * @private
-   * @type {ol.render.canvas.ReplayGroup}
-   */
-  this.replayGroup_ = null;
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.context_ = ol.dom.createCanvasContext2D();
-
-};
-ol.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer);
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.VectorLayer.prototype.composeFrame = function(frameState, layerState, context) {
-
-  var extent = frameState.extent;
-  var pixelRatio = frameState.pixelRatio;
-  var skippedFeatureUids = layerState.managed ?
-      frameState.skippedFeatureUids : {};
-  var viewState = frameState.viewState;
-  var projection = viewState.projection;
-  var rotation = viewState.rotation;
-  var projectionExtent = projection.getExtent();
-  var vectorSource = /** @type {ol.source.Vector} */ (this.getLayer().getSource());
-
-  var transform = this.getTransform(frameState, 0);
-
-  this.dispatchPreComposeEvent(context, frameState, transform);
-
-  // clipped rendering if layer extent is set
-  var clipExtent = layerState.extent;
-  var clipped = clipExtent !== undefined;
-  if (clipped) {
-    this.clip(context, frameState,  /** @type {ol.Extent} */ (clipExtent));
-  }
-  var replayGroup = this.replayGroup_;
-  if (replayGroup && !replayGroup.isEmpty()) {
-    var layer = this.getLayer();
-    var drawOffsetX = 0;
-    var drawOffsetY = 0;
-    var replayContext;
-    if (layer.hasListener(ol.render.Event.Type.RENDER)) {
-      var drawWidth = context.canvas.width;
-      var drawHeight = context.canvas.height;
-      if (rotation) {
-        var drawSize = Math.round(Math.sqrt(drawWidth * drawWidth + drawHeight * drawHeight));
-        drawOffsetX = (drawSize - drawWidth) / 2;
-        drawOffsetY = (drawSize - drawHeight) / 2;
-        drawWidth = drawHeight = drawSize;
-      }
-      // resize and clear
-      this.context_.canvas.width = drawWidth;
-      this.context_.canvas.height = drawHeight;
-      replayContext = this.context_;
-    } else {
-      replayContext = context;
-    }
-    // for performance reasons, context.save / context.restore is not used
-    // to save and restore the transformation matrix and the opacity.
-    // see http://jsperf.com/context-save-restore-versus-variable
-    var alpha = replayContext.globalAlpha;
-    replayContext.globalAlpha = layerState.opacity;
-    if (replayContext != context) {
-      replayContext.translate(drawOffsetX, drawOffsetY);
-    }
-
-    var width = frameState.size[0] * pixelRatio;
-    var height = frameState.size[1] * pixelRatio;
-    ol.render.canvas.rotateAtOffset(replayContext, -rotation,
-        width / 2, height / 2);
-    replayGroup.replay(replayContext, pixelRatio, transform, rotation,
-        skippedFeatureUids);
-    if (vectorSource.getWrapX() && projection.canWrapX() &&
-        !ol.extent.containsExtent(projectionExtent, extent)) {
-      var startX = extent[0];
-      var worldWidth = ol.extent.getWidth(projectionExtent);
-      var world = 0;
-      var offsetX;
-      while (startX < projectionExtent[0]) {
-        --world;
-        offsetX = worldWidth * world;
-        transform = this.getTransform(frameState, offsetX);
-        replayGroup.replay(replayContext, pixelRatio, transform, rotation,
-            skippedFeatureUids);
-        startX += worldWidth;
-      }
-      world = 0;
-      startX = extent[2];
-      while (startX > projectionExtent[2]) {
-        ++world;
-        offsetX = worldWidth * world;
-        transform = this.getTransform(frameState, offsetX);
-        replayGroup.replay(replayContext, pixelRatio, transform, rotation,
-            skippedFeatureUids);
-        startX -= worldWidth;
-      }
-      // restore original transform for render and compose events
-      transform = this.getTransform(frameState, 0);
-    }
-    ol.render.canvas.rotateAtOffset(replayContext, rotation,
-        width / 2, height / 2);
-
-    if (replayContext != context) {
-      this.dispatchRenderEvent(replayContext, frameState, transform);
-      context.drawImage(replayContext.canvas, -drawOffsetX, -drawOffsetY);
-      replayContext.translate(-drawOffsetX, -drawOffsetY);
-    }
-    replayContext.globalAlpha = alpha;
-  }
-
-  if (clipped) {
-    context.restore();
-  }
-  this.dispatchPostComposeEvent(context, frameState, transform);
-
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, callback, thisArg) {
-  if (!this.replayGroup_) {
-    return undefined;
-  } else {
-    var resolution = frameState.viewState.resolution;
-    var rotation = frameState.viewState.rotation;
-    var layer = this.getLayer();
-    /** @type {Object.<string, boolean>} */
-    var features = {};
-    return this.replayGroup_.forEachFeatureAtCoordinate(coordinate, resolution,
-        rotation, {},
-        /**
-         * @param {ol.Feature|ol.render.Feature} feature Feature.
-         * @return {?} Callback result.
-         */
-        function(feature) {
-          var key = ol.getUid(feature).toString();
-          if (!(key in features)) {
-            features[key] = true;
-            return callback.call(thisArg, feature, layer);
-          }
-        });
-  }
-};
-
-
-/**
- * Handle changes in image style state.
- * @param {ol.events.Event} event Image style change event.
- * @private
- */
-ol.renderer.canvas.VectorLayer.prototype.handleStyleImageChange_ = function(event) {
-  this.renderIfReadyAndVisible();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.VectorLayer.prototype.prepareFrame = function(frameState, layerState) {
-
-  var vectorLayer = /** @type {ol.layer.Vector} */ (this.getLayer());
-  var vectorSource = vectorLayer.getSource();
-
-  this.updateAttributions(
-      frameState.attributions, vectorSource.getAttributions());
-  this.updateLogos(frameState, vectorSource);
-
-  var animating = frameState.viewHints[ol.View.Hint.ANIMATING];
-  var interacting = frameState.viewHints[ol.View.Hint.INTERACTING];
-  var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();
-  var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();
-
-  if (!this.dirty_ && (!updateWhileAnimating && animating) ||
-      (!updateWhileInteracting && interacting)) {
-    return true;
-  }
-
-  var frameStateExtent = frameState.extent;
-  var viewState = frameState.viewState;
-  var projection = viewState.projection;
-  var resolution = viewState.resolution;
-  var pixelRatio = frameState.pixelRatio;
-  var vectorLayerRevision = vectorLayer.getRevision();
-  var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();
-  var vectorLayerRenderOrder = vectorLayer.getRenderOrder();
-
-  if (vectorLayerRenderOrder === undefined) {
-    vectorLayerRenderOrder = ol.renderer.vector.defaultOrder;
-  }
-
-  var extent = ol.extent.buffer(frameStateExtent,
-      vectorLayerRenderBuffer * resolution);
-  var projectionExtent = viewState.projection.getExtent();
-
-  if (vectorSource.getWrapX() && viewState.projection.canWrapX() &&
-      !ol.extent.containsExtent(projectionExtent, frameState.extent)) {
-    // For the replay group, we need an extent that intersects the real world
-    // (-180° to +180°). To support geometries in a coordinate range from -540°
-    // to +540°, we add at least 1 world width on each side of the projection
-    // extent. If the viewport is wider than the world, we need to add half of
-    // the viewport width to make sure we cover the whole viewport.
-    var worldWidth = ol.extent.getWidth(projectionExtent);
-    var buffer = Math.max(ol.extent.getWidth(extent) / 2, worldWidth);
-    extent[0] = projectionExtent[0] - buffer;
-    extent[2] = projectionExtent[2] + buffer;
-  }
-
-  if (!this.dirty_ &&
-      this.renderedResolution_ == resolution &&
-      this.renderedRevision_ == vectorLayerRevision &&
-      this.renderedRenderOrder_ == vectorLayerRenderOrder &&
-      ol.extent.containsExtent(this.renderedExtent_, extent)) {
-    return true;
-  }
-
-  this.replayGroup_ = null;
-
-  this.dirty_ = false;
-
-  var replayGroup =
-      new ol.render.canvas.ReplayGroup(
-          ol.renderer.vector.getTolerance(resolution, pixelRatio), extent,
-          resolution, vectorSource.getOverlaps(), vectorLayer.getRenderBuffer());
-  vectorSource.loadFeatures(extent, resolution, projection);
-  /**
-   * @param {ol.Feature} feature Feature.
-   * @this {ol.renderer.canvas.VectorLayer}
-   */
-  var renderFeature = function(feature) {
-    var styles;
-    var styleFunction = feature.getStyleFunction();
-    if (styleFunction) {
-      styles = styleFunction.call(feature, resolution);
-    } else {
-      styleFunction = vectorLayer.getStyleFunction();
-      if (styleFunction) {
-        styles = styleFunction(feature, resolution);
-      }
-    }
-    if (styles) {
-      var dirty = this.renderFeature(
-          feature, resolution, pixelRatio, styles, replayGroup);
-      this.dirty_ = this.dirty_ || dirty;
-    }
-  };
-  if (vectorLayerRenderOrder) {
-    /** @type {Array.<ol.Feature>} */
-    var features = [];
-    vectorSource.forEachFeatureInExtent(extent,
-        /**
-         * @param {ol.Feature} feature Feature.
-         */
-        function(feature) {
-          features.push(feature);
-        }, this);
-    features.sort(vectorLayerRenderOrder);
-    features.forEach(renderFeature, this);
-  } else {
-    vectorSource.forEachFeatureInExtent(extent, renderFeature, this);
-  }
-  replayGroup.finish();
-
-  this.renderedResolution_ = resolution;
-  this.renderedRevision_ = vectorLayerRevision;
-  this.renderedRenderOrder_ = vectorLayerRenderOrder;
-  this.renderedExtent_ = extent;
-  this.replayGroup_ = replayGroup;
-
-  return true;
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {(ol.style.Style|Array.<ol.style.Style>)} styles The style or array of
- *     styles.
- * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group.
- * @return {boolean} `true` if an image is loading.
- */
-ol.renderer.canvas.VectorLayer.prototype.renderFeature = function(feature, resolution, pixelRatio, styles, replayGroup) {
-  if (!styles) {
-    return false;
-  }
-  var loading = false;
-  if (Array.isArray(styles)) {
-    for (var i = 0, ii = styles.length; i < ii; ++i) {
-      loading = ol.renderer.vector.renderFeature(
-          replayGroup, feature, styles[i],
-          ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
-          this.handleStyleImageChange_, this) || loading;
-    }
-  } else {
-    loading = ol.renderer.vector.renderFeature(
-        replayGroup, feature, styles,
-        ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
-        this.handleStyleImageChange_, this) || loading;
-  }
-  return loading;
-};
-
-goog.provide('ol.renderer.canvas.VectorTileLayer');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.proj');
-goog.require('ol.proj.Units');
-goog.require('ol.layer.VectorTile');
-goog.require('ol.render.Event');
-goog.require('ol.render.ReplayType');
-goog.require('ol.render.canvas');
-goog.require('ol.render.canvas.ReplayGroup');
-goog.require('ol.render.replay');
-goog.require('ol.renderer.canvas.TileLayer');
-goog.require('ol.renderer.vector');
-goog.require('ol.size');
-goog.require('ol.transform');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.canvas.TileLayer}
- * @param {ol.layer.VectorTile} layer VectorTile layer.
- */
-ol.renderer.canvas.VectorTileLayer = function(layer) {
-
-  ol.renderer.canvas.TileLayer.call(this, layer);
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.dirty_ = false;
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.tmpTransform_ = ol.transform.create();
-
-  // Use lower resolution for pure vector rendering. Closest resolution otherwise.
-  this.zDirection =
-      layer.getRenderMode() == ol.layer.VectorTile.RenderType.VECTOR ? 1 : 0;
-
-};
-ol.inherits(ol.renderer.canvas.VectorTileLayer, ol.renderer.canvas.TileLayer);
-
-
-/**
- * @const
- * @type {!Object.<string, Array.<ol.render.ReplayType>>}
- */
-ol.renderer.canvas.VectorTileLayer.IMAGE_REPLAYS = {
-  'image': ol.render.replay.ORDER,
-  'hybrid': [ol.render.ReplayType.POLYGON, ol.render.ReplayType.LINE_STRING]
-};
-
-
-/**
- * @const
- * @type {!Object.<string, Array.<ol.render.ReplayType>>}
- */
-ol.renderer.canvas.VectorTileLayer.VECTOR_REPLAYS = {
-  'hybrid': [ol.render.ReplayType.IMAGE, ol.render.ReplayType.TEXT],
-  'vector': ol.render.replay.ORDER
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.VectorTileLayer.prototype.composeFrame = function(
-    frameState, layerState, context) {
-  var transform = this.getTransform(frameState, 0);
-  this.dispatchPreComposeEvent(context, frameState, transform);
-
-  // clipped rendering if layer extent is set
-  var extent = layerState.extent;
-  var clipped = extent !== undefined;
-  if (clipped) {
-    this.clip(context, frameState,  /** @type {ol.Extent} */ (extent));
-  }
-
-  var renderMode = this.getLayer().getRenderMode();
-  if (renderMode !== ol.layer.VectorTile.RenderType.VECTOR) {
-    this.renderTileImages(context, frameState, layerState);
-  }
-  if (renderMode !== ol.layer.VectorTile.RenderType.IMAGE) {
-    this.renderTileReplays_(context, frameState, layerState);
-  }
-
-  if (clipped) {
-    context.restore();
-  }
-
-  this.dispatchPostComposeEvent(context, frameState, transform);
-};
-
-
-/**
- * @param {CanvasRenderingContext2D} context Context.
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.LayerState} layerState Layer state.
- * @private
- */
-ol.renderer.canvas.VectorTileLayer.prototype.renderTileReplays_ = function(
-    context, frameState, layerState) {
-
-  var layer = this.getLayer();
-  var replays = ol.renderer.canvas.VectorTileLayer.VECTOR_REPLAYS[layer.getRenderMode()];
-  var pixelRatio = frameState.pixelRatio;
-  var skippedFeatureUids = layerState.managed ?
-      frameState.skippedFeatureUids : {};
-  var viewState = frameState.viewState;
-  var center = viewState.center;
-  var resolution = viewState.resolution;
-  var rotation = viewState.rotation;
-  var size = frameState.size;
-  var pixelScale = pixelRatio / resolution;
-  var source = /** @type {ol.source.VectorTile} */ (layer.getSource());
-  var tilePixelRatio = source.getTilePixelRatio();
-
-  var transform = this.getTransform(frameState, 0);
-
-  var replayContext;
-  if (layer.hasListener(ol.render.Event.Type.RENDER)) {
-    // resize and clear
-    this.context.canvas.width = context.canvas.width;
-    this.context.canvas.height = context.canvas.height;
-    replayContext = this.context;
-  } else {
-    replayContext = context;
-  }
-  // for performance reasons, context.save / context.restore is not used
-  // to save and restore the transformation matrix and the opacity.
-  // see http://jsperf.com/context-save-restore-versus-variable
-  var alpha = replayContext.globalAlpha;
-  replayContext.globalAlpha = layerState.opacity;
-
-  var tilesToDraw = this.renderedTiles;
-  var tileGrid = source.getTileGrid();
-
-  var currentZ, i, ii, offsetX, offsetY, origin, pixelSpace, replayState;
-  var tile, tileExtent, tilePixelResolution, tileResolution, tileTransform;
-  for (i = 0, ii = tilesToDraw.length; i < ii; ++i) {
-    tile = tilesToDraw[i];
-    replayState = tile.getReplayState();
-    tileExtent = tileGrid.getTileCoordExtent(
-        tile.getTileCoord(), this.tmpExtent);
-    currentZ = tile.getTileCoord()[0];
-    pixelSpace = tile.getProjection().getUnits() == ol.proj.Units.TILE_PIXELS;
-    tileResolution = tileGrid.getResolution(currentZ);
-    tilePixelResolution = tileResolution / tilePixelRatio;
-    offsetX = Math.round(pixelRatio * size[0] / 2);
-    offsetY = Math.round(pixelRatio * size[1] / 2);
-
-    if (pixelSpace) {
-      origin = ol.extent.getTopLeft(tileExtent);
-      tileTransform = ol.transform.reset(this.tmpTransform_);
-      tileTransform = ol.transform.compose(this.tmpTransform_,
-          offsetX, offsetY,
-          pixelScale * tilePixelResolution, pixelScale * tilePixelResolution,
-          rotation,
-          (origin[0] - center[0]) / tilePixelResolution, (center[1] - origin[1]) / tilePixelResolution);
-    } else {
-      tileTransform = transform;
-    }
-    ol.render.canvas.rotateAtOffset(replayContext, -rotation, offsetX, offsetY);
-    replayState.replayGroup.replay(replayContext, pixelRatio,
-        tileTransform, rotation, skippedFeatureUids, replays);
-    ol.render.canvas.rotateAtOffset(replayContext, rotation, offsetX, offsetY);
-  }
-
-  if (replayContext != context) {
-    this.dispatchRenderEvent(replayContext, frameState, transform);
-    context.drawImage(replayContext.canvas, 0, 0);
-  }
-  replayContext.globalAlpha = alpha;
-};
-
-
-/**
- * @param {ol.VectorTile} tile Tile.
- * @param {olx.FrameState} frameState Frame state.
- */
-ol.renderer.canvas.VectorTileLayer.prototype.createReplayGroup = function(tile,
-    frameState) {
-  var layer = this.getLayer();
-  var pixelRatio = frameState.pixelRatio;
-  var projection = frameState.viewState.projection;
-  var revision = layer.getRevision();
-  var renderOrder = layer.getRenderOrder() || null;
-
-  var replayState = tile.getReplayState();
-  if (!replayState.dirty && replayState.renderedRevision == revision &&
-      replayState.renderedRenderOrder == renderOrder) {
-    return;
-  }
-
-  replayState.replayGroup = null;
-  replayState.dirty = false;
-
-  var source = /** @type {ol.source.VectorTile} */ (layer.getSource());
-  var tileGrid = source.getTileGrid();
-  var tileCoord = tile.getTileCoord();
-  var tileProjection = tile.getProjection();
-  var pixelSpace = tileProjection.getUnits() == ol.proj.Units.TILE_PIXELS;
-  var resolution = tileGrid.getResolution(tileCoord[0]);
-  var extent, reproject, tileResolution;
-  if (pixelSpace) {
-    var tilePixelRatio = tileResolution = source.getTilePixelRatio();
-    var tileSize = ol.size.toSize(tileGrid.getTileSize(tileCoord[0]));
-    extent = [0, 0, tileSize[0] * tilePixelRatio, tileSize[1] * tilePixelRatio];
-  } else {
-    tileResolution = resolution;
-    extent = tileGrid.getTileCoordExtent(tileCoord);
-    if (!ol.proj.equivalent(projection, tileProjection)) {
-      reproject = true;
-      tile.setProjection(projection);
-    }
-  }
-  replayState.dirty = false;
-  var replayGroup = new ol.render.canvas.ReplayGroup(0, extent,
-      tileResolution, source.getOverlaps(), layer.getRenderBuffer());
-  var squaredTolerance = ol.renderer.vector.getSquaredTolerance(
-      tileResolution, pixelRatio);
-
-  /**
-   * @param {ol.Feature|ol.render.Feature} feature Feature.
-   * @this {ol.renderer.canvas.VectorTileLayer}
-   */
-  function renderFeature(feature) {
-    var styles;
-    var styleFunction = feature.getStyleFunction();
-    if (styleFunction) {
-      styles = styleFunction.call(/** @type {ol.Feature} */ (feature), resolution);
-    } else {
-      styleFunction = layer.getStyleFunction();
-      if (styleFunction) {
-        styles = styleFunction(feature, resolution);
-      }
-    }
-    if (styles) {
-      if (!Array.isArray(styles)) {
-        styles = [styles];
-      }
-      var dirty = this.renderFeature(feature, squaredTolerance, styles,
-          replayGroup);
-      this.dirty_ = this.dirty_ || dirty;
-      replayState.dirty = replayState.dirty || dirty;
-    }
-  }
-
-  var features = tile.getFeatures();
-  if (renderOrder && renderOrder !== replayState.renderedRenderOrder) {
-    features.sort(renderOrder);
-  }
-  var feature;
-  for (var i = 0, ii = features.length; i < ii; ++i) {
-    feature = features[i];
-    if (reproject) {
-      feature.getGeometry().transform(tileProjection, projection);
-    }
-    renderFeature.call(this, feature);
-  }
-
-  replayGroup.finish();
-
-  replayState.renderedRevision = revision;
-  replayState.renderedRenderOrder = renderOrder;
-  replayState.replayGroup = replayGroup;
-  replayState.resolution = NaN;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.VectorTileLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, callback, thisArg) {
-  var resolution = frameState.viewState.resolution;
-  var rotation = frameState.viewState.rotation;
-  var layer = this.getLayer();
-  /** @type {Object.<string, boolean>} */
-  var features = {};
-
-  var replayables = this.renderedTiles;
-  var source = /** @type {ol.source.VectorTile} */ (layer.getSource());
-  var tileGrid = source.getTileGrid();
-  var found, tileSpaceCoordinate;
-  var i, ii, origin, replayGroup;
-  var tile, tileCoord, tileExtent, tilePixelRatio, tileResolution;
-  for (i = 0, ii = replayables.length; i < ii; ++i) {
-    tile = replayables[i];
-    tileCoord = tile.getTileCoord();
-    tileExtent = source.getTileGrid().getTileCoordExtent(tileCoord,
-        this.tmpExtent);
-    if (!ol.extent.containsCoordinate(tileExtent, coordinate)) {
-      continue;
-    }
-    if (tile.getProjection().getUnits() === ol.proj.Units.TILE_PIXELS) {
-      origin = ol.extent.getTopLeft(tileExtent);
-      tilePixelRatio = source.getTilePixelRatio();
-      tileResolution = tileGrid.getResolution(tileCoord[0]) / tilePixelRatio;
-      tileSpaceCoordinate = [
-        (coordinate[0] - origin[0]) / tileResolution,
-        (origin[1] - coordinate[1]) / tileResolution
-      ];
-      resolution = tilePixelRatio;
-    } else {
-      tileSpaceCoordinate = coordinate;
-    }
-    replayGroup = tile.getReplayState().replayGroup;
-    found = found || replayGroup.forEachFeatureAtCoordinate(
-        tileSpaceCoordinate, resolution, rotation, {},
-        /**
-         * @param {ol.Feature|ol.render.Feature} feature Feature.
-         * @return {?} Callback result.
-         */
-        function(feature) {
-          var key = ol.getUid(feature).toString();
-          if (!(key in features)) {
-            features[key] = true;
-            return callback.call(thisArg, feature, layer);
-          }
-        });
-  }
-  return found;
-};
-
-
-/**
- * Handle changes in image style state.
- * @param {ol.events.Event} event Image style change event.
- * @private
- */
-ol.renderer.canvas.VectorTileLayer.prototype.handleStyleImageChange_ = function(event) {
-  this.renderIfReadyAndVisible();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.VectorTileLayer.prototype.prepareFrame = function(frameState, layerState) {
-  var prepared = ol.renderer.canvas.TileLayer.prototype.prepareFrame.call(this, frameState, layerState);
-  if (prepared) {
-    var skippedFeatures = Object.keys(frameState.skippedFeatureUids_ || {});
-    for (var i = 0, ii = this.renderedTiles.length; i < ii; ++i) {
-      var tile = /** @type {ol.VectorTile} */ (this.renderedTiles[i]);
-      this.createReplayGroup(tile, frameState);
-      this.renderTileImage_(tile, frameState, layerState, skippedFeatures);
-    }
-  }
-  return prepared;
-};
-
-
-/**
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {(ol.style.Style|Array.<ol.style.Style>)} styles The style or array of
- *     styles.
- * @param {ol.render.canvas.ReplayGroup} replayGroup Replay group.
- * @return {boolean} `true` if an image is loading.
- */
-ol.renderer.canvas.VectorTileLayer.prototype.renderFeature = function(feature, squaredTolerance, styles, replayGroup) {
-  if (!styles) {
-    return false;
-  }
-  var loading = false;
-  if (Array.isArray(styles)) {
-    for (var i = 0, ii = styles.length; i < ii; ++i) {
-      loading = ol.renderer.vector.renderFeature(
-          replayGroup, feature, styles[i], squaredTolerance,
-          this.handleStyleImageChange_, this) || loading;
-    }
-  } else {
-    loading = ol.renderer.vector.renderFeature(
-        replayGroup, feature, styles, squaredTolerance,
-        this.handleStyleImageChange_, this) || loading;
-  }
-  return loading;
-};
-
-
-/**
- * @param {ol.VectorTile} tile Tile.
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.LayerState} layerState Layer state.
- * @param {Array.<string>} skippedFeatures Skipped features.
- * @private
- */
-ol.renderer.canvas.VectorTileLayer.prototype.renderTileImage_ = function(
-    tile, frameState, layerState, skippedFeatures) {
-  var layer = this.getLayer();
-  var replays = ol.renderer.canvas.VectorTileLayer.IMAGE_REPLAYS[layer.getRenderMode()];
-  if (!replays) {
-    // do not create an image in 'vector' mode
-    return;
-  }
-  var pixelRatio = frameState.pixelRatio;
-  var replayState = tile.getReplayState();
-  var revision = layer.getRevision();
-  if (!ol.array.equals(replayState.skippedFeatures, skippedFeatures) ||
-      replayState.renderedTileRevision !== revision) {
-    replayState.skippedFeatures = skippedFeatures;
-    replayState.renderedTileRevision = revision;
-    var tileContext = tile.getContext();
-    var source = layer.getSource();
-    var tileGrid = source.getTileGrid();
-    var currentZ = tile.getTileCoord()[0];
-    var resolution = tileGrid.getResolution(currentZ);
-    var tileSize = ol.size.toSize(tileGrid.getTileSize(currentZ));
-    var tileResolution = tileGrid.getResolution(currentZ);
-    var resolutionRatio = tileResolution / resolution;
-    var width = tileSize[0] * pixelRatio * resolutionRatio;
-    var height = tileSize[1] * pixelRatio * resolutionRatio;
-    tileContext.canvas.width = width / resolutionRatio + 0.5;
-    tileContext.canvas.height = height / resolutionRatio + 0.5;
-    tileContext.scale(1 / resolutionRatio, 1 / resolutionRatio);
-    tileContext.translate(width / 2, height / 2);
-    var pixelSpace = tile.getProjection().getUnits() == ol.proj.Units.TILE_PIXELS;
-    var pixelScale = pixelRatio / resolution;
-    var tilePixelRatio = source.getTilePixelRatio();
-    var tilePixelResolution = tileResolution / tilePixelRatio;
-    var tileExtent = tileGrid.getTileCoordExtent(
-        tile.getTileCoord(), this.tmpExtent);
-    var tileTransform = ol.transform.reset(this.tmpTransform_);
-    if (pixelSpace) {
-      ol.transform.scale(tileTransform,
-          pixelScale * tilePixelResolution, pixelScale * tilePixelResolution);
-      ol.transform.translate(tileTransform,
-          -tileSize[0] * tilePixelRatio / 2, -tileSize[1] * tilePixelRatio / 2);
-    } else {
-      var tileCenter = ol.extent.getCenter(tileExtent);
-      ol.transform.scale(tileTransform, pixelScale, -pixelScale);
-      ol.transform.translate(tileTransform, -tileCenter[0], -tileCenter[1]);
-    }
-
-    replayState.replayGroup.replay(tileContext, pixelRatio,
-        tileTransform, 0, frameState.skippedFeatureUids || {}, replays);
-  }
-};
-
-// FIXME offset panning
-
-goog.provide('ol.renderer.canvas.Map');
-
-goog.require('ol.transform');
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.css');
-goog.require('ol.dom');
-goog.require('ol.layer.Image');
-goog.require('ol.layer.Layer');
-goog.require('ol.layer.Tile');
-goog.require('ol.layer.Vector');
-goog.require('ol.layer.VectorTile');
-goog.require('ol.render.Event');
-goog.require('ol.render.canvas');
-goog.require('ol.render.canvas.Immediate');
-goog.require('ol.renderer.Map');
-goog.require('ol.renderer.Type');
-goog.require('ol.renderer.canvas.ImageLayer');
-goog.require('ol.renderer.canvas.TileLayer');
-goog.require('ol.renderer.canvas.VectorLayer');
-goog.require('ol.renderer.canvas.VectorTileLayer');
-goog.require('ol.source.State');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.Map}
- * @param {Element} container Container.
- * @param {ol.Map} map Map.
- */
-ol.renderer.canvas.Map = function(container, map) {
-
-  ol.renderer.Map.call(this, container, map);
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.context_ = ol.dom.createCanvasContext2D();
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = this.context_.canvas;
-
-  this.canvas_.style.width = '100%';
-  this.canvas_.style.height = '100%';
-  this.canvas_.className = ol.css.CLASS_UNSELECTABLE;
-  container.insertBefore(this.canvas_, container.childNodes[0] || null);
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.renderedVisible_ = true;
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.transform_ = ol.transform.create();
-
-};
-ol.inherits(ol.renderer.canvas.Map, ol.renderer.Map);
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) {
-  if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
-    return new ol.renderer.canvas.ImageLayer(layer);
-  } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
-    return new ol.renderer.canvas.TileLayer(layer);
-  } else if (ol.ENABLE_VECTOR_TILE && layer instanceof ol.layer.VectorTile) {
-    return new ol.renderer.canvas.VectorTileLayer(layer);
-  } else if (ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) {
-    return new ol.renderer.canvas.VectorLayer(layer);
-  } else {
-    ol.DEBUG && console.assert(false, 'unexpected layer configuration');
-    return null;
-  }
-};
-
-
-/**
- * @param {ol.render.Event.Type} type Event type.
- * @param {olx.FrameState} frameState Frame state.
- * @private
- */
-ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = function(type, frameState) {
-  var map = this.getMap();
-  var context = this.context_;
-  if (map.hasListener(type)) {
-    var extent = frameState.extent;
-    var pixelRatio = frameState.pixelRatio;
-    var viewState = frameState.viewState;
-    var rotation = viewState.rotation;
-
-    var transform = this.getTransform(frameState);
-
-    var vectorContext = new ol.render.canvas.Immediate(context, pixelRatio,
-        extent, transform, rotation);
-    var composeEvent = new ol.render.Event(type, vectorContext,
-        frameState, context, null);
-    map.dispatchEvent(composeEvent);
-  }
-};
-
-
-/**
- * @param {olx.FrameState} frameState Frame state.
- * @protected
- * @return {!ol.Transform} Transform.
- */
-ol.renderer.canvas.Map.prototype.getTransform = function(frameState) {
-  var viewState = frameState.viewState;
-  var dx1 = this.canvas_.width / 2;
-  var dy1 = this.canvas_.height / 2;
-  var sx = frameState.pixelRatio / viewState.resolution;
-  var sy = -sx;
-  var angle = -viewState.rotation;
-  var dx2 = -viewState.center[0];
-  var dy2 = -viewState.center[1];
-  return ol.transform.compose(this.transform_, dx1, dy1, sx, sy, angle, dx2, dy2);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.Map.prototype.getType = function() {
-  return ol.renderer.Type.CANVAS;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
-
-  if (!frameState) {
-    if (this.renderedVisible_) {
-      this.canvas_.style.display = 'none';
-      this.renderedVisible_ = false;
-    }
-    return;
-  }
-
-  var context = this.context_;
-  var pixelRatio = frameState.pixelRatio;
-  var width = Math.round(frameState.size[0] * pixelRatio);
-  var height = Math.round(frameState.size[1] * pixelRatio);
-  if (this.canvas_.width != width || this.canvas_.height != height) {
-    this.canvas_.width = width;
-    this.canvas_.height = height;
-  } else {
-    context.clearRect(0, 0, width, height);
-  }
-
-  var rotation = frameState.viewState.rotation;
-
-  this.calculateMatrices2D(frameState);
-
-  this.dispatchComposeEvent_(ol.render.Event.Type.PRECOMPOSE, frameState);
-
-  var layerStatesArray = frameState.layerStatesArray;
-  ol.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex);
-
-  ol.render.canvas.rotateAtOffset(context, rotation, width / 2, height / 2);
-
-  var viewResolution = frameState.viewState.resolution;
-  var i, ii, layer, layerRenderer, layerState;
-  for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {
-    layerState = layerStatesArray[i];
-    layer = layerState.layer;
-    layerRenderer = /** @type {ol.renderer.canvas.Layer} */ (this.getLayerRenderer(layer));
-    if (!ol.layer.Layer.visibleAtResolution(layerState, viewResolution) ||
-        layerState.sourceState != ol.source.State.READY) {
-      continue;
-    }
-    if (layerRenderer.prepareFrame(frameState, layerState)) {
-      layerRenderer.composeFrame(frameState, layerState, context);
-    }
-  }
-
-  ol.render.canvas.rotateAtOffset(context, -rotation, width / 2, height / 2);
-
-  this.dispatchComposeEvent_(
-      ol.render.Event.Type.POSTCOMPOSE, frameState);
-
-  if (!this.renderedVisible_) {
-    this.canvas_.style.display = '';
-    this.renderedVisible_ = true;
-  }
-
-  this.scheduleRemoveUnusedLayerRenderers(frameState);
-  this.scheduleExpireIconCache(frameState);
-};
-
-goog.provide('ol.webgl.Shader');
-
-goog.require('ol.functions');
-goog.require('ol.webgl');
-
-
-/**
- * @constructor
- * @param {string} source Source.
- * @struct
- */
-ol.webgl.Shader = function(source) {
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.source_ = source;
-
-};
-
-
-/**
- * @abstract
- * @return {number} Type.
- */
-ol.webgl.Shader.prototype.getType = function() {};
-
-
-/**
- * @return {string} Source.
- */
-ol.webgl.Shader.prototype.getSource = function() {
-  return this.source_;
-};
-
-
-/**
- * @return {boolean} Is animated?
- */
-ol.webgl.Shader.prototype.isAnimated = ol.functions.FALSE;
-
-goog.provide('ol.webgl.Fragment');
-
-goog.require('ol');
-goog.require('ol.webgl');
-goog.require('ol.webgl.Shader');
-
-
-/**
- * @constructor
- * @extends {ol.webgl.Shader}
- * @param {string} source Source.
- * @struct
- */
-ol.webgl.Fragment = function(source) {
-  ol.webgl.Shader.call(this, source);
-};
-ol.inherits(ol.webgl.Fragment, ol.webgl.Shader);
-
-
-/**
- * @inheritDoc
- */
-ol.webgl.Fragment.prototype.getType = function() {
-  return ol.webgl.FRAGMENT_SHADER;
-};
-
-goog.provide('ol.webgl.Vertex');
-
-goog.require('ol');
-goog.require('ol.webgl');
-goog.require('ol.webgl.Shader');
-
-
-/**
- * @constructor
- * @extends {ol.webgl.Shader}
- * @param {string} source Source.
- * @struct
- */
-ol.webgl.Vertex = function(source) {
-  ol.webgl.Shader.call(this, source);
-};
-ol.inherits(ol.webgl.Vertex, ol.webgl.Shader);
-
-
-/**
- * @inheritDoc
- */
-ol.webgl.Vertex.prototype.getType = function() {
-  return ol.webgl.VERTEX_SHADER;
-};
-
-// This file is automatically generated, do not edit
-goog.provide('ol.render.webgl.imagereplay.defaultshader');
-
-goog.require('ol');
-goog.require('ol.webgl.Fragment');
-goog.require('ol.webgl.Vertex');
-
-
-/**
- * @constructor
- * @extends {ol.webgl.Fragment}
- * @struct
- */
-ol.render.webgl.imagereplay.defaultshader.Fragment = function() {
-  ol.webgl.Fragment.call(this, ol.render.webgl.imagereplay.defaultshader.Fragment.SOURCE);
-};
-ol.inherits(ol.render.webgl.imagereplay.defaultshader.Fragment, ol.webgl.Fragment);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.webgl.imagereplay.defaultshader.Fragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\nvarying float v_opacity;\n\nuniform float u_opacity;\nuniform sampler2D u_image;\n\nvoid main(void) {\n  vec4 texColor = texture2D(u_image, v_texCoord);\n  gl_FragColor.rgb = texColor.rgb;\n  float alpha = texColor.a * v_opacity * u_opacity;\n  if (alpha == 0.0) {\n    discard;\n  }\n  gl_FragColor.a = alpha;\n}\n';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.webgl.imagereplay.defaultshader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.webgl.imagereplay.defaultshader.Fragment.SOURCE = ol.DEBUG ?
-    ol.render.webgl.imagereplay.defaultshader.Fragment.DEBUG_SOURCE :
-    ol.render.webgl.imagereplay.defaultshader.Fragment.OPTIMIZED_SOURCE;
-
-
-ol.render.webgl.imagereplay.defaultshader.fragment = new ol.render.webgl.imagereplay.defaultshader.Fragment();
-
-
-/**
- * @constructor
- * @extends {ol.webgl.Vertex}
- * @struct
- */
-ol.render.webgl.imagereplay.defaultshader.Vertex = function() {
-  ol.webgl.Vertex.call(this, ol.render.webgl.imagereplay.defaultshader.Vertex.SOURCE);
-};
-ol.inherits(ol.render.webgl.imagereplay.defaultshader.Vertex, ol.webgl.Vertex);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.webgl.imagereplay.defaultshader.Vertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\nvarying float v_opacity;\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nattribute vec2 a_offsets;\nattribute float a_opacity;\nattribute float a_rotateWithView;\n\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\n\nvoid main(void) {\n  mat4 offsetMatrix = u_offsetScaleMatrix;\n  if (a_rotateWithView == 1.0) {\n    offsetMatrix = u_offsetScaleMatrix * u_offsetRotateMatrix;\n  }\n  vec4 offsets = offsetMatrix * vec4(a_offsets, 0., 0.);\n  gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.) + offsets;\n  v_texCoord = a_texCoord;\n  v_opacity = a_opacity;\n}\n\n\n';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.webgl.imagereplay.defaultshader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.render.webgl.imagereplay.defaultshader.Vertex.SOURCE = ol.DEBUG ?
-    ol.render.webgl.imagereplay.defaultshader.Vertex.DEBUG_SOURCE :
-    ol.render.webgl.imagereplay.defaultshader.Vertex.OPTIMIZED_SOURCE;
-
-
-ol.render.webgl.imagereplay.defaultshader.vertex = new ol.render.webgl.imagereplay.defaultshader.Vertex();
-
-
-/**
- * @constructor
- * @param {WebGLRenderingContext} gl GL.
- * @param {WebGLProgram} program Program.
- * @struct
- */
-ol.render.webgl.imagereplay.defaultshader.Locations = function(gl, program) {
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_image = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_image' : 'l');
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_offsetRotateMatrix = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_offsetRotateMatrix' : 'j');
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_offsetScaleMatrix = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_offsetScaleMatrix' : 'i');
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_opacity = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_opacity' : 'k');
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_projectionMatrix = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_projectionMatrix' : 'h');
-
-  /**
-   * @type {number}
-   */
-  this.a_offsets = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_offsets' : 'e');
-
-  /**
-   * @type {number}
-   */
-  this.a_opacity = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_opacity' : 'f');
-
-  /**
-   * @type {number}
-   */
-  this.a_position = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_position' : 'c');
-
-  /**
-   * @type {number}
-   */
-  this.a_rotateWithView = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_rotateWithView' : 'g');
-
-  /**
-   * @type {number}
-   */
-  this.a_texCoord = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_texCoord' : 'd');
-};
-
-goog.provide('ol.vec.Mat4');
-
-
-/**
- * @return {Array.<number>} 4x4 matrix representing a 3D identity transform.
- */
-ol.vec.Mat4.create = function() {
-  return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
-};
-
-
-/**
- * @param {Array.<number>} mat4 Flattened 4x4 matrix receiving the result.
- * @param {ol.Transform} transform Transformation matrix.
- * @return {Array.<number>} 2D transformation matrix as flattened 4x4 matrix.
- */
-ol.vec.Mat4.fromTransform = function(mat4, transform) {
-  mat4[0] = transform[0];
-  mat4[1] = transform[1];
-  mat4[4] = transform[2];
-  mat4[5] = transform[3];
-  mat4[12] = transform[4];
-  mat4[13] = transform[5];
-  return mat4;
-};
-
-goog.provide('ol.webgl.Buffer');
-
-goog.require('ol');
-goog.require('ol.webgl');
-
-
-/**
- * @constructor
- * @param {Array.<number>=} opt_arr Array.
- * @param {number=} opt_usage Usage.
- * @struct
- */
-ol.webgl.Buffer = function(opt_arr, opt_usage) {
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.arr_ = opt_arr !== undefined ? opt_arr : [];
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.usage_ = opt_usage !== undefined ?
-      opt_usage : ol.webgl.Buffer.Usage.STATIC_DRAW;
-
-};
-
-
-/**
- * @return {Array.<number>} Array.
- */
-ol.webgl.Buffer.prototype.getArray = function() {
-  return this.arr_;
-};
-
-
-/**
- * @return {number} Usage.
- */
-ol.webgl.Buffer.prototype.getUsage = function() {
-  return this.usage_;
-};
-
-
-/**
- * @enum {number}
- */
-ol.webgl.Buffer.Usage = {
-  STATIC_DRAW: ol.webgl.STATIC_DRAW,
-  STREAM_DRAW: ol.webgl.STREAM_DRAW,
-  DYNAMIC_DRAW: ol.webgl.DYNAMIC_DRAW
-};
-
-goog.provide('ol.webgl.ContextEventType');
-
-
-/**
- * @enum {string}
- */
-ol.webgl.ContextEventType = {
-  LOST: 'webglcontextlost',
-  RESTORED: 'webglcontextrestored'
-};
-
-goog.provide('ol.webgl.Context');
-
-goog.require('ol');
-goog.require('ol.Disposable');
-goog.require('ol.array');
-goog.require('ol.events');
-goog.require('ol.obj');
-goog.require('ol.webgl');
-goog.require('ol.webgl.ContextEventType');
-
-
-/**
- * @classdesc
- * A WebGL context for accessing low-level WebGL capabilities.
- *
- * @constructor
- * @extends {ol.Disposable}
- * @param {HTMLCanvasElement} canvas Canvas.
- * @param {WebGLRenderingContext} gl GL.
- */
-ol.webgl.Context = function(canvas, gl) {
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = canvas;
-
-  /**
-   * @private
-   * @type {WebGLRenderingContext}
-   */
-  this.gl_ = gl;
-
-  /**
-   * @private
-   * @type {Object.<string, ol.WebglBufferCacheEntry>}
-   */
-  this.bufferCache_ = {};
-
-  /**
-   * @private
-   * @type {Object.<string, WebGLShader>}
-   */
-  this.shaderCache_ = {};
-
-  /**
-   * @private
-   * @type {Object.<string, WebGLProgram>}
-   */
-  this.programCache_ = {};
-
-  /**
-   * @private
-   * @type {WebGLProgram}
-   */
-  this.currentProgram_ = null;
-
-  /**
-   * @private
-   * @type {WebGLFramebuffer}
-   */
-  this.hitDetectionFramebuffer_ = null;
-
-  /**
-   * @private
-   * @type {WebGLTexture}
-   */
-  this.hitDetectionTexture_ = null;
-
-  /**
-   * @private
-   * @type {WebGLRenderbuffer}
-   */
-  this.hitDetectionRenderbuffer_ = null;
-
-  /**
-   * @type {boolean}
-   */
-  this.hasOESElementIndexUint = ol.array.includes(
-      ol.WEBGL_EXTENSIONS, 'OES_element_index_uint');
-
-  // use the OES_element_index_uint extension if available
-  if (this.hasOESElementIndexUint) {
-    var ext = gl.getExtension('OES_element_index_uint');
-    ol.DEBUG && console.assert(ext,
-        'Failed to get extension "OES_element_index_uint"');
-  }
-
-  ol.events.listen(this.canvas_, ol.webgl.ContextEventType.LOST,
-      this.handleWebGLContextLost, this);
-  ol.events.listen(this.canvas_, ol.webgl.ContextEventType.RESTORED,
-      this.handleWebGLContextRestored, this);
-
-};
-ol.inherits(ol.webgl.Context, ol.Disposable);
-
-
-/**
- * Just bind the buffer if it's in the cache. Otherwise create
- * the WebGL buffer, bind it, populate it, and add an entry to
- * the cache.
- * @param {number} target Target.
- * @param {ol.webgl.Buffer} buf Buffer.
- */
-ol.webgl.Context.prototype.bindBuffer = function(target, buf) {
-  var gl = this.getGL();
-  var arr = buf.getArray();
-  var bufferKey = String(ol.getUid(buf));
-  if (bufferKey in this.bufferCache_) {
-    var bufferCacheEntry = this.bufferCache_[bufferKey];
-    gl.bindBuffer(target, bufferCacheEntry.buffer);
-  } else {
-    var buffer = gl.createBuffer();
-    gl.bindBuffer(target, buffer);
-    ol.DEBUG && console.assert(target == ol.webgl.ARRAY_BUFFER ||
-        target == ol.webgl.ELEMENT_ARRAY_BUFFER,
-        'target is supposed to be an ARRAY_BUFFER or ELEMENT_ARRAY_BUFFER');
-    var /** @type {ArrayBufferView} */ arrayBuffer;
-    if (target == ol.webgl.ARRAY_BUFFER) {
-      arrayBuffer = new Float32Array(arr);
-    } else if (target == ol.webgl.ELEMENT_ARRAY_BUFFER) {
-      arrayBuffer = this.hasOESElementIndexUint ?
-          new Uint32Array(arr) : new Uint16Array(arr);
-    }
-    gl.bufferData(target, arrayBuffer, buf.getUsage());
-    this.bufferCache_[bufferKey] = {
-      buf: buf,
-      buffer: buffer
-    };
-  }
-};
-
-
-/**
- * @param {ol.webgl.Buffer} buf Buffer.
- */
-ol.webgl.Context.prototype.deleteBuffer = function(buf) {
-  var gl = this.getGL();
-  var bufferKey = String(ol.getUid(buf));
-  ol.DEBUG && console.assert(bufferKey in this.bufferCache_,
-      'attempted to delete uncached buffer');
-  var bufferCacheEntry = this.bufferCache_[bufferKey];
-  if (!gl.isContextLost()) {
-    gl.deleteBuffer(bufferCacheEntry.buffer);
-  }
-  delete this.bufferCache_[bufferKey];
-};
-
-
-/**
- * @inheritDoc
- */
-ol.webgl.Context.prototype.disposeInternal = function() {
-  ol.events.unlistenAll(this.canvas_);
-  var gl = this.getGL();
-  if (!gl.isContextLost()) {
-    var key;
-    for (key in this.bufferCache_) {
-      gl.deleteBuffer(this.bufferCache_[key].buffer);
-    }
-    for (key in this.programCache_) {
-      gl.deleteProgram(this.programCache_[key]);
-    }
-    for (key in this.shaderCache_) {
-      gl.deleteShader(this.shaderCache_[key]);
-    }
-    // delete objects for hit-detection
-    gl.deleteFramebuffer(this.hitDetectionFramebuffer_);
-    gl.deleteRenderbuffer(this.hitDetectionRenderbuffer_);
-    gl.deleteTexture(this.hitDetectionTexture_);
-  }
-};
-
-
-/**
- * @return {HTMLCanvasElement} Canvas.
- */
-ol.webgl.Context.prototype.getCanvas = function() {
-  return this.canvas_;
-};
-
-
-/**
- * Get the WebGL rendering context
- * @return {WebGLRenderingContext} The rendering context.
- * @api
- */
-ol.webgl.Context.prototype.getGL = function() {
-  return this.gl_;
-};
-
-
-/**
- * Get the frame buffer for hit detection.
- * @return {WebGLFramebuffer} The hit detection frame buffer.
- */
-ol.webgl.Context.prototype.getHitDetectionFramebuffer = function() {
-  if (!this.hitDetectionFramebuffer_) {
-    this.initHitDetectionFramebuffer_();
-  }
-  return this.hitDetectionFramebuffer_;
-};
-
-
-/**
- * Get shader from the cache if it's in the cache. Otherwise, create
- * the WebGL shader, compile it, and add entry to cache.
- * @param {ol.webgl.Shader} shaderObject Shader object.
- * @return {WebGLShader} Shader.
- */
-ol.webgl.Context.prototype.getShader = function(shaderObject) {
-  var shaderKey = String(ol.getUid(shaderObject));
-  if (shaderKey in this.shaderCache_) {
-    return this.shaderCache_[shaderKey];
-  } else {
-    var gl = this.getGL();
-    var shader = gl.createShader(shaderObject.getType());
-    gl.shaderSource(shader, shaderObject.getSource());
-    gl.compileShader(shader);
-    ol.DEBUG && console.assert(
-        gl.getShaderParameter(shader, ol.webgl.COMPILE_STATUS) ||
-        gl.isContextLost(),
-        gl.getShaderInfoLog(shader) || 'illegal state, shader not compiled or context lost');
-    this.shaderCache_[shaderKey] = shader;
-    return shader;
-  }
-};
-
-
-/**
- * Get the program from the cache if it's in the cache. Otherwise create
- * the WebGL program, attach the shaders to it, and add an entry to the
- * cache.
- * @param {ol.webgl.Fragment} fragmentShaderObject Fragment shader.
- * @param {ol.webgl.Vertex} vertexShaderObject Vertex shader.
- * @return {WebGLProgram} Program.
- */
-ol.webgl.Context.prototype.getProgram = function(
-    fragmentShaderObject, vertexShaderObject) {
-  var programKey =
-      ol.getUid(fragmentShaderObject) + '/' + ol.getUid(vertexShaderObject);
-  if (programKey in this.programCache_) {
-    return this.programCache_[programKey];
-  } else {
-    var gl = this.getGL();
-    var program = gl.createProgram();
-    gl.attachShader(program, this.getShader(fragmentShaderObject));
-    gl.attachShader(program, this.getShader(vertexShaderObject));
-    gl.linkProgram(program);
-    ol.DEBUG && console.assert(
-        gl.getProgramParameter(program, ol.webgl.LINK_STATUS) ||
-        gl.isContextLost(),
-        gl.getProgramInfoLog(program) || 'illegal state, shader not linked or context lost');
-    this.programCache_[programKey] = program;
-    return program;
-  }
-};
-
-
-/**
- * FIXME empy description for jsdoc
- */
-ol.webgl.Context.prototype.handleWebGLContextLost = function() {
-  ol.obj.clear(this.bufferCache_);
-  ol.obj.clear(this.shaderCache_);
-  ol.obj.clear(this.programCache_);
-  this.currentProgram_ = null;
-  this.hitDetectionFramebuffer_ = null;
-  this.hitDetectionTexture_ = null;
-  this.hitDetectionRenderbuffer_ = null;
-};
-
-
-/**
- * FIXME empy description for jsdoc
- */
-ol.webgl.Context.prototype.handleWebGLContextRestored = function() {
-};
-
-
-/**
- * Creates a 1x1 pixel framebuffer for the hit-detection.
- * @private
- */
-ol.webgl.Context.prototype.initHitDetectionFramebuffer_ = function() {
-  var gl = this.gl_;
-  var framebuffer = gl.createFramebuffer();
-  gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
-
-  var texture = ol.webgl.Context.createEmptyTexture(gl, 1, 1);
-  var renderbuffer = gl.createRenderbuffer();
-  gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
-  gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 1, 1);
-  gl.framebufferTexture2D(
-      gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
-  gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT,
-      gl.RENDERBUFFER, renderbuffer);
-
-  gl.bindTexture(gl.TEXTURE_2D, null);
-  gl.bindRenderbuffer(gl.RENDERBUFFER, null);
-  gl.bindFramebuffer(gl.FRAMEBUFFER, null);
-
-  this.hitDetectionFramebuffer_ = framebuffer;
-  this.hitDetectionTexture_ = texture;
-  this.hitDetectionRenderbuffer_ = renderbuffer;
-};
-
-
-/**
- * Use a program.  If the program is already in use, this will return `false`.
- * @param {WebGLProgram} program Program.
- * @return {boolean} Changed.
- * @api
- */
-ol.webgl.Context.prototype.useProgram = function(program) {
-  if (program == this.currentProgram_) {
-    return false;
-  } else {
-    var gl = this.getGL();
-    gl.useProgram(program);
-    this.currentProgram_ = program;
-    return true;
-  }
-};
-
-
-/**
- * @param {WebGLRenderingContext} gl WebGL rendering context.
- * @param {number=} opt_wrapS wrapS.
- * @param {number=} opt_wrapT wrapT.
- * @return {WebGLTexture} The texture.
- * @private
- */
-ol.webgl.Context.createTexture_ = function(gl, opt_wrapS, opt_wrapT) {
-  var texture = gl.createTexture();
-  gl.bindTexture(gl.TEXTURE_2D, texture);
-  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
-  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
-
-  if (opt_wrapS !== undefined) {
-    gl.texParameteri(
-        ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_WRAP_S, opt_wrapS);
-  }
-  if (opt_wrapT !== undefined) {
-    gl.texParameteri(
-        ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_WRAP_T, opt_wrapT);
-  }
-
-  return texture;
-};
-
-
-/**
- * @param {WebGLRenderingContext} gl WebGL rendering context.
- * @param {number} width Width.
- * @param {number} height Height.
- * @param {number=} opt_wrapS wrapS.
- * @param {number=} opt_wrapT wrapT.
- * @return {WebGLTexture} The texture.
- */
-ol.webgl.Context.createEmptyTexture = function(
-    gl, width, height, opt_wrapS, opt_wrapT) {
-  var texture = ol.webgl.Context.createTexture_(gl, opt_wrapS, opt_wrapT);
-  gl.texImage2D(
-      gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE,
-      null);
-
-  return texture;
-};
-
-
-/**
- * @param {WebGLRenderingContext} gl WebGL rendering context.
- * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.
- * @param {number=} opt_wrapS wrapS.
- * @param {number=} opt_wrapT wrapT.
- * @return {WebGLTexture} The texture.
- */
-ol.webgl.Context.createTexture = function(gl, image, opt_wrapS, opt_wrapT) {
-  var texture = ol.webgl.Context.createTexture_(gl, opt_wrapS, opt_wrapT);
-  gl.texImage2D(
-      gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
-
-  return texture;
-};
-
-goog.provide('ol.render.webgl.ImageReplay');
-goog.provide('ol.render.webgl.ReplayGroup');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.obj');
-goog.require('ol.render.ReplayGroup');
-goog.require('ol.render.VectorContext');
-goog.require('ol.render.replay');
-goog.require('ol.render.webgl.imagereplay.defaultshader');
-goog.require('ol.transform');
-goog.require('ol.vec.Mat4');
-goog.require('ol.webgl');
-goog.require('ol.webgl.Buffer');
-goog.require('ol.webgl.Context');
-
-
-/**
- * @constructor
- * @extends {ol.render.VectorContext}
- * @param {number} tolerance Tolerance.
- * @param {ol.Extent} maxExtent Max extent.
- * @protected
- * @struct
- */
-ol.render.webgl.ImageReplay = function(tolerance, maxExtent) {
-  ol.render.VectorContext.call(this);
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.anchorX_ = undefined;
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.anchorY_ = undefined;
-
-  /**
-   * The origin of the coordinate system for the point coordinates sent to
-   * the GPU. To eliminate jitter caused by precision problems in the GPU
-   * we use the "Rendering Relative to Eye" technique described in the "3D
-   * Engine Design for Virtual Globes" book.
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.origin_ = ol.extent.getCenter(maxExtent);
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.groupIndices_ = [];
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.hitDetectionGroupIndices_ = [];
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.height_ = undefined;
-
-  /**
-   * @type {Array.<HTMLCanvasElement|HTMLImageElement|HTMLVideoElement>}
-   * @private
-   */
-  this.images_ = [];
-
-  /**
-   * @type {Array.<HTMLCanvasElement|HTMLImageElement|HTMLVideoElement>}
-   * @private
-   */
-  this.hitDetectionImages_ = [];
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.imageHeight_ = undefined;
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.imageWidth_ = undefined;
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.indices_ = [];
-
-  /**
-   * @type {ol.webgl.Buffer}
-   * @private
-   */
-  this.indicesBuffer_ = null;
-
-  /**
-   * @private
-   * @type {ol.render.webgl.imagereplay.defaultshader.Locations}
-   */
-  this.defaultLocations_ = null;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.opacity_ = undefined;
-
-  /**
-   * @type {ol.Transform}
-   * @private
-   */
-  this.offsetRotateMatrix_ = ol.transform.create();
-
-  /**
-   * @type {ol.Transform}
-   * @private
-   */
-  this.offsetScaleMatrix_ = ol.transform.create();
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.originX_ = undefined;
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.originY_ = undefined;
-
-  /**
-   * @type {ol.Transform}
-   * @private
-   */
-  this.projectionMatrix_ = ol.transform.create();
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.tmpMat4_ = ol.vec.Mat4.create();
-
-  /**
-   * @private
-   * @type {boolean|undefined}
-   */
-  this.rotateWithView_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.rotation_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.scale_ = undefined;
-
-  /**
-   * @type {Array.<WebGLTexture>}
-   * @private
-   */
-  this.textures_ = [];
-
-  /**
-   * @type {Array.<WebGLTexture>}
-   * @private
-   */
-  this.hitDetectionTextures_ = [];
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.vertices_ = [];
-
-  /**
-   * @type {ol.webgl.Buffer}
-   * @private
-   */
-  this.verticesBuffer_ = null;
-
-  /**
-   * Start index per feature (the index).
-   * @type {Array.<number>}
-   * @private
-   */
-  this.startIndices_ = [];
-
-  /**
-   * Start index per feature (the feature).
-   * @type {Array.<ol.Feature|ol.render.Feature>}
-   * @private
-   */
-  this.startIndicesFeature_ = [];
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.width_ = undefined;
-};
-ol.inherits(ol.render.webgl.ImageReplay, ol.render.VectorContext);
-
-
-/**
- * @param {ol.webgl.Context} context WebGL context.
- * @return {function()} Delete resources function.
- */
-ol.render.webgl.ImageReplay.prototype.getDeleteResourcesFunction = function(context) {
-  // We only delete our stuff here. The shaders and the program may
-  // be used by other ImageReplay instances (for other layers). And
-  // they will be deleted when disposing of the ol.webgl.Context
-  // object.
-  ol.DEBUG && console.assert(this.verticesBuffer_,
-      'verticesBuffer must not be null');
-  ol.DEBUG && console.assert(this.indicesBuffer_,
-      'indicesBuffer must not be null');
-  var verticesBuffer = this.verticesBuffer_;
-  var indicesBuffer = this.indicesBuffer_;
-  var textures = this.textures_;
-  var hitDetectionTextures = this.hitDetectionTextures_;
-  var gl = context.getGL();
-  return function() {
-    if (!gl.isContextLost()) {
-      var i, ii;
-      for (i = 0, ii = textures.length; i < ii; ++i) {
-        gl.deleteTexture(textures[i]);
-      }
-      for (i = 0, ii = hitDetectionTextures.length; i < ii; ++i) {
-        gl.deleteTexture(hitDetectionTextures[i]);
-      }
-    }
-    context.deleteBuffer(verticesBuffer);
-    context.deleteBuffer(indicesBuffer);
-  };
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @return {number} My end.
- * @private
- */
-ol.render.webgl.ImageReplay.prototype.drawCoordinates_ = function(flatCoordinates, offset, end, stride) {
-  ol.DEBUG && console.assert(this.anchorX_ !== undefined, 'anchorX is defined');
-  ol.DEBUG && console.assert(this.anchorY_ !== undefined, 'anchorY is defined');
-  ol.DEBUG && console.assert(this.height_ !== undefined, 'height is defined');
-  ol.DEBUG && console.assert(this.imageHeight_ !== undefined,
-      'imageHeight is defined');
-  ol.DEBUG && console.assert(this.imageWidth_ !== undefined, 'imageWidth is defined');
-  ol.DEBUG && console.assert(this.opacity_ !== undefined, 'opacity is defined');
-  ol.DEBUG && console.assert(this.originX_ !== undefined, 'originX is defined');
-  ol.DEBUG && console.assert(this.originY_ !== undefined, 'originY is defined');
-  ol.DEBUG && console.assert(this.rotateWithView_ !== undefined,
-      'rotateWithView is defined');
-  ol.DEBUG && console.assert(this.rotation_ !== undefined, 'rotation is defined');
-  ol.DEBUG && console.assert(this.scale_ !== undefined, 'scale is defined');
-  ol.DEBUG && console.assert(this.width_ !== undefined, 'width is defined');
-  var anchorX = /** @type {number} */ (this.anchorX_);
-  var anchorY = /** @type {number} */ (this.anchorY_);
-  var height = /** @type {number} */ (this.height_);
-  var imageHeight = /** @type {number} */ (this.imageHeight_);
-  var imageWidth = /** @type {number} */ (this.imageWidth_);
-  var opacity = /** @type {number} */ (this.opacity_);
-  var originX = /** @type {number} */ (this.originX_);
-  var originY = /** @type {number} */ (this.originY_);
-  var rotateWithView = this.rotateWithView_ ? 1.0 : 0.0;
-  var rotation = /** @type {number} */ (this.rotation_);
-  var scale = /** @type {number} */ (this.scale_);
-  var width = /** @type {number} */ (this.width_);
-  var cos = Math.cos(rotation);
-  var sin = Math.sin(rotation);
-  var numIndices = this.indices_.length;
-  var numVertices = this.vertices_.length;
-  var i, n, offsetX, offsetY, x, y;
-  for (i = offset; i < end; i += stride) {
-    x = flatCoordinates[i] - this.origin_[0];
-    y = flatCoordinates[i + 1] - this.origin_[1];
-
-    // There are 4 vertices per [x, y] point, one for each corner of the
-    // rectangle we're going to draw. We'd use 1 vertex per [x, y] point if
-    // WebGL supported Geometry Shaders (which can emit new vertices), but that
-    // is not currently the case.
-    //
-    // And each vertex includes 8 values: the x and y coordinates, the x and
-    // y offsets used to calculate the position of the corner, the u and
-    // v texture coordinates for the corner, the opacity, and whether the
-    // the image should be rotated with the view (rotateWithView).
-
-    n = numVertices / 8;
-
-    // bottom-left corner
-    offsetX = -scale * anchorX;
-    offsetY = -scale * (height - anchorY);
-    this.vertices_[numVertices++] = x;
-    this.vertices_[numVertices++] = y;
-    this.vertices_[numVertices++] = offsetX * cos - offsetY * sin;
-    this.vertices_[numVertices++] = offsetX * sin + offsetY * cos;
-    this.vertices_[numVertices++] = originX / imageWidth;
-    this.vertices_[numVertices++] = (originY + height) / imageHeight;
-    this.vertices_[numVertices++] = opacity;
-    this.vertices_[numVertices++] = rotateWithView;
-
-    // bottom-right corner
-    offsetX = scale * (width - anchorX);
-    offsetY = -scale * (height - anchorY);
-    this.vertices_[numVertices++] = x;
-    this.vertices_[numVertices++] = y;
-    this.vertices_[numVertices++] = offsetX * cos - offsetY * sin;
-    this.vertices_[numVertices++] = offsetX * sin + offsetY * cos;
-    this.vertices_[numVertices++] = (originX + width) / imageWidth;
-    this.vertices_[numVertices++] = (originY + height) / imageHeight;
-    this.vertices_[numVertices++] = opacity;
-    this.vertices_[numVertices++] = rotateWithView;
-
-    // top-right corner
-    offsetX = scale * (width - anchorX);
-    offsetY = scale * anchorY;
-    this.vertices_[numVertices++] = x;
-    this.vertices_[numVertices++] = y;
-    this.vertices_[numVertices++] = offsetX * cos - offsetY * sin;
-    this.vertices_[numVertices++] = offsetX * sin + offsetY * cos;
-    this.vertices_[numVertices++] = (originX + width) / imageWidth;
-    this.vertices_[numVertices++] = originY / imageHeight;
-    this.vertices_[numVertices++] = opacity;
-    this.vertices_[numVertices++] = rotateWithView;
-
-    // top-left corner
-    offsetX = -scale * anchorX;
-    offsetY = scale * anchorY;
-    this.vertices_[numVertices++] = x;
-    this.vertices_[numVertices++] = y;
-    this.vertices_[numVertices++] = offsetX * cos - offsetY * sin;
-    this.vertices_[numVertices++] = offsetX * sin + offsetY * cos;
-    this.vertices_[numVertices++] = originX / imageWidth;
-    this.vertices_[numVertices++] = originY / imageHeight;
-    this.vertices_[numVertices++] = opacity;
-    this.vertices_[numVertices++] = rotateWithView;
-
-    this.indices_[numIndices++] = n;
-    this.indices_[numIndices++] = n + 1;
-    this.indices_[numIndices++] = n + 2;
-    this.indices_[numIndices++] = n;
-    this.indices_[numIndices++] = n + 2;
-    this.indices_[numIndices++] = n + 3;
-  }
-
-  return numVertices;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.ImageReplay.prototype.drawMultiPoint = function(multiPointGeometry, feature) {
-  this.startIndices_.push(this.indices_.length);
-  this.startIndicesFeature_.push(feature);
-  var flatCoordinates = multiPointGeometry.getFlatCoordinates();
-  var stride = multiPointGeometry.getStride();
-  this.drawCoordinates_(
-      flatCoordinates, 0, flatCoordinates.length, stride);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.ImageReplay.prototype.drawPoint = function(pointGeometry, feature) {
-  this.startIndices_.push(this.indices_.length);
-  this.startIndicesFeature_.push(feature);
-  var flatCoordinates = pointGeometry.getFlatCoordinates();
-  var stride = pointGeometry.getStride();
-  this.drawCoordinates_(
-      flatCoordinates, 0, flatCoordinates.length, stride);
-};
-
-
-/**
- * @param {ol.webgl.Context} context Context.
- */
-ol.render.webgl.ImageReplay.prototype.finish = function(context) {
-  var gl = context.getGL();
-
-  this.groupIndices_.push(this.indices_.length);
-  ol.DEBUG && console.assert(this.images_.length === this.groupIndices_.length,
-      'number of images and groupIndices match');
-  this.hitDetectionGroupIndices_.push(this.indices_.length);
-  ol.DEBUG && console.assert(this.hitDetectionImages_.length ===
-      this.hitDetectionGroupIndices_.length,
-      'number of hitDetectionImages and hitDetectionGroupIndices match');
-
-  // create, bind, and populate the vertices buffer
-  this.verticesBuffer_ = new ol.webgl.Buffer(this.vertices_);
-  context.bindBuffer(ol.webgl.ARRAY_BUFFER, this.verticesBuffer_);
-
-  var indices = this.indices_;
-  var bits = context.hasOESElementIndexUint ? 32 : 16;
-  ol.DEBUG && console.assert(indices[indices.length - 1] < Math.pow(2, bits),
-      'Too large element index detected [%s] (OES_element_index_uint "%s")',
-      indices[indices.length - 1], context.hasOESElementIndexUint);
-
-  // create, bind, and populate the indices buffer
-  this.indicesBuffer_ = new ol.webgl.Buffer(indices);
-  context.bindBuffer(ol.webgl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer_);
-
-  // create textures
-  /** @type {Object.<string, WebGLTexture>} */
-  var texturePerImage = {};
-
-  this.createTextures_(this.textures_, this.images_, texturePerImage, gl);
-  ol.DEBUG && console.assert(this.textures_.length === this.groupIndices_.length,
-      'number of textures and groupIndices match');
-
-  this.createTextures_(this.hitDetectionTextures_, this.hitDetectionImages_,
-      texturePerImage, gl);
-  ol.DEBUG && console.assert(this.hitDetectionTextures_.length ===
-      this.hitDetectionGroupIndices_.length,
-      'number of hitDetectionTextures and hitDetectionGroupIndices match');
-
-  this.anchorX_ = undefined;
-  this.anchorY_ = undefined;
-  this.height_ = undefined;
-  this.images_ = null;
-  this.hitDetectionImages_ = null;
-  this.imageHeight_ = undefined;
-  this.imageWidth_ = undefined;
-  this.indices_ = null;
-  this.opacity_ = undefined;
-  this.originX_ = undefined;
-  this.originY_ = undefined;
-  this.rotateWithView_ = undefined;
-  this.rotation_ = undefined;
-  this.scale_ = undefined;
-  this.vertices_ = null;
-  this.width_ = undefined;
-};
-
-
-/**
- * @private
- * @param {Array.<WebGLTexture>} textures Textures.
- * @param {Array.<HTMLCanvasElement|HTMLImageElement|HTMLVideoElement>} images
- *    Images.
- * @param {Object.<string, WebGLTexture>} texturePerImage Texture cache.
- * @param {WebGLRenderingContext} gl Gl.
- */
-ol.render.webgl.ImageReplay.prototype.createTextures_ = function(textures, images, texturePerImage, gl) {
-  ol.DEBUG && console.assert(textures.length === 0,
-      'upon creation, textures is empty');
-
-  var texture, image, uid, i;
-  var ii = images.length;
-  for (i = 0; i < ii; ++i) {
-    image = images[i];
-
-    uid = ol.getUid(image).toString();
-    if (uid in texturePerImage) {
-      texture = texturePerImage[uid];
-    } else {
-      texture = ol.webgl.Context.createTexture(
-          gl, image, ol.webgl.CLAMP_TO_EDGE, ol.webgl.CLAMP_TO_EDGE);
-      texturePerImage[uid] = texture;
-    }
-    textures[i] = texture;
-  }
-};
-
-
-/**
- * @param {ol.webgl.Context} context Context.
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {ol.Size} size Size.
- * @param {number} pixelRatio Pixel ratio.
- * @param {number} opacity Global opacity.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.
- * @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.
- * @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting
- *  this extent are checked.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.webgl.ImageReplay.prototype.replay = function(context,
-    center, resolution, rotation, size, pixelRatio,
-    opacity, skippedFeaturesHash,
-    featureCallback, oneByOne, opt_hitExtent) {
-  var gl = context.getGL();
-
-  // bind the vertices buffer
-  ol.DEBUG && console.assert(this.verticesBuffer_,
-      'verticesBuffer must not be null');
-  context.bindBuffer(ol.webgl.ARRAY_BUFFER, this.verticesBuffer_);
-
-  // bind the indices buffer
-  ol.DEBUG && console.assert(this.indicesBuffer_,
-      'indecesBuffer must not be null');
-  context.bindBuffer(ol.webgl.ELEMENT_ARRAY_BUFFER, this.indicesBuffer_);
-
-  // get the program
-  var fragmentShader = ol.render.webgl.imagereplay.defaultshader.fragment;
-  var vertexShader = ol.render.webgl.imagereplay.defaultshader.vertex;
-  var program = context.getProgram(fragmentShader, vertexShader);
-
-  // get the locations
-  var locations;
-  if (!this.defaultLocations_) {
-    locations =
-        new ol.render.webgl.imagereplay.defaultshader.Locations(gl, program);
-    this.defaultLocations_ = locations;
-  } else {
-    locations = this.defaultLocations_;
-  }
-
-  // use the program (FIXME: use the return value)
-  context.useProgram(program);
-
-  // enable the vertex attrib arrays
-  gl.enableVertexAttribArray(locations.a_position);
-  gl.vertexAttribPointer(locations.a_position, 2, ol.webgl.FLOAT,
-      false, 32, 0);
-
-  gl.enableVertexAttribArray(locations.a_offsets);
-  gl.vertexAttribPointer(locations.a_offsets, 2, ol.webgl.FLOAT,
-      false, 32, 8);
-
-  gl.enableVertexAttribArray(locations.a_texCoord);
-  gl.vertexAttribPointer(locations.a_texCoord, 2, ol.webgl.FLOAT,
-      false, 32, 16);
-
-  gl.enableVertexAttribArray(locations.a_opacity);
-  gl.vertexAttribPointer(locations.a_opacity, 1, ol.webgl.FLOAT,
-      false, 32, 24);
-
-  gl.enableVertexAttribArray(locations.a_rotateWithView);
-  gl.vertexAttribPointer(locations.a_rotateWithView, 1, ol.webgl.FLOAT,
-      false, 32, 28);
-
-  // set the "uniform" values
-  var projectionMatrix = ol.transform.reset(this.projectionMatrix_);
-  ol.transform.scale(projectionMatrix, 2 / (resolution * size[0]), 2 / (resolution * size[1]));
-  ol.transform.rotate(projectionMatrix, -rotation);
-  ol.transform.translate(projectionMatrix, -(center[0] - this.origin_[0]), -(center[1] - this.origin_[1]));
-
-  var offsetScaleMatrix = ol.transform.reset(this.offsetScaleMatrix_);
-  ol.transform.scale(offsetScaleMatrix, 2 / size[0], 2 / size[1]);
-
-  var offsetRotateMatrix = ol.transform.reset(this.offsetRotateMatrix_);
-  if (rotation !== 0) {
-    ol.transform.rotate(offsetRotateMatrix, -rotation);
-  }
-
-  gl.uniformMatrix4fv(locations.u_projectionMatrix, false,
-      ol.vec.Mat4.fromTransform(this.tmpMat4_, projectionMatrix));
-  gl.uniformMatrix4fv(locations.u_offsetScaleMatrix, false,
-      ol.vec.Mat4.fromTransform(this.tmpMat4_, offsetScaleMatrix));
-  gl.uniformMatrix4fv(locations.u_offsetRotateMatrix, false,
-      ol.vec.Mat4.fromTransform(this.tmpMat4_, offsetRotateMatrix));
-  gl.uniform1f(locations.u_opacity, opacity);
-
-  // draw!
-  var result;
-  if (featureCallback === undefined) {
-    this.drawReplay_(gl, context, skippedFeaturesHash,
-        this.textures_, this.groupIndices_);
-  } else {
-    // draw feature by feature for the hit-detection
-    result = this.drawHitDetectionReplay_(gl, context, skippedFeaturesHash,
-        featureCallback, oneByOne, opt_hitExtent);
-  }
-
-  // disable the vertex attrib arrays
-  gl.disableVertexAttribArray(locations.a_position);
-  gl.disableVertexAttribArray(locations.a_offsets);
-  gl.disableVertexAttribArray(locations.a_texCoord);
-  gl.disableVertexAttribArray(locations.a_opacity);
-  gl.disableVertexAttribArray(locations.a_rotateWithView);
-
-  return result;
-};
-
-
-/**
- * @private
- * @param {WebGLRenderingContext} gl gl.
- * @param {ol.webgl.Context} context Context.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @param {Array.<WebGLTexture>} textures Textures.
- * @param {Array.<number>} groupIndices Texture group indices.
- */
-ol.render.webgl.ImageReplay.prototype.drawReplay_ = function(gl, context, skippedFeaturesHash, textures, groupIndices) {
-  ol.DEBUG && console.assert(textures.length === groupIndices.length,
-      'number of textures and groupIndeces match');
-  var elementType = context.hasOESElementIndexUint ?
-      ol.webgl.UNSIGNED_INT : ol.webgl.UNSIGNED_SHORT;
-  var elementSize = context.hasOESElementIndexUint ? 4 : 2;
-
-  if (!ol.obj.isEmpty(skippedFeaturesHash)) {
-    this.drawReplaySkipping_(
-        gl, skippedFeaturesHash, textures, groupIndices,
-        elementType, elementSize);
-  } else {
-    var i, ii, start;
-    for (i = 0, ii = textures.length, start = 0; i < ii; ++i) {
-      gl.bindTexture(ol.webgl.TEXTURE_2D, textures[i]);
-      var end = groupIndices[i];
-      this.drawElements_(gl, start, end, elementType, elementSize);
-      start = end;
-    }
-  }
-};
-
-
-/**
- * Draw the replay while paying attention to skipped features.
- *
- * This functions creates groups of features that can be drawn to together,
- * so that the number of `drawElements` calls is minimized.
- *
- * For example given the following texture groups:
- *
- *    Group 1: A B C
- *    Group 2: D [E] F G
- *
- * If feature E should be skipped, the following `drawElements` calls will be
- * made:
- *
- *    drawElements with feature A, B and C
- *    drawElements with feature D
- *    drawElements with feature F and G
- *
- * @private
- * @param {WebGLRenderingContext} gl gl.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @param {Array.<WebGLTexture>} textures Textures.
- * @param {Array.<number>} groupIndices Texture group indices.
- * @param {number} elementType Element type.
- * @param {number} elementSize Element Size.
- */
-ol.render.webgl.ImageReplay.prototype.drawReplaySkipping_ = function(gl, skippedFeaturesHash, textures, groupIndices,
-    elementType, elementSize) {
-  var featureIndex = 0;
-
-  var i, ii;
-  for (i = 0, ii = textures.length; i < ii; ++i) {
-    gl.bindTexture(ol.webgl.TEXTURE_2D, textures[i]);
-    var groupStart = (i > 0) ? groupIndices[i - 1] : 0;
-    var groupEnd = groupIndices[i];
-
-    var start = groupStart;
-    var end = groupStart;
-    while (featureIndex < this.startIndices_.length &&
-        this.startIndices_[featureIndex] <= groupEnd) {
-      var feature = this.startIndicesFeature_[featureIndex];
-
-      var featureUid = ol.getUid(feature).toString();
-      if (skippedFeaturesHash[featureUid] !== undefined) {
-        // feature should be skipped
-        if (start !== end) {
-          // draw the features so far
-          this.drawElements_(gl, start, end, elementType, elementSize);
-        }
-        // continue with the next feature
-        start = (featureIndex === this.startIndices_.length - 1) ?
-            groupEnd : this.startIndices_[featureIndex + 1];
-        end = start;
-      } else {
-        // the feature is not skipped, augment the end index
-        end = (featureIndex === this.startIndices_.length - 1) ?
-            groupEnd : this.startIndices_[featureIndex + 1];
-      }
-      featureIndex++;
-    }
-
-    if (start !== end) {
-      // draw the remaining features (in case there was no skipped feature
-      // in this texture group, all features of a group are drawn together)
-      this.drawElements_(gl, start, end, elementType, elementSize);
-    }
-  }
-};
-
-
-/**
- * @private
- * @param {WebGLRenderingContext} gl gl.
- * @param {number} start Start index.
- * @param {number} end End index.
- * @param {number} elementType Element type.
- * @param {number} elementSize Element Size.
- */
-ol.render.webgl.ImageReplay.prototype.drawElements_ = function(
-    gl, start, end, elementType, elementSize) {
-  var numItems = end - start;
-  var offsetInBytes = start * elementSize;
-  gl.drawElements(ol.webgl.TRIANGLES, numItems, elementType, offsetInBytes);
-};
-
-
-/**
- * @private
- * @param {WebGLRenderingContext} gl gl.
- * @param {ol.webgl.Context} context Context.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.
- * @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.
- * @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting
- *  this extent are checked.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.webgl.ImageReplay.prototype.drawHitDetectionReplay_ = function(gl, context, skippedFeaturesHash, featureCallback, oneByOne,
-    opt_hitExtent) {
-  if (!oneByOne) {
-    // draw all hit-detection features in "once" (by texture group)
-    return this.drawHitDetectionReplayAll_(gl, context,
-        skippedFeaturesHash, featureCallback);
-  } else {
-    // draw hit-detection features one by one
-    return this.drawHitDetectionReplayOneByOne_(gl, context,
-        skippedFeaturesHash, featureCallback, opt_hitExtent);
-  }
-};
-
-
-/**
- * @private
- * @param {WebGLRenderingContext} gl gl.
- * @param {ol.webgl.Context} context Context.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.webgl.ImageReplay.prototype.drawHitDetectionReplayAll_ = function(gl, context, skippedFeaturesHash, featureCallback) {
-  gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
-  this.drawReplay_(gl, context, skippedFeaturesHash,
-      this.hitDetectionTextures_, this.hitDetectionGroupIndices_);
-
-  var result = featureCallback(null);
-  if (result) {
-    return result;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @private
- * @param {WebGLRenderingContext} gl gl.
- * @param {ol.webgl.Context} context Context.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.
- * @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting
- *  this extent are checked.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.webgl.ImageReplay.prototype.drawHitDetectionReplayOneByOne_ = function(gl, context, skippedFeaturesHash, featureCallback,
-    opt_hitExtent) {
-  ol.DEBUG && console.assert(this.hitDetectionTextures_.length ===
-      this.hitDetectionGroupIndices_.length,
-      'number of hitDetectionTextures and hitDetectionGroupIndices match');
-  var elementType = context.hasOESElementIndexUint ?
-      ol.webgl.UNSIGNED_INT : ol.webgl.UNSIGNED_SHORT;
-  var elementSize = context.hasOESElementIndexUint ? 4 : 2;
-
-  var i, groupStart, start, end, feature, featureUid;
-  var featureIndex = this.startIndices_.length - 1;
-  for (i = this.hitDetectionTextures_.length - 1; i >= 0; --i) {
-    gl.bindTexture(ol.webgl.TEXTURE_2D, this.hitDetectionTextures_[i]);
-    groupStart = (i > 0) ? this.hitDetectionGroupIndices_[i - 1] : 0;
-    end = this.hitDetectionGroupIndices_[i];
-
-    // draw all features for this texture group
-    while (featureIndex >= 0 &&
-        this.startIndices_[featureIndex] >= groupStart) {
-      start = this.startIndices_[featureIndex];
-      feature = this.startIndicesFeature_[featureIndex];
-      featureUid = ol.getUid(feature).toString();
-
-      if (skippedFeaturesHash[featureUid] === undefined &&
-          feature.getGeometry() &&
-          (opt_hitExtent === undefined || ol.extent.intersects(
-              /** @type {Array<number>} */ (opt_hitExtent),
-              feature.getGeometry().getExtent()))) {
-        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
-        this.drawElements_(gl, start, end, elementType, elementSize);
-
-        var result = featureCallback(feature);
-        if (result) {
-          return result;
-        }
-      }
-
-      end = start;
-      featureIndex--;
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @inheritDoc
- * @abstract
- */
-ol.render.webgl.ImageReplay.prototype.setFillStrokeStyle = function() {};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.ImageReplay.prototype.setImageStyle = function(imageStyle) {
-  var anchor = imageStyle.getAnchor();
-  var image = imageStyle.getImage(1);
-  var imageSize = imageStyle.getImageSize();
-  var hitDetectionImage = imageStyle.getHitDetectionImage(1);
-  var hitDetectionImageSize = imageStyle.getHitDetectionImageSize();
-  var opacity = imageStyle.getOpacity();
-  var origin = imageStyle.getOrigin();
-  var rotateWithView = imageStyle.getRotateWithView();
-  var rotation = imageStyle.getRotation();
-  var size = imageStyle.getSize();
-  var scale = imageStyle.getScale();
-  ol.DEBUG && console.assert(anchor, 'imageStyle anchor is not null');
-  ol.DEBUG && console.assert(image, 'imageStyle image is not null');
-  ol.DEBUG && console.assert(imageSize,
-      'imageStyle imageSize is not null');
-  ol.DEBUG && console.assert(hitDetectionImage,
-      'imageStyle hitDetectionImage is not null');
-  ol.DEBUG && console.assert(hitDetectionImageSize,
-      'imageStyle hitDetectionImageSize is not null');
-  ol.DEBUG && console.assert(opacity !== undefined, 'imageStyle opacity is defined');
-  ol.DEBUG && console.assert(origin, 'imageStyle origin is not null');
-  ol.DEBUG && console.assert(rotateWithView !== undefined,
-      'imageStyle rotateWithView is defined');
-  ol.DEBUG && console.assert(rotation !== undefined, 'imageStyle rotation is defined');
-  ol.DEBUG && console.assert(size, 'imageStyle size is not null');
-  ol.DEBUG && console.assert(scale !== undefined, 'imageStyle scale is defined');
-
-  var currentImage;
-  if (this.images_.length === 0) {
-    this.images_.push(image);
-  } else {
-    currentImage = this.images_[this.images_.length - 1];
-    if (ol.getUid(currentImage) != ol.getUid(image)) {
-      this.groupIndices_.push(this.indices_.length);
-      ol.DEBUG && console.assert(this.groupIndices_.length === this.images_.length,
-          'number of groupIndices and images match');
-      this.images_.push(image);
-    }
-  }
-
-  if (this.hitDetectionImages_.length === 0) {
-    this.hitDetectionImages_.push(hitDetectionImage);
-  } else {
-    currentImage =
-        this.hitDetectionImages_[this.hitDetectionImages_.length - 1];
-    if (ol.getUid(currentImage) != ol.getUid(hitDetectionImage)) {
-      this.hitDetectionGroupIndices_.push(this.indices_.length);
-      ol.DEBUG && console.assert(this.hitDetectionGroupIndices_.length ===
-          this.hitDetectionImages_.length,
-          'number of hitDetectionGroupIndices and hitDetectionImages match');
-      this.hitDetectionImages_.push(hitDetectionImage);
-    }
-  }
-
-  this.anchorX_ = anchor[0];
-  this.anchorY_ = anchor[1];
-  this.height_ = size[1];
-  this.imageHeight_ = imageSize[1];
-  this.imageWidth_ = imageSize[0];
-  this.opacity_ = opacity;
-  this.originX_ = origin[0];
-  this.originY_ = origin[1];
-  this.rotation_ = rotation;
-  this.rotateWithView_ = rotateWithView;
-  this.scale_ = scale;
-  this.width_ = size[0];
-};
-
-
-/**
- * @constructor
- * @extends {ol.render.ReplayGroup}
- * @param {number} tolerance Tolerance.
- * @param {ol.Extent} maxExtent Max extent.
- * @param {number=} opt_renderBuffer Render buffer.
- * @struct
- */
-ol.render.webgl.ReplayGroup = function(tolerance, maxExtent, opt_renderBuffer) {
-  ol.render.ReplayGroup.call(this);
-
-  /**
-   * @type {ol.Extent}
-   * @private
-   */
-  this.maxExtent_ = maxExtent;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.tolerance_ = tolerance;
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.renderBuffer_ = opt_renderBuffer;
-
-  /**
-   * ImageReplay only is supported at this point.
-   * @type {Object.<ol.render.ReplayType, ol.render.webgl.ImageReplay>}
-   * @private
-   */
-  this.replays_ = {};
-
-};
-ol.inherits(ol.render.webgl.ReplayGroup, ol.render.ReplayGroup);
-
-
-/**
- * @param {ol.webgl.Context} context WebGL context.
- * @return {function()} Delete resources function.
- */
-ol.render.webgl.ReplayGroup.prototype.getDeleteResourcesFunction = function(context) {
-  var functions = [];
-  var replayKey;
-  for (replayKey in this.replays_) {
-    functions.push(
-        this.replays_[replayKey].getDeleteResourcesFunction(context));
-  }
-  return function() {
-    var length = functions.length;
-    var result;
-    for (var i = 0; i < length; i++) {
-      result = functions[i].apply(this, arguments);
-    }
-    return result;
-  };
-};
-
-
-/**
- * @param {ol.webgl.Context} context Context.
- */
-ol.render.webgl.ReplayGroup.prototype.finish = function(context) {
-  var replayKey;
-  for (replayKey in this.replays_) {
-    this.replays_[replayKey].finish(context);
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.ReplayGroup.prototype.getReplay = function(zIndex, replayType) {
-  var replay = this.replays_[replayType];
-  if (replay === undefined) {
-    var constructor = ol.render.webgl.BATCH_CONSTRUCTORS_[replayType];
-    replay = new constructor(this.tolerance_, this.maxExtent_);
-    this.replays_[replayType] = replay;
-  }
-  return replay;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.ReplayGroup.prototype.isEmpty = function() {
-  return ol.obj.isEmpty(this.replays_);
-};
-
-
-/**
- * @param {ol.webgl.Context} context Context.
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {ol.Size} size Size.
- * @param {number} pixelRatio Pixel ratio.
- * @param {number} opacity Global opacity.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- */
-ol.render.webgl.ReplayGroup.prototype.replay = function(context,
-    center, resolution, rotation, size, pixelRatio,
-    opacity, skippedFeaturesHash) {
-  var i, ii, replay;
-  for (i = 0, ii = ol.render.replay.ORDER.length; i < ii; ++i) {
-    replay = this.replays_[ol.render.replay.ORDER[i]];
-    if (replay !== undefined) {
-      replay.replay(context,
-          center, resolution, rotation, size, pixelRatio,
-          opacity, skippedFeaturesHash,
-          undefined, false);
-    }
-  }
-};
-
-
-/**
- * @private
- * @param {ol.webgl.Context} context Context.
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {ol.Size} size Size.
- * @param {number} pixelRatio Pixel ratio.
- * @param {number} opacity Global opacity.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T|undefined} featureCallback Feature callback.
- * @param {boolean} oneByOne Draw features one-by-one for the hit-detecion.
- * @param {ol.Extent=} opt_hitExtent Hit extent: Only features intersecting
- *  this extent are checked.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.webgl.ReplayGroup.prototype.replayHitDetection_ = function(context,
-    center, resolution, rotation, size, pixelRatio, opacity,
-    skippedFeaturesHash, featureCallback, oneByOne, opt_hitExtent) {
-  var i, replay, result;
-  for (i = ol.render.replay.ORDER.length - 1; i >= 0; --i) {
-    replay = this.replays_[ol.render.replay.ORDER[i]];
-    if (replay !== undefined) {
-      result = replay.replay(context,
-          center, resolution, rotation, size, pixelRatio, opacity,
-          skippedFeaturesHash, featureCallback, oneByOne, opt_hitExtent);
-      if (result) {
-        return result;
-      }
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {ol.webgl.Context} context Context.
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {ol.Size} size Size.
- * @param {number} pixelRatio Pixel ratio.
- * @param {number} opacity Global opacity.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @param {function((ol.Feature|ol.render.Feature)): T|undefined} callback Feature callback.
- * @return {T|undefined} Callback result.
- * @template T
- */
-ol.render.webgl.ReplayGroup.prototype.forEachFeatureAtCoordinate = function(
-    coordinate, context, center, resolution, rotation, size, pixelRatio,
-    opacity, skippedFeaturesHash,
-    callback) {
-  var gl = context.getGL();
-  gl.bindFramebuffer(
-      gl.FRAMEBUFFER, context.getHitDetectionFramebuffer());
-
-
-  /**
-   * @type {ol.Extent}
-   */
-  var hitExtent;
-  if (this.renderBuffer_ !== undefined) {
-    // build an extent around the coordinate, so that only features that
-    // intersect this extent are checked
-    hitExtent = ol.extent.buffer(
-        ol.extent.createOrUpdateFromCoordinate(coordinate),
-        resolution * this.renderBuffer_);
-  }
-
-  return this.replayHitDetection_(context,
-      coordinate, resolution, rotation, ol.render.webgl.HIT_DETECTION_SIZE_,
-      pixelRatio, opacity, skippedFeaturesHash,
-      /**
-       * @param {ol.Feature|ol.render.Feature} feature Feature.
-       * @return {?} Callback result.
-       */
-      function(feature) {
-        var imageData = new Uint8Array(4);
-        gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, imageData);
-
-        if (imageData[3] > 0) {
-          var result = callback(feature);
-          if (result) {
-            return result;
-          }
-        }
-      }, true, hitExtent);
-};
-
-
-/**
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {ol.webgl.Context} context Context.
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {ol.Size} size Size.
- * @param {number} pixelRatio Pixel ratio.
- * @param {number} opacity Global opacity.
- * @param {Object.<string, boolean>} skippedFeaturesHash Ids of features
- *  to skip.
- * @return {boolean} Is there a feature at the given coordinate?
- */
-ol.render.webgl.ReplayGroup.prototype.hasFeatureAtCoordinate = function(
-    coordinate, context, center, resolution, rotation, size, pixelRatio,
-    opacity, skippedFeaturesHash) {
-  var gl = context.getGL();
-  gl.bindFramebuffer(
-      gl.FRAMEBUFFER, context.getHitDetectionFramebuffer());
-
-  var hasFeature = this.replayHitDetection_(context,
-      coordinate, resolution, rotation, ol.render.webgl.HIT_DETECTION_SIZE_,
-      pixelRatio, opacity, skippedFeaturesHash,
-      /**
-       * @param {ol.Feature|ol.render.Feature} feature Feature.
-       * @return {boolean} Is there a feature?
-       */
-      function(feature) {
-        var imageData = new Uint8Array(4);
-        gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, imageData);
-        return imageData[3] > 0;
-      }, false);
-
-  return hasFeature !== undefined;
-};
-
-
-/**
- * @const
- * @private
- * @type {Object.<ol.render.ReplayType,
- *                function(new: ol.render.webgl.ImageReplay, number,
- *                ol.Extent)>}
- */
-ol.render.webgl.BATCH_CONSTRUCTORS_ = {
-  'Image': ol.render.webgl.ImageReplay
-};
-
-
-/**
- * @const
- * @private
- * @type {Array.<number>}
- */
-ol.render.webgl.HIT_DETECTION_SIZE_ = [1, 1];
-
-goog.provide('ol.render.webgl.Immediate');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.render.ReplayType');
-goog.require('ol.render.VectorContext');
-goog.require('ol.render.webgl.ReplayGroup');
-
-
-/**
- * @constructor
- * @extends {ol.render.VectorContext}
- * @param {ol.webgl.Context} context Context.
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} rotation Rotation.
- * @param {ol.Size} size Size.
- * @param {ol.Extent} extent Extent.
- * @param {number} pixelRatio Pixel ratio.
- * @struct
- */
-ol.render.webgl.Immediate = function(context, center, resolution, rotation, size, extent, pixelRatio) {
-  ol.render.VectorContext.call(this);
-
-  /**
-   * @private
-   */
-  this.context_ = context;
-
-  /**
-   * @private
-   */
-  this.center_ = center;
-
-  /**
-   * @private
-   */
-  this.extent_ = extent;
-
-  /**
-   * @private
-   */
-  this.pixelRatio_ = pixelRatio;
-
-  /**
-   * @private
-   */
-  this.size_ = size;
-
-  /**
-   * @private
-   */
-  this.rotation_ = rotation;
-
-  /**
-   * @private
-   */
-  this.resolution_ = resolution;
-
-  /**
-   * @private
-   * @type {ol.style.Image}
-   */
-  this.imageStyle_ = null;
-
-};
-ol.inherits(ol.render.webgl.Immediate, ol.render.VectorContext);
-
-
-/**
- * Set the rendering style.  Note that since this is an immediate rendering API,
- * any `zIndex` on the provided style will be ignored.
- *
- * @param {ol.style.Style} style The rendering style.
- * @api
- */
-ol.render.webgl.Immediate.prototype.setStyle = function(style) {
-  this.setImageStyle(style.getImage());
-};
-
-
-/**
- * Render a geometry into the canvas.  Call
- * {@link ol.render.webgl.Immediate#setStyle} first to set the rendering style.
- *
- * @param {ol.geom.Geometry|ol.render.Feature} geometry The geometry to render.
- * @api
- */
-ol.render.webgl.Immediate.prototype.drawGeometry = function(geometry) {
-  var type = geometry.getType();
-  switch (type) {
-    case ol.geom.GeometryType.POINT:
-      this.drawPoint(/** @type {ol.geom.Point} */ (geometry), null);
-      break;
-    case ol.geom.GeometryType.MULTI_POINT:
-      this.drawMultiPoint(/** @type {ol.geom.MultiPoint} */ (geometry), null);
-      break;
-    case ol.geom.GeometryType.GEOMETRY_COLLECTION:
-      this.drawGeometryCollection(/** @type {ol.geom.GeometryCollection} */ (geometry), null);
-      break;
-    default:
-      ol.DEBUG && console.assert(false, 'Unsupported geometry type: ' + type);
-  }
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.render.webgl.Immediate.prototype.drawFeature = function(feature, style) {
-  var geometry = style.getGeometryFunction()(feature);
-  if (!geometry ||
-      !ol.extent.intersects(this.extent_, geometry.getExtent())) {
-    return;
-  }
-  this.setStyle(style);
-  ol.DEBUG && console.assert(geometry, 'geometry must be truthy');
-  this.drawGeometry(geometry);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.Immediate.prototype.drawGeometryCollection = function(geometry, data) {
-  var geometries = geometry.getGeometriesArray();
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    this.drawGeometry(geometries[i]);
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.Immediate.prototype.drawPoint = function(geometry, data) {
-  var context = this.context_;
-  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);
-  var replay = /** @type {ol.render.webgl.ImageReplay} */ (
-      replayGroup.getReplay(0, ol.render.ReplayType.IMAGE));
-  replay.setImageStyle(this.imageStyle_);
-  replay.drawPoint(geometry, data);
-  replay.finish(context);
-  // default colors
-  var opacity = 1;
-  var skippedFeatures = {};
-  var featureCallback;
-  var oneByOne = false;
-  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,
-      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,
-      oneByOne);
-  replay.getDeleteResourcesFunction(context)();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.Immediate.prototype.drawMultiPoint = function(geometry, data) {
-  var context = this.context_;
-  var replayGroup = new ol.render.webgl.ReplayGroup(1, this.extent_);
-  var replay = /** @type {ol.render.webgl.ImageReplay} */ (
-      replayGroup.getReplay(0, ol.render.ReplayType.IMAGE));
-  replay.setImageStyle(this.imageStyle_);
-  replay.drawMultiPoint(geometry, data);
-  replay.finish(context);
-  var opacity = 1;
-  var skippedFeatures = {};
-  var featureCallback;
-  var oneByOne = false;
-  replay.replay(this.context_, this.center_, this.resolution_, this.rotation_,
-      this.size_, this.pixelRatio_, opacity, skippedFeatures, featureCallback,
-      oneByOne);
-  replay.getDeleteResourcesFunction(context)();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.render.webgl.Immediate.prototype.setImageStyle = function(imageStyle) {
-  this.imageStyle_ = imageStyle;
-};
-
-// This file is automatically generated, do not edit
-goog.provide('ol.renderer.webgl.defaultmapshader');
-
-goog.require('ol');
-goog.require('ol.webgl.Fragment');
-goog.require('ol.webgl.Vertex');
-
-
-/**
- * @constructor
- * @extends {ol.webgl.Fragment}
- * @struct
- */
-ol.renderer.webgl.defaultmapshader.Fragment = function() {
-  ol.webgl.Fragment.call(this, ol.renderer.webgl.defaultmapshader.Fragment.SOURCE);
-};
-ol.inherits(ol.renderer.webgl.defaultmapshader.Fragment, ol.webgl.Fragment);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.defaultmapshader.Fragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n  vec4 texColor = texture2D(u_texture, v_texCoord);\n  gl_FragColor.rgb = texColor.rgb;\n  gl_FragColor.a = texColor.a * u_opacity;\n}\n';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.defaultmapshader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.defaultmapshader.Fragment.SOURCE = ol.DEBUG ?
-    ol.renderer.webgl.defaultmapshader.Fragment.DEBUG_SOURCE :
-    ol.renderer.webgl.defaultmapshader.Fragment.OPTIMIZED_SOURCE;
-
-
-ol.renderer.webgl.defaultmapshader.fragment = new ol.renderer.webgl.defaultmapshader.Fragment();
-
-
-/**
- * @constructor
- * @extends {ol.webgl.Vertex}
- * @struct
- */
-ol.renderer.webgl.defaultmapshader.Vertex = function() {
-  ol.webgl.Vertex.call(this, ol.renderer.webgl.defaultmapshader.Vertex.SOURCE);
-};
-ol.inherits(ol.renderer.webgl.defaultmapshader.Vertex, ol.webgl.Vertex);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.defaultmapshader.Vertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n  gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n  v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.defaultmapshader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.defaultmapshader.Vertex.SOURCE = ol.DEBUG ?
-    ol.renderer.webgl.defaultmapshader.Vertex.DEBUG_SOURCE :
-    ol.renderer.webgl.defaultmapshader.Vertex.OPTIMIZED_SOURCE;
-
-
-ol.renderer.webgl.defaultmapshader.vertex = new ol.renderer.webgl.defaultmapshader.Vertex();
-
-
-/**
- * @constructor
- * @param {WebGLRenderingContext} gl GL.
- * @param {WebGLProgram} program Program.
- * @struct
- */
-ol.renderer.webgl.defaultmapshader.Locations = function(gl, program) {
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_opacity = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_opacity' : 'f');
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_projectionMatrix = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_projectionMatrix' : 'e');
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_texCoordMatrix = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_texCoordMatrix' : 'd');
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_texture = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_texture' : 'g');
-
-  /**
-   * @type {number}
-   */
-  this.a_position = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_position' : 'b');
-
-  /**
-   * @type {number}
-   */
-  this.a_texCoord = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_texCoord' : 'c');
-};
-
-goog.provide('ol.renderer.webgl.Layer');
-
-goog.require('ol');
-goog.require('ol.render.Event');
-goog.require('ol.render.webgl.Immediate');
-goog.require('ol.renderer.Layer');
-goog.require('ol.renderer.webgl.defaultmapshader');
-goog.require('ol.transform');
-goog.require('ol.vec.Mat4');
-goog.require('ol.webgl');
-goog.require('ol.webgl.Buffer');
-goog.require('ol.webgl.Context');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.Layer}
- * @param {ol.renderer.webgl.Map} mapRenderer Map renderer.
- * @param {ol.layer.Layer} layer Layer.
- */
-ol.renderer.webgl.Layer = function(mapRenderer, layer) {
-
-  ol.renderer.Layer.call(this, layer);
-
-  /**
-   * @protected
-   * @type {ol.renderer.webgl.Map}
-   */
-  this.mapRenderer = mapRenderer;
-
-  /**
-   * @private
-   * @type {ol.webgl.Buffer}
-   */
-  this.arrayBuffer_ = new ol.webgl.Buffer([
-    -1, -1, 0, 0,
-    1, -1, 1, 0,
-    -1, 1, 0, 1,
-    1, 1, 1, 1
-  ]);
-
-  /**
-   * @protected
-   * @type {WebGLTexture}
-   */
-  this.texture = null;
-
-  /**
-   * @protected
-   * @type {WebGLFramebuffer}
-   */
-  this.framebuffer = null;
-
-  /**
-   * @protected
-   * @type {number|undefined}
-   */
-  this.framebufferDimension = undefined;
-
-  /**
-   * @protected
-   * @type {ol.Transform}
-   */
-  this.texCoordMatrix = ol.transform.create();
-
-  /**
-   * @protected
-   * @type {ol.Transform}
-   */
-  this.projectionMatrix = ol.transform.create();
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.tmpMat4_ = ol.vec.Mat4.create();
-
-  /**
-   * @private
-   * @type {ol.renderer.webgl.defaultmapshader.Locations}
-   */
-  this.defaultLocations_ = null;
-
-};
-ol.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer);
-
-
-/**
- * @param {olx.FrameState} frameState Frame state.
- * @param {number} framebufferDimension Framebuffer dimension.
- * @protected
- */
-ol.renderer.webgl.Layer.prototype.bindFramebuffer = function(frameState, framebufferDimension) {
-
-  var gl = this.mapRenderer.getGL();
-
-  if (this.framebufferDimension === undefined ||
-      this.framebufferDimension != framebufferDimension) {
-    /**
-     * @param {WebGLRenderingContext} gl GL.
-     * @param {WebGLFramebuffer} framebuffer Framebuffer.
-     * @param {WebGLTexture} texture Texture.
-     */
-    var postRenderFunction = function(gl, framebuffer, texture) {
-      if (!gl.isContextLost()) {
-        gl.deleteFramebuffer(framebuffer);
-        gl.deleteTexture(texture);
-      }
-    }.bind(null, gl, this.framebuffer, this.texture);
-
-    frameState.postRenderFunctions.push(
-      /** @type {ol.PostRenderFunction} */ (postRenderFunction)
-    );
-
-    var texture = ol.webgl.Context.createEmptyTexture(
-        gl, framebufferDimension, framebufferDimension);
-
-    var framebuffer = gl.createFramebuffer();
-    gl.bindFramebuffer(ol.webgl.FRAMEBUFFER, framebuffer);
-    gl.framebufferTexture2D(ol.webgl.FRAMEBUFFER,
-        ol.webgl.COLOR_ATTACHMENT0, ol.webgl.TEXTURE_2D, texture, 0);
-
-    this.texture = texture;
-    this.framebuffer = framebuffer;
-    this.framebufferDimension = framebufferDimension;
-
-  } else {
-    gl.bindFramebuffer(ol.webgl.FRAMEBUFFER, this.framebuffer);
-  }
-
-};
-
-
-/**
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.LayerState} layerState Layer state.
- * @param {ol.webgl.Context} context Context.
- */
-ol.renderer.webgl.Layer.prototype.composeFrame = function(frameState, layerState, context) {
-
-  this.dispatchComposeEvent_(
-      ol.render.Event.Type.PRECOMPOSE, context, frameState);
-
-  context.bindBuffer(ol.webgl.ARRAY_BUFFER, this.arrayBuffer_);
-
-  var gl = context.getGL();
-
-  var fragmentShader = ol.renderer.webgl.defaultmapshader.fragment;
-  var vertexShader = ol.renderer.webgl.defaultmapshader.vertex;
-
-  var program = context.getProgram(fragmentShader, vertexShader);
-
-  var locations;
-  if (!this.defaultLocations_) {
-    locations =
-        new ol.renderer.webgl.defaultmapshader.Locations(gl, program);
-    this.defaultLocations_ = locations;
-  } else {
-    locations = this.defaultLocations_;
-  }
-
-  if (context.useProgram(program)) {
-    gl.enableVertexAttribArray(locations.a_position);
-    gl.vertexAttribPointer(
-        locations.a_position, 2, ol.webgl.FLOAT, false, 16, 0);
-    gl.enableVertexAttribArray(locations.a_texCoord);
-    gl.vertexAttribPointer(
-        locations.a_texCoord, 2, ol.webgl.FLOAT, false, 16, 8);
-    gl.uniform1i(locations.u_texture, 0);
-  }
-
-  gl.uniformMatrix4fv(locations.u_texCoordMatrix, false,
-      ol.vec.Mat4.fromTransform(this.tmpMat4_, this.getTexCoordMatrix()));
-  gl.uniformMatrix4fv(locations.u_projectionMatrix, false,
-      ol.vec.Mat4.fromTransform(this.tmpMat4_, this.getProjectionMatrix()));
-  gl.uniform1f(locations.u_opacity, layerState.opacity);
-  gl.bindTexture(ol.webgl.TEXTURE_2D, this.getTexture());
-  gl.drawArrays(ol.webgl.TRIANGLE_STRIP, 0, 4);
-
-  this.dispatchComposeEvent_(
-      ol.render.Event.Type.POSTCOMPOSE, context, frameState);
-
-};
-
-
-/**
- * @param {ol.render.Event.Type} type Event type.
- * @param {ol.webgl.Context} context WebGL context.
- * @param {olx.FrameState} frameState Frame state.
- * @private
- */
-ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState) {
-  var layer = this.getLayer();
-  if (layer.hasListener(type)) {
-    var viewState = frameState.viewState;
-    var resolution = viewState.resolution;
-    var pixelRatio = frameState.pixelRatio;
-    var extent = frameState.extent;
-    var center = viewState.center;
-    var rotation = viewState.rotation;
-    var size = frameState.size;
-
-    var render = new ol.render.webgl.Immediate(
-        context, center, resolution, rotation, size, extent, pixelRatio);
-    var composeEvent = new ol.render.Event(
-        type, render, frameState, null, context);
-    layer.dispatchEvent(composeEvent);
-  }
-};
-
-
-/**
- * @return {!ol.Transform} Matrix.
- */
-ol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() {
-  return this.texCoordMatrix;
-};
-
-
-/**
- * @return {WebGLTexture} Texture.
- */
-ol.renderer.webgl.Layer.prototype.getTexture = function() {
-  return this.texture;
-};
-
-
-/**
- * @return {!ol.Transform} Matrix.
- */
-ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() {
-  return this.projectionMatrix;
-};
-
-
-/**
- * Handle webglcontextlost.
- */
-ol.renderer.webgl.Layer.prototype.handleWebGLContextLost = function() {
-  this.texture = null;
-  this.framebuffer = null;
-  this.framebufferDimension = undefined;
-};
-
-
-/**
- * @abstract
- * @param {olx.FrameState} frameState Frame state.
- * @param {ol.LayerState} layerState Layer state.
- * @param {ol.webgl.Context} context Context.
- * @return {boolean} whether composeFrame should be called.
- */
-ol.renderer.webgl.Layer.prototype.prepareFrame = function(frameState, layerState, context) {};
-
-goog.provide('ol.renderer.webgl.ImageLayer');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.dom');
-goog.require('ol.extent');
-goog.require('ol.functions');
-goog.require('ol.proj');
-goog.require('ol.renderer.webgl.Layer');
-goog.require('ol.source.ImageVector');
-goog.require('ol.transform');
-goog.require('ol.webgl');
-goog.require('ol.webgl.Context');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.webgl.Layer}
- * @param {ol.renderer.webgl.Map} mapRenderer Map renderer.
- * @param {ol.layer.Image} imageLayer Tile layer.
- */
-ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) {
-
-  ol.renderer.webgl.Layer.call(this, mapRenderer, imageLayer);
-
-  /**
-   * The last rendered image.
-   * @private
-   * @type {?ol.ImageBase}
-   */
-  this.image_ = null;
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.hitCanvasContext_ = null;
-
-  /**
-   * @private
-   * @type {?ol.Transform}
-   */
-  this.hitTransformationMatrix_ = null;
-
-};
-ol.inherits(ol.renderer.webgl.ImageLayer, ol.renderer.webgl.Layer);
-
-
-/**
- * @param {ol.ImageBase} image Image.
- * @private
- * @return {WebGLTexture} Texture.
- */
-ol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) {
-
-  // We meet the conditions to work with non-power of two textures.
-  // http://www.khronos.org/webgl/wiki/WebGL_and_OpenGL_Differences#Non-Power_of_Two_Texture_Support
-  // http://learningwebgl.com/blog/?p=2101
-
-  var imageElement = image.getImage();
-  var gl = this.mapRenderer.getGL();
-
-  return ol.webgl.Context.createTexture(
-      gl, imageElement, ol.webgl.CLAMP_TO_EDGE, ol.webgl.CLAMP_TO_EDGE);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, callback, thisArg) {
-  var layer = this.getLayer();
-  var source = layer.getSource();
-  var resolution = frameState.viewState.resolution;
-  var rotation = frameState.viewState.rotation;
-  var skippedFeatureUids = frameState.skippedFeatureUids;
-  return source.forEachFeatureAtCoordinate(
-      coordinate, resolution, rotation, skippedFeatureUids,
-
-      /**
-       * @param {ol.Feature|ol.render.Feature} feature Feature.
-       * @return {?} Callback result.
-       */
-      function(feature) {
-        return callback.call(thisArg, feature, layer);
-      });
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.ImageLayer.prototype.prepareFrame = function(frameState, layerState, context) {
-
-  var gl = this.mapRenderer.getGL();
-
-  var pixelRatio = frameState.pixelRatio;
-  var viewState = frameState.viewState;
-  var viewCenter = viewState.center;
-  var viewResolution = viewState.resolution;
-  var viewRotation = viewState.rotation;
-
-  var image = this.image_;
-  var texture = this.texture;
-  var imageLayer = /** @type {ol.layer.Image} */ (this.getLayer());
-  var imageSource = imageLayer.getSource();
-
-  var hints = frameState.viewHints;
-
-  var renderedExtent = frameState.extent;
-  if (layerState.extent !== undefined) {
-    renderedExtent = ol.extent.getIntersection(
-        renderedExtent, layerState.extent);
-  }
-  if (!hints[ol.View.Hint.ANIMATING] && !hints[ol.View.Hint.INTERACTING] &&
-      !ol.extent.isEmpty(renderedExtent)) {
-    var projection = viewState.projection;
-    if (!ol.ENABLE_RASTER_REPROJECTION) {
-      var sourceProjection = imageSource.getProjection();
-      if (sourceProjection) {
-        ol.DEBUG && console.assert(ol.proj.equivalent(projection, sourceProjection),
-            'projection and sourceProjection are equivalent');
-        projection = sourceProjection;
-      }
-    }
-    var image_ = imageSource.getImage(renderedExtent, viewResolution,
-        pixelRatio, projection);
-    if (image_) {
-      var loaded = this.loadImage(image_);
-      if (loaded) {
-        image = image_;
-        texture = this.createTexture_(image_);
-        if (this.texture) {
-          /**
-           * @param {WebGLRenderingContext} gl GL.
-           * @param {WebGLTexture} texture Texture.
-           */
-          var postRenderFunction = function(gl, texture) {
-            if (!gl.isContextLost()) {
-              gl.deleteTexture(texture);
-            }
-          }.bind(null, gl, this.texture);
-          frameState.postRenderFunctions.push(
-            /** @type {ol.PostRenderFunction} */ (postRenderFunction)
-          );
-        }
-      }
-    }
-  }
-
-  if (image) {
-    ol.DEBUG && console.assert(texture, 'texture is truthy');
-
-    var canvas = this.mapRenderer.getContext().getCanvas();
-
-    this.updateProjectionMatrix_(canvas.width, canvas.height,
-        pixelRatio, viewCenter, viewResolution, viewRotation,
-        image.getExtent());
-    this.hitTransformationMatrix_ = null;
-
-    // Translate and scale to flip the Y coord.
-    var texCoordMatrix = this.texCoordMatrix;
-    ol.transform.reset(texCoordMatrix);
-    ol.transform.scale(texCoordMatrix, 1, -1);
-    ol.transform.translate(texCoordMatrix, 0, -1);
-
-    this.image_ = image;
-    this.texture = texture;
-
-    this.updateAttributions(frameState.attributions, image.getAttributions());
-    this.updateLogos(frameState, imageSource);
-  }
-
-  return true;
-};
-
-
-/**
- * @param {number} canvasWidth Canvas width.
- * @param {number} canvasHeight Canvas height.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.Coordinate} viewCenter View center.
- * @param {number} viewResolution View resolution.
- * @param {number} viewRotation View rotation.
- * @param {ol.Extent} imageExtent Image extent.
- * @private
- */
-ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = function(canvasWidth, canvasHeight, pixelRatio,
-        viewCenter, viewResolution, viewRotation, imageExtent) {
-
-  var canvasExtentWidth = canvasWidth * viewResolution;
-  var canvasExtentHeight = canvasHeight * viewResolution;
-
-  var projectionMatrix = this.projectionMatrix;
-  ol.transform.reset(projectionMatrix);
-  ol.transform.scale(projectionMatrix,
-      pixelRatio * 2 / canvasExtentWidth,
-      pixelRatio * 2 / canvasExtentHeight);
-  ol.transform.rotate(projectionMatrix, -viewRotation);
-  ol.transform.translate(projectionMatrix,
-      imageExtent[0] - viewCenter[0],
-      imageExtent[1] - viewCenter[1]);
-  ol.transform.scale(projectionMatrix,
-      (imageExtent[2] - imageExtent[0]) / 2,
-      (imageExtent[3] - imageExtent[1]) / 2);
-  ol.transform.translate(projectionMatrix, 1, 1);
-
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.ImageLayer.prototype.hasFeatureAtCoordinate = function(coordinate, frameState) {
-  var hasFeature = this.forEachFeatureAtCoordinate(
-      coordinate, frameState, ol.functions.TRUE, this);
-  return hasFeature !== undefined;
-};
-
-
-/**
- * @param {ol.Pixel} pixel Pixel.
- * @param {olx.FrameState} frameState FrameState.
- * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer
- *     callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @return {T|undefined} Callback result.
- * @template S,T,U
- */
-ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
-  if (!this.image_ || !this.image_.getImage()) {
-    return undefined;
-  }
-
-  if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
-    // for ImageVector sources use the original hit-detection logic,
-    // so that for example also transparent polygons are detected
-    var coordinate = ol.transform.apply(
-        frameState.pixelToCoordinateTransform, pixel.slice());
-    var hasFeature = this.forEachFeatureAtCoordinate(
-        coordinate, frameState, ol.functions.TRUE, this);
-
-    if (hasFeature) {
-      return callback.call(thisArg, this.getLayer(), null);
-    } else {
-      return undefined;
-    }
-  } else {
-    var imageSize =
-        [this.image_.getImage().width, this.image_.getImage().height];
-
-    if (!this.hitTransformationMatrix_) {
-      this.hitTransformationMatrix_ = this.getHitTransformationMatrix_(
-          frameState.size, imageSize);
-    }
-
-    var pixelOnFrameBuffer = ol.transform.apply(
-        this.hitTransformationMatrix_, pixel.slice());
-
-    if (pixelOnFrameBuffer[0] < 0 || pixelOnFrameBuffer[0] > imageSize[0] ||
-        pixelOnFrameBuffer[1] < 0 || pixelOnFrameBuffer[1] > imageSize[1]) {
-      // outside the image, no need to check
-      return undefined;
-    }
-
-    if (!this.hitCanvasContext_) {
-      this.hitCanvasContext_ = ol.dom.createCanvasContext2D(1, 1);
-    }
-
-    this.hitCanvasContext_.clearRect(0, 0, 1, 1);
-    this.hitCanvasContext_.drawImage(this.image_.getImage(),
-        pixelOnFrameBuffer[0], pixelOnFrameBuffer[1], 1, 1, 0, 0, 1, 1);
-
-    var imageData = this.hitCanvasContext_.getImageData(0, 0, 1, 1).data;
-    if (imageData[3] > 0) {
-      return callback.call(thisArg, this.getLayer(),  imageData);
-    } else {
-      return undefined;
-    }
-  }
-};
-
-
-/**
- * The transformation matrix to get the pixel on the image for a
- * pixel on the map.
- * @param {ol.Size} mapSize The map size.
- * @param {ol.Size} imageSize The image size.
- * @return {ol.Transform} The transformation matrix.
- * @private
- */
-ol.renderer.webgl.ImageLayer.prototype.getHitTransformationMatrix_ = function(mapSize, imageSize) {
-  // the first matrix takes a map pixel, flips the y-axis and scales to
-  // a range between -1 ... 1
-  var mapCoordTransform = ol.transform.create();
-  ol.transform.translate(mapCoordTransform, -1, -1);
-  ol.transform.scale(mapCoordTransform, 2 / mapSize[0], 2 / mapSize[1]);
-  ol.transform.translate(mapCoordTransform, 0, mapSize[1]);
-  ol.transform.scale(mapCoordTransform, 1, -1);
-
-  // the second matrix is the inverse of the projection matrix used in the
-  // shader for drawing
-  var projectionMatrixInv = ol.transform.invert(this.projectionMatrix.slice());
-
-  // the third matrix scales to the image dimensions and flips the y-axis again
-  var transform = ol.transform.create();
-  ol.transform.translate(transform, 0, imageSize[1]);
-  ol.transform.scale(transform, 1, -1);
-  ol.transform.scale(transform, imageSize[0] / 2, imageSize[1] / 2);
-  ol.transform.translate(transform, 1, 1);
-
-  ol.transform.multiply(transform, projectionMatrixInv);
-  ol.transform.multiply(transform, mapCoordTransform);
-
-  return transform;
-};
-
-// This file is automatically generated, do not edit
-goog.provide('ol.renderer.webgl.tilelayershader');
-
-goog.require('ol');
-goog.require('ol.webgl.Fragment');
-goog.require('ol.webgl.Vertex');
-
-
-/**
- * @constructor
- * @extends {ol.webgl.Fragment}
- * @struct
- */
-ol.renderer.webgl.tilelayershader.Fragment = function() {
-  ol.webgl.Fragment.call(this, ol.renderer.webgl.tilelayershader.Fragment.SOURCE);
-};
-ol.inherits(ol.renderer.webgl.tilelayershader.Fragment, ol.webgl.Fragment);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.tilelayershader.Fragment.DEBUG_SOURCE = 'precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform sampler2D u_texture;\n\nvoid main(void) {\n  gl_FragColor = texture2D(u_texture, v_texCoord);\n}\n';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.tilelayershader.Fragment.OPTIMIZED_SOURCE = 'precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.tilelayershader.Fragment.SOURCE = ol.DEBUG ?
-    ol.renderer.webgl.tilelayershader.Fragment.DEBUG_SOURCE :
-    ol.renderer.webgl.tilelayershader.Fragment.OPTIMIZED_SOURCE;
-
-
-ol.renderer.webgl.tilelayershader.fragment = new ol.renderer.webgl.tilelayershader.Fragment();
-
-
-/**
- * @constructor
- * @extends {ol.webgl.Vertex}
- * @struct
- */
-ol.renderer.webgl.tilelayershader.Vertex = function() {
-  ol.webgl.Vertex.call(this, ol.renderer.webgl.tilelayershader.Vertex.SOURCE);
-};
-ol.inherits(ol.renderer.webgl.tilelayershader.Vertex, ol.webgl.Vertex);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.tilelayershader.Vertex.DEBUG_SOURCE = 'varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n  gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n  v_texCoord = a_texCoord;\n}\n\n\n';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.tilelayershader.Vertex.OPTIMIZED_SOURCE = 'varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.renderer.webgl.tilelayershader.Vertex.SOURCE = ol.DEBUG ?
-    ol.renderer.webgl.tilelayershader.Vertex.DEBUG_SOURCE :
-    ol.renderer.webgl.tilelayershader.Vertex.OPTIMIZED_SOURCE;
-
-
-ol.renderer.webgl.tilelayershader.vertex = new ol.renderer.webgl.tilelayershader.Vertex();
-
-
-/**
- * @constructor
- * @param {WebGLRenderingContext} gl GL.
- * @param {WebGLProgram} program Program.
- * @struct
- */
-ol.renderer.webgl.tilelayershader.Locations = function(gl, program) {
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_texture = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_texture' : 'e');
-
-  /**
-   * @type {WebGLUniformLocation}
-   */
-  this.u_tileOffset = gl.getUniformLocation(
-      program, ol.DEBUG ? 'u_tileOffset' : 'd');
-
-  /**
-   * @type {number}
-   */
-  this.a_position = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_position' : 'b');
-
-  /**
-   * @type {number}
-   */
-  this.a_texCoord = gl.getAttribLocation(
-      program, ol.DEBUG ? 'a_texCoord' : 'c');
-};
-
-// FIXME large resolutions lead to too large framebuffers :-(
-// FIXME animated shaders! check in redraw
-
-goog.provide('ol.renderer.webgl.TileLayer');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.TileRange');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.math');
-goog.require('ol.renderer.webgl.Layer');
-goog.require('ol.renderer.webgl.tilelayershader');
-goog.require('ol.size');
-goog.require('ol.transform');
-goog.require('ol.webgl');
-goog.require('ol.webgl.Buffer');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.webgl.Layer}
- * @param {ol.renderer.webgl.Map} mapRenderer Map renderer.
- * @param {ol.layer.Tile} tileLayer Tile layer.
- */
-ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {
-
-  ol.renderer.webgl.Layer.call(this, mapRenderer, tileLayer);
-
-  /**
-   * @private
-   * @type {ol.webgl.Fragment}
-   */
-  this.fragmentShader_ = ol.renderer.webgl.tilelayershader.fragment;
-
-  /**
-   * @private
-   * @type {ol.webgl.Vertex}
-   */
-  this.vertexShader_ = ol.renderer.webgl.tilelayershader.vertex;
-
-  /**
-   * @private
-   * @type {ol.renderer.webgl.tilelayershader.Locations}
-   */
-  this.locations_ = null;
-
-  /**
-   * @private
-   * @type {ol.webgl.Buffer}
-   */
-  this.renderArrayBuffer_ = new ol.webgl.Buffer([
-    0, 0, 0, 1,
-    1, 0, 1, 1,
-    0, 1, 0, 0,
-    1, 1, 1, 0
-  ]);
-
-  /**
-   * @private
-   * @type {ol.TileRange}
-   */
-  this.renderedTileRange_ = null;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.renderedFramebufferExtent_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedRevision_ = -1;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.tmpSize_ = [0, 0];
-
-};
-ol.inherits(ol.renderer.webgl.TileLayer, ol.renderer.webgl.Layer);
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {
-  var context = this.mapRenderer.getContext();
-  context.deleteBuffer(this.renderArrayBuffer_);
-  ol.renderer.webgl.Layer.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * Create a function that adds loaded tiles to the tile lookup.
- * @param {ol.source.Tile} source Tile source.
- * @param {ol.proj.Projection} projection Projection of the tiles.
- * @param {Object.<number, Object.<string, ol.Tile>>} tiles Lookup of loaded
- *     tiles by zoom level.
- * @return {function(number, ol.TileRange):boolean} A function that can be
- *     called with a zoom level and a tile range to add loaded tiles to the
- *     lookup.
- * @protected
- */
-ol.renderer.webgl.TileLayer.prototype.createLoadedTileFinder = function(source, projection, tiles) {
-  var mapRenderer = this.mapRenderer;
-
-  return (
-      /**
-       * @param {number} zoom Zoom level.
-       * @param {ol.TileRange} tileRange Tile range.
-       * @return {boolean} The tile range is fully loaded.
-       */
-      function(zoom, tileRange) {
-        function callback(tile) {
-          var loaded = mapRenderer.isTileTextureLoaded(tile);
-          if (loaded) {
-            if (!tiles[zoom]) {
-              tiles[zoom] = {};
-            }
-            tiles[zoom][tile.tileCoord.toString()] = tile;
-          }
-          return loaded;
-        }
-        return source.forEachLoadedTile(projection, zoom, tileRange, callback);
-      });
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost = function() {
-  ol.renderer.webgl.Layer.prototype.handleWebGLContextLost.call(this);
-  this.locations_ = null;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerState, context) {
-
-  var mapRenderer = this.mapRenderer;
-  var gl = context.getGL();
-
-  var viewState = frameState.viewState;
-  var projection = viewState.projection;
-
-  var tileLayer = /** @type {ol.layer.Tile} */ (this.getLayer());
-  var tileSource = tileLayer.getSource();
-  var tileGrid = tileSource.getTileGridForProjection(projection);
-  var z = tileGrid.getZForResolution(viewState.resolution);
-  var tileResolution = tileGrid.getResolution(z);
-
-  var tilePixelSize =
-      tileSource.getTilePixelSize(z, frameState.pixelRatio, projection);
-  var pixelRatio = tilePixelSize[0] /
-      ol.size.toSize(tileGrid.getTileSize(z), this.tmpSize_)[0];
-  var tilePixelResolution = tileResolution / pixelRatio;
-  var tileGutter = tileSource.getTilePixelRatio(pixelRatio) * tileSource.getGutter(projection);
-
-  var center = viewState.center;
-  var extent = frameState.extent;
-  var tileRange = tileGrid.getTileRangeForExtentAndResolution(
-      extent, tileResolution);
-
-  var framebufferExtent;
-  if (this.renderedTileRange_ &&
-      this.renderedTileRange_.equals(tileRange) &&
-      this.renderedRevision_ == tileSource.getRevision()) {
-    framebufferExtent = this.renderedFramebufferExtent_;
-  } else {
-
-    var tileRangeSize = tileRange.getSize();
-
-    var maxDimension = Math.max(
-        tileRangeSize[0] * tilePixelSize[0],
-        tileRangeSize[1] * tilePixelSize[1]);
-    var framebufferDimension = ol.math.roundUpToPowerOfTwo(maxDimension);
-    var framebufferExtentDimension = tilePixelResolution * framebufferDimension;
-    var origin = tileGrid.getOrigin(z);
-    var minX = origin[0] +
-        tileRange.minX * tilePixelSize[0] * tilePixelResolution;
-    var minY = origin[1] +
-        tileRange.minY * tilePixelSize[1] * tilePixelResolution;
-    framebufferExtent = [
-      minX, minY,
-      minX + framebufferExtentDimension, minY + framebufferExtentDimension
-    ];
-
-    this.bindFramebuffer(frameState, framebufferDimension);
-    gl.viewport(0, 0, framebufferDimension, framebufferDimension);
-
-    gl.clearColor(0, 0, 0, 0);
-    gl.clear(ol.webgl.COLOR_BUFFER_BIT);
-    gl.disable(ol.webgl.BLEND);
-
-    var program = context.getProgram(this.fragmentShader_, this.vertexShader_);
-    context.useProgram(program);
-    if (!this.locations_) {
-      this.locations_ =
-          new ol.renderer.webgl.tilelayershader.Locations(gl, program);
-    }
-
-    context.bindBuffer(ol.webgl.ARRAY_BUFFER, this.renderArrayBuffer_);
-    gl.enableVertexAttribArray(this.locations_.a_position);
-    gl.vertexAttribPointer(
-        this.locations_.a_position, 2, ol.webgl.FLOAT, false, 16, 0);
-    gl.enableVertexAttribArray(this.locations_.a_texCoord);
-    gl.vertexAttribPointer(
-        this.locations_.a_texCoord, 2, ol.webgl.FLOAT, false, 16, 8);
-    gl.uniform1i(this.locations_.u_texture, 0);
-
-    /**
-     * @type {Object.<number, Object.<string, ol.Tile>>}
-     */
-    var tilesToDrawByZ = {};
-    tilesToDrawByZ[z] = {};
-
-    var findLoadedTiles = this.createLoadedTileFinder(
-        tileSource, projection, tilesToDrawByZ);
-
-    var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
-    var allTilesLoaded = true;
-    var tmpExtent = ol.extent.createEmpty();
-    var tmpTileRange = new ol.TileRange(0, 0, 0, 0);
-    var childTileRange, drawable, fullyLoaded, tile, tileState;
-    var x, y, tileExtent;
-    for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
-      for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
-
-        tile = tileSource.getTile(z, x, y, pixelRatio, projection);
-        if (layerState.extent !== undefined) {
-          // ignore tiles outside layer extent
-          tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
-          if (!ol.extent.intersects(tileExtent, layerState.extent)) {
-            continue;
-          }
-        }
-        tileState = tile.getState();
-        drawable = tileState == ol.Tile.State.LOADED ||
-            tileState == ol.Tile.State.EMPTY ||
-            tileState == ol.Tile.State.ERROR && !useInterimTilesOnError;
-        if (!drawable) {
-          tile = tile.getInterimTile();
-        }
-        tileState = tile.getState();
-        if (tileState == ol.Tile.State.LOADED) {
-          if (mapRenderer.isTileTextureLoaded(tile)) {
-            tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
-            continue;
-          }
-        } else if (tileState == ol.Tile.State.EMPTY ||
-                   (tileState == ol.Tile.State.ERROR &&
-                    !useInterimTilesOnError)) {
-          continue;
-        }
-
-        allTilesLoaded = false;
-        fullyLoaded = tileGrid.forEachTileCoordParentTileRange(
-            tile.tileCoord, findLoadedTiles, null, tmpTileRange, tmpExtent);
-        if (!fullyLoaded) {
-          childTileRange = tileGrid.getTileCoordChildTileRange(
-              tile.tileCoord, tmpTileRange, tmpExtent);
-          if (childTileRange) {
-            findLoadedTiles(z + 1, childTileRange);
-          }
-        }
-
-      }
-
-    }
-
-    /** @type {Array.<number>} */
-    var zs = Object.keys(tilesToDrawByZ).map(Number);
-    zs.sort(ol.array.numberSafeCompareFunction);
-    var u_tileOffset = new Float32Array(4);
-    var i, ii, tileKey, tilesToDraw;
-    for (i = 0, ii = zs.length; i < ii; ++i) {
-      tilesToDraw = tilesToDrawByZ[zs[i]];
-      for (tileKey in tilesToDraw) {
-        tile = tilesToDraw[tileKey];
-        tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
-        u_tileOffset[0] = 2 * (tileExtent[2] - tileExtent[0]) /
-            framebufferExtentDimension;
-        u_tileOffset[1] = 2 * (tileExtent[3] - tileExtent[1]) /
-            framebufferExtentDimension;
-        u_tileOffset[2] = 2 * (tileExtent[0] - framebufferExtent[0]) /
-            framebufferExtentDimension - 1;
-        u_tileOffset[3] = 2 * (tileExtent[1] - framebufferExtent[1]) /
-            framebufferExtentDimension - 1;
-        gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset);
-        mapRenderer.bindTileTexture(tile, tilePixelSize,
-            tileGutter * pixelRatio, ol.webgl.LINEAR, ol.webgl.LINEAR);
-        gl.drawArrays(ol.webgl.TRIANGLE_STRIP, 0, 4);
-      }
-    }
-
-    if (allTilesLoaded) {
-      this.renderedTileRange_ = tileRange;
-      this.renderedFramebufferExtent_ = framebufferExtent;
-      this.renderedRevision_ = tileSource.getRevision();
-    } else {
-      this.renderedTileRange_ = null;
-      this.renderedFramebufferExtent_ = null;
-      this.renderedRevision_ = -1;
-      frameState.animate = true;
-    }
-
-  }
-
-  this.updateUsedTiles(frameState.usedTiles, tileSource, z, tileRange);
-  var tileTextureQueue = mapRenderer.getTileTextureQueue();
-  this.manageTilePyramid(
-      frameState, tileSource, tileGrid, pixelRatio, projection, extent, z,
-      tileLayer.getPreload(),
-      /**
-       * @param {ol.Tile} tile Tile.
-       */
-      function(tile) {
-        if (tile.getState() == ol.Tile.State.LOADED &&
-            !mapRenderer.isTileTextureLoaded(tile) &&
-            !tileTextureQueue.isKeyQueued(tile.getKey())) {
-          tileTextureQueue.enqueue([
-            tile,
-            tileGrid.getTileCoordCenter(tile.tileCoord),
-            tileGrid.getResolution(tile.tileCoord[0]),
-            tilePixelSize, tileGutter * pixelRatio
-          ]);
-        }
-      }, this);
-  this.scheduleExpireCache(frameState, tileSource);
-  this.updateLogos(frameState, tileSource);
-
-  var texCoordMatrix = this.texCoordMatrix;
-  ol.transform.reset(texCoordMatrix);
-  ol.transform.translate(texCoordMatrix,
-      (Math.round(center[0] / tileResolution) * tileResolution - framebufferExtent[0]) /
-          (framebufferExtent[2] - framebufferExtent[0]),
-      (Math.round(center[1] / tileResolution) * tileResolution - framebufferExtent[1]) /
-          (framebufferExtent[3] - framebufferExtent[1]));
-  if (viewState.rotation !== 0) {
-    ol.transform.rotate(texCoordMatrix, viewState.rotation);
-  }
-  ol.transform.scale(texCoordMatrix,
-      frameState.size[0] * viewState.resolution /
-          (framebufferExtent[2] - framebufferExtent[0]),
-      frameState.size[1] * viewState.resolution /
-          (framebufferExtent[3] - framebufferExtent[1]));
-  ol.transform.translate(texCoordMatrix, -0.5, -0.5);
-
-  return true;
-};
-
-
-/**
- * @param {ol.Pixel} pixel Pixel.
- * @param {olx.FrameState} frameState FrameState.
- * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer
- *     callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @return {T|undefined} Callback result.
- * @template S,T,U
- */
-ol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
-  if (!this.framebuffer) {
-    return undefined;
-  }
-
-  var pixelOnMapScaled = [
-    pixel[0] / frameState.size[0],
-    (frameState.size[1] - pixel[1]) / frameState.size[1]];
-
-  var pixelOnFrameBufferScaled = ol.transform.apply(
-      this.texCoordMatrix, pixelOnMapScaled.slice());
-  var pixelOnFrameBuffer = [
-    pixelOnFrameBufferScaled[0] * this.framebufferDimension,
-    pixelOnFrameBufferScaled[1] * this.framebufferDimension];
-
-  var gl = this.mapRenderer.getContext().getGL();
-  gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
-  var imageData = new Uint8Array(4);
-  gl.readPixels(pixelOnFrameBuffer[0], pixelOnFrameBuffer[1], 1, 1,
-      gl.RGBA, gl.UNSIGNED_BYTE, imageData);
-
-  if (imageData[3] > 0) {
-    return callback.call(thisArg, this.getLayer(), imageData);
-  } else {
-    return undefined;
-  }
-};
-
-goog.provide('ol.renderer.webgl.VectorLayer');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.extent');
-goog.require('ol.render.webgl.ReplayGroup');
-goog.require('ol.renderer.vector');
-goog.require('ol.renderer.webgl.Layer');
-goog.require('ol.transform');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.webgl.Layer}
- * @param {ol.renderer.webgl.Map} mapRenderer Map renderer.
- * @param {ol.layer.Vector} vectorLayer Vector layer.
- */
-ol.renderer.webgl.VectorLayer = function(mapRenderer, vectorLayer) {
-
-  ol.renderer.webgl.Layer.call(this, mapRenderer, vectorLayer);
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.dirty_ = false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedRevision_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedResolution_ = NaN;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.renderedExtent_ = ol.extent.createEmpty();
-
-  /**
-   * @private
-   * @type {function(ol.Feature, ol.Feature): number|null}
-   */
-  this.renderedRenderOrder_ = null;
-
-  /**
-   * @private
-   * @type {ol.render.webgl.ReplayGroup}
-   */
-  this.replayGroup_ = null;
-
-  /**
-   * The last layer state.
-   * @private
-   * @type {?ol.LayerState}
-   */
-  this.layerState_ = null;
-
-};
-ol.inherits(ol.renderer.webgl.VectorLayer, ol.renderer.webgl.Layer);
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.VectorLayer.prototype.composeFrame = function(frameState, layerState, context) {
-  this.layerState_ = layerState;
-  var viewState = frameState.viewState;
-  var replayGroup = this.replayGroup_;
-  if (replayGroup && !replayGroup.isEmpty()) {
-    replayGroup.replay(context,
-        viewState.center, viewState.resolution, viewState.rotation,
-        frameState.size, frameState.pixelRatio, layerState.opacity,
-        layerState.managed ? frameState.skippedFeatureUids : {});
-  }
-
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.VectorLayer.prototype.disposeInternal = function() {
-  var replayGroup = this.replayGroup_;
-  if (replayGroup) {
-    var context = this.mapRenderer.getContext();
-    replayGroup.getDeleteResourcesFunction(context)();
-    this.replayGroup_ = null;
-  }
-  ol.renderer.webgl.Layer.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.VectorLayer.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, callback, thisArg) {
-  if (!this.replayGroup_ || !this.layerState_) {
-    return undefined;
-  } else {
-    var context = this.mapRenderer.getContext();
-    var viewState = frameState.viewState;
-    var layer = this.getLayer();
-    var layerState = this.layerState_;
-    /** @type {Object.<string, boolean>} */
-    var features = {};
-    return this.replayGroup_.forEachFeatureAtCoordinate(coordinate,
-        context, viewState.center, viewState.resolution, viewState.rotation,
-        frameState.size, frameState.pixelRatio, layerState.opacity,
-        {},
-        /**
-         * @param {ol.Feature|ol.render.Feature} feature Feature.
-         * @return {?} Callback result.
-         */
-        function(feature) {
-          var key = ol.getUid(feature).toString();
-          if (!(key in features)) {
-            features[key] = true;
-            return callback.call(thisArg, feature, layer);
-          }
-        });
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtCoordinate = function(coordinate, frameState) {
-  if (!this.replayGroup_ || !this.layerState_) {
-    return false;
-  } else {
-    var context = this.mapRenderer.getContext();
-    var viewState = frameState.viewState;
-    var layerState = this.layerState_;
-    return this.replayGroup_.hasFeatureAtCoordinate(coordinate,
-        context, viewState.center, viewState.resolution, viewState.rotation,
-        frameState.size, frameState.pixelRatio, layerState.opacity,
-        frameState.skippedFeatureUids);
-  }
-};
-
-
-/**
- * @param {ol.Pixel} pixel Pixel.
- * @param {olx.FrameState} frameState FrameState.
- * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer
- *     callback.
- * @param {S} thisArg Value to use as `this` when executing `callback`.
- * @return {T|undefined} Callback result.
- * @template S,T,U
- */
-ol.renderer.webgl.VectorLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
-  var coordinate = ol.transform.apply(
-      frameState.pixelToCoordinateTransform, pixel.slice());
-  var hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState);
-
-  if (hasFeature) {
-    return callback.call(thisArg, this.getLayer(), null);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * Handle changes in image style state.
- * @param {ol.events.Event} event Image style change event.
- * @private
- */
-ol.renderer.webgl.VectorLayer.prototype.handleStyleImageChange_ = function(event) {
-  this.renderIfReadyAndVisible();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.VectorLayer.prototype.prepareFrame = function(frameState, layerState, context) {
-
-  var vectorLayer = /** @type {ol.layer.Vector} */ (this.getLayer());
-  var vectorSource = vectorLayer.getSource();
-
-  this.updateAttributions(
-      frameState.attributions, vectorSource.getAttributions());
-  this.updateLogos(frameState, vectorSource);
-
-  var animating = frameState.viewHints[ol.View.Hint.ANIMATING];
-  var interacting = frameState.viewHints[ol.View.Hint.INTERACTING];
-  var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();
-  var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();
-
-  if (!this.dirty_ && (!updateWhileAnimating && animating) ||
-      (!updateWhileInteracting && interacting)) {
-    return true;
-  }
-
-  var frameStateExtent = frameState.extent;
-  var viewState = frameState.viewState;
-  var projection = viewState.projection;
-  var resolution = viewState.resolution;
-  var pixelRatio = frameState.pixelRatio;
-  var vectorLayerRevision = vectorLayer.getRevision();
-  var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();
-  var vectorLayerRenderOrder = vectorLayer.getRenderOrder();
-
-  if (vectorLayerRenderOrder === undefined) {
-    vectorLayerRenderOrder = ol.renderer.vector.defaultOrder;
-  }
-
-  var extent = ol.extent.buffer(frameStateExtent,
-      vectorLayerRenderBuffer * resolution);
-
-  if (!this.dirty_ &&
-      this.renderedResolution_ == resolution &&
-      this.renderedRevision_ == vectorLayerRevision &&
-      this.renderedRenderOrder_ == vectorLayerRenderOrder &&
-      ol.extent.containsExtent(this.renderedExtent_, extent)) {
-    return true;
-  }
-
-  if (this.replayGroup_) {
-    frameState.postRenderFunctions.push(
-        this.replayGroup_.getDeleteResourcesFunction(context));
-  }
-
-  this.dirty_ = false;
-
-  var replayGroup = new ol.render.webgl.ReplayGroup(
-      ol.renderer.vector.getTolerance(resolution, pixelRatio),
-      extent, vectorLayer.getRenderBuffer());
-  vectorSource.loadFeatures(extent, resolution, projection);
-  /**
-   * @param {ol.Feature} feature Feature.
-   * @this {ol.renderer.webgl.VectorLayer}
-   */
-  var renderFeature = function(feature) {
-    var styles;
-    var styleFunction = feature.getStyleFunction();
-    if (styleFunction) {
-      styles = styleFunction.call(feature, resolution);
-    } else {
-      styleFunction = vectorLayer.getStyleFunction();
-      if (styleFunction) {
-        styles = styleFunction(feature, resolution);
-      }
-    }
-    if (styles) {
-      var dirty = this.renderFeature(
-          feature, resolution, pixelRatio, styles, replayGroup);
-      this.dirty_ = this.dirty_ || dirty;
-    }
-  };
-  if (vectorLayerRenderOrder) {
-    /** @type {Array.<ol.Feature>} */
-    var features = [];
-    vectorSource.forEachFeatureInExtent(extent,
-        /**
-         * @param {ol.Feature} feature Feature.
-         */
-        function(feature) {
-          features.push(feature);
-        }, this);
-    features.sort(vectorLayerRenderOrder);
-    features.forEach(renderFeature, this);
-  } else {
-    vectorSource.forEachFeatureInExtent(extent, renderFeature, this);
-  }
-  replayGroup.finish(context);
-
-  this.renderedResolution_ = resolution;
-  this.renderedRevision_ = vectorLayerRevision;
-  this.renderedRenderOrder_ = vectorLayerRenderOrder;
-  this.renderedExtent_ = extent;
-  this.replayGroup_ = replayGroup;
-
-  return true;
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- * @param {number} resolution Resolution.
- * @param {number} pixelRatio Pixel ratio.
- * @param {(ol.style.Style|Array.<ol.style.Style>)} styles The style or array of
- *     styles.
- * @param {ol.render.webgl.ReplayGroup} replayGroup Replay group.
- * @return {boolean} `true` if an image is loading.
- */
-ol.renderer.webgl.VectorLayer.prototype.renderFeature = function(feature, resolution, pixelRatio, styles, replayGroup) {
-  if (!styles) {
-    return false;
-  }
-  var loading = false;
-  if (Array.isArray(styles)) {
-    for (var i = 0, ii = styles.length; i < ii; ++i) {
-      loading = ol.renderer.vector.renderFeature(
-          replayGroup, feature, styles[i],
-          ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
-          this.handleStyleImageChange_, this) || loading;
-    }
-  } else {
-    loading = ol.renderer.vector.renderFeature(
-        replayGroup, feature, styles,
-        ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
-        this.handleStyleImageChange_, this) || loading;
-  }
-  return loading;
-};
-
-goog.provide('ol.structs.LRUCache');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.obj');
-
-
-/**
- * Implements a Least-Recently-Used cache where the keys do not conflict with
- * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring
- * items from the cache is the responsibility of the user.
- * @constructor
- * @struct
- * @template T
- */
-ol.structs.LRUCache = function() {
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.count_ = 0;
-
-  /**
-   * @private
-   * @type {!Object.<string, ol.LRUCacheEntry>}
-   */
-  this.entries_ = {};
-
-  /**
-   * @private
-   * @type {?ol.LRUCacheEntry}
-   */
-  this.oldest_ = null;
-
-  /**
-   * @private
-   * @type {?ol.LRUCacheEntry}
-   */
-  this.newest_ = null;
-
-};
-
-
-if (ol.DEBUG) {
-  /**
-   * FIXME empty description for jsdoc
-   */
-  ol.structs.LRUCache.prototype.assertValid = function() {
-    if (this.count_ === 0) {
-      console.assert(ol.obj.isEmpty(this.entries_),
-          'entries must be an empty object (count = 0)');
-      console.assert(!this.oldest_,
-          'oldest must be null (count = 0)');
-      console.assert(!this.newest_,
-          'newest must be null (count = 0)');
-    } else {
-      console.assert(Object.keys(this.entries_).length == this.count_,
-          'number of entries matches count');
-      console.assert(this.oldest_,
-          'we have an oldest entry');
-      console.assert(!this.oldest_.older,
-          'no entry is older than oldest');
-      console.assert(this.newest_,
-          'we have a newest entry');
-      console.assert(!this.newest_.newer,
-          'no entry is newer than newest');
-      var i, entry;
-      var older = null;
-      i = 0;
-      for (entry = this.oldest_; entry; entry = entry.newer) {
-        console.assert(entry.older === older,
-            'entry.older links to correct older');
-        older = entry;
-        ++i;
-      }
-      console.assert(i == this.count_, 'iterated correct amount of times');
-      var newer = null;
-      i = 0;
-      for (entry = this.newest_; entry; entry = entry.older) {
-        console.assert(entry.newer === newer,
-            'entry.newer links to correct newer');
-        newer = entry;
-        ++i;
-      }
-      console.assert(i == this.count_, 'iterated correct amount of times');
-    }
-  };
-}
-
-
-/**
- * FIXME empty description for jsdoc
- */
-ol.structs.LRUCache.prototype.clear = function() {
-  this.count_ = 0;
-  this.entries_ = {};
-  this.oldest_ = null;
-  this.newest_ = null;
-};
-
-
-/**
- * @param {string} key Key.
- * @return {boolean} Contains key.
- */
-ol.structs.LRUCache.prototype.containsKey = function(key) {
-  return this.entries_.hasOwnProperty(key);
-};
-
-
-/**
- * @param {function(this: S, T, string, ol.structs.LRUCache): ?} f The function
- *     to call for every entry from the oldest to the newer. This function takes
- *     3 arguments (the entry value, the entry key and the LRUCache object).
- *     The return value is ignored.
- * @param {S=} opt_this The object to use as `this` in `f`.
- * @template S
- */
-ol.structs.LRUCache.prototype.forEach = function(f, opt_this) {
-  var entry = this.oldest_;
-  while (entry) {
-    f.call(opt_this, entry.value_, entry.key_, this);
-    entry = entry.newer;
-  }
-};
-
-
-/**
- * @param {string} key Key.
- * @return {T} Value.
- */
-ol.structs.LRUCache.prototype.get = function(key) {
-  var entry = this.entries_[key];
-  ol.asserts.assert(entry !== undefined,
-      15); // Tried to get a value for a key that does not exist in the cache
-  if (entry === this.newest_) {
-    return entry.value_;
-  } else if (entry === this.oldest_) {
-    this.oldest_ = /** @type {ol.LRUCacheEntry} */ (this.oldest_.newer);
-    this.oldest_.older = null;
-  } else {
-    entry.newer.older = entry.older;
-    entry.older.newer = entry.newer;
-  }
-  entry.newer = null;
-  entry.older = this.newest_;
-  this.newest_.newer = entry;
-  this.newest_ = entry;
-  return entry.value_;
-};
-
-
-/**
- * @return {number} Count.
- */
-ol.structs.LRUCache.prototype.getCount = function() {
-  return this.count_;
-};
-
-
-/**
- * @return {Array.<string>} Keys.
- */
-ol.structs.LRUCache.prototype.getKeys = function() {
-  var keys = new Array(this.count_);
-  var i = 0;
-  var entry;
-  for (entry = this.newest_; entry; entry = entry.older) {
-    keys[i++] = entry.key_;
-  }
-  ol.DEBUG && console.assert(i == this.count_, 'iterated correct number of times');
-  return keys;
-};
-
-
-/**
- * @return {Array.<T>} Values.
- */
-ol.structs.LRUCache.prototype.getValues = function() {
-  var values = new Array(this.count_);
-  var i = 0;
-  var entry;
-  for (entry = this.newest_; entry; entry = entry.older) {
-    values[i++] = entry.value_;
-  }
-  ol.DEBUG && console.assert(i == this.count_, 'iterated correct number of times');
-  return values;
-};
-
-
-/**
- * @return {T} Last value.
- */
-ol.structs.LRUCache.prototype.peekLast = function() {
-  ol.DEBUG && console.assert(this.oldest_, 'oldest must not be null');
-  return this.oldest_.value_;
-};
-
-
-/**
- * @return {string} Last key.
- */
-ol.structs.LRUCache.prototype.peekLastKey = function() {
-  ol.DEBUG && console.assert(this.oldest_, 'oldest must not be null');
-  return this.oldest_.key_;
-};
-
-
-/**
- * @return {T} value Value.
- */
-ol.structs.LRUCache.prototype.pop = function() {
-  ol.DEBUG && console.assert(this.oldest_, 'oldest must not be null');
-  ol.DEBUG && console.assert(this.newest_, 'newest must not be null');
-  var entry = this.oldest_;
-  ol.DEBUG && console.assert(entry.key_ in this.entries_,
-      'oldest is indexed in entries');
-  delete this.entries_[entry.key_];
-  if (entry.newer) {
-    entry.newer.older = null;
-  }
-  this.oldest_ = /** @type {ol.LRUCacheEntry} */ (entry.newer);
-  if (!this.oldest_) {
-    this.newest_ = null;
-  }
-  --this.count_;
-  return entry.value_;
-};
-
-
-/**
- * @param {string} key Key.
- * @param {T} value Value.
- */
-ol.structs.LRUCache.prototype.replace = function(key, value) {
-  this.get(key);  // update `newest_`
-  this.entries_[key].value_ = value;
-};
-
-
-/**
- * @param {string} key Key.
- * @param {T} value Value.
- */
-ol.structs.LRUCache.prototype.set = function(key, value) {
-  ol.DEBUG && console.assert(!(key in {}),
-      'key is not a standard property of objects (e.g. "__proto__")');
-  ol.asserts.assert(!(key in this.entries_),
-      16); // Tried to set a value for a key that is used already
-  var entry = /** @type {ol.LRUCacheEntry} */ ({
-    key_: key,
-    newer: null,
-    older: this.newest_,
-    value_: value
-  });
-  if (!this.newest_) {
-    this.oldest_ = entry;
-  } else {
-    this.newest_.newer = entry;
-  }
-  this.newest_ = entry;
-  this.entries_[key] = entry;
-  ++this.count_;
-};
-
-// FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE)
-
-goog.provide('ol.renderer.webgl.Map');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.css');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.layer.Image');
-goog.require('ol.layer.Layer');
-goog.require('ol.layer.Tile');
-goog.require('ol.layer.Vector');
-goog.require('ol.render.Event');
-goog.require('ol.render.webgl.Immediate');
-goog.require('ol.renderer.Map');
-goog.require('ol.renderer.Type');
-goog.require('ol.renderer.webgl.ImageLayer');
-goog.require('ol.renderer.webgl.TileLayer');
-goog.require('ol.renderer.webgl.VectorLayer');
-goog.require('ol.source.State');
-goog.require('ol.structs.LRUCache');
-goog.require('ol.structs.PriorityQueue');
-goog.require('ol.webgl');
-goog.require('ol.webgl.Context');
-goog.require('ol.webgl.ContextEventType');
-
-
-/**
- * @constructor
- * @extends {ol.renderer.Map}
- * @param {Element} container Container.
- * @param {ol.Map} map Map.
- */
-ol.renderer.webgl.Map = function(container, map) {
-
-  ol.renderer.Map.call(this, container, map);
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = /** @type {HTMLCanvasElement} */
-      (document.createElement('CANVAS'));
-  this.canvas_.style.width = '100%';
-  this.canvas_.style.height = '100%';
-  this.canvas_.className = ol.css.CLASS_UNSELECTABLE;
-  container.insertBefore(this.canvas_, container.childNodes[0] || null);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.clipTileCanvasWidth_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.clipTileCanvasHeight_ = 0;
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.clipTileContext_ = ol.dom.createCanvasContext2D();
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.renderedVisible_ = true;
-
-  /**
-   * @private
-   * @type {WebGLRenderingContext}
-   */
-  this.gl_ = ol.webgl.getContext(this.canvas_, {
-    antialias: true,
-    depth: false,
-    failIfMajorPerformanceCaveat: true,
-    preserveDrawingBuffer: false,
-    stencil: true
-  });
-  ol.DEBUG && console.assert(this.gl_, 'got a WebGLRenderingContext');
-
-  /**
-   * @private
-   * @type {ol.webgl.Context}
-   */
-  this.context_ = new ol.webgl.Context(this.canvas_, this.gl_);
-
-  ol.events.listen(this.canvas_, ol.webgl.ContextEventType.LOST,
-      this.handleWebGLContextLost, this);
-  ol.events.listen(this.canvas_, ol.webgl.ContextEventType.RESTORED,
-      this.handleWebGLContextRestored, this);
-
-  /**
-   * @private
-   * @type {ol.structs.LRUCache.<ol.WebglTextureCacheEntry|null>}
-   */
-  this.textureCache_ = new ol.structs.LRUCache();
-
-  /**
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.focus_ = null;
-
-  /**
-   * @private
-   * @type {ol.structs.PriorityQueue.<Array>}
-   */
-  this.tileTextureQueue_ = new ol.structs.PriorityQueue(
-      /**
-       * @param {Array.<*>} element Element.
-       * @return {number} Priority.
-       * @this {ol.renderer.webgl.Map}
-       */
-      (function(element) {
-        var tileCenter = /** @type {ol.Coordinate} */ (element[1]);
-        var tileResolution = /** @type {number} */ (element[2]);
-        var deltaX = tileCenter[0] - this.focus_[0];
-        var deltaY = tileCenter[1] - this.focus_[1];
-        return 65536 * Math.log(tileResolution) +
-            Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution;
-      }).bind(this),
-      /**
-       * @param {Array.<*>} element Element.
-       * @return {string} Key.
-       */
-      function(element) {
-        return /** @type {ol.Tile} */ (element[0]).getKey();
-      });
-
-
- /**
-  * @param {ol.Map} map Map.
-  * @param {?olx.FrameState} frameState Frame state.
-  * @return {boolean} false.
-  * @this {ol.renderer.webgl.Map}
-  */
-  this.loadNextTileTexture_ =
-      function(map, frameState) {
-        if (!this.tileTextureQueue_.isEmpty()) {
-          this.tileTextureQueue_.reprioritize();
-          var element = this.tileTextureQueue_.dequeue();
-          var tile = /** @type {ol.Tile} */ (element[0]);
-          var tileSize = /** @type {ol.Size} */ (element[3]);
-          var tileGutter = /** @type {number} */ (element[4]);
-          this.bindTileTexture(
-              tile, tileSize, tileGutter, ol.webgl.LINEAR, ol.webgl.LINEAR);
-        }
-        return false;
-      }.bind(this);
-
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.textureCacheFrameMarkerCount_ = 0;
-
-  this.initializeGL_();
-
-};
-ol.inherits(ol.renderer.webgl.Map, ol.renderer.Map);
-
-
-/**
- * @param {ol.Tile} tile Tile.
- * @param {ol.Size} tileSize Tile size.
- * @param {number} tileGutter Tile gutter.
- * @param {number} magFilter Mag filter.
- * @param {number} minFilter Min filter.
- */
-ol.renderer.webgl.Map.prototype.bindTileTexture = function(tile, tileSize, tileGutter, magFilter, minFilter) {
-  var gl = this.getGL();
-  var tileKey = tile.getKey();
-  if (this.textureCache_.containsKey(tileKey)) {
-    var textureCacheEntry = this.textureCache_.get(tileKey);
-    gl.bindTexture(ol.webgl.TEXTURE_2D, textureCacheEntry.texture);
-    if (textureCacheEntry.magFilter != magFilter) {
-      gl.texParameteri(
-          ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_MAG_FILTER, magFilter);
-      textureCacheEntry.magFilter = magFilter;
-    }
-    if (textureCacheEntry.minFilter != minFilter) {
-      gl.texParameteri(
-          ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_MIN_FILTER, minFilter);
-      textureCacheEntry.minFilter = minFilter;
-    }
-  } else {
-    var texture = gl.createTexture();
-    gl.bindTexture(ol.webgl.TEXTURE_2D, texture);
-    if (tileGutter > 0) {
-      var clipTileCanvas = this.clipTileContext_.canvas;
-      var clipTileContext = this.clipTileContext_;
-      if (this.clipTileCanvasWidth_ !== tileSize[0] ||
-          this.clipTileCanvasHeight_ !== tileSize[1]) {
-        clipTileCanvas.width = tileSize[0];
-        clipTileCanvas.height = tileSize[1];
-        this.clipTileCanvasWidth_ = tileSize[0];
-        this.clipTileCanvasHeight_ = tileSize[1];
-      } else {
-        clipTileContext.clearRect(0, 0, tileSize[0], tileSize[1]);
-      }
-      clipTileContext.drawImage(tile.getImage(), tileGutter, tileGutter,
-          tileSize[0], tileSize[1], 0, 0, tileSize[0], tileSize[1]);
-      gl.texImage2D(ol.webgl.TEXTURE_2D, 0,
-          ol.webgl.RGBA, ol.webgl.RGBA,
-          ol.webgl.UNSIGNED_BYTE, clipTileCanvas);
-    } else {
-      gl.texImage2D(ol.webgl.TEXTURE_2D, 0,
-          ol.webgl.RGBA, ol.webgl.RGBA,
-          ol.webgl.UNSIGNED_BYTE, tile.getImage());
-    }
-    gl.texParameteri(
-        ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_MAG_FILTER, magFilter);
-    gl.texParameteri(
-        ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_MIN_FILTER, minFilter);
-    gl.texParameteri(ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_WRAP_S,
-        ol.webgl.CLAMP_TO_EDGE);
-    gl.texParameteri(ol.webgl.TEXTURE_2D, ol.webgl.TEXTURE_WRAP_T,
-        ol.webgl.CLAMP_TO_EDGE);
-    this.textureCache_.set(tileKey, {
-      texture: texture,
-      magFilter: magFilter,
-      minFilter: minFilter
-    });
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) {
-  if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
-    return new ol.renderer.webgl.ImageLayer(this, layer);
-  } else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
-    return new ol.renderer.webgl.TileLayer(this, layer);
-  } else if (ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) {
-    return new ol.renderer.webgl.VectorLayer(this, layer);
-  } else {
-    ol.DEBUG && console.assert(false, 'unexpected layer configuration');
-    return null;
-  }
-};
-
-
-/**
- * @param {ol.render.Event.Type} type Event type.
- * @param {olx.FrameState} frameState Frame state.
- * @private
- */
-ol.renderer.webgl.Map.prototype.dispatchComposeEvent_ = function(type, frameState) {
-  var map = this.getMap();
-  if (map.hasListener(type)) {
-    var context = this.context_;
-
-    var extent = frameState.extent;
-    var size = frameState.size;
-    var viewState = frameState.viewState;
-    var pixelRatio = frameState.pixelRatio;
-
-    var resolution = viewState.resolution;
-    var center = viewState.center;
-    var rotation = viewState.rotation;
-
-    var vectorContext = new ol.render.webgl.Immediate(context,
-        center, resolution, rotation, size, extent, pixelRatio);
-    var composeEvent = new ol.render.Event(type, vectorContext,
-        frameState, null, context);
-    map.dispatchEvent(composeEvent);
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.Map.prototype.disposeInternal = function() {
-  var gl = this.getGL();
-  if (!gl.isContextLost()) {
-    this.textureCache_.forEach(
-        /**
-         * @param {?ol.WebglTextureCacheEntry} textureCacheEntry
-         *     Texture cache entry.
-         */
-        function(textureCacheEntry) {
-          if (textureCacheEntry) {
-            gl.deleteTexture(textureCacheEntry.texture);
-          }
-        });
-  }
-  this.context_.dispose();
-  ol.renderer.Map.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * @param {ol.Map} map Map.
- * @param {olx.FrameState} frameState Frame state.
- * @private
- */
-ol.renderer.webgl.Map.prototype.expireCache_ = function(map, frameState) {
-  var gl = this.getGL();
-  var textureCacheEntry;
-  while (this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ >
-      ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) {
-    textureCacheEntry = this.textureCache_.peekLast();
-    if (!textureCacheEntry) {
-      if (+this.textureCache_.peekLastKey() == frameState.index) {
-        break;
-      } else {
-        --this.textureCacheFrameMarkerCount_;
-      }
-    } else {
-      gl.deleteTexture(textureCacheEntry.texture);
-    }
-    this.textureCache_.pop();
-  }
-};
-
-
-/**
- * @return {ol.webgl.Context} The context.
- */
-ol.renderer.webgl.Map.prototype.getContext = function() {
-  return this.context_;
-};
-
-
-/**
- * @return {WebGLRenderingContext} GL.
- */
-ol.renderer.webgl.Map.prototype.getGL = function() {
-  return this.gl_;
-};
-
-
-/**
- * @return {ol.structs.PriorityQueue.<Array>} Tile texture queue.
- */
-ol.renderer.webgl.Map.prototype.getTileTextureQueue = function() {
-  return this.tileTextureQueue_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.Map.prototype.getType = function() {
-  return ol.renderer.Type.WEBGL;
-};
-
-
-/**
- * @param {ol.events.Event} event Event.
- * @protected
- */
-ol.renderer.webgl.Map.prototype.handleWebGLContextLost = function(event) {
-  event.preventDefault();
-  this.textureCache_.clear();
-  this.textureCacheFrameMarkerCount_ = 0;
-
-  var renderers = this.getLayerRenderers();
-  for (var id in renderers) {
-    var renderer = /** @type {ol.renderer.webgl.Layer} */ (renderers[id]);
-    renderer.handleWebGLContextLost();
-  }
-};
-
-
-/**
- * @protected
- */
-ol.renderer.webgl.Map.prototype.handleWebGLContextRestored = function() {
-  this.initializeGL_();
-  this.getMap().render();
-};
-
-
-/**
- * @private
- */
-ol.renderer.webgl.Map.prototype.initializeGL_ = function() {
-  var gl = this.gl_;
-  gl.activeTexture(ol.webgl.TEXTURE0);
-  gl.blendFuncSeparate(
-      ol.webgl.SRC_ALPHA, ol.webgl.ONE_MINUS_SRC_ALPHA,
-      ol.webgl.ONE, ol.webgl.ONE_MINUS_SRC_ALPHA);
-  gl.disable(ol.webgl.CULL_FACE);
-  gl.disable(ol.webgl.DEPTH_TEST);
-  gl.disable(ol.webgl.SCISSOR_TEST);
-  gl.disable(ol.webgl.STENCIL_TEST);
-};
-
-
-/**
- * @param {ol.Tile} tile Tile.
- * @return {boolean} Is tile texture loaded.
- */
-ol.renderer.webgl.Map.prototype.isTileTextureLoaded = function(tile) {
-  return this.textureCache_.containsKey(tile.getKey());
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
-
-  var context = this.getContext();
-  var gl = this.getGL();
-
-  if (gl.isContextLost()) {
-    return false;
-  }
-
-  if (!frameState) {
-    if (this.renderedVisible_) {
-      this.canvas_.style.display = 'none';
-      this.renderedVisible_ = false;
-    }
-    return false;
-  }
-
-  this.focus_ = frameState.focus;
-
-  this.textureCache_.set((-frameState.index).toString(), null);
-  ++this.textureCacheFrameMarkerCount_;
-
-  this.dispatchComposeEvent_(ol.render.Event.Type.PRECOMPOSE, frameState);
-
-  /** @type {Array.<ol.LayerState>} */
-  var layerStatesToDraw = [];
-  var layerStatesArray = frameState.layerStatesArray;
-  ol.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex);
-
-  var viewResolution = frameState.viewState.resolution;
-  var i, ii, layerRenderer, layerState;
-  for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {
-    layerState = layerStatesArray[i];
-    if (ol.layer.Layer.visibleAtResolution(layerState, viewResolution) &&
-        layerState.sourceState == ol.source.State.READY) {
-      layerRenderer = /** @type {ol.renderer.webgl.Layer} */ (this.getLayerRenderer(layerState.layer));
-      if (layerRenderer.prepareFrame(frameState, layerState, context)) {
-        layerStatesToDraw.push(layerState);
-      }
-    }
-  }
-
-  var width = frameState.size[0] * frameState.pixelRatio;
-  var height = frameState.size[1] * frameState.pixelRatio;
-  if (this.canvas_.width != width || this.canvas_.height != height) {
-    this.canvas_.width = width;
-    this.canvas_.height = height;
-  }
-
-  gl.bindFramebuffer(ol.webgl.FRAMEBUFFER, null);
-
-  gl.clearColor(0, 0, 0, 0);
-  gl.clear(ol.webgl.COLOR_BUFFER_BIT);
-  gl.enable(ol.webgl.BLEND);
-  gl.viewport(0, 0, this.canvas_.width, this.canvas_.height);
-
-  for (i = 0, ii = layerStatesToDraw.length; i < ii; ++i) {
-    layerState = layerStatesToDraw[i];
-    layerRenderer = /** @type {ol.renderer.webgl.Layer} */ (this.getLayerRenderer(layerState.layer));
-    layerRenderer.composeFrame(frameState, layerState, context);
-  }
-
-  if (!this.renderedVisible_) {
-    this.canvas_.style.display = '';
-    this.renderedVisible_ = true;
-  }
-
-  this.calculateMatrices2D(frameState);
-
-  if (this.textureCache_.getCount() - this.textureCacheFrameMarkerCount_ >
-      ol.WEBGL_TEXTURE_CACHE_HIGH_WATER_MARK) {
-    frameState.postRenderFunctions.push(
-      /** @type {ol.PostRenderFunction} */ (this.expireCache_.bind(this))
-    );
-  }
-
-  if (!this.tileTextureQueue_.isEmpty()) {
-    frameState.postRenderFunctions.push(this.loadNextTileTexture_);
-    frameState.animate = true;
-  }
-
-  this.dispatchComposeEvent_(ol.render.Event.Type.POSTCOMPOSE, frameState);
-
-  this.scheduleRemoveUnusedLayerRenderers(frameState);
-  this.scheduleExpireIconCache(frameState);
-
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.Map.prototype.forEachFeatureAtCoordinate = function(coordinate, frameState, callback, thisArg,
-        layerFilter, thisArg2) {
-  var result;
-
-  if (this.getGL().isContextLost()) {
-    return false;
-  }
-
-  var viewState = frameState.viewState;
-
-  var layerStates = frameState.layerStatesArray;
-  var numLayers = layerStates.length;
-  var i;
-  for (i = numLayers - 1; i >= 0; --i) {
-    var layerState = layerStates[i];
-    var layer = layerState.layer;
-    if (ol.layer.Layer.visibleAtResolution(layerState, viewState.resolution) &&
-        layerFilter.call(thisArg2, layer)) {
-      var layerRenderer = this.getLayerRenderer(layer);
-      result = layerRenderer.forEachFeatureAtCoordinate(
-          coordinate, frameState, callback, thisArg);
-      if (result) {
-        return result;
-      }
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.Map.prototype.hasFeatureAtCoordinate = function(coordinate, frameState, layerFilter, thisArg) {
-  var hasFeature = false;
-
-  if (this.getGL().isContextLost()) {
-    return false;
-  }
-
-  var viewState = frameState.viewState;
-
-  var layerStates = frameState.layerStatesArray;
-  var numLayers = layerStates.length;
-  var i;
-  for (i = numLayers - 1; i >= 0; --i) {
-    var layerState = layerStates[i];
-    var layer = layerState.layer;
-    if (ol.layer.Layer.visibleAtResolution(layerState, viewState.resolution) &&
-        layerFilter.call(thisArg, layer)) {
-      var layerRenderer = this.getLayerRenderer(layer);
-      hasFeature =
-          layerRenderer.hasFeatureAtCoordinate(coordinate, frameState);
-      if (hasFeature) {
-        return true;
-      }
-    }
-  }
-  return hasFeature;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.renderer.webgl.Map.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg,
-        layerFilter, thisArg2) {
-  if (this.getGL().isContextLost()) {
-    return false;
-  }
-
-  var viewState = frameState.viewState;
-  var result;
-
-  var layerStates = frameState.layerStatesArray;
-  var numLayers = layerStates.length;
-  var i;
-  for (i = numLayers - 1; i >= 0; --i) {
-    var layerState = layerStates[i];
-    var layer = layerState.layer;
-    if (ol.layer.Layer.visibleAtResolution(layerState, viewState.resolution) &&
-        layerFilter.call(thisArg, layer)) {
-      var layerRenderer = this.getLayerRenderer(layer);
-      result = layerRenderer.forEachLayerAtPixel(
-          pixel, frameState, callback, thisArg);
-      if (result) {
-        return result;
-      }
-    }
-  }
-  return undefined;
-};
-
-// FIXME recheck layer/map projection compatibility when projection changes
-// FIXME layer renderers should skip when they can't reproject
-// FIXME add tilt and height?
-
-goog.provide('ol.Map');
-
-goog.require('ol');
-goog.require('ol.Collection');
-goog.require('ol.MapBrowserEvent');
-goog.require('ol.MapBrowserEvent.EventType');
-goog.require('ol.MapBrowserEventHandler');
-goog.require('ol.MapEvent');
-goog.require('ol.Object');
-goog.require('ol.ObjectEventType');
-goog.require('ol.TileQueue');
-goog.require('ol.View');
-goog.require('ol.array');
-goog.require('ol.asserts');
-goog.require('ol.control');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.events.Event');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.functions');
-goog.require('ol.has');
-goog.require('ol.interaction');
-goog.require('ol.layer.Group');
-goog.require('ol.obj');
-goog.require('ol.proj.common');
-goog.require('ol.renderer.Type');
-goog.require('ol.renderer.Map');
-goog.require('ol.renderer.canvas.Map');
-goog.require('ol.renderer.webgl.Map');
-goog.require('ol.size');
-goog.require('ol.structs.PriorityQueue');
-goog.require('ol.transform');
-
-
-/**
- * @const
- * @type {string}
- */
-ol.OL3_URL = 'https://openlayers.org/';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.OL3_LOGO_URL = 'data:image/png;base64,' +
-    'iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBI' +
-    'WXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAA' +
-    'AhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszW' +
-    'WMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvY' +
-    'asvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvX' +
-    'H1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1Vk' +
-    'bMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW' +
-    '2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLP' +
-    'VcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqT' +
-    'acrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaar' +
-    'ldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+Hi' +
-    'zeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDn' +
-    'BAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSF' +
-    'hYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJ' +
-    'REFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxC' +
-    'Brb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe' +
-    '0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8' +
-    'a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7a' +
-    'hgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCn' +
-    'B3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDg' +
-    'q82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC';
-
-
-/**
- * @type {Array.<ol.renderer.Type>}
- * @const
- */
-ol.DEFAULT_RENDERER_TYPES = [
-  ol.renderer.Type.CANVAS,
-  ol.renderer.Type.WEBGL
-];
-
-
-/**
- * @classdesc
- * The map is the core component of OpenLayers. For a map to render, a view,
- * one or more layers, and a target container are needed:
- *
- *     var map = new ol.Map({
- *       view: new ol.View({
- *         center: [0, 0],
- *         zoom: 1
- *       }),
- *       layers: [
- *         new ol.layer.Tile({
- *           source: new ol.source.OSM()
- *         })
- *       ],
- *       target: 'map'
- *     });
- *
- * The above snippet creates a map using a {@link ol.layer.Tile} to display
- * {@link ol.source.OSM} OSM data and render it to a DOM element with the
- * id `map`.
- *
- * The constructor places a viewport container (with CSS class name
- * `ol-viewport`) in the target element (see `getViewport()`), and then two
- * further elements within the viewport: one with CSS class name
- * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with
- * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`
- * option of {@link ol.Overlay} for the difference). The map itself is placed in
- * a further element within the viewport.
- *
- * Layers are stored as a `ol.Collection` in layerGroups. A top-level group is
- * provided by the library. This is what is accessed by `getLayerGroup` and
- * `setLayerGroup`. Layers entered in the options are added to this group, and
- * `addLayer` and `removeLayer` change the layer collection in the group.
- * `getLayers` is a convenience function for `getLayerGroup().getLayers()`.
- * Note that `ol.layer.Group` is a subclass of `ol.layer.Base`, so layers
- * entered in the options or added with `addLayer` can be groups, which can
- * contain further groups, and so on.
- *
- * @constructor
- * @extends {ol.Object}
- * @param {olx.MapOptions} options Map options.
- * @fires ol.MapBrowserEvent
- * @fires ol.MapEvent
- * @fires ol.render.Event#postcompose
- * @fires ol.render.Event#precompose
- * @api stable
- */
-ol.Map = function(options) {
-
-  ol.Object.call(this);
-
-  var optionsInternal = ol.Map.createOptionsInternal(options);
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.loadTilesWhileAnimating_ =
-      options.loadTilesWhileAnimating !== undefined ?
-          options.loadTilesWhileAnimating : false;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.loadTilesWhileInteracting_ =
-      options.loadTilesWhileInteracting !== undefined ?
-          options.loadTilesWhileInteracting : false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.pixelRatio_ = options.pixelRatio !== undefined ?
-      options.pixelRatio : ol.has.DEVICE_PIXEL_RATIO;
-
-  /**
-   * @private
-   * @type {Object.<string, string>}
-   */
-  this.logos_ = optionsInternal.logos;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.animationDelayKey_;
-
-  /**
-   * @private
-   */
-  this.animationDelay_ = function() {
-    this.animationDelayKey_ = undefined;
-    this.renderFrame_.call(this, Date.now());
-  }.bind(this);
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.coordinateToPixelTransform_ = ol.transform.create();
-
-  /**
-   * @private
-   * @type {ol.Transform}
-   */
-  this.pixelToCoordinateTransform_ = ol.transform.create();
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.frameIndex_ = 0;
-
-  /**
-   * @private
-   * @type {?olx.FrameState}
-   */
-  this.frameState_ = null;
-
-  /**
-   * The extent at the previous 'moveend' event.
-   * @private
-   * @type {ol.Extent}
-   */
-  this.previousExtent_ = ol.extent.createEmpty();
-
-  /**
-   * @private
-   * @type {?ol.EventsKey}
-   */
-  this.viewPropertyListenerKey_ = null;
-
-  /**
-   * @private
-   * @type {Array.<ol.EventsKey>}
-   */
-  this.layerGroupPropertyListenerKeys_ = null;
-
-  /**
-   * @private
-   * @type {Element}
-   */
-  this.viewport_ = document.createElement('DIV');
-  this.viewport_.className = 'ol-viewport' + (ol.has.TOUCH ? ' ol-touch' : '');
-  this.viewport_.style.position = 'relative';
-  this.viewport_.style.overflow = 'hidden';
-  this.viewport_.style.width = '100%';
-  this.viewport_.style.height = '100%';
-  // prevent page zoom on IE >= 10 browsers
-  this.viewport_.style.msTouchAction = 'none';
-  this.viewport_.style.touchAction = 'none';
-
-  /**
-   * @private
-   * @type {!Element}
-   */
-  this.overlayContainer_ = document.createElement('DIV');
-  this.overlayContainer_.className = 'ol-overlaycontainer';
-  this.viewport_.appendChild(this.overlayContainer_);
-
-  /**
-   * @private
-   * @type {!Element}
-   */
-  this.overlayContainerStopEvent_ = document.createElement('DIV');
-  this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';
-  var overlayEvents = [
-    ol.events.EventType.CLICK,
-    ol.events.EventType.DBLCLICK,
-    ol.events.EventType.MOUSEDOWN,
-    ol.events.EventType.TOUCHSTART,
-    ol.events.EventType.MSPOINTERDOWN,
-    ol.MapBrowserEvent.EventType.POINTERDOWN,
-    ol.events.EventType.MOUSEWHEEL,
-    ol.events.EventType.WHEEL
-  ];
-  for (var i = 0, ii = overlayEvents.length; i < ii; ++i) {
-    ol.events.listen(this.overlayContainerStopEvent_, overlayEvents[i],
-        ol.events.Event.stopPropagation);
-  }
-  this.viewport_.appendChild(this.overlayContainerStopEvent_);
-
-  /**
-   * @private
-   * @type {ol.MapBrowserEventHandler}
-   */
-  this.mapBrowserEventHandler_ = new ol.MapBrowserEventHandler(this);
-  for (var key in ol.MapBrowserEvent.EventType) {
-    ol.events.listen(this.mapBrowserEventHandler_, ol.MapBrowserEvent.EventType[key],
-        this.handleMapBrowserEvent, this);
-  }
-
-  /**
-   * @private
-   * @type {Element|Document}
-   */
-  this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;
-
-  /**
-   * @private
-   * @type {Array.<ol.EventsKey>}
-   */
-  this.keyHandlerKeys_ = null;
-
-  ol.events.listen(this.viewport_, ol.events.EventType.WHEEL,
-      this.handleBrowserEvent, this);
-  ol.events.listen(this.viewport_, ol.events.EventType.MOUSEWHEEL,
-      this.handleBrowserEvent, this);
-
-  /**
-   * @type {ol.Collection.<ol.control.Control>}
-   * @private
-   */
-  this.controls_ = optionsInternal.controls;
-
-  /**
-   * @type {ol.Collection.<ol.interaction.Interaction>}
-   * @private
-   */
-  this.interactions_ = optionsInternal.interactions;
-
-  /**
-   * @type {ol.Collection.<ol.Overlay>}
-   * @private
-   */
-  this.overlays_ = optionsInternal.overlays;
-
-  /**
-   * A lookup of overlays by id.
-   * @private
-   * @type {Object.<string, ol.Overlay>}
-   */
-  this.overlayIdIndex_ = {};
-
-  /**
-   * @type {ol.renderer.Map}
-   * @private
-   */
-  this.renderer_ = new optionsInternal.rendererConstructor(this.viewport_, this);
-
-  /**
-   * @type {function(Event)|undefined}
-   * @private
-   */
-  this.handleResize_;
-
-  /**
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.focus_ = null;
-
-  /**
-   * @private
-   * @type {Array.<ol.PreRenderFunction>}
-   */
-  this.preRenderFunctions_ = [];
-
-  /**
-   * @private
-   * @type {Array.<ol.PostRenderFunction>}
-   */
-  this.postRenderFunctions_ = [];
-
-  /**
-   * @private
-   * @type {ol.TileQueue}
-   */
-  this.tileQueue_ = new ol.TileQueue(
-      this.getTilePriority.bind(this),
-      this.handleTileChange_.bind(this));
-
-  /**
-   * Uids of features to skip at rendering time.
-   * @type {Object.<string, boolean>}
-   * @private
-   */
-  this.skippedFeatureUids_ = {};
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.Map.Property.LAYERGROUP),
-      this.handleLayerGroupChanged_, this);
-  ol.events.listen(this, ol.Object.getChangeEventType(ol.Map.Property.VIEW),
-      this.handleViewChanged_, this);
-  ol.events.listen(this, ol.Object.getChangeEventType(ol.Map.Property.SIZE),
-      this.handleSizeChanged_, this);
-  ol.events.listen(this, ol.Object.getChangeEventType(ol.Map.Property.TARGET),
-      this.handleTargetChanged_, this);
-
-  // setProperties will trigger the rendering of the map if the map
-  // is "defined" already.
-  this.setProperties(optionsInternal.values);
-
-  this.controls_.forEach(
-      /**
-       * @param {ol.control.Control} control Control.
-       * @this {ol.Map}
-       */
-      function(control) {
-        control.setMap(this);
-      }, this);
-
-  ol.events.listen(this.controls_, ol.Collection.EventType.ADD,
-      /**
-       * @param {ol.Collection.Event} event Collection event.
-       */
-      function(event) {
-        event.element.setMap(this);
-      }, this);
-
-  ol.events.listen(this.controls_, ol.Collection.EventType.REMOVE,
-      /**
-       * @param {ol.Collection.Event} event Collection event.
-       */
-      function(event) {
-        event.element.setMap(null);
-      }, this);
-
-  this.interactions_.forEach(
-      /**
-       * @param {ol.interaction.Interaction} interaction Interaction.
-       * @this {ol.Map}
-       */
-      function(interaction) {
-        interaction.setMap(this);
-      }, this);
-
-  ol.events.listen(this.interactions_, ol.Collection.EventType.ADD,
-      /**
-       * @param {ol.Collection.Event} event Collection event.
-       */
-      function(event) {
-        event.element.setMap(this);
-      }, this);
-
-  ol.events.listen(this.interactions_, ol.Collection.EventType.REMOVE,
-      /**
-       * @param {ol.Collection.Event} event Collection event.
-       */
-      function(event) {
-        event.element.setMap(null);
-      }, this);
-
-  this.overlays_.forEach(this.addOverlayInternal_, this);
-
-  ol.events.listen(this.overlays_, ol.Collection.EventType.ADD,
-      /**
-       * @param {ol.Collection.Event} event Collection event.
-       */
-      function(event) {
-        this.addOverlayInternal_(/** @type {ol.Overlay} */ (event.element));
-      }, this);
-
-  ol.events.listen(this.overlays_, ol.Collection.EventType.REMOVE,
-      /**
-       * @param {ol.Collection.Event} event Collection event.
-       */
-      function(event) {
-        var overlay = /** @type {ol.Overlay} */ (event.element);
-        var id = overlay.getId();
-        if (id !== undefined) {
-          delete this.overlayIdIndex_[id.toString()];
-        }
-        event.element.setMap(null);
-      }, this);
-
-};
-ol.inherits(ol.Map, ol.Object);
-
-
-/**
- * Add the given control to the map.
- * @param {ol.control.Control} control Control.
- * @api stable
- */
-ol.Map.prototype.addControl = function(control) {
-  this.getControls().push(control);
-};
-
-
-/**
- * Add the given interaction to the map.
- * @param {ol.interaction.Interaction} interaction Interaction to add.
- * @api stable
- */
-ol.Map.prototype.addInteraction = function(interaction) {
-  this.getInteractions().push(interaction);
-};
-
-
-/**
- * Adds the given layer to the top of this map. If you want to add a layer
- * elsewhere in the stack, use `getLayers()` and the methods available on
- * {@link ol.Collection}.
- * @param {ol.layer.Base} layer Layer.
- * @api stable
- */
-ol.Map.prototype.addLayer = function(layer) {
-  var layers = this.getLayerGroup().getLayers();
-  layers.push(layer);
-};
-
-
-/**
- * Add the given overlay to the map.
- * @param {ol.Overlay} overlay Overlay.
- * @api stable
- */
-ol.Map.prototype.addOverlay = function(overlay) {
-  this.getOverlays().push(overlay);
-};
-
-
-/**
- * This deals with map's overlay collection changes.
- * @param {ol.Overlay} overlay Overlay.
- * @private
- */
-ol.Map.prototype.addOverlayInternal_ = function(overlay) {
-  var id = overlay.getId();
-  if (id !== undefined) {
-    this.overlayIdIndex_[id.toString()] = overlay;
-  }
-  overlay.setMap(this);
-};
-
-
-/**
- * Add functions to be called before rendering. This can be used for attaching
- * animations before updating the map's view.  The {@link ol.animation}
- * namespace provides several static methods for creating prerender functions.
- * @param {...ol.PreRenderFunction} var_args Any number of pre-render functions.
- * @api
- */
-ol.Map.prototype.beforeRender = function(var_args) {
-  this.render();
-  Array.prototype.push.apply(this.preRenderFunctions_, arguments);
-};
-
-
-/**
- * @param {ol.PreRenderFunction} preRenderFunction Pre-render function.
- * @return {boolean} Whether the preRenderFunction has been found and removed.
- */
-ol.Map.prototype.removePreRenderFunction = function(preRenderFunction) {
-  return ol.array.remove(this.preRenderFunctions_, preRenderFunction);
-};
-
-
-/**
- *
- * @inheritDoc
- */
-ol.Map.prototype.disposeInternal = function() {
-  this.mapBrowserEventHandler_.dispose();
-  this.renderer_.dispose();
-  ol.events.unlisten(this.viewport_, ol.events.EventType.WHEEL,
-      this.handleBrowserEvent, this);
-  ol.events.unlisten(this.viewport_, ol.events.EventType.MOUSEWHEEL,
-      this.handleBrowserEvent, this);
-  if (this.handleResize_ !== undefined) {
-    window.removeEventListener(ol.events.EventType.RESIZE,
-        this.handleResize_, false);
-    this.handleResize_ = undefined;
-  }
-  if (this.animationDelayKey_) {
-    cancelAnimationFrame(this.animationDelayKey_);
-    this.animationDelayKey_ = undefined;
-  }
-  this.setTarget(null);
-  ol.Object.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * Detect features that intersect a pixel on the viewport, and execute a
- * callback with each intersecting feature. Layers included in the detection can
- * be configured through `opt_layerFilter`.
- * @param {ol.Pixel} pixel Pixel.
- * @param {function(this: S, (ol.Feature|ol.render.Feature),
- *     ol.layer.Layer): T} callback Feature callback. The callback will be
- *     called with two arguments. The first argument is one
- *     {@link ol.Feature feature} or
- *     {@link ol.render.Feature render feature} at the pixel, the second is
- *     the {@link ol.layer.Layer layer} of the feature and will be null for
- *     unmanaged layers. To stop detection, callback functions can return a
- *     truthy value.
- * @param {S=} opt_this Value to use as `this` when executing `callback`.
- * @param {(function(this: U, ol.layer.Layer): boolean)=} opt_layerFilter Layer
- *     filter function. The filter function will receive one argument, the
- *     {@link ol.layer.Layer layer-candidate} and it should return a boolean
- *     value. Only layers which are visible and for which this function returns
- *     `true` will be tested for features. By default, all visible layers will
- *     be tested.
- * @param {U=} opt_this2 Value to use as `this` when executing `layerFilter`.
- * @return {T|undefined} Callback result, i.e. the return value of last
- * callback execution, or the first truthy callback return value.
- * @template S,T,U
- * @api stable
- */
-ol.Map.prototype.forEachFeatureAtPixel = function(pixel, callback, opt_this, opt_layerFilter, opt_this2) {
-  if (!this.frameState_) {
-    return;
-  }
-  var coordinate = this.getCoordinateFromPixel(pixel);
-  var thisArg = opt_this !== undefined ? opt_this : null;
-  var layerFilter = opt_layerFilter !== undefined ?
-      opt_layerFilter : ol.functions.TRUE;
-  var thisArg2 = opt_this2 !== undefined ? opt_this2 : null;
-  return this.renderer_.forEachFeatureAtCoordinate(
-      coordinate, this.frameState_, callback, thisArg,
-      layerFilter, thisArg2);
-};
-
-
-/**
- * Detect layers that have a color value at a pixel on the viewport, and
- * execute a callback with each matching layer. Layers included in the
- * detection can be configured through `opt_layerFilter`.
- * @param {ol.Pixel} pixel Pixel.
- * @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback
- *     Layer callback. This callback will recieve two arguments: first is the
- *     {@link ol.layer.Layer layer}, second argument is an array representing
- *     [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types
- *     that do not currently support this argument. To stop detection, callback
- *     functions can return a truthy value.
- * @param {S=} opt_this Value to use as `this` when executing `callback`.
- * @param {(function(this: U, ol.layer.Layer): boolean)=} opt_layerFilter Layer
- *     filter function. The filter function will receive one argument, the
- *     {@link ol.layer.Layer layer-candidate} and it should return a boolean
- *     value. Only layers which are visible and for which this function returns
- *     `true` will be tested for features. By default, all visible layers will
- *     be tested.
- * @param {U=} opt_this2 Value to use as `this` when executing `layerFilter`.
- * @return {T|undefined} Callback result, i.e. the return value of last
- * callback execution, or the first truthy callback return value.
- * @template S,T,U
- * @api stable
- */
-ol.Map.prototype.forEachLayerAtPixel = function(pixel, callback, opt_this, opt_layerFilter, opt_this2) {
-  if (!this.frameState_) {
-    return;
-  }
-  var thisArg = opt_this !== undefined ? opt_this : null;
-  var layerFilter = opt_layerFilter !== undefined ?
-      opt_layerFilter : ol.functions.TRUE;
-  var thisArg2 = opt_this2 !== undefined ? opt_this2 : null;
-  return this.renderer_.forEachLayerAtPixel(
-      pixel, this.frameState_, callback, thisArg,
-      layerFilter, thisArg2);
-};
-
-
-/**
- * Detect if features intersect a pixel on the viewport. Layers included in the
- * detection can be configured through `opt_layerFilter`.
- * @param {ol.Pixel} pixel Pixel.
- * @param {(function(this: U, ol.layer.Layer): boolean)=} opt_layerFilter Layer
- *     filter function. The filter function will receive one argument, the
- *     {@link ol.layer.Layer layer-candidate} and it should return a boolean
- *     value. Only layers which are visible and for which this function returns
- *     `true` will be tested for features. By default, all visible layers will
- *     be tested.
- * @param {U=} opt_this Value to use as `this` when executing `layerFilter`.
- * @return {boolean} Is there a feature at the given pixel?
- * @template U
- * @api
- */
-ol.Map.prototype.hasFeatureAtPixel = function(pixel, opt_layerFilter, opt_this) {
-  if (!this.frameState_) {
-    return false;
-  }
-  var coordinate = this.getCoordinateFromPixel(pixel);
-  var layerFilter = opt_layerFilter !== undefined ?
-      opt_layerFilter : ol.functions.TRUE;
-  var thisArg = opt_this !== undefined ? opt_this : null;
-  return this.renderer_.hasFeatureAtCoordinate(
-      coordinate, this.frameState_, layerFilter, thisArg);
-};
-
-
-/**
- * Returns the geographical coordinate for a browser event.
- * @param {Event} event Event.
- * @return {ol.Coordinate} Coordinate.
- * @api stable
- */
-ol.Map.prototype.getEventCoordinate = function(event) {
-  return this.getCoordinateFromPixel(this.getEventPixel(event));
-};
-
-
-/**
- * Returns the map pixel position for a browser event relative to the viewport.
- * @param {Event} event Event.
- * @return {ol.Pixel} Pixel.
- * @api stable
- */
-ol.Map.prototype.getEventPixel = function(event) {
-  var viewportPosition = this.viewport_.getBoundingClientRect();
-  var eventPosition = event.changedTouches ? event.changedTouches[0] : event;
-  return [
-    eventPosition.clientX - viewportPosition.left,
-    eventPosition.clientY - viewportPosition.top
-  ];
-};
-
-
-/**
- * Get the target in which this map is rendered.
- * Note that this returns what is entered as an option or in setTarget:
- * if that was an element, it returns an element; if a string, it returns that.
- * @return {Element|string|undefined} The Element or id of the Element that the
- *     map is rendered in.
- * @observable
- * @api stable
- */
-ol.Map.prototype.getTarget = function() {
-  return /** @type {Element|string|undefined} */ (
-      this.get(ol.Map.Property.TARGET));
-};
-
-
-/**
- * Get the DOM element into which this map is rendered. In contrast to
- * `getTarget` this method always return an `Element`, or `null` if the
- * map has no target.
- * @return {Element} The element that the map is rendered in.
- * @api
- */
-ol.Map.prototype.getTargetElement = function() {
-  var target = this.getTarget();
-  if (target !== undefined) {
-    return typeof target === 'string' ?
-      document.getElementById(target) :
-      target;
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * Get the coordinate for a given pixel.  This returns a coordinate in the
- * map view projection.
- * @param {ol.Pixel} pixel Pixel position in the map viewport.
- * @return {ol.Coordinate} The coordinate for the pixel position.
- * @api stable
- */
-ol.Map.prototype.getCoordinateFromPixel = function(pixel) {
-  var frameState = this.frameState_;
-  if (!frameState) {
-    return null;
-  } else {
-    return ol.transform.apply(frameState.pixelToCoordinateTransform, pixel.slice());
-  }
-};
-
-
-/**
- * Get the map controls. Modifying this collection changes the controls
- * associated with the map.
- * @return {ol.Collection.<ol.control.Control>} Controls.
- * @api stable
- */
-ol.Map.prototype.getControls = function() {
-  return this.controls_;
-};
-
-
-/**
- * Get the map overlays. Modifying this collection changes the overlays
- * associated with the map.
- * @return {ol.Collection.<ol.Overlay>} Overlays.
- * @api stable
- */
-ol.Map.prototype.getOverlays = function() {
-  return this.overlays_;
-};
-
-
-/**
- * Get an overlay by its identifier (the value returned by overlay.getId()).
- * Note that the index treats string and numeric identifiers as the same. So
- * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.
- * @param {string|number} id Overlay identifier.
- * @return {ol.Overlay} Overlay.
- * @api
- */
-ol.Map.prototype.getOverlayById = function(id) {
-  var overlay = this.overlayIdIndex_[id.toString()];
-  return overlay !== undefined ? overlay : null;
-};
-
-
-/**
- * Get the map interactions. Modifying this collection changes the interactions
- * associated with the map.
- *
- * Interactions are used for e.g. pan, zoom and rotate.
- * @return {ol.Collection.<ol.interaction.Interaction>} Interactions.
- * @api stable
- */
-ol.Map.prototype.getInteractions = function() {
-  return this.interactions_;
-};
-
-
-/**
- * Get the layergroup associated with this map.
- * @return {ol.layer.Group} A layer group containing the layers in this map.
- * @observable
- * @api stable
- */
-ol.Map.prototype.getLayerGroup = function() {
-  return /** @type {ol.layer.Group} */ (this.get(ol.Map.Property.LAYERGROUP));
-};
-
-
-/**
- * Get the collection of layers associated with this map.
- * @return {!ol.Collection.<ol.layer.Base>} Layers.
- * @api stable
- */
-ol.Map.prototype.getLayers = function() {
-  var layers = this.getLayerGroup().getLayers();
-  return layers;
-};
-
-
-/**
- * Get the pixel for a coordinate.  This takes a coordinate in the map view
- * projection and returns the corresponding pixel.
- * @param {ol.Coordinate} coordinate A map coordinate.
- * @return {ol.Pixel} A pixel position in the map viewport.
- * @api stable
- */
-ol.Map.prototype.getPixelFromCoordinate = function(coordinate) {
-  var frameState = this.frameState_;
-  if (!frameState) {
-    return null;
-  } else {
-    return ol.transform.apply(frameState.coordinateToPixelTransform,
-        coordinate.slice(0, 2));
-  }
-};
-
-
-/**
- * Get the map renderer.
- * @return {ol.renderer.Map} Renderer
- */
-ol.Map.prototype.getRenderer = function() {
-  return this.renderer_;
-};
-
-
-/**
- * Get the size of this map.
- * @return {ol.Size|undefined} The size in pixels of the map in the DOM.
- * @observable
- * @api stable
- */
-ol.Map.prototype.getSize = function() {
-  return /** @type {ol.Size|undefined} */ (this.get(ol.Map.Property.SIZE));
-};
-
-
-/**
- * Get the view associated with this map. A view manages properties such as
- * center and resolution.
- * @return {ol.View} The view that controls this map.
- * @observable
- * @api stable
- */
-ol.Map.prototype.getView = function() {
-  return /** @type {ol.View} */ (this.get(ol.Map.Property.VIEW));
-};
-
-
-/**
- * Get the element that serves as the map viewport.
- * @return {Element} Viewport.
- * @api stable
- */
-ol.Map.prototype.getViewport = function() {
-  return this.viewport_;
-};
-
-
-/**
- * Get the element that serves as the container for overlays.  Elements added to
- * this container will let mousedown and touchstart events through to the map,
- * so clicks and gestures on an overlay will trigger {@link ol.MapBrowserEvent}
- * events.
- * @return {!Element} The map's overlay container.
- */
-ol.Map.prototype.getOverlayContainer = function() {
-  return this.overlayContainer_;
-};
-
-
-/**
- * Get the element that serves as a container for overlays that don't allow
- * event propagation. Elements added to this container won't let mousedown and
- * touchstart events through to the map, so clicks and gestures on an overlay
- * don't trigger any {@link ol.MapBrowserEvent}.
- * @return {!Element} The map's overlay container that stops events.
- */
-ol.Map.prototype.getOverlayContainerStopEvent = function() {
-  return this.overlayContainerStopEvent_;
-};
-
-
-/**
- * @param {ol.Tile} tile Tile.
- * @param {string} tileSourceKey Tile source key.
- * @param {ol.Coordinate} tileCenter Tile center.
- * @param {number} tileResolution Tile resolution.
- * @return {number} Tile priority.
- */
-ol.Map.prototype.getTilePriority = function(tile, tileSourceKey, tileCenter, tileResolution) {
-  // Filter out tiles at higher zoom levels than the current zoom level, or that
-  // are outside the visible extent.
-  var frameState = this.frameState_;
-  if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {
-    return ol.structs.PriorityQueue.DROP;
-  }
-  if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {
-    return ol.structs.PriorityQueue.DROP;
-  }
-  // Prioritize the highest zoom level tiles closest to the focus.
-  // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).
-  // Within a zoom level, tiles are prioritized by the distance in pixels
-  // between the center of the tile and the focus.  The factor of 65536 means
-  // that the prioritization should behave as desired for tiles up to
-  // 65536 * Math.log(2) = 45426 pixels from the focus.
-  var deltaX = tileCenter[0] - frameState.focus[0];
-  var deltaY = tileCenter[1] - frameState.focus[1];
-  return 65536 * Math.log(tileResolution) +
-      Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution;
-};
-
-
-/**
- * @param {Event} browserEvent Browser event.
- * @param {string=} opt_type Type.
- */
-ol.Map.prototype.handleBrowserEvent = function(browserEvent, opt_type) {
-  var type = opt_type || browserEvent.type;
-  var mapBrowserEvent = new ol.MapBrowserEvent(type, this, browserEvent);
-  this.handleMapBrowserEvent(mapBrowserEvent);
-};
-
-
-/**
- * @param {ol.MapBrowserEvent} mapBrowserEvent The event to handle.
- */
-ol.Map.prototype.handleMapBrowserEvent = function(mapBrowserEvent) {
-  if (!this.frameState_) {
-    // With no view defined, we cannot translate pixels into geographical
-    // coordinates so interactions cannot be used.
-    return;
-  }
-  this.focus_ = mapBrowserEvent.coordinate;
-  mapBrowserEvent.frameState = this.frameState_;
-  var interactionsArray = this.getInteractions().getArray();
-  var i;
-  if (this.dispatchEvent(mapBrowserEvent) !== false) {
-    for (i = interactionsArray.length - 1; i >= 0; i--) {
-      var interaction = interactionsArray[i];
-      if (!interaction.getActive()) {
-        continue;
-      }
-      var cont = interaction.handleEvent(mapBrowserEvent);
-      if (!cont) {
-        break;
-      }
-    }
-  }
-};
-
-
-/**
- * @protected
- */
-ol.Map.prototype.handlePostRender = function() {
-
-  var frameState = this.frameState_;
-
-  // Manage the tile queue
-  // Image loads are expensive and a limited resource, so try to use them
-  // efficiently:
-  // * When the view is static we allow a large number of parallel tile loads
-  //   to complete the frame as quickly as possible.
-  // * When animating or interacting, image loads can cause janks, so we reduce
-  //   the maximum number of loads per frame and limit the number of parallel
-  //   tile loads to remain reactive to view changes and to reduce the chance of
-  //   loading tiles that will quickly disappear from view.
-  var tileQueue = this.tileQueue_;
-  if (!tileQueue.isEmpty()) {
-    var maxTotalLoading = 16;
-    var maxNewLoads = maxTotalLoading;
-    if (frameState) {
-      var hints = frameState.viewHints;
-      if (hints[ol.View.Hint.ANIMATING]) {
-        maxTotalLoading = this.loadTilesWhileAnimating_ ? 8 : 0;
-        maxNewLoads = 2;
-      }
-      if (hints[ol.View.Hint.INTERACTING]) {
-        maxTotalLoading = this.loadTilesWhileInteracting_ ? 8 : 0;
-        maxNewLoads = 2;
-      }
-    }
-    if (tileQueue.getTilesLoading() < maxTotalLoading) {
-      tileQueue.reprioritize(); // FIXME only call if view has changed
-      tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);
-    }
-  }
-
-  var postRenderFunctions = this.postRenderFunctions_;
-  var i, ii;
-  for (i = 0, ii = postRenderFunctions.length; i < ii; ++i) {
-    postRenderFunctions[i](this, frameState);
-  }
-  postRenderFunctions.length = 0;
-};
-
-
-/**
- * @private
- */
-ol.Map.prototype.handleSizeChanged_ = function() {
-  this.render();
-};
-
-
-/**
- * @private
- */
-ol.Map.prototype.handleTargetChanged_ = function() {
-  // target may be undefined, null, a string or an Element.
-  // If it's a string we convert it to an Element before proceeding.
-  // If it's not now an Element we remove the viewport from the DOM.
-  // If it's an Element we append the viewport element to it.
-
-  var targetElement;
-  if (this.getTarget()) {
-    targetElement = this.getTargetElement();
-    ol.DEBUG && console.assert(targetElement !== null,
-        'expects a non-null value for targetElement');
-  }
-
-  if (this.keyHandlerKeys_) {
-    for (var i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {
-      ol.events.unlistenByKey(this.keyHandlerKeys_[i]);
-    }
-    this.keyHandlerKeys_ = null;
-  }
-
-  if (!targetElement) {
-    ol.dom.removeNode(this.viewport_);
-    if (this.handleResize_ !== undefined) {
-      window.removeEventListener(ol.events.EventType.RESIZE,
-          this.handleResize_, false);
-      this.handleResize_ = undefined;
-    }
-  } else {
-    targetElement.appendChild(this.viewport_);
-
-    var keyboardEventTarget = !this.keyboardEventTarget_ ?
-        targetElement : this.keyboardEventTarget_;
-    this.keyHandlerKeys_ = [
-      ol.events.listen(keyboardEventTarget, ol.events.EventType.KEYDOWN,
-          this.handleBrowserEvent, this),
-      ol.events.listen(keyboardEventTarget, ol.events.EventType.KEYPRESS,
-          this.handleBrowserEvent, this)
-    ];
-
-    if (!this.handleResize_) {
-      this.handleResize_ = this.updateSize.bind(this);
-      window.addEventListener(ol.events.EventType.RESIZE,
-          this.handleResize_, false);
-    }
-  }
-
-  this.updateSize();
-  // updateSize calls setSize, so no need to call this.render
-  // ourselves here.
-};
-
-
-/**
- * @private
- */
-ol.Map.prototype.handleTileChange_ = function() {
-  this.render();
-};
-
-
-/**
- * @private
- */
-ol.Map.prototype.handleViewPropertyChanged_ = function() {
-  this.render();
-};
-
-
-/**
- * @private
- */
-ol.Map.prototype.handleViewChanged_ = function() {
-  if (this.viewPropertyListenerKey_) {
-    ol.events.unlistenByKey(this.viewPropertyListenerKey_);
-    this.viewPropertyListenerKey_ = null;
-  }
-  var view = this.getView();
-  if (view) {
-    this.viewPropertyListenerKey_ = ol.events.listen(
-        view, ol.ObjectEventType.PROPERTYCHANGE,
-        this.handleViewPropertyChanged_, this);
-  }
-  this.render();
-};
-
-
-/**
- * @private
- */
-ol.Map.prototype.handleLayerGroupChanged_ = function() {
-  if (this.layerGroupPropertyListenerKeys_) {
-    this.layerGroupPropertyListenerKeys_.forEach(ol.events.unlistenByKey);
-    this.layerGroupPropertyListenerKeys_ = null;
-  }
-  var layerGroup = this.getLayerGroup();
-  if (layerGroup) {
-    this.layerGroupPropertyListenerKeys_ = [
-      ol.events.listen(
-          layerGroup, ol.ObjectEventType.PROPERTYCHANGE,
-          this.render, this),
-      ol.events.listen(
-          layerGroup, ol.events.EventType.CHANGE,
-          this.render, this)
-    ];
-  }
-  this.render();
-};
-
-
-/**
- * @return {boolean} Is rendered.
- */
-ol.Map.prototype.isRendered = function() {
-  return !!this.frameState_;
-};
-
-
-/**
- * Requests an immediate render in a synchronous manner.
- * @api stable
- */
-ol.Map.prototype.renderSync = function() {
-  if (this.animationDelayKey_) {
-    cancelAnimationFrame(this.animationDelayKey_);
-  }
-  this.animationDelay_();
-};
-
-
-/**
- * Request a map rendering (at the next animation frame).
- * @api stable
- */
-ol.Map.prototype.render = function() {
-  if (this.animationDelayKey_ === undefined) {
-    this.animationDelayKey_ = requestAnimationFrame(
-        this.animationDelay_);
-  }
-};
-
-
-/**
- * Remove the given control from the map.
- * @param {ol.control.Control} control Control.
- * @return {ol.control.Control|undefined} The removed control (or undefined
- *     if the control was not found).
- * @api stable
- */
-ol.Map.prototype.removeControl = function(control) {
-  return this.getControls().remove(control);
-};
-
-
-/**
- * Remove the given interaction from the map.
- * @param {ol.interaction.Interaction} interaction Interaction to remove.
- * @return {ol.interaction.Interaction|undefined} The removed interaction (or
- *     undefined if the interaction was not found).
- * @api stable
- */
-ol.Map.prototype.removeInteraction = function(interaction) {
-  return this.getInteractions().remove(interaction);
-};
-
-
-/**
- * Removes the given layer from the map.
- * @param {ol.layer.Base} layer Layer.
- * @return {ol.layer.Base|undefined} The removed layer (or undefined if the
- *     layer was not found).
- * @api stable
- */
-ol.Map.prototype.removeLayer = function(layer) {
-  var layers = this.getLayerGroup().getLayers();
-  return layers.remove(layer);
-};
-
-
-/**
- * Remove the given overlay from the map.
- * @param {ol.Overlay} overlay Overlay.
- * @return {ol.Overlay|undefined} The removed overlay (or undefined
- *     if the overlay was not found).
- * @api stable
- */
-ol.Map.prototype.removeOverlay = function(overlay) {
-  return this.getOverlays().remove(overlay);
-};
-
-
-/**
- * @param {number} time Time.
- * @private
- */
-ol.Map.prototype.renderFrame_ = function(time) {
-
-  var i, ii, viewState;
-
-  var size = this.getSize();
-  var view = this.getView();
-  var extent = ol.extent.createEmpty();
-  /** @type {?olx.FrameState} */
-  var frameState = null;
-  if (size !== undefined && ol.size.hasArea(size) && view && view.isDef()) {
-    var viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);
-    var layerStatesArray = this.getLayerGroup().getLayerStatesArray();
-    var layerStates = {};
-    for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {
-      layerStates[ol.getUid(layerStatesArray[i].layer)] = layerStatesArray[i];
-    }
-    viewState = view.getState();
-    frameState = /** @type {olx.FrameState} */ ({
-      animate: false,
-      attributions: {},
-      coordinateToPixelTransform: this.coordinateToPixelTransform_,
-      extent: extent,
-      focus: !this.focus_ ? viewState.center : this.focus_,
-      index: this.frameIndex_++,
-      layerStates: layerStates,
-      layerStatesArray: layerStatesArray,
-      logos: ol.obj.assign({}, this.logos_),
-      pixelRatio: this.pixelRatio_,
-      pixelToCoordinateTransform: this.pixelToCoordinateTransform_,
-      postRenderFunctions: [],
-      size: size,
-      skippedFeatureUids: this.skippedFeatureUids_,
-      tileQueue: this.tileQueue_,
-      time: time,
-      usedTiles: {},
-      viewState: viewState,
-      viewHints: viewHints,
-      wantedTiles: {}
-    });
-  }
-
-  if (frameState) {
-    var preRenderFunctions = this.preRenderFunctions_;
-    var n = 0, preRenderFunction;
-    for (i = 0, ii = preRenderFunctions.length; i < ii; ++i) {
-      preRenderFunction = preRenderFunctions[i];
-      if (preRenderFunction(this, frameState)) {
-        preRenderFunctions[n++] = preRenderFunction;
-      }
-    }
-    preRenderFunctions.length = n;
-
-    frameState.extent = ol.extent.getForViewAndSize(viewState.center,
-        viewState.resolution, viewState.rotation, frameState.size, extent);
-  }
-
-  this.frameState_ = frameState;
-  this.renderer_.renderFrame(frameState);
-
-  if (frameState) {
-    if (frameState.animate) {
-      this.render();
-    }
-    Array.prototype.push.apply(
-        this.postRenderFunctions_, frameState.postRenderFunctions);
-
-    var idle = this.preRenderFunctions_.length === 0 &&
-        !frameState.viewHints[ol.View.Hint.ANIMATING] &&
-        !frameState.viewHints[ol.View.Hint.INTERACTING] &&
-        !ol.extent.equals(frameState.extent, this.previousExtent_);
-
-    if (idle) {
-      this.dispatchEvent(
-          new ol.MapEvent(ol.MapEvent.Type.MOVEEND, this, frameState));
-      ol.extent.clone(frameState.extent, this.previousExtent_);
-    }
-  }
-
-  this.dispatchEvent(
-      new ol.MapEvent(ol.MapEvent.Type.POSTRENDER, this, frameState));
-
-  setTimeout(this.handlePostRender.bind(this), 0);
-
-};
-
-
-/**
- * Sets the layergroup of this map.
- * @param {ol.layer.Group} layerGroup A layer group containing the layers in
- *     this map.
- * @observable
- * @api stable
- */
-ol.Map.prototype.setLayerGroup = function(layerGroup) {
-  this.set(ol.Map.Property.LAYERGROUP, layerGroup);
-};
-
-
-/**
- * Set the size of this map.
- * @param {ol.Size|undefined} size The size in pixels of the map in the DOM.
- * @observable
- * @api
- */
-ol.Map.prototype.setSize = function(size) {
-  this.set(ol.Map.Property.SIZE, size);
-};
-
-
-/**
- * Set the target element to render this map into.
- * @param {Element|string|undefined} target The Element or id of the Element
- *     that the map is rendered in.
- * @observable
- * @api stable
- */
-ol.Map.prototype.setTarget = function(target) {
-  this.set(ol.Map.Property.TARGET, target);
-};
-
-
-/**
- * Set the view for this map.
- * @param {ol.View} view The view that controls this map.
- * @observable
- * @api stable
- */
-ol.Map.prototype.setView = function(view) {
-  this.set(ol.Map.Property.VIEW, view);
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- */
-ol.Map.prototype.skipFeature = function(feature) {
-  var featureUid = ol.getUid(feature).toString();
-  this.skippedFeatureUids_[featureUid] = true;
-  this.render();
-};
-
-
-/**
- * Force a recalculation of the map viewport size.  This should be called when
- * third-party code changes the size of the map viewport.
- * @api stable
- */
-ol.Map.prototype.updateSize = function() {
-  var targetElement = this.getTargetElement();
-
-  if (!targetElement) {
-    this.setSize(undefined);
-  } else {
-    var computedStyle = getComputedStyle(targetElement);
-    this.setSize([
-      targetElement.offsetWidth -
-          parseFloat(computedStyle['borderLeftWidth']) -
-          parseFloat(computedStyle['paddingLeft']) -
-          parseFloat(computedStyle['paddingRight']) -
-          parseFloat(computedStyle['borderRightWidth']),
-      targetElement.offsetHeight -
-          parseFloat(computedStyle['borderTopWidth']) -
-          parseFloat(computedStyle['paddingTop']) -
-          parseFloat(computedStyle['paddingBottom']) -
-          parseFloat(computedStyle['borderBottomWidth'])
-    ]);
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- */
-ol.Map.prototype.unskipFeature = function(feature) {
-  var featureUid = ol.getUid(feature).toString();
-  delete this.skippedFeatureUids_[featureUid];
-  this.render();
-};
-
-
-/**
- * @param {olx.MapOptions} options Map options.
- * @return {ol.MapOptionsInternal} Internal map options.
- */
-ol.Map.createOptionsInternal = function(options) {
-
-  /**
-   * @type {Element|Document}
-   */
-  var keyboardEventTarget = null;
-  if (options.keyboardEventTarget !== undefined) {
-    keyboardEventTarget = typeof options.keyboardEventTarget === 'string' ?
-        document.getElementById(options.keyboardEventTarget) :
-        options.keyboardEventTarget;
-  }
-
-  /**
-   * @type {Object.<string, *>}
-   */
-  var values = {};
-
-  var logos = {};
-  if (options.logo === undefined ||
-      (typeof options.logo === 'boolean' && options.logo)) {
-    logos[ol.OL3_LOGO_URL] = ol.OL3_URL;
-  } else {
-    var logo = options.logo;
-    if (typeof logo === 'string') {
-      logos[logo] = '';
-    } else if (logo instanceof HTMLElement) {
-      logos[ol.getUid(logo).toString()] = logo;
-    } else if (logo) {
-      ol.asserts.assert(typeof logo.href == 'string', 44); // `logo.href` should be a string.
-      ol.asserts.assert(typeof logo.src == 'string', 45); // `logo.src` should be a string.
-      logos[logo.src] = logo.href;
-    }
-  }
-
-  var layerGroup = (options.layers instanceof ol.layer.Group) ?
-      options.layers : new ol.layer.Group({layers: options.layers});
-  values[ol.Map.Property.LAYERGROUP] = layerGroup;
-
-  values[ol.Map.Property.TARGET] = options.target;
-
-  values[ol.Map.Property.VIEW] = options.view !== undefined ?
-      options.view : new ol.View();
-
-  /**
-   * @type {function(new: ol.renderer.Map, Element, ol.Map)}
-   */
-  var rendererConstructor = ol.renderer.Map;
-
-  /**
-   * @type {Array.<ol.renderer.Type>}
-   */
-  var rendererTypes;
-  if (options.renderer !== undefined) {
-    if (Array.isArray(options.renderer)) {
-      rendererTypes = options.renderer;
-    } else if (typeof options.renderer === 'string') {
-      rendererTypes = [options.renderer];
-    } else {
-      ol.asserts.assert(false, 46); // Incorrect format for `renderer` option
-    }
-    if (rendererTypes.indexOf(/** @type {ol.renderer.Type} */ ('dom')) >= 0) {
-      ol.DEBUG && console.assert(false, 'The DOM render has been removed');
-      rendererTypes = rendererTypes.concat(ol.DEFAULT_RENDERER_TYPES);
-    }
-  } else {
-    rendererTypes = ol.DEFAULT_RENDERER_TYPES;
-  }
-
-  var i, ii;
-  for (i = 0, ii = rendererTypes.length; i < ii; ++i) {
-    /** @type {ol.renderer.Type} */
-    var rendererType = rendererTypes[i];
-    if (ol.ENABLE_CANVAS && rendererType == ol.renderer.Type.CANVAS) {
-      if (ol.has.CANVAS) {
-        rendererConstructor = ol.renderer.canvas.Map;
-        break;
-      }
-    } else if (ol.ENABLE_WEBGL && rendererType == ol.renderer.Type.WEBGL) {
-      if (ol.has.WEBGL) {
-        rendererConstructor = ol.renderer.webgl.Map;
-        break;
-      }
-    }
-  }
-
-  var controls;
-  if (options.controls !== undefined) {
-    if (Array.isArray(options.controls)) {
-      controls = new ol.Collection(options.controls.slice());
-    } else {
-      ol.asserts.assert(options.controls instanceof ol.Collection,
-          47); // Expected `controls` to be an array or an `ol.Collection`
-      controls = options.controls;
-    }
-  } else {
-    controls = ol.control.defaults();
-  }
-
-  var interactions;
-  if (options.interactions !== undefined) {
-    if (Array.isArray(options.interactions)) {
-      interactions = new ol.Collection(options.interactions.slice());
-    } else {
-      ol.asserts.assert(options.interactions instanceof ol.Collection,
-          48); // Expected `interactions` to be an array or an `ol.Collection`
-      interactions = options.interactions;
-    }
-  } else {
-    interactions = ol.interaction.defaults();
-  }
-
-  var overlays;
-  if (options.overlays !== undefined) {
-    if (Array.isArray(options.overlays)) {
-      overlays = new ol.Collection(options.overlays.slice());
-    } else {
-      ol.asserts.assert(options.overlays instanceof ol.Collection,
-          49); // Expected `overlays` to be an array or an `ol.Collection`
-      overlays = options.overlays;
-    }
-  } else {
-    overlays = new ol.Collection();
-  }
-
-  return {
-    controls: controls,
-    interactions: interactions,
-    keyboardEventTarget: keyboardEventTarget,
-    logos: logos,
-    overlays: overlays,
-    rendererConstructor: rendererConstructor,
-    values: values
-  };
-
-};
-
-/**
- * @enum {string}
- */
-ol.Map.Property = {
-  LAYERGROUP: 'layergroup',
-  SIZE: 'size',
-  TARGET: 'target',
-  VIEW: 'view'
-};
-
-
-ol.proj.common.add();
-
-goog.provide('ol.Overlay');
-
-goog.require('ol');
-goog.require('ol.MapEvent');
-goog.require('ol.Object');
-goog.require('ol.animation');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.extent');
-
-
-/**
- * @classdesc
- * An element to be displayed over the map and attached to a single map
- * location.  Like {@link ol.control.Control}, Overlays are visible widgets.
- * Unlike Controls, they are not in a fixed position on the screen, but are tied
- * to a geographical coordinate, so panning the map will move an Overlay but not
- * a Control.
- *
- * Example:
- *
- *     var popup = new ol.Overlay({
- *       element: document.getElementById('popup')
- *     });
- *     popup.setPosition(coordinate);
- *     map.addOverlay(popup);
- *
- * @constructor
- * @extends {ol.Object}
- * @param {olx.OverlayOptions} options Overlay options.
- * @api stable
- */
-ol.Overlay = function(options) {
-
-  ol.Object.call(this);
-
-  /**
-   * @private
-   * @type {number|string|undefined}
-   */
-  this.id_ = options.id;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.insertFirst_ = options.insertFirst !== undefined ?
-      options.insertFirst : true;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.stopEvent_ = options.stopEvent !== undefined ? options.stopEvent : true;
-
-  /**
-   * @private
-   * @type {Element}
-   */
-  this.element_ = document.createElement('DIV');
-  this.element_.className = 'ol-overlay-container';
-  this.element_.style.position = 'absolute';
-
-  /**
-   * @protected
-   * @type {boolean}
-   */
-  this.autoPan = options.autoPan !== undefined ? options.autoPan : false;
-
-  /**
-   * @private
-   * @type {olx.animation.PanOptions}
-   */
-  this.autoPanAnimation_ = options.autoPanAnimation !== undefined ?
-      options.autoPanAnimation : /** @type {olx.animation.PanOptions} */ ({});
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.autoPanMargin_ = options.autoPanMargin !== undefined ?
-      options.autoPanMargin : 20;
-
-  /**
-   * @private
-   * @type {{bottom_: string,
-   *         left_: string,
-   *         right_: string,
-   *         top_: string,
-   *         visible: boolean}}
-   */
-  this.rendered_ = {
-    bottom_: '',
-    left_: '',
-    right_: '',
-    top_: '',
-    visible: true
-  };
-
-  /**
-   * @private
-   * @type {?ol.EventsKey}
-   */
-  this.mapPostrenderListenerKey_ = null;
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.Overlay.Property.ELEMENT),
-      this.handleElementChanged, this);
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.Overlay.Property.MAP),
-      this.handleMapChanged, this);
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.Overlay.Property.OFFSET),
-      this.handleOffsetChanged, this);
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.Overlay.Property.POSITION),
-      this.handlePositionChanged, this);
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.Overlay.Property.POSITIONING),
-      this.handlePositioningChanged, this);
-
-  if (options.element !== undefined) {
-    this.setElement(options.element);
-  }
-
-  this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);
-
-  this.setPositioning(options.positioning !== undefined ?
-      /** @type {ol.Overlay.Positioning} */ (options.positioning) :
-      ol.Overlay.Positioning.TOP_LEFT);
-
-  if (options.position !== undefined) {
-    this.setPosition(options.position);
-  }
-
-};
-ol.inherits(ol.Overlay, ol.Object);
-
-
-/**
- * Get the DOM element of this overlay.
- * @return {Element|undefined} The Element containing the overlay.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.getElement = function() {
-  return /** @type {Element|undefined} */ (
-      this.get(ol.Overlay.Property.ELEMENT));
-};
-
-
-/**
- * Get the overlay identifier which is set on constructor.
- * @return {number|string|undefined} Id.
- * @api
- */
-ol.Overlay.prototype.getId = function() {
-  return this.id_;
-};
-
-
-/**
- * Get the map associated with this overlay.
- * @return {ol.Map|undefined} The map that the overlay is part of.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.getMap = function() {
-  return /** @type {ol.Map|undefined} */ (
-      this.get(ol.Overlay.Property.MAP));
-};
-
-
-/**
- * Get the offset of this overlay.
- * @return {Array.<number>} The offset.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.getOffset = function() {
-  return /** @type {Array.<number>} */ (
-      this.get(ol.Overlay.Property.OFFSET));
-};
-
-
-/**
- * Get the current position of this overlay.
- * @return {ol.Coordinate|undefined} The spatial point that the overlay is
- *     anchored at.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.getPosition = function() {
-  return /** @type {ol.Coordinate|undefined} */ (
-      this.get(ol.Overlay.Property.POSITION));
-};
-
-
-/**
- * Get the current positioning of this overlay.
- * @return {ol.Overlay.Positioning} How the overlay is positioned
- *     relative to its point on the map.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.getPositioning = function() {
-  return /** @type {ol.Overlay.Positioning} */ (
-      this.get(ol.Overlay.Property.POSITIONING));
-};
-
-
-/**
- * @protected
- */
-ol.Overlay.prototype.handleElementChanged = function() {
-  ol.dom.removeChildren(this.element_);
-  var element = this.getElement();
-  if (element) {
-    this.element_.appendChild(element);
-  }
-};
-
-
-/**
- * @protected
- */
-ol.Overlay.prototype.handleMapChanged = function() {
-  if (this.mapPostrenderListenerKey_) {
-    ol.dom.removeNode(this.element_);
-    ol.events.unlistenByKey(this.mapPostrenderListenerKey_);
-    this.mapPostrenderListenerKey_ = null;
-  }
-  var map = this.getMap();
-  if (map) {
-    this.mapPostrenderListenerKey_ = ol.events.listen(map,
-        ol.MapEvent.Type.POSTRENDER, this.render, this);
-    this.updatePixelPosition();
-    var container = this.stopEvent_ ?
-        map.getOverlayContainerStopEvent() : map.getOverlayContainer();
-    if (this.insertFirst_) {
-      container.insertBefore(this.element_, container.childNodes[0] || null);
-    } else {
-      container.appendChild(this.element_);
-    }
-  }
-};
-
-
-/**
- * @protected
- */
-ol.Overlay.prototype.render = function() {
-  this.updatePixelPosition();
-};
-
-
-/**
- * @protected
- */
-ol.Overlay.prototype.handleOffsetChanged = function() {
-  this.updatePixelPosition();
-};
-
-
-/**
- * @protected
- */
-ol.Overlay.prototype.handlePositionChanged = function() {
-  this.updatePixelPosition();
-  if (this.get(ol.Overlay.Property.POSITION) !== undefined && this.autoPan) {
-    this.panIntoView_();
-  }
-};
-
-
-/**
- * @protected
- */
-ol.Overlay.prototype.handlePositioningChanged = function() {
-  this.updatePixelPosition();
-};
-
-
-/**
- * Set the DOM element to be associated with this overlay.
- * @param {Element|undefined} element The Element containing the overlay.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.setElement = function(element) {
-  this.set(ol.Overlay.Property.ELEMENT, element);
-};
-
-
-/**
- * Set the map to be associated with this overlay.
- * @param {ol.Map|undefined} map The map that the overlay is part of.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.setMap = function(map) {
-  this.set(ol.Overlay.Property.MAP, map);
-};
-
-
-/**
- * Set the offset for this overlay.
- * @param {Array.<number>} offset Offset.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.setOffset = function(offset) {
-  this.set(ol.Overlay.Property.OFFSET, offset);
-};
-
-
-/**
- * Set the position for this overlay. If the position is `undefined` the
- * overlay is hidden.
- * @param {ol.Coordinate|undefined} position The spatial point that the overlay
- *     is anchored at.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.setPosition = function(position) {
-  this.set(ol.Overlay.Property.POSITION, position);
-};
-
-
-/**
- * Pan the map so that the overlay is entirely visible in the current viewport
- * (if necessary).
- * @private
- */
-ol.Overlay.prototype.panIntoView_ = function() {
-  var map = this.getMap();
-
-  if (map === undefined || !map.getTargetElement()) {
-    return;
-  }
-
-  var mapRect = this.getRect_(map.getTargetElement(), map.getSize());
-  var element = /** @type {!Element} */ (this.getElement());
-  var overlayRect = this.getRect_(element,
-      [ol.dom.outerWidth(element), ol.dom.outerHeight(element)]);
-
-  var margin = this.autoPanMargin_;
-  if (!ol.extent.containsExtent(mapRect, overlayRect)) {
-    // the overlay is not completely inside the viewport, so pan the map
-    var offsetLeft = overlayRect[0] - mapRect[0];
-    var offsetRight = mapRect[2] - overlayRect[2];
-    var offsetTop = overlayRect[1] - mapRect[1];
-    var offsetBottom = mapRect[3] - overlayRect[3];
-
-    var delta = [0, 0];
-    if (offsetLeft < 0) {
-      // move map to the left
-      delta[0] = offsetLeft - margin;
-    } else if (offsetRight < 0) {
-      // move map to the right
-      delta[0] = Math.abs(offsetRight) + margin;
-    }
-    if (offsetTop < 0) {
-      // move map up
-      delta[1] = offsetTop - margin;
-    } else if (offsetBottom < 0) {
-      // move map down
-      delta[1] = Math.abs(offsetBottom) + margin;
-    }
-
-    if (delta[0] !== 0 || delta[1] !== 0) {
-      var center = /** @type {ol.Coordinate} */ (map.getView().getCenter());
-      var centerPx = map.getPixelFromCoordinate(center);
-      var newCenterPx = [
-        centerPx[0] + delta[0],
-        centerPx[1] + delta[1]
-      ];
-
-      if (this.autoPanAnimation_) {
-        this.autoPanAnimation_.source = center;
-        map.beforeRender(ol.animation.pan(this.autoPanAnimation_));
-      }
-      map.getView().setCenter(map.getCoordinateFromPixel(newCenterPx));
-    }
-  }
-};
-
-
-/**
- * Get the extent of an element relative to the document
- * @param {Element|undefined} element The element.
- * @param {ol.Size|undefined} size The size of the element.
- * @return {ol.Extent} The extent.
- * @private
- */
-ol.Overlay.prototype.getRect_ = function(element, size) {
-  var box = element.getBoundingClientRect();
-  var offsetX = box.left + window.pageXOffset;
-  var offsetY = box.top + window.pageYOffset;
-  return [
-    offsetX,
-    offsetY,
-    offsetX + size[0],
-    offsetY + size[1]
-  ];
-};
-
-
-/**
- * Set the positioning for this overlay.
- * @param {ol.Overlay.Positioning} positioning how the overlay is
- *     positioned relative to its point on the map.
- * @observable
- * @api stable
- */
-ol.Overlay.prototype.setPositioning = function(positioning) {
-  this.set(ol.Overlay.Property.POSITIONING, positioning);
-};
-
-
-/**
- * Modify the visibility of the element.
- * @param {boolean} visible Element visibility.
- * @protected
- */
-ol.Overlay.prototype.setVisible = function(visible) {
-  if (this.rendered_.visible !== visible) {
-    this.element_.style.display = visible ? '' : 'none';
-    this.rendered_.visible = visible;
-  }
-};
-
-
-/**
- * Update pixel position.
- * @protected
- */
-ol.Overlay.prototype.updatePixelPosition = function() {
-  var map = this.getMap();
-  var position = this.getPosition();
-  if (map === undefined || !map.isRendered() || position === undefined) {
-    this.setVisible(false);
-    return;
-  }
-
-  var pixel = map.getPixelFromCoordinate(position);
-  var mapSize = map.getSize();
-  this.updateRenderedPosition(pixel, mapSize);
-};
-
-
-/**
- * @param {ol.Pixel} pixel The pixel location.
- * @param {ol.Size|undefined} mapSize The map size.
- * @protected
- */
-ol.Overlay.prototype.updateRenderedPosition = function(pixel, mapSize) {
-  var style = this.element_.style;
-  var offset = this.getOffset();
-
-  var positioning = this.getPositioning();
-  ol.DEBUG && console.assert(positioning !== undefined,
-      'positioning should be defined');
-
-  var offsetX = offset[0];
-  var offsetY = offset[1];
-  if (positioning == ol.Overlay.Positioning.BOTTOM_RIGHT ||
-      positioning == ol.Overlay.Positioning.CENTER_RIGHT ||
-      positioning == ol.Overlay.Positioning.TOP_RIGHT) {
-    if (this.rendered_.left_ !== '') {
-      this.rendered_.left_ = style.left = '';
-    }
-    var right = Math.round(mapSize[0] - pixel[0] - offsetX) + 'px';
-    if (this.rendered_.right_ != right) {
-      this.rendered_.right_ = style.right = right;
-    }
-  } else {
-    if (this.rendered_.right_ !== '') {
-      this.rendered_.right_ = style.right = '';
-    }
-    if (positioning == ol.Overlay.Positioning.BOTTOM_CENTER ||
-        positioning == ol.Overlay.Positioning.CENTER_CENTER ||
-        positioning == ol.Overlay.Positioning.TOP_CENTER) {
-      offsetX -= this.element_.offsetWidth / 2;
-    }
-    var left = Math.round(pixel[0] + offsetX) + 'px';
-    if (this.rendered_.left_ != left) {
-      this.rendered_.left_ = style.left = left;
-    }
-  }
-  if (positioning == ol.Overlay.Positioning.BOTTOM_LEFT ||
-      positioning == ol.Overlay.Positioning.BOTTOM_CENTER ||
-      positioning == ol.Overlay.Positioning.BOTTOM_RIGHT) {
-    if (this.rendered_.top_ !== '') {
-      this.rendered_.top_ = style.top = '';
-    }
-    var bottom = Math.round(mapSize[1] - pixel[1] - offsetY) + 'px';
-    if (this.rendered_.bottom_ != bottom) {
-      this.rendered_.bottom_ = style.bottom = bottom;
-    }
-  } else {
-    if (this.rendered_.bottom_ !== '') {
-      this.rendered_.bottom_ = style.bottom = '';
-    }
-    if (positioning == ol.Overlay.Positioning.CENTER_LEFT ||
-        positioning == ol.Overlay.Positioning.CENTER_CENTER ||
-        positioning == ol.Overlay.Positioning.CENTER_RIGHT) {
-      offsetY -= this.element_.offsetHeight / 2;
-    }
-    var top = Math.round(pixel[1] + offsetY) + 'px';
-    if (this.rendered_.top_ != top) {
-      this.rendered_.top_ = style.top = top;
-    }
-  }
-
-  this.setVisible(true);
-};
-
-
-/**
- * Overlay position: `'bottom-left'`, `'bottom-center'`,  `'bottom-right'`,
- * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,
- * `'top-center'`, `'top-right'`
- * @enum {string}
- */
-ol.Overlay.Positioning = {
-  BOTTOM_LEFT: 'bottom-left',
-  BOTTOM_CENTER: 'bottom-center',
-  BOTTOM_RIGHT: 'bottom-right',
-  CENTER_LEFT: 'center-left',
-  CENTER_CENTER: 'center-center',
-  CENTER_RIGHT: 'center-right',
-  TOP_LEFT: 'top-left',
-  TOP_CENTER: 'top-center',
-  TOP_RIGHT: 'top-right'
-};
-
-
-/**
- * @enum {string}
- */
-ol.Overlay.Property = {
-  ELEMENT: 'element',
-  MAP: 'map',
-  OFFSET: 'offset',
-  POSITION: 'position',
-  POSITIONING: 'positioning'
-};
-
-goog.provide('ol.control.OverviewMap');
-
-goog.require('ol');
-goog.require('ol.Collection');
-goog.require('ol.Map');
-goog.require('ol.MapEvent');
-goog.require('ol.Object');
-goog.require('ol.ObjectEventType');
-goog.require('ol.Overlay');
-goog.require('ol.View');
-goog.require('ol.control.Control');
-goog.require('ol.coordinate');
-goog.require('ol.css');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-
-
-/**
- * Create a new control with a map acting as an overview map for an other
- * defined map.
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.OverviewMapOptions=} opt_options OverviewMap options.
- * @api
- */
-ol.control.OverviewMap = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.collapsible_ = options.collapsible !== undefined ?
-      options.collapsible : true;
-
-  if (!this.collapsible_) {
-    this.collapsed_ = false;
-  }
-
-  var className = options.className !== undefined ? options.className : 'ol-overviewmap';
-
-  var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Overview map';
-
-  var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\u00AB';
-
-  if (typeof collapseLabel === 'string') {
-    /**
-     * @private
-     * @type {Node}
-     */
-    this.collapseLabel_ = document.createElement('span');
-    this.collapseLabel_.textContent = collapseLabel;
-  } else {
-    this.collapseLabel_ = collapseLabel;
-  }
-
-  var label = options.label !== undefined ? options.label : '\u00BB';
-
-
-  if (typeof label === 'string') {
-    /**
-     * @private
-     * @type {Node}
-     */
-    this.label_ = document.createElement('span');
-    this.label_.textContent = label;
-  } else {
-    this.label_ = label;
-  }
-
-  var activeLabel = (this.collapsible_ && !this.collapsed_) ?
-      this.collapseLabel_ : this.label_;
-  var button = document.createElement('button');
-  button.setAttribute('type', 'button');
-  button.title = tipLabel;
-  button.appendChild(activeLabel);
-
-  ol.events.listen(button, ol.events.EventType.CLICK,
-      this.handleClick_, this);
-
-  var ovmapDiv = document.createElement('DIV');
-  ovmapDiv.className = 'ol-overviewmap-map';
-
-  /**
-   * @type {ol.Map}
-   * @private
-   */
-  this.ovmap_ = new ol.Map({
-    controls: new ol.Collection(),
-    interactions: new ol.Collection(),
-    target: ovmapDiv,
-    view: options.view
-  });
-  var ovmap = this.ovmap_;
-
-  if (options.layers) {
-    options.layers.forEach(
-        /**
-       * @param {ol.layer.Layer} layer Layer.
-       */
-        function(layer) {
-          ovmap.addLayer(layer);
-        }, this);
-  }
-
-  var box = document.createElement('DIV');
-  box.className = 'ol-overviewmap-box';
-  box.style.boxSizing = 'border-box';
-
-  /**
-   * @type {ol.Overlay}
-   * @private
-   */
-  this.boxOverlay_ = new ol.Overlay({
-    position: [0, 0],
-    positioning: ol.Overlay.Positioning.BOTTOM_LEFT,
-    element: box
-  });
-  this.ovmap_.addOverlay(this.boxOverlay_);
-
-  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
-      ol.css.CLASS_CONTROL +
-      (this.collapsed_ && this.collapsible_ ? ' ol-collapsed' : '') +
-      (this.collapsible_ ? '' : ' ol-uncollapsible');
-  var element = document.createElement('div');
-  element.className = cssClasses;
-  element.appendChild(ovmapDiv);
-  element.appendChild(button);
-
-  var render = options.render ? options.render : ol.control.OverviewMap.render;
-
-  ol.control.Control.call(this, {
-    element: element,
-    render: render,
-    target: options.target
-  });
-};
-ol.inherits(ol.control.OverviewMap, ol.control.Control);
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.control.OverviewMap.prototype.setMap = function(map) {
-  var oldMap = this.getMap();
-  if (map === oldMap) {
-    return;
-  }
-  if (oldMap) {
-    var oldView = oldMap.getView();
-    if (oldView) {
-      this.unbindView_(oldView);
-    }
-  }
-  ol.control.Control.prototype.setMap.call(this, map);
-
-  if (map) {
-    this.listenerKeys.push(ol.events.listen(
-        map, ol.ObjectEventType.PROPERTYCHANGE,
-        this.handleMapPropertyChange_, this));
-
-    // TODO: to really support map switching, this would need to be reworked
-    if (this.ovmap_.getLayers().getLength() === 0) {
-      this.ovmap_.setLayerGroup(map.getLayerGroup());
-    }
-
-    var view = map.getView();
-    if (view) {
-      this.bindView_(view);
-      if (view.isDef()) {
-        this.ovmap_.updateSize();
-        this.resetExtent_();
-      }
-    }
-  }
-};
-
-
-/**
- * Handle map property changes.  This only deals with changes to the map's view.
- * @param {ol.ObjectEvent} event The propertychange event.
- * @private
- */
-ol.control.OverviewMap.prototype.handleMapPropertyChange_ = function(event) {
-  if (event.key === ol.Map.Property.VIEW) {
-    var oldView = /** @type {ol.View} */ (event.oldValue);
-    if (oldView) {
-      this.unbindView_(oldView);
-    }
-    var newView = this.getMap().getView();
-    this.bindView_(newView);
-  }
-};
-
-
-/**
- * Register listeners for view property changes.
- * @param {ol.View} view The view.
- * @private
- */
-ol.control.OverviewMap.prototype.bindView_ = function(view) {
-  ol.events.listen(view,
-      ol.Object.getChangeEventType(ol.View.Property.ROTATION),
-      this.handleRotationChanged_, this);
-};
-
-
-/**
- * Unregister listeners for view property changes.
- * @param {ol.View} view The view.
- * @private
- */
-ol.control.OverviewMap.prototype.unbindView_ = function(view) {
-  ol.events.unlisten(view,
-      ol.Object.getChangeEventType(ol.View.Property.ROTATION),
-      this.handleRotationChanged_, this);
-};
-
-
-/**
- * Handle rotation changes to the main map.
- * TODO: This should rotate the extent rectrangle instead of the
- * overview map's view.
- * @private
- */
-ol.control.OverviewMap.prototype.handleRotationChanged_ = function() {
-  this.ovmap_.getView().setRotation(this.getMap().getView().getRotation());
-};
-
-
-/**
- * Update the overview map element.
- * @param {ol.MapEvent} mapEvent Map event.
- * @this {ol.control.OverviewMap}
- * @api
- */
-ol.control.OverviewMap.render = function(mapEvent) {
-  this.validateExtent_();
-  this.updateBox_();
-};
-
-
-/**
- * Reset the overview map extent if the box size (width or
- * height) is less than the size of the overview map size times minRatio
- * or is greater than the size of the overview size times maxRatio.
- *
- * If the map extent was not reset, the box size can fits in the defined
- * ratio sizes. This method then checks if is contained inside the overview
- * map current extent. If not, recenter the overview map to the current
- * main map center location.
- * @private
- */
-ol.control.OverviewMap.prototype.validateExtent_ = function() {
-  var map = this.getMap();
-  var ovmap = this.ovmap_;
-
-  if (!map.isRendered() || !ovmap.isRendered()) {
-    return;
-  }
-
-  var mapSize = /** @type {ol.Size} */ (map.getSize());
-
-  var view = map.getView();
-  var extent = view.calculateExtent(mapSize);
-
-  var ovmapSize = /** @type {ol.Size} */ (ovmap.getSize());
-
-  var ovview = ovmap.getView();
-  var ovextent = ovview.calculateExtent(ovmapSize);
-
-  var topLeftPixel =
-      ovmap.getPixelFromCoordinate(ol.extent.getTopLeft(extent));
-  var bottomRightPixel =
-      ovmap.getPixelFromCoordinate(ol.extent.getBottomRight(extent));
-
-  var boxWidth = Math.abs(topLeftPixel[0] - bottomRightPixel[0]);
-  var boxHeight = Math.abs(topLeftPixel[1] - bottomRightPixel[1]);
-
-  var ovmapWidth = ovmapSize[0];
-  var ovmapHeight = ovmapSize[1];
-
-  if (boxWidth < ovmapWidth * ol.OVERVIEWMAP_MIN_RATIO ||
-      boxHeight < ovmapHeight * ol.OVERVIEWMAP_MIN_RATIO ||
-      boxWidth > ovmapWidth * ol.OVERVIEWMAP_MAX_RATIO ||
-      boxHeight > ovmapHeight * ol.OVERVIEWMAP_MAX_RATIO) {
-    this.resetExtent_();
-  } else if (!ol.extent.containsExtent(ovextent, extent)) {
-    this.recenter_();
-  }
-};
-
-
-/**
- * Reset the overview map extent to half calculated min and max ratio times
- * the extent of the main map.
- * @private
- */
-ol.control.OverviewMap.prototype.resetExtent_ = function() {
-  if (ol.OVERVIEWMAP_MAX_RATIO === 0 || ol.OVERVIEWMAP_MIN_RATIO === 0) {
-    return;
-  }
-
-  var map = this.getMap();
-  var ovmap = this.ovmap_;
-
-  var mapSize = /** @type {ol.Size} */ (map.getSize());
-
-  var view = map.getView();
-  var extent = view.calculateExtent(mapSize);
-
-  var ovmapSize = /** @type {ol.Size} */ (ovmap.getSize());
-
-  var ovview = ovmap.getView();
-
-  // get how many times the current map overview could hold different
-  // box sizes using the min and max ratio, pick the step in the middle used
-  // to calculate the extent from the main map to set it to the overview map,
-  var steps = Math.log(
-      ol.OVERVIEWMAP_MAX_RATIO / ol.OVERVIEWMAP_MIN_RATIO) / Math.LN2;
-  var ratio = 1 / (Math.pow(2, steps / 2) * ol.OVERVIEWMAP_MIN_RATIO);
-  ol.extent.scaleFromCenter(extent, ratio);
-  ovview.fit(extent, ovmapSize);
-};
-
-
-/**
- * Set the center of the overview map to the map center without changing its
- * resolution.
- * @private
- */
-ol.control.OverviewMap.prototype.recenter_ = function() {
-  var map = this.getMap();
-  var ovmap = this.ovmap_;
-
-  var view = map.getView();
-
-  var ovview = ovmap.getView();
-
-  ovview.setCenter(view.getCenter());
-};
-
-
-/**
- * Update the box using the main map extent
- * @private
- */
-ol.control.OverviewMap.prototype.updateBox_ = function() {
-  var map = this.getMap();
-  var ovmap = this.ovmap_;
-
-  if (!map.isRendered() || !ovmap.isRendered()) {
-    return;
-  }
-
-  var mapSize = /** @type {ol.Size} */ (map.getSize());
-
-  var view = map.getView();
-
-  var ovview = ovmap.getView();
-
-  var rotation = view.getRotation();
-
-  var overlay = this.boxOverlay_;
-  var box = this.boxOverlay_.getElement();
-  var extent = view.calculateExtent(mapSize);
-  var ovresolution = ovview.getResolution();
-  var bottomLeft = ol.extent.getBottomLeft(extent);
-  var topRight = ol.extent.getTopRight(extent);
-
-  // set position using bottom left coordinates
-  var rotateBottomLeft = this.calculateCoordinateRotate_(rotation, bottomLeft);
-  overlay.setPosition(rotateBottomLeft);
-
-  // set box size calculated from map extent size and overview map resolution
-  if (box) {
-    box.style.width = Math.abs((bottomLeft[0] - topRight[0]) / ovresolution) + 'px';
-    box.style.height = Math.abs((topRight[1] - bottomLeft[1]) / ovresolution) + 'px';
-  }
-};
-
-
-/**
- * @param {number} rotation Target rotation.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @return {ol.Coordinate|undefined} Coordinate for rotation and center anchor.
- * @private
- */
-ol.control.OverviewMap.prototype.calculateCoordinateRotate_ = function(
-    rotation, coordinate) {
-  var coordinateRotate;
-
-  var map = this.getMap();
-  var view = map.getView();
-
-  var currentCenter = view.getCenter();
-
-  if (currentCenter) {
-    coordinateRotate = [
-      coordinate[0] - currentCenter[0],
-      coordinate[1] - currentCenter[1]
-    ];
-    ol.coordinate.rotate(coordinateRotate, rotation);
-    ol.coordinate.add(coordinateRotate, currentCenter);
-  }
-  return coordinateRotate;
-};
-
-
-/**
- * @param {Event} event The event to handle
- * @private
- */
-ol.control.OverviewMap.prototype.handleClick_ = function(event) {
-  event.preventDefault();
-  this.handleToggle_();
-};
-
-
-/**
- * @private
- */
-ol.control.OverviewMap.prototype.handleToggle_ = function() {
-  this.element.classList.toggle('ol-collapsed');
-  if (this.collapsed_) {
-    ol.dom.replaceNode(this.collapseLabel_, this.label_);
-  } else {
-    ol.dom.replaceNode(this.label_, this.collapseLabel_);
-  }
-  this.collapsed_ = !this.collapsed_;
-
-  // manage overview map if it had not been rendered before and control
-  // is expanded
-  var ovmap = this.ovmap_;
-  if (!this.collapsed_ && !ovmap.isRendered()) {
-    ovmap.updateSize();
-    this.resetExtent_();
-    ol.events.listenOnce(ovmap, ol.MapEvent.Type.POSTRENDER,
-        function(event) {
-          this.updateBox_();
-        },
-        this);
-  }
-};
-
-
-/**
- * Return `true` if the overview map is collapsible, `false` otherwise.
- * @return {boolean} True if the widget is collapsible.
- * @api stable
- */
-ol.control.OverviewMap.prototype.getCollapsible = function() {
-  return this.collapsible_;
-};
-
-
-/**
- * Set whether the overview map should be collapsible.
- * @param {boolean} collapsible True if the widget is collapsible.
- * @api stable
- */
-ol.control.OverviewMap.prototype.setCollapsible = function(collapsible) {
-  if (this.collapsible_ === collapsible) {
-    return;
-  }
-  this.collapsible_ = collapsible;
-  this.element.classList.toggle('ol-uncollapsible');
-  if (!collapsible && this.collapsed_) {
-    this.handleToggle_();
-  }
-};
-
-
-/**
- * Collapse or expand the overview map according to the passed parameter. Will
- * not do anything if the overview map isn't collapsible or if the current
- * collapsed state is already the one requested.
- * @param {boolean} collapsed True if the widget is collapsed.
- * @api stable
- */
-ol.control.OverviewMap.prototype.setCollapsed = function(collapsed) {
-  if (!this.collapsible_ || this.collapsed_ === collapsed) {
-    return;
-  }
-  this.handleToggle_();
-};
-
-
-/**
- * Determine if the overview map is collapsed.
- * @return {boolean} The overview map is collapsed.
- * @api stable
- */
-ol.control.OverviewMap.prototype.getCollapsed = function() {
-  return this.collapsed_;
-};
-
-
-/**
- * Return the overview map.
- * @return {ol.Map} Overview map.
- * @api
- */
-ol.control.OverviewMap.prototype.getOverviewMap = function() {
-  return this.ovmap_;
-};
-
-goog.provide('ol.control.ScaleLine');
-
-goog.require('ol');
-goog.require('ol.Object');
-goog.require('ol.asserts');
-goog.require('ol.control.Control');
-goog.require('ol.css');
-goog.require('ol.events');
-goog.require('ol.proj.METERS_PER_UNIT');
-goog.require('ol.proj.Units');
-
-
-/**
- * @classdesc
- * A control displaying rough y-axis distances, calculated for the center of the
- * viewport. For conformal projections (e.g. EPSG:3857, the default view
- * projection in OpenLayers), the scale is valid for all directions.
- * No scale line will be shown when the y-axis distance of a pixel at the
- * viewport center cannot be calculated in the view projection.
- * By default the scale line will show in the bottom left portion of the map,
- * but this can be changed by using the css selector `.ol-scale-line`.
- *
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.ScaleLineOptions=} opt_options Scale line options.
- * @api stable
- */
-ol.control.ScaleLine = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  var className = options.className !== undefined ? options.className : 'ol-scale-line';
-
-  /**
-   * @private
-   * @type {Element}
-   */
-  this.innerElement_ = document.createElement('DIV');
-  this.innerElement_.className = className + '-inner';
-
-  /**
-   * @private
-   * @type {Element}
-   */
-  this.element_ = document.createElement('DIV');
-  this.element_.className = className + ' ' + ol.css.CLASS_UNSELECTABLE;
-  this.element_.appendChild(this.innerElement_);
-
-  /**
-   * @private
-   * @type {?olx.ViewState}
-   */
-  this.viewState_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.minWidth_ = options.minWidth !== undefined ? options.minWidth : 64;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.renderedVisible_ = false;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.renderedWidth_ = undefined;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.renderedHTML_ = '';
-
-  var render = options.render ? options.render : ol.control.ScaleLine.render;
-
-  ol.control.Control.call(this, {
-    element: this.element_,
-    render: render,
-    target: options.target
-  });
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.control.ScaleLine.Property.UNITS),
-      this.handleUnitsChanged_, this);
-
-  this.setUnits(/** @type {ol.control.ScaleLine.Units} */ (options.units) ||
-      ol.control.ScaleLine.Units.METRIC);
-
-};
-ol.inherits(ol.control.ScaleLine, ol.control.Control);
-
-
-/**
- * @const
- * @type {Array.<number>}
- */
-ol.control.ScaleLine.LEADING_DIGITS = [1, 2, 5];
-
-
-/**
- * Return the units to use in the scale line.
- * @return {ol.control.ScaleLine.Units|undefined} The units to use in the scale
- *     line.
- * @observable
- * @api stable
- */
-ol.control.ScaleLine.prototype.getUnits = function() {
-  return /** @type {ol.control.ScaleLine.Units|undefined} */ (
-      this.get(ol.control.ScaleLine.Property.UNITS));
-};
-
-
-/**
- * Update the scale line element.
- * @param {ol.MapEvent} mapEvent Map event.
- * @this {ol.control.ScaleLine}
- * @api
- */
-ol.control.ScaleLine.render = function(mapEvent) {
-  var frameState = mapEvent.frameState;
-  if (!frameState) {
-    this.viewState_ = null;
-  } else {
-    this.viewState_ = frameState.viewState;
-  }
-  this.updateElement_();
-};
-
-
-/**
- * @private
- */
-ol.control.ScaleLine.prototype.handleUnitsChanged_ = function() {
-  this.updateElement_();
-};
-
-
-/**
- * Set the units to use in the scale line.
- * @param {ol.control.ScaleLine.Units} units The units to use in the scale line.
- * @observable
- * @api stable
- */
-ol.control.ScaleLine.prototype.setUnits = function(units) {
-  this.set(ol.control.ScaleLine.Property.UNITS, units);
-};
-
-
-/**
- * @private
- */
-ol.control.ScaleLine.prototype.updateElement_ = function() {
-  var viewState = this.viewState_;
-
-  if (!viewState) {
-    if (this.renderedVisible_) {
-      this.element_.style.display = 'none';
-      this.renderedVisible_ = false;
-    }
-    return;
-  }
-
-  var center = viewState.center;
-  var projection = viewState.projection;
-  var metersPerUnit = projection.getMetersPerUnit();
-  var pointResolution =
-      projection.getPointResolution(viewState.resolution, center) *
-      metersPerUnit;
-
-  var nominalCount = this.minWidth_ * pointResolution;
-  var suffix = '';
-  var units = this.getUnits();
-  if (units == ol.control.ScaleLine.Units.DEGREES) {
-    var metersPerDegree = ol.proj.METERS_PER_UNIT[ol.proj.Units.DEGREES];
-    pointResolution /= metersPerDegree;
-    if (nominalCount < metersPerDegree / 60) {
-      suffix = '\u2033'; // seconds
-      pointResolution *= 3600;
-    } else if (nominalCount < metersPerDegree) {
-      suffix = '\u2032'; // minutes
-      pointResolution *= 60;
-    } else {
-      suffix = '\u00b0'; // degrees
-    }
-  } else if (units == ol.control.ScaleLine.Units.IMPERIAL) {
-    if (nominalCount < 0.9144) {
-      suffix = 'in';
-      pointResolution /= 0.0254;
-    } else if (nominalCount < 1609.344) {
-      suffix = 'ft';
-      pointResolution /= 0.3048;
-    } else {
-      suffix = 'mi';
-      pointResolution /= 1609.344;
-    }
-  } else if (units == ol.control.ScaleLine.Units.NAUTICAL) {
-    pointResolution /= 1852;
-    suffix = 'nm';
-  } else if (units == ol.control.ScaleLine.Units.METRIC) {
-    if (nominalCount < 1) {
-      suffix = 'mm';
-      pointResolution *= 1000;
-    } else if (nominalCount < 1000) {
-      suffix = 'm';
-    } else {
-      suffix = 'km';
-      pointResolution /= 1000;
-    }
-  } else if (units == ol.control.ScaleLine.Units.US) {
-    if (nominalCount < 0.9144) {
-      suffix = 'in';
-      pointResolution *= 39.37;
-    } else if (nominalCount < 1609.344) {
-      suffix = 'ft';
-      pointResolution /= 0.30480061;
-    } else {
-      suffix = 'mi';
-      pointResolution /= 1609.3472;
-    }
-  } else {
-    ol.asserts.assert(false, 33); // Invalid units
-  }
-
-  var i = 3 * Math.floor(
-      Math.log(this.minWidth_ * pointResolution) / Math.log(10));
-  var count, width;
-  while (true) {
-    count = ol.control.ScaleLine.LEADING_DIGITS[((i % 3) + 3) % 3] *
-        Math.pow(10, Math.floor(i / 3));
-    width = Math.round(count / pointResolution);
-    if (isNaN(width)) {
-      this.element_.style.display = 'none';
-      this.renderedVisible_ = false;
-      return;
-    } else if (width >= this.minWidth_) {
-      break;
-    }
-    ++i;
-  }
-
-  var html = count + ' ' + suffix;
-  if (this.renderedHTML_ != html) {
-    this.innerElement_.innerHTML = html;
-    this.renderedHTML_ = html;
-  }
-
-  if (this.renderedWidth_ != width) {
-    this.innerElement_.style.width = width + 'px';
-    this.renderedWidth_ = width;
-  }
-
-  if (!this.renderedVisible_) {
-    this.element_.style.display = '';
-    this.renderedVisible_ = true;
-  }
-
-};
-
-
-/**
- * @enum {string}
- * @api
- */
-ol.control.ScaleLine.Property = {
-  UNITS: 'units'
-};
-
-
-/**
- * Units for the scale line. Supported values are `'degrees'`, `'imperial'`,
- * `'nautical'`, `'metric'`, `'us'`.
- * @enum {string}
- */
-ol.control.ScaleLine.Units = {
-  DEGREES: 'degrees',
-  IMPERIAL: 'imperial',
-  NAUTICAL: 'nautical',
-  METRIC: 'metric',
-  US: 'us'
-};
-
-// FIXME should possibly show tooltip when dragging?
-
-goog.provide('ol.control.ZoomSlider');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.animation');
-goog.require('ol.control.Control');
-goog.require('ol.css');
-goog.require('ol.easing');
-goog.require('ol.events');
-goog.require('ol.events.Event');
-goog.require('ol.events.EventType');
-goog.require('ol.math');
-goog.require('ol.pointer.EventType');
-goog.require('ol.pointer.PointerEventHandler');
-
-
-/**
- * @classdesc
- * A slider type of control for zooming.
- *
- * Example:
- *
- *     map.addControl(new ol.control.ZoomSlider());
- *
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.ZoomSliderOptions=} opt_options Zoom slider options.
- * @api stable
- */
-ol.control.ZoomSlider = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * Will hold the current resolution of the view.
-   *
-   * @type {number|undefined}
-   * @private
-   */
-  this.currentResolution_ = undefined;
-
-  /**
-   * The direction of the slider. Will be determined from actual display of the
-   * container and defaults to ol.control.ZoomSlider.direction.VERTICAL.
-   *
-   * @type {ol.control.ZoomSlider.direction}
-   * @private
-   */
-  this.direction_ = ol.control.ZoomSlider.direction.VERTICAL;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.dragging_;
-
-  /**
-   * @type {!Array.<ol.EventsKey>}
-   * @private
-   */
-  this.dragListenerKeys_ = [];
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.heightLimit_ = 0;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.widthLimit_ = 0;
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.previousX_;
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.previousY_;
-
-  /**
-   * The calculated thumb size (border box plus margins).  Set when initSlider_
-   * is called.
-   * @type {ol.Size}
-   * @private
-   */
-  this.thumbSize_ = null;
-
-  /**
-   * Whether the slider is initialized.
-   * @type {boolean}
-   * @private
-   */
-  this.sliderInitialized_ = false;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 200;
-
-  var className = options.className !== undefined ? options.className : 'ol-zoomslider';
-  var thumbElement = document.createElement('button');
-  thumbElement.setAttribute('type', 'button');
-  thumbElement.className = className + '-thumb ' + ol.css.CLASS_UNSELECTABLE;
-  var containerElement = document.createElement('div');
-  containerElement.className = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' + ol.css.CLASS_CONTROL;
-  containerElement.appendChild(thumbElement);
-  /**
-   * @type {ol.pointer.PointerEventHandler}
-   * @private
-   */
-  this.dragger_ = new ol.pointer.PointerEventHandler(containerElement);
-
-  ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERDOWN,
-      this.handleDraggerStart_, this);
-  ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERMOVE,
-      this.handleDraggerDrag_, this);
-  ol.events.listen(this.dragger_, ol.pointer.EventType.POINTERUP,
-      this.handleDraggerEnd_, this);
-
-  ol.events.listen(containerElement, ol.events.EventType.CLICK,
-      this.handleContainerClick_, this);
-  ol.events.listen(thumbElement, ol.events.EventType.CLICK,
-      ol.events.Event.stopPropagation);
-
-  var render = options.render ? options.render : ol.control.ZoomSlider.render;
-
-  ol.control.Control.call(this, {
-    element: containerElement,
-    render: render
-  });
-};
-ol.inherits(ol.control.ZoomSlider, ol.control.Control);
-
-
-/**
- * @inheritDoc
- */
-ol.control.ZoomSlider.prototype.disposeInternal = function() {
-  this.dragger_.dispose();
-  ol.control.Control.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * The enum for available directions.
- *
- * @enum {number}
- */
-ol.control.ZoomSlider.direction = {
-  VERTICAL: 0,
-  HORIZONTAL: 1
-};
-
-
-/**
- * @inheritDoc
- */
-ol.control.ZoomSlider.prototype.setMap = function(map) {
-  ol.control.Control.prototype.setMap.call(this, map);
-  if (map) {
-    map.render();
-  }
-};
-
-
-/**
- * Initializes the slider element. This will determine and set this controls
- * direction_ and also constrain the dragging of the thumb to always be within
- * the bounds of the container.
- *
- * @private
- */
-ol.control.ZoomSlider.prototype.initSlider_ = function() {
-  var container = this.element;
-  var containerSize = {
-    width: container.offsetWidth, height: container.offsetHeight
-  };
-
-  var thumb = container.firstElementChild;
-  var computedStyle = getComputedStyle(thumb);
-  var thumbWidth = thumb.offsetWidth +
-      parseFloat(computedStyle['marginRight']) +
-      parseFloat(computedStyle['marginLeft']);
-  var thumbHeight = thumb.offsetHeight +
-      parseFloat(computedStyle['marginTop']) +
-      parseFloat(computedStyle['marginBottom']);
-  this.thumbSize_ = [thumbWidth, thumbHeight];
-
-  if (containerSize.width > containerSize.height) {
-    this.direction_ = ol.control.ZoomSlider.direction.HORIZONTAL;
-    this.widthLimit_ = containerSize.width - thumbWidth;
-  } else {
-    this.direction_ = ol.control.ZoomSlider.direction.VERTICAL;
-    this.heightLimit_ = containerSize.height - thumbHeight;
-  }
-  this.sliderInitialized_ = true;
-};
-
-
-/**
- * Update the zoomslider element.
- * @param {ol.MapEvent} mapEvent Map event.
- * @this {ol.control.ZoomSlider}
- * @api
- */
-ol.control.ZoomSlider.render = function(mapEvent) {
-  if (!mapEvent.frameState) {
-    return;
-  }
-  if (!this.sliderInitialized_) {
-    this.initSlider_();
-  }
-  var res = mapEvent.frameState.viewState.resolution;
-  if (res !== this.currentResolution_) {
-    this.currentResolution_ = res;
-    this.setThumbPosition_(res);
-  }
-};
-
-
-/**
- * @param {Event} event The browser event to handle.
- * @private
- */
-ol.control.ZoomSlider.prototype.handleContainerClick_ = function(event) {
-  var map = this.getMap();
-  var view = map.getView();
-  var currentResolution = view.getResolution();
-  map.beforeRender(ol.animation.zoom({
-    resolution: /** @type {number} */ (currentResolution),
-    duration: this.duration_,
-    easing: ol.easing.easeOut
-  }));
-  var relativePosition = this.getRelativePosition_(
-      event.offsetX - this.thumbSize_[0] / 2,
-      event.offsetY - this.thumbSize_[1] / 2);
-  var resolution = this.getResolutionForPosition_(relativePosition);
-  view.setResolution(view.constrainResolution(resolution));
-};
-
-
-/**
- * Handle dragger start events.
- * @param {ol.pointer.PointerEvent} event The drag event.
- * @private
- */
-ol.control.ZoomSlider.prototype.handleDraggerStart_ = function(event) {
-  if (!this.dragging_ &&
-      event.originalEvent.target === this.element.firstElementChild) {
-    this.getMap().getView().setHint(ol.View.Hint.INTERACTING, 1);
-    this.previousX_ = event.clientX;
-    this.previousY_ = event.clientY;
-    this.dragging_ = true;
-
-    if (this.dragListenerKeys_.length === 0) {
-      var drag = this.handleDraggerDrag_;
-      var end = this.handleDraggerEnd_;
-      this.dragListenerKeys_.push(
-        ol.events.listen(document, ol.events.EventType.MOUSEMOVE, drag, this),
-        ol.events.listen(document, ol.events.EventType.TOUCHMOVE, drag, this),
-        ol.events.listen(document, ol.pointer.EventType.POINTERMOVE, drag, this),
-        ol.events.listen(document, ol.events.EventType.MOUSEUP, end, this),
-        ol.events.listen(document, ol.events.EventType.TOUCHEND, end, this),
-        ol.events.listen(document, ol.pointer.EventType.POINTERUP, end, this)
-      );
-    }
-  }
-};
-
-
-/**
- * Handle dragger drag events.
- *
- * @param {ol.pointer.PointerEvent|Event} event The drag event.
- * @private
- */
-ol.control.ZoomSlider.prototype.handleDraggerDrag_ = function(event) {
-  if (this.dragging_) {
-    var element = this.element.firstElementChild;
-    var deltaX = event.clientX - this.previousX_ + parseInt(element.style.left, 10);
-    var deltaY = event.clientY - this.previousY_ + parseInt(element.style.top, 10);
-    var relativePosition = this.getRelativePosition_(deltaX, deltaY);
-    this.currentResolution_ = this.getResolutionForPosition_(relativePosition);
-    this.getMap().getView().setResolution(this.currentResolution_);
-    this.setThumbPosition_(this.currentResolution_);
-    this.previousX_ = event.clientX;
-    this.previousY_ = event.clientY;
-  }
-};
-
-
-/**
- * Handle dragger end events.
- * @param {ol.pointer.PointerEvent|Event} event The drag event.
- * @private
- */
-ol.control.ZoomSlider.prototype.handleDraggerEnd_ = function(event) {
-  if (this.dragging_) {
-    var map = this.getMap();
-    var view = map.getView();
-    view.setHint(ol.View.Hint.INTERACTING, -1);
-    map.beforeRender(ol.animation.zoom({
-      resolution: /** @type {number} */ (this.currentResolution_),
-      duration: this.duration_,
-      easing: ol.easing.easeOut
-    }));
-    var resolution = view.constrainResolution(this.currentResolution_);
-    view.setResolution(resolution);
-    this.dragging_ = false;
-    this.previousX_ = undefined;
-    this.previousY_ = undefined;
-    this.dragListenerKeys_.forEach(ol.events.unlistenByKey);
-    this.dragListenerKeys_.length = 0;
-  }
-};
-
-
-/**
- * Positions the thumb inside its container according to the given resolution.
- *
- * @param {number} res The res.
- * @private
- */
-ol.control.ZoomSlider.prototype.setThumbPosition_ = function(res) {
-  var position = this.getPositionForResolution_(res);
-  var thumb = this.element.firstElementChild;
-
-  if (this.direction_ == ol.control.ZoomSlider.direction.HORIZONTAL) {
-    thumb.style.left = this.widthLimit_ * position + 'px';
-  } else {
-    thumb.style.top = this.heightLimit_ * position + 'px';
-  }
-};
-
-
-/**
- * Calculates the relative position of the thumb given x and y offsets.  The
- * relative position scales from 0 to 1.  The x and y offsets are assumed to be
- * in pixel units within the dragger limits.
- *
- * @param {number} x Pixel position relative to the left of the slider.
- * @param {number} y Pixel position relative to the top of the slider.
- * @return {number} The relative position of the thumb.
- * @private
- */
-ol.control.ZoomSlider.prototype.getRelativePosition_ = function(x, y) {
-  var amount;
-  if (this.direction_ === ol.control.ZoomSlider.direction.HORIZONTAL) {
-    amount = x / this.widthLimit_;
-  } else {
-    amount = y / this.heightLimit_;
-  }
-  return ol.math.clamp(amount, 0, 1);
-};
-
-
-/**
- * Calculates the corresponding resolution of the thumb given its relative
- * position (where 0 is the minimum and 1 is the maximum).
- *
- * @param {number} position The relative position of the thumb.
- * @return {number} The corresponding resolution.
- * @private
- */
-ol.control.ZoomSlider.prototype.getResolutionForPosition_ = function(position) {
-  var fn = this.getMap().getView().getResolutionForValueFunction();
-  return fn(1 - position);
-};
-
-
-/**
- * Determines the relative position of the slider for the given resolution.  A
- * relative position of 0 corresponds to the minimum view resolution.  A
- * relative position of 1 corresponds to the maximum view resolution.
- *
- * @param {number} res The resolution.
- * @return {number} The relative position value (between 0 and 1).
- * @private
- */
-ol.control.ZoomSlider.prototype.getPositionForResolution_ = function(res) {
-  var fn = this.getMap().getView().getValueForResolutionFunction();
-  return 1 - fn(res);
-};
-
-goog.provide('ol.control.ZoomToExtent');
-
-goog.require('ol');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.control.Control');
-goog.require('ol.css');
-
-
-/**
- * @classdesc
- * A button control which, when pressed, changes the map view to a specific
- * extent. To style this control use the css selector `.ol-zoom-extent`.
- *
- * @constructor
- * @extends {ol.control.Control}
- * @param {olx.control.ZoomToExtentOptions=} opt_options Options.
- * @api stable
- */
-ol.control.ZoomToExtent = function(opt_options) {
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @type {ol.Extent}
-   * @private
-   */
-  this.extent_ = options.extent ? options.extent : null;
-
-  var className = options.className !== undefined ? options.className :
-      'ol-zoom-extent';
-
-  var label = options.label !== undefined ? options.label : 'E';
-  var tipLabel = options.tipLabel !== undefined ?
-      options.tipLabel : 'Fit to extent';
-  var button = document.createElement('button');
-  button.setAttribute('type', 'button');
-  button.title = tipLabel;
-  button.appendChild(
-    typeof label === 'string' ? document.createTextNode(label) : label
-  );
-
-  ol.events.listen(button, ol.events.EventType.CLICK,
-      this.handleClick_, this);
-
-  var cssClasses = className + ' ' + ol.css.CLASS_UNSELECTABLE + ' ' +
-      ol.css.CLASS_CONTROL;
-  var element = document.createElement('div');
-  element.className = cssClasses;
-  element.appendChild(button);
-
-  ol.control.Control.call(this, {
-    element: element,
-    target: options.target
-  });
-};
-ol.inherits(ol.control.ZoomToExtent, ol.control.Control);
-
-
-/**
- * @param {Event} event The event to handle
- * @private
- */
-ol.control.ZoomToExtent.prototype.handleClick_ = function(event) {
-  event.preventDefault();
-  this.handleZoomToExtent_();
-};
-
-
-/**
- * @private
- */
-ol.control.ZoomToExtent.prototype.handleZoomToExtent_ = function() {
-  var map = this.getMap();
-  var view = map.getView();
-  var extent = !this.extent_ ? view.getProjection().getExtent() : this.extent_;
-  var size = /** @type {ol.Size} */ (map.getSize());
-  view.fit(extent, size);
-};
-
-goog.provide('ol.DeviceOrientation');
-
-goog.require('ol.events');
-goog.require('ol');
-goog.require('ol.Object');
-goog.require('ol.has');
-goog.require('ol.math');
-
-
-/**
- * @classdesc
- * The ol.DeviceOrientation class provides access to information from
- * DeviceOrientation events.  See the [HTML 5 DeviceOrientation Specification](
- * http://www.w3.org/TR/orientation-event/) for more details.
- *
- * Many new computers, and especially mobile phones
- * and tablets, provide hardware support for device orientation. Web
- * developers targeting mobile devices will be especially interested in this
- * class.
- *
- * Device orientation data are relative to a common starting point. For mobile
- * devices, the starting point is to lay your phone face up on a table with the
- * top of the phone pointing north. This represents the zero state. All
- * angles are then relative to this state. For computers, it is the same except
- * the screen is open at 90 degrees.
- *
- * Device orientation is reported as three angles - `alpha`, `beta`, and
- * `gamma` - relative to the starting position along the three planar axes X, Y
- * and Z. The X axis runs from the left edge to the right edge through the
- * middle of the device. Similarly, the Y axis runs from the bottom to the top
- * of the device through the middle. The Z axis runs from the back to the front
- * through the middle. In the starting position, the X axis points to the
- * right, the Y axis points away from you and the Z axis points straight up
- * from the device lying flat.
- *
- * The three angles representing the device orientation are relative to the
- * three axes. `alpha` indicates how much the device has been rotated around the
- * Z axis, which is commonly interpreted as the compass heading (see note
- * below). `beta` indicates how much the device has been rotated around the X
- * axis, or how much it is tilted from front to back.  `gamma` indicates how
- * much the device has been rotated around the Y axis, or how much it is tilted
- * from left to right.
- *
- * For most browsers, the `alpha` value returns the compass heading so if the
- * device points north, it will be 0.  With Safari on iOS, the 0 value of
- * `alpha` is calculated from when device orientation was first requested.
- * ol.DeviceOrientation provides the `heading` property which normalizes this
- * behavior across all browsers for you.
- *
- * It is important to note that the HTML 5 DeviceOrientation specification
- * indicates that `alpha`, `beta` and `gamma` are in degrees while the
- * equivalent properties in ol.DeviceOrientation are in radians for consistency
- * with all other uses of angles throughout OpenLayers.
- *
- * To get notified of device orientation changes, register a listener for the
- * generic `change` event on your `ol.DeviceOrientation` instance.
- *
- * @see {@link http://www.w3.org/TR/orientation-event/}
- *
- * @constructor
- * @extends {ol.Object}
- * @param {olx.DeviceOrientationOptions=} opt_options Options.
- * @api
- */
-ol.DeviceOrientation = function(opt_options) {
-
-  ol.Object.call(this);
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {?ol.EventsKey}
-   */
-  this.listenerKey_ = null;
-
-  ol.events.listen(this,
-      ol.Object.getChangeEventType(ol.DeviceOrientation.Property.TRACKING),
-      this.handleTrackingChanged_, this);
-
-  this.setTracking(options.tracking !== undefined ? options.tracking : false);
-
-};
-ol.inherits(ol.DeviceOrientation, ol.Object);
-
-
-/**
- * @inheritDoc
- */
-ol.DeviceOrientation.prototype.disposeInternal = function() {
-  this.setTracking(false);
-  ol.Object.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * @private
- * @param {Event} originalEvent Event.
- */
-ol.DeviceOrientation.prototype.orientationChange_ = function(originalEvent) {
-  var event = /** @type {DeviceOrientationEvent} */ (originalEvent);
-  if (event.alpha !== null) {
-    var alpha = ol.math.toRadians(event.alpha);
-    this.set(ol.DeviceOrientation.Property.ALPHA, alpha);
-    // event.absolute is undefined in iOS.
-    if (typeof event.absolute === 'boolean' && event.absolute) {
-      this.set(ol.DeviceOrientation.Property.HEADING, alpha);
-    } else if (typeof event.webkitCompassHeading === 'number' &&
-               event.webkitCompassAccuracy != -1) {
-      var heading = ol.math.toRadians(event.webkitCompassHeading);
-      this.set(ol.DeviceOrientation.Property.HEADING, heading);
-    }
-  }
-  if (event.beta !== null) {
-    this.set(ol.DeviceOrientation.Property.BETA,
-        ol.math.toRadians(event.beta));
-  }
-  if (event.gamma !== null) {
-    this.set(ol.DeviceOrientation.Property.GAMMA,
-        ol.math.toRadians(event.gamma));
-  }
-  this.changed();
-};
-
-
-/**
- * Rotation around the device z-axis (in radians).
- * @return {number|undefined} The euler angle in radians of the device from the
- *     standard Z axis.
- * @observable
- * @api
- */
-ol.DeviceOrientation.prototype.getAlpha = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.DeviceOrientation.Property.ALPHA));
-};
-
-
-/**
- * Rotation around the device x-axis (in radians).
- * @return {number|undefined} The euler angle in radians of the device from the
- *     planar X axis.
- * @observable
- * @api
- */
-ol.DeviceOrientation.prototype.getBeta = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.DeviceOrientation.Property.BETA));
-};
-
-
-/**
- * Rotation around the device y-axis (in radians).
- * @return {number|undefined} The euler angle in radians of the device from the
- *     planar Y axis.
- * @observable
- * @api
- */
-ol.DeviceOrientation.prototype.getGamma = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.DeviceOrientation.Property.GAMMA));
-};
-
-
-/**
- * The heading of the device relative to north (in radians).
- * @return {number|undefined} The heading of the device relative to north, in
- *     radians, normalizing for different browser behavior.
- * @observable
- * @api
- */
-ol.DeviceOrientation.prototype.getHeading = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.DeviceOrientation.Property.HEADING));
-};
-
-
-/**
- * Determine if orientation is being tracked.
- * @return {boolean} Changes in device orientation are being tracked.
- * @observable
- * @api
- */
-ol.DeviceOrientation.prototype.getTracking = function() {
-  return /** @type {boolean} */ (
-      this.get(ol.DeviceOrientation.Property.TRACKING));
-};
-
-
-/**
- * @private
- */
-ol.DeviceOrientation.prototype.handleTrackingChanged_ = function() {
-  if (ol.has.DEVICE_ORIENTATION) {
-    var tracking = this.getTracking();
-    if (tracking && !this.listenerKey_) {
-      this.listenerKey_ = ol.events.listen(window, 'deviceorientation',
-          this.orientationChange_, this);
-    } else if (!tracking && this.listenerKey_ !== null) {
-      ol.events.unlistenByKey(this.listenerKey_);
-      this.listenerKey_ = null;
-    }
-  }
-};
-
-
-/**
- * Enable or disable tracking of device orientation events.
- * @param {boolean} tracking The status of tracking changes to alpha, beta and
- *     gamma. If true, changes are tracked and reported immediately.
- * @observable
- * @api
- */
-ol.DeviceOrientation.prototype.setTracking = function(tracking) {
-  this.set(ol.DeviceOrientation.Property.TRACKING, tracking);
-};
-
-
-/**
- * @enum {string}
- */
-ol.DeviceOrientation.Property = {
-  ALPHA: 'alpha',
-  BETA: 'beta',
-  GAMMA: 'gamma',
-  HEADING: 'heading',
-  TRACKING: 'tracking'
-};
-
-goog.provide('ol.Feature');
-
-goog.require('ol.asserts');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol');
-goog.require('ol.Object');
-goog.require('ol.geom.Geometry');
-goog.require('ol.style.Style');
-
-
-/**
- * @classdesc
- * A vector object for geographic features with a geometry and other
- * attribute properties, similar to the features in vector file formats like
- * GeoJSON.
- *
- * Features can be styled individually with `setStyle`; otherwise they use the
- * style of their vector layer.
- *
- * Note that attribute properties are set as {@link ol.Object} properties on
- * the feature object, so they are observable, and have get/set accessors.
- *
- * Typically, a feature has a single geometry property. You can set the
- * geometry using the `setGeometry` method and get it with `getGeometry`.
- * It is possible to store more than one geometry on a feature using attribute
- * properties. By default, the geometry used for rendering is identified by
- * the property name `geometry`. If you want to use another geometry property
- * for rendering, use the `setGeometryName` method to change the attribute
- * property associated with the geometry for the feature.  For example:
- *
- * ```js
- * var feature = new ol.Feature({
- *   geometry: new ol.geom.Polygon(polyCoords),
- *   labelPoint: new ol.geom.Point(labelCoords),
- *   name: 'My Polygon'
- * });
- *
- * // get the polygon geometry
- * var poly = feature.getGeometry();
- *
- * // Render the feature as a point using the coordinates from labelPoint
- * feature.setGeometryName('labelPoint');
- *
- * // get the point geometry
- * var point = feature.getGeometry();
- * ```
- *
- * @constructor
- * @extends {ol.Object}
- * @param {ol.geom.Geometry|Object.<string, *>=} opt_geometryOrProperties
- *     You may pass a Geometry object directly, or an object literal
- *     containing properties.  If you pass an object literal, you may
- *     include a Geometry associated with a `geometry` key.
- * @api stable
- */
-ol.Feature = function(opt_geometryOrProperties) {
-
-  ol.Object.call(this);
-
-  /**
-   * @private
-   * @type {number|string|undefined}
-   */
-  this.id_ = undefined;
-
-  /**
-   * @type {string}
-   * @private
-   */
-  this.geometryName_ = 'geometry';
-
-  /**
-   * User provided style.
-   * @private
-   * @type {ol.style.Style|Array.<ol.style.Style>|
-   *     ol.FeatureStyleFunction}
-   */
-  this.style_ = null;
-
-  /**
-   * @private
-   * @type {ol.FeatureStyleFunction|undefined}
-   */
-  this.styleFunction_ = undefined;
-
-  /**
-   * @private
-   * @type {?ol.EventsKey}
-   */
-  this.geometryChangeKey_ = null;
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(this.geometryName_),
-      this.handleGeometryChanged_, this);
-
-  if (opt_geometryOrProperties !== undefined) {
-    if (opt_geometryOrProperties instanceof ol.geom.Geometry ||
-        !opt_geometryOrProperties) {
-      var geometry = opt_geometryOrProperties;
-      this.setGeometry(geometry);
-    } else {
-      /** @type {Object.<string, *>} */
-      var properties = opt_geometryOrProperties;
-      this.setProperties(properties);
-    }
-  }
-};
-ol.inherits(ol.Feature, ol.Object);
-
-
-/**
- * Clone this feature. If the original feature has a geometry it
- * is also cloned. The feature id is not set in the clone.
- * @return {ol.Feature} The clone.
- * @api stable
- */
-ol.Feature.prototype.clone = function() {
-  var clone = new ol.Feature(this.getProperties());
-  clone.setGeometryName(this.getGeometryName());
-  var geometry = this.getGeometry();
-  if (geometry) {
-    clone.setGeometry(geometry.clone());
-  }
-  var style = this.getStyle();
-  if (style) {
-    clone.setStyle(style);
-  }
-  return clone;
-};
-
-
-/**
- * Get the feature's default geometry.  A feature may have any number of named
- * geometries.  The "default" geometry (the one that is rendered by default) is
- * set when calling {@link ol.Feature#setGeometry}.
- * @return {ol.geom.Geometry|undefined} The default geometry for the feature.
- * @api stable
- * @observable
- */
-ol.Feature.prototype.getGeometry = function() {
-  return /** @type {ol.geom.Geometry|undefined} */ (
-      this.get(this.geometryName_));
-};
-
-
-/**
- * Get the feature identifier.  This is a stable identifier for the feature and
- * is either set when reading data from a remote source or set explicitly by
- * calling {@link ol.Feature#setId}.
- * @return {number|string|undefined} Id.
- * @api stable
- * @observable
- */
-ol.Feature.prototype.getId = function() {
-  return this.id_;
-};
-
-
-/**
- * Get the name of the feature's default geometry.  By default, the default
- * geometry is named `geometry`.
- * @return {string} Get the property name associated with the default geometry
- *     for this feature.
- * @api stable
- */
-ol.Feature.prototype.getGeometryName = function() {
-  return this.geometryName_;
-};
-
-
-/**
- * Get the feature's style. Will return what was provided to the
- * {@link ol.Feature#setStyle} method.
- * @return {ol.style.Style|Array.<ol.style.Style>|
- *     ol.FeatureStyleFunction} The feature style.
- * @api stable
- * @observable
- */
-ol.Feature.prototype.getStyle = function() {
-  return this.style_;
-};
-
-
-/**
- * Get the feature's style function.
- * @return {ol.FeatureStyleFunction|undefined} Return a function
- * representing the current style of this feature.
- * @api stable
- */
-ol.Feature.prototype.getStyleFunction = function() {
-  return this.styleFunction_;
-};
-
-
-/**
- * @private
- */
-ol.Feature.prototype.handleGeometryChange_ = function() {
-  this.changed();
-};
-
-
-/**
- * @private
- */
-ol.Feature.prototype.handleGeometryChanged_ = function() {
-  if (this.geometryChangeKey_) {
-    ol.events.unlistenByKey(this.geometryChangeKey_);
-    this.geometryChangeKey_ = null;
-  }
-  var geometry = this.getGeometry();
-  if (geometry) {
-    this.geometryChangeKey_ = ol.events.listen(geometry,
-        ol.events.EventType.CHANGE, this.handleGeometryChange_, this);
-  }
-  this.changed();
-};
-
-
-/**
- * Set the default geometry for the feature.  This will update the property
- * with the name returned by {@link ol.Feature#getGeometryName}.
- * @param {ol.geom.Geometry|undefined} geometry The new geometry.
- * @api stable
- * @observable
- */
-ol.Feature.prototype.setGeometry = function(geometry) {
-  this.set(this.geometryName_, geometry);
-};
-
-
-/**
- * Set the style for the feature.  This can be a single style object, an array
- * of styles, or a function that takes a resolution and returns an array of
- * styles. If it is `null` the feature has no style (a `null` style).
- * @param {ol.style.Style|Array.<ol.style.Style>|
- *     ol.FeatureStyleFunction} style Style for this feature.
- * @api stable
- * @observable
- */
-ol.Feature.prototype.setStyle = function(style) {
-  this.style_ = style;
-  this.styleFunction_ = !style ?
-      undefined : ol.Feature.createStyleFunction(style);
-  this.changed();
-};
-
-
-/**
- * Set the feature id.  The feature id is considered stable and may be used when
- * requesting features or comparing identifiers returned from a remote source.
- * The feature id can be used with the {@link ol.source.Vector#getFeatureById}
- * method.
- * @param {number|string|undefined} id The feature id.
- * @api stable
- * @observable
- */
-ol.Feature.prototype.setId = function(id) {
-  this.id_ = id;
-  this.changed();
-};
-
-
-/**
- * Set the property name to be used when getting the feature's default geometry.
- * When calling {@link ol.Feature#getGeometry}, the value of the property with
- * this name will be returned.
- * @param {string} name The property name of the default geometry.
- * @api stable
- */
-ol.Feature.prototype.setGeometryName = function(name) {
-  ol.events.unlisten(
-      this, ol.Object.getChangeEventType(this.geometryName_),
-      this.handleGeometryChanged_, this);
-  this.geometryName_ = name;
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(this.geometryName_),
-      this.handleGeometryChanged_, this);
-  this.handleGeometryChanged_();
-};
-
-
-/**
- * Convert the provided object into a feature style function.  Functions passed
- * through unchanged.  Arrays of ol.style.Style or single style objects wrapped
- * in a new feature style function.
- * @param {ol.FeatureStyleFunction|!Array.<ol.style.Style>|!ol.style.Style} obj
- *     A feature style function, a single style, or an array of styles.
- * @return {ol.FeatureStyleFunction} A style function.
- */
-ol.Feature.createStyleFunction = function(obj) {
-  var styleFunction;
-
-  if (typeof obj === 'function') {
-    styleFunction = obj;
-  } else {
-    /**
-     * @type {Array.<ol.style.Style>}
-     */
-    var styles;
-    if (Array.isArray(obj)) {
-      styles = obj;
-    } else {
-      ol.asserts.assert(obj instanceof ol.style.Style,
-          41); // Expected an `ol.style.Style` or an array of `ol.style.Style`
-      styles = [obj];
-    }
-    styleFunction = function() {
-      return styles;
-    };
-  }
-  return styleFunction;
-};
-
-goog.provide('ol.format.FormatType');
-
-
-/**
- * @enum {string}
- */
-ol.format.FormatType = {
-  ARRAY_BUFFER: 'arraybuffer',
-  JSON: 'json',
-  TEXT: 'text',
-  XML: 'xml'
-};
-
-goog.provide('ol.xml');
-
-goog.require('ol');
-goog.require('ol.array');
-
-
-/**
- * This document should be used when creating nodes for XML serializations. This
- * document is also used by {@link ol.xml.createElementNS} and
- * {@link ol.xml.setAttributeNS}
- * @const
- * @type {Document}
- */
-ol.xml.DOCUMENT = document.implementation.createDocument('', '', null);
-
-
-/**
- * @param {string} namespaceURI Namespace URI.
- * @param {string} qualifiedName Qualified name.
- * @return {Node} Node.
- */
-ol.xml.createElementNS = function(namespaceURI, qualifiedName) {
-  return ol.xml.DOCUMENT.createElementNS(namespaceURI, qualifiedName);
-};
-
-
-/**
- * Recursively grab all text content of child nodes into a single string.
- * @param {Node} node Node.
- * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line
- * breaks.
- * @return {string} All text content.
- * @api
- */
-ol.xml.getAllTextContent = function(node, normalizeWhitespace) {
-  return ol.xml.getAllTextContent_(node, normalizeWhitespace, []).join('');
-};
-
-
-/**
- * Recursively grab all text content of child nodes into a single string.
- * @param {Node} node Node.
- * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line
- * breaks.
- * @param {Array.<string>} accumulator Accumulator.
- * @private
- * @return {Array.<string>} Accumulator.
- */
-ol.xml.getAllTextContent_ = function(node, normalizeWhitespace, accumulator) {
-  if (node.nodeType == Node.CDATA_SECTION_NODE ||
-      node.nodeType == Node.TEXT_NODE) {
-    if (normalizeWhitespace) {
-      accumulator.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, ''));
-    } else {
-      accumulator.push(node.nodeValue);
-    }
-  } else {
-    var n;
-    for (n = node.firstChild; n; n = n.nextSibling) {
-      ol.xml.getAllTextContent_(n, normalizeWhitespace, accumulator);
-    }
-  }
-  return accumulator;
-};
-
-
-/**
- * @param {?} value Value.
- * @return {boolean} Is document.
- */
-ol.xml.isDocument = function(value) {
-  return value instanceof Document;
-};
-
-
-/**
- * @param {?} value Value.
- * @return {boolean} Is node.
- */
-ol.xml.isNode = function(value) {
-  return value instanceof Node;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {?string} namespaceURI Namespace URI.
- * @param {string} name Attribute name.
- * @return {string} Value
- */
-ol.xml.getAttributeNS = function(node, namespaceURI, name) {
-  return node.getAttributeNS(namespaceURI, name) || '';
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {?string} namespaceURI Namespace URI.
- * @param {string} name Attribute name.
- * @param {string|number} value Value.
- */
-ol.xml.setAttributeNS = function(node, namespaceURI, name, value) {
-  node.setAttributeNS(namespaceURI, name, value);
-};
-
-
-/**
- * Parse an XML string to an XML Document.
- * @param {string} xml XML.
- * @return {Document} Document.
- * @api
- */
-ol.xml.parse = function(xml) {
-  return new DOMParser().parseFromString(xml, 'application/xml');
-};
-
-
-/**
- * Make an array extender function for extending the array at the top of the
- * object stack.
- * @param {function(this: T, Node, Array.<*>): (Array.<*>|undefined)}
- *     valueReader Value reader.
- * @param {T=} opt_this The object to use as `this` in `valueReader`.
- * @return {ol.XmlParser} Parser.
- * @template T
- */
-ol.xml.makeArrayExtender = function(valueReader, opt_this) {
-  return (
-      /**
-       * @param {Node} node Node.
-       * @param {Array.<*>} objectStack Object stack.
-       */
-      function(node, objectStack) {
-        var value = valueReader.call(opt_this, node, objectStack);
-        if (value !== undefined) {
-          ol.DEBUG && console.assert(Array.isArray(value),
-              'valueReader function is expected to return an array of values');
-          var array = /** @type {Array.<*>} */
-              (objectStack[objectStack.length - 1]);
-          ol.DEBUG && console.assert(Array.isArray(array),
-              'objectStack is supposed to be an array of arrays');
-          ol.array.extend(array, value);
-        }
-      });
-};
-
-
-/**
- * Make an array pusher function for pushing to the array at the top of the
- * object stack.
- * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader.
- * @param {T=} opt_this The object to use as `this` in `valueReader`.
- * @return {ol.XmlParser} Parser.
- * @template T
- */
-ol.xml.makeArrayPusher = function(valueReader, opt_this) {
-  return (
-      /**
-       * @param {Node} node Node.
-       * @param {Array.<*>} objectStack Object stack.
-       */
-      function(node, objectStack) {
-        var value = valueReader.call(opt_this !== undefined ? opt_this : this,
-            node, objectStack);
-        if (value !== undefined) {
-          var array = objectStack[objectStack.length - 1];
-          ol.DEBUG && console.assert(Array.isArray(array),
-              'objectStack is supposed to be an array of arrays');
-          array.push(value);
-        }
-      });
-};
-
-
-/**
- * Make an object stack replacer function for replacing the object at the
- * top of the stack.
- * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader.
- * @param {T=} opt_this The object to use as `this` in `valueReader`.
- * @return {ol.XmlParser} Parser.
- * @template T
- */
-ol.xml.makeReplacer = function(valueReader, opt_this) {
-  return (
-      /**
-       * @param {Node} node Node.
-       * @param {Array.<*>} objectStack Object stack.
-       */
-      function(node, objectStack) {
-        var value = valueReader.call(opt_this !== undefined ? opt_this : this,
-            node, objectStack);
-        if (value !== undefined) {
-          objectStack[objectStack.length - 1] = value;
-        }
-      });
-};
-
-
-/**
- * Make an object property pusher function for adding a property to the
- * object at the top of the stack.
- * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader.
- * @param {string=} opt_property Property.
- * @param {T=} opt_this The object to use as `this` in `valueReader`.
- * @return {ol.XmlParser} Parser.
- * @template T
- */
-ol.xml.makeObjectPropertyPusher = function(valueReader, opt_property, opt_this) {
-  ol.DEBUG && console.assert(valueReader !== undefined,
-      'undefined valueReader, expected function(this: T, Node, Array.<*>)');
-  return (
-      /**
-       * @param {Node} node Node.
-       * @param {Array.<*>} objectStack Object stack.
-       */
-      function(node, objectStack) {
-        var value = valueReader.call(opt_this !== undefined ? opt_this : this,
-            node, objectStack);
-        if (value !== undefined) {
-          var object = /** @type {Object} */
-              (objectStack[objectStack.length - 1]);
-          var property = opt_property !== undefined ?
-              opt_property : node.localName;
-          var array;
-          if (property in object) {
-            array = object[property];
-          } else {
-            array = object[property] = [];
-          }
-          array.push(value);
-        }
-      });
-};
-
-
-/**
- * Make an object property setter function.
- * @param {function(this: T, Node, Array.<*>): *} valueReader Value reader.
- * @param {string=} opt_property Property.
- * @param {T=} opt_this The object to use as `this` in `valueReader`.
- * @return {ol.XmlParser} Parser.
- * @template T
- */
-ol.xml.makeObjectPropertySetter = function(valueReader, opt_property, opt_this) {
-  ol.DEBUG && console.assert(valueReader !== undefined,
-      'undefined valueReader, expected function(this: T, Node, Array.<*>)');
-  return (
-      /**
-       * @param {Node} node Node.
-       * @param {Array.<*>} objectStack Object stack.
-       */
-      function(node, objectStack) {
-        var value = valueReader.call(opt_this !== undefined ? opt_this : this,
-            node, objectStack);
-        if (value !== undefined) {
-          var object = /** @type {Object} */
-              (objectStack[objectStack.length - 1]);
-          var property = opt_property !== undefined ?
-              opt_property : node.localName;
-          object[property] = value;
-        }
-      });
-};
-
-
-/**
- * Create a serializer that appends nodes written by its `nodeWriter` to its
- * designated parent. The parent is the `node` of the
- * {@link ol.XmlNodeStackItem} at the top of the `objectStack`.
- * @param {function(this: T, Node, V, Array.<*>)}
- *     nodeWriter Node writer.
- * @param {T=} opt_this The object to use as `this` in `nodeWriter`.
- * @return {ol.XmlSerializer} Serializer.
- * @template T, V
- */
-ol.xml.makeChildAppender = function(nodeWriter, opt_this) {
-  return function(node, value, objectStack) {
-    nodeWriter.call(opt_this !== undefined ? opt_this : this,
-        node, value, objectStack);
-    var parent = objectStack[objectStack.length - 1];
-    var parentNode = parent.node;
-    ol.DEBUG && console.assert(ol.xml.isNode(parentNode) ||
-        ol.xml.isDocument(parentNode),
-        'expected parentNode %s to be a Node or a Document', parentNode);
-    parentNode.appendChild(node);
-  };
-};
-
-
-/**
- * Create a serializer that calls the provided `nodeWriter` from
- * {@link ol.xml.serialize}. This can be used by the parent writer to have the
- * 'nodeWriter' called with an array of values when the `nodeWriter` was
- * designed to serialize a single item. An example would be a LineString
- * geometry writer, which could be reused for writing MultiLineString
- * geometries.
- * @param {function(this: T, Node, V, Array.<*>)}
- *     nodeWriter Node writer.
- * @param {T=} opt_this The object to use as `this` in `nodeWriter`.
- * @return {ol.XmlSerializer} Serializer.
- * @template T, V
- */
-ol.xml.makeArraySerializer = function(nodeWriter, opt_this) {
-  var serializersNS, nodeFactory;
-  return function(node, value, objectStack) {
-    if (serializersNS === undefined) {
-      serializersNS = {};
-      var serializers = {};
-      serializers[node.localName] = nodeWriter;
-      serializersNS[node.namespaceURI] = serializers;
-      nodeFactory = ol.xml.makeSimpleNodeFactory(node.localName);
-    }
-    ol.xml.serialize(serializersNS, nodeFactory, value, objectStack);
-  };
-};
-
-
-/**
- * Create a node factory which can use the `opt_keys` passed to
- * {@link ol.xml.serialize} or {@link ol.xml.pushSerializeAndPop} as node names,
- * or a fixed node name. The namespace of the created nodes can either be fixed,
- * or the parent namespace will be used.
- * @param {string=} opt_nodeName Fixed node name which will be used for all
- *     created nodes. If not provided, the 3rd argument to the resulting node
- *     factory needs to be provided and will be the nodeName.
- * @param {string=} opt_namespaceURI Fixed namespace URI which will be used for
- *     all created nodes. If not provided, the namespace of the parent node will
- *     be used.
- * @return {function(*, Array.<*>, string=): (Node|undefined)} Node factory.
- */
-ol.xml.makeSimpleNodeFactory = function(opt_nodeName, opt_namespaceURI) {
-  var fixedNodeName = opt_nodeName;
-  return (
-      /**
-       * @param {*} value Value.
-       * @param {Array.<*>} objectStack Object stack.
-       * @param {string=} opt_nodeName Node name.
-       * @return {Node} Node.
-       */
-      function(value, objectStack, opt_nodeName) {
-        var context = objectStack[objectStack.length - 1];
-        var node = context.node;
-        ol.DEBUG && console.assert(ol.xml.isNode(node) || ol.xml.isDocument(node),
-            'expected node %s to be a Node or a Document', node);
-        var nodeName = fixedNodeName;
-        if (nodeName === undefined) {
-          nodeName = opt_nodeName;
-        }
-        var namespaceURI = opt_namespaceURI;
-        if (opt_namespaceURI === undefined) {
-          namespaceURI = node.namespaceURI;
-        }
-        ol.DEBUG && console.assert(nodeName !== undefined, 'nodeName was undefined');
-        return ol.xml.createElementNS(namespaceURI, /** @type {string} */ (nodeName));
-      }
-  );
-};
-
-
-/**
- * A node factory that creates a node using the parent's `namespaceURI` and the
- * `nodeName` passed by {@link ol.xml.serialize} or
- * {@link ol.xml.pushSerializeAndPop} to the node factory.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- */
-ol.xml.OBJECT_PROPERTY_NODE_FACTORY = ol.xml.makeSimpleNodeFactory();
-
-
-/**
- * Create an array of `values` to be used with {@link ol.xml.serialize} or
- * {@link ol.xml.pushSerializeAndPop}, where `orderedKeys` has to be provided as
- * `opt_key` argument.
- * @param {Object.<string, V>} object Key-value pairs for the sequence. Keys can
- *     be a subset of the `orderedKeys`.
- * @param {Array.<string>} orderedKeys Keys in the order of the sequence.
- * @return {Array.<V>} Values in the order of the sequence. The resulting array
- *     has the same length as the `orderedKeys` array. Values that are not
- *     present in `object` will be `undefined` in the resulting array.
- * @template V
- */
-ol.xml.makeSequence = function(object, orderedKeys) {
-  var length = orderedKeys.length;
-  var sequence = new Array(length);
-  for (var i = 0; i < length; ++i) {
-    sequence[i] = object[orderedKeys[i]];
-  }
-  return sequence;
-};
-
-
-/**
- * Create a namespaced structure, using the same values for each namespace.
- * This can be used as a starting point for versioned parsers, when only a few
- * values are version specific.
- * @param {Array.<string>} namespaceURIs Namespace URIs.
- * @param {T} structure Structure.
- * @param {Object.<string, T>=} opt_structureNS Namespaced structure to add to.
- * @return {Object.<string, T>} Namespaced structure.
- * @template T
- */
-ol.xml.makeStructureNS = function(namespaceURIs, structure, opt_structureNS) {
-  /**
-   * @type {Object.<string, *>}
-   */
-  var structureNS = opt_structureNS !== undefined ? opt_structureNS : {};
-  var i, ii;
-  for (i = 0, ii = namespaceURIs.length; i < ii; ++i) {
-    structureNS[namespaceURIs[i]] = structure;
-  }
-  return structureNS;
-};
-
-
-/**
- * Parse a node using the parsers and object stack.
- * @param {Object.<string, Object.<string, ol.XmlParser>>} parsersNS
- *     Parsers by namespace.
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @param {*=} opt_this The object to use as `this`.
- */
-ol.xml.parseNode = function(parsersNS, node, objectStack, opt_this) {
-  var n;
-  for (n = node.firstElementChild; n; n = n.nextElementSibling) {
-    var parsers = parsersNS[n.namespaceURI];
-    if (parsers !== undefined) {
-      var parser = parsers[n.localName];
-      if (parser !== undefined) {
-        parser.call(opt_this, n, objectStack);
-      }
-    }
-  }
-};
-
-
-/**
- * Push an object on top of the stack, parse and return the popped object.
- * @param {T} object Object.
- * @param {Object.<string, Object.<string, ol.XmlParser>>} parsersNS
- *     Parsers by namespace.
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @param {*=} opt_this The object to use as `this`.
- * @return {T} Object.
- * @template T
- */
-ol.xml.pushParseAndPop = function(
-    object, parsersNS, node, objectStack, opt_this) {
-  objectStack.push(object);
-  ol.xml.parseNode(parsersNS, node, objectStack, opt_this);
-  return objectStack.pop();
-};
-
-
-/**
- * Walk through an array of `values` and call a serializer for each value.
- * @param {Object.<string, Object.<string, ol.XmlSerializer>>} serializersNS
- *     Namespaced serializers.
- * @param {function(this: T, *, Array.<*>, (string|undefined)): (Node|undefined)} nodeFactory
- *     Node factory. The `nodeFactory` creates the node whose namespace and name
- *     will be used to choose a node writer from `serializersNS`. This
- *     separation allows us to decide what kind of node to create, depending on
- *     the value we want to serialize. An example for this would be different
- *     geometry writers based on the geometry type.
- * @param {Array.<*>} values Values to serialize. An example would be an array
- *     of {@link ol.Feature} instances.
- * @param {Array.<*>} objectStack Node stack.
- * @param {Array.<string>=} opt_keys Keys of the `values`. Will be passed to the
- *     `nodeFactory`. This is used for serializing object literals where the
- *     node name relates to the property key. The array length of `opt_keys` has
- *     to match the length of `values`. For serializing a sequence, `opt_keys`
- *     determines the order of the sequence.
- * @param {T=} opt_this The object to use as `this` for the node factory and
- *     serializers.
- * @template T
- */
-ol.xml.serialize = function(
-    serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {
-  var length = (opt_keys !== undefined ? opt_keys : values).length;
-  var value, node;
-  for (var i = 0; i < length; ++i) {
-    value = values[i];
-    if (value !== undefined) {
-      node = nodeFactory.call(opt_this, value, objectStack,
-          opt_keys !== undefined ? opt_keys[i] : undefined);
-      if (node !== undefined) {
-        serializersNS[node.namespaceURI][node.localName]
-            .call(opt_this, node, value, objectStack);
-      }
-    }
-  }
-};
-
-
-/**
- * @param {O} object Object.
- * @param {Object.<string, Object.<string, ol.XmlSerializer>>} serializersNS
- *     Namespaced serializers.
- * @param {function(this: T, *, Array.<*>, (string|undefined)): (Node|undefined)} nodeFactory
- *     Node factory. The `nodeFactory` creates the node whose namespace and name
- *     will be used to choose a node writer from `serializersNS`. This
- *     separation allows us to decide what kind of node to create, depending on
- *     the value we want to serialize. An example for this would be different
- *     geometry writers based on the geometry type.
- * @param {Array.<*>} values Values to serialize. An example would be an array
- *     of {@link ol.Feature} instances.
- * @param {Array.<*>} objectStack Node stack.
- * @param {Array.<string>=} opt_keys Keys of the `values`. Will be passed to the
- *     `nodeFactory`. This is used for serializing object literals where the
- *     node name relates to the property key. The array length of `opt_keys` has
- *     to match the length of `values`. For serializing a sequence, `opt_keys`
- *     determines the order of the sequence.
- * @param {T=} opt_this The object to use as `this` for the node factory and
- *     serializers.
- * @return {O|undefined} Object.
- * @template O, T
- */
-ol.xml.pushSerializeAndPop = function(object,
-    serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {
-  objectStack.push(object);
-  ol.xml.serialize(
-      serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this);
-  return objectStack.pop();
-};
-
-goog.provide('ol.featureloader');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.format.FormatType');
-goog.require('ol.xml');
-
-
-/**
- * @param {string|ol.FeatureUrlFunction} url Feature URL service.
- * @param {ol.format.Feature} format Feature format.
- * @param {function(this:ol.VectorTile, Array.<ol.Feature>, ol.proj.Projection)|function(this:ol.source.Vector, Array.<ol.Feature>)} success
- *     Function called with the loaded features and optionally with the data
- *     projection. Called with the vector tile or source as `this`.
- * @param {function(this:ol.VectorTile)|function(this:ol.source.Vector)} failure
- *     Function called when loading failed. Called with the vector tile or
- *     source as `this`.
- * @return {ol.FeatureLoader} The feature loader.
- */
-ol.featureloader.loadFeaturesXhr = function(url, format, success, failure) {
-  return (
-      /**
-       * @param {ol.Extent} extent Extent.
-       * @param {number} resolution Resolution.
-       * @param {ol.proj.Projection} projection Projection.
-       * @this {ol.source.Vector|ol.VectorTile}
-       */
-      function(extent, resolution, projection) {
-        var xhr = new XMLHttpRequest();
-        xhr.open('GET',
-            typeof url === 'function' ? url(extent, resolution, projection) : url,
-            true);
-        if (format.getType() == ol.format.FormatType.ARRAY_BUFFER) {
-          xhr.responseType = 'arraybuffer';
-        }
-        /**
-         * @param {Event} event Event.
-         * @private
-         */
-        xhr.onload = function(event) {
-          // status will be 0 for file:// urls
-          if (!xhr.status || xhr.status >= 200 && xhr.status < 300) {
-            var type = format.getType();
-            /** @type {Document|Node|Object|string|undefined} */
-            var source;
-            if (type == ol.format.FormatType.JSON ||
-                type == ol.format.FormatType.TEXT) {
-              source = xhr.responseText;
-            } else if (type == ol.format.FormatType.XML) {
-              source = xhr.responseXML;
-              if (!source) {
-                source = ol.xml.parse(xhr.responseText);
-              }
-            } else if (type == ol.format.FormatType.ARRAY_BUFFER) {
-              source = /** @type {ArrayBuffer} */ (xhr.response);
-            }
-            if (source) {
-              success.call(this, format.readFeatures(source,
-                  {featureProjection: projection}),
-                  format.readProjection(source));
-            } else {
-              failure.call(this);
-            }
-          } else {
-            failure.call(this);
-          }
-        }.bind(this);
-        xhr.send();
-      });
-};
-
-
-/**
- * Create an XHR feature loader for a `url` and `format`. The feature loader
- * loads features (with XHR), parses the features, and adds them to the
- * vector tile.
- * @param {string|ol.FeatureUrlFunction} url Feature URL service.
- * @param {ol.format.Feature} format Feature format.
- * @return {ol.FeatureLoader} The feature loader.
- * @api
- */
-ol.featureloader.tile = function(url, format) {
-  return ol.featureloader.loadFeaturesXhr(url, format,
-      /**
-       * @param {Array.<ol.Feature>} features The loaded features.
-       * @param {ol.proj.Projection} dataProjection Data projection.
-       * @this {ol.VectorTile}
-       */
-      function(features, dataProjection) {
-        this.setProjection(dataProjection);
-        this.setFeatures(features);
-      },
-      /**
-       * @this {ol.VectorTile}
-       */
-      function() {
-        this.setState(ol.Tile.State.ERROR);
-      });
-};
-
-
-/**
- * Create an XHR feature loader for a `url` and `format`. The feature loader
- * loads features (with XHR), parses the features, and adds them to the
- * vector source.
- * @param {string|ol.FeatureUrlFunction} url Feature URL service.
- * @param {ol.format.Feature} format Feature format.
- * @return {ol.FeatureLoader} The feature loader.
- * @api
- */
-ol.featureloader.xhr = function(url, format) {
-  return ol.featureloader.loadFeaturesXhr(url, format,
-      /**
-       * @param {Array.<ol.Feature>} features The loaded features.
-       * @param {ol.proj.Projection} dataProjection Data projection.
-       * @this {ol.source.Vector}
-       */
-      function(features, dataProjection) {
-        this.addFeatures(features);
-      }, /* FIXME handle error */ ol.nullFunction);
-};
-
-goog.provide('ol.format.Feature');
-
-goog.require('ol.geom.Geometry');
-goog.require('ol.obj');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Base class for feature formats.
- * {ol.format.Feature} subclasses provide the ability to decode and encode
- * {@link ol.Feature} objects from a variety of commonly used geospatial
- * file formats.  See the documentation for each format for more details.
- *
- * @constructor
- * @api stable
- */
-ol.format.Feature = function() {
-
-  /**
-   * @protected
-   * @type {ol.proj.Projection}
-   */
-  this.defaultDataProjection = null;
-
-  /**
-   * @protected
-   * @type {ol.proj.Projection}
-   */
-  this.defaultFeatureProjection = null;
-
-};
-
-
-/**
- * @abstract
- * @return {Array.<string>} Extensions.
- */
-ol.format.Feature.prototype.getExtensions = function() {};
-
-
-/**
- * Adds the data projection to the read options.
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @return {olx.format.ReadOptions|undefined} Options.
- * @protected
- */
-ol.format.Feature.prototype.getReadOptions = function(source, opt_options) {
-  var options;
-  if (opt_options) {
-    options = {
-      dataProjection: opt_options.dataProjection ?
-          opt_options.dataProjection : this.readProjection(source),
-      featureProjection: opt_options.featureProjection
-    };
-  }
-  return this.adaptOptions(options);
-};
-
-
-/**
- * Sets the `defaultDataProjection` on the options, if no `dataProjection`
- * is set.
- * @param {olx.format.WriteOptions|olx.format.ReadOptions|undefined} options
- *     Options.
- * @protected
- * @return {olx.format.WriteOptions|olx.format.ReadOptions|undefined}
- *     Updated options.
- */
-ol.format.Feature.prototype.adaptOptions = function(options) {
-  return ol.obj.assign({
-    dataProjection: this.defaultDataProjection,
-    featureProjection: this.defaultFeatureProjection
-  }, options);
-};
-
-
-/**
- * @abstract
- * @return {ol.format.FormatType} Format.
- */
-ol.format.Feature.prototype.getType = function() {};
-
-
-/**
- * Read a single feature from a source.
- *
- * @abstract
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- */
-ol.format.Feature.prototype.readFeature = function(source, opt_options) {};
-
-
-/**
- * Read all features from a source.
- *
- * @abstract
- * @param {Document|Node|ArrayBuffer|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- */
-ol.format.Feature.prototype.readFeatures = function(source, opt_options) {};
-
-
-/**
- * Read a single geometry from a source.
- *
- * @abstract
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.Feature.prototype.readGeometry = function(source, opt_options) {};
-
-
-/**
- * Read the projection from a source.
- *
- * @abstract
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.proj.Projection} Projection.
- */
-ol.format.Feature.prototype.readProjection = function(source) {};
-
-
-/**
- * Encode a feature in this format.
- *
- * @abstract
- * @param {ol.Feature} feature Feature.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} Result.
- */
-ol.format.Feature.prototype.writeFeature = function(feature, opt_options) {};
-
-
-/**
- * Encode an array of features in this format.
- *
- * @abstract
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} Result.
- */
-ol.format.Feature.prototype.writeFeatures = function(features, opt_options) {};
-
-
-/**
- * Write a single geometry in this format.
- *
- * @abstract
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} Result.
- */
-ol.format.Feature.prototype.writeGeometry = function(geometry, opt_options) {};
-
-
-/**
- * @param {ol.geom.Geometry|ol.Extent} geometry Geometry.
- * @param {boolean} write Set to true for writing, false for reading.
- * @param {(olx.format.WriteOptions|olx.format.ReadOptions)=} opt_options
- *     Options.
- * @return {ol.geom.Geometry|ol.Extent} Transformed geometry.
- * @protected
- */
-ol.format.Feature.transformWithOptions = function(
-    geometry, write, opt_options) {
-  var featureProjection = opt_options ?
-      ol.proj.get(opt_options.featureProjection) : null;
-  var dataProjection = opt_options ?
-      ol.proj.get(opt_options.dataProjection) : null;
-  /**
-   * @type {ol.geom.Geometry|ol.Extent}
-   */
-  var transformed;
-  if (featureProjection && dataProjection &&
-      !ol.proj.equivalent(featureProjection, dataProjection)) {
-    if (geometry instanceof ol.geom.Geometry) {
-      transformed = (write ? geometry.clone() : geometry).transform(
-          write ? featureProjection : dataProjection,
-          write ? dataProjection : featureProjection);
-    } else {
-      // FIXME this is necessary because ol.format.GML treats extents
-      // as geometries
-      transformed = ol.proj.transformExtent(
-          write ? geometry.slice() : geometry,
-          write ? featureProjection : dataProjection,
-          write ? dataProjection : featureProjection);
-    }
-  } else {
-    transformed = geometry;
-  }
-  if (write && opt_options && opt_options.decimals) {
-    var power = Math.pow(10, opt_options.decimals);
-    // if decimals option on write, round each coordinate appropriately
-    /**
-     * @param {Array.<number>} coordinates Coordinates.
-     * @return {Array.<number>} Transformed coordinates.
-     */
-    var transform = function(coordinates) {
-      for (var i = 0, ii = coordinates.length; i < ii; ++i) {
-        coordinates[i] = Math.round(coordinates[i] * power) / power;
-      }
-      return coordinates;
-    };
-    if (Array.isArray(transformed)) {
-      transform(transformed);
-    } else {
-      transformed.applyTransform(transform);
-    }
-  }
-  return transformed;
-};
-
-goog.provide('ol.format.JSONFeature');
-
-goog.require('ol');
-goog.require('ol.format.Feature');
-goog.require('ol.format.FormatType');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Base class for JSON feature formats.
- *
- * @constructor
- * @extends {ol.format.Feature}
- */
-ol.format.JSONFeature = function() {
-  ol.format.Feature.call(this);
-};
-ol.inherits(ol.format.JSONFeature, ol.format.Feature);
-
-
-/**
- * @param {Document|Node|Object|string} source Source.
- * @private
- * @return {Object} Object.
- */
-ol.format.JSONFeature.prototype.getObject_ = function(source) {
-  if (typeof source === 'string') {
-    var object = JSON.parse(source);
-    return object ? /** @type {Object} */ (object) : null;
-  } else if (source !== null) {
-    return source;
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.JSONFeature.prototype.getType = function() {
-  return ol.format.FormatType.JSON;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.JSONFeature.prototype.readFeature = function(source, opt_options) {
-  return this.readFeatureFromObject(
-      this.getObject_(source), this.getReadOptions(source, opt_options));
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.JSONFeature.prototype.readFeatures = function(source, opt_options) {
-  return this.readFeaturesFromObject(
-      this.getObject_(source), this.getReadOptions(source, opt_options));
-};
-
-
-/**
- * @abstract
- * @param {Object} object Object.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @protected
- * @return {ol.Feature} Feature.
- */
-ol.format.JSONFeature.prototype.readFeatureFromObject = function(object, opt_options) {};
-
-
-/**
- * @abstract
- * @param {Object} object Object.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @protected
- * @return {Array.<ol.Feature>} Features.
- */
-ol.format.JSONFeature.prototype.readFeaturesFromObject = function(object, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.JSONFeature.prototype.readGeometry = function(source, opt_options) {
-  return this.readGeometryFromObject(
-      this.getObject_(source), this.getReadOptions(source, opt_options));
-};
-
-
-/**
- * @abstract
- * @param {Object} object Object.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @protected
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.JSONFeature.prototype.readGeometryFromObject = function(object, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.JSONFeature.prototype.readProjection = function(source) {
-  return this.readProjectionFromObject(this.getObject_(source));
-};
-
-
-/**
- * @abstract
- * @param {Object} object Object.
- * @protected
- * @return {ol.proj.Projection} Projection.
- */
-ol.format.JSONFeature.prototype.readProjectionFromObject = function(object) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.JSONFeature.prototype.writeFeature = function(feature, opt_options) {
-  return JSON.stringify(this.writeFeatureObject(feature, opt_options));
-};
-
-
-/**
- * @abstract
- * @param {ol.Feature} feature Feature.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {Object} Object.
- */
-ol.format.JSONFeature.prototype.writeFeatureObject = function(feature, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.JSONFeature.prototype.writeFeatures = function(features, opt_options) {
-  return JSON.stringify(this.writeFeaturesObject(features, opt_options));
-};
-
-
-/**
- * @abstract
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {Object} Object.
- */
-ol.format.JSONFeature.prototype.writeFeaturesObject = function(features, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.JSONFeature.prototype.writeGeometry = function(geometry, opt_options) {
-  return JSON.stringify(this.writeGeometryObject(geometry, opt_options));
-};
-
-
-/**
- * @abstract
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {Object} Object.
- */
-ol.format.JSONFeature.prototype.writeGeometryObject = function(geometry, opt_options) {};
-
-goog.provide('ol.geom.flat.interpolate');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.math');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} fraction Fraction.
- * @param {Array.<number>=} opt_dest Destination.
- * @return {Array.<number>} Destination.
- */
-ol.geom.flat.interpolate.lineString = function(flatCoordinates, offset, end, stride, fraction, opt_dest) {
-  // FIXME does not work when vertices are repeated
-  // FIXME interpolate extra dimensions
-  ol.DEBUG && console.assert(0 <= fraction && fraction <= 1,
-      'fraction should be in between 0 and 1');
-  var pointX = NaN;
-  var pointY = NaN;
-  var n = (end - offset) / stride;
-  if (n === 0) {
-    ol.DEBUG && console.assert(false, 'n cannot be 0');
-  } else if (n == 1) {
-    pointX = flatCoordinates[offset];
-    pointY = flatCoordinates[offset + 1];
-  } else if (n == 2) {
-    pointX = (1 - fraction) * flatCoordinates[offset] +
-        fraction * flatCoordinates[offset + stride];
-    pointY = (1 - fraction) * flatCoordinates[offset + 1] +
-        fraction * flatCoordinates[offset + stride + 1];
-  } else {
-    var x1 = flatCoordinates[offset];
-    var y1 = flatCoordinates[offset + 1];
-    var length = 0;
-    var cumulativeLengths = [0];
-    var i;
-    for (i = offset + stride; i < end; i += stride) {
-      var x2 = flatCoordinates[i];
-      var y2 = flatCoordinates[i + 1];
-      length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
-      cumulativeLengths.push(length);
-      x1 = x2;
-      y1 = y2;
-    }
-    var target = fraction * length;
-    var index = ol.array.binarySearch(cumulativeLengths, target);
-    if (index < 0) {
-      var t = (target - cumulativeLengths[-index - 2]) /
-          (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);
-      var o = offset + (-index - 2) * stride;
-      pointX = ol.math.lerp(
-          flatCoordinates[o], flatCoordinates[o + stride], t);
-      pointY = ol.math.lerp(
-          flatCoordinates[o + 1], flatCoordinates[o + stride + 1], t);
-    } else {
-      pointX = flatCoordinates[offset + index * stride];
-      pointY = flatCoordinates[offset + index * stride + 1];
-    }
-  }
-  if (opt_dest) {
-    opt_dest[0] = pointX;
-    opt_dest[1] = pointY;
-    return opt_dest;
-  } else {
-    return [pointX, pointY];
-  }
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {number} m M.
- * @param {boolean} extrapolate Extrapolate.
- * @return {ol.Coordinate} Coordinate.
- */
-ol.geom.flat.lineStringCoordinateAtM = function(flatCoordinates, offset, end, stride, m, extrapolate) {
-  if (end == offset) {
-    return null;
-  }
-  var coordinate;
-  if (m < flatCoordinates[offset + stride - 1]) {
-    if (extrapolate) {
-      coordinate = flatCoordinates.slice(offset, offset + stride);
-      coordinate[stride - 1] = m;
-      return coordinate;
-    } else {
-      return null;
-    }
-  } else if (flatCoordinates[end - 1] < m) {
-    if (extrapolate) {
-      coordinate = flatCoordinates.slice(end - stride, end);
-      coordinate[stride - 1] = m;
-      return coordinate;
-    } else {
-      return null;
-    }
-  }
-  // FIXME use O(1) search
-  if (m == flatCoordinates[offset + stride - 1]) {
-    return flatCoordinates.slice(offset, offset + stride);
-  }
-  var lo = offset / stride;
-  var hi = end / stride;
-  while (lo < hi) {
-    var mid = (lo + hi) >> 1;
-    if (m < flatCoordinates[(mid + 1) * stride - 1]) {
-      hi = mid;
-    } else {
-      lo = mid + 1;
-    }
-  }
-  var m0 = flatCoordinates[lo * stride - 1];
-  if (m == m0) {
-    return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);
-  }
-  var m1 = flatCoordinates[(lo + 1) * stride - 1];
-  ol.DEBUG && console.assert(m0 < m, 'm0 should be less than m');
-  ol.DEBUG && console.assert(m <= m1, 'm should be less than or equal to m1');
-  var t = (m - m0) / (m1 - m0);
-  coordinate = [];
-  var i;
-  for (i = 0; i < stride - 1; ++i) {
-    coordinate.push(ol.math.lerp(flatCoordinates[(lo - 1) * stride + i],
-        flatCoordinates[lo * stride + i], t));
-  }
-  coordinate.push(m);
-  ol.DEBUG && console.assert(coordinate.length == stride,
-      'length of coordinate array should match stride');
-  return coordinate;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<number>} ends Ends.
- * @param {number} stride Stride.
- * @param {number} m M.
- * @param {boolean} extrapolate Extrapolate.
- * @param {boolean} interpolate Interpolate.
- * @return {ol.Coordinate} Coordinate.
- */
-ol.geom.flat.lineStringsCoordinateAtM = function(
-    flatCoordinates, offset, ends, stride, m, extrapolate, interpolate) {
-  if (interpolate) {
-    return ol.geom.flat.lineStringCoordinateAtM(
-        flatCoordinates, offset, ends[ends.length - 1], stride, m, extrapolate);
-  }
-  var coordinate;
-  if (m < flatCoordinates[stride - 1]) {
-    if (extrapolate) {
-      coordinate = flatCoordinates.slice(0, stride);
-      coordinate[stride - 1] = m;
-      return coordinate;
-    } else {
-      return null;
-    }
-  }
-  if (flatCoordinates[flatCoordinates.length - 1] < m) {
-    if (extrapolate) {
-      coordinate = flatCoordinates.slice(flatCoordinates.length - stride);
-      coordinate[stride - 1] = m;
-      return coordinate;
-    } else {
-      return null;
-    }
-  }
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    if (offset == end) {
-      continue;
-    }
-    if (m < flatCoordinates[offset + stride - 1]) {
-      return null;
-    } else if (m <= flatCoordinates[end - 1]) {
-      return ol.geom.flat.lineStringCoordinateAtM(
-          flatCoordinates, offset, end, stride, m, false);
-    }
-    offset = end;
-  }
-  ol.DEBUG && console.assert(false,
-      'ol.geom.flat.lineStringsCoordinateAtM should have returned');
-  return null;
-};
-
-goog.provide('ol.geom.flat.length');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @return {number} Length.
- */
-ol.geom.flat.length.lineString = function(flatCoordinates, offset, end, stride) {
-  var x1 = flatCoordinates[offset];
-  var y1 = flatCoordinates[offset + 1];
-  var length = 0;
-  var i;
-  for (i = offset + stride; i < end; i += stride) {
-    var x2 = flatCoordinates[i];
-    var y2 = flatCoordinates[i + 1];
-    length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
-    x1 = x2;
-    y1 = y2;
-  }
-  return length;
-};
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @return {number} Perimeter.
- */
-ol.geom.flat.length.linearRing = function(flatCoordinates, offset, end, stride) {
-  var perimeter =
-      ol.geom.flat.length.lineString(flatCoordinates, offset, end, stride);
-  var dx = flatCoordinates[end - stride] - flatCoordinates[offset];
-  var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];
-  perimeter += Math.sqrt(dx * dx + dy * dy);
-  return perimeter;
-};
-
-goog.provide('ol.geom.LineString');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.closest');
-goog.require('ol.geom.flat.deflate');
-goog.require('ol.geom.flat.inflate');
-goog.require('ol.geom.flat.interpolate');
-goog.require('ol.geom.flat.intersectsextent');
-goog.require('ol.geom.flat.length');
-goog.require('ol.geom.flat.segments');
-goog.require('ol.geom.flat.simplify');
-
-
-/**
- * @classdesc
- * Linestring geometry.
- *
- * @constructor
- * @extends {ol.geom.SimpleGeometry}
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.LineString = function(coordinates, opt_layout) {
-
-  ol.geom.SimpleGeometry.call(this);
-
-  /**
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.flatMidpoint_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.flatMidpointRevision_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDelta_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDeltaRevision_ = -1;
-
-  this.setCoordinates(coordinates, opt_layout);
-
-};
-ol.inherits(ol.geom.LineString, ol.geom.SimpleGeometry);
-
-
-/**
- * Append the passed coordinate to the coordinates of the linestring.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @api stable
- */
-ol.geom.LineString.prototype.appendCoordinate = function(coordinate) {
-  ol.DEBUG && console.assert(coordinate.length == this.stride,
-      'length of coordinate array should match stride');
-  if (!this.flatCoordinates) {
-    this.flatCoordinates = coordinate.slice();
-  } else {
-    ol.array.extend(this.flatCoordinates, coordinate);
-  }
-  this.changed();
-};
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.LineString} Clone.
- * @api stable
- */
-ol.geom.LineString.prototype.clone = function() {
-  var lineString = new ol.geom.LineString(null);
-  lineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
-  return lineString;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.LineString.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  if (minSquaredDistance <
-      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
-    return minSquaredDistance;
-  }
-  if (this.maxDeltaRevision_ != this.getRevision()) {
-    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getMaxSquaredDelta(
-        this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));
-    this.maxDeltaRevision_ = this.getRevision();
-  }
-  return ol.geom.flat.closest.getClosestPoint(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
-      this.maxDelta_, false, x, y, closestPoint, minSquaredDistance);
-};
-
-
-/**
- * Iterate over each segment, calling the provided callback.
- * If the callback returns a truthy value the function returns that
- * value immediately. Otherwise the function returns `false`.
- *
- * @param {function(this: S, ol.Coordinate, ol.Coordinate): T} callback Function
- *     called for each segment.
- * @param {S=} opt_this The object to be used as the value of 'this'
- *     within callback.
- * @return {T|boolean} Value.
- * @template T,S
- * @api
- */
-ol.geom.LineString.prototype.forEachSegment = function(callback, opt_this) {
-  return ol.geom.flat.segments.forEach(this.flatCoordinates, 0,
-      this.flatCoordinates.length, this.stride, callback, opt_this);
-};
-
-
-/**
- * Returns the coordinate at `m` using linear interpolation, or `null` if no
- * such coordinate exists.
- *
- * `opt_extrapolate` controls extrapolation beyond the range of Ms in the
- * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first
- * M will return the first coordinate and Ms greater than the last M will
- * return the last coordinate.
- *
- * @param {number} m M.
- * @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.
- * @return {ol.Coordinate} Coordinate.
- * @api stable
- */
-ol.geom.LineString.prototype.getCoordinateAtM = function(m, opt_extrapolate) {
-  if (this.layout != ol.geom.GeometryLayout.XYM &&
-      this.layout != ol.geom.GeometryLayout.XYZM) {
-    return null;
-  }
-  var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;
-  return ol.geom.flat.lineStringCoordinateAtM(this.flatCoordinates, 0,
-      this.flatCoordinates.length, this.stride, m, extrapolate);
-};
-
-
-/**
- * Return the coordinates of the linestring.
- * @return {Array.<ol.Coordinate>} Coordinates.
- * @api stable
- */
-ol.geom.LineString.prototype.getCoordinates = function() {
-  return ol.geom.flat.inflate.coordinates(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
-};
-
-
-/**
- * Return the coordinate at the provided fraction along the linestring.
- * The `fraction` is a number between 0 and 1, where 0 is the start of the
- * linestring and 1 is the end.
- * @param {number} fraction Fraction.
- * @param {ol.Coordinate=} opt_dest Optional coordinate whose values will
- *     be modified. If not provided, a new coordinate will be returned.
- * @return {ol.Coordinate} Coordinate of the interpolated point.
- * @api
- */
-ol.geom.LineString.prototype.getCoordinateAt = function(fraction, opt_dest) {
-  return ol.geom.flat.interpolate.lineString(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
-      fraction, opt_dest);
-};
-
-
-/**
- * Return the length of the linestring on projected plane.
- * @return {number} Length (on projected plane).
- * @api stable
- */
-ol.geom.LineString.prototype.getLength = function() {
-  return ol.geom.flat.length.lineString(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
-};
-
-
-/**
- * @return {Array.<number>} Flat midpoint.
- */
-ol.geom.LineString.prototype.getFlatMidpoint = function() {
-  if (this.flatMidpointRevision_ != this.getRevision()) {
-    this.flatMidpoint_ = this.getCoordinateAt(0.5, this.flatMidpoint_);
-    this.flatMidpointRevision_ = this.getRevision();
-  }
-  return this.flatMidpoint_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.LineString.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
-  var simplifiedFlatCoordinates = [];
-  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeucker(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
-      squaredTolerance, simplifiedFlatCoordinates, 0);
-  var simplifiedLineString = new ol.geom.LineString(null);
-  simplifiedLineString.setFlatCoordinates(
-      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates);
-  return simplifiedLineString;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.LineString.prototype.getType = function() {
-  return ol.geom.GeometryType.LINE_STRING;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.LineString.prototype.intersectsExtent = function(extent) {
-  return ol.geom.flat.intersectsextent.lineString(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
-      extent);
-};
-
-
-/**
- * Set the coordinates of the linestring.
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.LineString.prototype.setCoordinates = function(coordinates, opt_layout) {
-  if (!coordinates) {
-    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
-  } else {
-    this.setLayout(opt_layout, coordinates, 1);
-    if (!this.flatCoordinates) {
-      this.flatCoordinates = [];
-    }
-    this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(
-        this.flatCoordinates, 0, coordinates, this.stride);
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- */
-ol.geom.LineString.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
-  this.setFlatCoordinatesInternal(layout, flatCoordinates);
-  this.changed();
-};
-
-goog.provide('ol.geom.MultiLineString');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.closest');
-goog.require('ol.geom.flat.deflate');
-goog.require('ol.geom.flat.inflate');
-goog.require('ol.geom.flat.interpolate');
-goog.require('ol.geom.flat.intersectsextent');
-goog.require('ol.geom.flat.simplify');
-
-
-/**
- * @classdesc
- * Multi-linestring geometry.
- *
- * @constructor
- * @extends {ol.geom.SimpleGeometry}
- * @param {Array.<Array.<ol.Coordinate>>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.MultiLineString = function(coordinates, opt_layout) {
-
-  ol.geom.SimpleGeometry.call(this);
-
-  /**
-   * @type {Array.<number>}
-   * @private
-   */
-  this.ends_ = [];
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDelta_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDeltaRevision_ = -1;
-
-  this.setCoordinates(coordinates, opt_layout);
-
-};
-ol.inherits(ol.geom.MultiLineString, ol.geom.SimpleGeometry);
-
-
-/**
- * Append the passed linestring to the multilinestring.
- * @param {ol.geom.LineString} lineString LineString.
- * @api stable
- */
-ol.geom.MultiLineString.prototype.appendLineString = function(lineString) {
-  ol.DEBUG && console.assert(lineString.getLayout() == this.layout,
-      'layout of lineString should match the layout');
-  if (!this.flatCoordinates) {
-    this.flatCoordinates = lineString.getFlatCoordinates().slice();
-  } else {
-    ol.array.extend(
-        this.flatCoordinates, lineString.getFlatCoordinates().slice());
-  }
-  this.ends_.push(this.flatCoordinates.length);
-  this.changed();
-};
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.MultiLineString} Clone.
- * @api stable
- */
-ol.geom.MultiLineString.prototype.clone = function() {
-  var multiLineString = new ol.geom.MultiLineString(null);
-  multiLineString.setFlatCoordinates(
-      this.layout, this.flatCoordinates.slice(), this.ends_.slice());
-  return multiLineString;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.MultiLineString.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  if (minSquaredDistance <
-      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
-    return minSquaredDistance;
-  }
-  if (this.maxDeltaRevision_ != this.getRevision()) {
-    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getsMaxSquaredDelta(
-        this.flatCoordinates, 0, this.ends_, this.stride, 0));
-    this.maxDeltaRevision_ = this.getRevision();
-  }
-  return ol.geom.flat.closest.getsClosestPoint(
-      this.flatCoordinates, 0, this.ends_, this.stride,
-      this.maxDelta_, false, x, y, closestPoint, minSquaredDistance);
-};
-
-
-/**
- * Returns the coordinate at `m` using linear interpolation, or `null` if no
- * such coordinate exists.
- *
- * `opt_extrapolate` controls extrapolation beyond the range of Ms in the
- * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first
- * M will return the first coordinate and Ms greater than the last M will
- * return the last coordinate.
- *
- * `opt_interpolate` controls interpolation between consecutive LineStrings
- * within the MultiLineString. If `opt_interpolate` is `true` the coordinates
- * will be linearly interpolated between the last coordinate of one LineString
- * and the first coordinate of the next LineString.  If `opt_interpolate` is
- * `false` then the function will return `null` for Ms falling between
- * LineStrings.
- *
- * @param {number} m M.
- * @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.
- * @param {boolean=} opt_interpolate Interpolate. Default is `false`.
- * @return {ol.Coordinate} Coordinate.
- * @api stable
- */
-ol.geom.MultiLineString.prototype.getCoordinateAtM = function(m, opt_extrapolate, opt_interpolate) {
-  if ((this.layout != ol.geom.GeometryLayout.XYM &&
-       this.layout != ol.geom.GeometryLayout.XYZM) ||
-      this.flatCoordinates.length === 0) {
-    return null;
-  }
-  var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;
-  var interpolate = opt_interpolate !== undefined ? opt_interpolate : false;
-  return ol.geom.flat.lineStringsCoordinateAtM(this.flatCoordinates, 0,
-      this.ends_, this.stride, m, extrapolate, interpolate);
-};
-
-
-/**
- * Return the coordinates of the multilinestring.
- * @return {Array.<Array.<ol.Coordinate>>} Coordinates.
- * @api stable
- */
-ol.geom.MultiLineString.prototype.getCoordinates = function() {
-  return ol.geom.flat.inflate.coordinatess(
-      this.flatCoordinates, 0, this.ends_, this.stride);
-};
-
-
-/**
- * @return {Array.<number>} Ends.
- */
-ol.geom.MultiLineString.prototype.getEnds = function() {
-  return this.ends_;
-};
-
-
-/**
- * Return the linestring at the specified index.
- * @param {number} index Index.
- * @return {ol.geom.LineString} LineString.
- * @api stable
- */
-ol.geom.MultiLineString.prototype.getLineString = function(index) {
-  ol.DEBUG && console.assert(0 <= index && index < this.ends_.length,
-      'index should be in between 0 and length of the this.ends_ array');
-  if (index < 0 || this.ends_.length <= index) {
-    return null;
-  }
-  var lineString = new ol.geom.LineString(null);
-  lineString.setFlatCoordinates(this.layout, this.flatCoordinates.slice(
-      index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]));
-  return lineString;
-};
-
-
-/**
- * Return the linestrings of this multilinestring.
- * @return {Array.<ol.geom.LineString>} LineStrings.
- * @api stable
- */
-ol.geom.MultiLineString.prototype.getLineStrings = function() {
-  var flatCoordinates = this.flatCoordinates;
-  var ends = this.ends_;
-  var layout = this.layout;
-  /** @type {Array.<ol.geom.LineString>} */
-  var lineStrings = [];
-  var offset = 0;
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    var lineString = new ol.geom.LineString(null);
-    lineString.setFlatCoordinates(layout, flatCoordinates.slice(offset, end));
-    lineStrings.push(lineString);
-    offset = end;
-  }
-  return lineStrings;
-};
-
-
-/**
- * @return {Array.<number>} Flat midpoints.
- */
-ol.geom.MultiLineString.prototype.getFlatMidpoints = function() {
-  var midpoints = [];
-  var flatCoordinates = this.flatCoordinates;
-  var offset = 0;
-  var ends = this.ends_;
-  var stride = this.stride;
-  var i, ii;
-  for (i = 0, ii = ends.length; i < ii; ++i) {
-    var end = ends[i];
-    var midpoint = ol.geom.flat.interpolate.lineString(
-        flatCoordinates, offset, end, stride, 0.5);
-    ol.array.extend(midpoints, midpoint);
-    offset = end;
-  }
-  return midpoints;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.MultiLineString.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
-  var simplifiedFlatCoordinates = [];
-  var simplifiedEnds = [];
-  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.douglasPeuckers(
-      this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance,
-      simplifiedFlatCoordinates, 0, simplifiedEnds);
-  var simplifiedMultiLineString = new ol.geom.MultiLineString(null);
-  simplifiedMultiLineString.setFlatCoordinates(
-      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEnds);
-  return simplifiedMultiLineString;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.MultiLineString.prototype.getType = function() {
-  return ol.geom.GeometryType.MULTI_LINE_STRING;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.MultiLineString.prototype.intersectsExtent = function(extent) {
-  return ol.geom.flat.intersectsextent.lineStrings(
-      this.flatCoordinates, 0, this.ends_, this.stride, extent);
-};
-
-
-/**
- * Set the coordinates of the multilinestring.
- * @param {Array.<Array.<ol.Coordinate>>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.MultiLineString.prototype.setCoordinates = function(coordinates, opt_layout) {
-  if (!coordinates) {
-    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.ends_);
-  } else {
-    this.setLayout(opt_layout, coordinates, 2);
-    if (!this.flatCoordinates) {
-      this.flatCoordinates = [];
-    }
-    var ends = ol.geom.flat.deflate.coordinatess(
-        this.flatCoordinates, 0, coordinates, this.stride, this.ends_);
-    this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {Array.<number>} ends Ends.
- */
-ol.geom.MultiLineString.prototype.setFlatCoordinates = function(layout, flatCoordinates, ends) {
-  if (!flatCoordinates) {
-    ol.DEBUG && console.assert(ends && ends.length === 0,
-        'ends must be truthy and ends.length should be 0');
-  } else if (ends.length === 0) {
-    ol.DEBUG && console.assert(flatCoordinates.length === 0,
-        'flatCoordinates should be an empty array');
-  } else {
-    ol.DEBUG && console.assert(flatCoordinates.length == ends[ends.length - 1],
-        'length of flatCoordinates array should match the last value of ends');
-  }
-  this.setFlatCoordinatesInternal(layout, flatCoordinates);
-  this.ends_ = ends;
-  this.changed();
-};
-
-
-/**
- * @param {Array.<ol.geom.LineString>} lineStrings LineStrings.
- */
-ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) {
-  var layout = this.getLayout();
-  var flatCoordinates = [];
-  var ends = [];
-  var i, ii;
-  for (i = 0, ii = lineStrings.length; i < ii; ++i) {
-    var lineString = lineStrings[i];
-    if (i === 0) {
-      layout = lineString.getLayout();
-    } else {
-      // FIXME better handle the case of non-matching layouts
-      ol.DEBUG && console.assert(lineString.getLayout() == layout,
-          'layout of lineString should match layout');
-    }
-    ol.array.extend(flatCoordinates, lineString.getFlatCoordinates());
-    ends.push(flatCoordinates.length);
-  }
-  this.setFlatCoordinates(layout, flatCoordinates, ends);
-};
-
-goog.provide('ol.geom.MultiPoint');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.deflate');
-goog.require('ol.geom.flat.inflate');
-goog.require('ol.math');
-
-
-/**
- * @classdesc
- * Multi-point geometry.
- *
- * @constructor
- * @extends {ol.geom.SimpleGeometry}
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.MultiPoint = function(coordinates, opt_layout) {
-  ol.geom.SimpleGeometry.call(this);
-  this.setCoordinates(coordinates, opt_layout);
-};
-ol.inherits(ol.geom.MultiPoint, ol.geom.SimpleGeometry);
-
-
-/**
- * Append the passed point to this multipoint.
- * @param {ol.geom.Point} point Point.
- * @api stable
- */
-ol.geom.MultiPoint.prototype.appendPoint = function(point) {
-  ol.DEBUG && console.assert(point.getLayout() == this.layout,
-      'the layout of point should match layout');
-  if (!this.flatCoordinates) {
-    this.flatCoordinates = point.getFlatCoordinates().slice();
-  } else {
-    ol.array.extend(this.flatCoordinates, point.getFlatCoordinates());
-  }
-  this.changed();
-};
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.MultiPoint} Clone.
- * @api stable
- */
-ol.geom.MultiPoint.prototype.clone = function() {
-  var multiPoint = new ol.geom.MultiPoint(null);
-  multiPoint.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
-  return multiPoint;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.MultiPoint.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  if (minSquaredDistance <
-      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
-    return minSquaredDistance;
-  }
-  var flatCoordinates = this.flatCoordinates;
-  var stride = this.stride;
-  var i, ii, j;
-  for (i = 0, ii = flatCoordinates.length; i < ii; i += stride) {
-    var squaredDistance = ol.math.squaredDistance(
-        x, y, flatCoordinates[i], flatCoordinates[i + 1]);
-    if (squaredDistance < minSquaredDistance) {
-      minSquaredDistance = squaredDistance;
-      for (j = 0; j < stride; ++j) {
-        closestPoint[j] = flatCoordinates[i + j];
-      }
-      closestPoint.length = stride;
-    }
-  }
-  return minSquaredDistance;
-};
-
-
-/**
- * Return the coordinates of the multipoint.
- * @return {Array.<ol.Coordinate>} Coordinates.
- * @api stable
- */
-ol.geom.MultiPoint.prototype.getCoordinates = function() {
-  return ol.geom.flat.inflate.coordinates(
-      this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
-};
-
-
-/**
- * Return the point at the specified index.
- * @param {number} index Index.
- * @return {ol.geom.Point} Point.
- * @api stable
- */
-ol.geom.MultiPoint.prototype.getPoint = function(index) {
-  var n = !this.flatCoordinates ?
-      0 : this.flatCoordinates.length / this.stride;
-  ol.DEBUG && console.assert(0 <= index && index < n,
-      'index should be in between 0 and n');
-  if (index < 0 || n <= index) {
-    return null;
-  }
-  var point = new ol.geom.Point(null);
-  point.setFlatCoordinates(this.layout, this.flatCoordinates.slice(
-      index * this.stride, (index + 1) * this.stride));
-  return point;
-};
-
-
-/**
- * Return the points of this multipoint.
- * @return {Array.<ol.geom.Point>} Points.
- * @api stable
- */
-ol.geom.MultiPoint.prototype.getPoints = function() {
-  var flatCoordinates = this.flatCoordinates;
-  var layout = this.layout;
-  var stride = this.stride;
-  /** @type {Array.<ol.geom.Point>} */
-  var points = [];
-  var i, ii;
-  for (i = 0, ii = flatCoordinates.length; i < ii; i += stride) {
-    var point = new ol.geom.Point(null);
-    point.setFlatCoordinates(layout, flatCoordinates.slice(i, i + stride));
-    points.push(point);
-  }
-  return points;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.MultiPoint.prototype.getType = function() {
-  return ol.geom.GeometryType.MULTI_POINT;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.MultiPoint.prototype.intersectsExtent = function(extent) {
-  var flatCoordinates = this.flatCoordinates;
-  var stride = this.stride;
-  var i, ii, x, y;
-  for (i = 0, ii = flatCoordinates.length; i < ii; i += stride) {
-    x = flatCoordinates[i];
-    y = flatCoordinates[i + 1];
-    if (ol.extent.containsXY(extent, x, y)) {
-      return true;
-    }
-  }
-  return false;
-};
-
-
-/**
- * Set the coordinates of the multipoint.
- * @param {Array.<ol.Coordinate>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.MultiPoint.prototype.setCoordinates = function(coordinates, opt_layout) {
-  if (!coordinates) {
-    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
-  } else {
-    this.setLayout(opt_layout, coordinates, 1);
-    if (!this.flatCoordinates) {
-      this.flatCoordinates = [];
-    }
-    this.flatCoordinates.length = ol.geom.flat.deflate.coordinates(
-        this.flatCoordinates, 0, coordinates, this.stride);
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- */
-ol.geom.MultiPoint.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
-  this.setFlatCoordinatesInternal(layout, flatCoordinates);
-  this.changed();
-};
-
-goog.provide('ol.geom.flat.center');
-
-goog.require('ol.extent');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {Array.<Array.<number>>} endss Endss.
- * @param {number} stride Stride.
- * @return {Array.<number>} Flat centers.
- */
-ol.geom.flat.center.linearRingss = function(flatCoordinates, offset, endss, stride) {
-  var flatCenters = [];
-  var i, ii;
-  var extent = ol.extent.createEmpty();
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i];
-    extent = ol.extent.createOrUpdateFromFlatCoordinates(
-        flatCoordinates, offset, ends[0], stride);
-    flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);
-    offset = ends[ends.length - 1];
-  }
-  return flatCenters;
-};
-
-goog.provide('ol.geom.MultiPolygon');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.Polygon');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.area');
-goog.require('ol.geom.flat.center');
-goog.require('ol.geom.flat.closest');
-goog.require('ol.geom.flat.contains');
-goog.require('ol.geom.flat.deflate');
-goog.require('ol.geom.flat.inflate');
-goog.require('ol.geom.flat.interiorpoint');
-goog.require('ol.geom.flat.intersectsextent');
-goog.require('ol.geom.flat.orient');
-goog.require('ol.geom.flat.simplify');
-
-
-/**
- * @classdesc
- * Multi-polygon geometry.
- *
- * @constructor
- * @extends {ol.geom.SimpleGeometry}
- * @param {Array.<Array.<Array.<ol.Coordinate>>>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.MultiPolygon = function(coordinates, opt_layout) {
-
-  ol.geom.SimpleGeometry.call(this);
-
-  /**
-   * @type {Array.<Array.<number>>}
-   * @private
-   */
-  this.endss_ = [];
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.flatInteriorPointsRevision_ = -1;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.flatInteriorPoints_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDelta_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxDeltaRevision_ = -1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.orientedRevision_ = -1;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.orientedFlatCoordinates_ = null;
-
-  this.setCoordinates(coordinates, opt_layout);
-
-};
-ol.inherits(ol.geom.MultiPolygon, ol.geom.SimpleGeometry);
-
-
-/**
- * Append the passed polygon to this multipolygon.
- * @param {ol.geom.Polygon} polygon Polygon.
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.appendPolygon = function(polygon) {
-  ol.DEBUG && console.assert(polygon.getLayout() == this.layout,
-      'layout of polygon should match layout');
-  /** @type {Array.<number>} */
-  var ends;
-  if (!this.flatCoordinates) {
-    this.flatCoordinates = polygon.getFlatCoordinates().slice();
-    ends = polygon.getEnds().slice();
-    this.endss_.push();
-  } else {
-    var offset = this.flatCoordinates.length;
-    ol.array.extend(this.flatCoordinates, polygon.getFlatCoordinates());
-    ends = polygon.getEnds().slice();
-    var i, ii;
-    for (i = 0, ii = ends.length; i < ii; ++i) {
-      ends[i] += offset;
-    }
-  }
-  this.endss_.push(ends);
-  this.changed();
-};
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.MultiPolygon} Clone.
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.clone = function() {
-  var multiPolygon = new ol.geom.MultiPolygon(null);
-
-  var len = this.endss_.length;
-  var newEndss = new Array(len);
-  for (var i = 0; i < len; ++i) {
-    newEndss[i] = this.endss_[i].slice();
-  }
-
-  multiPolygon.setFlatCoordinates(
-      this.layout, this.flatCoordinates.slice(), newEndss);
-  return multiPolygon;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.MultiPolygon.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  if (minSquaredDistance <
-      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
-    return minSquaredDistance;
-  }
-  if (this.maxDeltaRevision_ != this.getRevision()) {
-    this.maxDelta_ = Math.sqrt(ol.geom.flat.closest.getssMaxSquaredDelta(
-        this.flatCoordinates, 0, this.endss_, this.stride, 0));
-    this.maxDeltaRevision_ = this.getRevision();
-  }
-  return ol.geom.flat.closest.getssClosestPoint(
-      this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride,
-      this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.MultiPolygon.prototype.containsXY = function(x, y) {
-  return ol.geom.flat.contains.linearRingssContainsXY(
-      this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y);
-};
-
-
-/**
- * Return the area of the multipolygon on projected plane.
- * @return {number} Area (on projected plane).
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.getArea = function() {
-  return ol.geom.flat.area.linearRingss(
-      this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride);
-};
-
-
-/**
- * Get the coordinate array for this geometry.  This array has the structure
- * of a GeoJSON coordinate array for multi-polygons.
- *
- * @param {boolean=} opt_right Orient coordinates according to the right-hand
- *     rule (counter-clockwise for exterior and clockwise for interior rings).
- *     If `false`, coordinates will be oriented according to the left-hand rule
- *     (clockwise for exterior and counter-clockwise for interior rings).
- *     By default, coordinate orientation will depend on how the geometry was
- *     constructed.
- * @return {Array.<Array.<Array.<ol.Coordinate>>>} Coordinates.
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.getCoordinates = function(opt_right) {
-  var flatCoordinates;
-  if (opt_right !== undefined) {
-    flatCoordinates = this.getOrientedFlatCoordinates().slice();
-    ol.geom.flat.orient.orientLinearRingss(
-        flatCoordinates, 0, this.endss_, this.stride, opt_right);
-  } else {
-    flatCoordinates = this.flatCoordinates;
-  }
-
-  return ol.geom.flat.inflate.coordinatesss(
-      flatCoordinates, 0, this.endss_, this.stride);
-};
-
-
-/**
- * @return {Array.<Array.<number>>} Endss.
- */
-ol.geom.MultiPolygon.prototype.getEndss = function() {
-  return this.endss_;
-};
-
-
-/**
- * @return {Array.<number>} Flat interior points.
- */
-ol.geom.MultiPolygon.prototype.getFlatInteriorPoints = function() {
-  if (this.flatInteriorPointsRevision_ != this.getRevision()) {
-    var flatCenters = ol.geom.flat.center.linearRingss(
-        this.flatCoordinates, 0, this.endss_, this.stride);
-    this.flatInteriorPoints_ = ol.geom.flat.interiorpoint.linearRingss(
-        this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride,
-        flatCenters);
-    this.flatInteriorPointsRevision_ = this.getRevision();
-  }
-  return this.flatInteriorPoints_;
-};
-
-
-/**
- * Return the interior points as {@link ol.geom.MultiPoint multipoint}.
- * @return {ol.geom.MultiPoint} Interior points.
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.getInteriorPoints = function() {
-  var interiorPoints = new ol.geom.MultiPoint(null);
-  interiorPoints.setFlatCoordinates(ol.geom.GeometryLayout.XY,
-      this.getFlatInteriorPoints().slice());
-  return interiorPoints;
-};
-
-
-/**
- * @return {Array.<number>} Oriented flat coordinates.
- */
-ol.geom.MultiPolygon.prototype.getOrientedFlatCoordinates = function() {
-  if (this.orientedRevision_ != this.getRevision()) {
-    var flatCoordinates = this.flatCoordinates;
-    if (ol.geom.flat.orient.linearRingssAreOriented(
-        flatCoordinates, 0, this.endss_, this.stride)) {
-      this.orientedFlatCoordinates_ = flatCoordinates;
-    } else {
-      this.orientedFlatCoordinates_ = flatCoordinates.slice();
-      this.orientedFlatCoordinates_.length =
-          ol.geom.flat.orient.orientLinearRingss(
-              this.orientedFlatCoordinates_, 0, this.endss_, this.stride);
-    }
-    this.orientedRevision_ = this.getRevision();
-  }
-  return this.orientedFlatCoordinates_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.MultiPolygon.prototype.getSimplifiedGeometryInternal = function(squaredTolerance) {
-  var simplifiedFlatCoordinates = [];
-  var simplifiedEndss = [];
-  simplifiedFlatCoordinates.length = ol.geom.flat.simplify.quantizess(
-      this.flatCoordinates, 0, this.endss_, this.stride,
-      Math.sqrt(squaredTolerance),
-      simplifiedFlatCoordinates, 0, simplifiedEndss);
-  var simplifiedMultiPolygon = new ol.geom.MultiPolygon(null);
-  simplifiedMultiPolygon.setFlatCoordinates(
-      ol.geom.GeometryLayout.XY, simplifiedFlatCoordinates, simplifiedEndss);
-  return simplifiedMultiPolygon;
-};
-
-
-/**
- * Return the polygon at the specified index.
- * @param {number} index Index.
- * @return {ol.geom.Polygon} Polygon.
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.getPolygon = function(index) {
-  ol.DEBUG && console.assert(0 <= index && index < this.endss_.length,
-      'index should be in between 0 and the length of this.endss_');
-  if (index < 0 || this.endss_.length <= index) {
-    return null;
-  }
-  var offset;
-  if (index === 0) {
-    offset = 0;
-  } else {
-    var prevEnds = this.endss_[index - 1];
-    offset = prevEnds[prevEnds.length - 1];
-  }
-  var ends = this.endss_[index].slice();
-  var end = ends[ends.length - 1];
-  if (offset !== 0) {
-    var i, ii;
-    for (i = 0, ii = ends.length; i < ii; ++i) {
-      ends[i] -= offset;
-    }
-  }
-  var polygon = new ol.geom.Polygon(null);
-  polygon.setFlatCoordinates(
-      this.layout, this.flatCoordinates.slice(offset, end), ends);
-  return polygon;
-};
-
-
-/**
- * Return the polygons of this multipolygon.
- * @return {Array.<ol.geom.Polygon>} Polygons.
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.getPolygons = function() {
-  var layout = this.layout;
-  var flatCoordinates = this.flatCoordinates;
-  var endss = this.endss_;
-  var polygons = [];
-  var offset = 0;
-  var i, ii, j, jj;
-  for (i = 0, ii = endss.length; i < ii; ++i) {
-    var ends = endss[i].slice();
-    var end = ends[ends.length - 1];
-    if (offset !== 0) {
-      for (j = 0, jj = ends.length; j < jj; ++j) {
-        ends[j] -= offset;
-      }
-    }
-    var polygon = new ol.geom.Polygon(null);
-    polygon.setFlatCoordinates(
-        layout, flatCoordinates.slice(offset, end), ends);
-    polygons.push(polygon);
-    offset = end;
-  }
-  return polygons;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.getType = function() {
-  return ol.geom.GeometryType.MULTI_POLYGON;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.intersectsExtent = function(extent) {
-  return ol.geom.flat.intersectsextent.linearRingss(
-      this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, extent);
-};
-
-
-/**
- * Set the coordinates of the multipolygon.
- * @param {Array.<Array.<Array.<ol.Coordinate>>>} coordinates Coordinates.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api stable
- */
-ol.geom.MultiPolygon.prototype.setCoordinates = function(coordinates, opt_layout) {
-  if (!coordinates) {
-    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null, this.endss_);
-  } else {
-    this.setLayout(opt_layout, coordinates, 3);
-    if (!this.flatCoordinates) {
-      this.flatCoordinates = [];
-    }
-    var endss = ol.geom.flat.deflate.coordinatesss(
-        this.flatCoordinates, 0, coordinates, this.stride, this.endss_);
-    if (endss.length === 0) {
-      this.flatCoordinates.length = 0;
-    } else {
-      var lastEnds = endss[endss.length - 1];
-      this.flatCoordinates.length = lastEnds.length === 0 ?
-          0 : lastEnds[lastEnds.length - 1];
-    }
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {Array.<Array.<number>>} endss Endss.
- */
-ol.geom.MultiPolygon.prototype.setFlatCoordinates = function(layout, flatCoordinates, endss) {
-  ol.DEBUG && console.assert(endss, 'endss must be truthy');
-  if (!flatCoordinates || flatCoordinates.length === 0) {
-    ol.DEBUG && console.assert(endss.length === 0, 'the length of endss should be 0');
-  } else {
-    ol.DEBUG && console.assert(endss.length > 0, 'endss cannot be an empty array');
-    var ends = endss[endss.length - 1];
-    ol.DEBUG && console.assert(flatCoordinates.length == ends[ends.length - 1],
-        'the length of flatCoordinates should be the last value of ends');
-  }
-  this.setFlatCoordinatesInternal(layout, flatCoordinates);
-  this.endss_ = endss;
-  this.changed();
-};
-
-
-/**
- * @param {Array.<ol.geom.Polygon>} polygons Polygons.
- */
-ol.geom.MultiPolygon.prototype.setPolygons = function(polygons) {
-  var layout = this.getLayout();
-  var flatCoordinates = [];
-  var endss = [];
-  var i, ii, ends;
-  for (i = 0, ii = polygons.length; i < ii; ++i) {
-    var polygon = polygons[i];
-    if (i === 0) {
-      layout = polygon.getLayout();
-    } else {
-      // FIXME better handle the case of non-matching layouts
-      ol.DEBUG && console.assert(polygon.getLayout() == layout,
-          'layout of polygon should be layout');
-    }
-    var offset = flatCoordinates.length;
-    ends = polygon.getEnds();
-    var j, jj;
-    for (j = 0, jj = ends.length; j < jj; ++j) {
-      ends[j] += offset;
-    }
-    ol.array.extend(flatCoordinates, polygon.getFlatCoordinates());
-    endss.push(ends);
-  }
-  this.setFlatCoordinates(layout, flatCoordinates, endss);
-};
-
-goog.provide('ol.format.EsriJSON');
-
-goog.require('ol');
-goog.require('ol.Feature');
-goog.require('ol.array');
-goog.require('ol.asserts');
-goog.require('ol.extent');
-goog.require('ol.format.Feature');
-goog.require('ol.format.JSONFeature');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.LinearRing');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.geom.flat.orient');
-goog.require('ol.obj');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the EsriJSON format.
- *
- * @constructor
- * @extends {ol.format.JSONFeature}
- * @param {olx.format.EsriJSONOptions=} opt_options Options.
- * @api
- */
-ol.format.EsriJSON = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.format.JSONFeature.call(this);
-
-  /**
-   * Name of the geometry attribute for features.
-   * @type {string|undefined}
-   * @private
-   */
-  this.geometryName_ = options.geometryName;
-
-};
-ol.inherits(ol.format.EsriJSON, ol.format.JSONFeature);
-
-
-/**
- * @param {EsriJSONGeometry} object Object.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @private
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.EsriJSON.readGeometry_ = function(object, opt_options) {
-  if (!object) {
-    return null;
-  }
-  /** @type {ol.geom.GeometryType} */
-  var type;
-  if (typeof object.x === 'number' && typeof object.y === 'number') {
-    type = ol.geom.GeometryType.POINT;
-  } else if (object.points) {
-    type = ol.geom.GeometryType.MULTI_POINT;
-  } else if (object.paths) {
-    if (object.paths.length === 1) {
-      type = ol.geom.GeometryType.LINE_STRING;
-    } else {
-      type = ol.geom.GeometryType.MULTI_LINE_STRING;
-    }
-  } else if (object.rings) {
-    var layout = ol.format.EsriJSON.getGeometryLayout_(object);
-    var rings = ol.format.EsriJSON.convertRings_(object.rings, layout);
-    object = /** @type {EsriJSONGeometry} */(ol.obj.assign({}, object));
-    if (rings.length === 1) {
-      type = ol.geom.GeometryType.POLYGON;
-      object.rings = rings[0];
-    } else {
-      type = ol.geom.GeometryType.MULTI_POLYGON;
-      object.rings = rings;
-    }
-  }
-  var geometryReader = ol.format.EsriJSON.GEOMETRY_READERS_[type];
-  return /** @type {ol.geom.Geometry} */ (
-      ol.format.Feature.transformWithOptions(
-          geometryReader(object), false, opt_options));
-};
-
-
-/**
- * Determines inner and outer rings.
- * Checks if any polygons in this array contain any other polygons in this
- * array. It is used for checking for holes.
- * Logic inspired by: https://github.com/Esri/terraformer-arcgis-parser
- * @param {Array.<!Array.<!Array.<number>>>} rings Rings.
- * @param {ol.geom.GeometryLayout} layout Geometry layout.
- * @private
- * @return {Array.<!Array.<!Array.<number>>>} Transoformed rings.
- */
-ol.format.EsriJSON.convertRings_ = function(rings, layout) {
-  var outerRings = [];
-  var holes = [];
-  var i, ii;
-  for (i = 0, ii = rings.length; i < ii; ++i) {
-    var flatRing = ol.array.flatten(rings[i]);
-    // is this ring an outer ring? is it clockwise?
-    var clockwise = ol.geom.flat.orient.linearRingIsClockwise(flatRing, 0,
-        flatRing.length, layout.length);
-    if (clockwise) {
-      outerRings.push([rings[i]]);
-    } else {
-      holes.push(rings[i]);
-    }
-  }
-  while (holes.length) {
-    var hole = holes.shift();
-    var matched = false;
-    // loop over all outer rings and see if they contain our hole.
-    for (i = outerRings.length - 1; i >= 0; i--) {
-      var outerRing = outerRings[i][0];
-      if (ol.extent.containsExtent(new ol.geom.LinearRing(
-          outerRing).getExtent(),
-          new ol.geom.LinearRing(hole).getExtent())) {
-        // the hole is contained push it into our polygon
-        outerRings[i].push(hole);
-        matched = true;
-        break;
-      }
-    }
-    if (!matched) {
-      // no outer rings contain this hole turn it into and outer
-      // ring (reverse it)
-      outerRings.push([hole.reverse()]);
-    }
-  }
-  return outerRings;
-};
-
-
-/**
- * @param {EsriJSONGeometry} object Object.
- * @private
- * @return {ol.geom.Geometry} Point.
- */
-ol.format.EsriJSON.readPointGeometry_ = function(object) {
-  ol.DEBUG && console.assert(typeof object.x === 'number', 'object.x should be number');
-  ol.DEBUG && console.assert(typeof object.y === 'number', 'object.y should be number');
-  var point;
-  if (object.m !== undefined && object.z !== undefined) {
-    point = new ol.geom.Point([object.x, object.y, object.z, object.m],
-        ol.geom.GeometryLayout.XYZM);
-  } else if (object.z !== undefined) {
-    point = new ol.geom.Point([object.x, object.y, object.z],
-        ol.geom.GeometryLayout.XYZ);
-  } else if (object.m !== undefined) {
-    point = new ol.geom.Point([object.x, object.y, object.m],
-        ol.geom.GeometryLayout.XYM);
-  } else {
-    point = new ol.geom.Point([object.x, object.y]);
-  }
-  return point;
-};
-
-
-/**
- * @param {EsriJSONGeometry} object Object.
- * @private
- * @return {ol.geom.Geometry} LineString.
- */
-ol.format.EsriJSON.readLineStringGeometry_ = function(object) {
-  ol.DEBUG && console.assert(Array.isArray(object.paths),
-      'object.paths should be an array');
-  ol.DEBUG && console.assert(object.paths.length === 1,
-      'object.paths array length should be 1');
-  var layout = ol.format.EsriJSON.getGeometryLayout_(object);
-  return new ol.geom.LineString(object.paths[0], layout);
-};
-
-
-/**
- * @param {EsriJSONGeometry} object Object.
- * @private
- * @return {ol.geom.Geometry} MultiLineString.
- */
-ol.format.EsriJSON.readMultiLineStringGeometry_ = function(object) {
-  ol.DEBUG && console.assert(Array.isArray(object.paths),
-      'object.paths should be an array');
-  ol.DEBUG && console.assert(object.paths.length > 1,
-      'object.paths array length should be more than 1');
-  var layout = ol.format.EsriJSON.getGeometryLayout_(object);
-  return new ol.geom.MultiLineString(object.paths, layout);
-};
-
-
-/**
- * @param {EsriJSONGeometry} object Object.
- * @private
- * @return {ol.geom.GeometryLayout} The geometry layout to use.
- */
-ol.format.EsriJSON.getGeometryLayout_ = function(object) {
-  var layout = ol.geom.GeometryLayout.XY;
-  if (object.hasZ === true && object.hasM === true) {
-    layout = ol.geom.GeometryLayout.XYZM;
-  } else if (object.hasZ === true) {
-    layout = ol.geom.GeometryLayout.XYZ;
-  } else if (object.hasM === true) {
-    layout = ol.geom.GeometryLayout.XYM;
-  }
-  return layout;
-};
-
-
-/**
- * @param {EsriJSONGeometry} object Object.
- * @private
- * @return {ol.geom.Geometry} MultiPoint.
- */
-ol.format.EsriJSON.readMultiPointGeometry_ = function(object) {
-  var layout = ol.format.EsriJSON.getGeometryLayout_(object);
-  return new ol.geom.MultiPoint(object.points, layout);
-};
-
-
-/**
- * @param {EsriJSONGeometry} object Object.
- * @private
- * @return {ol.geom.Geometry} MultiPolygon.
- */
-ol.format.EsriJSON.readMultiPolygonGeometry_ = function(object) {
-  ol.DEBUG && console.assert(object.rings.length > 1,
-      'object.rings should have length larger than 1');
-  var layout = ol.format.EsriJSON.getGeometryLayout_(object);
-  return new ol.geom.MultiPolygon(
-      /** @type {Array.<Array.<Array.<Array.<number>>>>} */(object.rings),
-      layout);
-};
-
-
-/**
- * @param {EsriJSONGeometry} object Object.
- * @private
- * @return {ol.geom.Geometry} Polygon.
- */
-ol.format.EsriJSON.readPolygonGeometry_ = function(object) {
-  ol.DEBUG && console.assert(object.rings);
-  var layout = ol.format.EsriJSON.getGeometryLayout_(object);
-  return new ol.geom.Polygon(object.rings, layout);
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {EsriJSONGeometry} EsriJSON geometry.
- */
-ol.format.EsriJSON.writePointGeometry_ = function(geometry, opt_options) {
-  var coordinates = /** @type {ol.geom.Point} */ (geometry).getCoordinates();
-  var esriJSON;
-  var layout = /** @type {ol.geom.Point} */ (geometry).getLayout();
-  if (layout === ol.geom.GeometryLayout.XYZ) {
-    esriJSON = /** @type {EsriJSONPoint} */ ({
-      x: coordinates[0],
-      y: coordinates[1],
-      z: coordinates[2]
-    });
-  } else if (layout === ol.geom.GeometryLayout.XYM) {
-    esriJSON = /** @type {EsriJSONPoint} */ ({
-      x: coordinates[0],
-      y: coordinates[1],
-      m: coordinates[2]
-    });
-  } else if (layout === ol.geom.GeometryLayout.XYZM) {
-    esriJSON = /** @type {EsriJSONPoint} */ ({
-      x: coordinates[0],
-      y: coordinates[1],
-      z: coordinates[2],
-      m: coordinates[3]
-    });
-  } else if (layout === ol.geom.GeometryLayout.XY) {
-    esriJSON = /** @type {EsriJSONPoint} */ ({
-      x: coordinates[0],
-      y: coordinates[1]
-    });
-  } else {
-    ol.asserts.assert(false, 34); // Invalid geometry layout
-  }
-  return /** @type {EsriJSONGeometry} */ (esriJSON);
-};
-
-
-/**
- * @param {ol.geom.SimpleGeometry} geometry Geometry.
- * @private
- * @return {Object} Object with boolean hasZ and hasM keys.
- */
-ol.format.EsriJSON.getHasZM_ = function(geometry) {
-  var layout = geometry.getLayout();
-  return {
-    hasZ: (layout === ol.geom.GeometryLayout.XYZ ||
-        layout === ol.geom.GeometryLayout.XYZM),
-    hasM: (layout === ol.geom.GeometryLayout.XYM ||
-        layout === ol.geom.GeometryLayout.XYZM)
-  };
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {EsriJSONPolyline} EsriJSON geometry.
- */
-ol.format.EsriJSON.writeLineStringGeometry_ = function(geometry, opt_options) {
-  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.LineString} */ (geometry));
-  return /** @type {EsriJSONPolyline} */ ({
-    hasZ: hasZM.hasZ,
-    hasM: hasZM.hasM,
-    paths: [
-      /** @type {ol.geom.LineString} */ (geometry).getCoordinates()
-    ]
-  });
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {EsriJSONPolygon} EsriJSON geometry.
- */
-ol.format.EsriJSON.writePolygonGeometry_ = function(geometry, opt_options) {
-  // Esri geometries use the left-hand rule
-  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.Polygon} */ (geometry));
-  return /** @type {EsriJSONPolygon} */ ({
-    hasZ: hasZM.hasZ,
-    hasM: hasZM.hasM,
-    rings: /** @type {ol.geom.Polygon} */ (geometry).getCoordinates(false)
-  });
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {EsriJSONPolyline} EsriJSON geometry.
- */
-ol.format.EsriJSON.writeMultiLineStringGeometry_ = function(geometry, opt_options) {
-  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.MultiLineString} */ (geometry));
-  return /** @type {EsriJSONPolyline} */ ({
-    hasZ: hasZM.hasZ,
-    hasM: hasZM.hasM,
-    paths: /** @type {ol.geom.MultiLineString} */ (geometry).getCoordinates()
-  });
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {EsriJSONMultipoint} EsriJSON geometry.
- */
-ol.format.EsriJSON.writeMultiPointGeometry_ = function(geometry, opt_options) {
-  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.MultiPoint} */ (geometry));
-  return /** @type {EsriJSONMultipoint} */ ({
-    hasZ: hasZM.hasZ,
-    hasM: hasZM.hasM,
-    points: /** @type {ol.geom.MultiPoint} */ (geometry).getCoordinates()
-  });
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {EsriJSONPolygon} EsriJSON geometry.
- */
-ol.format.EsriJSON.writeMultiPolygonGeometry_ = function(geometry,
-    opt_options) {
-  var hasZM = ol.format.EsriJSON.getHasZM_(/** @type {ol.geom.MultiPolygon} */ (geometry));
-  var coordinates = /** @type {ol.geom.MultiPolygon} */ (geometry).getCoordinates(false);
-  var output = [];
-  for (var i = 0; i < coordinates.length; i++) {
-    for (var x = coordinates[i].length - 1; x >= 0; x--) {
-      output.push(coordinates[i][x]);
-    }
-  }
-  return /** @type {EsriJSONPolygon} */ ({
-    hasZ: hasZM.hasZ,
-    hasM: hasZM.hasM,
-    rings: output
-  });
-};
-
-
-/**
- * @const
- * @private
- * @type {Object.<ol.geom.GeometryType, function(EsriJSONGeometry): ol.geom.Geometry>}
- */
-ol.format.EsriJSON.GEOMETRY_READERS_ = {};
-ol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.POINT] =
-    ol.format.EsriJSON.readPointGeometry_;
-ol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.LINE_STRING] =
-    ol.format.EsriJSON.readLineStringGeometry_;
-ol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.POLYGON] =
-    ol.format.EsriJSON.readPolygonGeometry_;
-ol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.MULTI_POINT] =
-    ol.format.EsriJSON.readMultiPointGeometry_;
-ol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.MULTI_LINE_STRING] =
-    ol.format.EsriJSON.readMultiLineStringGeometry_;
-ol.format.EsriJSON.GEOMETRY_READERS_[ol.geom.GeometryType.MULTI_POLYGON] =
-    ol.format.EsriJSON.readMultiPolygonGeometry_;
-
-
-/**
- * @const
- * @private
- * @type {Object.<string, function(ol.geom.Geometry, olx.format.WriteOptions=): (EsriJSONGeometry)>}
- */
-ol.format.EsriJSON.GEOMETRY_WRITERS_ = {};
-ol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.POINT] =
-    ol.format.EsriJSON.writePointGeometry_;
-ol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.LINE_STRING] =
-    ol.format.EsriJSON.writeLineStringGeometry_;
-ol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.POLYGON] =
-    ol.format.EsriJSON.writePolygonGeometry_;
-ol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.MULTI_POINT] =
-    ol.format.EsriJSON.writeMultiPointGeometry_;
-ol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.MULTI_LINE_STRING] =
-    ol.format.EsriJSON.writeMultiLineStringGeometry_;
-ol.format.EsriJSON.GEOMETRY_WRITERS_[ol.geom.GeometryType.MULTI_POLYGON] =
-    ol.format.EsriJSON.writeMultiPolygonGeometry_;
-
-
-/**
- * Read a feature from a EsriJSON Feature source.  Only works for Feature,
- * use `readFeatures` to read FeatureCollection source.
- *
- * @function
- * @param {ArrayBuffer|Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- * @api
- */
-ol.format.EsriJSON.prototype.readFeature;
-
-
-/**
- * Read all features from a EsriJSON source.  Works with both Feature and
- * FeatureCollection sources.
- *
- * @function
- * @param {ArrayBuffer|Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api
- */
-ol.format.EsriJSON.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.EsriJSON.prototype.readFeatureFromObject = function(
-    object, opt_options) {
-  var esriJSONFeature = /** @type {EsriJSONFeature} */ (object);
-  ol.DEBUG && console.assert(esriJSONFeature.geometry ||
-      esriJSONFeature.attributes,
-      'geometry or attributes should be defined');
-  var geometry = ol.format.EsriJSON.readGeometry_(esriJSONFeature.geometry,
-      opt_options);
-  var feature = new ol.Feature();
-  if (this.geometryName_) {
-    feature.setGeometryName(this.geometryName_);
-  }
-  feature.setGeometry(geometry);
-  if (opt_options && opt_options.idField &&
-      esriJSONFeature.attributes[opt_options.idField]) {
-    ol.DEBUG && console.assert(
-        typeof esriJSONFeature.attributes[opt_options.idField] === 'number',
-        'objectIdFieldName value should be a number');
-    feature.setId(/** @type {number} */(
-        esriJSONFeature.attributes[opt_options.idField]));
-  }
-  if (esriJSONFeature.attributes) {
-    feature.setProperties(esriJSONFeature.attributes);
-  }
-  return feature;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.EsriJSON.prototype.readFeaturesFromObject = function(
-    object, opt_options) {
-  var esriJSONObject = /** @type {EsriJSONObject} */ (object);
-  var options = opt_options ? opt_options : {};
-  if (esriJSONObject.features) {
-    var esriJSONFeatureCollection = /** @type {EsriJSONFeatureCollection} */
-        (object);
-    /** @type {Array.<ol.Feature>} */
-    var features = [];
-    var esriJSONFeatures = esriJSONFeatureCollection.features;
-    var i, ii;
-    options.idField = object.objectIdFieldName;
-    for (i = 0, ii = esriJSONFeatures.length; i < ii; ++i) {
-      features.push(this.readFeatureFromObject(esriJSONFeatures[i],
-          options));
-    }
-    return features;
-  } else {
-    return [this.readFeatureFromObject(object, options)];
-  }
-};
-
-
-/**
- * Read a geometry from a EsriJSON source.
- *
- * @function
- * @param {ArrayBuffer|Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.geom.Geometry} Geometry.
- * @api
- */
-ol.format.EsriJSON.prototype.readGeometry;
-
-
-/**
- * @inheritDoc
- */
-ol.format.EsriJSON.prototype.readGeometryFromObject = function(
-    object, opt_options) {
-  return ol.format.EsriJSON.readGeometry_(
-      /** @type {EsriJSONGeometry} */ (object), opt_options);
-};
-
-
-/**
- * Read the projection from a EsriJSON source.
- *
- * @function
- * @param {ArrayBuffer|Document|Node|Object|string} source Source.
- * @return {ol.proj.Projection} Projection.
- * @api
- */
-ol.format.EsriJSON.prototype.readProjection;
-
-
-/**
- * @inheritDoc
- */
-ol.format.EsriJSON.prototype.readProjectionFromObject = function(object) {
-  var esriJSONObject = /** @type {EsriJSONObject} */ (object);
-  if (esriJSONObject.spatialReference && esriJSONObject.spatialReference.wkid) {
-    var crs = esriJSONObject.spatialReference.wkid;
-    return ol.proj.get('EPSG:' + crs);
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {EsriJSONGeometry} EsriJSON geometry.
- */
-ol.format.EsriJSON.writeGeometry_ = function(geometry, opt_options) {
-  var geometryWriter = ol.format.EsriJSON.GEOMETRY_WRITERS_[geometry.getType()];
-  return geometryWriter(/** @type {ol.geom.Geometry} */ (
-      ol.format.Feature.transformWithOptions(geometry, true, opt_options)),
-      opt_options);
-};
-
-
-/**
- * Encode a geometry as a EsriJSON string.
- *
- * @function
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} EsriJSON.
- * @api
- */
-ol.format.EsriJSON.prototype.writeGeometry;
-
-
-/**
- * Encode a geometry as a EsriJSON object.
- *
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {EsriJSONGeometry} Object.
- * @api
- */
-ol.format.EsriJSON.prototype.writeGeometryObject = function(geometry,
-    opt_options) {
-  return ol.format.EsriJSON.writeGeometry_(geometry,
-      this.adaptOptions(opt_options));
-};
-
-
-/**
- * Encode a feature as a EsriJSON Feature string.
- *
- * @function
- * @param {ol.Feature} feature Feature.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} EsriJSON.
- * @api
- */
-ol.format.EsriJSON.prototype.writeFeature;
-
-
-/**
- * Encode a feature as a esriJSON Feature object.
- *
- * @param {ol.Feature} feature Feature.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {Object} Object.
- * @api
- */
-ol.format.EsriJSON.prototype.writeFeatureObject = function(
-    feature, opt_options) {
-  opt_options = this.adaptOptions(opt_options);
-  var object = {};
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    object['geometry'] =
-        ol.format.EsriJSON.writeGeometry_(geometry, opt_options);
-  }
-  var properties = feature.getProperties();
-  delete properties[feature.getGeometryName()];
-  if (!ol.obj.isEmpty(properties)) {
-    object['attributes'] = properties;
-  } else {
-    object['attributes'] = {};
-  }
-  if (opt_options && opt_options.featureProjection) {
-    object['spatialReference'] = /** @type {EsriJSONCRS} */({
-      wkid: ol.proj.get(
-          opt_options.featureProjection).getCode().split(':').pop()
-    });
-  }
-  return object;
-};
-
-
-/**
- * Encode an array of features as EsriJSON.
- *
- * @function
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} EsriJSON.
- * @api
- */
-ol.format.EsriJSON.prototype.writeFeatures;
-
-
-/**
- * Encode an array of features as a EsriJSON object.
- *
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {Object} EsriJSON Object.
- * @api
- */
-ol.format.EsriJSON.prototype.writeFeaturesObject = function(features, opt_options) {
-  opt_options = this.adaptOptions(opt_options);
-  var objects = [];
-  var i, ii;
-  for (i = 0, ii = features.length; i < ii; ++i) {
-    objects.push(this.writeFeatureObject(features[i], opt_options));
-  }
-  return /** @type {EsriJSONFeatureCollection} */ ({
-    'features': objects
-  });
-};
-
-goog.provide('ol.format.filter.Filter');
-
-goog.require('ol');
-
-
-/**
- * @classdesc
- * Abstract class; normally only used for creating subclasses and not instantiated in apps.
- * Base class for WFS GetFeature filters.
- *
- * @constructor
- * @param {!string} tagName The XML tag name for this filter.
- * @struct
- * @api
- */
-ol.format.filter.Filter = function(tagName) {
-
-  /**
-   * @private
-   * @type {!string}
-   */
-  this.tagName_ = tagName;
-};
-
-/**
- * The XML tag name for a filter.
- * @returns {!string} Name.
- */
-ol.format.filter.Filter.prototype.getTagName = function() {
-  return this.tagName_;
-};
-
-goog.provide('ol.format.filter.Logical');
-
-goog.require('ol');
-goog.require('ol.format.filter.Filter');
-
-
-/**
- * @classdesc
- * Abstract class; normally only used for creating subclasses and not instantiated in apps.
- * Base class for WFS GetFeature logical filters.
- *
- * @constructor
- * @param {!string} tagName The XML tag name for this filter.
- * @extends {ol.format.filter.Filter}
- */
-ol.format.filter.Logical = function(tagName) {
-  ol.format.filter.Filter.call(this, tagName);
-};
-ol.inherits(ol.format.filter.Logical, ol.format.filter.Filter);
-
-goog.provide('ol.format.filter.LogicalBinary');
-
-goog.require('ol');
-goog.require('ol.format.filter.Logical');
-
-
-/**
- * @classdesc
- * Abstract class; normally only used for creating subclasses and not instantiated in apps.
- * Base class for WFS GetFeature binary logical filters.
- *
- * @constructor
- * @param {!string} tagName The XML tag name for this filter.
- * @param {!ol.format.filter.Filter} conditionA First filter condition.
- * @param {!ol.format.filter.Filter} conditionB Second filter condition.
- * @extends {ol.format.filter.Logical}
- */
-ol.format.filter.LogicalBinary = function(tagName, conditionA, conditionB) {
-
-  ol.format.filter.Logical.call(this, tagName);
-
-  /**
-   * @public
-   * @type {!ol.format.filter.Filter}
-   */
-  this.conditionA = conditionA;
-
-  /**
-   * @public
-   * @type {!ol.format.filter.Filter}
-   */
-  this.conditionB = conditionB;
-
-};
-ol.inherits(ol.format.filter.LogicalBinary, ol.format.filter.Logical);
-
-goog.provide('ol.format.filter.And');
-
-goog.require('ol');
-goog.require('ol.format.filter.LogicalBinary');
-
-/**
- * @classdesc
- * Represents a logical `<And>` operator between two filter conditions.
- *
- * @constructor
- * @param {!ol.format.filter.Filter} conditionA First filter condition.
- * @param {!ol.format.filter.Filter} conditionB Second filter condition.
- * @extends {ol.format.filter.LogicalBinary}
- * @api
- */
-ol.format.filter.And = function(conditionA, conditionB) {
-  ol.format.filter.LogicalBinary.call(this, 'And', conditionA, conditionB);
-};
-ol.inherits(ol.format.filter.And, ol.format.filter.LogicalBinary);
-
-goog.provide('ol.format.filter.Bbox');
-
-goog.require('ol');
-goog.require('ol.format.filter.Filter');
-
-
-/**
- * @classdesc
- * Represents a `<BBOX>` operator to test whether a geometry-valued property
- * intersects a fixed bounding box
- *
- * @constructor
- * @param {!string} geometryName Geometry name to use.
- * @param {!ol.Extent} extent Extent.
- * @param {string=} opt_srsName SRS name. No srsName attribute will be
- *    set on geometries when this is not provided.
- * @extends {ol.format.filter.Filter}
- * @api
- */
-ol.format.filter.Bbox = function(geometryName, extent, opt_srsName) {
-
-  ol.format.filter.Filter.call(this, 'BBOX');
-
-  /**
-   * @public
-   * @type {!string}
-   */
-  this.geometryName = geometryName;
-
-  /**
-   * @public
-   * @type {ol.Extent}
-   */
-  this.extent = extent;
-
-  /**
-   * @public
-   * @type {string|undefined}
-   */
-  this.srsName = opt_srsName;
-};
-ol.inherits(ol.format.filter.Bbox, ol.format.filter.Filter);
-
-goog.provide('ol.format.filter.Comparison');
-
-goog.require('ol');
-goog.require('ol.format.filter.Filter');
-
-
-/**
- * @classdesc
- * Abstract class; normally only used for creating subclasses and not instantiated in apps.
- * Base class for WFS GetFeature property comparison filters.
- *
- * @constructor
- * @param {!string} tagName The XML tag name for this filter.
- * @param {!string} propertyName Name of the context property to compare.
- * @extends {ol.format.filter.Filter}
- * @api
- */
-ol.format.filter.Comparison = function(tagName, propertyName) {
-
-  ol.format.filter.Filter.call(this, tagName);
-
-  /**
-   * @public
-   * @type {!string}
-   */
-  this.propertyName = propertyName;
-};
-ol.inherits(ol.format.filter.Comparison, ol.format.filter.Filter);
-
-goog.provide('ol.format.filter.ComparisonBinary');
-
-goog.require('ol');
-goog.require('ol.format.filter.Comparison');
-
-
-/**
- * @classdesc
- * Abstract class; normally only used for creating subclasses and not instantiated in apps.
- * Base class for WFS GetFeature property binary comparison filters.
- *
- * @constructor
- * @param {!string} tagName The XML tag name for this filter.
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!(string|number)} expression The value to compare.
- * @param {boolean=} opt_matchCase Case-sensitive?
- * @extends {ol.format.filter.Comparison}
- * @api
- */
-ol.format.filter.ComparisonBinary = function(
-    tagName, propertyName, expression, opt_matchCase) {
-
-  ol.format.filter.Comparison.call(this, tagName, propertyName);
-
-  /**
-   * @public
-   * @type {!(string|number)}
-   */
-  this.expression = expression;
-
-  /**
-   * @public
-   * @type {boolean|undefined}
-   */
-  this.matchCase = opt_matchCase;
-};
-ol.inherits(ol.format.filter.ComparisonBinary, ol.format.filter.Comparison);
-
-goog.provide('ol.format.filter.EqualTo');
-
-goog.require('ol');
-goog.require('ol.format.filter.ComparisonBinary');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsEqualTo>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!(string|number)} expression The value to compare.
- * @param {boolean=} opt_matchCase Case-sensitive?
- * @extends {ol.format.filter.ComparisonBinary}
- * @api
- */
-ol.format.filter.EqualTo = function(propertyName, expression, opt_matchCase) {
-  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsEqualTo', propertyName, expression, opt_matchCase);
-};
-ol.inherits(ol.format.filter.EqualTo, ol.format.filter.ComparisonBinary);
-
-goog.provide('ol.format.filter.GreaterThan');
-
-goog.require('ol');
-goog.require('ol.format.filter.ComparisonBinary');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsGreaterThan>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} expression The value to compare.
- * @extends {ol.format.filter.ComparisonBinary}
- * @api
- */
-ol.format.filter.GreaterThan = function(propertyName, expression) {
-  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsGreaterThan', propertyName, expression);
-};
-ol.inherits(ol.format.filter.GreaterThan, ol.format.filter.ComparisonBinary);
-
-goog.provide('ol.format.filter.GreaterThanOrEqualTo');
-
-goog.require('ol');
-goog.require('ol.format.filter.ComparisonBinary');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsGreaterThanOrEqualTo>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} expression The value to compare.
- * @extends {ol.format.filter.ComparisonBinary}
- * @api
- */
-ol.format.filter.GreaterThanOrEqualTo = function(propertyName, expression) {
-  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsGreaterThanOrEqualTo', propertyName, expression);
-};
-ol.inherits(ol.format.filter.GreaterThanOrEqualTo, ol.format.filter.ComparisonBinary);
-
-goog.provide('ol.format.filter.Spatial');
-
-goog.require('ol');
-goog.require('ol.format.filter.Filter');
-
-
-/**
- * @classdesc
- * Represents a spatial operator to test whether a geometry-valued property
- * relates to a given geometry.
- *
- * @constructor
- * @param {!string} tagName The XML tag name for this filter.
- * @param {!string} geometryName Geometry name to use.
- * @param {!ol.geom.Geometry} geometry Geometry.
- * @param {string=} opt_srsName SRS name. No srsName attribute will be
- *    set on geometries when this is not provided.
- * @extends {ol.format.filter.Filter}
- * @api
- */
-ol.format.filter.Spatial = function(tagName, geometryName, geometry, opt_srsName) {
-
-  ol.format.filter.Filter.call(this, tagName);
-
-  /**
-   * @public
-   * @type {!string}
-   */
-  this.geometryName = geometryName || 'the_geom';
-
-  /**
-   * @public
-   * @type {ol.geom.Geometry}
-   */
-  this.geometry = geometry;
-
-  /**
-   * @public
-   * @type {string|undefined}
-   */
-  this.srsName = opt_srsName;
-};
-ol.inherits(ol.format.filter.Spatial, ol.format.filter.Filter);
-
-goog.provide('ol.format.filter.Intersects');
-
-goog.require('ol');
-goog.require('ol.format.filter.Spatial');
-
-
-/**
- * @classdesc
- * Represents a `<Intersects>` operator to test whether a geometry-valued property
- * intersects a given geometry.
- *
- * @constructor
- * @param {!string} geometryName Geometry name to use.
- * @param {!ol.geom.Geometry} geometry Geometry.
- * @param {string=} opt_srsName SRS name. No srsName attribute will be
- *    set on geometries when this is not provided.
- * @extends {ol.format.filter.Spatial}
- * @api
- */
-ol.format.filter.Intersects = function(geometryName, geometry, opt_srsName) {
-
-  ol.format.filter.Spatial.call(this, 'Intersects', geometryName, geometry, opt_srsName);
-
-};
-ol.inherits(ol.format.filter.Intersects, ol.format.filter.Spatial);
-
-goog.provide('ol.format.filter.IsBetween');
-
-goog.require('ol');
-goog.require('ol.format.filter.Comparison');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsBetween>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} lowerBoundary The lower bound of the range.
- * @param {!number} upperBoundary The upper bound of the range.
- * @extends {ol.format.filter.Comparison}
- * @api
- */
-ol.format.filter.IsBetween = function(propertyName, lowerBoundary, upperBoundary) {
-  ol.format.filter.Comparison.call(this, 'PropertyIsBetween', propertyName);
-
-  /**
-   * @public
-   * @type {!number}
-   */
-  this.lowerBoundary = lowerBoundary;
-
-  /**
-   * @public
-   * @type {!number}
-   */
-  this.upperBoundary = upperBoundary;
-};
-ol.inherits(ol.format.filter.IsBetween, ol.format.filter.Comparison);
-
-goog.provide('ol.format.filter.IsLike');
-
-goog.require('ol');
-goog.require('ol.format.filter.Comparison');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsLike>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!string} pattern Text pattern.
- * @param {string=} opt_wildCard Pattern character which matches any sequence of
- *    zero or more string characters. Default is '*'.
- * @param {string=} opt_singleChar pattern character which matches any single
- *    string character. Default is '.'.
- * @param {string=} opt_escapeChar Escape character which can be used to escape
- *    the pattern characters. Default is '!'.
- * @param {boolean=} opt_matchCase Case-sensitive?
- * @extends {ol.format.filter.Comparison}
- * @api
- */
-ol.format.filter.IsLike = function(propertyName, pattern,
-    opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase) {
-  ol.format.filter.Comparison.call(this, 'PropertyIsLike', propertyName);
-
-  /**
-   * @public
-   * @type {!string}
-   */
-  this.pattern = pattern;
-
-  /**
-   * @public
-   * @type {!string}
-   */
-  this.wildCard = (opt_wildCard !== undefined) ? opt_wildCard : '*';
-
-  /**
-   * @public
-   * @type {!string}
-   */
-  this.singleChar = (opt_singleChar !== undefined) ? opt_singleChar : '.';
-
-  /**
-   * @public
-   * @type {!string}
-   */
-  this.escapeChar = (opt_escapeChar !== undefined) ? opt_escapeChar : '!';
-
-  /**
-   * @public
-   * @type {boolean|undefined}
-   */
-  this.matchCase = opt_matchCase;
-};
-ol.inherits(ol.format.filter.IsLike, ol.format.filter.Comparison);
-
-goog.provide('ol.format.filter.IsNull');
-
-goog.require('ol');
-goog.require('ol.format.filter.Comparison');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsNull>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @extends {ol.format.filter.Comparison}
- * @api
- */
-ol.format.filter.IsNull = function(propertyName) {
-  ol.format.filter.Comparison.call(this, 'PropertyIsNull', propertyName);
-};
-ol.inherits(ol.format.filter.IsNull, ol.format.filter.Comparison);
-
-goog.provide('ol.format.filter.LessThan');
-
-goog.require('ol');
-goog.require('ol.format.filter.ComparisonBinary');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsLessThan>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} expression The value to compare.
- * @extends {ol.format.filter.ComparisonBinary}
- * @api
- */
-ol.format.filter.LessThan = function(propertyName, expression) {
-  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsLessThan', propertyName, expression);
-};
-ol.inherits(ol.format.filter.LessThan, ol.format.filter.ComparisonBinary);
-
-goog.provide('ol.format.filter.LessThanOrEqualTo');
-
-goog.require('ol');
-goog.require('ol.format.filter.ComparisonBinary');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsLessThanOrEqualTo>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} expression The value to compare.
- * @extends {ol.format.filter.ComparisonBinary}
- * @api
- */
-ol.format.filter.LessThanOrEqualTo = function(propertyName, expression) {
-  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsLessThanOrEqualTo', propertyName, expression);
-};
-ol.inherits(ol.format.filter.LessThanOrEqualTo, ol.format.filter.ComparisonBinary);
-
-goog.provide('ol.format.filter.Not');
-
-goog.require('ol');
-goog.require('ol.format.filter.Logical');
-
-
-/**
- * @classdesc
- * Represents a logical `<Not>` operator for a filter condition.
- *
- * @constructor
- * @param {!ol.format.filter.Filter} condition Filter condition.
- * @extends {ol.format.filter.Logical}
- * @api
- */
-ol.format.filter.Not = function(condition) {
-
-  ol.format.filter.Logical.call(this, 'Not');
-
-  /**
-   * @public
-   * @type {!ol.format.filter.Filter}
-   */
-  this.condition = condition;
-};
-ol.inherits(ol.format.filter.Not, ol.format.filter.Logical);
-
-goog.provide('ol.format.filter.NotEqualTo');
-
-goog.require('ol');
-goog.require('ol.format.filter.ComparisonBinary');
-
-
-/**
- * @classdesc
- * Represents a `<PropertyIsNotEqualTo>` comparison operator.
- *
- * @constructor
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!(string|number)} expression The value to compare.
- * @param {boolean=} opt_matchCase Case-sensitive?
- * @extends {ol.format.filter.ComparisonBinary}
- * @api
- */
-ol.format.filter.NotEqualTo = function(propertyName, expression, opt_matchCase) {
-  ol.format.filter.ComparisonBinary.call(this, 'PropertyIsNotEqualTo', propertyName, expression, opt_matchCase);
-};
-ol.inherits(ol.format.filter.NotEqualTo, ol.format.filter.ComparisonBinary);
-
-goog.provide('ol.format.filter.Or');
-
-goog.require('ol');
-goog.require('ol.format.filter.LogicalBinary');
-
-
-/**
- * @classdesc
- * Represents a logical `<Or>` operator between two filter conditions.
- *
- * @constructor
- * @param {!ol.format.filter.Filter} conditionA First filter condition.
- * @param {!ol.format.filter.Filter} conditionB Second filter condition.
- * @extends {ol.format.filter.LogicalBinary}
- * @api
- */
-ol.format.filter.Or = function(conditionA, conditionB) {
-  ol.format.filter.LogicalBinary.call(this, 'Or', conditionA, conditionB);
-};
-ol.inherits(ol.format.filter.Or, ol.format.filter.LogicalBinary);
-
-goog.provide('ol.format.filter.Within');
-
-goog.require('ol');
-goog.require('ol.format.filter.Spatial');
-
-
-/**
- * @classdesc
- * Represents a `<Within>` operator to test whether a geometry-valued property
- * is within a given geometry.
- *
- * @constructor
- * @param {!string} geometryName Geometry name to use.
- * @param {!ol.geom.Geometry} geometry Geometry.
- * @param {string=} opt_srsName SRS name. No srsName attribute will be
- *    set on geometries when this is not provided.
- * @extends {ol.format.filter.Spatial}
- * @api
- */
-ol.format.filter.Within = function(geometryName, geometry, opt_srsName) {
-
-  ol.format.filter.Spatial.call(this, 'Within', geometryName, geometry, opt_srsName);
-
-};
-ol.inherits(ol.format.filter.Within, ol.format.filter.Spatial);
-
-goog.provide('ol.format.filter');
-
-goog.require('ol');
-goog.require('ol.format.filter.And');
-goog.require('ol.format.filter.Bbox');
-goog.require('ol.format.filter.EqualTo');
-goog.require('ol.format.filter.GreaterThan');
-goog.require('ol.format.filter.GreaterThanOrEqualTo');
-goog.require('ol.format.filter.Intersects');
-goog.require('ol.format.filter.IsBetween');
-goog.require('ol.format.filter.IsLike');
-goog.require('ol.format.filter.IsNull');
-goog.require('ol.format.filter.LessThan');
-goog.require('ol.format.filter.LessThanOrEqualTo');
-goog.require('ol.format.filter.Not');
-goog.require('ol.format.filter.NotEqualTo');
-goog.require('ol.format.filter.Or');
-goog.require('ol.format.filter.Within');
-
-
-/**
- * Create a logical `<And>` operator between two filter conditions.
- *
- * @param {!ol.format.filter.Filter} conditionA First filter condition.
- * @param {!ol.format.filter.Filter} conditionB Second filter condition.
- * @returns {!ol.format.filter.And} `<And>` operator.
- * @api
- */
-ol.format.filter.and = function(conditionA, conditionB) {
-  return new ol.format.filter.And(conditionA, conditionB);
-};
-
-
-/**
- * Create a logical `<Or>` operator between two filter conditions.
- *
- * @param {!ol.format.filter.Filter} conditionA First filter condition.
- * @param {!ol.format.filter.Filter} conditionB Second filter condition.
- * @returns {!ol.format.filter.Or} `<Or>` operator.
- * @api
- */
-ol.format.filter.or = function(conditionA, conditionB) {
-  return new ol.format.filter.Or(conditionA, conditionB);
-};
-
-
-/**
- * Represents a logical `<Not>` operator for a filter condition.
- *
- * @param {!ol.format.filter.Filter} condition Filter condition.
- * @returns {!ol.format.filter.Not} `<Not>` operator.
- * @api
- */
-ol.format.filter.not = function(condition) {
-  return new ol.format.filter.Not(condition);
-};
-
-
-/**
- * Create a `<BBOX>` operator to test whether a geometry-valued property
- * intersects a fixed bounding box
- *
- * @param {!string} geometryName Geometry name to use.
- * @param {!ol.Extent} extent Extent.
- * @param {string=} opt_srsName SRS name. No srsName attribute will be
- *    set on geometries when this is not provided.
- * @returns {!ol.format.filter.Bbox} `<BBOX>` operator.
- * @api
- */
-ol.format.filter.bbox = function(geometryName, extent, opt_srsName) {
-  return new ol.format.filter.Bbox(geometryName, extent, opt_srsName);
-};
-
-/**
- * Create a `<Intersects>` operator to test whether a geometry-valued property
- * intersects a given geometry.
- *
- * @param {!string} geometryName Geometry name to use.
- * @param {!ol.geom.Geometry} geometry Geometry.
- * @param {string=} opt_srsName SRS name. No srsName attribute will be
- *    set on geometries when this is not provided.
- * @returns {!ol.format.filter.Intersects} `<Intersects>` operator.
- * @api
- */
-ol.format.filter.intersects = function(geometryName, geometry, opt_srsName) {
-  return new ol.format.filter.Intersects(geometryName, geometry, opt_srsName);
-};
-
-/**
- * Create a `<Within>` operator to test whether a geometry-valued property
- * is within a given geometry.
- *
- * @param {!string} geometryName Geometry name to use.
- * @param {!ol.geom.Geometry} geometry Geometry.
- * @param {string=} opt_srsName SRS name. No srsName attribute will be
- *    set on geometries when this is not provided.
- * @returns {!ol.format.filter.Within} `<Within>` operator.
- * @api
- */
-ol.format.filter.within = function(geometryName, geometry, opt_srsName) {
-  return new ol.format.filter.Within(geometryName, geometry, opt_srsName);
-};
-
-
-/**
- * Creates a `<PropertyIsEqualTo>` comparison operator.
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!(string|number)} expression The value to compare.
- * @param {boolean=} opt_matchCase Case-sensitive?
- * @returns {!ol.format.filter.EqualTo} `<PropertyIsEqualTo>` operator.
- * @api
- */
-ol.format.filter.equalTo = function(propertyName, expression, opt_matchCase) {
-  return new ol.format.filter.EqualTo(propertyName, expression, opt_matchCase);
-};
-
-
-/**
- * Creates a `<PropertyIsNotEqualTo>` comparison operator.
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!(string|number)} expression The value to compare.
- * @param {boolean=} opt_matchCase Case-sensitive?
- * @returns {!ol.format.filter.NotEqualTo} `<PropertyIsNotEqualTo>` operator.
- * @api
- */
-ol.format.filter.notEqualTo = function(propertyName, expression, opt_matchCase) {
-  return new ol.format.filter.NotEqualTo(propertyName, expression, opt_matchCase);
-};
-
-
-/**
- * Creates a `<PropertyIsLessThan>` comparison operator.
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} expression The value to compare.
- * @returns {!ol.format.filter.LessThan} `<PropertyIsLessThan>` operator.
- * @api
- */
-ol.format.filter.lessThan = function(propertyName, expression) {
-  return new ol.format.filter.LessThan(propertyName, expression);
-};
-
-
-/**
- * Creates a `<PropertyIsLessThanOrEqualTo>` comparison operator.
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} expression The value to compare.
- * @returns {!ol.format.filter.LessThanOrEqualTo} `<PropertyIsLessThanOrEqualTo>` operator.
- * @api
- */
-ol.format.filter.lessThanOrEqualTo = function(propertyName, expression) {
-  return new ol.format.filter.LessThanOrEqualTo(propertyName, expression);
-};
-
-
-/**
- * Creates a `<PropertyIsGreaterThan>` comparison operator.
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} expression The value to compare.
- * @returns {!ol.format.filter.GreaterThan} `<PropertyIsGreaterThan>` operator.
- * @api
- */
-ol.format.filter.greaterThan = function(propertyName, expression) {
-  return new ol.format.filter.GreaterThan(propertyName, expression);
-};
-
-
-/**
- * Creates a `<PropertyIsGreaterThanOrEqualTo>` comparison operator.
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} expression The value to compare.
- * @returns {!ol.format.filter.GreaterThanOrEqualTo} `<PropertyIsGreaterThanOrEqualTo>` operator.
- * @api
- */
-ol.format.filter.greaterThanOrEqualTo = function(propertyName, expression) {
-  return new ol.format.filter.GreaterThanOrEqualTo(propertyName, expression);
-};
-
-
-/**
- * Creates a `<PropertyIsNull>` comparison operator to test whether a property value
- * is null.
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @returns {!ol.format.filter.IsNull} `<PropertyIsNull>` operator.
- * @api
- */
-ol.format.filter.isNull = function(propertyName) {
-  return new ol.format.filter.IsNull(propertyName);
-};
-
-
-/**
- * Creates a `<PropertyIsBetween>` comparison operator to test whether an expression
- * value lies within a range given by a lower and upper bound (inclusive).
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!number} lowerBoundary The lower bound of the range.
- * @param {!number} upperBoundary The upper bound of the range.
- * @returns {!ol.format.filter.IsBetween} `<PropertyIsBetween>` operator.
- * @api
- */
-ol.format.filter.between = function(propertyName, lowerBoundary, upperBoundary) {
-  return new ol.format.filter.IsBetween(propertyName, lowerBoundary, upperBoundary);
-};
-
-
-/**
- * Represents a `<PropertyIsLike>` comparison operator that matches a string property
- * value against a text pattern.
- *
- * @param {!string} propertyName Name of the context property to compare.
- * @param {!string} pattern Text pattern.
- * @param {string=} opt_wildCard Pattern character which matches any sequence of
- *    zero or more string characters. Default is '*'.
- * @param {string=} opt_singleChar pattern character which matches any single
- *    string character. Default is '.'.
- * @param {string=} opt_escapeChar Escape character which can be used to escape
- *    the pattern characters. Default is '!'.
- * @param {boolean=} opt_matchCase Case-sensitive?
- * @returns {!ol.format.filter.IsLike} `<PropertyIsLike>` operator.
- * @api
- */
-ol.format.filter.like = function(propertyName, pattern,
-    opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase) {
-  return new ol.format.filter.IsLike(propertyName, pattern,
-    opt_wildCard, opt_singleChar, opt_escapeChar, opt_matchCase);
-};
-
-goog.provide('ol.geom.GeometryCollection');
-
-goog.require('ol');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.geom.Geometry');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.obj');
-
-
-/**
- * @classdesc
- * An array of {@link ol.geom.Geometry} objects.
- *
- * @constructor
- * @extends {ol.geom.Geometry}
- * @param {Array.<ol.geom.Geometry>=} opt_geometries Geometries.
- * @api stable
- */
-ol.geom.GeometryCollection = function(opt_geometries) {
-
-  ol.geom.Geometry.call(this);
-
-  /**
-   * @private
-   * @type {Array.<ol.geom.Geometry>}
-   */
-  this.geometries_ = opt_geometries ? opt_geometries : null;
-
-  this.listenGeometriesChange_();
-};
-ol.inherits(ol.geom.GeometryCollection, ol.geom.Geometry);
-
-
-/**
- * @param {Array.<ol.geom.Geometry>} geometries Geometries.
- * @private
- * @return {Array.<ol.geom.Geometry>} Cloned geometries.
- */
-ol.geom.GeometryCollection.cloneGeometries_ = function(geometries) {
-  var clonedGeometries = [];
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    clonedGeometries.push(geometries[i].clone());
-  }
-  return clonedGeometries;
-};
-
-
-/**
- * @private
- */
-ol.geom.GeometryCollection.prototype.unlistenGeometriesChange_ = function() {
-  var i, ii;
-  if (!this.geometries_) {
-    return;
-  }
-  for (i = 0, ii = this.geometries_.length; i < ii; ++i) {
-    ol.events.unlisten(
-        this.geometries_[i], ol.events.EventType.CHANGE,
-        this.changed, this);
-  }
-};
-
-
-/**
- * @private
- */
-ol.geom.GeometryCollection.prototype.listenGeometriesChange_ = function() {
-  var i, ii;
-  if (!this.geometries_) {
-    return;
-  }
-  for (i = 0, ii = this.geometries_.length; i < ii; ++i) {
-    ol.events.listen(
-        this.geometries_[i], ol.events.EventType.CHANGE,
-        this.changed, this);
-  }
-};
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.GeometryCollection} Clone.
- * @api stable
- */
-ol.geom.GeometryCollection.prototype.clone = function() {
-  var geometryCollection = new ol.geom.GeometryCollection(null);
-  geometryCollection.setGeometries(this.geometries_);
-  return geometryCollection;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.GeometryCollection.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  if (minSquaredDistance <
-      ol.extent.closestSquaredDistanceXY(this.getExtent(), x, y)) {
-    return minSquaredDistance;
-  }
-  var geometries = this.geometries_;
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    minSquaredDistance = geometries[i].closestPointXY(
-        x, y, closestPoint, minSquaredDistance);
-  }
-  return minSquaredDistance;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.GeometryCollection.prototype.containsXY = function(x, y) {
-  var geometries = this.geometries_;
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    if (geometries[i].containsXY(x, y)) {
-      return true;
-    }
-  }
-  return false;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.GeometryCollection.prototype.computeExtent = function(extent) {
-  ol.extent.createOrUpdateEmpty(extent);
-  var geometries = this.geometries_;
-  for (var i = 0, ii = geometries.length; i < ii; ++i) {
-    ol.extent.extend(extent, geometries[i].getExtent());
-  }
-  return extent;
-};
-
-
-/**
- * Return the geometries that make up this geometry collection.
- * @return {Array.<ol.geom.Geometry>} Geometries.
- * @api stable
- */
-ol.geom.GeometryCollection.prototype.getGeometries = function() {
-  return ol.geom.GeometryCollection.cloneGeometries_(this.geometries_);
-};
-
-
-/**
- * @return {Array.<ol.geom.Geometry>} Geometries.
- */
-ol.geom.GeometryCollection.prototype.getGeometriesArray = function() {
-  return this.geometries_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.GeometryCollection.prototype.getSimplifiedGeometry = function(squaredTolerance) {
-  if (this.simplifiedGeometryRevision != this.getRevision()) {
-    ol.obj.clear(this.simplifiedGeometryCache);
-    this.simplifiedGeometryMaxMinSquaredTolerance = 0;
-    this.simplifiedGeometryRevision = this.getRevision();
-  }
-  if (squaredTolerance < 0 ||
-      (this.simplifiedGeometryMaxMinSquaredTolerance !== 0 &&
-       squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance)) {
-    return this;
-  }
-  var key = squaredTolerance.toString();
-  if (this.simplifiedGeometryCache.hasOwnProperty(key)) {
-    return this.simplifiedGeometryCache[key];
-  } else {
-    var simplifiedGeometries = [];
-    var geometries = this.geometries_;
-    var simplified = false;
-    var i, ii;
-    for (i = 0, ii = geometries.length; i < ii; ++i) {
-      var geometry = geometries[i];
-      var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance);
-      simplifiedGeometries.push(simplifiedGeometry);
-      if (simplifiedGeometry !== geometry) {
-        simplified = true;
-      }
-    }
-    if (simplified) {
-      var simplifiedGeometryCollection = new ol.geom.GeometryCollection(null);
-      simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries);
-      this.simplifiedGeometryCache[key] = simplifiedGeometryCollection;
-      return simplifiedGeometryCollection;
-    } else {
-      this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;
-      return this;
-    }
-  }
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.GeometryCollection.prototype.getType = function() {
-  return ol.geom.GeometryType.GEOMETRY_COLLECTION;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.GeometryCollection.prototype.intersectsExtent = function(extent) {
-  var geometries = this.geometries_;
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    if (geometries[i].intersectsExtent(extent)) {
-      return true;
-    }
-  }
-  return false;
-};
-
-
-/**
- * @return {boolean} Is empty.
- */
-ol.geom.GeometryCollection.prototype.isEmpty = function() {
-  return this.geometries_.length === 0;
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.geom.GeometryCollection.prototype.rotate = function(angle, anchor) {
-  var geometries = this.geometries_;
-  for (var i = 0, ii = geometries.length; i < ii; ++i) {
-    geometries[i].rotate(angle, anchor);
-  }
-  this.changed();
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.geom.GeometryCollection.prototype.scale = function(sx, opt_sy, opt_anchor) {
-  var anchor = opt_anchor;
-  if (!anchor) {
-    anchor = ol.extent.getCenter(this.getExtent());
-  }
-  var geometries = this.geometries_;
-  for (var i = 0, ii = geometries.length; i < ii; ++i) {
-    geometries[i].scale(sx, opt_sy, anchor);
-  }
-  this.changed();
-};
-
-
-/**
- * Set the geometries that make up this geometry collection.
- * @param {Array.<ol.geom.Geometry>} geometries Geometries.
- * @api stable
- */
-ol.geom.GeometryCollection.prototype.setGeometries = function(geometries) {
-  this.setGeometriesArray(
-      ol.geom.GeometryCollection.cloneGeometries_(geometries));
-};
-
-
-/**
- * @param {Array.<ol.geom.Geometry>} geometries Geometries.
- */
-ol.geom.GeometryCollection.prototype.setGeometriesArray = function(geometries) {
-  this.unlistenGeometriesChange_();
-  this.geometries_ = geometries;
-  this.listenGeometriesChange_();
-  this.changed();
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.GeometryCollection.prototype.applyTransform = function(transformFn) {
-  var geometries = this.geometries_;
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    geometries[i].applyTransform(transformFn);
-  }
-  this.changed();
-};
-
-
-/**
- * Translate the geometry.
- * @param {number} deltaX Delta X.
- * @param {number} deltaY Delta Y.
- * @api
- */
-ol.geom.GeometryCollection.prototype.translate = function(deltaX, deltaY) {
-  var geometries = this.geometries_;
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    geometries[i].translate(deltaX, deltaY);
-  }
-  this.changed();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.GeometryCollection.prototype.disposeInternal = function() {
-  this.unlistenGeometriesChange_();
-  ol.geom.Geometry.prototype.disposeInternal.call(this);
-};
-
-// TODO: serialize dataProjection as crs member when writing
-// see https://github.com/openlayers/ol3/issues/2078
-
-goog.provide('ol.format.GeoJSON');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.Feature');
-goog.require('ol.format.Feature');
-goog.require('ol.format.JSONFeature');
-goog.require('ol.geom.GeometryCollection');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.obj');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the GeoJSON format.
- *
- * @constructor
- * @extends {ol.format.JSONFeature}
- * @param {olx.format.GeoJSONOptions=} opt_options Options.
- * @api stable
- */
-ol.format.GeoJSON = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.format.JSONFeature.call(this);
-
-  /**
-   * @inheritDoc
-   */
-  this.defaultDataProjection = ol.proj.get(
-      options.defaultDataProjection ?
-          options.defaultDataProjection : 'EPSG:4326');
-
-
-  if (options.featureProjection) {
-    this.defaultFeatureProjection = ol.proj.get(options.featureProjection);
-  }
-
-  /**
-   * Name of the geometry attribute for features.
-   * @type {string|undefined}
-   * @private
-   */
-  this.geometryName_ = options.geometryName;
-
-};
-ol.inherits(ol.format.GeoJSON, ol.format.JSONFeature);
-
-
-/**
- * @const
- * @type {Array.<string>}
- * @private
- */
-ol.format.GeoJSON.EXTENSIONS_ = ['.geojson'];
-
-
-/**
- * @param {GeoJSONGeometry|GeoJSONGeometryCollection} object Object.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @private
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.GeoJSON.readGeometry_ = function(object, opt_options) {
-  if (!object) {
-    return null;
-  }
-  var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type];
-  return /** @type {ol.geom.Geometry} */ (
-      ol.format.Feature.transformWithOptions(
-          geometryReader(object), false, opt_options));
-};
-
-
-/**
- * @param {GeoJSONGeometryCollection} object Object.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @private
- * @return {ol.geom.GeometryCollection} Geometry collection.
- */
-ol.format.GeoJSON.readGeometryCollectionGeometry_ = function(
-    object, opt_options) {
-  ol.DEBUG && console.assert(object.type == 'GeometryCollection',
-      'object.type should be GeometryCollection');
-  var geometries = object.geometries.map(
-      /**
-       * @param {GeoJSONGeometry} geometry Geometry.
-       * @return {ol.geom.Geometry} geometry Geometry.
-       */
-      function(geometry) {
-        return ol.format.GeoJSON.readGeometry_(geometry, opt_options);
-      });
-  return new ol.geom.GeometryCollection(geometries);
-};
-
-
-/**
- * @param {GeoJSONGeometry} object Object.
- * @private
- * @return {ol.geom.Point} Point.
- */
-ol.format.GeoJSON.readPointGeometry_ = function(object) {
-  ol.DEBUG && console.assert(object.type == 'Point',
-      'object.type should be Point');
-  return new ol.geom.Point(object.coordinates);
-};
-
-
-/**
- * @param {GeoJSONGeometry} object Object.
- * @private
- * @return {ol.geom.LineString} LineString.
- */
-ol.format.GeoJSON.readLineStringGeometry_ = function(object) {
-  ol.DEBUG && console.assert(object.type == 'LineString',
-      'object.type should be LineString');
-  return new ol.geom.LineString(object.coordinates);
-};
-
-
-/**
- * @param {GeoJSONGeometry} object Object.
- * @private
- * @return {ol.geom.MultiLineString} MultiLineString.
- */
-ol.format.GeoJSON.readMultiLineStringGeometry_ = function(object) {
-  ol.DEBUG && console.assert(object.type == 'MultiLineString',
-      'object.type should be MultiLineString');
-  return new ol.geom.MultiLineString(object.coordinates);
-};
-
-
-/**
- * @param {GeoJSONGeometry} object Object.
- * @private
- * @return {ol.geom.MultiPoint} MultiPoint.
- */
-ol.format.GeoJSON.readMultiPointGeometry_ = function(object) {
-  ol.DEBUG && console.assert(object.type == 'MultiPoint',
-      'object.type should be MultiPoint');
-  return new ol.geom.MultiPoint(object.coordinates);
-};
-
-
-/**
- * @param {GeoJSONGeometry} object Object.
- * @private
- * @return {ol.geom.MultiPolygon} MultiPolygon.
- */
-ol.format.GeoJSON.readMultiPolygonGeometry_ = function(object) {
-  ol.DEBUG && console.assert(object.type == 'MultiPolygon',
-      'object.type should be MultiPolygon');
-  return new ol.geom.MultiPolygon(object.coordinates);
-};
-
-
-/**
- * @param {GeoJSONGeometry} object Object.
- * @private
- * @return {ol.geom.Polygon} Polygon.
- */
-ol.format.GeoJSON.readPolygonGeometry_ = function(object) {
-  ol.DEBUG && console.assert(object.type == 'Polygon',
-      'object.type should be Polygon');
-  return new ol.geom.Polygon(object.coordinates);
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {GeoJSONGeometry|GeoJSONGeometryCollection} GeoJSON geometry.
- */
-ol.format.GeoJSON.writeGeometry_ = function(geometry, opt_options) {
-  var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()];
-  return geometryWriter(/** @type {ol.geom.Geometry} */ (
-      ol.format.Feature.transformWithOptions(geometry, true, opt_options)),
-      opt_options);
-};
-
-
-/**
- * @param {ol.geom.Geometry} geometry Geometry.
- * @private
- * @return {GeoJSONGeometryCollection} Empty GeoJSON geometry collection.
- */
-ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_ = function(geometry) {
-  return /** @type {GeoJSONGeometryCollection} */ ({
-    type: 'GeometryCollection',
-    geometries: []
-  });
-};
-
-
-/**
- * @param {ol.geom.GeometryCollection} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {GeoJSONGeometryCollection} GeoJSON geometry collection.
- */
-ol.format.GeoJSON.writeGeometryCollectionGeometry_ = function(
-    geometry, opt_options) {
-  var geometries = geometry.getGeometriesArray().map(function(geometry) {
-    var options = ol.obj.assign({}, opt_options);
-    delete options.featureProjection;
-    return ol.format.GeoJSON.writeGeometry_(geometry, options);
-  });
-  return /** @type {GeoJSONGeometryCollection} */ ({
-    type: 'GeometryCollection',
-    geometries: geometries
-  });
-};
-
-
-/**
- * @param {ol.geom.LineString} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {GeoJSONGeometry} GeoJSON geometry.
- */
-ol.format.GeoJSON.writeLineStringGeometry_ = function(geometry, opt_options) {
-  return /** @type {GeoJSONGeometry} */ ({
-    type: 'LineString',
-    coordinates: geometry.getCoordinates()
-  });
-};
-
-
-/**
- * @param {ol.geom.MultiLineString} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {GeoJSONGeometry} GeoJSON geometry.
- */
-ol.format.GeoJSON.writeMultiLineStringGeometry_ = function(geometry, opt_options) {
-  return /** @type {GeoJSONGeometry} */ ({
-    type: 'MultiLineString',
-    coordinates: geometry.getCoordinates()
-  });
-};
-
-
-/**
- * @param {ol.geom.MultiPoint} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {GeoJSONGeometry} GeoJSON geometry.
- */
-ol.format.GeoJSON.writeMultiPointGeometry_ = function(geometry, opt_options) {
-  return /** @type {GeoJSONGeometry} */ ({
-    type: 'MultiPoint',
-    coordinates: geometry.getCoordinates()
-  });
-};
-
-
-/**
- * @param {ol.geom.MultiPolygon} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {GeoJSONGeometry} GeoJSON geometry.
- */
-ol.format.GeoJSON.writeMultiPolygonGeometry_ = function(geometry, opt_options) {
-  var right;
-  if (opt_options) {
-    right = opt_options.rightHanded;
-  }
-  return /** @type {GeoJSONGeometry} */ ({
-    type: 'MultiPolygon',
-    coordinates: geometry.getCoordinates(right)
-  });
-};
-
-
-/**
- * @param {ol.geom.Point} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {GeoJSONGeometry} GeoJSON geometry.
- */
-ol.format.GeoJSON.writePointGeometry_ = function(geometry, opt_options) {
-  return /** @type {GeoJSONGeometry} */ ({
-    type: 'Point',
-    coordinates: geometry.getCoordinates()
-  });
-};
-
-
-/**
- * @param {ol.geom.Polygon} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @private
- * @return {GeoJSONGeometry} GeoJSON geometry.
- */
-ol.format.GeoJSON.writePolygonGeometry_ = function(geometry, opt_options) {
-  var right;
-  if (opt_options) {
-    right = opt_options.rightHanded;
-  }
-  return /** @type {GeoJSONGeometry} */ ({
-    type: 'Polygon',
-    coordinates: geometry.getCoordinates(right)
-  });
-};
-
-
-/**
- * @const
- * @private
- * @type {Object.<string, function(GeoJSONObject): ol.geom.Geometry>}
- */
-ol.format.GeoJSON.GEOMETRY_READERS_ = {
-  'Point': ol.format.GeoJSON.readPointGeometry_,
-  'LineString': ol.format.GeoJSON.readLineStringGeometry_,
-  'Polygon': ol.format.GeoJSON.readPolygonGeometry_,
-  'MultiPoint': ol.format.GeoJSON.readMultiPointGeometry_,
-  'MultiLineString': ol.format.GeoJSON.readMultiLineStringGeometry_,
-  'MultiPolygon': ol.format.GeoJSON.readMultiPolygonGeometry_,
-  'GeometryCollection': ol.format.GeoJSON.readGeometryCollectionGeometry_
-};
-
-
-/**
- * @const
- * @private
- * @type {Object.<string, function(ol.geom.Geometry, olx.format.WriteOptions=): (GeoJSONGeometry|GeoJSONGeometryCollection)>}
- */
-ol.format.GeoJSON.GEOMETRY_WRITERS_ = {
-  'Point': ol.format.GeoJSON.writePointGeometry_,
-  'LineString': ol.format.GeoJSON.writeLineStringGeometry_,
-  'Polygon': ol.format.GeoJSON.writePolygonGeometry_,
-  'MultiPoint': ol.format.GeoJSON.writeMultiPointGeometry_,
-  'MultiLineString': ol.format.GeoJSON.writeMultiLineStringGeometry_,
-  'MultiPolygon': ol.format.GeoJSON.writeMultiPolygonGeometry_,
-  'GeometryCollection': ol.format.GeoJSON.writeGeometryCollectionGeometry_,
-  'Circle': ol.format.GeoJSON.writeEmptyGeometryCollectionGeometry_
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.GeoJSON.prototype.getExtensions = function() {
-  return ol.format.GeoJSON.EXTENSIONS_;
-};
-
-
-/**
- * Read a feature from a GeoJSON Feature source.  Only works for Feature or
- * geometry types.  Use {@link ol.format.GeoJSON#readFeatures} to read
- * FeatureCollection source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- * @api stable
- */
-ol.format.GeoJSON.prototype.readFeature;
-
-
-/**
- * Read all features from a GeoJSON source.  Works for all GeoJSON types.
- * If the source includes only geometries, features will be created with those
- * geometries.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.GeoJSON.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.GeoJSON.prototype.readFeatureFromObject = function(
-    object, opt_options) {
-
-  ol.DEBUG && console.assert(object.type !== 'FeatureCollection', 'Expected a Feature or geometry');
-
-  /**
-   * @type {GeoJSONFeature}
-   */
-  var geoJSONFeature = null;
-  if (object.type === 'Feature') {
-    geoJSONFeature = /** @type {GeoJSONFeature} */ (object);
-  } else {
-    geoJSONFeature = /** @type {GeoJSONFeature} */ ({
-      type: 'Feature',
-      geometry: /** @type {GeoJSONGeometry|GeoJSONGeometryCollection} */ (object)
-    });
-  }
-
-  var geometry = ol.format.GeoJSON.readGeometry_(geoJSONFeature.geometry, opt_options);
-  var feature = new ol.Feature();
-  if (this.geometryName_) {
-    feature.setGeometryName(this.geometryName_);
-  }
-  feature.setGeometry(geometry);
-  if (geoJSONFeature.id !== undefined) {
-    feature.setId(geoJSONFeature.id);
-  }
-  if (geoJSONFeature.properties) {
-    feature.setProperties(geoJSONFeature.properties);
-  }
-  return feature;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.GeoJSON.prototype.readFeaturesFromObject = function(
-    object, opt_options) {
-  var geoJSONObject = /** @type {GeoJSONObject} */ (object);
-  /** @type {Array.<ol.Feature>} */
-  var features = null;
-  if (geoJSONObject.type === 'FeatureCollection') {
-    var geoJSONFeatureCollection = /** @type {GeoJSONFeatureCollection} */
-        (object);
-    features = [];
-    var geoJSONFeatures = geoJSONFeatureCollection.features;
-    var i, ii;
-    for (i = 0, ii = geoJSONFeatures.length; i < ii; ++i) {
-      features.push(this.readFeatureFromObject(geoJSONFeatures[i],
-          opt_options));
-    }
-  } else {
-    features = [this.readFeatureFromObject(object, opt_options)];
-  }
-  return features;
-};
-
-
-/**
- * Read a geometry from a GeoJSON source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.geom.Geometry} Geometry.
- * @api stable
- */
-ol.format.GeoJSON.prototype.readGeometry;
-
-
-/**
- * @inheritDoc
- */
-ol.format.GeoJSON.prototype.readGeometryFromObject = function(
-    object, opt_options) {
-  return ol.format.GeoJSON.readGeometry_(
-      /** @type {GeoJSONGeometry} */ (object), opt_options);
-};
-
-
-/**
- * Read the projection from a GeoJSON source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.proj.Projection} Projection.
- * @api stable
- */
-ol.format.GeoJSON.prototype.readProjection;
-
-
-/**
- * @inheritDoc
- */
-ol.format.GeoJSON.prototype.readProjectionFromObject = function(object) {
-  var geoJSONObject = /** @type {GeoJSONObject} */ (object);
-  var crs = geoJSONObject.crs;
-  var projection;
-  if (crs) {
-    if (crs.type == 'name') {
-      projection = ol.proj.get(crs.properties.name);
-    } else if (crs.type == 'EPSG') {
-      // 'EPSG' is not part of the GeoJSON specification, but is generated by
-      // GeoServer.
-      // TODO: remove this when http://jira.codehaus.org/browse/GEOS-5996
-      // is fixed and widely deployed.
-      projection = ol.proj.get('EPSG:' + crs.properties.code);
-    } else {
-      ol.asserts.assert(false, 36); // Unknown SRS type
-    }
-  } else {
-    projection = this.defaultDataProjection;
-  }
-  return /** @type {ol.proj.Projection} */ (projection);
-};
-
-
-/**
- * Encode a feature as a GeoJSON Feature string.
- *
- * @function
- * @param {ol.Feature} feature Feature.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} GeoJSON.
- * @api stable
- */
-ol.format.GeoJSON.prototype.writeFeature;
-
-
-/**
- * Encode a feature as a GeoJSON Feature object.
- *
- * @param {ol.Feature} feature Feature.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {GeoJSONFeature} Object.
- * @api stable
- */
-ol.format.GeoJSON.prototype.writeFeatureObject = function(feature, opt_options) {
-  opt_options = this.adaptOptions(opt_options);
-
-  var object = /** @type {GeoJSONFeature} */ ({
-    'type': 'Feature'
-  });
-  var id = feature.getId();
-  if (id !== undefined) {
-    object.id = id;
-  }
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    object.geometry =
-        ol.format.GeoJSON.writeGeometry_(geometry, opt_options);
-  } else {
-    object.geometry = null;
-  }
-  var properties = feature.getProperties();
-  delete properties[feature.getGeometryName()];
-  if (!ol.obj.isEmpty(properties)) {
-    object.properties = properties;
-  } else {
-    object.properties = null;
-  }
-  return object;
-};
-
-
-/**
- * Encode an array of features as GeoJSON.
- *
- * @function
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} GeoJSON.
- * @api stable
- */
-ol.format.GeoJSON.prototype.writeFeatures;
-
-
-/**
- * Encode an array of features as a GeoJSON object.
- *
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {GeoJSONFeatureCollection} GeoJSON Object.
- * @api stable
- */
-ol.format.GeoJSON.prototype.writeFeaturesObject = function(features, opt_options) {
-  opt_options = this.adaptOptions(opt_options);
-  var objects = [];
-  var i, ii;
-  for (i = 0, ii = features.length; i < ii; ++i) {
-    objects.push(this.writeFeatureObject(features[i], opt_options));
-  }
-  return /** @type {GeoJSONFeatureCollection} */ ({
-    type: 'FeatureCollection',
-    features: objects
-  });
-};
-
-
-/**
- * Encode a geometry as a GeoJSON string.
- *
- * @function
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} GeoJSON.
- * @api stable
- */
-ol.format.GeoJSON.prototype.writeGeometry;
-
-
-/**
- * Encode a geometry as a GeoJSON object.
- *
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {GeoJSONGeometry|GeoJSONGeometryCollection} Object.
- * @api stable
- */
-ol.format.GeoJSON.prototype.writeGeometryObject = function(geometry,
-    opt_options) {
-  return ol.format.GeoJSON.writeGeometry_(geometry,
-      this.adaptOptions(opt_options));
-};
-
-goog.provide('ol.format.XMLFeature');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.format.Feature');
-goog.require('ol.format.FormatType');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Base class for XML feature formats.
- *
- * @constructor
- * @extends {ol.format.Feature}
- */
-ol.format.XMLFeature = function() {
-
-  /**
-   * @type {XMLSerializer}
-   * @private
-   */
-  this.xmlSerializer_ = new XMLSerializer();
-
-  ol.format.Feature.call(this);
-};
-ol.inherits(ol.format.XMLFeature, ol.format.Feature);
-
-
-/**
- * @inheritDoc
- */
-ol.format.XMLFeature.prototype.getType = function() {
-  return ol.format.FormatType.XML;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.XMLFeature.prototype.readFeature = function(source, opt_options) {
-  if (ol.xml.isDocument(source)) {
-    return this.readFeatureFromDocument(
-        /** @type {Document} */ (source), opt_options);
-  } else if (ol.xml.isNode(source)) {
-    return this.readFeatureFromNode(/** @type {Node} */ (source), opt_options);
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    return this.readFeatureFromDocument(doc, opt_options);
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @param {Document} doc Document.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @return {ol.Feature} Feature.
- */
-ol.format.XMLFeature.prototype.readFeatureFromDocument = function(
-    doc, opt_options) {
-  var features = this.readFeaturesFromDocument(doc, opt_options);
-  if (features.length > 0) {
-    return features[0];
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @abstract
- * @param {Node} node Node.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @return {ol.Feature} Feature.
- */
-ol.format.XMLFeature.prototype.readFeatureFromNode = function(node, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.XMLFeature.prototype.readFeatures = function(source, opt_options) {
-  if (ol.xml.isDocument(source)) {
-    return this.readFeaturesFromDocument(
-        /** @type {Document} */ (source), opt_options);
-  } else if (ol.xml.isNode(source)) {
-    return this.readFeaturesFromNode(/** @type {Node} */ (source), opt_options);
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    return this.readFeaturesFromDocument(doc, opt_options);
-  } else {
-    return [];
-  }
-};
-
-
-/**
- * @param {Document} doc Document.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @protected
- * @return {Array.<ol.Feature>} Features.
- */
-ol.format.XMLFeature.prototype.readFeaturesFromDocument = function(
-    doc, opt_options) {
-  /** @type {Array.<ol.Feature>} */
-  var features = [];
-  var n;
-  for (n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      ol.array.extend(features, this.readFeaturesFromNode(n, opt_options));
-    }
-  }
-  return features;
-};
-
-
-/**
- * @abstract
- * @param {Node} node Node.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @protected
- * @return {Array.<ol.Feature>} Features.
- */
-ol.format.XMLFeature.prototype.readFeaturesFromNode = function(node, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.XMLFeature.prototype.readGeometry = function(source, opt_options) {
-  if (ol.xml.isDocument(source)) {
-    return this.readGeometryFromDocument(
-        /** @type {Document} */ (source), opt_options);
-  } else if (ol.xml.isNode(source)) {
-    return this.readGeometryFromNode(/** @type {Node} */ (source), opt_options);
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    return this.readGeometryFromDocument(doc, opt_options);
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @abstract
- * @param {Document} doc Document.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @protected
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.XMLFeature.prototype.readGeometryFromDocument = function(doc, opt_options) {};
-
-
-/**
- * @abstract
- * @param {Node} node Node.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @protected
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.XMLFeature.prototype.readGeometryFromNode = function(node, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.XMLFeature.prototype.readProjection = function(source) {
-  if (ol.xml.isDocument(source)) {
-    return this.readProjectionFromDocument(/** @type {Document} */ (source));
-  } else if (ol.xml.isNode(source)) {
-    return this.readProjectionFromNode(/** @type {Node} */ (source));
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    return this.readProjectionFromDocument(doc);
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @param {Document} doc Document.
- * @protected
- * @return {ol.proj.Projection} Projection.
- */
-ol.format.XMLFeature.prototype.readProjectionFromDocument = function(doc) {
-  return this.defaultDataProjection;
-};
-
-
-/**
- * @param {Node} node Node.
- * @protected
- * @return {ol.proj.Projection} Projection.
- */
-ol.format.XMLFeature.prototype.readProjectionFromNode = function(node) {
-  return this.defaultDataProjection;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.XMLFeature.prototype.writeFeature = function(feature, opt_options) {
-  var node = this.writeFeatureNode(feature, opt_options);
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  return this.xmlSerializer_.serializeToString(node);
-};
-
-
-/**
- * @abstract
- * @param {ol.Feature} feature Feature.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @protected
- * @return {Node} Node.
- */
-ol.format.XMLFeature.prototype.writeFeatureNode = function(feature, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.XMLFeature.prototype.writeFeatures = function(features, opt_options) {
-  var node = this.writeFeaturesNode(features, opt_options);
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  return this.xmlSerializer_.serializeToString(node);
-};
-
-
-/**
- * @abstract
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {Node} Node.
- */
-ol.format.XMLFeature.prototype.writeFeaturesNode = function(features, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.XMLFeature.prototype.writeGeometry = function(geometry, opt_options) {
-  var node = this.writeGeometryNode(geometry, opt_options);
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  return this.xmlSerializer_.serializeToString(node);
-};
-
-
-/**
- * @abstract
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {Node} Node.
- */
-ol.format.XMLFeature.prototype.writeGeometryNode = function(geometry, opt_options) {};
-
-// FIXME Envelopes should not be treated as geometries! readEnvelope_ is part
-// of GEOMETRY_PARSERS_ and methods using GEOMETRY_PARSERS_ do not expect
-// envelopes/extents, only geometries!
-goog.provide('ol.format.GMLBase');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.Feature');
-goog.require('ol.format.Feature');
-goog.require('ol.format.XMLFeature');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.LinearRing');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.obj');
-goog.require('ol.proj');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Feature base format for reading and writing data in the GML format.
- * This class cannot be instantiated, it contains only base content that
- * is shared with versioned format classes ol.format.GML2 and
- * ol.format.GML3.
- *
- * @constructor
- * @param {olx.format.GMLOptions=} opt_options
- *     Optional configuration object.
- * @extends {ol.format.XMLFeature}
- */
-ol.format.GMLBase = function(opt_options) {
-  var options = /** @type {olx.format.GMLOptions} */
-      (opt_options ? opt_options : {});
-
-  /**
-   * @protected
-   * @type {Array.<string>|string|undefined}
-   */
-  this.featureType = options.featureType;
-
-  /**
-   * @protected
-   * @type {Object.<string, string>|string|undefined}
-   */
-  this.featureNS = options.featureNS;
-
-  /**
-   * @protected
-   * @type {string}
-   */
-  this.srsName = options.srsName;
-
-  /**
-   * @protected
-   * @type {string}
-   */
-  this.schemaLocation = '';
-
-  /**
-   * @type {Object.<string, Object.<string, Object>>}
-   */
-  this.FEATURE_COLLECTION_PARSERS = {};
-  this.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS] = {
-    'featureMember': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readFeaturesInternal),
-    'featureMembers': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readFeaturesInternal)
-  };
-
-  ol.format.XMLFeature.call(this);
-};
-ol.inherits(ol.format.GMLBase, ol.format.XMLFeature);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.GMLBase.GMLNS = 'http://www.opengis.net/gml';
-
-
-/**
- * A regular expression that matches if a string only contains whitespace
- * characters. It will e.g. match `''`, `' '`, `'\n'` etc. The non-breaking
- * space (0xa0) is explicitly included as IE doesn't include it in its
- * definition of `\s`.
- *
- * Information from `goog.string.isEmptyOrWhitespace`: https://github.com/google/closure-library/blob/e877b1e/closure/goog/string/string.js#L156-L160
- *
- * @const
- * @type {RegExp}
- * @private
- */
-ol.format.GMLBase.ONLY_WHITESPACE_RE_ = /^[\s\xa0]*$/;
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Array.<ol.Feature> | undefined} Features.
- */
-ol.format.GMLBase.prototype.readFeaturesInternal = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  var localName = node.localName;
-  var features = null;
-  if (localName == 'FeatureCollection') {
-    if (node.namespaceURI === 'http://www.opengis.net/wfs') {
-      features = ol.xml.pushParseAndPop([],
-          this.FEATURE_COLLECTION_PARSERS, node,
-          objectStack, this);
-    } else {
-      features = ol.xml.pushParseAndPop(null,
-          this.FEATURE_COLLECTION_PARSERS, node,
-          objectStack, this);
-    }
-  } else if (localName == 'featureMembers' || localName == 'featureMember') {
-    var context = objectStack[0];
-    var featureType = context['featureType'];
-    var featureNS = context['featureNS'];
-    var i, ii, prefix = 'p', defaultPrefix = 'p0';
-    if (!featureType && node.childNodes) {
-      featureType = [], featureNS = {};
-      for (i = 0, ii = node.childNodes.length; i < ii; ++i) {
-        var child = node.childNodes[i];
-        if (child.nodeType === 1) {
-          var ft = child.nodeName.split(':').pop();
-          if (featureType.indexOf(ft) === -1) {
-            var key = '';
-            var count = 0;
-            var uri = child.namespaceURI;
-            for (var candidate in featureNS) {
-              if (featureNS[candidate] === uri) {
-                key = candidate;
-                break;
-              }
-              ++count;
-            }
-            if (!key) {
-              key = prefix + count;
-              featureNS[key] = uri;
-            }
-            featureType.push(key + ':' + ft);
-          }
-        }
-      }
-      if (localName != 'featureMember') {
-        // recheck featureType for each featureMember
-        context['featureType'] = featureType;
-        context['featureNS'] = featureNS;
-      }
-    }
-    if (typeof featureNS === 'string') {
-      var ns = featureNS;
-      featureNS = {};
-      featureNS[defaultPrefix] = ns;
-    }
-    var parsersNS = {};
-    var featureTypes = Array.isArray(featureType) ? featureType : [featureType];
-    for (var p in featureNS) {
-      var parsers = {};
-      for (i = 0, ii = featureTypes.length; i < ii; ++i) {
-        var featurePrefix = featureTypes[i].indexOf(':') === -1 ?
-            defaultPrefix : featureTypes[i].split(':')[0];
-        if (featurePrefix === p) {
-          parsers[featureTypes[i].split(':').pop()] =
-              (localName == 'featureMembers') ?
-              ol.xml.makeArrayPusher(this.readFeatureElement, this) :
-              ol.xml.makeReplacer(this.readFeatureElement, this);
-        }
-      }
-      parsersNS[featureNS[p]] = parsers;
-    }
-    if (localName == 'featureMember') {
-      features = ol.xml.pushParseAndPop(undefined, parsersNS, node, objectStack);
-    } else {
-      features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack);
-    }
-  }
-  if (features === null) {
-    features = [];
-  }
-  return features;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.geom.Geometry|undefined} Geometry.
- */
-ol.format.GMLBase.prototype.readGeometryElement = function(node, objectStack) {
-  var context = /** @type {Object} */ (objectStack[0]);
-  context['srsName'] = node.firstElementChild.getAttribute('srsName');
-  /** @type {ol.geom.Geometry} */
-  var geometry = ol.xml.pushParseAndPop(null,
-      this.GEOMETRY_PARSERS_, node, objectStack, this);
-  if (geometry) {
-    return /** @type {ol.geom.Geometry} */ (
-        ol.format.Feature.transformWithOptions(geometry, false, context));
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.Feature} Feature.
- */
-ol.format.GMLBase.prototype.readFeatureElement = function(node, objectStack) {
-  var n;
-  var fid = node.getAttribute('fid') ||
-      ol.xml.getAttributeNS(node, ol.format.GMLBase.GMLNS, 'id');
-  var values = {}, geometryName;
-  for (n = node.firstElementChild; n; n = n.nextElementSibling) {
-    var localName = n.localName;
-    // Assume attribute elements have one child node and that the child
-    // is a text or CDATA node (to be treated as text).
-    // Otherwise assume it is a geometry node.
-    if (n.childNodes.length === 0 ||
-        (n.childNodes.length === 1 &&
-        (n.firstChild.nodeType === 3 || n.firstChild.nodeType === 4))) {
-      var value = ol.xml.getAllTextContent(n, false);
-      if (ol.format.GMLBase.ONLY_WHITESPACE_RE_.test(value)) {
-        value = undefined;
-      }
-      values[localName] = value;
-    } else {
-      // boundedBy is an extent and must not be considered as a geometry
-      if (localName !== 'boundedBy') {
-        geometryName = localName;
-      }
-      values[localName] = this.readGeometryElement(n, objectStack);
-    }
-  }
-  var feature = new ol.Feature(values);
-  if (geometryName) {
-    feature.setGeometryName(geometryName);
-  }
-  if (fid) {
-    feature.setId(fid);
-  }
-  return feature;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.geom.Point|undefined} Point.
- */
-ol.format.GMLBase.prototype.readPoint = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Point', 'localName should be Point');
-  var flatCoordinates =
-      this.readFlatCoordinatesFromNode_(node, objectStack);
-  if (flatCoordinates) {
-    var point = new ol.geom.Point(null);
-    ol.DEBUG && console.assert(flatCoordinates.length == 3,
-        'flatCoordinates should have a length of 3');
-    point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
-    return point;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.geom.MultiPoint|undefined} MultiPoint.
- */
-ol.format.GMLBase.prototype.readMultiPoint = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'MultiPoint',
-      'localName should be MultiPoint');
-  /** @type {Array.<Array.<number>>} */
-  var coordinates = ol.xml.pushParseAndPop([],
-      this.MULTIPOINT_PARSERS_, node, objectStack, this);
-  if (coordinates) {
-    return new ol.geom.MultiPoint(coordinates);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.geom.MultiLineString|undefined} MultiLineString.
- */
-ol.format.GMLBase.prototype.readMultiLineString = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'MultiLineString',
-      'localName should be MultiLineString');
-  /** @type {Array.<ol.geom.LineString>} */
-  var lineStrings = ol.xml.pushParseAndPop([],
-      this.MULTILINESTRING_PARSERS_, node, objectStack, this);
-  if (lineStrings) {
-    var multiLineString = new ol.geom.MultiLineString(null);
-    multiLineString.setLineStrings(lineStrings);
-    return multiLineString;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.geom.MultiPolygon|undefined} MultiPolygon.
- */
-ol.format.GMLBase.prototype.readMultiPolygon = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'MultiPolygon',
-      'localName should be MultiPolygon');
-  /** @type {Array.<ol.geom.Polygon>} */
-  var polygons = ol.xml.pushParseAndPop([],
-      this.MULTIPOLYGON_PARSERS_, node, objectStack, this);
-  if (polygons) {
-    var multiPolygon = new ol.geom.MultiPolygon(null);
-    multiPolygon.setPolygons(polygons);
-    return multiPolygon;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GMLBase.prototype.pointMemberParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'pointMember' ||
-      node.localName == 'pointMembers',
-      'localName should be pointMember or pointMembers');
-  ol.xml.parseNode(this.POINTMEMBER_PARSERS_,
-      node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GMLBase.prototype.lineStringMemberParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'lineStringMember' ||
-      node.localName == 'lineStringMembers',
-      'localName should be LineStringMember or LineStringMembers');
-  ol.xml.parseNode(this.LINESTRINGMEMBER_PARSERS_,
-      node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GMLBase.prototype.polygonMemberParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'polygonMember' ||
-      node.localName == 'polygonMembers',
-      'localName should be polygonMember or polygonMembers');
-  ol.xml.parseNode(this.POLYGONMEMBER_PARSERS_, node,
-      objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.geom.LineString|undefined} LineString.
- */
-ol.format.GMLBase.prototype.readLineString = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LineString',
-      'localName should be LineString');
-  var flatCoordinates =
-      this.readFlatCoordinatesFromNode_(node, objectStack);
-  if (flatCoordinates) {
-    var lineString = new ol.geom.LineString(null);
-    lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
-    return lineString;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>|undefined} LinearRing flat coordinates.
- */
-ol.format.GMLBase.prototype.readFlatLinearRing_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LinearRing',
-      'localName should be LinearRing');
-  var ring = ol.xml.pushParseAndPop(null,
-      this.GEOMETRY_FLAT_COORDINATES_PARSERS_, node,
-      objectStack, this);
-  if (ring) {
-    return ring;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.geom.LinearRing|undefined} LinearRing.
- */
-ol.format.GMLBase.prototype.readLinearRing = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LinearRing',
-      'localName should be LinearRing');
-  var flatCoordinates =
-      this.readFlatCoordinatesFromNode_(node, objectStack);
-  if (flatCoordinates) {
-    var ring = new ol.geom.LinearRing(null);
-    ring.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
-    return ring;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.geom.Polygon|undefined} Polygon.
- */
-ol.format.GMLBase.prototype.readPolygon = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Polygon',
-      'localName should be Polygon');
-  /** @type {Array.<Array.<number>>} */
-  var flatLinearRings = ol.xml.pushParseAndPop([null],
-      this.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack, this);
-  if (flatLinearRings && flatLinearRings[0]) {
-    var polygon = new ol.geom.Polygon(null);
-    var flatCoordinates = flatLinearRings[0];
-    var ends = [flatCoordinates.length];
-    var i, ii;
-    for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {
-      ol.array.extend(flatCoordinates, flatLinearRings[i]);
-      ends.push(flatCoordinates.length);
-    }
-    polygon.setFlatCoordinates(
-        ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);
-    return polygon;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>} Flat coordinates.
- */
-ol.format.GMLBase.prototype.readFlatCoordinatesFromNode_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  return ol.xml.pushParseAndPop(null,
-      this.GEOMETRY_FLAT_COORDINATES_PARSERS_, node,
-      objectStack, this);
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GMLBase.prototype.MULTIPOINT_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'pointMember': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.pointMemberParser_),
-    'pointMembers': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.pointMemberParser_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GMLBase.prototype.MULTILINESTRING_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'lineStringMember': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.lineStringMemberParser_),
-    'lineStringMembers': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.lineStringMemberParser_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GMLBase.prototype.MULTIPOLYGON_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'polygonMember': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.polygonMemberParser_),
-    'polygonMembers': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.polygonMemberParser_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GMLBase.prototype.POINTMEMBER_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'Point': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.readFlatCoordinatesFromNode_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GMLBase.prototype.LINESTRINGMEMBER_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'LineString': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.readLineString)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GMLBase.prototype.POLYGONMEMBER_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'Polygon': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.readPolygon)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @protected
- */
-ol.format.GMLBase.prototype.RING_PARSERS = {
-  'http://www.opengis.net/gml' : {
-    'LinearRing': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readFlatLinearRing_)
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.GMLBase.prototype.readGeometryFromNode = function(node, opt_options) {
-  var geometry = this.readGeometryElement(node,
-      [this.getReadOptions(node, opt_options ? opt_options : {})]);
-  return geometry ? geometry : null;
-};
-
-
-/**
- * Read all features from a GML FeatureCollection.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.GMLBase.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.GMLBase.prototype.readFeaturesFromNode = function(node, opt_options) {
-  var options = {
-    featureType: this.featureType,
-    featureNS: this.featureNS
-  };
-  if (opt_options) {
-    ol.obj.assign(options, this.getReadOptions(node, opt_options));
-  }
-  var features = this.readFeaturesInternal(node, [options]);
-  return features || [];
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.GMLBase.prototype.readProjectionFromNode = function(node) {
-  return ol.proj.get(this.srsName ? this.srsName :
-      node.firstElementChild.getAttribute('srsName'));
-};
-
-goog.provide('ol.format.XSD');
-
-goog.require('ol');
-goog.require('ol.xml');
-goog.require('ol.string');
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.XSD.NAMESPACE_URI = 'http://www.w3.org/2001/XMLSchema';
-
-
-/**
- * @param {Node} node Node.
- * @return {boolean|undefined} Boolean.
- */
-ol.format.XSD.readBoolean = function(node) {
-  var s = ol.xml.getAllTextContent(node, false);
-  return ol.format.XSD.readBooleanString(s);
-};
-
-
-/**
- * @param {string} string String.
- * @return {boolean|undefined} Boolean.
- */
-ol.format.XSD.readBooleanString = function(string) {
-  var m = /^\s*(true|1)|(false|0)\s*$/.exec(string);
-  if (m) {
-    return m[1] !== undefined || false;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {number|undefined} DateTime in seconds.
- */
-ol.format.XSD.readDateTime = function(node) {
-  var s = ol.xml.getAllTextContent(node, false);
-  var dateTime = Date.parse(s);
-  return isNaN(dateTime) ? undefined : dateTime / 1000;
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {number|undefined} Decimal.
- */
-ol.format.XSD.readDecimal = function(node) {
-  var s = ol.xml.getAllTextContent(node, false);
-  return ol.format.XSD.readDecimalString(s);
-};
-
-
-/**
- * @param {string} string String.
- * @return {number|undefined} Decimal.
- */
-ol.format.XSD.readDecimalString = function(string) {
-  // FIXME check spec
-  var m = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(string);
-  if (m) {
-    return parseFloat(m[1]);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {number|undefined} Non negative integer.
- */
-ol.format.XSD.readNonNegativeInteger = function(node) {
-  var s = ol.xml.getAllTextContent(node, false);
-  return ol.format.XSD.readNonNegativeIntegerString(s);
-};
-
-
-/**
- * @param {string} string String.
- * @return {number|undefined} Non negative integer.
- */
-ol.format.XSD.readNonNegativeIntegerString = function(string) {
-  var m = /^\s*(\d+)\s*$/.exec(string);
-  if (m) {
-    return parseInt(m[1], 10);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {string|undefined} String.
- */
-ol.format.XSD.readString = function(node) {
-  return ol.xml.getAllTextContent(node, false).trim();
-};
-
-
-/**
- * @param {Node} node Node to append a TextNode with the boolean to.
- * @param {boolean} bool Boolean.
- */
-ol.format.XSD.writeBooleanTextNode = function(node, bool) {
-  ol.format.XSD.writeStringTextNode(node, (bool) ? '1' : '0');
-};
-
-
-/**
- * @param {Node} node Node to append a TextNode with the dateTime to.
- * @param {number} dateTime DateTime in seconds.
- */
-ol.format.XSD.writeDateTimeTextNode = function(node, dateTime) {
-  var date = new Date(dateTime * 1000);
-  var string = date.getUTCFullYear() + '-' +
-      ol.string.padNumber(date.getUTCMonth() + 1, 2) + '-' +
-      ol.string.padNumber(date.getUTCDate(), 2) + 'T' +
-      ol.string.padNumber(date.getUTCHours(), 2) + ':' +
-      ol.string.padNumber(date.getUTCMinutes(), 2) + ':' +
-      ol.string.padNumber(date.getUTCSeconds(), 2) + 'Z';
-  node.appendChild(ol.xml.DOCUMENT.createTextNode(string));
-};
-
-
-/**
- * @param {Node} node Node to append a TextNode with the decimal to.
- * @param {number} decimal Decimal.
- */
-ol.format.XSD.writeDecimalTextNode = function(node, decimal) {
-  var string = decimal.toPrecision();
-  node.appendChild(ol.xml.DOCUMENT.createTextNode(string));
-};
-
-
-/**
- * @param {Node} node Node to append a TextNode with the decimal to.
- * @param {number} nonNegativeInteger Non negative integer.
- */
-ol.format.XSD.writeNonNegativeIntegerTextNode = function(node, nonNegativeInteger) {
-  ol.DEBUG && console.assert(nonNegativeInteger >= 0, 'value should be more than 0');
-  ol.DEBUG && console.assert(nonNegativeInteger == (nonNegativeInteger | 0),
-      'value should be an integer value');
-  var string = nonNegativeInteger.toString();
-  node.appendChild(ol.xml.DOCUMENT.createTextNode(string));
-};
-
-
-/**
- * @param {Node} node Node to append a TextNode with the string to.
- * @param {string} string String.
- */
-ol.format.XSD.writeStringTextNode = function(node, string) {
-  node.appendChild(ol.xml.DOCUMENT.createTextNode(string));
-};
-
-goog.provide('ol.format.GML3');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.format.Feature');
-goog.require('ol.format.GMLBase');
-goog.require('ol.format.XSD');
-goog.require('ol.geom.Geometry');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Polygon');
-goog.require('ol.obj');
-goog.require('ol.proj');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the GML format
- * version 3.1.1.
- * Currently only supports GML 3.1.1 Simple Features profile.
- *
- * @constructor
- * @param {olx.format.GMLOptions=} opt_options
- *     Optional configuration object.
- * @extends {ol.format.GMLBase}
- * @api
- */
-ol.format.GML3 = function(opt_options) {
-  var options = /** @type {olx.format.GMLOptions} */
-      (opt_options ? opt_options : {});
-
-  ol.format.GMLBase.call(this, options);
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.surface_ = options.surface !== undefined ? options.surface : false;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.curve_ = options.curve !== undefined ? options.curve : false;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.multiCurve_ = options.multiCurve !== undefined ?
-      options.multiCurve : true;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.multiSurface_ = options.multiSurface !== undefined ?
-      options.multiSurface : true;
-
-  /**
-   * @inheritDoc
-   */
-  this.schemaLocation = options.schemaLocation ?
-      options.schemaLocation : ol.format.GML3.schemaLocation_;
-
-};
-ol.inherits(ol.format.GML3, ol.format.GMLBase);
-
-
-/**
- * @const
- * @type {string}
- * @private
- */
-ol.format.GML3.schemaLocation_ = ol.format.GMLBase.GMLNS +
-    ' http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/' +
-    '1.0.0/gmlsf.xsd';
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.MultiLineString|undefined} MultiLineString.
- */
-ol.format.GML3.prototype.readMultiCurve_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'MultiCurve',
-      'localName should be MultiCurve');
-  /** @type {Array.<ol.geom.LineString>} */
-  var lineStrings = ol.xml.pushParseAndPop([],
-      this.MULTICURVE_PARSERS_, node, objectStack, this);
-  if (lineStrings) {
-    var multiLineString = new ol.geom.MultiLineString(null);
-    multiLineString.setLineStrings(lineStrings);
-    return multiLineString;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.MultiPolygon|undefined} MultiPolygon.
- */
-ol.format.GML3.prototype.readMultiSurface_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'MultiSurface',
-      'localName should be MultiSurface');
-  /** @type {Array.<ol.geom.Polygon>} */
-  var polygons = ol.xml.pushParseAndPop([],
-      this.MULTISURFACE_PARSERS_, node, objectStack, this);
-  if (polygons) {
-    var multiPolygon = new ol.geom.MultiPolygon(null);
-    multiPolygon.setPolygons(polygons);
-    return multiPolygon;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML3.prototype.curveMemberParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'curveMember' ||
-      node.localName == 'curveMembers',
-      'localName should be curveMember or curveMembers');
-  ol.xml.parseNode(this.CURVEMEMBER_PARSERS_, node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML3.prototype.surfaceMemberParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'surfaceMember' ||
-      node.localName == 'surfaceMembers',
-      'localName should be surfaceMember or surfaceMembers');
-  ol.xml.parseNode(this.SURFACEMEMBER_PARSERS_,
-      node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<(Array.<number>)>|undefined} flat coordinates.
- */
-ol.format.GML3.prototype.readPatch_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'patches',
-      'localName should be patches');
-  return ol.xml.pushParseAndPop([null],
-      this.PATCHES_PARSERS_, node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>|undefined} flat coordinates.
- */
-ol.format.GML3.prototype.readSegment_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'segments',
-      'localName should be segments');
-  return ol.xml.pushParseAndPop([null],
-      this.SEGMENTS_PARSERS_, node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<(Array.<number>)>|undefined} flat coordinates.
- */
-ol.format.GML3.prototype.readPolygonPatch_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'npde.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'PolygonPatch',
-      'localName should be PolygonPatch');
-  return ol.xml.pushParseAndPop([null],
-      this.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>|undefined} flat coordinates.
- */
-ol.format.GML3.prototype.readLineStringSegment_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LineStringSegment',
-      'localName should be LineStringSegment');
-  return ol.xml.pushParseAndPop([null],
-      this.GEOMETRY_FLAT_COORDINATES_PARSERS_,
-      node, objectStack, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML3.prototype.interiorParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'interior',
-      'localName should be interior');
-  /** @type {Array.<number>|undefined} */
-  var flatLinearRing = ol.xml.pushParseAndPop(undefined,
-      this.RING_PARSERS, node, objectStack, this);
-  if (flatLinearRing) {
-    var flatLinearRings = /** @type {Array.<Array.<number>>} */
-        (objectStack[objectStack.length - 1]);
-    ol.DEBUG && console.assert(Array.isArray(flatLinearRings),
-        'flatLinearRings should be an array');
-    ol.DEBUG && console.assert(flatLinearRings.length > 0,
-        'flatLinearRings should have an array length of 1 or more');
-    flatLinearRings.push(flatLinearRing);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML3.prototype.exteriorParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'exterior',
-      'localName should be exterior');
-   /** @type {Array.<number>|undefined} */
-  var flatLinearRing = ol.xml.pushParseAndPop(undefined,
-      this.RING_PARSERS, node, objectStack, this);
-  if (flatLinearRing) {
-    var flatLinearRings = /** @type {Array.<Array.<number>>} */
-        (objectStack[objectStack.length - 1]);
-    ol.DEBUG && console.assert(Array.isArray(flatLinearRings),
-        'flatLinearRings should be an array');
-    ol.DEBUG && console.assert(flatLinearRings.length > 0,
-        'flatLinearRings should have an array length of 1 or more');
-    flatLinearRings[0] = flatLinearRing;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.Polygon|undefined} Polygon.
- */
-ol.format.GML3.prototype.readSurface_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Surface',
-      'localName should be Surface');
-  /** @type {Array.<Array.<number>>} */
-  var flatLinearRings = ol.xml.pushParseAndPop([null],
-      this.SURFACE_PARSERS_, node, objectStack, this);
-  if (flatLinearRings && flatLinearRings[0]) {
-    var polygon = new ol.geom.Polygon(null);
-    var flatCoordinates = flatLinearRings[0];
-    var ends = [flatCoordinates.length];
-    var i, ii;
-    for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {
-      ol.array.extend(flatCoordinates, flatLinearRings[i]);
-      ends.push(flatCoordinates.length);
-    }
-    polygon.setFlatCoordinates(
-        ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);
-    return polygon;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.LineString|undefined} LineString.
- */
-ol.format.GML3.prototype.readCurve_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Curve', 'localName should be Curve');
-  /** @type {Array.<number>} */
-  var flatCoordinates = ol.xml.pushParseAndPop([null],
-      this.CURVE_PARSERS_, node, objectStack, this);
-  if (flatCoordinates) {
-    var lineString = new ol.geom.LineString(null);
-    lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
-    return lineString;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.Extent|undefined} Envelope.
- */
-ol.format.GML3.prototype.readEnvelope_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Envelope',
-      'localName should be Envelope');
-  /** @type {Array.<number>} */
-  var flatCoordinates = ol.xml.pushParseAndPop([null],
-      this.ENVELOPE_PARSERS_, node, objectStack, this);
-  return ol.extent.createOrUpdate(flatCoordinates[1][0],
-      flatCoordinates[1][1], flatCoordinates[2][0],
-      flatCoordinates[2][1]);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>|undefined} Flat coordinates.
- */
-ol.format.GML3.prototype.readFlatPos_ = function(node, objectStack) {
-  var s = ol.xml.getAllTextContent(node, false);
-  var re = /^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/;
-  /** @type {Array.<number>} */
-  var flatCoordinates = [];
-  var m;
-  while ((m = re.exec(s))) {
-    flatCoordinates.push(parseFloat(m[1]));
-    s = s.substr(m[0].length);
-  }
-  if (s !== '') {
-    return undefined;
-  }
-  var context = objectStack[0];
-  var containerSrs = context['srsName'];
-  var axisOrientation = 'enu';
-  if (containerSrs) {
-    var proj = ol.proj.get(containerSrs);
-    axisOrientation = proj.getAxisOrientation();
-  }
-  if (axisOrientation === 'neu') {
-    var i, ii;
-    for (i = 0, ii = flatCoordinates.length; i < ii; i += 3) {
-      var y = flatCoordinates[i];
-      var x = flatCoordinates[i + 1];
-      flatCoordinates[i] = x;
-      flatCoordinates[i + 1] = y;
-    }
-  }
-  var len = flatCoordinates.length;
-  if (len == 2) {
-    flatCoordinates.push(0);
-  }
-  if (len === 0) {
-    return undefined;
-  }
-  return flatCoordinates;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>|undefined} Flat coordinates.
- */
-ol.format.GML3.prototype.readFlatPosList_ = function(node, objectStack) {
-  var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
-  var context = objectStack[0];
-  var containerSrs = context['srsName'];
-  var containerDimension = node.parentNode.getAttribute('srsDimension');
-  var axisOrientation = 'enu';
-  if (containerSrs) {
-    var proj = ol.proj.get(containerSrs);
-    axisOrientation = proj.getAxisOrientation();
-  }
-  var coords = s.split(/\s+/);
-  // The "dimension" attribute is from the GML 3.0.1 spec.
-  var dim = 2;
-  if (node.getAttribute('srsDimension')) {
-    dim = ol.format.XSD.readNonNegativeIntegerString(
-        node.getAttribute('srsDimension'));
-  } else if (node.getAttribute('dimension')) {
-    dim = ol.format.XSD.readNonNegativeIntegerString(
-        node.getAttribute('dimension'));
-  } else if (containerDimension) {
-    dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
-  }
-  var x, y, z;
-  var flatCoordinates = [];
-  for (var i = 0, ii = coords.length; i < ii; i += dim) {
-    x = parseFloat(coords[i]);
-    y = parseFloat(coords[i + 1]);
-    z = (dim === 3) ? parseFloat(coords[i + 2]) : 0;
-    if (axisOrientation.substr(0, 2) === 'en') {
-      flatCoordinates.push(x, y, z);
-    } else {
-      flatCoordinates.push(y, x, z);
-    }
-  }
-  return flatCoordinates;
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'pos': ol.xml.makeReplacer(ol.format.GML3.prototype.readFlatPos_),
-    'posList': ol.xml.makeReplacer(ol.format.GML3.prototype.readFlatPosList_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.FLAT_LINEAR_RINGS_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'interior': ol.format.GML3.prototype.interiorParser_,
-    'exterior': ol.format.GML3.prototype.exteriorParser_
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.GEOMETRY_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'Point': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPoint),
-    'MultiPoint': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readMultiPoint),
-    'LineString': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readLineString),
-    'MultiLineString': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readMultiLineString),
-    'LinearRing' : ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readLinearRing),
-    'Polygon': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPolygon),
-    'MultiPolygon': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readMultiPolygon),
-    'Surface': ol.xml.makeReplacer(ol.format.GML3.prototype.readSurface_),
-    'MultiSurface': ol.xml.makeReplacer(
-        ol.format.GML3.prototype.readMultiSurface_),
-    'Curve': ol.xml.makeReplacer(ol.format.GML3.prototype.readCurve_),
-    'MultiCurve': ol.xml.makeReplacer(
-        ol.format.GML3.prototype.readMultiCurve_),
-    'Envelope': ol.xml.makeReplacer(ol.format.GML3.prototype.readEnvelope_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.MULTICURVE_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'curveMember': ol.xml.makeArrayPusher(
-        ol.format.GML3.prototype.curveMemberParser_),
-    'curveMembers': ol.xml.makeArrayPusher(
-        ol.format.GML3.prototype.curveMemberParser_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.MULTISURFACE_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'surfaceMember': ol.xml.makeArrayPusher(
-        ol.format.GML3.prototype.surfaceMemberParser_),
-    'surfaceMembers': ol.xml.makeArrayPusher(
-        ol.format.GML3.prototype.surfaceMemberParser_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.CURVEMEMBER_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'LineString': ol.xml.makeArrayPusher(
-        ol.format.GMLBase.prototype.readLineString),
-    'Curve': ol.xml.makeArrayPusher(ol.format.GML3.prototype.readCurve_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.SURFACEMEMBER_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'Polygon': ol.xml.makeArrayPusher(ol.format.GMLBase.prototype.readPolygon),
-    'Surface': ol.xml.makeArrayPusher(ol.format.GML3.prototype.readSurface_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.SURFACE_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'patches': ol.xml.makeReplacer(ol.format.GML3.prototype.readPatch_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.CURVE_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'segments': ol.xml.makeReplacer(ol.format.GML3.prototype.readSegment_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.ENVELOPE_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'lowerCorner': ol.xml.makeArrayPusher(
-        ol.format.GML3.prototype.readFlatPosList_),
-    'upperCorner': ol.xml.makeArrayPusher(
-        ol.format.GML3.prototype.readFlatPosList_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.PATCHES_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'PolygonPatch': ol.xml.makeReplacer(
-        ol.format.GML3.prototype.readPolygonPatch_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML3.prototype.SEGMENTS_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'LineStringSegment': ol.xml.makeReplacer(
-        ol.format.GML3.prototype.readLineStringSegment_)
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Point} value Point geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writePos_ = function(node, value, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  var axisOrientation = 'enu';
-  if (srsName) {
-    axisOrientation = ol.proj.get(srsName).getAxisOrientation();
-  }
-  var point = value.getCoordinates();
-  var coords;
-  // only 2d for simple features profile
-  if (axisOrientation.substr(0, 2) === 'en') {
-    coords = (point[0] + ' ' + point[1]);
-  } else {
-    coords = (point[1] + ' ' + point[0]);
-  }
-  ol.format.XSD.writeStringTextNode(node, coords);
-};
-
-
-/**
- * @param {Array.<number>} point Point geometry.
- * @param {string=} opt_srsName Optional srsName
- * @return {string} The coords string.
- * @private
- */
-ol.format.GML3.prototype.getCoords_ = function(point, opt_srsName) {
-  var axisOrientation = 'enu';
-  if (opt_srsName) {
-    axisOrientation = ol.proj.get(opt_srsName).getAxisOrientation();
-  }
-  return ((axisOrientation.substr(0, 2) === 'en') ?
-      point[0] + ' ' + point[1] :
-      point[1] + ' ' + point[0]);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString|ol.geom.LinearRing} value Geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writePosList_ = function(node, value, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  // only 2d for simple features profile
-  var points = value.getCoordinates();
-  var len = points.length;
-  var parts = new Array(len);
-  var point;
-  for (var i = 0; i < len; ++i) {
-    point = points[i];
-    parts[i] = this.getCoords_(point, srsName);
-  }
-  ol.format.XSD.writeStringTextNode(node, parts.join(' '));
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Point} geometry Point geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writePoint_ = function(node, geometry, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  if (srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  var pos = ol.xml.createElementNS(node.namespaceURI, 'pos');
-  node.appendChild(pos);
-  this.writePos_(pos, geometry, objectStack);
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GML3.ENVELOPE_SERIALIZERS_ = {
-  'http://www.opengis.net/gml': {
-    'lowerCorner': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-    'upperCorner': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Extent} extent Extent.
- * @param {Array.<*>} objectStack Node stack.
- */
-ol.format.GML3.prototype.writeEnvelope = function(node, extent, objectStack) {
-  ol.DEBUG && console.assert(extent.length == 4, 'extent should have 4 items');
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  if (srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  var keys = ['lowerCorner', 'upperCorner'];
-  var values = [extent[0] + ' ' + extent[1], extent[2] + ' ' + extent[3]];
-  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */
-      ({node: node}), ol.format.GML3.ENVELOPE_SERIALIZERS_,
-      ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
-      values,
-      objectStack, keys, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LinearRing} geometry LinearRing geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeLinearRing_ = function(node, geometry, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  if (srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  var posList = ol.xml.createElementNS(node.namespaceURI, 'posList');
-  node.appendChild(posList);
-  this.writePosList_(posList, geometry, objectStack);
-};
-
-
-/**
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node} Node.
- * @private
- */
-ol.format.GML3.prototype.RING_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
-  var context = objectStack[objectStack.length - 1];
-  var parentNode = context.node;
-  var exteriorWritten = context['exteriorWritten'];
-  if (exteriorWritten === undefined) {
-    context['exteriorWritten'] = true;
-  }
-  return ol.xml.createElementNS(parentNode.namespaceURI,
-      exteriorWritten !== undefined ? 'interior' : 'exterior');
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Polygon} geometry Polygon geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeSurfaceOrPolygon_ = function(node, geometry, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  if (node.nodeName !== 'PolygonPatch' && srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  if (node.nodeName === 'Polygon' || node.nodeName === 'PolygonPatch') {
-    var rings = geometry.getLinearRings();
-    ol.xml.pushSerializeAndPop(
-        {node: node, srsName: srsName},
-        ol.format.GML3.RING_SERIALIZERS_,
-        this.RING_NODE_FACTORY_,
-        rings, objectStack, undefined, this);
-  } else if (node.nodeName === 'Surface') {
-    var patches = ol.xml.createElementNS(node.namespaceURI, 'patches');
-    node.appendChild(patches);
-    this.writeSurfacePatches_(
-        patches, geometry, objectStack);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString} geometry LineString geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeCurveOrLineString_ = function(node, geometry, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  if (node.nodeName !== 'LineStringSegment' && srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  if (node.nodeName === 'LineString' ||
-      node.nodeName === 'LineStringSegment') {
-    var posList = ol.xml.createElementNS(node.namespaceURI, 'posList');
-    node.appendChild(posList);
-    this.writePosList_(posList, geometry, objectStack);
-  } else if (node.nodeName === 'Curve') {
-    var segments = ol.xml.createElementNS(node.namespaceURI, 'segments');
-    node.appendChild(segments);
-    this.writeCurveSegments_(segments,
-        geometry, objectStack);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.MultiPolygon} geometry MultiPolygon geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeMultiSurfaceOrPolygon_ = function(node, geometry, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  var surface = context['surface'];
-  if (srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  var polygons = geometry.getPolygons();
-  ol.xml.pushSerializeAndPop({node: node, srsName: srsName, surface: surface},
-      ol.format.GML3.SURFACEORPOLYGONMEMBER_SERIALIZERS_,
-      this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, polygons,
-      objectStack, undefined, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.MultiPoint} geometry MultiPoint geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeMultiPoint_ = function(node, geometry,
-    objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  if (srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  var points = geometry.getPoints();
-  ol.xml.pushSerializeAndPop({node: node, srsName: srsName},
-      ol.format.GML3.POINTMEMBER_SERIALIZERS_,
-      ol.xml.makeSimpleNodeFactory('pointMember'), points,
-      objectStack, undefined, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.MultiLineString} geometry MultiLineString geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeMultiCurveOrLineString_ = function(node, geometry, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var srsName = context['srsName'];
-  var curve = context['curve'];
-  if (srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  var lines = geometry.getLineStrings();
-  ol.xml.pushSerializeAndPop({node: node, srsName: srsName, curve: curve},
-      ol.format.GML3.LINESTRINGORCURVEMEMBER_SERIALIZERS_,
-      this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, lines,
-      objectStack, undefined, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LinearRing} ring LinearRing geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeRing_ = function(node, ring, objectStack) {
-  var linearRing = ol.xml.createElementNS(node.namespaceURI, 'LinearRing');
-  node.appendChild(linearRing);
-  this.writeLinearRing_(linearRing, ring, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Polygon} polygon Polygon geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeSurfaceOrPolygonMember_ = function(node, polygon, objectStack) {
-  var child = this.GEOMETRY_NODE_FACTORY_(
-      polygon, objectStack);
-  if (child) {
-    node.appendChild(child);
-    this.writeSurfaceOrPolygon_(child, polygon, objectStack);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Point} point Point geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writePointMember_ = function(node, point, objectStack) {
-  var child = ol.xml.createElementNS(node.namespaceURI, 'Point');
-  node.appendChild(child);
-  this.writePoint_(child, point, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString} line LineString geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeLineStringOrCurveMember_ = function(node, line, objectStack) {
-  var child = this.GEOMETRY_NODE_FACTORY_(line, objectStack);
-  if (child) {
-    node.appendChild(child);
-    this.writeCurveOrLineString_(child, line, objectStack);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Polygon} polygon Polygon geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeSurfacePatches_ = function(node, polygon, objectStack) {
-  var child = ol.xml.createElementNS(node.namespaceURI, 'PolygonPatch');
-  node.appendChild(child);
-  this.writeSurfaceOrPolygon_(child, polygon, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString} line LineString geometry.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeCurveSegments_ = function(node, line, objectStack) {
-  var child = ol.xml.createElementNS(node.namespaceURI,
-      'LineStringSegment');
-  node.appendChild(child);
-  this.writeCurveOrLineString_(child, line, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Geometry|ol.Extent} geometry Geometry.
- * @param {Array.<*>} objectStack Node stack.
- */
-ol.format.GML3.prototype.writeGeometryElement = function(node, geometry, objectStack) {
-  var context = /** @type {olx.format.WriteOptions} */ (objectStack[objectStack.length - 1]);
-  var item = ol.obj.assign({}, context);
-  item.node = node;
-  var value;
-  if (Array.isArray(geometry)) {
-    if (context.dataProjection) {
-      value = ol.proj.transformExtent(
-          geometry, context.featureProjection, context.dataProjection);
-    } else {
-      value = geometry;
-    }
-  } else {
-    value =
-        ol.format.Feature.transformWithOptions(/** @type {ol.geom.Geometry} */ (geometry), true, context);
-  }
-  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */
-      (item), ol.format.GML3.GEOMETRY_SERIALIZERS_,
-      this.GEOMETRY_NODE_FACTORY_, [value],
-      objectStack, undefined, this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Node stack.
- */
-ol.format.GML3.prototype.writeFeatureElement = function(node, feature, objectStack) {
-  var fid = feature.getId();
-  if (fid) {
-    node.setAttribute('fid', fid);
-  }
-  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  var featureNS = context['featureNS'];
-  var geometryName = feature.getGeometryName();
-  if (!context.serializers) {
-    context.serializers = {};
-    context.serializers[featureNS] = {};
-  }
-  var properties = feature.getProperties();
-  var keys = [], values = [];
-  for (var key in properties) {
-    var value = properties[key];
-    if (value !== null) {
-      keys.push(key);
-      values.push(value);
-      if (key == geometryName || value instanceof ol.geom.Geometry) {
-        if (!(key in context.serializers[featureNS])) {
-          context.serializers[featureNS][key] = ol.xml.makeChildAppender(
-              this.writeGeometryElement, this);
-        }
-      } else {
-        if (!(key in context.serializers[featureNS])) {
-          context.serializers[featureNS][key] = ol.xml.makeChildAppender(
-              ol.format.XSD.writeStringTextNode);
-        }
-      }
-    }
-  }
-  var item = ol.obj.assign({}, context);
-  item.node = node;
-  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */
-      (item), context.serializers,
-      ol.xml.makeSimpleNodeFactory(undefined, featureNS),
-      values,
-      objectStack, keys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<ol.Feature>} features Features.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GML3.prototype.writeFeatureMembers_ = function(node, features, objectStack) {
-  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  var featureType = context['featureType'];
-  var featureNS = context['featureNS'];
-  var serializers = {};
-  serializers[featureNS] = {};
-  serializers[featureNS][featureType] = ol.xml.makeChildAppender(
-      this.writeFeatureElement, this);
-  var item = ol.obj.assign({}, context);
-  item.node = node;
-  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */
-      (item),
-      serializers,
-      ol.xml.makeSimpleNodeFactory(featureType, featureNS), features,
-      objectStack);
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GML3.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {
-  'http://www.opengis.net/gml': {
-    'surfaceMember': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeSurfaceOrPolygonMember_),
-    'polygonMember': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeSurfaceOrPolygonMember_)
-  }
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GML3.POINTMEMBER_SERIALIZERS_ = {
-  'http://www.opengis.net/gml': {
-    'pointMember': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writePointMember_)
-  }
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GML3.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {
-  'http://www.opengis.net/gml': {
-    'lineStringMember': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeLineStringOrCurveMember_),
-    'curveMember': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeLineStringOrCurveMember_)
-  }
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GML3.RING_SERIALIZERS_ = {
-  'http://www.opengis.net/gml': {
-    'exterior': ol.xml.makeChildAppender(ol.format.GML3.prototype.writeRing_),
-    'interior': ol.xml.makeChildAppender(ol.format.GML3.prototype.writeRing_)
-  }
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GML3.GEOMETRY_SERIALIZERS_ = {
-  'http://www.opengis.net/gml': {
-    'Curve': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeCurveOrLineString_),
-    'MultiCurve': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeMultiCurveOrLineString_),
-    'Point': ol.xml.makeChildAppender(ol.format.GML3.prototype.writePoint_),
-    'MultiPoint': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeMultiPoint_),
-    'LineString': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeCurveOrLineString_),
-    'MultiLineString': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeMultiCurveOrLineString_),
-    'LinearRing': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeLinearRing_),
-    'Polygon': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeSurfaceOrPolygon_),
-    'MultiPolygon': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeMultiSurfaceOrPolygon_),
-    'Surface': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeSurfaceOrPolygon_),
-    'MultiSurface': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeMultiSurfaceOrPolygon_),
-    'Envelope': ol.xml.makeChildAppender(
-        ol.format.GML3.prototype.writeEnvelope)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, string>}
- * @private
- */
-ol.format.GML3.MULTIGEOMETRY_TO_MEMBER_NODENAME_ = {
-  'MultiLineString': 'lineStringMember',
-  'MultiCurve': 'curveMember',
-  'MultiPolygon': 'polygonMember',
-  'MultiSurface': 'surfaceMember'
-};
-
-
-/**
- * @const
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node|undefined} Node.
- * @private
- */
-ol.format.GML3.prototype.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
-  var parentNode = objectStack[objectStack.length - 1].node;
-  ol.DEBUG && console.assert(ol.xml.isNode(parentNode),
-      'parentNode should be a node');
-  return ol.xml.createElementNS('http://www.opengis.net/gml',
-      ol.format.GML3.MULTIGEOMETRY_TO_MEMBER_NODENAME_[parentNode.nodeName]);
-};
-
-
-/**
- * @const
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node|undefined} Node.
- * @private
- */
-ol.format.GML3.prototype.GEOMETRY_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
-  var context = objectStack[objectStack.length - 1];
-  var multiSurface = context['multiSurface'];
-  var surface = context['surface'];
-  var curve = context['curve'];
-  var multiCurve = context['multiCurve'];
-  var parentNode = objectStack[objectStack.length - 1].node;
-  ol.DEBUG && console.assert(ol.xml.isNode(parentNode),
-      'parentNode should be a node');
-  var nodeName;
-  if (!Array.isArray(value)) {
-    nodeName = /** @type {ol.geom.Geometry} */ (value).getType();
-    if (nodeName === 'MultiPolygon' && multiSurface === true) {
-      nodeName = 'MultiSurface';
-    } else if (nodeName === 'Polygon' && surface === true) {
-      nodeName = 'Surface';
-    } else if (nodeName === 'LineString' && curve === true) {
-      nodeName = 'Curve';
-    } else if (nodeName === 'MultiLineString' && multiCurve === true) {
-      nodeName = 'MultiCurve';
-    }
-  } else {
-    nodeName = 'Envelope';
-  }
-  return ol.xml.createElementNS('http://www.opengis.net/gml',
-      nodeName);
-};
-
-
-/**
- * Encode a geometry in GML 3.1.1 Simple Features.
- *
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {Node} Node.
- * @api
- */
-ol.format.GML3.prototype.writeGeometryNode = function(geometry, opt_options) {
-  opt_options = this.adaptOptions(opt_options);
-  var geom = ol.xml.createElementNS('http://www.opengis.net/gml', 'geom');
-  var context = {node: geom, srsName: this.srsName,
-    curve: this.curve_, surface: this.surface_,
-    multiSurface: this.multiSurface_, multiCurve: this.multiCurve_};
-  if (opt_options) {
-    ol.obj.assign(context, opt_options);
-  }
-  this.writeGeometryElement(geom, geometry, [context]);
-  return geom;
-};
-
-
-/**
- * Encode an array of features in GML 3.1.1 Simple Features.
- *
- * @function
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {string} Result.
- * @api stable
- */
-ol.format.GML3.prototype.writeFeatures;
-
-
-/**
- * Encode an array of features in the GML 3.1.1 format as an XML node.
- *
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {Node} Node.
- * @api
- */
-ol.format.GML3.prototype.writeFeaturesNode = function(features, opt_options) {
-  opt_options = this.adaptOptions(opt_options);
-  var node = ol.xml.createElementNS('http://www.opengis.net/gml',
-      'featureMembers');
-  ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance',
-      'xsi:schemaLocation', this.schemaLocation);
-  var context = {
-    srsName: this.srsName,
-    curve: this.curve_,
-    surface: this.surface_,
-    multiSurface: this.multiSurface_,
-    multiCurve: this.multiCurve_,
-    featureNS: this.featureNS,
-    featureType: this.featureType
-  };
-  if (opt_options) {
-    ol.obj.assign(context, opt_options);
-  }
-  this.writeFeatureMembers_(node, features, [context]);
-  return node;
-};
-
-goog.provide('ol.format.GML');
-
-goog.require('ol.format.GML3');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the GML format
- * version 3.1.1.
- * Currently only supports GML 3.1.1 Simple Features profile.
- *
- * @constructor
- * @param {olx.format.GMLOptions=} opt_options
- *     Optional configuration object.
- * @extends {ol.format.GMLBase}
- * @api stable
- */
-ol.format.GML = ol.format.GML3;
-
-
-/**
- * Encode an array of features in GML 3.1.1 Simple Features.
- *
- * @function
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {string} Result.
- * @api stable
- */
-ol.format.GML.prototype.writeFeatures;
-
-
-/**
- * Encode an array of features in the GML 3.1.1 format as an XML node.
- *
- * @function
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {Node} Node.
- * @api
- */
-ol.format.GML.prototype.writeFeaturesNode;
-
-goog.provide('ol.format.GML2');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.format.GMLBase');
-goog.require('ol.format.XSD');
-goog.require('ol.proj');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the GML format,
- * version 2.1.2.
- *
- * @constructor
- * @param {olx.format.GMLOptions=} opt_options Optional configuration object.
- * @extends {ol.format.GMLBase}
- * @api
- */
-ol.format.GML2 = function(opt_options) {
-  var options = /** @type {olx.format.GMLOptions} */
-      (opt_options ? opt_options : {});
-
-  ol.format.GMLBase.call(this, options);
-
-  this.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS][
-      'featureMember'] =
-      ol.xml.makeArrayPusher(ol.format.GMLBase.prototype.readFeaturesInternal);
-
-  /**
-   * @inheritDoc
-   */
-  this.schemaLocation = options.schemaLocation ?
-      options.schemaLocation : ol.format.GML2.schemaLocation_;
-
-};
-ol.inherits(ol.format.GML2, ol.format.GMLBase);
-
-
-/**
- * @const
- * @type {string}
- * @private
- */
-ol.format.GML2.schemaLocation_ = ol.format.GMLBase.GMLNS +
-    ' http://schemas.opengis.net/gml/2.1.2/feature.xsd';
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>|undefined} Flat coordinates.
- */
-ol.format.GML2.prototype.readFlatCoordinates_ = function(node, objectStack) {
-  var s = ol.xml.getAllTextContent(node, false).replace(/^\s*|\s*$/g, '');
-  var context = /** @type {ol.XmlNodeStackItem} */ (objectStack[0]);
-  var containerSrs = context['srsName'];
-  var containerDimension = node.parentNode.getAttribute('srsDimension');
-  var axisOrientation = 'enu';
-  if (containerSrs) {
-    var proj = ol.proj.get(containerSrs);
-    if (proj) {
-      axisOrientation = proj.getAxisOrientation();
-    }
-  }
-  var coords = s.split(/[\s,]+/);
-  // The "dimension" attribute is from the GML 3.0.1 spec.
-  var dim = 2;
-  if (node.getAttribute('srsDimension')) {
-    dim = ol.format.XSD.readNonNegativeIntegerString(
-        node.getAttribute('srsDimension'));
-  } else if (node.getAttribute('dimension')) {
-    dim = ol.format.XSD.readNonNegativeIntegerString(
-        node.getAttribute('dimension'));
-  } else if (containerDimension) {
-    dim = ol.format.XSD.readNonNegativeIntegerString(containerDimension);
-  }
-  var x, y, z;
-  var flatCoordinates = [];
-  for (var i = 0, ii = coords.length; i < ii; i += dim) {
-    x = parseFloat(coords[i]);
-    y = parseFloat(coords[i + 1]);
-    z = (dim === 3) ? parseFloat(coords[i + 2]) : 0;
-    if (axisOrientation.substr(0, 2) === 'en') {
-      flatCoordinates.push(x, y, z);
-    } else {
-      flatCoordinates.push(y, x, z);
-    }
-  }
-  return flatCoordinates;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.Extent|undefined} Envelope.
- */
-ol.format.GML2.prototype.readBox_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Box', 'localName should be Box');
-  /** @type {Array.<number>} */
-  var flatCoordinates = ol.xml.pushParseAndPop([null],
-      this.BOX_PARSERS_, node, objectStack, this);
-  return ol.extent.createOrUpdate(flatCoordinates[1][0],
-      flatCoordinates[1][1], flatCoordinates[1][3],
-      flatCoordinates[1][4]);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML2.prototype.innerBoundaryIsParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'innerBoundaryIs',
-      'localName should be innerBoundaryIs');
-  /** @type {Array.<number>|undefined} */
-  var flatLinearRing = ol.xml.pushParseAndPop(undefined,
-      this.RING_PARSERS, node, objectStack, this);
-  if (flatLinearRing) {
-    var flatLinearRings = /** @type {Array.<Array.<number>>} */
-        (objectStack[objectStack.length - 1]);
-    ol.DEBUG && console.assert(Array.isArray(flatLinearRings),
-        'flatLinearRings should be an array');
-    ol.DEBUG && console.assert(flatLinearRings.length > 0,
-        'flatLinearRings should have an array length larger than 0');
-    flatLinearRings.push(flatLinearRing);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GML2.prototype.outerBoundaryIsParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'outerBoundaryIs',
-      'localName should be outerBoundaryIs');
-  /** @type {Array.<number>|undefined} */
-  var flatLinearRing = ol.xml.pushParseAndPop(undefined,
-      this.RING_PARSERS, node, objectStack, this);
-  if (flatLinearRing) {
-    var flatLinearRings = /** @type {Array.<Array.<number>>} */
-        (objectStack[objectStack.length - 1]);
-    ol.DEBUG && console.assert(Array.isArray(flatLinearRings),
-        'flatLinearRings should be an array');
-    ol.DEBUG && console.assert(flatLinearRings.length > 0,
-        'flatLinearRings should have an array length larger than 0');
-    flatLinearRings[0] = flatLinearRing;
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML2.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'coordinates': ol.xml.makeReplacer(
-        ol.format.GML2.prototype.readFlatCoordinates_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML2.prototype.FLAT_LINEAR_RINGS_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'innerBoundaryIs': ol.format.GML2.prototype.innerBoundaryIsParser_,
-    'outerBoundaryIs': ol.format.GML2.prototype.outerBoundaryIsParser_
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML2.prototype.BOX_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'coordinates': ol.xml.makeArrayPusher(
-        ol.format.GML2.prototype.readFlatCoordinates_)
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GML2.prototype.GEOMETRY_PARSERS_ = {
-  'http://www.opengis.net/gml' : {
-    'Point': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPoint),
-    'MultiPoint': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readMultiPoint),
-    'LineString': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readLineString),
-    'MultiLineString': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readMultiLineString),
-    'LinearRing' : ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readLinearRing),
-    'Polygon': ol.xml.makeReplacer(ol.format.GMLBase.prototype.readPolygon),
-    'MultiPolygon': ol.xml.makeReplacer(
-        ol.format.GMLBase.prototype.readMultiPolygon),
-    'Box': ol.xml.makeReplacer(ol.format.GML2.prototype.readBox_)
-  }
-};
-
-goog.provide('ol.format.GPX');
-
-goog.require('ol');
-goog.require('ol.Feature');
-goog.require('ol.array');
-goog.require('ol.format.Feature');
-goog.require('ol.format.XMLFeature');
-goog.require('ol.format.XSD');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.Point');
-goog.require('ol.proj');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the GPX format.
- *
- * @constructor
- * @extends {ol.format.XMLFeature}
- * @param {olx.format.GPXOptions=} opt_options Options.
- * @api stable
- */
-ol.format.GPX = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.format.XMLFeature.call(this);
-
-  /**
-   * @inheritDoc
-   */
-  this.defaultDataProjection = ol.proj.get('EPSG:4326');
-
-  /**
-   * @type {function(ol.Feature, Node)|undefined}
-   * @private
-   */
-  this.readExtensions_ = options.readExtensions;
-};
-ol.inherits(ol.format.GPX, ol.format.XMLFeature);
-
-
-/**
- * @const
- * @private
- * @type {Array.<string>}
- */
-ol.format.GPX.NAMESPACE_URIS_ = [
-  null,
-  'http://www.topografix.com/GPX/1/0',
-  'http://www.topografix.com/GPX/1/1'
-];
-
-
-/**
- * @const
- * @type {string}
- * @private
- */
-ol.format.GPX.SCHEMA_LOCATION_ = 'http://www.topografix.com/GPX/1/1 ' +
-    'http://www.topografix.com/GPX/1/1/gpx.xsd';
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {Node} node Node.
- * @param {Object} values Values.
- * @private
- * @return {Array.<number>} Flat coordinates.
- */
-ol.format.GPX.appendCoordinate_ = function(flatCoordinates, node, values) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  flatCoordinates.push(
-      parseFloat(node.getAttribute('lon')),
-      parseFloat(node.getAttribute('lat')));
-  if ('ele' in values) {
-    flatCoordinates.push(/** @type {number} */ (values['ele']));
-    delete values['ele'];
-  } else {
-    flatCoordinates.push(0);
-  }
-  if ('time' in values) {
-    flatCoordinates.push(/** @type {number} */ (values['time']));
-    delete values['time'];
-  } else {
-    flatCoordinates.push(0);
-  }
-  return flatCoordinates;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.parseLink_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'link', 'localName should be link');
-  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  var href = node.getAttribute('href');
-  if (href !== null) {
-    values['link'] = href;
-  }
-  ol.xml.parseNode(ol.format.GPX.LINK_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.parseExtensions_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'extensions',
-      'localName should be extensions');
-  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  values['extensionsNode_'] = node;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.parseRtePt_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'rtept', 'localName should be rtept');
-  var values = ol.xml.pushParseAndPop(
-      {}, ol.format.GPX.RTEPT_PARSERS_, node, objectStack);
-  if (values) {
-    var rteValues = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-    var flatCoordinates = /** @type {Array.<number>} */
-        (rteValues['flatCoordinates']);
-    ol.format.GPX.appendCoordinate_(flatCoordinates, node, values);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.parseTrkPt_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'trkpt', 'localName should be trkpt');
-  var values = ol.xml.pushParseAndPop(
-      {}, ol.format.GPX.TRKPT_PARSERS_, node, objectStack);
-  if (values) {
-    var trkValues = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-    var flatCoordinates = /** @type {Array.<number>} */
-        (trkValues['flatCoordinates']);
-    ol.format.GPX.appendCoordinate_(flatCoordinates, node, values);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.parseTrkSeg_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'trkseg',
-      'localName should be trkseg');
-  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  ol.xml.parseNode(ol.format.GPX.TRKSEG_PARSERS_, node, objectStack);
-  var flatCoordinates = /** @type {Array.<number>} */
-      (values['flatCoordinates']);
-  var ends = /** @type {Array.<number>} */ (values['ends']);
-  ends.push(flatCoordinates.length);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.Feature|undefined} Track.
- */
-ol.format.GPX.readRte_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'rte', 'localName should be rte');
-  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
-  var values = ol.xml.pushParseAndPop({
-    'flatCoordinates': []
-  }, ol.format.GPX.RTE_PARSERS_, node, objectStack);
-  if (!values) {
-    return undefined;
-  }
-  var flatCoordinates = /** @type {Array.<number>} */
-      (values['flatCoordinates']);
-  delete values['flatCoordinates'];
-  var geometry = new ol.geom.LineString(null);
-  geometry.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates);
-  ol.format.Feature.transformWithOptions(geometry, false, options);
-  var feature = new ol.Feature(geometry);
-  feature.setProperties(values);
-  return feature;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.Feature|undefined} Track.
- */
-ol.format.GPX.readTrk_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'trk', 'localName should be trk');
-  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
-  var values = ol.xml.pushParseAndPop({
-    'flatCoordinates': [],
-    'ends': []
-  }, ol.format.GPX.TRK_PARSERS_, node, objectStack);
-  if (!values) {
-    return undefined;
-  }
-  var flatCoordinates = /** @type {Array.<number>} */
-      (values['flatCoordinates']);
-  delete values['flatCoordinates'];
-  var ends = /** @type {Array.<number>} */ (values['ends']);
-  delete values['ends'];
-  var geometry = new ol.geom.MultiLineString(null);
-  geometry.setFlatCoordinates(
-      ol.geom.GeometryLayout.XYZM, flatCoordinates, ends);
-  ol.format.Feature.transformWithOptions(geometry, false, options);
-  var feature = new ol.Feature(geometry);
-  feature.setProperties(values);
-  return feature;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.Feature|undefined} Waypoint.
- */
-ol.format.GPX.readWpt_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'wpt', 'localName should be wpt');
-  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
-  var values = ol.xml.pushParseAndPop(
-      {}, ol.format.GPX.WPT_PARSERS_, node, objectStack);
-  if (!values) {
-    return undefined;
-  }
-  var coordinates = ol.format.GPX.appendCoordinate_([], node, values);
-  var geometry = new ol.geom.Point(
-      coordinates, ol.geom.GeometryLayout.XYZM);
-  ol.format.Feature.transformWithOptions(geometry, false, options);
-  var feature = new ol.Feature(geometry);
-  feature.setProperties(values);
-  return feature;
-};
-
-
-/**
- * @const
- * @type {Object.<string, function(Node, Array.<*>): (ol.Feature|undefined)>}
- * @private
- */
-ol.format.GPX.FEATURE_READER_ = {
-  'rte': ol.format.GPX.readRte_,
-  'trk': ol.format.GPX.readTrk_,
-  'wpt': ol.format.GPX.readWpt_
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GPX.GPX_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'rte': ol.xml.makeArrayPusher(ol.format.GPX.readRte_),
-      'trk': ol.xml.makeArrayPusher(ol.format.GPX.readTrk_),
-      'wpt': ol.xml.makeArrayPusher(ol.format.GPX.readWpt_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GPX.LINK_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'text':
-          ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, 'linkText'),
-      'type':
-          ol.xml.makeObjectPropertySetter(ol.format.XSD.readString, 'linkType')
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GPX.RTE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'link': ol.format.GPX.parseLink_,
-      'number':
-          ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger),
-      'extensions': ol.format.GPX.parseExtensions_,
-      'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'rtept': ol.format.GPX.parseRtePt_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GPX.RTEPT_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GPX.TRK_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'link': ol.format.GPX.parseLink_,
-      'number':
-          ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger),
-      'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'extensions': ol.format.GPX.parseExtensions_,
-      'trkseg': ol.format.GPX.parseTrkSeg_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GPX.TRKSEG_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'trkpt': ol.format.GPX.parseTrkPt_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GPX.TRKPT_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.GPX.WPT_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'ele': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'time': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDateTime),
-      'magvar': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'geoidheight': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'cmt': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'desc': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'src': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'link': ol.format.GPX.parseLink_,
-      'sym': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'type': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'fix': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'sat': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readNonNegativeInteger),
-      'hdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'vdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'pdop': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'ageofdgpsdata':
-          ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'dgpsid':
-          ol.xml.makeObjectPropertySetter(ol.format.XSD.readNonNegativeInteger),
-      'extensions': ol.format.GPX.parseExtensions_
-    });
-
-
-/**
- * @param {Array.<ol.Feature>} features List of features.
- * @private
- */
-ol.format.GPX.prototype.handleReadExtensions_ = function(features) {
-  if (!features) {
-    features = [];
-  }
-  for (var i = 0, ii = features.length; i < ii; ++i) {
-    var feature = features[i];
-    if (this.readExtensions_) {
-      var extensionsNode = feature.get('extensionsNode_') || null;
-      this.readExtensions_(feature, extensionsNode);
-    }
-    feature.set('extensionsNode_', undefined);
-  }
-};
-
-
-/**
- * Read the first feature from a GPX source.
- * Routes (`<rte>`) are converted into LineString geometries, and tracks (`<trk>`)
- * into MultiLineString. Any properties on route and track waypoints are ignored.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- * @api stable
- */
-ol.format.GPX.prototype.readFeature;
-
-
-/**
- * @inheritDoc
- */
-ol.format.GPX.prototype.readFeatureFromNode = function(node, opt_options) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  if (!ol.array.includes(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) {
-    return null;
-  }
-  var featureReader = ol.format.GPX.FEATURE_READER_[node.localName];
-  if (!featureReader) {
-    return null;
-  }
-  var feature = featureReader(node, [this.getReadOptions(node, opt_options)]);
-  if (!feature) {
-    return null;
-  }
-  this.handleReadExtensions_([feature]);
-  return feature;
-};
-
-
-/**
- * Read all features from a GPX source.
- * Routes (`<rte>`) are converted into LineString geometries, and tracks (`<trk>`)
- * into MultiLineString. Any properties on route and track waypoints are ignored.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.GPX.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.GPX.prototype.readFeaturesFromNode = function(node, opt_options) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  if (!ol.array.includes(ol.format.GPX.NAMESPACE_URIS_, node.namespaceURI)) {
-    return [];
-  }
-  if (node.localName == 'gpx') {
-    /** @type {Array.<ol.Feature>} */
-    var features = ol.xml.pushParseAndPop([], ol.format.GPX.GPX_PARSERS_,
-        node, [this.getReadOptions(node, opt_options)]);
-    if (features) {
-      this.handleReadExtensions_(features);
-      return features;
-    } else {
-      return [];
-    }
-  }
-  return [];
-};
-
-
-/**
- * Read the projection from a GPX source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.proj.Projection} Projection.
- * @api stable
- */
-ol.format.GPX.prototype.readProjection;
-
-
-/**
- * @param {Node} node Node.
- * @param {string} value Value for the link's `href` attribute.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.GPX.writeLink_ = function(node, value, objectStack) {
-  node.setAttribute('href', value);
-  var context = objectStack[objectStack.length - 1];
-  var properties = context['properties'];
-  var link = [
-    properties['linkText'],
-    properties['linkType']
-  ];
-  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */ ({node: node}),
-      ol.format.GPX.LINK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
-      link, objectStack, ol.format.GPX.LINK_SEQUENCE_);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.writeWptType_ = function(node, coordinate, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var parentNode = context.node;
-  ol.DEBUG && console.assert(ol.xml.isNode(parentNode),
-      'parentNode should be an XML node');
-  var namespaceURI = parentNode.namespaceURI;
-  var properties = context['properties'];
-  //FIXME Projection handling
-  ol.xml.setAttributeNS(node, null, 'lat', coordinate[1]);
-  ol.xml.setAttributeNS(node, null, 'lon', coordinate[0]);
-  var geometryLayout = context['geometryLayout'];
-  switch (geometryLayout) {
-    case ol.geom.GeometryLayout.XYZM:
-      if (coordinate[3] !== 0) {
-        properties['time'] = coordinate[3];
-      }
-      // fall through
-    case ol.geom.GeometryLayout.XYZ:
-      if (coordinate[2] !== 0) {
-        properties['ele'] = coordinate[2];
-      }
-      break;
-    case ol.geom.GeometryLayout.XYM:
-      if (coordinate[2] !== 0) {
-        properties['time'] = coordinate[2];
-      }
-      break;
-    default:
-      // pass
-  }
-  var orderedKeys = (node.nodeName == 'rtept') ?
-      ol.format.GPX.RTEPT_TYPE_SEQUENCE_[namespaceURI] :
-      ol.format.GPX.WPT_TYPE_SEQUENCE_[namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */
-      ({node: node, 'properties': properties}),
-      ol.format.GPX.WPT_TYPE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
-      values, objectStack, orderedKeys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.writeRte_ = function(node, feature, objectStack) {
-  var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);
-  var properties = feature.getProperties();
-  var context = {node: node, 'properties': properties};
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    geometry = /** @type {ol.geom.LineString} */
-        (ol.format.Feature.transformWithOptions(geometry, true, options));
-    context['geometryLayout'] = geometry.getLayout();
-    properties['rtept'] = geometry.getCoordinates();
-  }
-  var parentNode = objectStack[objectStack.length - 1].node;
-  var orderedKeys = ol.format.GPX.RTE_SEQUENCE_[parentNode.namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.GPX.RTE_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
-      values, objectStack, orderedKeys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.writeTrk_ = function(node, feature, objectStack) {
-  var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);
-  var properties = feature.getProperties();
-  /** @type {ol.XmlNodeStackItem} */
-  var context = {node: node, 'properties': properties};
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    geometry = /** @type {ol.geom.MultiLineString} */
-        (ol.format.Feature.transformWithOptions(geometry, true, options));
-    properties['trkseg'] = geometry.getLineStrings();
-  }
-  var parentNode = objectStack[objectStack.length - 1].node;
-  var orderedKeys = ol.format.GPX.TRK_SEQUENCE_[parentNode.namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.GPX.TRK_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
-      values, objectStack, orderedKeys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LineString} lineString LineString.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.writeTrkSeg_ = function(node, lineString, objectStack) {
-  /** @type {ol.XmlNodeStackItem} */
-  var context = {node: node, 'geometryLayout': lineString.getLayout(),
-    'properties': {}};
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.GPX.TRKSEG_SERIALIZERS_, ol.format.GPX.TRKSEG_NODE_FACTORY_,
-      lineString.getCoordinates(), objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.GPX.writeWpt_ = function(node, feature, objectStack) {
-  var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);
-  var context = objectStack[objectStack.length - 1];
-  context['properties'] = feature.getProperties();
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    geometry = /** @type {ol.geom.Point} */
-        (ol.format.Feature.transformWithOptions(geometry, true, options));
-    context['geometryLayout'] = geometry.getLayout();
-    ol.format.GPX.writeWptType_(node, geometry.getCoordinates(), objectStack);
-  }
-};
-
-
-/**
- * @const
- * @type {Array.<string>}
- * @private
- */
-ol.format.GPX.LINK_SEQUENCE_ = ['text', 'type'];
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GPX.LINK_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'text': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.GPX.RTE_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, [
-      'name', 'cmt', 'desc', 'src', 'link', 'number', 'type', 'rtept'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GPX.RTE_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_),
-      'number': ol.xml.makeChildAppender(
-          ol.format.XSD.writeNonNegativeIntegerTextNode),
-      'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'rtept': ol.xml.makeArraySerializer(ol.xml.makeChildAppender(
-          ol.format.GPX.writeWptType_))
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.GPX.RTEPT_TYPE_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, [
-      'ele', 'time'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.GPX.TRK_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, [
-      'name', 'cmt', 'desc', 'src', 'link', 'number', 'type', 'trkseg'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GPX.TRK_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_),
-      'number': ol.xml.makeChildAppender(
-          ol.format.XSD.writeNonNegativeIntegerTextNode),
-      'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'trkseg': ol.xml.makeArraySerializer(ol.xml.makeChildAppender(
-          ol.format.GPX.writeTrkSeg_))
-    });
-
-
-/**
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.GPX.TRKSEG_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory('trkpt');
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GPX.TRKSEG_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'trkpt': ol.xml.makeChildAppender(ol.format.GPX.writeWptType_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.GPX.WPT_TYPE_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, [
-      'ele', 'time', 'magvar', 'geoidheight', 'name', 'cmt', 'desc', 'src',
-      'link', 'sym', 'type', 'fix', 'sat', 'hdop', 'vdop', 'pdop',
-      'ageofdgpsdata', 'dgpsid'
-    ]);
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GPX.WPT_TYPE_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'ele': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-      'time': ol.xml.makeChildAppender(ol.format.XSD.writeDateTimeTextNode),
-      'magvar': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-      'geoidheight': ol.xml.makeChildAppender(
-          ol.format.XSD.writeDecimalTextNode),
-      'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'cmt': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'desc': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'src': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'link': ol.xml.makeChildAppender(ol.format.GPX.writeLink_),
-      'sym': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'type': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'fix': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'sat': ol.xml.makeChildAppender(
-          ol.format.XSD.writeNonNegativeIntegerTextNode),
-      'hdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-      'vdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-      'pdop': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-      'ageofdgpsdata': ol.xml.makeChildAppender(
-          ol.format.XSD.writeDecimalTextNode),
-      'dgpsid': ol.xml.makeChildAppender(
-          ol.format.XSD.writeNonNegativeIntegerTextNode)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, string>}
- * @private
- */
-ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_ = {
-  'Point': 'wpt',
-  'LineString': 'rte',
-  'MultiLineString': 'trk'
-};
-
-
-/**
- * @const
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node|undefined} Node.
- * @private
- */
-ol.format.GPX.GPX_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
-  var geometry = /** @type {ol.Feature} */ (value).getGeometry();
-  if (geometry) {
-    var nodeName = ol.format.GPX.GEOMETRY_TYPE_TO_NODENAME_[geometry.getType()];
-    if (nodeName) {
-      var parentNode = objectStack[objectStack.length - 1].node;
-      ol.DEBUG && console.assert(ol.xml.isNode(parentNode),
-          'parentNode should be an XML node');
-      return ol.xml.createElementNS(parentNode.namespaceURI, nodeName);
-    }
-  }
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.GPX.GPX_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.GPX.NAMESPACE_URIS_, {
-      'rte': ol.xml.makeChildAppender(ol.format.GPX.writeRte_),
-      'trk': ol.xml.makeChildAppender(ol.format.GPX.writeTrk_),
-      'wpt': ol.xml.makeChildAppender(ol.format.GPX.writeWpt_)
-    });
-
-
-/**
- * Encode an array of features in the GPX format.
- * LineString geometries are output as routes (`<rte>`), and MultiLineString
- * as tracks (`<trk>`).
- *
- * @function
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} Result.
- * @api stable
- */
-ol.format.GPX.prototype.writeFeatures;
-
-
-/**
- * Encode an array of features in the GPX format as an XML node.
- * LineString geometries are output as routes (`<rte>`), and MultiLineString
- * as tracks (`<trk>`).
- *
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {Node} Node.
- * @api
- */
-ol.format.GPX.prototype.writeFeaturesNode = function(features, opt_options) {
-  opt_options = this.adaptOptions(opt_options);
-  //FIXME Serialize metadata
-  var gpx = ol.xml.createElementNS('http://www.topografix.com/GPX/1/1', 'gpx');
-  var xmlnsUri = 'http://www.w3.org/2000/xmlns/';
-  var xmlSchemaInstanceUri = 'http://www.w3.org/2001/XMLSchema-instance';
-  ol.xml.setAttributeNS(gpx, xmlnsUri, 'xmlns:xsi', xmlSchemaInstanceUri);
-  ol.xml.setAttributeNS(gpx, xmlSchemaInstanceUri, 'xsi:schemaLocation',
-      ol.format.GPX.SCHEMA_LOCATION_);
-  gpx.setAttribute('version', '1.1');
-  gpx.setAttribute('creator', 'OpenLayers 3');
-
-  ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */
-      ({node: gpx}), ol.format.GPX.GPX_SERIALIZERS_,
-      ol.format.GPX.GPX_NODE_FACTORY_, features, [opt_options]);
-  return gpx;
-};
-
-goog.provide('ol.format.TextFeature');
-
-goog.require('ol');
-goog.require('ol.format.Feature');
-goog.require('ol.format.FormatType');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Base class for text feature formats.
- *
- * @constructor
- * @extends {ol.format.Feature}
- */
-ol.format.TextFeature = function() {
-  ol.format.Feature.call(this);
-};
-ol.inherits(ol.format.TextFeature, ol.format.Feature);
-
-
-/**
- * @param {Document|Node|Object|string} source Source.
- * @private
- * @return {string} Text.
- */
-ol.format.TextFeature.prototype.getText_ = function(source) {
-  if (typeof source === 'string') {
-    return source;
-  } else {
-    return '';
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TextFeature.prototype.getType = function() {
-  return ol.format.FormatType.TEXT;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TextFeature.prototype.readFeature = function(source, opt_options) {
-  return this.readFeatureFromText(
-      this.getText_(source), this.adaptOptions(opt_options));
-};
-
-
-/**
- * @abstract
- * @param {string} text Text.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @protected
- * @return {ol.Feature} Feature.
- */
-ol.format.TextFeature.prototype.readFeatureFromText = function(text, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TextFeature.prototype.readFeatures = function(source, opt_options) {
-  return this.readFeaturesFromText(
-      this.getText_(source), this.adaptOptions(opt_options));
-};
-
-
-/**
- * @abstract
- * @param {string} text Text.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @protected
- * @return {Array.<ol.Feature>} Features.
- */
-ol.format.TextFeature.prototype.readFeaturesFromText = function(text, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TextFeature.prototype.readGeometry = function(source, opt_options) {
-  return this.readGeometryFromText(
-      this.getText_(source), this.adaptOptions(opt_options));
-};
-
-
-/**
- * @abstract
- * @param {string} text Text.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @protected
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.TextFeature.prototype.readGeometryFromText = function(text, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TextFeature.prototype.readProjection = function(source) {
-  return this.readProjectionFromText(this.getText_(source));
-};
-
-
-/**
- * @param {string} text Text.
- * @protected
- * @return {ol.proj.Projection} Projection.
- */
-ol.format.TextFeature.prototype.readProjectionFromText = function(text) {
-  return this.defaultDataProjection;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TextFeature.prototype.writeFeature = function(feature, opt_options) {
-  return this.writeFeatureText(feature, this.adaptOptions(opt_options));
-};
-
-
-/**
- * @abstract
- * @param {ol.Feature} feature Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @protected
- * @return {string} Text.
- */
-ol.format.TextFeature.prototype.writeFeatureText = function(feature, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TextFeature.prototype.writeFeatures = function(
-    features, opt_options) {
-  return this.writeFeaturesText(features, this.adaptOptions(opt_options));
-};
-
-
-/**
- * @abstract
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @protected
- * @return {string} Text.
- */
-ol.format.TextFeature.prototype.writeFeaturesText = function(features, opt_options) {};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TextFeature.prototype.writeGeometry = function(
-    geometry, opt_options) {
-  return this.writeGeometryText(geometry, this.adaptOptions(opt_options));
-};
-
-
-/**
- * @abstract
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @protected
- * @return {string} Text.
- */
-ol.format.TextFeature.prototype.writeGeometryText = function(geometry, opt_options) {};
-
-goog.provide('ol.format.IGC');
-
-goog.require('ol');
-goog.require('ol.Feature');
-goog.require('ol.format.Feature');
-goog.require('ol.format.TextFeature');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.LineString');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * Feature format for `*.igc` flight recording files.
- *
- * @constructor
- * @extends {ol.format.TextFeature}
- * @param {olx.format.IGCOptions=} opt_options Options.
- * @api
- */
-ol.format.IGC = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.format.TextFeature.call(this);
-
-  /**
-   * @inheritDoc
-   */
-  this.defaultDataProjection = ol.proj.get('EPSG:4326');
-
-  /**
-   * @private
-   * @type {ol.format.IGC.Z}
-   */
-  this.altitudeMode_ = options.altitudeMode ?
-      options.altitudeMode : ol.format.IGC.Z.NONE;
-
-};
-ol.inherits(ol.format.IGC, ol.format.TextFeature);
-
-
-/**
- * @const
- * @type {Array.<string>}
- * @private
- */
-ol.format.IGC.EXTENSIONS_ = ['.igc'];
-
-
-/**
- * @const
- * @type {RegExp}
- * @private
- */
-ol.format.IGC.B_RECORD_RE_ =
-    /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/;
-
-
-/**
- * @const
- * @type {RegExp}
- * @private
- */
-ol.format.IGC.H_RECORD_RE_ = /^H.([A-Z]{3}).*?:(.*)/;
-
-
-/**
- * @const
- * @type {RegExp}
- * @private
- */
-ol.format.IGC.HFDTE_RECORD_RE_ = /^HFDTE(\d{2})(\d{2})(\d{2})/;
-
-
-/**
- * A regular expression matching the newline characters `\r\n`, `\r` and `\n`.
- *
- * @const
- * @type {RegExp}
- * @private
- */
-ol.format.IGC.NEWLINE_RE_ = /\r\n|\r|\n/;
-
-
-/**
- * @inheritDoc
- */
-ol.format.IGC.prototype.getExtensions = function() {
-  return ol.format.IGC.EXTENSIONS_;
-};
-
-
-/**
- * Read the feature from the IGC source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- * @api
- */
-ol.format.IGC.prototype.readFeature;
-
-
-/**
- * @inheritDoc
- */
-ol.format.IGC.prototype.readFeatureFromText = function(text, opt_options) {
-  var altitudeMode = this.altitudeMode_;
-  var lines = text.split(ol.format.IGC.NEWLINE_RE_);
-  /** @type {Object.<string, string>} */
-  var properties = {};
-  var flatCoordinates = [];
-  var year = 2000;
-  var month = 0;
-  var day = 1;
-  var lastDateTime = -1;
-  var i, ii;
-  for (i = 0, ii = lines.length; i < ii; ++i) {
-    var line = lines[i];
-    var m;
-    if (line.charAt(0) == 'B') {
-      m = ol.format.IGC.B_RECORD_RE_.exec(line);
-      if (m) {
-        var hour = parseInt(m[1], 10);
-        var minute = parseInt(m[2], 10);
-        var second = parseInt(m[3], 10);
-        var y = parseInt(m[4], 10) + parseInt(m[5], 10) / 60000;
-        if (m[6] == 'S') {
-          y = -y;
-        }
-        var x = parseInt(m[7], 10) + parseInt(m[8], 10) / 60000;
-        if (m[9] == 'W') {
-          x = -x;
-        }
-        flatCoordinates.push(x, y);
-        if (altitudeMode != ol.format.IGC.Z.NONE) {
-          var z;
-          if (altitudeMode == ol.format.IGC.Z.GPS) {
-            z = parseInt(m[11], 10);
-          } else if (altitudeMode == ol.format.IGC.Z.BAROMETRIC) {
-            z = parseInt(m[12], 10);
-          } else {
-            ol.DEBUG && console.assert(false, 'Unknown altitude mode.');
-            z = 0;
-          }
-          flatCoordinates.push(z);
-        }
-        var dateTime = Date.UTC(year, month, day, hour, minute, second);
-        // Detect UTC midnight wrap around.
-        if (dateTime < lastDateTime) {
-          dateTime = Date.UTC(year, month, day + 1, hour, minute, second);
-        }
-        flatCoordinates.push(dateTime / 1000);
-        lastDateTime = dateTime;
-      }
-    } else if (line.charAt(0) == 'H') {
-      m = ol.format.IGC.HFDTE_RECORD_RE_.exec(line);
-      if (m) {
-        day = parseInt(m[1], 10);
-        month = parseInt(m[2], 10) - 1;
-        year = 2000 + parseInt(m[3], 10);
-      } else {
-        m = ol.format.IGC.H_RECORD_RE_.exec(line);
-        if (m) {
-          properties[m[1]] = m[2].trim();
-        }
-      }
-    }
-  }
-  if (flatCoordinates.length === 0) {
-    return null;
-  }
-  var lineString = new ol.geom.LineString(null);
-  var layout = altitudeMode == ol.format.IGC.Z.NONE ?
-      ol.geom.GeometryLayout.XYM : ol.geom.GeometryLayout.XYZM;
-  lineString.setFlatCoordinates(layout, flatCoordinates);
-  var feature = new ol.Feature(ol.format.Feature.transformWithOptions(
-      lineString, false, opt_options));
-  feature.setProperties(properties);
-  return feature;
-};
-
-
-/**
- * Read the feature from the source. As IGC sources contain a single
- * feature, this will return the feature in an array.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api
- */
-ol.format.IGC.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.IGC.prototype.readFeaturesFromText = function(text, opt_options) {
-  var feature = this.readFeatureFromText(text, opt_options);
-  if (feature) {
-    return [feature];
-  } else {
-    return [];
-  }
-};
-
-
-/**
- * Read the projection from the IGC source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.proj.Projection} Projection.
- * @api
- */
-ol.format.IGC.prototype.readProjection;
-
-
-/**
- * IGC altitude/z. One of 'barometric', 'gps', 'none'.
- * @enum {string}
- */
-ol.format.IGC.Z = {
-  BAROMETRIC: 'barometric',
-  GPS: 'gps',
-  NONE: 'none'
-};
-
-goog.provide('ol.style.IconImage');
-
-goog.require('ol');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.events.EventTarget');
-goog.require('ol.events.EventType');
-goog.require('ol.Image');
-goog.require('ol.style');
-
-
-/**
- * @constructor
- * @param {Image|HTMLCanvasElement} image Image.
- * @param {string|undefined} src Src.
- * @param {ol.Size} size Size.
- * @param {?string} crossOrigin Cross origin.
- * @param {ol.Image.State} imageState Image state.
- * @param {ol.Color} color Color.
- * @extends {ol.events.EventTarget}
- */
-ol.style.IconImage = function(image, src, size, crossOrigin, imageState,
-                               color) {
-
-  ol.events.EventTarget.call(this);
-
-  /**
-   * @private
-   * @type {Image|HTMLCanvasElement}
-   */
-  this.hitDetectionImage_ = null;
-
-  /**
-   * @private
-   * @type {Image|HTMLCanvasElement}
-   */
-  this.image_ = !image ? new Image() : image;
-
-  if (crossOrigin !== null) {
-    this.image_.crossOrigin = crossOrigin;
-  }
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = color ?
-      /** @type {HTMLCanvasElement} */ (document.createElement('CANVAS')) :
-      null;
-
-  /**
-   * @private
-   * @type {ol.Color}
-   */
-  this.color_ = color;
-
-  /**
-   * @private
-   * @type {Array.<ol.EventsKey>}
-   */
-  this.imageListenerKeys_ = null;
-
-  /**
-   * @private
-   * @type {ol.Image.State}
-   */
-  this.imageState_ = imageState;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.size_ = size;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.src_ = src;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.tainting_ = false;
-  if (this.imageState_ == ol.Image.State.LOADED) {
-    this.determineTainting_();
-  }
-
-};
-ol.inherits(ol.style.IconImage, ol.events.EventTarget);
-
-
-/**
- * @param {Image|HTMLCanvasElement} image Image.
- * @param {string} src Src.
- * @param {ol.Size} size Size.
- * @param {?string} crossOrigin Cross origin.
- * @param {ol.Image.State} imageState Image state.
- * @param {ol.Color} color Color.
- * @return {ol.style.IconImage} Icon image.
- */
-ol.style.IconImage.get = function(image, src, size, crossOrigin, imageState,
-                                   color) {
-  var iconImageCache = ol.style.iconImageCache;
-  var iconImage = iconImageCache.get(src, crossOrigin, color);
-  if (!iconImage) {
-    iconImage = new ol.style.IconImage(
-        image, src, size, crossOrigin, imageState, color);
-    iconImageCache.set(src, crossOrigin, color, iconImage);
-  }
-  return iconImage;
-};
-
-
-/**
- * @private
- */
-ol.style.IconImage.prototype.determineTainting_ = function() {
-  var context = ol.dom.createCanvasContext2D(1, 1);
-  try {
-    context.drawImage(this.image_, 0, 0);
-    context.getImageData(0, 0, 1, 1);
-  } catch (e) {
-    this.tainting_ = true;
-  }
-};
-
-
-/**
- * @private
- */
-ol.style.IconImage.prototype.dispatchChangeEvent_ = function() {
-  this.dispatchEvent(ol.events.EventType.CHANGE);
-};
-
-
-/**
- * @private
- */
-ol.style.IconImage.prototype.handleImageError_ = function() {
-  this.imageState_ = ol.Image.State.ERROR;
-  this.unlistenImage_();
-  this.dispatchChangeEvent_();
-};
-
-
-/**
- * @private
- */
-ol.style.IconImage.prototype.handleImageLoad_ = function() {
-  this.imageState_ = ol.Image.State.LOADED;
-  if (this.size_) {
-    this.image_.width = this.size_[0];
-    this.image_.height = this.size_[1];
-  }
-  this.size_ = [this.image_.width, this.image_.height];
-  this.unlistenImage_();
-  this.determineTainting_();
-  this.replaceColor_();
-  this.dispatchChangeEvent_();
-};
-
-
-/**
- * @param {number} pixelRatio Pixel ratio.
- * @return {Image|HTMLCanvasElement} Image or Canvas element.
- */
-ol.style.IconImage.prototype.getImage = function(pixelRatio) {
-  return this.canvas_ ? this.canvas_ : this.image_;
-};
-
-
-/**
- * @return {ol.Image.State} Image state.
- */
-ol.style.IconImage.prototype.getImageState = function() {
-  return this.imageState_;
-};
-
-
-/**
- * @param {number} pixelRatio Pixel ratio.
- * @return {Image|HTMLCanvasElement} Image element.
- */
-ol.style.IconImage.prototype.getHitDetectionImage = function(pixelRatio) {
-  if (!this.hitDetectionImage_) {
-    if (this.tainting_) {
-      var width = this.size_[0];
-      var height = this.size_[1];
-      var context = ol.dom.createCanvasContext2D(width, height);
-      context.fillRect(0, 0, width, height);
-      this.hitDetectionImage_ = context.canvas;
-    } else {
-      this.hitDetectionImage_ = this.image_;
-    }
-  }
-  return this.hitDetectionImage_;
-};
-
-
-/**
- * @return {ol.Size} Image size.
- */
-ol.style.IconImage.prototype.getSize = function() {
-  return this.size_;
-};
-
-
-/**
- * @return {string|undefined} Image src.
- */
-ol.style.IconImage.prototype.getSrc = function() {
-  return this.src_;
-};
-
-
-/**
- * Load not yet loaded URI.
- */
-ol.style.IconImage.prototype.load = function() {
-  if (this.imageState_ == ol.Image.State.IDLE) {
-    ol.DEBUG && console.assert(this.src_ !== undefined,
-        'this.src_ must not be undefined');
-    ol.DEBUG && console.assert(!this.imageListenerKeys_,
-        'no listener keys existing');
-    this.imageState_ = ol.Image.State.LOADING;
-    this.imageListenerKeys_ = [
-      ol.events.listenOnce(this.image_, ol.events.EventType.ERROR,
-          this.handleImageError_, this),
-      ol.events.listenOnce(this.image_, ol.events.EventType.LOAD,
-          this.handleImageLoad_, this)
-    ];
-    try {
-      this.image_.src = this.src_;
-    } catch (e) {
-      this.handleImageError_();
-    }
-  }
-};
-
-
-/**
- * @private
- */
-ol.style.IconImage.prototype.replaceColor_ = function() {
-  if (this.tainting_ || this.color_ === null) {
-    return;
-  }
-
-  this.canvas_.width = this.image_.width;
-  this.canvas_.height = this.image_.height;
-
-  var ctx = this.canvas_.getContext('2d');
-  ctx.drawImage(this.image_, 0, 0);
-
-  var imgData = ctx.getImageData(0, 0, this.image_.width, this.image_.height);
-  var data = imgData.data;
-  var r = this.color_[0] / 255.0;
-  var g = this.color_[1] / 255.0;
-  var b = this.color_[2] / 255.0;
-
-  for (var i = 0, ii = data.length; i < ii; i += 4) {
-    data[i] *= r;
-    data[i + 1] *= g;
-    data[i + 2] *= b;
-  }
-  ctx.putImageData(imgData, 0, 0);
-};
-
-
-/**
- * Discards event handlers which listen for load completion or errors.
- *
- * @private
- */
-ol.style.IconImage.prototype.unlistenImage_ = function() {
-  this.imageListenerKeys_.forEach(ol.events.unlistenByKey);
-  this.imageListenerKeys_ = null;
-};
-
-goog.provide('ol.style.Icon');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.color');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.Image');
-goog.require('ol.style.IconImage');
-goog.require('ol.style.Image');
-
-
-/**
- * @classdesc
- * Set icon style for vector features.
- *
- * @constructor
- * @param {olx.style.IconOptions=} opt_options Options.
- * @extends {ol.style.Image}
- * @api
- */
-ol.style.Icon = function(opt_options) {
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.anchor_ = options.anchor !== undefined ? options.anchor : [0.5, 0.5];
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.normalizedAnchor_ = null;
-
-  /**
-   * @private
-   * @type {ol.style.Icon.Origin}
-   */
-  this.anchorOrigin_ = options.anchorOrigin !== undefined ?
-      options.anchorOrigin : ol.style.Icon.Origin.TOP_LEFT;
-
-  /**
-   * @private
-   * @type {ol.style.Icon.AnchorUnits}
-   */
-  this.anchorXUnits_ = options.anchorXUnits !== undefined ?
-      options.anchorXUnits : ol.style.Icon.AnchorUnits.FRACTION;
-
-  /**
-   * @private
-   * @type {ol.style.Icon.AnchorUnits}
-   */
-  this.anchorYUnits_ = options.anchorYUnits !== undefined ?
-      options.anchorYUnits : ol.style.Icon.AnchorUnits.FRACTION;
-
-  /**
-   * @private
-   * @type {?string}
-   */
-  this.crossOrigin_ =
-      options.crossOrigin !== undefined ? options.crossOrigin : null;
-
-  /**
-   * @type {Image|HTMLCanvasElement}
-   */
-  var image = options.img !== undefined ? options.img : null;
-
-  /**
-   * @type {ol.Size}
-   */
-  var imgSize = options.imgSize !== undefined ? options.imgSize : null;
-
-  /**
-   * @type {string|undefined}
-   */
-  var src = options.src;
-
-  ol.asserts.assert(!(src !== undefined && image),
-      4); // `image` and `src` cannot be provided at the same time
-  ol.asserts.assert(!image || (image && imgSize),
-      5); // `imgSize` must be set when `image` is provided
-
-  if ((src === undefined || src.length === 0) && image) {
-    src = image.src || ol.getUid(image).toString();
-  }
-  ol.asserts.assert(src !== undefined && src.length > 0,
-      6); // A defined and non-empty `src` or `image` must be provided
-
-  /**
-   * @type {ol.Image.State}
-   */
-  var imageState = options.src !== undefined ?
-      ol.Image.State.IDLE : ol.Image.State.LOADED;
-
-  /**
-   * @private
-   * @type {ol.Color}
-   */
-  this.color_ = options.color !== undefined ? ol.color.asArray(options.color) :
-      null;
-
-  /**
-   * @private
-   * @type {ol.style.IconImage}
-   */
-  this.iconImage_ = ol.style.IconImage.get(
-      image, /** @type {string} */ (src), imgSize, this.crossOrigin_, imageState, this.color_);
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.offset_ = options.offset !== undefined ? options.offset : [0, 0];
-
-  /**
-   * @private
-   * @type {ol.style.Icon.Origin}
-   */
-  this.offsetOrigin_ = options.offsetOrigin !== undefined ?
-      options.offsetOrigin : ol.style.Icon.Origin.TOP_LEFT;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.origin_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.size_ = options.size !== undefined ? options.size : null;
-
-  /**
-   * @type {number}
-   */
-  var opacity = options.opacity !== undefined ? options.opacity : 1;
-
-  /**
-   * @type {boolean}
-   */
-  var rotateWithView = options.rotateWithView !== undefined ?
-      options.rotateWithView : false;
-
-  /**
-   * @type {number}
-   */
-  var rotation = options.rotation !== undefined ? options.rotation : 0;
-
-  /**
-   * @type {number}
-   */
-  var scale = options.scale !== undefined ? options.scale : 1;
-
-  /**
-   * @type {boolean}
-   */
-  var snapToPixel = options.snapToPixel !== undefined ?
-      options.snapToPixel : true;
-
-  ol.style.Image.call(this, {
-    opacity: opacity,
-    rotation: rotation,
-    scale: scale,
-    snapToPixel: snapToPixel,
-    rotateWithView: rotateWithView
-  });
-
-};
-ol.inherits(ol.style.Icon, ol.style.Image);
-
-
-/**
- * Clones the style.
- * @return {ol.style.Icon} The cloned style.
- * @api
- */
-ol.style.Icon.prototype.clone = function() {
-  var oldImage = this.getImage(1);
-  var newImage;
-  if (this.iconImage_.getImageState() === ol.Image.State.LOADED) {
-    if (oldImage.tagName.toUpperCase() === 'IMG') {
-      newImage = /** @type {Image} */ (oldImage.cloneNode(true));
-    } else {
-      newImage = /** @type {HTMLCanvasElement} */ (document.createElement('canvas'));
-      var context = newImage.getContext('2d');
-      newImage.width = oldImage.width;
-      newImage.height = oldImage.height;
-      context.drawImage(oldImage, 0, 0);
-    }
-  }
-  return new ol.style.Icon({
-    anchor: this.anchor_.slice(),
-    anchorOrigin: this.anchorOrigin_,
-    anchorXUnits: this.anchorXUnits_,
-    anchorYUnits: this.anchorYUnits_,
-    crossOrigin: this.crossOrigin_,
-    color: (this.color_ && this.color_.slice) ? this.color_.slice() : this.color_ || undefined,
-    img: newImage ? newImage : undefined,
-    imgSize: newImage ? this.iconImage_.getSize().slice() : undefined,
-    src: newImage ? undefined : this.getSrc(),
-    offset: this.offset_.slice(),
-    offsetOrigin: this.offsetOrigin_,
-    size: this.size_ !== null ? this.size_.slice() : undefined,
-    opacity: this.getOpacity(),
-    scale: this.getScale(),
-    snapToPixel: this.getSnapToPixel(),
-    rotation: this.getRotation(),
-    rotateWithView: this.getRotateWithView()
-  });
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.style.Icon.prototype.getAnchor = function() {
-  if (this.normalizedAnchor_) {
-    return this.normalizedAnchor_;
-  }
-  var anchor = this.anchor_;
-  var size = this.getSize();
-  if (this.anchorXUnits_ == ol.style.Icon.AnchorUnits.FRACTION ||
-      this.anchorYUnits_ == ol.style.Icon.AnchorUnits.FRACTION) {
-    if (!size) {
-      return null;
-    }
-    anchor = this.anchor_.slice();
-    if (this.anchorXUnits_ == ol.style.Icon.AnchorUnits.FRACTION) {
-      anchor[0] *= size[0];
-    }
-    if (this.anchorYUnits_ == ol.style.Icon.AnchorUnits.FRACTION) {
-      anchor[1] *= size[1];
-    }
-  }
-
-  if (this.anchorOrigin_ != ol.style.Icon.Origin.TOP_LEFT) {
-    if (!size) {
-      return null;
-    }
-    if (anchor === this.anchor_) {
-      anchor = this.anchor_.slice();
-    }
-    if (this.anchorOrigin_ == ol.style.Icon.Origin.TOP_RIGHT ||
-        this.anchorOrigin_ == ol.style.Icon.Origin.BOTTOM_RIGHT) {
-      anchor[0] = -anchor[0] + size[0];
-    }
-    if (this.anchorOrigin_ == ol.style.Icon.Origin.BOTTOM_LEFT ||
-        this.anchorOrigin_ == ol.style.Icon.Origin.BOTTOM_RIGHT) {
-      anchor[1] = -anchor[1] + size[1];
-    }
-  }
-  this.normalizedAnchor_ = anchor;
-  return this.normalizedAnchor_;
-};
-
-
-/**
- * Get the image icon.
- * @param {number} pixelRatio Pixel ratio.
- * @return {Image|HTMLCanvasElement} Image or Canvas element.
- * @api
- */
-ol.style.Icon.prototype.getImage = function(pixelRatio) {
-  return this.iconImage_.getImage(pixelRatio);
-};
-
-
-/**
- * Real Image size used.
- * @return {ol.Size} Size.
- */
-ol.style.Icon.prototype.getImageSize = function() {
-  return this.iconImage_.getSize();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Icon.prototype.getHitDetectionImageSize = function() {
-  return this.getImageSize();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Icon.prototype.getImageState = function() {
-  return this.iconImage_.getImageState();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Icon.prototype.getHitDetectionImage = function(pixelRatio) {
-  return this.iconImage_.getHitDetectionImage(pixelRatio);
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.style.Icon.prototype.getOrigin = function() {
-  if (this.origin_) {
-    return this.origin_;
-  }
-  var offset = this.offset_;
-
-  if (this.offsetOrigin_ != ol.style.Icon.Origin.TOP_LEFT) {
-    var size = this.getSize();
-    var iconImageSize = this.iconImage_.getSize();
-    if (!size || !iconImageSize) {
-      return null;
-    }
-    offset = offset.slice();
-    if (this.offsetOrigin_ == ol.style.Icon.Origin.TOP_RIGHT ||
-        this.offsetOrigin_ == ol.style.Icon.Origin.BOTTOM_RIGHT) {
-      offset[0] = iconImageSize[0] - size[0] - offset[0];
-    }
-    if (this.offsetOrigin_ == ol.style.Icon.Origin.BOTTOM_LEFT ||
-        this.offsetOrigin_ == ol.style.Icon.Origin.BOTTOM_RIGHT) {
-      offset[1] = iconImageSize[1] - size[1] - offset[1];
-    }
-  }
-  this.origin_ = offset;
-  return this.origin_;
-};
-
-
-/**
- * Get the image URL.
- * @return {string|undefined} Image src.
- * @api
- */
-ol.style.Icon.prototype.getSrc = function() {
-  return this.iconImage_.getSrc();
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.style.Icon.prototype.getSize = function() {
-  return !this.size_ ? this.iconImage_.getSize() : this.size_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Icon.prototype.listenImageChange = function(listener, thisArg) {
-  return ol.events.listen(this.iconImage_, ol.events.EventType.CHANGE,
-      listener, thisArg);
-};
-
-
-/**
- * Load not yet loaded URI.
- * When rendering a feature with an icon style, the vector renderer will
- * automatically call this method. However, you might want to call this
- * method yourself for preloading or other purposes.
- * @api
- */
-ol.style.Icon.prototype.load = function() {
-  this.iconImage_.load();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.Icon.prototype.unlistenImageChange = function(listener, thisArg) {
-  ol.events.unlisten(this.iconImage_, ol.events.EventType.CHANGE,
-      listener, thisArg);
-};
-
-
-/**
- * Icon anchor units. One of 'fraction', 'pixels'.
- * @enum {string}
- */
-ol.style.Icon.AnchorUnits = {
-  FRACTION: 'fraction',
-  PIXELS: 'pixels'
-};
-
-
-/**
- * Icon origin. One of 'bottom-left', 'bottom-right', 'top-left', 'top-right'.
- * @enum {string}
- */
-ol.style.Icon.Origin = {
-  BOTTOM_LEFT: 'bottom-left',
-  BOTTOM_RIGHT: 'bottom-right',
-  TOP_LEFT: 'top-left',
-  TOP_RIGHT: 'top-right'
-};
-
-goog.provide('ol.style.Text');
-
-
-goog.require('ol.style.Fill');
-
-
-/**
- * @classdesc
- * Set text style for vector features.
- *
- * @constructor
- * @param {olx.style.TextOptions=} opt_options Options.
- * @api
- */
-ol.style.Text = function(opt_options) {
-
-  var options = opt_options || {};
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.font_ = options.font;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.rotation_ = options.rotation;
-
-  /**
-   * @private
-   * @type {boolean|undefined}
-   */
-  this.rotateWithView_ = options.rotateWithView;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.scale_ = options.scale;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.text_ = options.text;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.textAlign_ = options.textAlign;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.textBaseline_ = options.textBaseline;
-
-  /**
-   * @private
-   * @type {ol.style.Fill}
-   */
-  this.fill_ = options.fill !== undefined ? options.fill :
-      new ol.style.Fill({color: ol.style.Text.DEFAULT_FILL_COLOR_});
-
-  /**
-   * @private
-   * @type {ol.style.Stroke}
-   */
-  this.stroke_ = options.stroke !== undefined ? options.stroke : null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.offsetX_ = options.offsetX !== undefined ? options.offsetX : 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.offsetY_ = options.offsetY !== undefined ? options.offsetY : 0;
-};
-
-
-/**
- * The default fill color to use if no fill was set at construction time; a
- * blackish `#333`.
- *
- * @const {string}
- * @private
- */
-ol.style.Text.DEFAULT_FILL_COLOR_ = '#333';
-
-
-/**
- * Clones the style.
- * @return {ol.style.Text} The cloned style.
- * @api
- */
-ol.style.Text.prototype.clone = function() {
-  return new ol.style.Text({
-    font: this.getFont(),
-    rotation: this.getRotation(),
-    rotateWithView: this.getRotateWithView(),
-    scale: this.getScale(),
-    text: this.getText(),
-    textAlign: this.getTextAlign(),
-    textBaseline: this.getTextBaseline(),
-    fill: this.getFill() ? this.getFill().clone() : undefined,
-    stroke: this.getStroke() ? this.getStroke().clone() : undefined,
-    offsetX: this.getOffsetX(),
-    offsetY: this.getOffsetY()
-  });
-};
-
-
-/**
- * Get the font name.
- * @return {string|undefined} Font.
- * @api
- */
-ol.style.Text.prototype.getFont = function() {
-  return this.font_;
-};
-
-
-/**
- * Get the x-offset for the text.
- * @return {number} Horizontal text offset.
- * @api
- */
-ol.style.Text.prototype.getOffsetX = function() {
-  return this.offsetX_;
-};
-
-
-/**
- * Get the y-offset for the text.
- * @return {number} Vertical text offset.
- * @api
- */
-ol.style.Text.prototype.getOffsetY = function() {
-  return this.offsetY_;
-};
-
-
-/**
- * Get the fill style for the text.
- * @return {ol.style.Fill} Fill style.
- * @api
- */
-ol.style.Text.prototype.getFill = function() {
-  return this.fill_;
-};
-
-
-/**
- * Determine whether the text rotates with the map.
- * @return {boolean|undefined} Rotate with map.
- * @api
- */
-ol.style.Text.prototype.getRotateWithView = function() {
-  return this.rotateWithView_;
-};
-
-
-/**
- * Get the text rotation.
- * @return {number|undefined} Rotation.
- * @api
- */
-ol.style.Text.prototype.getRotation = function() {
-  return this.rotation_;
-};
-
-
-/**
- * Get the text scale.
- * @return {number|undefined} Scale.
- * @api
- */
-ol.style.Text.prototype.getScale = function() {
-  return this.scale_;
-};
-
-
-/**
- * Get the stroke style for the text.
- * @return {ol.style.Stroke} Stroke style.
- * @api
- */
-ol.style.Text.prototype.getStroke = function() {
-  return this.stroke_;
-};
-
-
-/**
- * Get the text to be rendered.
- * @return {string|undefined} Text.
- * @api
- */
-ol.style.Text.prototype.getText = function() {
-  return this.text_;
-};
-
-
-/**
- * Get the text alignment.
- * @return {string|undefined} Text align.
- * @api
- */
-ol.style.Text.prototype.getTextAlign = function() {
-  return this.textAlign_;
-};
-
-
-/**
- * Get the text baseline.
- * @return {string|undefined} Text baseline.
- * @api
- */
-ol.style.Text.prototype.getTextBaseline = function() {
-  return this.textBaseline_;
-};
-
-
-/**
- * Set the font.
- *
- * @param {string|undefined} font Font.
- * @api
- */
-ol.style.Text.prototype.setFont = function(font) {
-  this.font_ = font;
-};
-
-
-/**
- * Set the x offset.
- *
- * @param {number} offsetX Horizontal text offset.
- * @api
- */
-ol.style.Text.prototype.setOffsetX = function(offsetX) {
-  this.offsetX_ = offsetX;
-};
-
-
-/**
- * Set the y offset.
- *
- * @param {number} offsetY Vertical text offset.
- * @api
- */
-ol.style.Text.prototype.setOffsetY = function(offsetY) {
-  this.offsetY_ = offsetY;
-};
-
-
-/**
- * Set the fill.
- *
- * @param {ol.style.Fill} fill Fill style.
- * @api
- */
-ol.style.Text.prototype.setFill = function(fill) {
-  this.fill_ = fill;
-};
-
-
-/**
- * Set the rotation.
- *
- * @param {number|undefined} rotation Rotation.
- * @api
- */
-ol.style.Text.prototype.setRotation = function(rotation) {
-  this.rotation_ = rotation;
-};
-
-
-/**
- * Set the scale.
- *
- * @param {number|undefined} scale Scale.
- * @api
- */
-ol.style.Text.prototype.setScale = function(scale) {
-  this.scale_ = scale;
-};
-
-
-/**
- * Set the stroke.
- *
- * @param {ol.style.Stroke} stroke Stroke style.
- * @api
- */
-ol.style.Text.prototype.setStroke = function(stroke) {
-  this.stroke_ = stroke;
-};
-
-
-/**
- * Set the text.
- *
- * @param {string|undefined} text Text.
- * @api
- */
-ol.style.Text.prototype.setText = function(text) {
-  this.text_ = text;
-};
-
-
-/**
- * Set the text alignment.
- *
- * @param {string|undefined} textAlign Text align.
- * @api
- */
-ol.style.Text.prototype.setTextAlign = function(textAlign) {
-  this.textAlign_ = textAlign;
-};
-
-
-/**
- * Set the text baseline.
- *
- * @param {string|undefined} textBaseline Text baseline.
- * @api
- */
-ol.style.Text.prototype.setTextBaseline = function(textBaseline) {
-  this.textBaseline_ = textBaseline;
-};
-
-// FIXME http://earth.google.com/kml/1.0 namespace?
-// FIXME why does node.getAttribute return an unknown type?
-// FIXME serialize arbitrary feature properties
-// FIXME don't parse style if extractStyles is false
-
-goog.provide('ol.format.KML');
-
-goog.require('ol');
-goog.require('ol.Feature');
-goog.require('ol.array');
-goog.require('ol.asserts');
-goog.require('ol.color');
-goog.require('ol.format.Feature');
-goog.require('ol.format.XMLFeature');
-goog.require('ol.format.XSD');
-goog.require('ol.geom.GeometryCollection');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.LinearRing');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.math');
-goog.require('ol.proj');
-goog.require('ol.style.Fill');
-goog.require('ol.style.Icon');
-goog.require('ol.style.Stroke');
-goog.require('ol.style.Style');
-goog.require('ol.style.Text');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the KML format.
- *
- * Note that the KML format uses the URL() constructor. Older browsers such as IE
- * which do not support this will need a URL polyfill to be loaded before use.
- *
- * @constructor
- * @extends {ol.format.XMLFeature}
- * @param {olx.format.KMLOptions=} opt_options Options.
- * @api stable
- */
-ol.format.KML = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.format.XMLFeature.call(this);
-
-  /**
-   * @inheritDoc
-   */
-  this.defaultDataProjection = ol.proj.get('EPSG:4326');
-
-  /**
-   * @private
-   * @type {Array.<ol.style.Style>}
-   */
-  this.defaultStyle_ = options.defaultStyle ?
-      options.defaultStyle :
-      (ol.format.KML.DEFAULT_STYLE_ARRAY_ || ol.format.KML.createStyleDefaults_());
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.extractStyles_ = options.extractStyles !== undefined ?
-      options.extractStyles : true;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.writeStyles_ = options.writeStyles !== undefined ?
-      options.writeStyles : true;
-
-  /**
-   * @private
-   * @type {Object.<string, (Array.<ol.style.Style>|string)>}
-   */
-  this.sharedStyles_ = {};
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.showPointNames_ = options.showPointNames !== undefined ?
-      options.showPointNames : true;
-
-};
-ol.inherits(ol.format.KML, ol.format.XMLFeature);
-
-
-/**
- * @const
- * @type {Array.<string>}
- * @private
- */
-ol.format.KML.EXTENSIONS_ = ['.kml'];
-
-
-/**
- * @const
- * @type {Array.<string>}
- * @private
- */
-ol.format.KML.GX_NAMESPACE_URIS_ = [
-  'http://www.google.com/kml/ext/2.2'
-];
-
-
-/**
- * @const
- * @type {Array.<string>}
- * @private
- */
-ol.format.KML.NAMESPACE_URIS_ = [
-  null,
-  'http://earth.google.com/kml/2.0',
-  'http://earth.google.com/kml/2.1',
-  'http://earth.google.com/kml/2.2',
-  'http://www.opengis.net/kml/2.2'
-];
-
-
-/**
- * @const
- * @type {string}
- * @private
- */
-ol.format.KML.SCHEMA_LOCATION_ = 'http://www.opengis.net/kml/2.2 ' +
-    'https://developers.google.com/kml/schema/kml22gx.xsd';
-
-
-/**
- * @return {Array.<ol.style.Style>} Default style.
- * @private
- */
-ol.format.KML.createStyleDefaults_ = function() {
-  /**
-   * @const
-   * @type {ol.Color}
-   * @private
-   */
-  ol.format.KML.DEFAULT_COLOR_ = [255, 255, 255, 1];
-
-  /**
-   * @const
-   * @type {ol.style.Fill}
-   * @private
-   */
-  ol.format.KML.DEFAULT_FILL_STYLE_ = new ol.style.Fill({
-    color: ol.format.KML.DEFAULT_COLOR_
-  });
-
-  /**
-   * @const
-   * @type {ol.Size}
-   * @private
-   */
-  ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_ = [20, 2]; // FIXME maybe [8, 32] ?
-
-  /**
-   * @const
-   * @type {ol.style.Icon.AnchorUnits}
-   * @private
-   */
-  ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_ =
-      ol.style.Icon.AnchorUnits.PIXELS;
-
-  /**
-   * @const
-   * @type {ol.style.Icon.AnchorUnits}
-   * @private
-   */
-  ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_ =
-      ol.style.Icon.AnchorUnits.PIXELS;
-
-  /**
-   * @const
-   * @type {ol.Size}
-   * @private
-   */
-  ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_ = [64, 64];
-
-  /**
-   * @const
-   * @type {string}
-   * @private
-   */
-  ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_ =
-      'https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png';
-
-  /**
-   * @const
-   * @type {number}
-   * @private
-   */
-  ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_ = 0.5;
-
-  /**
-   * @const
-   * @type {ol.style.Image}
-   * @private
-   */
-  ol.format.KML.DEFAULT_IMAGE_STYLE_ = new ol.style.Icon({
-    anchor: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_,
-    anchorOrigin: ol.style.Icon.Origin.BOTTOM_LEFT,
-    anchorXUnits: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_,
-    anchorYUnits: ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_,
-    crossOrigin: 'anonymous',
-    rotation: 0,
-    scale: ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_,
-    size: ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_,
-    src: ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_
-  });
-
-  /**
-   * @const
-   * @type {string}
-   * @private
-   */
-  ol.format.KML.DEFAULT_NO_IMAGE_STYLE_ = 'NO_IMAGE';
-
-  /**
-   * @const
-   * @type {ol.style.Stroke}
-   * @private
-   */
-  ol.format.KML.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({
-    color: ol.format.KML.DEFAULT_COLOR_,
-    width: 1
-  });
-
-  /**
-   * @const
-   * @type {ol.style.Stroke}
-   * @private
-   */
-  ol.format.KML.DEFAULT_TEXT_STROKE_STYLE_ = new ol.style.Stroke({
-    color: [51, 51, 51, 1],
-    width: 2
-  });
-
-  /**
-   * @const
-   * @type {ol.style.Text}
-   * @private
-   */
-  ol.format.KML.DEFAULT_TEXT_STYLE_ = new ol.style.Text({
-    font: 'bold 16px Helvetica',
-    fill: ol.format.KML.DEFAULT_FILL_STYLE_,
-    stroke: ol.format.KML.DEFAULT_TEXT_STROKE_STYLE_,
-    scale: 0.8
-  });
-
-  /**
-   * @const
-   * @type {ol.style.Style}
-   * @private
-   */
-  ol.format.KML.DEFAULT_STYLE_ = new ol.style.Style({
-    fill: ol.format.KML.DEFAULT_FILL_STYLE_,
-    image: ol.format.KML.DEFAULT_IMAGE_STYLE_,
-    text: ol.format.KML.DEFAULT_TEXT_STYLE_,
-    stroke: ol.format.KML.DEFAULT_STROKE_STYLE_,
-    zIndex: 0
-  });
-
-  /**
-   * @const
-   * @type {Array.<ol.style.Style>}
-   * @private
-   */
-  ol.format.KML.DEFAULT_STYLE_ARRAY_ = [ol.format.KML.DEFAULT_STYLE_];
-
-  return ol.format.KML.DEFAULT_STYLE_ARRAY_;
-};
-
-
-/**
- * @const
- * @type {Object.<string, ol.style.Icon.AnchorUnits>}
- * @private
- */
-ol.format.KML.ICON_ANCHOR_UNITS_MAP_ = {
-  'fraction': ol.style.Icon.AnchorUnits.FRACTION,
-  'pixels': ol.style.Icon.AnchorUnits.PIXELS
-};
-
-
-/**
- * @param {ol.style.Style|undefined} foundStyle Style.
- * @param {string} name Name.
- * @return {ol.style.Style} style Style.
- * @private
- */
-ol.format.KML.createNameStyleFunction_ = function(foundStyle, name) {
-  var textStyle = null;
-  var textOffset = [0, 0];
-  var textAlign = 'start';
-  if (foundStyle.getImage()) {
-    var imageSize = foundStyle.getImage().getImageSize();
-    if (imageSize === null) {
-      imageSize = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_;
-    }
-    var imageScale = foundStyle.getImage().getScale();
-    if (isNaN(imageScale)) {
-      imageScale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
-    }
-    if (imageSize.length == 2) {
-      // Offset the label to be centered to the right of the icon, if there is
-      // one.
-      textOffset[0] = imageScale * imageSize[0] / 2;
-      textOffset[1] = -imageScale * imageSize[1] / 2;
-      textAlign = 'left';
-    }
-  }
-  if (foundStyle.getText() !== null) {
-    // clone the text style, customizing it with name, alignments and offset.
-    // Note that kml does not support many text options that OpenLayers does (rotation, textBaseline).
-    var foundText = foundStyle.getText();
-    textStyle = foundText.clone();
-    textStyle.setFont(foundText.getFont() || ol.format.KML.DEFAULT_TEXT_STYLE_.getFont());
-    textStyle.setScale(foundText.getScale() || ol.format.KML.DEFAULT_TEXT_STYLE_.getScale());
-    textStyle.setFill(foundText.getFill() || ol.format.KML.DEFAULT_TEXT_STYLE_.getFill());
-    textStyle.setStroke(foundText.getStroke() || ol.format.KML.DEFAULT_TEXT_STROKE_STYLE_);
-  } else {
-    textStyle = ol.format.KML.DEFAULT_TEXT_STYLE_.clone();
-  }
-  textStyle.setText(name);
-  textStyle.setOffsetX(textOffset[0]);
-  textStyle.setOffsetY(textOffset[1]);
-  textStyle.setTextAlign(textAlign);
-
-  var nameStyle = new ol.style.Style({
-    text: textStyle
-  });
-  return nameStyle;
-};
-
-
-/**
- * @param {Array.<ol.style.Style>|undefined} style Style.
- * @param {string} styleUrl Style URL.
- * @param {Array.<ol.style.Style>} defaultStyle Default style.
- * @param {Object.<string, (Array.<ol.style.Style>|string)>} sharedStyles Shared
- *          styles.
- * @param {boolean|undefined} showPointNames true to show names for point
- *          placemarks.
- * @return {ol.FeatureStyleFunction} Feature style function.
- * @private
- */
-ol.format.KML.createFeatureStyleFunction_ = function(style, styleUrl,
-    defaultStyle, sharedStyles, showPointNames) {
-
-  return (
-      /**
-       * @param {number} resolution Resolution.
-       * @return {Array.<ol.style.Style>} Style.
-       * @this {ol.Feature}
-       */
-      function(resolution) {
-        var drawName = showPointNames;
-        /** @type {ol.style.Style|undefined} */
-        var nameStyle;
-        var name = '';
-        if (drawName) {
-          if (this.getGeometry()) {
-            drawName = (this.getGeometry().getType() ===
-                        ol.geom.GeometryType.POINT);
-          }
-        }
-
-        if (drawName) {
-          name = /** @type {string} */ (this.get('name'));
-          drawName = drawName && name;
-        }
-
-        if (style) {
-          if (drawName) {
-            nameStyle = ol.format.KML.createNameStyleFunction_(style[0],
-                name);
-            return style.concat(nameStyle);
-          }
-          return style;
-        }
-        if (styleUrl) {
-          var foundStyle = ol.format.KML.findStyle_(styleUrl, defaultStyle,
-              sharedStyles);
-          if (drawName) {
-            nameStyle = ol.format.KML.createNameStyleFunction_(foundStyle[0],
-                name);
-            return foundStyle.concat(nameStyle);
-          }
-          return foundStyle;
-        }
-        if (drawName) {
-          nameStyle = ol.format.KML.createNameStyleFunction_(defaultStyle[0],
-              name);
-          return defaultStyle.concat(nameStyle);
-        }
-        return defaultStyle;
-      });
-};
-
-
-/**
- * @param {Array.<ol.style.Style>|string|undefined} styleValue Style value.
- * @param {Array.<ol.style.Style>} defaultStyle Default style.
- * @param {Object.<string, (Array.<ol.style.Style>|string)>} sharedStyles
- * Shared styles.
- * @return {Array.<ol.style.Style>} Style.
- * @private
- */
-ol.format.KML.findStyle_ = function(styleValue, defaultStyle, sharedStyles) {
-  if (Array.isArray(styleValue)) {
-    return styleValue;
-  } else if (typeof styleValue === 'string') {
-    // KML files in the wild occasionally forget the leading `#` on styleUrls
-    // defined in the same document.  Add a leading `#` if it enables to find
-    // a style.
-    if (!(styleValue in sharedStyles) && ('#' + styleValue in sharedStyles)) {
-      styleValue = '#' + styleValue;
-    }
-    return ol.format.KML.findStyle_(
-        sharedStyles[styleValue], defaultStyle, sharedStyles);
-  } else {
-    return defaultStyle;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @private
- * @return {ol.Color|undefined} Color.
- */
-ol.format.KML.readColor_ = function(node) {
-  var s = ol.xml.getAllTextContent(node, false);
-  // The KML specification states that colors should not include a leading `#`
-  // but we tolerate them.
-  var m = /^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(s);
-  if (m) {
-    var hexColor = m[1];
-    return [
-      parseInt(hexColor.substr(6, 2), 16),
-      parseInt(hexColor.substr(4, 2), 16),
-      parseInt(hexColor.substr(2, 2), 16),
-      parseInt(hexColor.substr(0, 2), 16) / 255
-    ];
-
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @private
- * @return {Array.<number>|undefined} Flat coordinates.
- */
-ol.format.KML.readFlatCoordinates_ = function(node) {
-  var s = ol.xml.getAllTextContent(node, false);
-  var flatCoordinates = [];
-  // The KML specification states that coordinate tuples should not include
-  // spaces, but we tolerate them.
-  var re =
-      /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i;
-  var m;
-  while ((m = re.exec(s))) {
-    var x = parseFloat(m[1]);
-    var y = parseFloat(m[2]);
-    var z = m[3] ? parseFloat(m[3]) : 0;
-    flatCoordinates.push(x, y, z);
-    s = s.substr(m[0].length);
-  }
-  if (s !== '') {
-    return undefined;
-  }
-  return flatCoordinates;
-};
-
-
-/**
- * @param {Node} node Node.
- * @private
- * @return {string} URI.
- */
-ol.format.KML.readURI_ = function(node) {
-  var s = ol.xml.getAllTextContent(node, false).trim();
-  if (node.baseURI) {
-    var url = new URL(s, node.baseURI);
-    return url.href;
-  } else {
-    return s;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @private
- * @return {ol.KMLVec2_} Vec2.
- */
-ol.format.KML.readVec2_ = function(node) {
-  var xunits = node.getAttribute('xunits');
-  var yunits = node.getAttribute('yunits');
-  return {
-    x: parseFloat(node.getAttribute('x')),
-    xunits: ol.format.KML.ICON_ANCHOR_UNITS_MAP_[xunits],
-    y: parseFloat(node.getAttribute('y')),
-    yunits: ol.format.KML.ICON_ANCHOR_UNITS_MAP_[yunits]
-  };
-};
-
-
-/**
- * @param {Node} node Node.
- * @private
- * @return {number|undefined} Scale.
- */
-ol.format.KML.readScale_ = function(node) {
-  return ol.format.XSD.readDecimal(node);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<ol.style.Style>|string|undefined} StyleMap.
- */
-ol.format.KML.readStyleMapValue_ = function(node, objectStack) {
-  return ol.xml.pushParseAndPop(undefined,
-      ol.format.KML.STYLE_MAP_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.IconStyleParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be an ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'IconStyle',
-      'localName should be IconStyle');
-  // FIXME refreshMode
-  // FIXME refreshInterval
-  // FIXME viewRefreshTime
-  // FIXME viewBoundScale
-  // FIXME viewFormat
-  // FIXME httpQuery
-  var object = ol.xml.pushParseAndPop(
-      {}, ol.format.KML.ICON_STYLE_PARSERS_, node, objectStack);
-  if (!object) {
-    return;
-  }
-  var styleObject = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  var IconObject = 'Icon' in object ? object['Icon'] : {};
-  var drawIcon = (!('Icon' in object) || Object.keys(IconObject).length > 0);
-  var src;
-  var href = /** @type {string|undefined} */
-      (IconObject['href']);
-  if (href) {
-    src = href;
-  } else if (drawIcon) {
-    src = ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_;
-  }
-  var anchor, anchorXUnits, anchorYUnits;
-  var hotSpot = /** @type {ol.KMLVec2_|undefined} */
-      (object['hotSpot']);
-  if (hotSpot) {
-    anchor = [hotSpot.x, hotSpot.y];
-    anchorXUnits = hotSpot.xunits;
-    anchorYUnits = hotSpot.yunits;
-  } else if (src === ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {
-    anchor = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_;
-    anchorXUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS_;
-    anchorYUnits = ol.format.KML.DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS_;
-  } else if (/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(src)) {
-    anchor = [0.5, 0];
-    anchorXUnits = ol.style.Icon.AnchorUnits.FRACTION;
-    anchorYUnits = ol.style.Icon.AnchorUnits.FRACTION;
-  }
-
-  var offset;
-  var x = /** @type {number|undefined} */
-      (IconObject['x']);
-  var y = /** @type {number|undefined} */
-      (IconObject['y']);
-  if (x !== undefined && y !== undefined) {
-    offset = [x, y];
-  }
-
-  var size;
-  var w = /** @type {number|undefined} */
-      (IconObject['w']);
-  var h = /** @type {number|undefined} */
-      (IconObject['h']);
-  if (w !== undefined && h !== undefined) {
-    size = [w, h];
-  }
-
-  var rotation;
-  var heading = /** @type {number} */
-      (object['heading']);
-  if (heading !== undefined) {
-    rotation = ol.math.toRadians(heading);
-  }
-
-  var scale = /** @type {number|undefined} */
-      (object['scale']);
-  if (isNaN(scale) || scale === undefined) {
-    scale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
-  } else {
-    scale = scale * ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
-  }
-
-  if (drawIcon) {
-    if (src == ol.format.KML.DEFAULT_IMAGE_STYLE_SRC_) {
-      size = ol.format.KML.DEFAULT_IMAGE_STYLE_SIZE_;
-      if (scale === undefined) {
-        scale = ol.format.KML.DEFAULT_IMAGE_SCALE_MULTIPLIER_;
-      }
-    }
-
-    var imageStyle = new ol.style.Icon({
-      anchor: anchor,
-      anchorOrigin: ol.style.Icon.Origin.BOTTOM_LEFT,
-      anchorXUnits: anchorXUnits,
-      anchorYUnits: anchorYUnits,
-      crossOrigin: 'anonymous', // FIXME should this be configurable?
-      offset: offset,
-      offsetOrigin: ol.style.Icon.Origin.BOTTOM_LEFT,
-      rotation: rotation,
-      scale: scale,
-      size: size,
-      src: src
-    });
-    styleObject['imageStyle'] = imageStyle;
-  } else {
-    // handle the case when we explicitly want to draw no icon.
-    styleObject['imageStyle'] = ol.format.KML.DEFAULT_NO_IMAGE_STYLE_;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.LabelStyleParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LabelStyle',
-      'localName should be LabelStyle');
-  // FIXME colorMode
-  var object = ol.xml.pushParseAndPop(
-      {}, ol.format.KML.LABEL_STYLE_PARSERS_, node, objectStack);
-  if (!object) {
-    return;
-  }
-  var styleObject = objectStack[objectStack.length - 1];
-  var textStyle = new ol.style.Text({
-    fill: new ol.style.Fill({
-      color: /** @type {ol.Color} */
-          ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_)
-    }),
-    scale: /** @type {number|undefined} */
-        (object['scale'])
-  });
-  styleObject['textStyle'] = textStyle;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.LineStyleParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LineStyle',
-      'localName should be LineStyle');
-  // FIXME colorMode
-  // FIXME gx:outerColor
-  // FIXME gx:outerWidth
-  // FIXME gx:physicalWidth
-  // FIXME gx:labelVisibility
-  var object = ol.xml.pushParseAndPop(
-      {}, ol.format.KML.LINE_STYLE_PARSERS_, node, objectStack);
-  if (!object) {
-    return;
-  }
-  var styleObject = objectStack[objectStack.length - 1];
-  var strokeStyle = new ol.style.Stroke({
-    color: /** @type {ol.Color} */
-        ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_),
-    width: /** @type {number} */ ('width' in object ? object['width'] : 1)
-  });
-  styleObject['strokeStyle'] = strokeStyle;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.PolyStyleParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'PolyStyle',
-      'localName should be PolyStyle');
-  // FIXME colorMode
-  var object = ol.xml.pushParseAndPop(
-      {}, ol.format.KML.POLY_STYLE_PARSERS_, node, objectStack);
-  if (!object) {
-    return;
-  }
-  var styleObject = objectStack[objectStack.length - 1];
-  var fillStyle = new ol.style.Fill({
-    color: /** @type {ol.Color} */
-        ('color' in object ? object['color'] : ol.format.KML.DEFAULT_COLOR_)
-  });
-  styleObject['fillStyle'] = fillStyle;
-  var fill = /** @type {boolean|undefined} */ (object['fill']);
-  if (fill !== undefined) {
-    styleObject['fill'] = fill;
-  }
-  var outline =
-      /** @type {boolean|undefined} */ (object['outline']);
-  if (outline !== undefined) {
-    styleObject['outline'] = outline;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>} LinearRing flat coordinates.
- */
-ol.format.KML.readFlatLinearRing_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LinearRing',
-      'localName should be LinearRing');
-  return ol.xml.pushParseAndPop(null,
-      ol.format.KML.FLAT_LINEAR_RING_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.gxCoordParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(ol.array.includes(
-      ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI),
-      'namespaceURI of the node should be known to the KML parser');
-  ol.DEBUG && console.assert(node.localName == 'coord', 'localName should be coord');
-  var gxTrackObject = /** @type {ol.KMLGxTrackObject_} */
-      (objectStack[objectStack.length - 1]);
-  var flatCoordinates = gxTrackObject.flatCoordinates;
-  var s = ol.xml.getAllTextContent(node, false);
-  var re =
-      /^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i;
-  var m = re.exec(s);
-  if (m) {
-    var x = parseFloat(m[1]);
-    var y = parseFloat(m[2]);
-    var z = parseFloat(m[3]);
-    flatCoordinates.push(x, y, z, 0);
-  } else {
-    flatCoordinates.push(0, 0, 0, 0);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.MultiLineString|undefined} MultiLineString.
- */
-ol.format.KML.readGxMultiTrack_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(ol.array.includes(
-      ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI),
-      'namespaceURI of the node should be known to the KML parser');
-  ol.DEBUG && console.assert(node.localName == 'MultiTrack',
-      'localName should be MultiTrack');
-  var lineStrings = ol.xml.pushParseAndPop([],
-      ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_, node, objectStack);
-  if (!lineStrings) {
-    return undefined;
-  }
-  var multiLineString = new ol.geom.MultiLineString(null);
-  multiLineString.setLineStrings(lineStrings);
-  return multiLineString;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.LineString|undefined} LineString.
- */
-ol.format.KML.readGxTrack_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(ol.array.includes(
-      ol.format.KML.GX_NAMESPACE_URIS_, node.namespaceURI),
-      'namespaceURI of the node should be known to the KML parser');
-  ol.DEBUG && console.assert(node.localName == 'Track', 'localName should be Track');
-  var gxTrackObject = ol.xml.pushParseAndPop(
-      /** @type {ol.KMLGxTrackObject_} */ ({
-        flatCoordinates: [],
-        whens: []
-      }), ol.format.KML.GX_TRACK_PARSERS_, node, objectStack);
-  if (!gxTrackObject) {
-    return undefined;
-  }
-  var flatCoordinates = gxTrackObject.flatCoordinates;
-  var whens = gxTrackObject.whens;
-  ol.DEBUG && console.assert(flatCoordinates.length / 4 == whens.length,
-      'the length of the flatCoordinates array divided by 4 should be the ' +
-      'length of the whens array');
-  var i, ii;
-  for (i = 0, ii = Math.min(flatCoordinates.length, whens.length); i < ii;
-       ++i) {
-    flatCoordinates[4 * i + 3] = whens[i];
-  }
-  var lineString = new ol.geom.LineString(null);
-  lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZM, flatCoordinates);
-  return lineString;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object} Icon object.
- */
-ol.format.KML.readIcon_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Icon', 'localName should be Icon');
-  var iconObject = ol.xml.pushParseAndPop(
-      {}, ol.format.KML.ICON_PARSERS_, node, objectStack);
-  if (iconObject) {
-    return iconObject;
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<number>} Flat coordinates.
- */
-ol.format.KML.readFlatCoordinatesFromNode_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  return ol.xml.pushParseAndPop(null,
-      ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.LineString|undefined} LineString.
- */
-ol.format.KML.readLineString_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LineString',
-      'localName should be LineString');
-  var properties = ol.xml.pushParseAndPop({},
-      ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_, node,
-      objectStack);
-  var flatCoordinates =
-      ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
-  if (flatCoordinates) {
-    var lineString = new ol.geom.LineString(null);
-    lineString.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
-    lineString.setProperties(properties);
-    return lineString;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.Polygon|undefined} Polygon.
- */
-ol.format.KML.readLinearRing_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'LinearRing',
-      'localName should be LinearRing');
-  var properties = ol.xml.pushParseAndPop({},
-      ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_, node,
-      objectStack);
-  var flatCoordinates =
-      ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
-  if (flatCoordinates) {
-    var polygon = new ol.geom.Polygon(null);
-    polygon.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates,
-        [flatCoordinates.length]);
-    polygon.setProperties(properties);
-    return polygon;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.KML.readMultiGeometry_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'MultiGeometry',
-      'localName should be MultiGeometry');
-  var geometries = ol.xml.pushParseAndPop([],
-      ol.format.KML.MULTI_GEOMETRY_PARSERS_, node, objectStack);
-  if (!geometries) {
-    return null;
-  }
-  if (geometries.length === 0) {
-    return new ol.geom.GeometryCollection(geometries);
-  }
-  /** @type {ol.geom.Geometry} */
-  var multiGeometry;
-  var homogeneous = true;
-  var type = geometries[0].getType();
-  var geometry, i, ii;
-  for (i = 1, ii = geometries.length; i < ii; ++i) {
-    geometry = geometries[i];
-    if (geometry.getType() != type) {
-      homogeneous = false;
-      break;
-    }
-  }
-  if (homogeneous) {
-    var layout;
-    var flatCoordinates;
-    if (type == ol.geom.GeometryType.POINT) {
-      var point = geometries[0];
-      layout = point.getLayout();
-      flatCoordinates = point.getFlatCoordinates();
-      for (i = 1, ii = geometries.length; i < ii; ++i) {
-        geometry = geometries[i];
-        ol.DEBUG && console.assert(geometry.getLayout() == layout,
-            'geometry layout should be consistent');
-        ol.array.extend(flatCoordinates, geometry.getFlatCoordinates());
-      }
-      multiGeometry = new ol.geom.MultiPoint(null);
-      multiGeometry.setFlatCoordinates(layout, flatCoordinates);
-      ol.format.KML.setCommonGeometryProperties_(multiGeometry, geometries);
-    } else if (type == ol.geom.GeometryType.LINE_STRING) {
-      multiGeometry = new ol.geom.MultiLineString(null);
-      multiGeometry.setLineStrings(geometries);
-      ol.format.KML.setCommonGeometryProperties_(multiGeometry, geometries);
-    } else if (type == ol.geom.GeometryType.POLYGON) {
-      multiGeometry = new ol.geom.MultiPolygon(null);
-      multiGeometry.setPolygons(geometries);
-      ol.format.KML.setCommonGeometryProperties_(multiGeometry, geometries);
-    } else if (type == ol.geom.GeometryType.GEOMETRY_COLLECTION) {
-      multiGeometry = new ol.geom.GeometryCollection(geometries);
-    } else {
-      ol.asserts.assert(false, 37); // Unknown geometry type found
-    }
-  } else {
-    multiGeometry = new ol.geom.GeometryCollection(geometries);
-  }
-  return /** @type {ol.geom.Geometry} */ (multiGeometry);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.Point|undefined} Point.
- */
-ol.format.KML.readPoint_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Point', 'localName should be Point');
-  var properties = ol.xml.pushParseAndPop({},
-      ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_, node,
-      objectStack);
-  var flatCoordinates =
-      ol.format.KML.readFlatCoordinatesFromNode_(node, objectStack);
-  if (flatCoordinates) {
-    var point = new ol.geom.Point(null);
-    ol.DEBUG && console.assert(flatCoordinates.length == 3,
-        'flatCoordinates should have a length of 3');
-    point.setFlatCoordinates(ol.geom.GeometryLayout.XYZ, flatCoordinates);
-    point.setProperties(properties);
-    return point;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.geom.Polygon|undefined} Polygon.
- */
-ol.format.KML.readPolygon_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Polygon',
-      'localName should be Polygon');
-  var properties = ol.xml.pushParseAndPop(/** @type {Object<string,*>} */ ({}),
-      ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_, node,
-      objectStack);
-  var flatLinearRings = ol.xml.pushParseAndPop([null],
-      ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_, node, objectStack);
-  if (flatLinearRings && flatLinearRings[0]) {
-    var polygon = new ol.geom.Polygon(null);
-    var flatCoordinates = flatLinearRings[0];
-    var ends = [flatCoordinates.length];
-    var i, ii;
-    for (i = 1, ii = flatLinearRings.length; i < ii; ++i) {
-      ol.array.extend(flatCoordinates, flatLinearRings[i]);
-      ends.push(flatCoordinates.length);
-    }
-    polygon.setFlatCoordinates(
-        ol.geom.GeometryLayout.XYZ, flatCoordinates, ends);
-    polygon.setProperties(properties);
-    return polygon;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<ol.style.Style>} Style.
- */
-ol.format.KML.readStyle_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Style', 'localName should be Style');
-  var styleObject = ol.xml.pushParseAndPop(
-      {}, ol.format.KML.STYLE_PARSERS_, node, objectStack);
-  if (!styleObject) {
-    return null;
-  }
-  var fillStyle = /** @type {ol.style.Fill} */
-      ('fillStyle' in styleObject ?
-          styleObject['fillStyle'] : ol.format.KML.DEFAULT_FILL_STYLE_);
-  var fill = /** @type {boolean|undefined} */ (styleObject['fill']);
-  if (fill !== undefined && !fill) {
-    fillStyle = null;
-  }
-  var imageStyle = /** @type {ol.style.Image} */
-      ('imageStyle' in styleObject ?
-          styleObject['imageStyle'] : ol.format.KML.DEFAULT_IMAGE_STYLE_);
-  if (imageStyle == ol.format.KML.DEFAULT_NO_IMAGE_STYLE_) {
-    imageStyle = undefined;
-  }
-  var textStyle = /** @type {ol.style.Text} */
-      ('textStyle' in styleObject ?
-          styleObject['textStyle'] : ol.format.KML.DEFAULT_TEXT_STYLE_);
-  var strokeStyle = /** @type {ol.style.Stroke} */
-      ('strokeStyle' in styleObject ?
-          styleObject['strokeStyle'] : ol.format.KML.DEFAULT_STROKE_STYLE_);
-  var outline = /** @type {boolean|undefined} */
-      (styleObject['outline']);
-  if (outline !== undefined && !outline) {
-    strokeStyle = null;
-  }
-  return [new ol.style.Style({
-    fill: fillStyle,
-    image: imageStyle,
-    stroke: strokeStyle,
-    text: textStyle,
-    zIndex: undefined // FIXME
-  })];
-};
-
-
-/**
- * Reads an array of geometries and creates arrays for common geometry
- * properties. Then sets them to the multi geometry.
- * @param {ol.geom.MultiPoint|ol.geom.MultiLineString|ol.geom.MultiPolygon}
- *     multiGeometry A multi-geometry.
- * @param {Array.<ol.geom.Geometry>} geometries List of geometries.
- * @private
- */
-ol.format.KML.setCommonGeometryProperties_ = function(multiGeometry,
-    geometries) {
-  var ii = geometries.length;
-  var extrudes = new Array(geometries.length);
-  var altitudeModes = new Array(geometries.length);
-  var geometry, i, hasExtrude, hasAltitudeMode;
-  hasExtrude = hasAltitudeMode = false;
-  for (i = 0; i < ii; ++i) {
-    geometry = geometries[i];
-    extrudes[i] = geometry.get('extrude');
-    altitudeModes[i] = geometry.get('altitudeMode');
-    hasExtrude = hasExtrude || extrudes[i] !== undefined;
-    hasAltitudeMode = hasAltitudeMode || altitudeModes[i];
-  }
-  if (hasExtrude) {
-    multiGeometry.set('extrude', extrudes);
-  }
-  if (hasAltitudeMode) {
-    multiGeometry.set('altitudeMode', altitudeModes);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.DataParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Data', 'localName should be Data');
-  var name = node.getAttribute('name');
-  if (name !== null) {
-    var data = ol.xml.pushParseAndPop(
-        undefined, ol.format.KML.DATA_PARSERS_, node, objectStack);
-    if (data) {
-      var featureObject =
-          /** @type {Object} */ (objectStack[objectStack.length - 1]);
-      featureObject[name] = data;
-    }
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.ExtendedDataParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'ExtendedData',
-      'localName should be ExtendedData');
-  ol.xml.parseNode(ol.format.KML.EXTENDED_DATA_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.PairDataParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Pair', 'localName should be Pair');
-  var pairObject = ol.xml.pushParseAndPop(
-      {}, ol.format.KML.PAIR_PARSERS_, node, objectStack);
-  if (!pairObject) {
-    return;
-  }
-  var key = /** @type {string|undefined} */
-      (pairObject['key']);
-  if (key && key == 'normal') {
-    var styleUrl = /** @type {string|undefined} */
-        (pairObject['styleUrl']);
-    if (styleUrl) {
-      objectStack[objectStack.length - 1] = styleUrl;
-    }
-    var Style = /** @type {ol.style.Style} */
-        (pairObject['Style']);
-    if (Style) {
-      objectStack[objectStack.length - 1] = Style;
-    }
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.PlacemarkStyleMapParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'StyleMap',
-      'localName should be StyleMap');
-  var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack);
-  if (!styleMapValue) {
-    return;
-  }
-  var placemarkObject = objectStack[objectStack.length - 1];
-  if (Array.isArray(styleMapValue)) {
-    placemarkObject['Style'] = styleMapValue;
-  } else if (typeof styleMapValue === 'string') {
-    placemarkObject['styleUrl'] = styleMapValue;
-  } else {
-    ol.asserts.assert(false, 38); // `styleMapValue` has an unknown type
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.SchemaDataParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'SchemaData',
-      'localName should be SchemaData');
-  ol.xml.parseNode(ol.format.KML.SCHEMA_DATA_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.SimpleDataParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'SimpleData',
-      'localName should be SimpleData');
-  var name = node.getAttribute('name');
-  if (name !== null) {
-    var data = ol.format.XSD.readString(node);
-    var featureObject =
-        /** @type {Object} */ (objectStack[objectStack.length - 1]);
-    featureObject[name] = data;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.innerBoundaryIsParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'innerBoundaryIs',
-      'localName should be innerBoundaryIs');
-  /** @type {Array.<number>|undefined} */
-  var flatLinearRing = ol.xml.pushParseAndPop(undefined,
-      ol.format.KML.INNER_BOUNDARY_IS_PARSERS_, node, objectStack);
-  if (flatLinearRing) {
-    var flatLinearRings = /** @type {Array.<Array.<number>>} */
-        (objectStack[objectStack.length - 1]);
-    ol.DEBUG && console.assert(Array.isArray(flatLinearRings),
-        'flatLinearRings should be an array');
-    ol.DEBUG && console.assert(flatLinearRings.length > 0,
-        'flatLinearRings array should not be empty');
-    flatLinearRings.push(flatLinearRing);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.outerBoundaryIsParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'outerBoundaryIs',
-      'localName should be outerBoundaryIs');
-  /** @type {Array.<number>|undefined} */
-  var flatLinearRing = ol.xml.pushParseAndPop(undefined,
-      ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_, node, objectStack);
-  if (flatLinearRing) {
-    var flatLinearRings = /** @type {Array.<Array.<number>>} */
-        (objectStack[objectStack.length - 1]);
-    ol.DEBUG && console.assert(Array.isArray(flatLinearRings),
-        'flatLinearRings should be an array');
-    ol.DEBUG && console.assert(flatLinearRings.length > 0,
-        'flatLinearRings array should not be empty');
-    flatLinearRings[0] = flatLinearRing;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.LinkParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Link', 'localName should be Link');
-  ol.xml.parseNode(ol.format.KML.LINK_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.whenParser_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'when', 'localName should be when');
-  var gxTrackObject = /** @type {ol.KMLGxTrackObject_} */
-      (objectStack[objectStack.length - 1]);
-  var whens = gxTrackObject.whens;
-  var s = ol.xml.getAllTextContent(node, false);
-  var when = Date.parse(s);
-  whens.push(isNaN(when) ? 0 : when);
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.DATA_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'value': ol.xml.makeReplacer(ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.EXTENDED_DATA_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'Data': ol.format.KML.DataParser_,
-      'SchemaData': ol.format.KML.SchemaDataParser_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.EXTRUDE_AND_ALTITUDE_MODE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'extrude': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
-      'altitudeMode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.FLAT_LINEAR_RING_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'coordinates': ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.FLAT_LINEAR_RINGS_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'innerBoundaryIs': ol.format.KML.innerBoundaryIsParser_,
-      'outerBoundaryIs': ol.format.KML.outerBoundaryIsParser_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.GX_TRACK_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'when': ol.format.KML.whenParser_
-    }, ol.xml.makeStructureNS(
-        ol.format.KML.GX_NAMESPACE_URIS_, {
-          'coord': ol.format.KML.gxCoordParser_
-        }));
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.GEOMETRY_FLAT_COORDINATES_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'coordinates': ol.xml.makeReplacer(ol.format.KML.readFlatCoordinates_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.ICON_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'href': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)
-    }, ol.xml.makeStructureNS(
-        ol.format.KML.GX_NAMESPACE_URIS_, {
-          'x': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-          'y': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-          'w': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-          'h': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)
-        }));
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.ICON_STYLE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'Icon': ol.xml.makeObjectPropertySetter(ol.format.KML.readIcon_),
-      'heading': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal),
-      'hotSpot': ol.xml.makeObjectPropertySetter(ol.format.KML.readVec2_),
-      'scale': ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.INNER_BOUNDARY_IS_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'LinearRing': ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.LABEL_STYLE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),
-      'scale': ol.xml.makeObjectPropertySetter(ol.format.KML.readScale_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.LINE_STYLE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),
-      'width': ol.xml.makeObjectPropertySetter(ol.format.XSD.readDecimal)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.MULTI_GEOMETRY_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'LineString': ol.xml.makeArrayPusher(ol.format.KML.readLineString_),
-      'LinearRing': ol.xml.makeArrayPusher(ol.format.KML.readLinearRing_),
-      'MultiGeometry': ol.xml.makeArrayPusher(ol.format.KML.readMultiGeometry_),
-      'Point': ol.xml.makeArrayPusher(ol.format.KML.readPoint_),
-      'Polygon': ol.xml.makeArrayPusher(ol.format.KML.readPolygon_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.GX_MULTITRACK_GEOMETRY_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.GX_NAMESPACE_URIS_, {
-      'Track': ol.xml.makeArrayPusher(ol.format.KML.readGxTrack_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.NETWORK_LINK_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'ExtendedData': ol.format.KML.ExtendedDataParser_,
-      'Link': ol.format.KML.LinkParser_,
-      'address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'description': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'open': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
-      'phoneNumber': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'visibility': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.LINK_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'href': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.OUTER_BOUNDARY_IS_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'LinearRing': ol.xml.makeReplacer(ol.format.KML.readFlatLinearRing_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.PAIR_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'Style': ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_),
-      'key': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'styleUrl': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.PLACEMARK_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'ExtendedData': ol.format.KML.ExtendedDataParser_,
-      'MultiGeometry': ol.xml.makeObjectPropertySetter(
-          ol.format.KML.readMultiGeometry_, 'geometry'),
-      'LineString': ol.xml.makeObjectPropertySetter(
-          ol.format.KML.readLineString_, 'geometry'),
-      'LinearRing': ol.xml.makeObjectPropertySetter(
-          ol.format.KML.readLinearRing_, 'geometry'),
-      'Point': ol.xml.makeObjectPropertySetter(
-          ol.format.KML.readPoint_, 'geometry'),
-      'Polygon': ol.xml.makeObjectPropertySetter(
-          ol.format.KML.readPolygon_, 'geometry'),
-      'Style': ol.xml.makeObjectPropertySetter(ol.format.KML.readStyle_),
-      'StyleMap': ol.format.KML.PlacemarkStyleMapParser_,
-      'address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'description': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'open': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
-      'phoneNumber': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'styleUrl': ol.xml.makeObjectPropertySetter(ol.format.KML.readURI_),
-      'visibility': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)
-    }, ol.xml.makeStructureNS(
-        ol.format.KML.GX_NAMESPACE_URIS_, {
-          'MultiTrack': ol.xml.makeObjectPropertySetter(
-              ol.format.KML.readGxMultiTrack_, 'geometry'),
-          'Track': ol.xml.makeObjectPropertySetter(
-              ol.format.KML.readGxTrack_, 'geometry')
-        }
-    ));
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.POLY_STYLE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'color': ol.xml.makeObjectPropertySetter(ol.format.KML.readColor_),
-      'fill': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean),
-      'outline': ol.xml.makeObjectPropertySetter(ol.format.XSD.readBoolean)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.SCHEMA_DATA_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'SimpleData': ol.format.KML.SimpleDataParser_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.STYLE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'IconStyle': ol.format.KML.IconStyleParser_,
-      'LabelStyle': ol.format.KML.LabelStyleParser_,
-      'LineStyle': ol.format.KML.LineStyleParser_,
-      'PolyStyle': ol.format.KML.PolyStyleParser_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.KML.STYLE_MAP_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'Pair': ol.format.KML.PairDataParser_
-    });
-
-
-/**
- * @inheritDoc
- */
-ol.format.KML.prototype.getExtensions = function() {
-  return ol.format.KML.EXTENSIONS_;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<ol.Feature>|undefined} Features.
- */
-ol.format.KML.prototype.readDocumentOrFolder_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  var localName = node.localName;
-  ol.DEBUG && console.assert(localName == 'Document' || localName == 'Folder',
-      'localName should be Document or Folder');
-  // FIXME use scope somehow
-  var parsersNS = ol.xml.makeStructureNS(
-      ol.format.KML.NAMESPACE_URIS_, {
-        'Document': ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this),
-        'Folder': ol.xml.makeArrayExtender(this.readDocumentOrFolder_, this),
-        'Placemark': ol.xml.makeArrayPusher(this.readPlacemark_, this),
-        'Style': this.readSharedStyle_.bind(this),
-        'StyleMap': this.readSharedStyleMap_.bind(this)
-      });
-  /** @type {Array.<ol.Feature>} */
-  var features = ol.xml.pushParseAndPop([], parsersNS, node, objectStack, this);
-  if (features) {
-    return features;
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {ol.Feature|undefined} Feature.
- */
-ol.format.KML.prototype.readPlacemark_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Placemark',
-      'localName should be Placemark');
-  var object = ol.xml.pushParseAndPop({'geometry': null},
-      ol.format.KML.PLACEMARK_PARSERS_, node, objectStack);
-  if (!object) {
-    return undefined;
-  }
-  var feature = new ol.Feature();
-  var id = node.getAttribute('id');
-  if (id !== null) {
-    feature.setId(id);
-  }
-  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
-
-  var geometry = object['geometry'];
-  if (geometry) {
-    ol.format.Feature.transformWithOptions(geometry, false, options);
-  }
-  feature.setGeometry(geometry);
-  delete object['geometry'];
-
-  if (this.extractStyles_) {
-    var style = object['Style'];
-    var styleUrl = object['styleUrl'];
-    var styleFunction = ol.format.KML.createFeatureStyleFunction_(
-        style, styleUrl, this.defaultStyle_, this.sharedStyles_,
-        this.showPointNames_);
-    feature.setStyle(styleFunction);
-  }
-  delete object['Style'];
-  // we do not remove the styleUrl property from the object, so it
-  // gets stored on feature when setProperties is called
-
-  feature.setProperties(object);
-
-  return feature;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.prototype.readSharedStyle_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Style', 'localName should be Style');
-  var id = node.getAttribute('id');
-  if (id !== null) {
-    var style = ol.format.KML.readStyle_(node, objectStack);
-    if (style) {
-      var styleUri;
-      if (node.baseURI) {
-        var url = new URL('#' + id, node.baseURI);
-        styleUri = url.href;
-      } else {
-        styleUri = '#' + id;
-      }
-      this.sharedStyles_[styleUri] = style;
-    }
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.prototype.readSharedStyleMap_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'StyleMap',
-      'localName should be StyleMap');
-  var id = node.getAttribute('id');
-  if (id === null) {
-    return;
-  }
-  var styleMapValue = ol.format.KML.readStyleMapValue_(node, objectStack);
-  if (!styleMapValue) {
-    return;
-  }
-  var styleUri;
-  if (node.baseURI) {
-    var url = new URL('#' + id, node.baseURI);
-    styleUri = url.href;
-  } else {
-    styleUri = '#' + id;
-  }
-  this.sharedStyles_[styleUri] = styleMapValue;
-};
-
-
-/**
- * Read the first feature from a KML source. MultiGeometries are converted into
- * GeometryCollections if they are a mix of geometry types, and into MultiPoint/
- * MultiLineString/MultiPolygon if they are all of the same type.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- * @api stable
- */
-ol.format.KML.prototype.readFeature;
-
-
-/**
- * @inheritDoc
- */
-ol.format.KML.prototype.readFeatureFromNode = function(node, opt_options) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  if (!ol.array.includes(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) {
-    return null;
-  }
-  ol.DEBUG && console.assert(node.localName == 'Placemark',
-      'localName should be Placemark');
-  var feature = this.readPlacemark_(
-      node, [this.getReadOptions(node, opt_options)]);
-  if (feature) {
-    return feature;
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * Read all features from a KML source. MultiGeometries are converted into
- * GeometryCollections if they are a mix of geometry types, and into MultiPoint/
- * MultiLineString/MultiPolygon if they are all of the same type.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.KML.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.KML.prototype.readFeaturesFromNode = function(node, opt_options) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  if (!ol.array.includes(ol.format.KML.NAMESPACE_URIS_, node.namespaceURI)) {
-    return [];
-  }
-  var features;
-  var localName = node.localName;
-  if (localName == 'Document' || localName == 'Folder') {
-    features = this.readDocumentOrFolder_(
-        node, [this.getReadOptions(node, opt_options)]);
-    if (features) {
-      return features;
-    } else {
-      return [];
-    }
-  } else if (localName == 'Placemark') {
-    var feature = this.readPlacemark_(
-        node, [this.getReadOptions(node, opt_options)]);
-    if (feature) {
-      return [feature];
-    } else {
-      return [];
-    }
-  } else if (localName == 'kml') {
-    features = [];
-    var n;
-    for (n = node.firstElementChild; n; n = n.nextElementSibling) {
-      var fs = this.readFeaturesFromNode(n, opt_options);
-      if (fs) {
-        ol.array.extend(features, fs);
-      }
-    }
-    return features;
-  } else {
-    return [];
-  }
-};
-
-
-/**
- * Read the name of the KML.
- *
- * @param {Document|Node|string} source Souce.
- * @return {string|undefined} Name.
- * @api stable
- */
-ol.format.KML.prototype.readName = function(source) {
-  if (ol.xml.isDocument(source)) {
-    return this.readNameFromDocument(/** @type {Document} */ (source));
-  } else if (ol.xml.isNode(source)) {
-    return this.readNameFromNode(/** @type {Node} */ (source));
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    return this.readNameFromDocument(doc);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Document} doc Document.
- * @return {string|undefined} Name.
- */
-ol.format.KML.prototype.readNameFromDocument = function(doc) {
-  var n;
-  for (n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      var name = this.readNameFromNode(n);
-      if (name) {
-        return name;
-      }
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {string|undefined} Name.
- */
-ol.format.KML.prototype.readNameFromNode = function(node) {
-  var n;
-  for (n = node.firstElementChild; n; n = n.nextElementSibling) {
-    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
-        n.localName == 'name') {
-      return ol.format.XSD.readString(n);
-    }
-  }
-  for (n = node.firstElementChild; n; n = n.nextElementSibling) {
-    var localName = n.localName;
-    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
-        (localName == 'Document' ||
-         localName == 'Folder' ||
-         localName == 'Placemark' ||
-         localName == 'kml')) {
-      var name = this.readNameFromNode(n);
-      if (name) {
-        return name;
-      }
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * Read the network links of the KML.
- *
- * @param {Document|Node|string} source Source.
- * @return {Array.<Object>} Network links.
- * @api
- */
-ol.format.KML.prototype.readNetworkLinks = function(source) {
-  var networkLinks = [];
-  if (ol.xml.isDocument(source)) {
-    ol.array.extend(networkLinks, this.readNetworkLinksFromDocument(
-        /** @type {Document} */ (source)));
-  } else if (ol.xml.isNode(source)) {
-    ol.array.extend(networkLinks, this.readNetworkLinksFromNode(
-        /** @type {Node} */ (source)));
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    ol.array.extend(networkLinks, this.readNetworkLinksFromDocument(doc));
-  }
-  return networkLinks;
-};
-
-
-/**
- * @param {Document} doc Document.
- * @return {Array.<Object>} Network links.
- */
-ol.format.KML.prototype.readNetworkLinksFromDocument = function(doc) {
-  var n, networkLinks = [];
-  for (n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      ol.array.extend(networkLinks, this.readNetworkLinksFromNode(n));
-    }
-  }
-  return networkLinks;
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {Array.<Object>} Network links.
- */
-ol.format.KML.prototype.readNetworkLinksFromNode = function(node) {
-  var n, networkLinks = [];
-  for (n = node.firstElementChild; n; n = n.nextElementSibling) {
-    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
-        n.localName == 'NetworkLink') {
-      var obj = ol.xml.pushParseAndPop({}, ol.format.KML.NETWORK_LINK_PARSERS_,
-          n, []);
-      networkLinks.push(obj);
-    }
-  }
-  for (n = node.firstElementChild; n; n = n.nextElementSibling) {
-    var localName = n.localName;
-    if (ol.array.includes(ol.format.KML.NAMESPACE_URIS_, n.namespaceURI) &&
-        (localName == 'Document' ||
-         localName == 'Folder' ||
-         localName == 'kml')) {
-      ol.array.extend(networkLinks, this.readNetworkLinksFromNode(n));
-    }
-  }
-  return networkLinks;
-};
-
-
-/**
- * Read the projection from a KML source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.proj.Projection} Projection.
- * @api stable
- */
-ol.format.KML.prototype.readProjection;
-
-
-/**
- * @param {Node} node Node to append a TextNode with the color to.
- * @param {ol.Color|string} color Color.
- * @private
- */
-ol.format.KML.writeColorTextNode_ = function(node, color) {
-  var rgba = ol.color.asArray(color);
-  var opacity = (rgba.length == 4) ? rgba[3] : 1;
-  var abgr = [opacity * 255, rgba[2], rgba[1], rgba[0]];
-  var i;
-  for (i = 0; i < 4; ++i) {
-    var hex = parseInt(abgr[i], 10).toString(16);
-    abgr[i] = (hex.length == 1) ? '0' + hex : hex;
-  }
-  ol.format.XSD.writeStringTextNode(node, abgr.join(''));
-};
-
-
-/**
- * @param {Node} node Node to append a TextNode with the coordinates to.
- * @param {Array.<number>} coordinates Coordinates.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writeCoordinatesTextNode_ = function(node, coordinates, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-
-  var layout = context['layout'];
-  var stride = context['stride'];
-
-  var dimension;
-  if (layout == ol.geom.GeometryLayout.XY ||
-      layout == ol.geom.GeometryLayout.XYM) {
-    dimension = 2;
-  } else if (layout == ol.geom.GeometryLayout.XYZ ||
-      layout == ol.geom.GeometryLayout.XYZM) {
-    dimension = 3;
-  } else {
-    ol.asserts.assert(false, 34); // Invalid geometry layout
-  }
-
-  var d, i;
-  var ii = coordinates.length;
-  var text = '';
-  if (ii > 0) {
-    text += coordinates[0];
-    for (d = 1; d < dimension; ++d) {
-      text += ',' + coordinates[d];
-    }
-    for (i = stride; i < ii; i += stride) {
-      text += ' ' + coordinates[i];
-      for (d = 1; d < dimension; ++d) {
-        text += ',' + coordinates[i + d];
-      }
-    }
-  }
-  ol.format.XSD.writeStringTextNode(node, text);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<ol.Feature>} features Features.
- * @param {Array.<*>} objectStack Object stack.
- * @this {ol.format.KML}
- * @private
- */
-ol.format.KML.writeDocument_ = function(node, features, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.DOCUMENT_SERIALIZERS_,
-      ol.format.KML.DOCUMENT_NODE_FACTORY_, features, objectStack, undefined,
-      this);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Object} icon Icon object.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writeIcon_ = function(node, icon, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  var parentNode = objectStack[objectStack.length - 1].node;
-  var orderedKeys = ol.format.KML.ICON_SEQUENCE_[parentNode.namespaceURI];
-  var values = ol.xml.makeSequence(icon, orderedKeys);
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.KML.ICON_SERIALIZERS_, ol.xml.OBJECT_PROPERTY_NODE_FACTORY,
-      values, objectStack, orderedKeys);
-  orderedKeys =
-      ol.format.KML.ICON_SEQUENCE_[ol.format.KML.GX_NAMESPACE_URIS_[0]];
-  values = ol.xml.makeSequence(icon, orderedKeys);
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.ICON_SERIALIZERS_,
-      ol.format.KML.GX_NODE_FACTORY_, values, objectStack, orderedKeys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.style.Icon} style Icon style.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writeIconStyle_ = function(node, style, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  var properties = {};
-  var src = style.getSrc();
-  var size = style.getSize();
-  var iconImageSize = style.getImageSize();
-  var iconProperties = {
-    'href': src
-  };
-
-  if (size) {
-    iconProperties['w'] = size[0];
-    iconProperties['h'] = size[1];
-    var anchor = style.getAnchor(); // top-left
-    var origin = style.getOrigin(); // top-left
-
-    if (origin && iconImageSize && origin[0] !== 0 && origin[1] !== size[1]) {
-      iconProperties['x'] = origin[0];
-      iconProperties['y'] = iconImageSize[1] - (origin[1] + size[1]);
-    }
-
-    if (anchor && anchor[0] !== 0 && anchor[1] !== size[1]) {
-      var /** @type {ol.KMLVec2_} */ hotSpot = {
-        x: anchor[0],
-        xunits: ol.style.Icon.AnchorUnits.PIXELS,
-        y: size[1] - anchor[1],
-        yunits: ol.style.Icon.AnchorUnits.PIXELS
-      };
-      properties['hotSpot'] = hotSpot;
-    }
-  }
-
-  properties['Icon'] = iconProperties;
-
-  var scale = style.getScale();
-  if (scale !== 1) {
-    properties['scale'] = scale;
-  }
-
-  var rotation = style.getRotation();
-  if (rotation !== 0) {
-    properties['heading'] = rotation; // 0-360
-  }
-
-  var parentNode = objectStack[objectStack.length - 1].node;
-  var orderedKeys = ol.format.KML.ICON_STYLE_SEQUENCE_[parentNode.namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.ICON_STYLE_SERIALIZERS_,
-      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.style.Text} style style.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writeLabelStyle_ = function(node, style, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  var properties = {};
-  var fill = style.getFill();
-  if (fill) {
-    properties['color'] = fill.getColor();
-  }
-  var scale = style.getScale();
-  if (scale && scale !== 1) {
-    properties['scale'] = scale;
-  }
-  var parentNode = objectStack[objectStack.length - 1].node;
-  var orderedKeys =
-      ol.format.KML.LABEL_STYLE_SEQUENCE_[parentNode.namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.LABEL_STYLE_SERIALIZERS_,
-      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.style.Stroke} style style.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writeLineStyle_ = function(node, style, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  var properties = {
-    'color': style.getColor(),
-    'width': style.getWidth()
-  };
-  var parentNode = objectStack[objectStack.length - 1].node;
-  var orderedKeys = ol.format.KML.LINE_STYLE_SEQUENCE_[parentNode.namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.LINE_STYLE_SERIALIZERS_,
-      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writeMultiGeometry_ = function(node, geometry, objectStack) {
-  /** @type {ol.XmlNodeStackItem} */
-  var context = {node: node};
-  var type = geometry.getType();
-  /** @type {Array.<ol.geom.Geometry>} */
-  var geometries;
-  /** @type {function(*, Array.<*>, string=): (Node|undefined)} */
-  var factory;
-  if (type == ol.geom.GeometryType.GEOMETRY_COLLECTION) {
-    geometries = /** @type {ol.geom.GeometryCollection} */ (geometry).getGeometries();
-    factory = ol.format.KML.GEOMETRY_NODE_FACTORY_;
-  } else if (type == ol.geom.GeometryType.MULTI_POINT) {
-    geometries = /** @type {ol.geom.MultiPoint} */ (geometry).getPoints();
-    factory = ol.format.KML.POINT_NODE_FACTORY_;
-  } else if (type == ol.geom.GeometryType.MULTI_LINE_STRING) {
-    geometries =
-        (/** @type {ol.geom.MultiLineString} */ (geometry)).getLineStrings();
-    factory = ol.format.KML.LINE_STRING_NODE_FACTORY_;
-  } else if (type == ol.geom.GeometryType.MULTI_POLYGON) {
-    geometries =
-        (/** @type {ol.geom.MultiPolygon} */ (geometry)).getPolygons();
-    factory = ol.format.KML.POLYGON_NODE_FACTORY_;
-  } else {
-    ol.asserts.assert(false, 39); // Unknown geometry type
-  }
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.KML.MULTI_GEOMETRY_SERIALIZERS_, factory,
-      geometries, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.LinearRing} linearRing Linear ring.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writeBoundaryIs_ = function(node, linearRing, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.KML.BOUNDARY_IS_SERIALIZERS_,
-      ol.format.KML.LINEAR_RING_NODE_FACTORY_, [linearRing], objectStack);
-};
-
-
-/**
- * FIXME currently we do serialize arbitrary/custom feature properties
- * (ExtendedData).
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Object stack.
- * @this {ol.format.KML}
- * @private
- */
-ol.format.KML.writePlacemark_ = function(node, feature, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-
-  // set id
-  if (feature.getId()) {
-    node.setAttribute('id', feature.getId());
-  }
-
-  // serialize properties (properties unknown to KML are not serialized)
-  var properties = feature.getProperties();
-
-  var styleFunction = feature.getStyleFunction();
-  if (styleFunction) {
-    // FIXME the styles returned by the style function are supposed to be
-    // resolution-independent here
-    var styles = styleFunction.call(feature, 0);
-    if (styles) {
-      var style = Array.isArray(styles) ? styles[0] : styles;
-      if (this.writeStyles_) {
-        properties['Style'] = style;
-      }
-      var textStyle = style.getText();
-      if (textStyle) {
-        properties['name'] = textStyle.getText();
-      }
-    }
-  }
-  var parentNode = objectStack[objectStack.length - 1].node;
-  var orderedKeys = ol.format.KML.PLACEMARK_SEQUENCE_[parentNode.namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.PLACEMARK_SERIALIZERS_,
-      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);
-
-  // serialize geometry
-  var options = /** @type {olx.format.WriteOptions} */ (objectStack[0]);
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    geometry =
-        ol.format.Feature.transformWithOptions(geometry, true, options);
-  }
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.PLACEMARK_SERIALIZERS_,
-      ol.format.KML.GEOMETRY_NODE_FACTORY_, [geometry], objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.SimpleGeometry} geometry Geometry.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writePrimitiveGeometry_ = function(node, geometry, objectStack) {
-  ol.DEBUG && console.assert(
-      (geometry instanceof ol.geom.Point) ||
-      (geometry instanceof ol.geom.LineString) ||
-      (geometry instanceof ol.geom.LinearRing),
-      'geometry should be one of ol.geom.Point, ol.geom.LineString ' +
-      'or ol.geom.LinearRing');
-  var flatCoordinates = geometry.getFlatCoordinates();
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  context['layout'] = geometry.getLayout();
-  context['stride'] = geometry.getStride();
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_,
-      ol.format.KML.COORDINATES_NODE_FACTORY_,
-      [flatCoordinates], objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.geom.Polygon} polygon Polygon.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writePolygon_ = function(node, polygon, objectStack) {
-  var linearRings = polygon.getLinearRings();
-  ol.DEBUG && console.assert(linearRings.length > 0,
-      'linearRings should not be empty');
-  var outerRing = linearRings.shift();
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  // inner rings
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.KML.POLYGON_SERIALIZERS_,
-      ol.format.KML.INNER_BOUNDARY_NODE_FACTORY_,
-      linearRings, objectStack);
-  // outer ring
-  ol.xml.pushSerializeAndPop(context,
-      ol.format.KML.POLYGON_SERIALIZERS_,
-      ol.format.KML.OUTER_BOUNDARY_NODE_FACTORY_,
-      [outerRing], objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.style.Fill} style Style.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writePolyStyle_ = function(node, style, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.POLY_STYLE_SERIALIZERS_,
-      ol.format.KML.COLOR_NODE_FACTORY_, [style.getColor()], objectStack);
-};
-
-
-/**
- * @param {Node} node Node to append a TextNode with the scale to.
- * @param {number|undefined} scale Scale.
- * @private
- */
-ol.format.KML.writeScaleTextNode_ = function(node, scale) {
-  // the Math is to remove any excess decimals created by float arithmetic
-  ol.format.XSD.writeDecimalTextNode(node,
-      Math.round(scale * scale * 1e6) / 1e6);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.style.Style} style Style.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.KML.writeStyle_ = function(node, style, objectStack) {
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: node};
-  var properties = {};
-  var fillStyle = style.getFill();
-  var strokeStyle = style.getStroke();
-  var imageStyle = style.getImage();
-  var textStyle = style.getText();
-  if (imageStyle instanceof ol.style.Icon) {
-    properties['IconStyle'] = imageStyle;
-  }
-  if (textStyle) {
-    properties['LabelStyle'] = textStyle;
-  }
-  if (strokeStyle) {
-    properties['LineStyle'] = strokeStyle;
-  }
-  if (fillStyle) {
-    properties['PolyStyle'] = fillStyle;
-  }
-  var parentNode = objectStack[objectStack.length - 1].node;
-  var orderedKeys = ol.format.KML.STYLE_SEQUENCE_[parentNode.namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.STYLE_SERIALIZERS_,
-      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, objectStack, orderedKeys);
-};
-
-
-/**
- * @param {Node} node Node to append a TextNode with the Vec2 to.
- * @param {ol.KMLVec2_} vec2 Vec2.
- * @private
- */
-ol.format.KML.writeVec2_ = function(node, vec2) {
-  node.setAttribute('x', vec2.x);
-  node.setAttribute('y', vec2.y);
-  node.setAttribute('xunits', vec2.xunits);
-  node.setAttribute('yunits', vec2.yunits);
-};
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.KML.KML_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, [
-      'Document', 'Placemark'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.KML_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'Document': ol.xml.makeChildAppender(ol.format.KML.writeDocument_),
-      'Placemark': ol.xml.makeChildAppender(ol.format.KML.writePlacemark_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.DOCUMENT_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'Placemark': ol.xml.makeChildAppender(ol.format.KML.writePlacemark_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, string>}
- * @private
- */
-ol.format.KML.GEOMETRY_TYPE_TO_NODENAME_ = {
-  'Point': 'Point',
-  'LineString': 'LineString',
-  'LinearRing': 'LinearRing',
-  'Polygon': 'Polygon',
-  'MultiPoint': 'MultiGeometry',
-  'MultiLineString': 'MultiGeometry',
-  'MultiPolygon': 'MultiGeometry',
-  'GeometryCollection': 'MultiGeometry'
-};
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.KML.ICON_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, [
-      'href'
-    ],
-    ol.xml.makeStructureNS(ol.format.KML.GX_NAMESPACE_URIS_, [
-      'x', 'y', 'w', 'h'
-    ]));
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.ICON_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'href': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)
-    }, ol.xml.makeStructureNS(
-        ol.format.KML.GX_NAMESPACE_URIS_, {
-          'x': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-          'y': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-          'w': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-          'h': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode)
-        }));
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.KML.ICON_STYLE_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, [
-      'scale', 'heading', 'Icon', 'hotSpot'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.ICON_STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'Icon': ol.xml.makeChildAppender(ol.format.KML.writeIcon_),
-      'heading': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode),
-      'hotSpot': ol.xml.makeChildAppender(ol.format.KML.writeVec2_),
-      'scale': ol.xml.makeChildAppender(ol.format.KML.writeScaleTextNode_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.KML.LABEL_STYLE_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, [
-      'color', 'scale'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.LABEL_STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'color': ol.xml.makeChildAppender(ol.format.KML.writeColorTextNode_),
-      'scale': ol.xml.makeChildAppender(ol.format.KML.writeScaleTextNode_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.KML.LINE_STYLE_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, [
-      'color', 'width'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.LINE_STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'color': ol.xml.makeChildAppender(ol.format.KML.writeColorTextNode_),
-      'width': ol.xml.makeChildAppender(ol.format.XSD.writeDecimalTextNode)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.BOUNDARY_IS_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'LinearRing': ol.xml.makeChildAppender(
-          ol.format.KML.writePrimitiveGeometry_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.MULTI_GEOMETRY_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'LineString': ol.xml.makeChildAppender(
-          ol.format.KML.writePrimitiveGeometry_),
-      'Point': ol.xml.makeChildAppender(
-          ol.format.KML.writePrimitiveGeometry_),
-      'Polygon': ol.xml.makeChildAppender(ol.format.KML.writePolygon_),
-      'GeometryCollection': ol.xml.makeChildAppender(
-          ol.format.KML.writeMultiGeometry_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.KML.PLACEMARK_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, [
-      'name', 'open', 'visibility', 'address', 'phoneNumber', 'description',
-      'styleUrl', 'Style'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.PLACEMARK_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'MultiGeometry': ol.xml.makeChildAppender(
-          ol.format.KML.writeMultiGeometry_),
-      'LineString': ol.xml.makeChildAppender(
-          ol.format.KML.writePrimitiveGeometry_),
-      'LinearRing': ol.xml.makeChildAppender(
-          ol.format.KML.writePrimitiveGeometry_),
-      'Point': ol.xml.makeChildAppender(
-          ol.format.KML.writePrimitiveGeometry_),
-      'Polygon': ol.xml.makeChildAppender(ol.format.KML.writePolygon_),
-      'Style': ol.xml.makeChildAppender(ol.format.KML.writeStyle_),
-      'address': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'description': ol.xml.makeChildAppender(
-          ol.format.XSD.writeStringTextNode),
-      'name': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'open': ol.xml.makeChildAppender(ol.format.XSD.writeBooleanTextNode),
-      'phoneNumber': ol.xml.makeChildAppender(
-          ol.format.XSD.writeStringTextNode),
-      'styleUrl': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode),
-      'visibility': ol.xml.makeChildAppender(
-          ol.format.XSD.writeBooleanTextNode)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.PRIMITIVE_GEOMETRY_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'coordinates': ol.xml.makeChildAppender(
-          ol.format.KML.writeCoordinatesTextNode_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.POLYGON_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'outerBoundaryIs': ol.xml.makeChildAppender(
-          ol.format.KML.writeBoundaryIs_),
-      'innerBoundaryIs': ol.xml.makeChildAppender(
-          ol.format.KML.writeBoundaryIs_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.POLY_STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'color': ol.xml.makeChildAppender(ol.format.KML.writeColorTextNode_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Array.<string>>}
- * @private
- */
-ol.format.KML.STYLE_SEQUENCE_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, [
-      'IconStyle', 'LabelStyle', 'LineStyle', 'PolyStyle'
-    ]);
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.KML.STYLE_SERIALIZERS_ = ol.xml.makeStructureNS(
-    ol.format.KML.NAMESPACE_URIS_, {
-      'IconStyle': ol.xml.makeChildAppender(ol.format.KML.writeIconStyle_),
-      'LabelStyle': ol.xml.makeChildAppender(ol.format.KML.writeLabelStyle_),
-      'LineStyle': ol.xml.makeChildAppender(ol.format.KML.writeLineStyle_),
-      'PolyStyle': ol.xml.makeChildAppender(ol.format.KML.writePolyStyle_)
-    });
-
-
-/**
- * @const
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node|undefined} Node.
- * @private
- */
-ol.format.KML.GX_NODE_FACTORY_ = function(value, objectStack, opt_nodeName) {
-  return ol.xml.createElementNS(ol.format.KML.GX_NAMESPACE_URIS_[0],
-      'gx:' + opt_nodeName);
-};
-
-
-/**
- * @const
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node|undefined} Node.
- * @private
- */
-ol.format.KML.DOCUMENT_NODE_FACTORY_ = function(value, objectStack,
-    opt_nodeName) {
-  var parentNode = objectStack[objectStack.length - 1].node;
-  ol.DEBUG && console.assert(ol.xml.isNode(parentNode),
-      'parentNode should be an XML node');
-  return ol.xml.createElementNS(parentNode.namespaceURI, 'Placemark');
-};
-
-
-/**
- * @const
- * @param {*} value Value.
- * @param {Array.<*>} objectStack Object stack.
- * @param {string=} opt_nodeName Node name.
- * @return {Node|undefined} Node.
- * @private
- */
-ol.format.KML.GEOMETRY_NODE_FACTORY_ = function(value, objectStack,
-    opt_nodeName) {
-  if (value) {
-    var parentNode = objectStack[objectStack.length - 1].node;
-    ol.DEBUG && console.assert(ol.xml.isNode(parentNode),
-        'parentNode should be an XML node');
-    return ol.xml.createElementNS(parentNode.namespaceURI,
-        ol.format.KML.GEOMETRY_TYPE_TO_NODENAME_[/** @type {ol.geom.Geometry} */ (value).getType()]);
-  }
-};
-
-
-/**
- * A factory for creating coordinates nodes.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.KML.COLOR_NODE_FACTORY_ = ol.xml.makeSimpleNodeFactory('color');
-
-
-/**
- * A factory for creating coordinates nodes.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.KML.COORDINATES_NODE_FACTORY_ =
-    ol.xml.makeSimpleNodeFactory('coordinates');
-
-
-/**
- * A factory for creating innerBoundaryIs nodes.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.KML.INNER_BOUNDARY_NODE_FACTORY_ =
-    ol.xml.makeSimpleNodeFactory('innerBoundaryIs');
-
-
-/**
- * A factory for creating Point nodes.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.KML.POINT_NODE_FACTORY_ =
-    ol.xml.makeSimpleNodeFactory('Point');
-
-
-/**
- * A factory for creating LineString nodes.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.KML.LINE_STRING_NODE_FACTORY_ =
-    ol.xml.makeSimpleNodeFactory('LineString');
-
-
-/**
- * A factory for creating LinearRing nodes.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.KML.LINEAR_RING_NODE_FACTORY_ =
-    ol.xml.makeSimpleNodeFactory('LinearRing');
-
-
-/**
- * A factory for creating Polygon nodes.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.KML.POLYGON_NODE_FACTORY_ =
-    ol.xml.makeSimpleNodeFactory('Polygon');
-
-
-/**
- * A factory for creating outerBoundaryIs nodes.
- * @const
- * @type {function(*, Array.<*>, string=): (Node|undefined)}
- * @private
- */
-ol.format.KML.OUTER_BOUNDARY_NODE_FACTORY_ =
-    ol.xml.makeSimpleNodeFactory('outerBoundaryIs');
-
-
-/**
- * Encode an array of features in the KML format. GeometryCollections, MultiPoints,
- * MultiLineStrings, and MultiPolygons are output as MultiGeometries.
- *
- * @function
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {string} Result.
- * @api stable
- */
-ol.format.KML.prototype.writeFeatures;
-
-
-/**
- * Encode an array of features in the KML format as an XML node. GeometryCollections,
- * MultiPoints, MultiLineStrings, and MultiPolygons are output as MultiGeometries.
- *
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Options.
- * @return {Node} Node.
- * @api
- */
-ol.format.KML.prototype.writeFeaturesNode = function(features, opt_options) {
-  opt_options = this.adaptOptions(opt_options);
-  var kml = ol.xml.createElementNS(ol.format.KML.NAMESPACE_URIS_[4], 'kml');
-  var xmlnsUri = 'http://www.w3.org/2000/xmlns/';
-  var xmlSchemaInstanceUri = 'http://www.w3.org/2001/XMLSchema-instance';
-  ol.xml.setAttributeNS(kml, xmlnsUri, 'xmlns:gx',
-      ol.format.KML.GX_NAMESPACE_URIS_[0]);
-  ol.xml.setAttributeNS(kml, xmlnsUri, 'xmlns:xsi', xmlSchemaInstanceUri);
-  ol.xml.setAttributeNS(kml, xmlSchemaInstanceUri, 'xsi:schemaLocation',
-      ol.format.KML.SCHEMA_LOCATION_);
-
-  var /** @type {ol.XmlNodeStackItem} */ context = {node: kml};
-  var properties = {};
-  if (features.length > 1) {
-    properties['Document'] = features;
-  } else if (features.length == 1) {
-    properties['Placemark'] = features[0];
-  }
-  var orderedKeys = ol.format.KML.KML_SEQUENCE_[kml.namespaceURI];
-  var values = ol.xml.makeSequence(properties, orderedKeys);
-  ol.xml.pushSerializeAndPop(context, ol.format.KML.KML_SERIALIZERS_,
-      ol.xml.OBJECT_PROPERTY_NODE_FACTORY, values, [opt_options], orderedKeys,
-      this);
-  return kml;
-};
-
-goog.provide('ol.ext.pbf');
-/** @typedef {function(*)} */
-ol.ext.pbf;
-(function() {
-var exports = {};
-var module = {exports: exports};
-var define;
-/**
- * @fileoverview
- * @suppress {accessControls, ambiguousFunctionDecl, checkDebuggerStatement, checkRegExp, checkTypes, checkVars, const, constantProperty, deprecated, duplicate, es5Strict, fileoverviewTags, missingProperties, nonStandardJsDocs, strictModuleDepCheck, suspiciousCode, undefinedNames, undefinedVars, unknownDefines, uselessCode, visibility}
- */
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pbf = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
-exports.read = function (buffer, offset, isLE, mLen, nBytes) {
-  var e, m
-  var eLen = nBytes * 8 - mLen - 1
-  var eMax = (1 << eLen) - 1
-  var eBias = eMax >> 1
-  var nBits = -7
-  var i = isLE ? (nBytes - 1) : 0
-  var d = isLE ? -1 : 1
-  var s = buffer[offset + i]
-
-  i += d
-
-  e = s & ((1 << (-nBits)) - 1)
-  s >>= (-nBits)
-  nBits += eLen
-  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
-  m = e & ((1 << (-nBits)) - 1)
-  e >>= (-nBits)
-  nBits += mLen
-  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
-
-  if (e === 0) {
-    e = 1 - eBias
-  } else if (e === eMax) {
-    return m ? NaN : ((s ? -1 : 1) * Infinity)
-  } else {
-    m = m + Math.pow(2, mLen)
-    e = e - eBias
-  }
-  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
-}
-
-exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
-  var e, m, c
-  var eLen = nBytes * 8 - mLen - 1
-  var eMax = (1 << eLen) - 1
-  var eBias = eMax >> 1
-  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
-  var i = isLE ? 0 : (nBytes - 1)
-  var d = isLE ? 1 : -1
-  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
-
-  value = Math.abs(value)
-
-  if (isNaN(value) || value === Infinity) {
-    m = isNaN(value) ? 1 : 0
-    e = eMax
-  } else {
-    e = Math.floor(Math.log(value) / Math.LN2)
-    if (value * (c = Math.pow(2, -e)) < 1) {
-      e--
-      c *= 2
-    }
-    if (e + eBias >= 1) {
-      value += rt / c
-    } else {
-      value += rt * Math.pow(2, 1 - eBias)
-    }
-    if (value * c >= 2) {
-      e++
-      c /= 2
-    }
-
-    if (e + eBias >= eMax) {
-      m = 0
-      e = eMax
-    } else if (e + eBias >= 1) {
-      m = (value * c - 1) * Math.pow(2, mLen)
-      e = e + eBias
-    } else {
-      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
-      e = 0
-    }
-  }
-
-  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
-
-  e = (e << mLen) | m
-  eLen += mLen
-  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
-
-  buffer[offset + i - d] |= s * 128
-}
-
-},{}],2:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports = Pbf;
-
-var ieee754 = _dereq_('ieee754');
-
-function Pbf(buf) {
-    this.buf = ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);
-    this.pos = 0;
-    this.type = 0;
-    this.length = this.buf.length;
-}
-
-Pbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum
-Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64
-Pbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields
-Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32
-
-var SHIFT_LEFT_32 = (1 << 16) * (1 << 16),
-    SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
-
-Pbf.prototype = {
-
-    destroy: function() {
-        this.buf = null;
-    },
-
-    // === READING =================================================================
-
-    readFields: function(readField, result, end) {
-        end = end || this.length;
-
-        while (this.pos < end) {
-            var val = this.readVarint(),
-                tag = val >> 3,
-                startPos = this.pos;
-
-            this.type = val & 0x7;
-            readField(tag, result, this);
-
-            if (this.pos === startPos) this.skip(val);
-        }
-        return result;
-    },
-
-    readMessage: function(readField, result) {
-        return this.readFields(readField, result, this.readVarint() + this.pos);
-    },
-
-    readFixed32: function() {
-        var val = readUInt32(this.buf, this.pos);
-        this.pos += 4;
-        return val;
-    },
-
-    readSFixed32: function() {
-        var val = readInt32(this.buf, this.pos);
-        this.pos += 4;
-        return val;
-    },
-
-    // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)
-
-    readFixed64: function() {
-        var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
-        this.pos += 8;
-        return val;
-    },
-
-    readSFixed64: function() {
-        var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;
-        this.pos += 8;
-        return val;
-    },
-
-    readFloat: function() {
-        var val = ieee754.read(this.buf, this.pos, true, 23, 4);
-        this.pos += 4;
-        return val;
-    },
-
-    readDouble: function() {
-        var val = ieee754.read(this.buf, this.pos, true, 52, 8);
-        this.pos += 8;
-        return val;
-    },
-
-    readVarint: function(isSigned) {
-        var buf = this.buf,
-            val, b;
-
-        b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;
-        b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;
-        b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;
-        b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;
-        b = buf[this.pos];   val |= (b & 0x0f) << 28;
-
-        return readVarintRemainder(val, isSigned, this);
-    },
-
-    readVarint64: function() { // for compatibility with v2.0.1
-        return this.readVarint(true);
-    },
-
-    readSVarint: function() {
-        var num = this.readVarint();
-        return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding
-    },
-
-    readBoolean: function() {
-        return Boolean(this.readVarint());
-    },
-
-    readString: function() {
-        var end = this.readVarint() + this.pos,
-            str = readUtf8(this.buf, this.pos, end);
-        this.pos = end;
-        return str;
-    },
-
-    readBytes: function() {
-        var end = this.readVarint() + this.pos,
-            buffer = this.buf.subarray(this.pos, end);
-        this.pos = end;
-        return buffer;
-    },
-
-    // verbose for performance reasons; doesn't affect gzipped size
-
-    readPackedVarint: function(arr, isSigned) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readVarint(isSigned));
-        return arr;
-    },
-    readPackedSVarint: function(arr) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readSVarint());
-        return arr;
-    },
-    readPackedBoolean: function(arr) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readBoolean());
-        return arr;
-    },
-    readPackedFloat: function(arr) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readFloat());
-        return arr;
-    },
-    readPackedDouble: function(arr) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readDouble());
-        return arr;
-    },
-    readPackedFixed32: function(arr) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readFixed32());
-        return arr;
-    },
-    readPackedSFixed32: function(arr) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readSFixed32());
-        return arr;
-    },
-    readPackedFixed64: function(arr) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readFixed64());
-        return arr;
-    },
-    readPackedSFixed64: function(arr) {
-        var end = readPackedEnd(this);
-        arr = arr || [];
-        while (this.pos < end) arr.push(this.readSFixed64());
-        return arr;
-    },
-
-    skip: function(val) {
-        var type = val & 0x7;
-        if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}
-        else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;
-        else if (type === Pbf.Fixed32) this.pos += 4;
-        else if (type === Pbf.Fixed64) this.pos += 8;
-        else throw new Error('Unimplemented type: ' + type);
-    },
-
-    // === WRITING =================================================================
-
-    writeTag: function(tag, type) {
-        this.writeVarint((tag << 3) | type);
-    },
-
-    realloc: function(min) {
-        var length = this.length || 16;
-
-        while (length < this.pos + min) length *= 2;
-
-        if (length !== this.length) {
-            var buf = new Uint8Array(length);
-            buf.set(this.buf);
-            this.buf = buf;
-            this.length = length;
-        }
-    },
-
-    finish: function() {
-        this.length = this.pos;
-        this.pos = 0;
-        return this.buf.subarray(0, this.length);
-    },
-
-    writeFixed32: function(val) {
-        this.realloc(4);
-        writeInt32(this.buf, val, this.pos);
-        this.pos += 4;
-    },
-
-    writeSFixed32: function(val) {
-        this.realloc(4);
-        writeInt32(this.buf, val, this.pos);
-        this.pos += 4;
-    },
-
-    writeFixed64: function(val) {
-        this.realloc(8);
-        writeInt32(this.buf, val & -1, this.pos);
-        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
-        this.pos += 8;
-    },
-
-    writeSFixed64: function(val) {
-        this.realloc(8);
-        writeInt32(this.buf, val & -1, this.pos);
-        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);
-        this.pos += 8;
-    },
-
-    writeVarint: function(val) {
-        val = +val || 0;
-
-        if (val > 0xfffffff || val < 0) {
-            writeBigVarint(val, this);
-            return;
-        }
-
-        this.realloc(4);
-
-        this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
-        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
-        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;
-        this.buf[this.pos++] =   (val >>> 7) & 0x7f;
-    },
-
-    writeSVarint: function(val) {
-        this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);
-    },
-
-    writeBoolean: function(val) {
-        this.writeVarint(Boolean(val));
-    },
-
-    writeString: function(str) {
-        str = String(str);
-        this.realloc(str.length * 4);
-
-        this.pos++; // reserve 1 byte for short string length
-
-        var startPos = this.pos;
-        // write the string directly to the buffer and see how much was written
-        this.pos = writeUtf8(this.buf, str, this.pos);
-        var len = this.pos - startPos;
-
-        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
-
-        // finally, write the message length in the reserved place and restore the position
-        this.pos = startPos - 1;
-        this.writeVarint(len);
-        this.pos += len;
-    },
-
-    writeFloat: function(val) {
-        this.realloc(4);
-        ieee754.write(this.buf, val, this.pos, true, 23, 4);
-        this.pos += 4;
-    },
-
-    writeDouble: function(val) {
-        this.realloc(8);
-        ieee754.write(this.buf, val, this.pos, true, 52, 8);
-        this.pos += 8;
-    },
-
-    writeBytes: function(buffer) {
-        var len = buffer.length;
-        this.writeVarint(len);
-        this.realloc(len);
-        for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];
-    },
-
-    writeRawMessage: function(fn, obj) {
-        this.pos++; // reserve 1 byte for short message length
-
-        // write the message directly to the buffer and see how much was written
-        var startPos = this.pos;
-        fn(obj, this);
-        var len = this.pos - startPos;
-
-        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);
-
-        // finally, write the message length in the reserved place and restore the position
-        this.pos = startPos - 1;
-        this.writeVarint(len);
-        this.pos += len;
-    },
-
-    writeMessage: function(tag, fn, obj) {
-        this.writeTag(tag, Pbf.Bytes);
-        this.writeRawMessage(fn, obj);
-    },
-
-    writePackedVarint:   function(tag, arr) { this.writeMessage(tag, writePackedVarint, arr);   },
-    writePackedSVarint:  function(tag, arr) { this.writeMessage(tag, writePackedSVarint, arr);  },
-    writePackedBoolean:  function(tag, arr) { this.writeMessage(tag, writePackedBoolean, arr);  },
-    writePackedFloat:    function(tag, arr) { this.writeMessage(tag, writePackedFloat, arr);    },
-    writePackedDouble:   function(tag, arr) { this.writeMessage(tag, writePackedDouble, arr);   },
-    writePackedFixed32:  function(tag, arr) { this.writeMessage(tag, writePackedFixed32, arr);  },
-    writePackedSFixed32: function(tag, arr) { this.writeMessage(tag, writePackedSFixed32, arr); },
-    writePackedFixed64:  function(tag, arr) { this.writeMessage(tag, writePackedFixed64, arr);  },
-    writePackedSFixed64: function(tag, arr) { this.writeMessage(tag, writePackedSFixed64, arr); },
-
-    writeBytesField: function(tag, buffer) {
-        this.writeTag(tag, Pbf.Bytes);
-        this.writeBytes(buffer);
-    },
-    writeFixed32Field: function(tag, val) {
-        this.writeTag(tag, Pbf.Fixed32);
-        this.writeFixed32(val);
-    },
-    writeSFixed32Field: function(tag, val) {
-        this.writeTag(tag, Pbf.Fixed32);
-        this.writeSFixed32(val);
-    },
-    writeFixed64Field: function(tag, val) {
-        this.writeTag(tag, Pbf.Fixed64);
-        this.writeFixed64(val);
-    },
-    writeSFixed64Field: function(tag, val) {
-        this.writeTag(tag, Pbf.Fixed64);
-        this.writeSFixed64(val);
-    },
-    writeVarintField: function(tag, val) {
-        this.writeTag(tag, Pbf.Varint);
-        this.writeVarint(val);
-    },
-    writeSVarintField: function(tag, val) {
-        this.writeTag(tag, Pbf.Varint);
-        this.writeSVarint(val);
-    },
-    writeStringField: function(tag, str) {
-        this.writeTag(tag, Pbf.Bytes);
-        this.writeString(str);
-    },
-    writeFloatField: function(tag, val) {
-        this.writeTag(tag, Pbf.Fixed32);
-        this.writeFloat(val);
-    },
-    writeDoubleField: function(tag, val) {
-        this.writeTag(tag, Pbf.Fixed64);
-        this.writeDouble(val);
-    },
-    writeBooleanField: function(tag, val) {
-        this.writeVarintField(tag, Boolean(val));
-    }
-};
-
-function readVarintRemainder(l, s, p) {
-    var buf = p.buf,
-        h, b;
-
-    b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);
-    b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);
-    b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);
-    b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);
-    b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);
-    b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);
-
-    throw new Error('Expected varint not more than 10 bytes');
-}
-
-function readPackedEnd(pbf) {
-    return pbf.type === Pbf.Bytes ?
-        pbf.readVarint() + pbf.pos : pbf.pos + 1;
-}
-
-function toNum(low, high, isSigned) {
-    if (isSigned) {
-        return high * 0x100000000 + (low >>> 0);
-    }
-
-    return ((high >>> 0) * 0x100000000) + (low >>> 0);
-}
-
-function writeBigVarint(val, pbf) {
-    var low, high;
-
-    if (val >= 0) {
-        low  = (val % 0x100000000) | 0;
-        high = (val / 0x100000000) | 0;
-    } else {
-        low  = ~(-val % 0x100000000);
-        high = ~(-val / 0x100000000);
-
-        if (low ^ 0xffffffff) {
-            low = (low + 1) | 0;
-        } else {
-            low = 0;
-            high = (high + 1) | 0;
-        }
-    }
-
-    if (val >= 0x10000000000000000 || val < -0x10000000000000000) {
-        throw new Error('Given varint doesn\'t fit into 10 bytes');
-    }
-
-    pbf.realloc(10);
-
-    writeBigVarintLow(low, high, pbf);
-    writeBigVarintHigh(high, pbf);
-}
-
-function writeBigVarintLow(low, high, pbf) {
-    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
-    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
-    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
-    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;
-    pbf.buf[pbf.pos]   = low & 0x7f;
-}
-
-function writeBigVarintHigh(high, pbf) {
-    var lsb = (high & 0x07) << 4;
-
-    pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;
-    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
-    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
-    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
-    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;
-    pbf.buf[pbf.pos++]  = high & 0x7f;
-}
-
-function makeRoomForExtraLength(startPos, len, pbf) {
-    var extraLen =
-        len <= 0x3fff ? 1 :
-        len <= 0x1fffff ? 2 :
-        len <= 0xfffffff ? 3 : Math.ceil(Math.log(len) / (Math.LN2 * 7));
-
-    // if 1 byte isn't enough for encoding message length, shift the data to the right
-    pbf.realloc(extraLen);
-    for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];
-}
-
-function writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }
-function writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }
-function writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }
-function writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }
-function writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }
-function writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }
-function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }
-function writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }
-function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }
-
-// Buffer code below from https://github.com/feross/buffer, MIT-licensed
-
-function readUInt32(buf, pos) {
-    return ((buf[pos]) |
-        (buf[pos + 1] << 8) |
-        (buf[pos + 2] << 16)) +
-        (buf[pos + 3] * 0x1000000);
-}
-
-function writeInt32(buf, val, pos) {
-    buf[pos] = val;
-    buf[pos + 1] = (val >>> 8);
-    buf[pos + 2] = (val >>> 16);
-    buf[pos + 3] = (val >>> 24);
-}
-
-function readInt32(buf, pos) {
-    return ((buf[pos]) |
-        (buf[pos + 1] << 8) |
-        (buf[pos + 2] << 16)) +
-        (buf[pos + 3] << 24);
-}
-
-function readUtf8(buf, pos, end) {
-    var str = '';
-    var i = pos;
-
-    while (i < end) {
-        var b0 = buf[i];
-        var c = null; // codepoint
-        var bytesPerSequence =
-            b0 > 0xEF ? 4 :
-            b0 > 0xDF ? 3 :
-            b0 > 0xBF ? 2 : 1;
-
-        if (i + bytesPerSequence > end) break;
-
-        var b1, b2, b3;
-
-        if (bytesPerSequence === 1) {
-            if (b0 < 0x80) {
-                c = b0;
-            }
-        } else if (bytesPerSequence === 2) {
-            b1 = buf[i + 1];
-            if ((b1 & 0xC0) === 0x80) {
-                c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);
-                if (c <= 0x7F) {
-                    c = null;
-                }
-            }
-        } else if (bytesPerSequence === 3) {
-            b1 = buf[i + 1];
-            b2 = buf[i + 2];
-            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {
-                c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);
-                if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {
-                    c = null;
-                }
-            }
-        } else if (bytesPerSequence === 4) {
-            b1 = buf[i + 1];
-            b2 = buf[i + 2];
-            b3 = buf[i + 3];
-            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {
-                c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);
-                if (c <= 0xFFFF || c >= 0x110000) {
-                    c = null;
-                }
-            }
-        }
-
-        if (c === null) {
-            c = 0xFFFD;
-            bytesPerSequence = 1;
-
-        } else if (c > 0xFFFF) {
-            c -= 0x10000;
-            str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);
-            c = 0xDC00 | c & 0x3FF;
-        }
-
-        str += String.fromCharCode(c);
-        i += bytesPerSequence;
-    }
-
-    return str;
-}
-
-function writeUtf8(buf, str, pos) {
-    for (var i = 0, c, lead; i < str.length; i++) {
-        c = str.charCodeAt(i); // code point
-
-        if (c > 0xD7FF && c < 0xE000) {
-            if (lead) {
-                if (c < 0xDC00) {
-                    buf[pos++] = 0xEF;
-                    buf[pos++] = 0xBF;
-                    buf[pos++] = 0xBD;
-                    lead = c;
-                    continue;
-                } else {
-                    c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;
-                    lead = null;
-                }
-            } else {
-                if (c > 0xDBFF || (i + 1 === str.length)) {
-                    buf[pos++] = 0xEF;
-                    buf[pos++] = 0xBF;
-                    buf[pos++] = 0xBD;
-                } else {
-                    lead = c;
-                }
-                continue;
-            }
-        } else if (lead) {
-            buf[pos++] = 0xEF;
-            buf[pos++] = 0xBF;
-            buf[pos++] = 0xBD;
-            lead = null;
-        }
-
-        if (c < 0x80) {
-            buf[pos++] = c;
-        } else {
-            if (c < 0x800) {
-                buf[pos++] = c >> 0x6 | 0xC0;
-            } else {
-                if (c < 0x10000) {
-                    buf[pos++] = c >> 0xC | 0xE0;
-                } else {
-                    buf[pos++] = c >> 0x12 | 0xF0;
-                    buf[pos++] = c >> 0xC & 0x3F | 0x80;
-                }
-                buf[pos++] = c >> 0x6 & 0x3F | 0x80;
-            }
-            buf[pos++] = c & 0x3F | 0x80;
-        }
-    }
-    return pos;
-}
-
-},{"ieee754":1}]},{},[2])(2)
-});
-ol.ext.pbf = module.exports;
-})();
-
-goog.provide('ol.ext.vectortile');
-/** @typedef {function(*)} */
-ol.ext.vectortile;
-(function() {
-var exports = {};
-var module = {exports: exports};
-var define;
-/**
- * @fileoverview
- * @suppress {accessControls, ambiguousFunctionDecl, checkDebuggerStatement, checkRegExp, checkTypes, checkVars, const, constantProperty, deprecated, duplicate, es5Strict, fileoverviewTags, missingProperties, nonStandardJsDocs, strictModuleDepCheck, suspiciousCode, undefinedNames, undefinedVars, unknownDefines, uselessCode, visibility}
- */
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.vectortile = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports = Point;
-
-function Point(x, y) {
-    this.x = x;
-    this.y = y;
-}
-
-Point.prototype = {
-    clone: function() { return new Point(this.x, this.y); },
-
-    add:     function(p) { return this.clone()._add(p);     },
-    sub:     function(p) { return this.clone()._sub(p);     },
-    mult:    function(k) { return this.clone()._mult(k);    },
-    div:     function(k) { return this.clone()._div(k);     },
-    rotate:  function(a) { return this.clone()._rotate(a);  },
-    matMult: function(m) { return this.clone()._matMult(m); },
-    unit:    function() { return this.clone()._unit(); },
-    perp:    function() { return this.clone()._perp(); },
-    round:   function() { return this.clone()._round(); },
-
-    mag: function() {
-        return Math.sqrt(this.x * this.x + this.y * this.y);
-    },
-
-    equals: function(p) {
-        return this.x === p.x &&
-               this.y === p.y;
-    },
-
-    dist: function(p) {
-        return Math.sqrt(this.distSqr(p));
-    },
-
-    distSqr: function(p) {
-        var dx = p.x - this.x,
-            dy = p.y - this.y;
-        return dx * dx + dy * dy;
-    },
-
-    angle: function() {
-        return Math.atan2(this.y, this.x);
-    },
-
-    angleTo: function(b) {
-        return Math.atan2(this.y - b.y, this.x - b.x);
-    },
-
-    angleWith: function(b) {
-        return this.angleWithSep(b.x, b.y);
-    },
-
-    // Find the angle of the two vectors, solving the formula for the cross product a x b = |a||b|sin(θ) for θ.
-    angleWithSep: function(x, y) {
-        return Math.atan2(
-            this.x * y - this.y * x,
-            this.x * x + this.y * y);
-    },
-
-    _matMult: function(m) {
-        var x = m[0] * this.x + m[1] * this.y,
-            y = m[2] * this.x + m[3] * this.y;
-        this.x = x;
-        this.y = y;
-        return this;
-    },
-
-    _add: function(p) {
-        this.x += p.x;
-        this.y += p.y;
-        return this;
-    },
-
-    _sub: function(p) {
-        this.x -= p.x;
-        this.y -= p.y;
-        return this;
-    },
-
-    _mult: function(k) {
-        this.x *= k;
-        this.y *= k;
-        return this;
-    },
-
-    _div: function(k) {
-        this.x /= k;
-        this.y /= k;
-        return this;
-    },
-
-    _unit: function() {
-        this._div(this.mag());
-        return this;
-    },
-
-    _perp: function() {
-        var y = this.y;
-        this.y = this.x;
-        this.x = -y;
-        return this;
-    },
-
-    _rotate: function(angle) {
-        var cos = Math.cos(angle),
-            sin = Math.sin(angle),
-            x = cos * this.x - sin * this.y,
-            y = sin * this.x + cos * this.y;
-        this.x = x;
-        this.y = y;
-        return this;
-    },
-
-    _round: function() {
-        this.x = Math.round(this.x);
-        this.y = Math.round(this.y);
-        return this;
-    }
-};
-
-// constructs Point from an array if necessary
-Point.convert = function (a) {
-    if (a instanceof Point) {
-        return a;
-    }
-    if (Array.isArray(a)) {
-        return new Point(a[0], a[1]);
-    }
-    return a;
-};
-
-},{}],2:[function(_dereq_,module,exports){
-module.exports.VectorTile = _dereq_('./lib/vectortile.js');
-module.exports.VectorTileFeature = _dereq_('./lib/vectortilefeature.js');
-module.exports.VectorTileLayer = _dereq_('./lib/vectortilelayer.js');
-
-},{"./lib/vectortile.js":3,"./lib/vectortilefeature.js":4,"./lib/vectortilelayer.js":5}],3:[function(_dereq_,module,exports){
-'use strict';
-
-var VectorTileLayer = _dereq_('./vectortilelayer');
-
-module.exports = VectorTile;
-
-function VectorTile(pbf, end) {
-    this.layers = pbf.readFields(readTile, {}, end);
-}
-
-function readTile(tag, layers, pbf) {
-    if (tag === 3) {
-        var layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);
-        if (layer.length) layers[layer.name] = layer;
-    }
-}
-
-
-},{"./vectortilelayer":5}],4:[function(_dereq_,module,exports){
-'use strict';
-
-var Point = _dereq_('point-geometry');
-
-module.exports = VectorTileFeature;
-
-function VectorTileFeature(pbf, end, extent, keys, values) {
-    // Public
-    this.properties = {};
-    this.extent = extent;
-    this.type = 0;
-
-    // Private
-    this._pbf = pbf;
-    this._geometry = -1;
-    this._keys = keys;
-    this._values = values;
-
-    pbf.readFields(readFeature, this, end);
-}
-
-function readFeature(tag, feature, pbf) {
-    if (tag == 1) feature.id = pbf.readVarint();
-    else if (tag == 2) readTag(pbf, feature);
-    else if (tag == 3) feature.type = pbf.readVarint();
-    else if (tag == 4) feature._geometry = pbf.pos;
-}
-
-function readTag(pbf, feature) {
-    var end = pbf.readVarint() + pbf.pos;
-
-    while (pbf.pos < end) {
-        var key = feature._keys[pbf.readVarint()],
-            value = feature._values[pbf.readVarint()];
-        feature.properties[key] = value;
-    }
-}
-
-VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];
-
-VectorTileFeature.prototype.loadGeometry = function() {
-    var pbf = this._pbf;
-    pbf.pos = this._geometry;
-
-    var end = pbf.readVarint() + pbf.pos,
-        cmd = 1,
-        length = 0,
-        x = 0,
-        y = 0,
-        lines = [],
-        line;
-
-    while (pbf.pos < end) {
-        if (!length) {
-            var cmdLen = pbf.readVarint();
-            cmd = cmdLen & 0x7;
-            length = cmdLen >> 3;
-        }
-
-        length--;
-
-        if (cmd === 1 || cmd === 2) {
-            x += pbf.readSVarint();
-            y += pbf.readSVarint();
-
-            if (cmd === 1) { // moveTo
-                if (line) lines.push(line);
-                line = [];
-            }
-
-            line.push(new Point(x, y));
-
-        } else if (cmd === 7) {
-
-            // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90
-            if (line) {
-                line.push(line[0].clone()); // closePolygon
-            }
-
-        } else {
-            throw new Error('unknown command ' + cmd);
-        }
-    }
-
-    if (line) lines.push(line);
-
-    return lines;
-};
-
-VectorTileFeature.prototype.bbox = function() {
-    var pbf = this._pbf;
-    pbf.pos = this._geometry;
-
-    var end = pbf.readVarint() + pbf.pos,
-        cmd = 1,
-        length = 0,
-        x = 0,
-        y = 0,
-        x1 = Infinity,
-        x2 = -Infinity,
-        y1 = Infinity,
-        y2 = -Infinity;
-
-    while (pbf.pos < end) {
-        if (!length) {
-            var cmdLen = pbf.readVarint();
-            cmd = cmdLen & 0x7;
-            length = cmdLen >> 3;
-        }
-
-        length--;
-
-        if (cmd === 1 || cmd === 2) {
-            x += pbf.readSVarint();
-            y += pbf.readSVarint();
-            if (x < x1) x1 = x;
-            if (x > x2) x2 = x;
-            if (y < y1) y1 = y;
-            if (y > y2) y2 = y;
-
-        } else if (cmd !== 7) {
-            throw new Error('unknown command ' + cmd);
-        }
-    }
-
-    return [x1, y1, x2, y2];
-};
-
-VectorTileFeature.prototype.toGeoJSON = function(x, y, z) {
-    var size = this.extent * Math.pow(2, z),
-        x0 = this.extent * x,
-        y0 = this.extent * y,
-        coords = this.loadGeometry(),
-        type = VectorTileFeature.types[this.type],
-        i, j;
-
-    function project(line) {
-        for (var j = 0; j < line.length; j++) {
-            var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;
-            line[j] = [
-                (p.x + x0) * 360 / size - 180,
-                360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90
-            ];
-        }
-    }
-
-    switch (this.type) {
-    case 1:
-        var points = [];
-        for (i = 0; i < coords.length; i++) {
-            points[i] = coords[i][0];
-        }
-        coords = points;
-        project(coords);
-        break;
-
-    case 2:
-        for (i = 0; i < coords.length; i++) {
-            project(coords[i]);
-        }
-        break;
-
-    case 3:
-        coords = classifyRings(coords);
-        for (i = 0; i < coords.length; i++) {
-            for (j = 0; j < coords[i].length; j++) {
-                project(coords[i][j]);
-            }
-        }
-        break;
-    }
-
-    if (coords.length === 1) {
-        coords = coords[0];
-    } else {
-        type = 'Multi' + type;
-    }
-
-    var result = {
-        type: "Feature",
-        geometry: {
-            type: type,
-            coordinates: coords
-        },
-        properties: this.properties
-    };
-
-    if ('id' in this) {
-        result.id = this.id;
-    }
-
-    return result;
-};
-
-// classifies an array of rings into polygons with outer rings and holes
-
-function classifyRings(rings) {
-    var len = rings.length;
-
-    if (len <= 1) return [rings];
-
-    var polygons = [],
-        polygon,
-        ccw;
-
-    for (var i = 0; i < len; i++) {
-        var area = signedArea(rings[i]);
-        if (area === 0) continue;
-
-        if (ccw === undefined) ccw = area < 0;
-
-        if (ccw === area < 0) {
-            if (polygon) polygons.push(polygon);
-            polygon = [rings[i]];
-
-        } else {
-            polygon.push(rings[i]);
-        }
-    }
-    if (polygon) polygons.push(polygon);
-
-    return polygons;
-}
-
-function signedArea(ring) {
-    var sum = 0;
-    for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {
-        p1 = ring[i];
-        p2 = ring[j];
-        sum += (p2.x - p1.x) * (p1.y + p2.y);
-    }
-    return sum;
-}
-
-},{"point-geometry":1}],5:[function(_dereq_,module,exports){
-'use strict';
-
-var VectorTileFeature = _dereq_('./vectortilefeature.js');
-
-module.exports = VectorTileLayer;
-
-function VectorTileLayer(pbf, end) {
-    // Public
-    this.version = 1;
-    this.name = null;
-    this.extent = 4096;
-    this.length = 0;
-
-    // Private
-    this._pbf = pbf;
-    this._keys = [];
-    this._values = [];
-    this._features = [];
-
-    pbf.readFields(readLayer, this, end);
-
-    this.length = this._features.length;
-}
-
-function readLayer(tag, layer, pbf) {
-    if (tag === 15) layer.version = pbf.readVarint();
-    else if (tag === 1) layer.name = pbf.readString();
-    else if (tag === 5) layer.extent = pbf.readVarint();
-    else if (tag === 2) layer._features.push(pbf.pos);
-    else if (tag === 3) layer._keys.push(pbf.readString());
-    else if (tag === 4) layer._values.push(readValueMessage(pbf));
-}
-
-function readValueMessage(pbf) {
-    var value = null,
-        end = pbf.readVarint() + pbf.pos;
-
-    while (pbf.pos < end) {
-        var tag = pbf.readVarint() >> 3;
-
-        value = tag === 1 ? pbf.readString() :
-            tag === 2 ? pbf.readFloat() :
-            tag === 3 ? pbf.readDouble() :
-            tag === 4 ? pbf.readVarint64() :
-            tag === 5 ? pbf.readVarint() :
-            tag === 6 ? pbf.readSVarint() :
-            tag === 7 ? pbf.readBoolean() : null;
-    }
-
-    return value;
-}
-
-// return feature `i` from this layer as a `VectorTileFeature`
-VectorTileLayer.prototype.feature = function(i) {
-    if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');
-
-    this._pbf.pos = this._features[i];
-
-    var end = this._pbf.readVarint() + this._pbf.pos;
-    return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values);
-};
-
-},{"./vectortilefeature.js":4}]},{},[2])(2)
-});
-ol.ext.vectortile = module.exports;
-})();
-
-goog.provide('ol.render.Feature');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryType');
-
-
-/**
- * Lightweight, read-only, {@link ol.Feature} and {@link ol.geom.Geometry} like
- * structure, optimized for rendering and styling. Geometry access through the
- * API is limited to getting the type and extent of the geometry.
- *
- * @constructor
- * @param {ol.geom.GeometryType} type Geometry type.
- * @param {Array.<number>} flatCoordinates Flat coordinates. These always need
- *     to be right-handed for polygons.
- * @param {Array.<number>|Array.<Array.<number>>} ends Ends or Endss.
- * @param {Object.<string, *>} properties Properties.
- */
-ol.render.Feature = function(type, flatCoordinates, ends, properties) {
-
-  /**
-   * @private
-   * @type {ol.Extent|undefined}
-   */
-  this.extent_;
-
-  ol.DEBUG && console.assert(type === ol.geom.GeometryType.POINT ||
-      type === ol.geom.GeometryType.MULTI_POINT ||
-      type === ol.geom.GeometryType.LINE_STRING ||
-      type === ol.geom.GeometryType.MULTI_LINE_STRING ||
-      type === ol.geom.GeometryType.POLYGON,
-      'Need a Point, MultiPoint, LineString, MultiLineString or Polygon type');
-
-  /**
-   * @private
-   * @type {ol.geom.GeometryType}
-   */
-  this.type_ = type;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.flatCoordinates_ = flatCoordinates;
-
-  /**
-   * @private
-   * @type {Array.<number>|Array.<Array.<number>>}
-   */
-  this.ends_ = ends;
-
-  /**
-   * @private
-   * @type {Object.<string, *>}
-   */
-  this.properties_ = properties;
-
-};
-
-
-/**
- * Get a feature property by its key.
- * @param {string} key Key
- * @return {*} Value for the requested key.
- * @api
- */
-ol.render.Feature.prototype.get = function(key) {
-  return this.properties_[key];
-};
-
-
-/**
- * @return {Array.<number>|Array.<Array.<number>>} Ends or endss.
- */
-ol.render.Feature.prototype.getEnds = function() {
-  return this.ends_;
-};
-
-
-/**
- * Get the extent of this feature's geometry.
- * @return {ol.Extent} Extent.
- * @api
- */
-ol.render.Feature.prototype.getExtent = function() {
-  if (!this.extent_) {
-    this.extent_ = this.type_ === ol.geom.GeometryType.POINT ?
-        ol.extent.createOrUpdateFromCoordinate(this.flatCoordinates_) :
-        ol.extent.createOrUpdateFromFlatCoordinates(
-            this.flatCoordinates_, 0, this.flatCoordinates_.length, 2);
-
-  }
-  return this.extent_;
-};
-
-
-/**
- * @return {Array.<number>} Flat coordinates.
- */
-ol.render.Feature.prototype.getOrientedFlatCoordinates = function() {
-  return this.flatCoordinates_;
-};
-
-
-/**
- * @return {Array.<number>} Flat coordinates.
- */
-ol.render.Feature.prototype.getFlatCoordinates =
-    ol.render.Feature.prototype.getOrientedFlatCoordinates;
-
-
-/**
- * Get the feature for working with its geometry.
- * @return {ol.render.Feature} Feature.
- * @api
- */
-ol.render.Feature.prototype.getGeometry = function() {
-  return this;
-};
-
-
-/**
- * Get the feature properties.
- * @return {Object.<string, *>} Feature properties.
- * @api
- */
-ol.render.Feature.prototype.getProperties = function() {
-  return this.properties_;
-};
-
-
-/**
- * Get the feature for working with its geometry.
- * @return {ol.render.Feature} Feature.
- */
-ol.render.Feature.prototype.getSimplifiedGeometry =
-    ol.render.Feature.prototype.getGeometry;
-
-
-/**
- * @return {number} Stride.
- */
-ol.render.Feature.prototype.getStride = function() {
-  return 2;
-};
-
-
-/**
- * @return {undefined}
- */
-ol.render.Feature.prototype.getStyleFunction = ol.nullFunction;
-
-
-/**
- * Get the type of this feature's geometry.
- * @return {ol.geom.GeometryType} Geometry type.
- * @api
- */
-ol.render.Feature.prototype.getType = function() {
-  return this.type_;
-};
-
-//FIXME Implement projection handling
-
-goog.provide('ol.format.MVT');
-
-goog.require('ol');
-goog.require('ol.ext.pbf');
-goog.require('ol.ext.vectortile');
-goog.require('ol.format.Feature');
-goog.require('ol.format.FormatType');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.proj.Projection');
-goog.require('ol.proj.Units');
-goog.require('ol.render.Feature');
-
-
-/**
- * @classdesc
- * Feature format for reading data in the Mapbox MVT format.
- *
- * @constructor
- * @extends {ol.format.Feature}
- * @param {olx.format.MVTOptions=} opt_options Options.
- * @api
- */
-ol.format.MVT = function(opt_options) {
-
-  ol.format.Feature.call(this);
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @type {ol.proj.Projection}
-   */
-  this.defaultDataProjection = new ol.proj.Projection({
-    code: '',
-    units: ol.proj.Units.TILE_PIXELS
-  });
-
-  /**
-   * @private
-   * @type {function((ol.geom.Geometry|Object.<string, *>)=)|
-   *     function(ol.geom.GeometryType,Array.<number>,
-   *         (Array.<number>|Array.<Array.<number>>),Object.<string, *>)}
-   */
-  this.featureClass_ = options.featureClass ?
-      options.featureClass : ol.render.Feature;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.geometryName_ = options.geometryName ?
-      options.geometryName : 'geometry';
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.layerName_ = options.layerName ? options.layerName : 'layer';
-
-  /**
-   * @private
-   * @type {Array.<string>}
-   */
-  this.layers_ = options.layers ? options.layers : null;
-
-};
-ol.inherits(ol.format.MVT, ol.format.Feature);
-
-
-/**
- * @inheritDoc
- */
-ol.format.MVT.prototype.getType = function() {
-  return ol.format.FormatType.ARRAY_BUFFER;
-};
-
-
-/**
- * @private
- * @param {Object} rawFeature Raw Mapbox feature.
- * @param {string} layer Layer.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- */
-ol.format.MVT.prototype.readFeature_ = function(
-    rawFeature, layer, opt_options) {
-  var feature = new this.featureClass_();
-  var id = rawFeature.id;
-  var values = rawFeature.properties;
-  values[this.layerName_] = layer;
-  var geometry = ol.format.Feature.transformWithOptions(
-      ol.format.MVT.readGeometry_(rawFeature), false,
-      this.adaptOptions(opt_options));
-  if (geometry) {
-    values[this.geometryName_] = geometry;
-  }
-  feature.setId(id);
-  feature.setProperties(values);
-  feature.setGeometryName(this.geometryName_);
-  return feature;
-};
-
-
-/**
- * @private
- * @param {Object} rawFeature Raw Mapbox feature.
- * @param {string} layer Layer.
- * @return {ol.render.Feature} Feature.
- */
-ol.format.MVT.prototype.readRenderFeature_ = function(rawFeature, layer) {
-  var coords = rawFeature.loadGeometry();
-  var ends = [];
-  var flatCoordinates = [];
-  ol.format.MVT.calculateFlatCoordinates_(coords, flatCoordinates, ends);
-
-  var type = rawFeature.type;
-  /** @type {ol.geom.GeometryType} */
-  var geometryType;
-  if (type === 1) {
-    geometryType = coords.length === 1 ?
-        ol.geom.GeometryType.POINT : ol.geom.GeometryType.MULTI_POINT;
-  } else if (type === 2) {
-    if (coords.length === 1) {
-      geometryType = ol.geom.GeometryType.LINE_STRING;
-    } else {
-      geometryType = ol.geom.GeometryType.MULTI_LINE_STRING;
-    }
-  } else if (type === 3) {
-    geometryType = ol.geom.GeometryType.POLYGON;
-  }
-
-  var values = rawFeature.properties;
-  values[this.layerName_] = layer;
-
-  return new this.featureClass_(geometryType, flatCoordinates, ends, values);
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.format.MVT.prototype.readFeatures = function(source, opt_options) {
-  var layers = this.layers_;
-
-  var pbf = new ol.ext.pbf(/** @type {ArrayBuffer} */ (source));
-  var tile = new ol.ext.vectortile.VectorTile(pbf);
-  var features = [];
-  var featureClass = this.featureClass_;
-  var layer, feature;
-  for (var name in tile.layers) {
-    if (layers && layers.indexOf(name) == -1) {
-      continue;
-    }
-    layer = tile.layers[name];
-
-    for (var i = 0, ii = layer.length; i < ii; ++i) {
-      if (featureClass === ol.render.Feature) {
-        feature = this.readRenderFeature_(layer.feature(i), name);
-      } else {
-        feature = this.readFeature_(layer.feature(i), name, opt_options);
-      }
-      features.push(feature);
-    }
-  }
-
-  return features;
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.format.MVT.prototype.readProjection = function(source) {
-  return this.defaultDataProjection;
-};
-
-
-/**
- * Sets the layers that features will be read from.
- * @param {Array.<string>} layers Layers.
- * @api
- */
-ol.format.MVT.prototype.setLayers = function(layers) {
-  this.layers_ = layers;
-};
-
-
-/**
- * @private
- * @param {Object} coords Raw feature coordinates.
- * @param {Array.<number>} flatCoordinates Flat coordinates to be populated by
- *     this function.
- * @param {Array.<number>} ends Ends to be populated by this function.
- */
-ol.format.MVT.calculateFlatCoordinates_ = function(
-    coords, flatCoordinates, ends) {
-  var end = 0;
-  for (var i = 0, ii = coords.length; i < ii; ++i) {
-    var line = coords[i];
-    var j, jj;
-    for (j = 0, jj = line.length; j < jj; ++j) {
-      var coord = line[j];
-      // Non-tilespace coords can be calculated here when a TileGrid and
-      // TileCoord are known.
-      flatCoordinates.push(coord.x, coord.y);
-    }
-    end += 2 * j;
-    ends.push(end);
-  }
-};
-
-
-/**
- * @private
- * @param {Object} rawFeature Raw Mapbox feature.
- * @return {ol.geom.Geometry} Geometry.
- */
-ol.format.MVT.readGeometry_ = function(rawFeature) {
-  var type = rawFeature.type;
-  if (type === 0) {
-    return null;
-  }
-
-  var coords = rawFeature.loadGeometry();
-  var ends = [];
-  var flatCoordinates = [];
-  ol.format.MVT.calculateFlatCoordinates_(coords, flatCoordinates, ends);
-
-  var geom;
-  if (type === 1) {
-    geom = coords.length === 1 ?
-        new ol.geom.Point(null) : new ol.geom.MultiPoint(null);
-  } else if (type === 2) {
-    if (coords.length === 1) {
-      geom = new ol.geom.LineString(null);
-    } else {
-      geom = new ol.geom.MultiLineString(null);
-    }
-  } else if (type === 3) {
-    geom = new ol.geom.Polygon(null);
-  }
-
-  geom.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates,
-      ends);
-
-  return geom;
-};
-
-// FIXME add typedef for stack state objects
-goog.provide('ol.format.OSMXML');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.Feature');
-goog.require('ol.format.Feature');
-goog.require('ol.format.XMLFeature');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.obj');
-goog.require('ol.proj');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Feature format for reading data in the
- * [OSMXML format](http://wiki.openstreetmap.org/wiki/OSM_XML).
- *
- * @constructor
- * @extends {ol.format.XMLFeature}
- * @api stable
- */
-ol.format.OSMXML = function() {
-  ol.format.XMLFeature.call(this);
-
-  /**
-   * @inheritDoc
-   */
-  this.defaultDataProjection = ol.proj.get('EPSG:4326');
-};
-ol.inherits(ol.format.OSMXML, ol.format.XMLFeature);
-
-
-/**
- * @const
- * @type {Array.<string>}
- * @private
- */
-ol.format.OSMXML.EXTENSIONS_ = ['.osm'];
-
-
-/**
- * @inheritDoc
- */
-ol.format.OSMXML.prototype.getExtensions = function() {
-  return ol.format.OSMXML.EXTENSIONS_;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.OSMXML.readNode_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'node', 'localName should be node');
-  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
-  var state = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  var id = node.getAttribute('id');
-  /** @type {ol.Coordinate} */
-  var coordinates = [
-    parseFloat(node.getAttribute('lon')),
-    parseFloat(node.getAttribute('lat'))
-  ];
-  state.nodes[id] = coordinates;
-
-  var values = ol.xml.pushParseAndPop({
-    tags: {}
-  }, ol.format.OSMXML.NODE_PARSERS_, node, objectStack);
-  if (!ol.obj.isEmpty(values.tags)) {
-    var geometry = new ol.geom.Point(coordinates);
-    ol.format.Feature.transformWithOptions(geometry, false, options);
-    var feature = new ol.Feature(geometry);
-    feature.setId(id);
-    feature.setProperties(values.tags);
-    state.features.push(feature);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.OSMXML.readWay_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'way', 'localName should be way');
-  var options = /** @type {olx.format.ReadOptions} */ (objectStack[0]);
-  var id = node.getAttribute('id');
-  var values = ol.xml.pushParseAndPop({
-    ndrefs: [],
-    tags: {}
-  }, ol.format.OSMXML.WAY_PARSERS_, node, objectStack);
-  var state = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  /** @type {Array.<number>} */
-  var flatCoordinates = [];
-  for (var i = 0, ii = values.ndrefs.length; i < ii; i++) {
-    var point = state.nodes[values.ndrefs[i]];
-    ol.array.extend(flatCoordinates, point);
-  }
-  var geometry;
-  if (values.ndrefs[0] == values.ndrefs[values.ndrefs.length - 1]) {
-    // closed way
-    geometry = new ol.geom.Polygon(null);
-    geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates,
-        [flatCoordinates.length]);
-  } else {
-    geometry = new ol.geom.LineString(null);
-    geometry.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);
-  }
-  ol.format.Feature.transformWithOptions(geometry, false, options);
-  var feature = new ol.Feature(geometry);
-  feature.setId(id);
-  feature.setProperties(values.tags);
-  state.features.push(feature);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.OSMXML.readNd_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'nd', 'localName should be nd');
-  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  values.ndrefs.push(node.getAttribute('ref'));
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.OSMXML.readTag_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'tag', 'localName should be tag');
-  var values = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  values.tags[node.getAttribute('k')] = node.getAttribute('v');
-};
-
-
-/**
- * @const
- * @private
- * @type {Array.<string>}
- */
-ol.format.OSMXML.NAMESPACE_URIS_ = [
-  null
-];
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OSMXML.WAY_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OSMXML.NAMESPACE_URIS_, {
-      'nd': ol.format.OSMXML.readNd_,
-      'tag': ol.format.OSMXML.readTag_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OSMXML.PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OSMXML.NAMESPACE_URIS_, {
-      'node': ol.format.OSMXML.readNode_,
-      'way': ol.format.OSMXML.readWay_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OSMXML.NODE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OSMXML.NAMESPACE_URIS_, {
-      'tag': ol.format.OSMXML.readTag_
-    });
-
-
-/**
- * Read all features from an OSM source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.OSMXML.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.OSMXML.prototype.readFeaturesFromNode = function(node, opt_options) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  var options = this.getReadOptions(node, opt_options);
-  if (node.localName == 'osm') {
-    var state = ol.xml.pushParseAndPop({
-      nodes: {},
-      features: []
-    }, ol.format.OSMXML.PARSERS_, node, [options]);
-    if (state.features) {
-      return state.features;
-    }
-  }
-  return [];
-};
-
-
-/**
- * Read the projection from an OSM source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.proj.Projection} Projection.
- * @api stable
- */
-ol.format.OSMXML.prototype.readProjection;
-
-goog.provide('ol.format.XLink');
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.XLink.NAMESPACE_URI = 'http://www.w3.org/1999/xlink';
-
-
-/**
- * @param {Node} node Node.
- * @return {boolean|undefined} Boolean.
- */
-ol.format.XLink.readHref = function(node) {
-  return node.getAttributeNS(ol.format.XLink.NAMESPACE_URI, 'href');
-};
-
-goog.provide('ol.format.XML');
-
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Generic format for reading non-feature XML data
- *
- * @constructor
- * @struct
- */
-ol.format.XML = function() {
-};
-
-
-/**
- * @param {Document|Node|string} source Source.
- * @return {Object} The parsed result.
- */
-ol.format.XML.prototype.read = function(source) {
-  if (ol.xml.isDocument(source)) {
-    return this.readFromDocument(/** @type {Document} */ (source));
-  } else if (ol.xml.isNode(source)) {
-    return this.readFromNode(/** @type {Node} */ (source));
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    return this.readFromDocument(doc);
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * @abstract
- * @param {Document} doc Document.
- * @return {Object} Object
- */
-ol.format.XML.prototype.readFromDocument = function(doc) {};
-
-
-/**
- * @abstract
- * @param {Node} node Node.
- * @return {Object} Object
- */
-ol.format.XML.prototype.readFromNode = function(node) {};
-
-goog.provide('ol.format.OWS');
-
-goog.require('ol');
-goog.require('ol.format.XLink');
-goog.require('ol.format.XML');
-goog.require('ol.format.XSD');
-goog.require('ol.xml');
-
-
-/**
- * @constructor
- * @extends {ol.format.XML}
- */
-ol.format.OWS = function() {
-  ol.format.XML.call(this);
-};
-ol.inherits(ol.format.OWS, ol.format.XML);
-
-
-/**
- * @param {Document} doc Document.
- * @return {Object} OWS object.
- */
-ol.format.OWS.prototype.readFromDocument = function(doc) {
-  ol.DEBUG && console.assert(doc.nodeType == Node.DOCUMENT_NODE,
-      'doc.nodeType should be DOCUMENT');
-  for (var n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      return this.readFromNode(n);
-    }
-  }
-  return null;
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {Object} OWS object.
- */
-ol.format.OWS.prototype.readFromNode = function(node) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  var owsObject = ol.xml.pushParseAndPop({},
-      ol.format.OWS.PARSERS_, node, []);
-  return owsObject ? owsObject : null;
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The address.
- */
-ol.format.OWS.readAddress_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Address',
-      'localName should be Address');
-  return ol.xml.pushParseAndPop({},
-      ol.format.OWS.ADDRESS_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The values.
- */
-ol.format.OWS.readAllowedValues_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'AllowedValues',
-      'localName should be AllowedValues');
-  return ol.xml.pushParseAndPop({},
-      ol.format.OWS.ALLOWED_VALUES_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The constraint.
- */
-ol.format.OWS.readConstraint_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Constraint',
-      'localName should be Constraint');
-  var name = node.getAttribute('name');
-  if (!name) {
-    return undefined;
-  }
-  return ol.xml.pushParseAndPop({'name': name},
-      ol.format.OWS.CONSTRAINT_PARSERS_, node,
-      objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The contact info.
- */
-ol.format.OWS.readContactInfo_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'ContactInfo',
-      'localName should be ContactInfo');
-  return ol.xml.pushParseAndPop({},
-      ol.format.OWS.CONTACT_INFO_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The DCP.
- */
-ol.format.OWS.readDcp_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'DCP', 'localName should be DCP');
-  return ol.xml.pushParseAndPop({},
-      ol.format.OWS.DCP_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The GET object.
- */
-ol.format.OWS.readGet_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Get', 'localName should be Get');
-  var href = ol.format.XLink.readHref(node);
-  if (!href) {
-    return undefined;
-  }
-  return ol.xml.pushParseAndPop({'href': href},
-      ol.format.OWS.REQUEST_METHOD_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The HTTP object.
- */
-ol.format.OWS.readHttp_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'HTTP', 'localName should be HTTP');
-  return ol.xml.pushParseAndPop({}, ol.format.OWS.HTTP_PARSERS_,
-      node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The operation.
- */
-ol.format.OWS.readOperation_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Operation',
-      'localName should be Operation');
-  var name = node.getAttribute('name');
-  var value = ol.xml.pushParseAndPop({},
-      ol.format.OWS.OPERATION_PARSERS_, node, objectStack);
-  if (!value) {
-    return undefined;
-  }
-  var object = /** @type {Object} */
-      (objectStack[objectStack.length - 1]);
-  object[name] = value;
-
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The operations metadata.
- */
-ol.format.OWS.readOperationsMetadata_ = function(node,
-    objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'OperationsMetadata',
-      'localName should be OperationsMetadata');
-  return ol.xml.pushParseAndPop({},
-      ol.format.OWS.OPERATIONS_METADATA_PARSERS_, node,
-      objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The phone.
- */
-ol.format.OWS.readPhone_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Phone', 'localName should be Phone');
-  return ol.xml.pushParseAndPop({},
-      ol.format.OWS.PHONE_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The service identification.
- */
-ol.format.OWS.readServiceIdentification_ = function(node,
-    objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'ServiceIdentification',
-      'localName should be ServiceIdentification');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.OWS.SERVICE_IDENTIFICATION_PARSERS_, node,
-      objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The service contact.
- */
-ol.format.OWS.readServiceContact_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'ServiceContact',
-      'localName should be ServiceContact');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.OWS.SERVICE_CONTACT_PARSERS_, node,
-      objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} The service provider.
- */
-ol.format.OWS.readServiceProvider_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'ServiceProvider',
-      'localName should be ServiceProvider');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.OWS.SERVICE_PROVIDER_PARSERS_, node,
-      objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {string|undefined} The value.
- */
-ol.format.OWS.readValue_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Value', 'localName should be Value');
-  return ol.format.XSD.readString(node);
-};
-
-
-/**
- * @const
- * @type {Array.<string>}
- * @private
- */
-ol.format.OWS.NAMESPACE_URIS_ = [
-  null,
-  'http://www.opengis.net/ows/1.1'
-];
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'ServiceIdentification': ol.xml.makeObjectPropertySetter(
-          ol.format.OWS.readServiceIdentification_),
-      'ServiceProvider': ol.xml.makeObjectPropertySetter(
-          ol.format.OWS.readServiceProvider_),
-      'OperationsMetadata': ol.xml.makeObjectPropertySetter(
-          ol.format.OWS.readOperationsMetadata_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.ADDRESS_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'DeliveryPoint': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'City': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'AdministrativeArea': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'PostalCode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Country': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'ElectronicMailAddress': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.ALLOWED_VALUES_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'Value': ol.xml.makeObjectPropertyPusher(ol.format.OWS.readValue_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.CONSTRAINT_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'AllowedValues': ol.xml.makeObjectPropertySetter(
-          ol.format.OWS.readAllowedValues_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.CONTACT_INFO_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'Phone': ol.xml.makeObjectPropertySetter(ol.format.OWS.readPhone_),
-      'Address': ol.xml.makeObjectPropertySetter(ol.format.OWS.readAddress_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.DCP_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'HTTP': ol.xml.makeObjectPropertySetter(ol.format.OWS.readHttp_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.HTTP_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'Get': ol.xml.makeObjectPropertyPusher(ol.format.OWS.readGet_),
-      'Post': undefined // TODO
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.OPERATION_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'DCP': ol.xml.makeObjectPropertySetter(ol.format.OWS.readDcp_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.OPERATIONS_METADATA_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'Operation': ol.format.OWS.readOperation_
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.PHONE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'Voice': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Facsimile': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.REQUEST_METHOD_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'Constraint': ol.xml.makeObjectPropertyPusher(
-          ol.format.OWS.readConstraint_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.SERVICE_CONTACT_PARSERS_ =
-    ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'IndividualName': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'PositionName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'ContactInfo': ol.xml.makeObjectPropertySetter(
-          ol.format.OWS.readContactInfo_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.SERVICE_IDENTIFICATION_PARSERS_ =
-    ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'ServiceTypeVersion': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'ServiceType': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.OWS.SERVICE_PROVIDER_PARSERS_ =
-    ol.xml.makeStructureNS(
-    ol.format.OWS.NAMESPACE_URIS_, {
-      'ProviderName': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'ProviderSite': ol.xml.makeObjectPropertySetter(ol.format.XLink.readHref),
-      'ServiceContact': ol.xml.makeObjectPropertySetter(
-          ol.format.OWS.readServiceContact_)
-    });
-
-goog.provide('ol.geom.flat.flip');
-
-
-/**
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- * @param {number} offset Offset.
- * @param {number} end End.
- * @param {number} stride Stride.
- * @param {Array.<number>=} opt_dest Destination.
- * @param {number=} opt_destOffset Destination offset.
- * @return {Array.<number>} Flat coordinates.
- */
-ol.geom.flat.flip.flipXY = function(flatCoordinates, offset, end, stride, opt_dest, opt_destOffset) {
-  var dest, destOffset;
-  if (opt_dest !== undefined) {
-    dest = opt_dest;
-    destOffset = opt_destOffset !== undefined ? opt_destOffset : 0;
-  } else {
-    dest = [];
-    destOffset = 0;
-  }
-  var j = offset;
-  while (j < end) {
-    var x = flatCoordinates[j++];
-    dest[destOffset++] = flatCoordinates[j++];
-    dest[destOffset++] = x;
-    for (var k = 2; k < stride; ++k) {
-      dest[destOffset++] = flatCoordinates[j++];
-    }
-  }
-  dest.length = destOffset;
-  return dest;
-};
-
-goog.provide('ol.format.Polyline');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.Feature');
-goog.require('ol.format.Feature');
-goog.require('ol.format.TextFeature');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.flip');
-goog.require('ol.geom.flat.inflate');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the Encoded
- * Polyline Algorithm Format.
- *
- * @constructor
- * @extends {ol.format.TextFeature}
- * @param {olx.format.PolylineOptions=} opt_options
- *     Optional configuration object.
- * @api stable
- */
-ol.format.Polyline = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.format.TextFeature.call(this);
-
-  /**
-   * @inheritDoc
-   */
-  this.defaultDataProjection = ol.proj.get('EPSG:4326');
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.factor_ = options.factor ? options.factor : 1e5;
-
-  /**
-   * @private
-   * @type {ol.geom.GeometryLayout}
-   */
-  this.geometryLayout_ = options.geometryLayout ?
-      options.geometryLayout : ol.geom.GeometryLayout.XY;
-};
-ol.inherits(ol.format.Polyline, ol.format.TextFeature);
-
-
-/**
- * Encode a list of n-dimensional points and return an encoded string
- *
- * Attention: This function will modify the passed array!
- *
- * @param {Array.<number>} numbers A list of n-dimensional points.
- * @param {number} stride The number of dimension of the points in the list.
- * @param {number=} opt_factor The factor by which the numbers will be
- *     multiplied. The remaining decimal places will get rounded away.
- *     Default is `1e5`.
- * @return {string} The encoded string.
- * @api
- */
-ol.format.Polyline.encodeDeltas = function(numbers, stride, opt_factor) {
-  var factor = opt_factor ? opt_factor : 1e5;
-  var d;
-
-  var lastNumbers = new Array(stride);
-  for (d = 0; d < stride; ++d) {
-    lastNumbers[d] = 0;
-  }
-
-  var i, ii;
-  for (i = 0, ii = numbers.length; i < ii;) {
-    for (d = 0; d < stride; ++d, ++i) {
-      var num = numbers[i];
-      var delta = num - lastNumbers[d];
-      lastNumbers[d] = num;
-
-      numbers[i] = delta;
-    }
-  }
-
-  return ol.format.Polyline.encodeFloats(numbers, factor);
-};
-
-
-/**
- * Decode a list of n-dimensional points from an encoded string
- *
- * @param {string} encoded An encoded string.
- * @param {number} stride The number of dimension of the points in the
- *     encoded string.
- * @param {number=} opt_factor The factor by which the resulting numbers will
- *     be divided. Default is `1e5`.
- * @return {Array.<number>} A list of n-dimensional points.
- * @api
- */
-ol.format.Polyline.decodeDeltas = function(encoded, stride, opt_factor) {
-  var factor = opt_factor ? opt_factor : 1e5;
-  var d;
-
-  /** @type {Array.<number>} */
-  var lastNumbers = new Array(stride);
-  for (d = 0; d < stride; ++d) {
-    lastNumbers[d] = 0;
-  }
-
-  var numbers = ol.format.Polyline.decodeFloats(encoded, factor);
-
-  var i, ii;
-  for (i = 0, ii = numbers.length; i < ii;) {
-    for (d = 0; d < stride; ++d, ++i) {
-      lastNumbers[d] += numbers[i];
-
-      numbers[i] = lastNumbers[d];
-    }
-  }
-
-  return numbers;
-};
-
-
-/**
- * Encode a list of floating point numbers and return an encoded string
- *
- * Attention: This function will modify the passed array!
- *
- * @param {Array.<number>} numbers A list of floating point numbers.
- * @param {number=} opt_factor The factor by which the numbers will be
- *     multiplied. The remaining decimal places will get rounded away.
- *     Default is `1e5`.
- * @return {string} The encoded string.
- * @api
- */
-ol.format.Polyline.encodeFloats = function(numbers, opt_factor) {
-  var factor = opt_factor ? opt_factor : 1e5;
-  var i, ii;
-  for (i = 0, ii = numbers.length; i < ii; ++i) {
-    numbers[i] = Math.round(numbers[i] * factor);
-  }
-
-  return ol.format.Polyline.encodeSignedIntegers(numbers);
-};
-
-
-/**
- * Decode a list of floating point numbers from an encoded string
- *
- * @param {string} encoded An encoded string.
- * @param {number=} opt_factor The factor by which the result will be divided.
- *     Default is `1e5`.
- * @return {Array.<number>} A list of floating point numbers.
- * @api
- */
-ol.format.Polyline.decodeFloats = function(encoded, opt_factor) {
-  var factor = opt_factor ? opt_factor : 1e5;
-  var numbers = ol.format.Polyline.decodeSignedIntegers(encoded);
-  var i, ii;
-  for (i = 0, ii = numbers.length; i < ii; ++i) {
-    numbers[i] /= factor;
-  }
-  return numbers;
-};
-
-
-/**
- * Encode a list of signed integers and return an encoded string
- *
- * Attention: This function will modify the passed array!
- *
- * @param {Array.<number>} numbers A list of signed integers.
- * @return {string} The encoded string.
- */
-ol.format.Polyline.encodeSignedIntegers = function(numbers) {
-  var i, ii;
-  for (i = 0, ii = numbers.length; i < ii; ++i) {
-    var num = numbers[i];
-    numbers[i] = (num < 0) ? ~(num << 1) : (num << 1);
-  }
-  return ol.format.Polyline.encodeUnsignedIntegers(numbers);
-};
-
-
-/**
- * Decode a list of signed integers from an encoded string
- *
- * @param {string} encoded An encoded string.
- * @return {Array.<number>} A list of signed integers.
- */
-ol.format.Polyline.decodeSignedIntegers = function(encoded) {
-  var numbers = ol.format.Polyline.decodeUnsignedIntegers(encoded);
-  var i, ii;
-  for (i = 0, ii = numbers.length; i < ii; ++i) {
-    var num = numbers[i];
-    numbers[i] = (num & 1) ? ~(num >> 1) : (num >> 1);
-  }
-  return numbers;
-};
-
-
-/**
- * Encode a list of unsigned integers and return an encoded string
- *
- * @param {Array.<number>} numbers A list of unsigned integers.
- * @return {string} The encoded string.
- */
-ol.format.Polyline.encodeUnsignedIntegers = function(numbers) {
-  var encoded = '';
-  var i, ii;
-  for (i = 0, ii = numbers.length; i < ii; ++i) {
-    encoded += ol.format.Polyline.encodeUnsignedInteger(numbers[i]);
-  }
-  return encoded;
-};
-
-
-/**
- * Decode a list of unsigned integers from an encoded string
- *
- * @param {string} encoded An encoded string.
- * @return {Array.<number>} A list of unsigned integers.
- */
-ol.format.Polyline.decodeUnsignedIntegers = function(encoded) {
-  var numbers = [];
-  var current = 0;
-  var shift = 0;
-  var i, ii;
-  for (i = 0, ii = encoded.length; i < ii; ++i) {
-    var b = encoded.charCodeAt(i) - 63;
-    current |= (b & 0x1f) << shift;
-    if (b < 0x20) {
-      numbers.push(current);
-      current = 0;
-      shift = 0;
-    } else {
-      shift += 5;
-    }
-  }
-  return numbers;
-};
-
-
-/**
- * Encode one single unsigned integer and return an encoded string
- *
- * @param {number} num Unsigned integer that should be encoded.
- * @return {string} The encoded string.
- */
-ol.format.Polyline.encodeUnsignedInteger = function(num) {
-  var value, encoded = '';
-  while (num >= 0x20) {
-    value = (0x20 | (num & 0x1f)) + 63;
-    encoded += String.fromCharCode(value);
-    num >>= 5;
-  }
-  value = num + 63;
-  encoded += String.fromCharCode(value);
-  return encoded;
-};
-
-
-/**
- * Read the feature from the Polyline source. The coordinates are assumed to be
- * in two dimensions and in latitude, longitude order.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- * @api stable
- */
-ol.format.Polyline.prototype.readFeature;
-
-
-/**
- * @inheritDoc
- */
-ol.format.Polyline.prototype.readFeatureFromText = function(text, opt_options) {
-  var geometry = this.readGeometryFromText(text, opt_options);
-  return new ol.Feature(geometry);
-};
-
-
-/**
- * Read the feature from the source. As Polyline sources contain a single
- * feature, this will return the feature in an array.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.Polyline.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.Polyline.prototype.readFeaturesFromText = function(text, opt_options) {
-  var feature = this.readFeatureFromText(text, opt_options);
-  return [feature];
-};
-
-
-/**
- * Read the geometry from the source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.geom.Geometry} Geometry.
- * @api stable
- */
-ol.format.Polyline.prototype.readGeometry;
-
-
-/**
- * @inheritDoc
- */
-ol.format.Polyline.prototype.readGeometryFromText = function(text, opt_options) {
-  var stride = ol.geom.SimpleGeometry.getStrideForLayout(this.geometryLayout_);
-  var flatCoordinates = ol.format.Polyline.decodeDeltas(
-      text, stride, this.factor_);
-  ol.geom.flat.flip.flipXY(
-      flatCoordinates, 0, flatCoordinates.length, stride, flatCoordinates);
-  var coordinates = ol.geom.flat.inflate.coordinates(
-      flatCoordinates, 0, flatCoordinates.length, stride);
-
-  return /** @type {ol.geom.Geometry} */ (
-      ol.format.Feature.transformWithOptions(
-          new ol.geom.LineString(coordinates, this.geometryLayout_), false,
-          this.adaptOptions(opt_options)));
-};
-
-
-/**
- * Read the projection from a Polyline source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.proj.Projection} Projection.
- * @api stable
- */
-ol.format.Polyline.prototype.readProjection;
-
-
-/**
- * @inheritDoc
- */
-ol.format.Polyline.prototype.writeFeatureText = function(feature, opt_options) {
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    return this.writeGeometryText(geometry, opt_options);
-  } else {
-    ol.asserts.assert(false, 40); // Expected `feature` to have a geometry
-    return '';
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.Polyline.prototype.writeFeaturesText = function(features, opt_options) {
-  ol.DEBUG && console.assert(features.length == 1,
-      'features array should have 1 item');
-  return this.writeFeatureText(features[0], opt_options);
-};
-
-
-/**
- * Write a single geometry in Polyline format.
- *
- * @function
- * @param {ol.geom.Geometry} geometry Geometry.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} Geometry.
- * @api stable
- */
-ol.format.Polyline.prototype.writeGeometry;
-
-
-/**
- * @inheritDoc
- */
-ol.format.Polyline.prototype.writeGeometryText = function(geometry, opt_options) {
-  geometry = /** @type {ol.geom.LineString} */
-      (ol.format.Feature.transformWithOptions(
-          geometry, true, this.adaptOptions(opt_options)));
-  var flatCoordinates = geometry.getFlatCoordinates();
-  var stride = geometry.getStride();
-  ol.geom.flat.flip.flipXY(
-      flatCoordinates, 0, flatCoordinates.length, stride, flatCoordinates);
-  return ol.format.Polyline.encodeDeltas(flatCoordinates, stride, this.factor_);
-};
-
-goog.provide('ol.format.TopoJSON');
-
-goog.require('ol');
-goog.require('ol.Feature');
-goog.require('ol.format.Feature');
-goog.require('ol.format.JSONFeature');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.obj');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * Feature format for reading data in the TopoJSON format.
- *
- * @constructor
- * @extends {ol.format.JSONFeature}
- * @param {olx.format.TopoJSONOptions=} opt_options Options.
- * @api stable
- */
-ol.format.TopoJSON = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.format.JSONFeature.call(this);
-
-  /**
-   * @inheritDoc
-   */
-  this.defaultDataProjection = ol.proj.get(
-      options.defaultDataProjection ?
-          options.defaultDataProjection : 'EPSG:4326');
-
-};
-ol.inherits(ol.format.TopoJSON, ol.format.JSONFeature);
-
-
-/**
- * @const {Array.<string>}
- * @private
- */
-ol.format.TopoJSON.EXTENSIONS_ = ['.topojson'];
-
-
-/**
- * Concatenate arcs into a coordinate array.
- * @param {Array.<number>} indices Indices of arcs to concatenate.  Negative
- *     values indicate arcs need to be reversed.
- * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs (already
- *     transformed).
- * @return {Array.<ol.Coordinate>} Coordinates array.
- * @private
- */
-ol.format.TopoJSON.concatenateArcs_ = function(indices, arcs) {
-  /** @type {Array.<ol.Coordinate>} */
-  var coordinates = [];
-  var index, arc;
-  var i, ii;
-  var j, jj;
-  for (i = 0, ii = indices.length; i < ii; ++i) {
-    index = indices[i];
-    if (i > 0) {
-      // splicing together arcs, discard last point
-      coordinates.pop();
-    }
-    if (index >= 0) {
-      // forward arc
-      arc = arcs[index];
-    } else {
-      // reverse arc
-      arc = arcs[~index].slice().reverse();
-    }
-    coordinates.push.apply(coordinates, arc);
-  }
-  // provide fresh copies of coordinate arrays
-  for (j = 0, jj = coordinates.length; j < jj; ++j) {
-    coordinates[j] = coordinates[j].slice();
-  }
-  return coordinates;
-};
-
-
-/**
- * Create a point from a TopoJSON geometry object.
- *
- * @param {TopoJSONGeometry} object TopoJSON object.
- * @param {Array.<number>} scale Scale for each dimension.
- * @param {Array.<number>} translate Translation for each dimension.
- * @return {ol.geom.Point} Geometry.
- * @private
- */
-ol.format.TopoJSON.readPointGeometry_ = function(object, scale, translate) {
-  var coordinates = object.coordinates;
-  if (scale && translate) {
-    ol.format.TopoJSON.transformVertex_(coordinates, scale, translate);
-  }
-  return new ol.geom.Point(coordinates);
-};
-
-
-/**
- * Create a multi-point from a TopoJSON geometry object.
- *
- * @param {TopoJSONGeometry} object TopoJSON object.
- * @param {Array.<number>} scale Scale for each dimension.
- * @param {Array.<number>} translate Translation for each dimension.
- * @return {ol.geom.MultiPoint} Geometry.
- * @private
- */
-ol.format.TopoJSON.readMultiPointGeometry_ = function(object, scale,
-    translate) {
-  var coordinates = object.coordinates;
-  var i, ii;
-  if (scale && translate) {
-    for (i = 0, ii = coordinates.length; i < ii; ++i) {
-      ol.format.TopoJSON.transformVertex_(coordinates[i], scale, translate);
-    }
-  }
-  return new ol.geom.MultiPoint(coordinates);
-};
-
-
-/**
- * Create a linestring from a TopoJSON geometry object.
- *
- * @param {TopoJSONGeometry} object TopoJSON object.
- * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.
- * @return {ol.geom.LineString} Geometry.
- * @private
- */
-ol.format.TopoJSON.readLineStringGeometry_ = function(object, arcs) {
-  var coordinates = ol.format.TopoJSON.concatenateArcs_(object.arcs, arcs);
-  return new ol.geom.LineString(coordinates);
-};
-
-
-/**
- * Create a multi-linestring from a TopoJSON geometry object.
- *
- * @param {TopoJSONGeometry} object TopoJSON object.
- * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.
- * @return {ol.geom.MultiLineString} Geometry.
- * @private
- */
-ol.format.TopoJSON.readMultiLineStringGeometry_ = function(object, arcs) {
-  var coordinates = [];
-  var i, ii;
-  for (i = 0, ii = object.arcs.length; i < ii; ++i) {
-    coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs);
-  }
-  return new ol.geom.MultiLineString(coordinates);
-};
-
-
-/**
- * Create a polygon from a TopoJSON geometry object.
- *
- * @param {TopoJSONGeometry} object TopoJSON object.
- * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.
- * @return {ol.geom.Polygon} Geometry.
- * @private
- */
-ol.format.TopoJSON.readPolygonGeometry_ = function(object, arcs) {
-  var coordinates = [];
-  var i, ii;
-  for (i = 0, ii = object.arcs.length; i < ii; ++i) {
-    coordinates[i] = ol.format.TopoJSON.concatenateArcs_(object.arcs[i], arcs);
-  }
-  return new ol.geom.Polygon(coordinates);
-};
-
-
-/**
- * Create a multi-polygon from a TopoJSON geometry object.
- *
- * @param {TopoJSONGeometry} object TopoJSON object.
- * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.
- * @return {ol.geom.MultiPolygon} Geometry.
- * @private
- */
-ol.format.TopoJSON.readMultiPolygonGeometry_ = function(object, arcs) {
-  var coordinates = [];
-  var polyArray, ringCoords, j, jj;
-  var i, ii;
-  for (i = 0, ii = object.arcs.length; i < ii; ++i) {
-    // for each polygon
-    polyArray = object.arcs[i];
-    ringCoords = [];
-    for (j = 0, jj = polyArray.length; j < jj; ++j) {
-      // for each ring
-      ringCoords[j] = ol.format.TopoJSON.concatenateArcs_(polyArray[j], arcs);
-    }
-    coordinates[i] = ringCoords;
-  }
-  return new ol.geom.MultiPolygon(coordinates);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.TopoJSON.prototype.getExtensions = function() {
-  return ol.format.TopoJSON.EXTENSIONS_;
-};
-
-
-/**
- * Create features from a TopoJSON GeometryCollection object.
- *
- * @param {TopoJSONGeometryCollection} collection TopoJSON Geometry
- *     object.
- * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.
- * @param {Array.<number>} scale Scale for each dimension.
- * @param {Array.<number>} translate Translation for each dimension.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Array of features.
- * @private
- */
-ol.format.TopoJSON.readFeaturesFromGeometryCollection_ = function(
-    collection, arcs, scale, translate, opt_options) {
-  var geometries = collection.geometries;
-  var features = [];
-  var i, ii;
-  for (i = 0, ii = geometries.length; i < ii; ++i) {
-    features[i] = ol.format.TopoJSON.readFeatureFromGeometry_(
-        geometries[i], arcs, scale, translate, opt_options);
-  }
-  return features;
-};
-
-
-/**
- * Create a feature from a TopoJSON geometry object.
- *
- * @param {TopoJSONGeometry} object TopoJSON geometry object.
- * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.
- * @param {Array.<number>} scale Scale for each dimension.
- * @param {Array.<number>} translate Translation for each dimension.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- * @private
- */
-ol.format.TopoJSON.readFeatureFromGeometry_ = function(object, arcs,
-    scale, translate, opt_options) {
-  var geometry;
-  var type = object.type;
-  var geometryReader = ol.format.TopoJSON.GEOMETRY_READERS_[type];
-  if ((type === 'Point') || (type === 'MultiPoint')) {
-    geometry = geometryReader(object, scale, translate);
-  } else {
-    geometry = geometryReader(object, arcs);
-  }
-  var feature = new ol.Feature();
-  feature.setGeometry(/** @type {ol.geom.Geometry} */ (
-      ol.format.Feature.transformWithOptions(geometry, false, opt_options)));
-  if (object.id !== undefined) {
-    feature.setId(object.id);
-  }
-  if (object.properties) {
-    feature.setProperties(object.properties);
-  }
-  return feature;
-};
-
-
-/**
- * Read all features from a TopoJSON source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.TopoJSON.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.TopoJSON.prototype.readFeaturesFromObject = function(
-    object, opt_options) {
-  if (object.type == 'Topology') {
-    var topoJSONTopology = /** @type {TopoJSONTopology} */ (object);
-    var transform, scale = null, translate = null;
-    if (topoJSONTopology.transform) {
-      transform = topoJSONTopology.transform;
-      scale = transform.scale;
-      translate = transform.translate;
-    }
-    var arcs = topoJSONTopology.arcs;
-    if (transform) {
-      ol.format.TopoJSON.transformArcs_(arcs, scale, translate);
-    }
-    /** @type {Array.<ol.Feature>} */
-    var features = [];
-    var topoJSONFeatures = ol.obj.getValues(topoJSONTopology.objects);
-    var i, ii;
-    var feature;
-    for (i = 0, ii = topoJSONFeatures.length; i < ii; ++i) {
-      if (topoJSONFeatures[i].type === 'GeometryCollection') {
-        feature = /** @type {TopoJSONGeometryCollection} */
-            (topoJSONFeatures[i]);
-        features.push.apply(features,
-            ol.format.TopoJSON.readFeaturesFromGeometryCollection_(
-                feature, arcs, scale, translate, opt_options));
-      } else {
-        feature = /** @type {TopoJSONGeometry} */
-            (topoJSONFeatures[i]);
-        features.push(ol.format.TopoJSON.readFeatureFromGeometry_(
-            feature, arcs, scale, translate, opt_options));
-      }
-    }
-    return features;
-  } else {
-    return [];
-  }
-};
-
-
-/**
- * Apply a linear transform to array of arcs.  The provided array of arcs is
- * modified in place.
- *
- * @param {Array.<Array.<ol.Coordinate>>} arcs Array of arcs.
- * @param {Array.<number>} scale Scale for each dimension.
- * @param {Array.<number>} translate Translation for each dimension.
- * @private
- */
-ol.format.TopoJSON.transformArcs_ = function(arcs, scale, translate) {
-  var i, ii;
-  for (i = 0, ii = arcs.length; i < ii; ++i) {
-    ol.format.TopoJSON.transformArc_(arcs[i], scale, translate);
-  }
-};
-
-
-/**
- * Apply a linear transform to an arc.  The provided arc is modified in place.
- *
- * @param {Array.<ol.Coordinate>} arc Arc.
- * @param {Array.<number>} scale Scale for each dimension.
- * @param {Array.<number>} translate Translation for each dimension.
- * @private
- */
-ol.format.TopoJSON.transformArc_ = function(arc, scale, translate) {
-  var x = 0;
-  var y = 0;
-  var vertex;
-  var i, ii;
-  for (i = 0, ii = arc.length; i < ii; ++i) {
-    vertex = arc[i];
-    x += vertex[0];
-    y += vertex[1];
-    vertex[0] = x;
-    vertex[1] = y;
-    ol.format.TopoJSON.transformVertex_(vertex, scale, translate);
-  }
-};
-
-
-/**
- * Apply a linear transform to a vertex.  The provided vertex is modified in
- * place.
- *
- * @param {ol.Coordinate} vertex Vertex.
- * @param {Array.<number>} scale Scale for each dimension.
- * @param {Array.<number>} translate Translation for each dimension.
- * @private
- */
-ol.format.TopoJSON.transformVertex_ = function(vertex, scale, translate) {
-  vertex[0] = vertex[0] * scale[0] + translate[0];
-  vertex[1] = vertex[1] * scale[1] + translate[1];
-};
-
-
-/**
- * Read the projection from a TopoJSON source.
- *
- * @function
- * @param {Document|Node|Object|string} object Source.
- * @return {ol.proj.Projection} Projection.
- * @api stable
- */
-ol.format.TopoJSON.prototype.readProjection = function(object) {
-  return this.defaultDataProjection;
-};
-
-
-/**
- * @const
- * @private
- * @type {Object.<string, function(TopoJSONGeometry, Array, ...Array): ol.geom.Geometry>}
- */
-ol.format.TopoJSON.GEOMETRY_READERS_ = {
-  'Point': ol.format.TopoJSON.readPointGeometry_,
-  'LineString': ol.format.TopoJSON.readLineStringGeometry_,
-  'Polygon': ol.format.TopoJSON.readPolygonGeometry_,
-  'MultiPoint': ol.format.TopoJSON.readMultiPointGeometry_,
-  'MultiLineString': ol.format.TopoJSON.readMultiLineStringGeometry_,
-  'MultiPolygon': ol.format.TopoJSON.readMultiPolygonGeometry_
-};
-
-goog.provide('ol.format.WFS');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.format.GML3');
-goog.require('ol.format.GMLBase');
-goog.require('ol.format.filter');
-goog.require('ol.format.XMLFeature');
-goog.require('ol.format.XSD');
-goog.require('ol.geom.Geometry');
-goog.require('ol.obj');
-goog.require('ol.proj');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Feature format for reading and writing data in the WFS format.
- * By default, supports WFS version 1.1.0. You can pass a GML format
- * as option if you want to read a WFS that contains GML2 (WFS 1.0.0).
- * Also see {@link ol.format.GMLBase} which is used by this format.
- *
- * @constructor
- * @param {olx.format.WFSOptions=} opt_options
- *     Optional configuration object.
- * @extends {ol.format.XMLFeature}
- * @api stable
- */
-ol.format.WFS = function(opt_options) {
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {Array.<string>|string|undefined}
-   */
-  this.featureType_ = options.featureType;
-
-  /**
-   * @private
-   * @type {Object.<string, string>|string|undefined}
-   */
-  this.featureNS_ = options.featureNS;
-
-  /**
-   * @private
-   * @type {ol.format.GMLBase}
-   */
-  this.gmlFormat_ = options.gmlFormat ?
-      options.gmlFormat : new ol.format.GML3();
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.schemaLocation_ = options.schemaLocation ?
-      options.schemaLocation : ol.format.WFS.SCHEMA_LOCATION;
-
-  ol.format.XMLFeature.call(this);
-};
-ol.inherits(ol.format.WFS, ol.format.XMLFeature);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.WFS.FEATURE_PREFIX = 'feature';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.WFS.XMLNS = 'http://www.w3.org/2000/xmlns/';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.WFS.OGCNS = 'http://www.opengis.net/ogc';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.WFS.WFSNS = 'http://www.opengis.net/wfs';
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.WFS.SCHEMA_LOCATION = 'http://www.opengis.net/wfs ' +
-    'http://schemas.opengis.net/wfs/1.1.0/wfs.xsd';
-
-
-/**
- * Read all features from a WFS FeatureCollection.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.WFS.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WFS.prototype.readFeaturesFromNode = function(node, opt_options) {
-  var context = /** @type {ol.XmlNodeStackItem} */ ({
-    'featureType': this.featureType_,
-    'featureNS': this.featureNS_
-  });
-  ol.obj.assign(context, this.getReadOptions(node,
-      opt_options ? opt_options : {}));
-  var objectStack = [context];
-  this.gmlFormat_.FEATURE_COLLECTION_PARSERS[ol.format.GMLBase.GMLNS][
-      'featureMember'] =
-      ol.xml.makeArrayPusher(ol.format.GMLBase.prototype.readFeaturesInternal);
-  var features = ol.xml.pushParseAndPop([],
-      this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,
-      objectStack, this.gmlFormat_);
-  if (!features) {
-    features = [];
-  }
-  return features;
-};
-
-
-/**
- * Read transaction response of the source.
- *
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.WFSTransactionResponse|undefined} Transaction response.
- * @api stable
- */
-ol.format.WFS.prototype.readTransactionResponse = function(source) {
-  if (ol.xml.isDocument(source)) {
-    return this.readTransactionResponseFromDocument(
-        /** @type {Document} */ (source));
-  } else if (ol.xml.isNode(source)) {
-    return this.readTransactionResponseFromNode(/** @type {Node} */ (source));
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    return this.readTransactionResponseFromDocument(doc);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * Read feature collection metadata of the source.
- *
- * @param {Document|Node|Object|string} source Source.
- * @return {ol.WFSFeatureCollectionMetadata|undefined}
- *     FeatureCollection metadata.
- * @api stable
- */
-ol.format.WFS.prototype.readFeatureCollectionMetadata = function(source) {
-  if (ol.xml.isDocument(source)) {
-    return this.readFeatureCollectionMetadataFromDocument(
-        /** @type {Document} */ (source));
-  } else if (ol.xml.isNode(source)) {
-    return this.readFeatureCollectionMetadataFromNode(
-        /** @type {Node} */ (source));
-  } else if (typeof source === 'string') {
-    var doc = ol.xml.parse(source);
-    return this.readFeatureCollectionMetadataFromDocument(doc);
-  } else {
-    return undefined;
-  }
-};
-
-
-/**
- * @param {Document} doc Document.
- * @return {ol.WFSFeatureCollectionMetadata|undefined}
- *     FeatureCollection metadata.
- */
-ol.format.WFS.prototype.readFeatureCollectionMetadataFromDocument = function(doc) {
-  ol.DEBUG && console.assert(doc.nodeType == Node.DOCUMENT_NODE,
-      'doc.nodeType should be DOCUMENT');
-  for (var n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      return this.readFeatureCollectionMetadataFromNode(n);
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WFS.FEATURE_COLLECTION_PARSERS_ = {
-  'http://www.opengis.net/gml': {
-    'boundedBy': ol.xml.makeObjectPropertySetter(
-        ol.format.GMLBase.prototype.readGeometryElement, 'bounds')
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {ol.WFSFeatureCollectionMetadata|undefined}
- *     FeatureCollection metadata.
- */
-ol.format.WFS.prototype.readFeatureCollectionMetadataFromNode = function(node) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'FeatureCollection',
-      'localName should be FeatureCollection');
-  var result = {};
-  var value = ol.format.XSD.readNonNegativeIntegerString(
-      node.getAttribute('numberOfFeatures'));
-  result['numberOfFeatures'] = value;
-  return ol.xml.pushParseAndPop(
-      /** @type {ol.WFSFeatureCollectionMetadata} */ (result),
-      ol.format.WFS.FEATURE_COLLECTION_PARSERS_, node, [], this.gmlFormat_);
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WFS.TRANSACTION_SUMMARY_PARSERS_ = {
-  'http://www.opengis.net/wfs': {
-    'totalInserted': ol.xml.makeObjectPropertySetter(
-        ol.format.XSD.readNonNegativeInteger),
-    'totalUpdated': ol.xml.makeObjectPropertySetter(
-        ol.format.XSD.readNonNegativeInteger),
-    'totalDeleted': ol.xml.makeObjectPropertySetter(
-        ol.format.XSD.readNonNegativeInteger)
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Transaction Summary.
- * @private
- */
-ol.format.WFS.readTransactionSummary_ = function(node, objectStack) {
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WFS.TRANSACTION_SUMMARY_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WFS.OGC_FID_PARSERS_ = {
-  'http://www.opengis.net/ogc': {
-    'FeatureId': ol.xml.makeArrayPusher(function(node, objectStack) {
-      return node.getAttribute('fid');
-    })
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- */
-ol.format.WFS.fidParser_ = function(node, objectStack) {
-  ol.xml.parseNode(ol.format.WFS.OGC_FID_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WFS.INSERT_RESULTS_PARSERS_ = {
-  'http://www.opengis.net/wfs': {
-    'Feature': ol.format.WFS.fidParser_
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Array.<string>|undefined} Insert results.
- * @private
- */
-ol.format.WFS.readInsertResults_ = function(node, objectStack) {
-  return ol.xml.pushParseAndPop(
-      [], ol.format.WFS.INSERT_RESULTS_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WFS.TRANSACTION_RESPONSE_PARSERS_ = {
-  'http://www.opengis.net/wfs': {
-    'TransactionSummary': ol.xml.makeObjectPropertySetter(
-        ol.format.WFS.readTransactionSummary_, 'transactionSummary'),
-    'InsertResults': ol.xml.makeObjectPropertySetter(
-        ol.format.WFS.readInsertResults_, 'insertIds')
-  }
-};
-
-
-/**
- * @param {Document} doc Document.
- * @return {ol.WFSTransactionResponse|undefined} Transaction response.
- */
-ol.format.WFS.prototype.readTransactionResponseFromDocument = function(doc) {
-  ol.DEBUG && console.assert(doc.nodeType == Node.DOCUMENT_NODE,
-      'doc.nodeType should be DOCUMENT');
-  for (var n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      return this.readTransactionResponseFromNode(n);
-    }
-  }
-  return undefined;
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {ol.WFSTransactionResponse|undefined} Transaction response.
- */
-ol.format.WFS.prototype.readTransactionResponseFromNode = function(node) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should  be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'TransactionResponse',
-      'localName should be TransactionResponse');
-  return ol.xml.pushParseAndPop(
-      /** @type {ol.WFSTransactionResponse} */({}),
-      ol.format.WFS.TRANSACTION_RESPONSE_PARSERS_, node, []);
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.WFS.QUERY_SERIALIZERS_ = {
-  'http://www.opengis.net/wfs': {
-    'PropertyName': ol.xml.makeChildAppender(ol.format.XSD.writeStringTextNode)
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeFeature_ = function(node, feature, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  var featureType = context['featureType'];
-  var featureNS = context['featureNS'];
-  var child = ol.xml.createElementNS(featureNS, featureType);
-  node.appendChild(child);
-  ol.format.GML3.prototype.writeFeatureElement(child, feature, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {number|string} fid Feature identifier.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeOgcFidFilter_ = function(node, fid, objectStack) {
-  var filter = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'Filter');
-  var child = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'FeatureId');
-  filter.appendChild(child);
-  child.setAttribute('fid', fid);
-  node.appendChild(filter);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeDelete_ = function(node, feature, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  ol.asserts.assert(feature.getId() !== undefined, 26); // Features must have an id set
-  var featureType = context['featureType'];
-  var featurePrefix = context['featurePrefix'];
-  featurePrefix = featurePrefix ? featurePrefix :
-      ol.format.WFS.FEATURE_PREFIX;
-  var featureNS = context['featureNS'];
-  node.setAttribute('typeName', featurePrefix + ':' + featureType);
-  ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
-      featureNS);
-  var fid = feature.getId();
-  if (fid !== undefined) {
-    ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.Feature} feature Feature.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeUpdate_ = function(node, feature, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  ol.asserts.assert(feature.getId() !== undefined, 27); // Features must have an id set
-  var featureType = context['featureType'];
-  var featurePrefix = context['featurePrefix'];
-  featurePrefix = featurePrefix ? featurePrefix :
-      ol.format.WFS.FEATURE_PREFIX;
-  var featureNS = context['featureNS'];
-  node.setAttribute('typeName', featurePrefix + ':' + featureType);
-  ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
-      featureNS);
-  var fid = feature.getId();
-  if (fid !== undefined) {
-    var keys = feature.getKeys();
-    var values = [];
-    for (var i = 0, ii = keys.length; i < ii; i++) {
-      var value = feature.get(keys[i]);
-      if (value !== undefined) {
-        values.push({name: keys[i], value: value});
-      }
-    }
-    ol.xml.pushSerializeAndPop(/** @type {ol.XmlNodeStackItem} */ (
-        {node: node, 'srsName': context['srsName']}),
-        ol.format.WFS.TRANSACTION_SERIALIZERS_,
-        ol.xml.makeSimpleNodeFactory('Property'), values,
-        objectStack);
-    ol.format.WFS.writeOgcFidFilter_(node, fid, objectStack);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Object} pair Property name and value.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeProperty_ = function(node, pair, objectStack) {
-  var name = ol.xml.createElementNS(ol.format.WFS.WFSNS, 'Name');
-  node.appendChild(name);
-  ol.format.XSD.writeStringTextNode(name, pair.name);
-  if (pair.value !== undefined && pair.value !== null) {
-    var value = ol.xml.createElementNS(ol.format.WFS.WFSNS, 'Value');
-    node.appendChild(value);
-    if (pair.value instanceof ol.geom.Geometry) {
-      ol.format.GML3.prototype.writeGeometryElement(value,
-          pair.value, objectStack);
-    } else {
-      ol.format.XSD.writeStringTextNode(value, pair.value);
-    }
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {{vendorId: string, safeToIgnore: boolean, value: string}}
- *     nativeElement The native element.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeNative_ = function(node, nativeElement, objectStack) {
-  if (nativeElement.vendorId) {
-    node.setAttribute('vendorId', nativeElement.vendorId);
-  }
-  if (nativeElement.safeToIgnore !== undefined) {
-    node.setAttribute('safeToIgnore', nativeElement.safeToIgnore);
-  }
-  if (nativeElement.value !== undefined) {
-    ol.format.XSD.writeStringTextNode(node, nativeElement.value);
-  }
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.WFS.TRANSACTION_SERIALIZERS_ = {
-  'http://www.opengis.net/wfs': {
-    'Insert': ol.xml.makeChildAppender(ol.format.WFS.writeFeature_),
-    'Update': ol.xml.makeChildAppender(ol.format.WFS.writeUpdate_),
-    'Delete': ol.xml.makeChildAppender(ol.format.WFS.writeDelete_),
-    'Property': ol.xml.makeChildAppender(ol.format.WFS.writeProperty_),
-    'Native': ol.xml.makeChildAppender(ol.format.WFS.writeNative_)
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {string} featureType Feature type.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeQuery_ = function(node, featureType, objectStack) {
-  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  var featurePrefix = context['featurePrefix'];
-  var featureNS = context['featureNS'];
-  var propertyNames = context['propertyNames'];
-  var srsName = context['srsName'];
-  var prefix = featurePrefix ? featurePrefix + ':' : '';
-  node.setAttribute('typeName', prefix + featureType);
-  if (srsName) {
-    node.setAttribute('srsName', srsName);
-  }
-  if (featureNS) {
-    ol.xml.setAttributeNS(node, ol.format.WFS.XMLNS, 'xmlns:' + featurePrefix,
-        featureNS);
-  }
-  var item = /** @type {ol.XmlNodeStackItem} */ (ol.obj.assign({}, context));
-  item.node = node;
-  ol.xml.pushSerializeAndPop(item,
-      ol.format.WFS.QUERY_SERIALIZERS_,
-      ol.xml.makeSimpleNodeFactory('PropertyName'), propertyNames,
-      objectStack);
-  var filter = context['filter'];
-  if (filter) {
-    var child = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'Filter');
-    node.appendChild(child);
-    ol.format.WFS.writeFilterCondition_(child, filter, objectStack);
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.Filter} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeFilterCondition_ = function(node, filter, objectStack) {
-  /** @type {ol.XmlNodeStackItem} */
-  var item = {node: node};
-  ol.xml.pushSerializeAndPop(item,
-      ol.format.WFS.GETFEATURE_SERIALIZERS_,
-      ol.xml.makeSimpleNodeFactory(filter.getTagName()),
-      [filter], objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.Bbox} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeBboxFilter_ = function(node, filter, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  context['srsName'] = filter.srsName;
-
-  ol.format.WFS.writeOgcPropertyName_(node, filter.geometryName);
-  ol.format.GML3.prototype.writeGeometryElement(node, filter.extent, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.Intersects} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeIntersectsFilter_ = function(node, filter, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  context['srsName'] = filter.srsName;
-
-  ol.format.WFS.writeOgcPropertyName_(node, filter.geometryName);
-  ol.format.GML3.prototype.writeGeometryElement(node, filter.geometry, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.Within} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeWithinFilter_ = function(node, filter, objectStack) {
-  var context = objectStack[objectStack.length - 1];
-  context['srsName'] = filter.srsName;
-
-  ol.format.WFS.writeOgcPropertyName_(node, filter.geometryName);
-  ol.format.GML3.prototype.writeGeometryElement(node, filter.geometry, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.LogicalBinary} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeLogicalFilter_ = function(node, filter, objectStack) {
-  /** @type {ol.XmlNodeStackItem} */
-  var item = {node: node};
-  var conditionA = filter.conditionA;
-  ol.xml.pushSerializeAndPop(item,
-      ol.format.WFS.GETFEATURE_SERIALIZERS_,
-      ol.xml.makeSimpleNodeFactory(conditionA.getTagName()),
-      [conditionA], objectStack);
-  var conditionB = filter.conditionB;
-  ol.xml.pushSerializeAndPop(item,
-      ol.format.WFS.GETFEATURE_SERIALIZERS_,
-      ol.xml.makeSimpleNodeFactory(conditionB.getTagName()),
-      [conditionB], objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.Not} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeNotFilter_ = function(node, filter, objectStack) {
-  /** @type {ol.XmlNodeStackItem} */
-  var item = {node: node};
-  var condition = filter.condition;
-  ol.xml.pushSerializeAndPop(item,
-      ol.format.WFS.GETFEATURE_SERIALIZERS_,
-      ol.xml.makeSimpleNodeFactory(condition.getTagName()),
-      [condition], objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.ComparisonBinary} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeComparisonFilter_ = function(node, filter, objectStack) {
-  if (filter.matchCase !== undefined) {
-    node.setAttribute('matchCase', filter.matchCase.toString());
-  }
-  ol.format.WFS.writeOgcPropertyName_(node, filter.propertyName);
-  ol.format.WFS.writeOgcLiteral_(node, '' + filter.expression);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.IsNull} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeIsNullFilter_ = function(node, filter, objectStack) {
-  ol.format.WFS.writeOgcPropertyName_(node, filter.propertyName);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.IsBetween} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeIsBetweenFilter_ = function(node, filter, objectStack) {
-  ol.format.WFS.writeOgcPropertyName_(node, filter.propertyName);
-
-  var lowerBoundary = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'LowerBoundary');
-  node.appendChild(lowerBoundary);
-  ol.format.WFS.writeOgcLiteral_(lowerBoundary, '' + filter.lowerBoundary);
-
-  var upperBoundary = ol.xml.createElementNS(ol.format.WFS.OGCNS, 'UpperBoundary');
-  node.appendChild(upperBoundary);
-  ol.format.WFS.writeOgcLiteral_(upperBoundary, '' + filter.upperBoundary);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {ol.format.filter.IsLike} filter Filter.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeIsLikeFilter_ = function(node, filter, objectStack) {
-  node.setAttribute('wildCard', filter.wildCard);
-  node.setAttribute('singleChar', filter.singleChar);
-  node.setAttribute('escapeChar', filter.escapeChar);
-  if (filter.matchCase !== undefined) {
-    node.setAttribute('matchCase', filter.matchCase.toString());
-  }
-  ol.format.WFS.writeOgcPropertyName_(node, filter.propertyName);
-  ol.format.WFS.writeOgcLiteral_(node, '' + filter.pattern);
-};
-
-
-/**
- * @param {string} tagName Tag name.
- * @param {Node} node Node.
- * @param {string} value Value.
- * @private
- */
-ol.format.WFS.writeOgcExpression_ = function(tagName, node, value) {
-  var property = ol.xml.createElementNS(ol.format.WFS.OGCNS, tagName);
-  ol.format.XSD.writeStringTextNode(property, value);
-  node.appendChild(property);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {string} value PropertyName value.
- * @private
- */
-ol.format.WFS.writeOgcPropertyName_ = function(node, value) {
-  ol.format.WFS.writeOgcExpression_('PropertyName', node, value);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {string} value PropertyName value.
- * @private
- */
-ol.format.WFS.writeOgcLiteral_ = function(node, value) {
-  ol.format.WFS.writeOgcExpression_('Literal', node, value);
-};
-
-
-/**
- * @type {Object.<string, Object.<string, ol.XmlSerializer>>}
- * @private
- */
-ol.format.WFS.GETFEATURE_SERIALIZERS_ = {
-  'http://www.opengis.net/wfs': {
-    'Query': ol.xml.makeChildAppender(ol.format.WFS.writeQuery_)
-  },
-  'http://www.opengis.net/ogc': {
-    'And': ol.xml.makeChildAppender(ol.format.WFS.writeLogicalFilter_),
-    'Or': ol.xml.makeChildAppender(ol.format.WFS.writeLogicalFilter_),
-    'Not': ol.xml.makeChildAppender(ol.format.WFS.writeNotFilter_),
-    'BBOX': ol.xml.makeChildAppender(ol.format.WFS.writeBboxFilter_),
-    'Intersects': ol.xml.makeChildAppender(ol.format.WFS.writeIntersectsFilter_),
-    'Within': ol.xml.makeChildAppender(ol.format.WFS.writeWithinFilter_),
-    'PropertyIsEqualTo': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),
-    'PropertyIsNotEqualTo': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),
-    'PropertyIsLessThan': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),
-    'PropertyIsLessThanOrEqualTo': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),
-    'PropertyIsGreaterThan': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),
-    'PropertyIsGreaterThanOrEqualTo': ol.xml.makeChildAppender(ol.format.WFS.writeComparisonFilter_),
-    'PropertyIsNull': ol.xml.makeChildAppender(ol.format.WFS.writeIsNullFilter_),
-    'PropertyIsBetween': ol.xml.makeChildAppender(ol.format.WFS.writeIsBetweenFilter_),
-    'PropertyIsLike': ol.xml.makeChildAppender(ol.format.WFS.writeIsLikeFilter_)
-  }
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<string>} featureTypes Feature types.
- * @param {Array.<*>} objectStack Node stack.
- * @private
- */
-ol.format.WFS.writeGetFeature_ = function(node, featureTypes, objectStack) {
-  var context = /** @type {Object} */ (objectStack[objectStack.length - 1]);
-  var item = /** @type {ol.XmlNodeStackItem} */ (ol.obj.assign({}, context));
-  item.node = node;
-  ol.xml.pushSerializeAndPop(item,
-      ol.format.WFS.GETFEATURE_SERIALIZERS_,
-      ol.xml.makeSimpleNodeFactory('Query'), featureTypes,
-      objectStack);
-};
-
-
-/**
- * Encode format as WFS `GetFeature` and return the Node.
- *
- * @param {olx.format.WFSWriteGetFeatureOptions} options Options.
- * @return {Node} Result.
- * @api stable
- */
-ol.format.WFS.prototype.writeGetFeature = function(options) {
-  var node = ol.xml.createElementNS(ol.format.WFS.WFSNS, 'GetFeature');
-  node.setAttribute('service', 'WFS');
-  node.setAttribute('version', '1.1.0');
-  var filter;
-  if (options) {
-    if (options.handle) {
-      node.setAttribute('handle', options.handle);
-    }
-    if (options.outputFormat) {
-      node.setAttribute('outputFormat', options.outputFormat);
-    }
-    if (options.maxFeatures !== undefined) {
-      node.setAttribute('maxFeatures', options.maxFeatures);
-    }
-    if (options.resultType) {
-      node.setAttribute('resultType', options.resultType);
-    }
-    if (options.startIndex !== undefined) {
-      node.setAttribute('startIndex', options.startIndex);
-    }
-    if (options.count !== undefined) {
-      node.setAttribute('count', options.count);
-    }
-    filter = options.filter;
-    if (options.bbox) {
-      ol.asserts.assert(options.geometryName,
-          12); // `options.geometryName` must also be provided when `options.bbox` is set
-      var bbox = ol.format.filter.bbox(
-          /** @type {string} */ (options.geometryName), options.bbox, options.srsName);
-      if (filter) {
-        // if bbox and filter are both set, combine the two into a single filter
-        filter = ol.format.filter.and(filter, bbox);
-      } else {
-        filter = bbox;
-      }
-    }
-  }
-  ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance',
-      'xsi:schemaLocation', this.schemaLocation_);
-  /** @type {ol.XmlNodeStackItem} */
-  var context = {
-    node: node,
-    'srsName': options.srsName,
-    'featureNS': options.featureNS ? options.featureNS : this.featureNS_,
-    'featurePrefix': options.featurePrefix,
-    'geometryName': options.geometryName,
-    'filter': filter,
-    'propertyNames': options.propertyNames ? options.propertyNames : []
-  };
-  ol.asserts.assert(Array.isArray(options.featureTypes),
-      11); // `options.featureTypes` should be an Array
-  ol.format.WFS.writeGetFeature_(node, /** @type {!Array.<string>} */ (options.featureTypes), [context]);
-  return node;
-};
-
-
-/**
- * Encode format as WFS `Transaction` and return the Node.
- *
- * @param {Array.<ol.Feature>} inserts The features to insert.
- * @param {Array.<ol.Feature>} updates The features to update.
- * @param {Array.<ol.Feature>} deletes The features to delete.
- * @param {olx.format.WFSWriteTransactionOptions} options Write options.
- * @return {Node} Result.
- * @api stable
- */
-ol.format.WFS.prototype.writeTransaction = function(inserts, updates, deletes,
-    options) {
-  var objectStack = [];
-  var node = ol.xml.createElementNS(ol.format.WFS.WFSNS, 'Transaction');
-  node.setAttribute('service', 'WFS');
-  node.setAttribute('version', '1.1.0');
-  var baseObj;
-  /** @type {ol.XmlNodeStackItem} */
-  var obj;
-  if (options) {
-    baseObj = options.gmlOptions ? options.gmlOptions : {};
-    if (options.handle) {
-      node.setAttribute('handle', options.handle);
-    }
-  }
-  ol.xml.setAttributeNS(node, 'http://www.w3.org/2001/XMLSchema-instance',
-      'xsi:schemaLocation', this.schemaLocation_);
-  if (inserts) {
-    obj = {node: node, 'featureNS': options.featureNS,
-      'featureType': options.featureType, 'featurePrefix': options.featurePrefix,
-      'srsName': options.srsName};
-    ol.obj.assign(obj, baseObj);
-    ol.xml.pushSerializeAndPop(obj,
-        ol.format.WFS.TRANSACTION_SERIALIZERS_,
-        ol.xml.makeSimpleNodeFactory('Insert'), inserts,
-        objectStack);
-  }
-  if (updates) {
-    obj = {node: node, 'featureNS': options.featureNS,
-      'featureType': options.featureType, 'featurePrefix': options.featurePrefix,
-      'srsName': options.srsName};
-    ol.obj.assign(obj, baseObj);
-    ol.xml.pushSerializeAndPop(obj,
-        ol.format.WFS.TRANSACTION_SERIALIZERS_,
-        ol.xml.makeSimpleNodeFactory('Update'), updates,
-        objectStack);
-  }
-  if (deletes) {
-    ol.xml.pushSerializeAndPop({node: node, 'featureNS': options.featureNS,
-      'featureType': options.featureType, 'featurePrefix': options.featurePrefix,
-      'srsName': options.srsName},
-    ol.format.WFS.TRANSACTION_SERIALIZERS_,
-    ol.xml.makeSimpleNodeFactory('Delete'), deletes,
-    objectStack);
-  }
-  if (options.nativeElements) {
-    ol.xml.pushSerializeAndPop({node: node, 'featureNS': options.featureNS,
-      'featureType': options.featureType, 'featurePrefix': options.featurePrefix,
-      'srsName': options.srsName},
-    ol.format.WFS.TRANSACTION_SERIALIZERS_,
-    ol.xml.makeSimpleNodeFactory('Native'), options.nativeElements,
-    objectStack);
-  }
-  return node;
-};
-
-
-/**
- * Read the projection from a WFS source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @return {?ol.proj.Projection} Projection.
- * @api stable
- */
-ol.format.WFS.prototype.readProjection;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WFS.prototype.readProjectionFromDocument = function(doc) {
-  ol.DEBUG && console.assert(doc.nodeType == Node.DOCUMENT_NODE,
-      'doc.nodeType should be a DOCUMENT');
-  for (var n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      return this.readProjectionFromNode(n);
-    }
-  }
-  return null;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.format.WFS.prototype.readProjectionFromNode = function(node) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'FeatureCollection',
-      'localName should be FeatureCollection');
-
-  if (node.firstElementChild &&
-      node.firstElementChild.firstElementChild) {
-    node = node.firstElementChild.firstElementChild;
-    for (var n = node.firstElementChild; n; n = n.nextElementSibling) {
-      if (!(n.childNodes.length === 0 ||
-          (n.childNodes.length === 1 &&
-          n.firstChild.nodeType === 3))) {
-        var objectStack = [{}];
-        this.gmlFormat_.readGeometryElement(n, objectStack);
-        return ol.proj.get(objectStack.pop().srsName);
-      }
-    }
-  }
-
-  return null;
-};
-
-goog.provide('ol.format.WKT');
-
-goog.require('ol');
-goog.require('ol.Feature');
-goog.require('ol.format.Feature');
-goog.require('ol.format.TextFeature');
-goog.require('ol.geom.GeometryCollection');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-
-
-/**
- * @classdesc
- * Geometry format for reading and writing data in the `WellKnownText` (WKT)
- * format.
- *
- * @constructor
- * @extends {ol.format.TextFeature}
- * @param {olx.format.WKTOptions=} opt_options Options.
- * @api stable
- */
-ol.format.WKT = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.format.TextFeature.call(this);
-
-  /**
-   * Split GeometryCollection into multiple features.
-   * @type {boolean}
-   * @private
-   */
-  this.splitCollection_ = options.splitCollection !== undefined ?
-      options.splitCollection : false;
-
-};
-ol.inherits(ol.format.WKT, ol.format.TextFeature);
-
-
-/**
- * @const
- * @type {string}
- */
-ol.format.WKT.EMPTY = 'EMPTY';
-
-
-/**
- * @param {ol.geom.Point} geom Point geometry.
- * @return {string} Coordinates part of Point as WKT.
- * @private
- */
-ol.format.WKT.encodePointGeometry_ = function(geom) {
-  var coordinates = geom.getCoordinates();
-  if (coordinates.length === 0) {
-    return '';
-  }
-  return coordinates[0] + ' ' + coordinates[1];
-};
-
-
-/**
- * @param {ol.geom.MultiPoint} geom MultiPoint geometry.
- * @return {string} Coordinates part of MultiPoint as WKT.
- * @private
- */
-ol.format.WKT.encodeMultiPointGeometry_ = function(geom) {
-  var array = [];
-  var components = geom.getPoints();
-  for (var i = 0, ii = components.length; i < ii; ++i) {
-    array.push('(' + ol.format.WKT.encodePointGeometry_(components[i]) + ')');
-  }
-  return array.join(',');
-};
-
-
-/**
- * @param {ol.geom.GeometryCollection} geom GeometryCollection geometry.
- * @return {string} Coordinates part of GeometryCollection as WKT.
- * @private
- */
-ol.format.WKT.encodeGeometryCollectionGeometry_ = function(geom) {
-  var array = [];
-  var geoms = geom.getGeometries();
-  for (var i = 0, ii = geoms.length; i < ii; ++i) {
-    array.push(ol.format.WKT.encode_(geoms[i]));
-  }
-  return array.join(',');
-};
-
-
-/**
- * @param {ol.geom.LineString|ol.geom.LinearRing} geom LineString geometry.
- * @return {string} Coordinates part of LineString as WKT.
- * @private
- */
-ol.format.WKT.encodeLineStringGeometry_ = function(geom) {
-  var coordinates = geom.getCoordinates();
-  var array = [];
-  for (var i = 0, ii = coordinates.length; i < ii; ++i) {
-    array.push(coordinates[i][0] + ' ' + coordinates[i][1]);
-  }
-  return array.join(',');
-};
-
-
-/**
- * @param {ol.geom.MultiLineString} geom MultiLineString geometry.
- * @return {string} Coordinates part of MultiLineString as WKT.
- * @private
- */
-ol.format.WKT.encodeMultiLineStringGeometry_ = function(geom) {
-  var array = [];
-  var components = geom.getLineStrings();
-  for (var i = 0, ii = components.length; i < ii; ++i) {
-    array.push('(' + ol.format.WKT.encodeLineStringGeometry_(
-        components[i]) + ')');
-  }
-  return array.join(',');
-};
-
-
-/**
- * @param {ol.geom.Polygon} geom Polygon geometry.
- * @return {string} Coordinates part of Polygon as WKT.
- * @private
- */
-ol.format.WKT.encodePolygonGeometry_ = function(geom) {
-  var array = [];
-  var rings = geom.getLinearRings();
-  for (var i = 0, ii = rings.length; i < ii; ++i) {
-    array.push('(' + ol.format.WKT.encodeLineStringGeometry_(
-        rings[i]) + ')');
-  }
-  return array.join(',');
-};
-
-
-/**
- * @param {ol.geom.MultiPolygon} geom MultiPolygon geometry.
- * @return {string} Coordinates part of MultiPolygon as WKT.
- * @private
- */
-ol.format.WKT.encodeMultiPolygonGeometry_ = function(geom) {
-  var array = [];
-  var components = geom.getPolygons();
-  for (var i = 0, ii = components.length; i < ii; ++i) {
-    array.push('(' + ol.format.WKT.encodePolygonGeometry_(
-        components[i]) + ')');
-  }
-  return array.join(',');
-};
-
-
-/**
- * Encode a geometry as WKT.
- * @param {ol.geom.Geometry} geom The geometry to encode.
- * @return {string} WKT string for the geometry.
- * @private
- */
-ol.format.WKT.encode_ = function(geom) {
-  var type = geom.getType();
-  var geometryEncoder = ol.format.WKT.GeometryEncoder_[type];
-  ol.DEBUG && console.assert(geometryEncoder, 'geometryEncoder should be defined');
-  var enc = geometryEncoder(geom);
-  type = type.toUpperCase();
-  if (enc.length === 0) {
-    return type + ' ' + ol.format.WKT.EMPTY;
-  }
-  return type + '(' + enc + ')';
-};
-
-
-/**
- * @const
- * @type {Object.<string, function(ol.geom.Geometry): string>}
- * @private
- */
-ol.format.WKT.GeometryEncoder_ = {
-  'Point': ol.format.WKT.encodePointGeometry_,
-  'LineString': ol.format.WKT.encodeLineStringGeometry_,
-  'Polygon': ol.format.WKT.encodePolygonGeometry_,
-  'MultiPoint': ol.format.WKT.encodeMultiPointGeometry_,
-  'MultiLineString': ol.format.WKT.encodeMultiLineStringGeometry_,
-  'MultiPolygon': ol.format.WKT.encodeMultiPolygonGeometry_,
-  'GeometryCollection': ol.format.WKT.encodeGeometryCollectionGeometry_
-};
-
-
-/**
- * Parse a WKT string.
- * @param {string} wkt WKT string.
- * @return {ol.geom.Geometry|ol.geom.GeometryCollection|undefined}
- *     The geometry created.
- * @private
- */
-ol.format.WKT.prototype.parse_ = function(wkt) {
-  var lexer = new ol.format.WKT.Lexer(wkt);
-  var parser = new ol.format.WKT.Parser(lexer);
-  return parser.parse();
-};
-
-
-/**
- * Read a feature from a WKT source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.Feature} Feature.
- * @api stable
- */
-ol.format.WKT.prototype.readFeature;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WKT.prototype.readFeatureFromText = function(text, opt_options) {
-  var geom = this.readGeometryFromText(text, opt_options);
-  if (geom) {
-    var feature = new ol.Feature();
-    feature.setGeometry(geom);
-    return feature;
-  }
-  return null;
-};
-
-
-/**
- * Read all features from a WKT source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.WKT.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WKT.prototype.readFeaturesFromText = function(text, opt_options) {
-  var geometries = [];
-  var geometry = this.readGeometryFromText(text, opt_options);
-  if (this.splitCollection_ &&
-      geometry.getType() == ol.geom.GeometryType.GEOMETRY_COLLECTION) {
-    geometries = (/** @type {ol.geom.GeometryCollection} */ (geometry))
-        .getGeometriesArray();
-  } else {
-    geometries = [geometry];
-  }
-  var feature, features = [];
-  for (var i = 0, ii = geometries.length; i < ii; ++i) {
-    feature = new ol.Feature();
-    feature.setGeometry(geometries[i]);
-    features.push(feature);
-  }
-  return features;
-};
-
-
-/**
- * Read a single geometry from a WKT source.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Read options.
- * @return {ol.geom.Geometry} Geometry.
- * @api stable
- */
-ol.format.WKT.prototype.readGeometry;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WKT.prototype.readGeometryFromText = function(text, opt_options) {
-  var geometry = this.parse_(text);
-  if (geometry) {
-    return /** @type {ol.geom.Geometry} */ (
-        ol.format.Feature.transformWithOptions(geometry, false, opt_options));
-  } else {
-    return null;
-  }
-};
-
-
-/**
- * Encode a feature as a WKT string.
- *
- * @function
- * @param {ol.Feature} feature Feature.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} WKT string.
- * @api stable
- */
-ol.format.WKT.prototype.writeFeature;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WKT.prototype.writeFeatureText = function(feature, opt_options) {
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    return this.writeGeometryText(geometry, opt_options);
-  }
-  return '';
-};
-
-
-/**
- * Encode an array of features as a WKT string.
- *
- * @function
- * @param {Array.<ol.Feature>} features Features.
- * @param {olx.format.WriteOptions=} opt_options Write options.
- * @return {string} WKT string.
- * @api stable
- */
-ol.format.WKT.prototype.writeFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WKT.prototype.writeFeaturesText = function(features, opt_options) {
-  if (features.length == 1) {
-    return this.writeFeatureText(features[0], opt_options);
-  }
-  var geometries = [];
-  for (var i = 0, ii = features.length; i < ii; ++i) {
-    geometries.push(features[i].getGeometry());
-  }
-  var collection = new ol.geom.GeometryCollection(geometries);
-  return this.writeGeometryText(collection, opt_options);
-};
-
-
-/**
- * Write a single geometry as a WKT string.
- *
- * @function
- * @param {ol.geom.Geometry} geometry Geometry.
- * @return {string} WKT string.
- * @api stable
- */
-ol.format.WKT.prototype.writeGeometry;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WKT.prototype.writeGeometryText = function(geometry, opt_options) {
-  return ol.format.WKT.encode_(/** @type {ol.geom.Geometry} */ (
-      ol.format.Feature.transformWithOptions(geometry, true, opt_options)));
-};
-
-
-/**
- * @const
- * @enum {number}
- */
-ol.format.WKT.TokenType = {
-  TEXT: 1,
-  LEFT_PAREN: 2,
-  RIGHT_PAREN: 3,
-  NUMBER: 4,
-  COMMA: 5,
-  EOF: 6
-};
-
-
-/**
- * Class to tokenize a WKT string.
- * @param {string} wkt WKT string.
- * @constructor
- * @protected
- */
-ol.format.WKT.Lexer = function(wkt) {
-
-  /**
-   * @type {string}
-   */
-  this.wkt = wkt;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.index_ = -1;
-};
-
-
-/**
- * @param {string} c Character.
- * @return {boolean} Whether the character is alphabetic.
- * @private
- */
-ol.format.WKT.Lexer.prototype.isAlpha_ = function(c) {
-  return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';
-};
-
-
-/**
- * @param {string} c Character.
- * @param {boolean=} opt_decimal Whether the string number
- *     contains a dot, i.e. is a decimal number.
- * @return {boolean} Whether the character is numeric.
- * @private
- */
-ol.format.WKT.Lexer.prototype.isNumeric_ = function(c, opt_decimal) {
-  var decimal = opt_decimal !== undefined ? opt_decimal : false;
-  return c >= '0' && c <= '9' || c == '.' && !decimal;
-};
-
-
-/**
- * @param {string} c Character.
- * @return {boolean} Whether the character is whitespace.
- * @private
- */
-ol.format.WKT.Lexer.prototype.isWhiteSpace_ = function(c) {
-  return c == ' ' || c == '\t' || c == '\r' || c == '\n';
-};
-
-
-/**
- * @return {string} Next string character.
- * @private
- */
-ol.format.WKT.Lexer.prototype.nextChar_ = function() {
-  return this.wkt.charAt(++this.index_);
-};
-
-
-/**
- * Fetch and return the next token.
- * @return {!ol.WKTToken} Next string token.
- */
-ol.format.WKT.Lexer.prototype.nextToken = function() {
-  var c = this.nextChar_();
-  var token = {position: this.index_, value: c};
-
-  if (c == '(') {
-    token.type = ol.format.WKT.TokenType.LEFT_PAREN;
-  } else if (c == ',') {
-    token.type = ol.format.WKT.TokenType.COMMA;
-  } else if (c == ')') {
-    token.type = ol.format.WKT.TokenType.RIGHT_PAREN;
-  } else if (this.isNumeric_(c) || c == '-') {
-    token.type = ol.format.WKT.TokenType.NUMBER;
-    token.value = this.readNumber_();
-  } else if (this.isAlpha_(c)) {
-    token.type = ol.format.WKT.TokenType.TEXT;
-    token.value = this.readText_();
-  } else if (this.isWhiteSpace_(c)) {
-    return this.nextToken();
-  } else if (c === '') {
-    token.type = ol.format.WKT.TokenType.EOF;
-  } else {
-    throw new Error('Unexpected character: ' + c);
-  }
-
-  return token;
-};
-
-
-/**
- * @return {number} Numeric token value.
- * @private
- */
-ol.format.WKT.Lexer.prototype.readNumber_ = function() {
-  var c, index = this.index_;
-  var decimal = false;
-  var scientificNotation = false;
-  do {
-    if (c == '.') {
-      decimal = true;
-    } else if (c == 'e' || c == 'E') {
-      scientificNotation = true;
-    }
-    c = this.nextChar_();
-  } while (
-      this.isNumeric_(c, decimal) ||
-      // if we haven't detected a scientific number before, 'e' or 'E'
-      // hint that we should continue to read
-      !scientificNotation && (c == 'e' || c == 'E') ||
-      // once we know that we have a scientific number, both '-' and '+'
-      // are allowed
-      scientificNotation && (c == '-' || c == '+')
-  );
-  return parseFloat(this.wkt.substring(index, this.index_--));
-};
-
-
-/**
- * @return {string} String token value.
- * @private
- */
-ol.format.WKT.Lexer.prototype.readText_ = function() {
-  var c, index = this.index_;
-  do {
-    c = this.nextChar_();
-  } while (this.isAlpha_(c));
-  return this.wkt.substring(index, this.index_--).toUpperCase();
-};
-
-
-/**
- * Class to parse the tokens from the WKT string.
- * @param {ol.format.WKT.Lexer} lexer The lexer.
- * @constructor
- * @protected
- */
-ol.format.WKT.Parser = function(lexer) {
-
-  /**
-   * @type {ol.format.WKT.Lexer}
-   * @private
-   */
-  this.lexer_ = lexer;
-
-  /**
-   * @type {ol.WKTToken}
-   * @private
-   */
-  this.token_;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.dimension_ = 2;
-};
-
-
-/**
- * Fetch the next token form the lexer and replace the active token.
- * @private
- */
-ol.format.WKT.Parser.prototype.consume_ = function() {
-  this.token_ = this.lexer_.nextToken();
-};
-
-
-/**
- * If the given type matches the current token, consume it.
- * @param {ol.format.WKT.TokenType} type Token type.
- * @return {boolean} Whether the token matches the given type.
- */
-ol.format.WKT.Parser.prototype.match = function(type) {
-  var isMatch = this.token_.type == type;
-  if (isMatch) {
-    this.consume_();
-  }
-  return isMatch;
-};
-
-
-/**
- * Try to parse the tokens provided by the lexer.
- * @return {ol.geom.Geometry|ol.geom.GeometryCollection} The geometry.
- */
-ol.format.WKT.Parser.prototype.parse = function() {
-  this.consume_();
-  var geometry = this.parseGeometry_();
-  ol.DEBUG && console.assert(this.token_.type == ol.format.WKT.TokenType.EOF,
-      'token type should be end of file');
-  return geometry;
-};
-
-
-/**
- * @return {!(ol.geom.Geometry|ol.geom.GeometryCollection)} The geometry.
- * @private
- */
-ol.format.WKT.Parser.prototype.parseGeometry_ = function() {
-  var token = this.token_;
-  if (this.match(ol.format.WKT.TokenType.TEXT)) {
-    var geomType = token.value;
-    if (geomType == ol.geom.GeometryType.GEOMETRY_COLLECTION.toUpperCase()) {
-      var geometries = this.parseGeometryCollectionText_();
-      return new ol.geom.GeometryCollection(geometries);
-    } else {
-      var parser = ol.format.WKT.Parser.GeometryParser_[geomType];
-      var ctor = ol.format.WKT.Parser.GeometryConstructor_[geomType];
-      if (!parser || !ctor) {
-        throw new Error('Invalid geometry type: ' + geomType);
-      }
-      var coordinates = parser.call(this);
-      return new ctor(coordinates);
-    }
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {!Array.<ol.geom.Geometry>} A collection of geometries.
- * @private
- */
-ol.format.WKT.Parser.prototype.parseGeometryCollectionText_ = function() {
-  if (this.match(ol.format.WKT.TokenType.LEFT_PAREN)) {
-    var geometries = [];
-    do {
-      geometries.push(this.parseGeometry_());
-    } while (this.match(ol.format.WKT.TokenType.COMMA));
-    if (this.match(ol.format.WKT.TokenType.RIGHT_PAREN)) {
-      return geometries;
-    }
-  } else if (this.isEmptyGeometry_()) {
-    return [];
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {Array.<number>} All values in a point.
- * @private
- */
-ol.format.WKT.Parser.prototype.parsePointText_ = function() {
-  if (this.match(ol.format.WKT.TokenType.LEFT_PAREN)) {
-    var coordinates = this.parsePoint_();
-    if (this.match(ol.format.WKT.TokenType.RIGHT_PAREN)) {
-      return coordinates;
-    }
-  } else if (this.isEmptyGeometry_()) {
-    return null;
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} All points in a linestring.
- * @private
- */
-ol.format.WKT.Parser.prototype.parseLineStringText_ = function() {
-  if (this.match(ol.format.WKT.TokenType.LEFT_PAREN)) {
-    var coordinates = this.parsePointList_();
-    if (this.match(ol.format.WKT.TokenType.RIGHT_PAREN)) {
-      return coordinates;
-    }
-  } else if (this.isEmptyGeometry_()) {
-    return [];
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} All points in a polygon.
- * @private
- */
-ol.format.WKT.Parser.prototype.parsePolygonText_ = function() {
-  if (this.match(ol.format.WKT.TokenType.LEFT_PAREN)) {
-    var coordinates = this.parseLineStringTextList_();
-    if (this.match(ol.format.WKT.TokenType.RIGHT_PAREN)) {
-      return coordinates;
-    }
-  } else if (this.isEmptyGeometry_()) {
-    return [];
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} All points in a multipoint.
- * @private
- */
-ol.format.WKT.Parser.prototype.parseMultiPointText_ = function() {
-  if (this.match(ol.format.WKT.TokenType.LEFT_PAREN)) {
-    var coordinates;
-    if (this.token_.type == ol.format.WKT.TokenType.LEFT_PAREN) {
-      coordinates = this.parsePointTextList_();
-    } else {
-      coordinates = this.parsePointList_();
-    }
-    if (this.match(ol.format.WKT.TokenType.RIGHT_PAREN)) {
-      return coordinates;
-    }
-  } else if (this.isEmptyGeometry_()) {
-    return [];
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} All linestring points
- *                                        in a multilinestring.
- * @private
- */
-ol.format.WKT.Parser.prototype.parseMultiLineStringText_ = function() {
-  if (this.match(ol.format.WKT.TokenType.LEFT_PAREN)) {
-    var coordinates = this.parseLineStringTextList_();
-    if (this.match(ol.format.WKT.TokenType.RIGHT_PAREN)) {
-      return coordinates;
-    }
-  } else if (this.isEmptyGeometry_()) {
-    return [];
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} All polygon points in a multipolygon.
- * @private
- */
-ol.format.WKT.Parser.prototype.parseMultiPolygonText_ = function() {
-  if (this.match(ol.format.WKT.TokenType.LEFT_PAREN)) {
-    var coordinates = this.parsePolygonTextList_();
-    if (this.match(ol.format.WKT.TokenType.RIGHT_PAREN)) {
-      return coordinates;
-    }
-  } else if (this.isEmptyGeometry_()) {
-    return [];
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {!Array.<number>} A point.
- * @private
- */
-ol.format.WKT.Parser.prototype.parsePoint_ = function() {
-  var coordinates = [];
-  for (var i = 0; i < this.dimension_; ++i) {
-    var token = this.token_;
-    if (this.match(ol.format.WKT.TokenType.NUMBER)) {
-      coordinates.push(token.value);
-    } else {
-      break;
-    }
-  }
-  if (coordinates.length == this.dimension_) {
-    return coordinates;
-  }
-  throw new Error(this.formatErrorMessage_());
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} An array of points.
- * @private
- */
-ol.format.WKT.Parser.prototype.parsePointList_ = function() {
-  var coordinates = [this.parsePoint_()];
-  while (this.match(ol.format.WKT.TokenType.COMMA)) {
-    coordinates.push(this.parsePoint_());
-  }
-  return coordinates;
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} An array of points.
- * @private
- */
-ol.format.WKT.Parser.prototype.parsePointTextList_ = function() {
-  var coordinates = [this.parsePointText_()];
-  while (this.match(ol.format.WKT.TokenType.COMMA)) {
-    coordinates.push(this.parsePointText_());
-  }
-  return coordinates;
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} An array of points.
- * @private
- */
-ol.format.WKT.Parser.prototype.parseLineStringTextList_ = function() {
-  var coordinates = [this.parseLineStringText_()];
-  while (this.match(ol.format.WKT.TokenType.COMMA)) {
-    coordinates.push(this.parseLineStringText_());
-  }
-  return coordinates;
-};
-
-
-/**
- * @return {!Array.<!Array.<number>>} An array of points.
- * @private
- */
-ol.format.WKT.Parser.prototype.parsePolygonTextList_ = function() {
-  var coordinates = [this.parsePolygonText_()];
-  while (this.match(ol.format.WKT.TokenType.COMMA)) {
-    coordinates.push(this.parsePolygonText_());
-  }
-  return coordinates;
-};
-
-
-/**
- * @return {boolean} Whether the token implies an empty geometry.
- * @private
- */
-ol.format.WKT.Parser.prototype.isEmptyGeometry_ = function() {
-  var isEmpty = this.token_.type == ol.format.WKT.TokenType.TEXT &&
-      this.token_.value == ol.format.WKT.EMPTY;
-  if (isEmpty) {
-    this.consume_();
-  }
-  return isEmpty;
-};
-
-
-/**
- * Create an error message for an unexpected token error.
- * @return {string} Error message.
- * @private
- */
-ol.format.WKT.Parser.prototype.formatErrorMessage_ = function() {
-  return 'Unexpected `' + this.token_.value + '` at position ' +
-      this.token_.position + ' in `' + this.lexer_.wkt + '`';
-};
-
-
-/**
- * @enum {function (new:ol.geom.Geometry, Array, ol.geom.GeometryLayout)}
- * @private
- */
-ol.format.WKT.Parser.GeometryConstructor_ = {
-  'POINT': ol.geom.Point,
-  'LINESTRING': ol.geom.LineString,
-  'POLYGON': ol.geom.Polygon,
-  'MULTIPOINT': ol.geom.MultiPoint,
-  'MULTILINESTRING': ol.geom.MultiLineString,
-  'MULTIPOLYGON': ol.geom.MultiPolygon
-};
-
-
-/**
- * @enum {(function(): Array)}
- * @private
- */
-ol.format.WKT.Parser.GeometryParser_ = {
-  'POINT': ol.format.WKT.Parser.prototype.parsePointText_,
-  'LINESTRING': ol.format.WKT.Parser.prototype.parseLineStringText_,
-  'POLYGON': ol.format.WKT.Parser.prototype.parsePolygonText_,
-  'MULTIPOINT': ol.format.WKT.Parser.prototype.parseMultiPointText_,
-  'MULTILINESTRING': ol.format.WKT.Parser.prototype.parseMultiLineStringText_,
-  'MULTIPOLYGON': ol.format.WKT.Parser.prototype.parseMultiPolygonText_
-};
-
-goog.provide('ol.format.WMSCapabilities');
-
-goog.require('ol');
-goog.require('ol.format.XLink');
-goog.require('ol.format.XML');
-goog.require('ol.format.XSD');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Format for reading WMS capabilities data
- *
- * @constructor
- * @extends {ol.format.XML}
- * @api
- */
-ol.format.WMSCapabilities = function() {
-
-  ol.format.XML.call(this);
-
-  /**
-   * @type {string|undefined}
-   */
-  this.version = undefined;
-};
-ol.inherits(ol.format.WMSCapabilities, ol.format.XML);
-
-
-/**
- * Read a WMS capabilities document.
- *
- * @function
- * @param {Document|Node|string} source The XML source.
- * @return {Object} An object representing the WMS capabilities.
- * @api
- */
-ol.format.WMSCapabilities.prototype.read;
-
-
-/**
- * @param {Document} doc Document.
- * @return {Object} WMS Capability object.
- */
-ol.format.WMSCapabilities.prototype.readFromDocument = function(doc) {
-  ol.DEBUG && console.assert(doc.nodeType == Node.DOCUMENT_NODE,
-      'doc.nodeType should be DOCUMENT');
-  for (var n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      return this.readFromNode(n);
-    }
-  }
-  return null;
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {Object} WMS Capability object.
- */
-ol.format.WMSCapabilities.prototype.readFromNode = function(node) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'WMS_Capabilities' ||
-      node.localName == 'WMT_MS_Capabilities',
-      'localName should be WMS_Capabilities or WMT_MS_Capabilities');
-  this.version = node.getAttribute('version').trim();
-  var wmsCapabilityObject = ol.xml.pushParseAndPop({
-    'version': this.version
-  }, ol.format.WMSCapabilities.PARSERS_, node, []);
-  return wmsCapabilityObject ? wmsCapabilityObject : null;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Attribution object.
- */
-ol.format.WMSCapabilities.readAttribution_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Attribution',
-      'localName should be Attribution');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.ATTRIBUTION_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object} Bounding box object.
- */
-ol.format.WMSCapabilities.readBoundingBox_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'BoundingBox',
-      'localName should be BoundingBox');
-
-  var extent = [
-    ol.format.XSD.readDecimalString(node.getAttribute('minx')),
-    ol.format.XSD.readDecimalString(node.getAttribute('miny')),
-    ol.format.XSD.readDecimalString(node.getAttribute('maxx')),
-    ol.format.XSD.readDecimalString(node.getAttribute('maxy'))
-  ];
-
-  var resolutions = [
-    ol.format.XSD.readDecimalString(node.getAttribute('resx')),
-    ol.format.XSD.readDecimalString(node.getAttribute('resy'))
-  ];
-
-  return {
-    'crs': node.getAttribute('CRS'),
-    'extent': extent,
-    'res': resolutions
-  };
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {ol.Extent|undefined} Bounding box object.
- */
-ol.format.WMSCapabilities.readEXGeographicBoundingBox_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'EX_GeographicBoundingBox',
-      'localName should be EX_GeographicBoundingBox');
-  var geographicBoundingBox = ol.xml.pushParseAndPop(
-      {},
-      ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_,
-      node, objectStack);
-  if (!geographicBoundingBox) {
-    return undefined;
-  }
-  var westBoundLongitude = /** @type {number|undefined} */
-      (geographicBoundingBox['westBoundLongitude']);
-  var southBoundLatitude = /** @type {number|undefined} */
-      (geographicBoundingBox['southBoundLatitude']);
-  var eastBoundLongitude = /** @type {number|undefined} */
-      (geographicBoundingBox['eastBoundLongitude']);
-  var northBoundLatitude = /** @type {number|undefined} */
-      (geographicBoundingBox['northBoundLatitude']);
-  if (westBoundLongitude === undefined || southBoundLatitude === undefined ||
-      eastBoundLongitude === undefined || northBoundLatitude === undefined) {
-    return undefined;
-  }
-  return [
-    westBoundLongitude, southBoundLatitude,
-    eastBoundLongitude, northBoundLatitude
-  ];
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} Capability object.
- */
-ol.format.WMSCapabilities.readCapability_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Capability',
-      'localName should be Capability');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.CAPABILITY_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} Service object.
- */
-ol.format.WMSCapabilities.readService_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Service',
-      'localName should be Service');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.SERVICE_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} Contact information object.
- */
-ol.format.WMSCapabilities.readContactInformation_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType shpuld be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'ContactInformation',
-      'localName should be ContactInformation');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_,
-      node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} Contact person object.
- */
-ol.format.WMSCapabilities.readContactPersonPrimary_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'ContactPersonPrimary',
-      'localName should be ContactPersonPrimary');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_,
-      node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} Contact address object.
- */
-ol.format.WMSCapabilities.readContactAddress_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'ContactAddress',
-      'localName should be ContactAddress');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_,
-      node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Array.<string>|undefined} Format array.
- */
-ol.format.WMSCapabilities.readException_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Exception',
-      'localName should be Exception');
-  return ol.xml.pushParseAndPop(
-      [], ol.format.WMSCapabilities.EXCEPTION_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @private
- * @return {Object|undefined} Layer object.
- */
-ol.format.WMSCapabilities.readCapabilityLayer_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Layer', 'localName should be Layer');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.LAYER_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Layer object.
- */
-ol.format.WMSCapabilities.readLayer_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Layer', 'localName should be Layer');
-  var parentLayerObject = /**  @type {Object.<string,*>} */
-      (objectStack[objectStack.length - 1]);
-
-  var layerObject = ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.LAYER_PARSERS_, node, objectStack);
-
-  if (!layerObject) {
-    return undefined;
-  }
-  var queryable =
-      ol.format.XSD.readBooleanString(node.getAttribute('queryable'));
-  if (queryable === undefined) {
-    queryable = parentLayerObject['queryable'];
-  }
-  layerObject['queryable'] = queryable !== undefined ? queryable : false;
-
-  var cascaded = ol.format.XSD.readNonNegativeIntegerString(
-      node.getAttribute('cascaded'));
-  if (cascaded === undefined) {
-    cascaded = parentLayerObject['cascaded'];
-  }
-  layerObject['cascaded'] = cascaded;
-
-  var opaque = ol.format.XSD.readBooleanString(node.getAttribute('opaque'));
-  if (opaque === undefined) {
-    opaque = parentLayerObject['opaque'];
-  }
-  layerObject['opaque'] = opaque !== undefined ? opaque : false;
-
-  var noSubsets =
-      ol.format.XSD.readBooleanString(node.getAttribute('noSubsets'));
-  if (noSubsets === undefined) {
-    noSubsets = parentLayerObject['noSubsets'];
-  }
-  layerObject['noSubsets'] = noSubsets !== undefined ? noSubsets : false;
-
-  var fixedWidth =
-      ol.format.XSD.readDecimalString(node.getAttribute('fixedWidth'));
-  if (!fixedWidth) {
-    fixedWidth = parentLayerObject['fixedWidth'];
-  }
-  layerObject['fixedWidth'] = fixedWidth;
-
-  var fixedHeight =
-      ol.format.XSD.readDecimalString(node.getAttribute('fixedHeight'));
-  if (!fixedHeight) {
-    fixedHeight = parentLayerObject['fixedHeight'];
-  }
-  layerObject['fixedHeight'] = fixedHeight;
-
-  // See 7.2.4.8
-  var addKeys = ['Style', 'CRS', 'AuthorityURL'];
-  addKeys.forEach(function(key) {
-    if (key in parentLayerObject) {
-      var childValue = layerObject[key] || [];
-      layerObject[key] = childValue.concat(parentLayerObject[key]);
-    }
-  });
-
-  var replaceKeys = ['EX_GeographicBoundingBox', 'BoundingBox', 'Dimension',
-    'Attribution', 'MinScaleDenominator', 'MaxScaleDenominator'];
-  replaceKeys.forEach(function(key) {
-    if (!(key in layerObject)) {
-      var parentValue = parentLayerObject[key];
-      layerObject[key] = parentValue;
-    }
-  });
-
-  return layerObject;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object} Dimension object.
- */
-ol.format.WMSCapabilities.readDimension_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Dimension',
-      'localName should be Dimension');
-  var dimensionObject = {
-    'name': node.getAttribute('name'),
-    'units': node.getAttribute('units'),
-    'unitSymbol': node.getAttribute('unitSymbol'),
-    'default': node.getAttribute('default'),
-    'multipleValues': ol.format.XSD.readBooleanString(
-        node.getAttribute('multipleValues')),
-    'nearestValue': ol.format.XSD.readBooleanString(
-        node.getAttribute('nearestValue')),
-    'current': ol.format.XSD.readBooleanString(node.getAttribute('current')),
-    'values': ol.format.XSD.readString(node)
-  };
-  return dimensionObject;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Online resource object.
- */
-ol.format.WMSCapabilities.readFormatOnlineresource_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_,
-      node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Request object.
- */
-ol.format.WMSCapabilities.readRequest_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Request',
-      'localName should be Request');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.REQUEST_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} DCP type object.
- */
-ol.format.WMSCapabilities.readDCPType_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'DCPType',
-      'localName should be DCPType');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.DCPTYPE_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} HTTP object.
- */
-ol.format.WMSCapabilities.readHTTP_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'HTTP', 'localName should be HTTP');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.HTTP_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Operation type object.
- */
-ol.format.WMSCapabilities.readOperationType_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Online resource object.
- */
-ol.format.WMSCapabilities.readSizedFormatOnlineresource_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  var formatOnlineresource =
-      ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
-  if (formatOnlineresource) {
-    var size = [
-      ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('width')),
-      ol.format.XSD.readNonNegativeIntegerString(node.getAttribute('height'))
-    ];
-    formatOnlineresource['size'] = size;
-    return formatOnlineresource;
-  }
-  return undefined;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Authority URL object.
- */
-ol.format.WMSCapabilities.readAuthorityURL_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'AuthorityURL',
-      'localName should be AuthorityURL');
-  var authorityObject =
-      ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
-  if (authorityObject) {
-    authorityObject['name'] = node.getAttribute('name');
-    return authorityObject;
-  }
-  return undefined;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Metadata URL object.
- */
-ol.format.WMSCapabilities.readMetadataURL_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'MetadataURL',
-      'localName should be MetadataURL');
-  var metadataObject =
-      ol.format.WMSCapabilities.readFormatOnlineresource_(node, objectStack);
-  if (metadataObject) {
-    metadataObject['type'] = node.getAttribute('type');
-    return metadataObject;
-  }
-  return undefined;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Style object.
- */
-ol.format.WMSCapabilities.readStyle_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Style', 'localName should be Style');
-  return ol.xml.pushParseAndPop(
-      {}, ol.format.WMSCapabilities.STYLE_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Array.<string>|undefined} Keyword list.
- */
-ol.format.WMSCapabilities.readKeywordList_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'KeywordList',
-      'localName should be KeywordList');
-  return ol.xml.pushParseAndPop(
-      [], ol.format.WMSCapabilities.KEYWORDLIST_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @const
- * @private
- * @type {Array.<string>}
- */
-ol.format.WMSCapabilities.NAMESPACE_URIS_ = [
-  null,
-  'http://www.opengis.net/wms'
-];
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Service': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readService_),
-      'Capability': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readCapability_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.CAPABILITY_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Request': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readRequest_),
-      'Exception': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readException_),
-      'Layer': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readCapabilityLayer_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.SERVICE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Abstract': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'KeywordList': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readKeywordList_),
-      'OnlineResource': ol.xml.makeObjectPropertySetter(
-          ol.format.XLink.readHref),
-      'ContactInformation': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readContactInformation_),
-      'Fees': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'AccessConstraints': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'LayerLimit': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readNonNegativeInteger),
-      'MaxWidth': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readNonNegativeInteger),
-      'MaxHeight': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readNonNegativeInteger)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.CONTACT_INFORMATION_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'ContactPersonPrimary': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readContactPersonPrimary_),
-      'ContactPosition': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'ContactAddress': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readContactAddress_),
-      'ContactVoiceTelephone': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'ContactFacsimileTelephone': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'ContactElectronicMailAddress': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.CONTACT_PERSON_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'ContactPerson': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'ContactOrganization': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.CONTACT_ADDRESS_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'AddressType': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Address': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'City': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'StateOrProvince': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'PostCode': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Country': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.EXCEPTION_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Format': ol.xml.makeArrayPusher(ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.LAYER_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Abstract': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'KeywordList': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readKeywordList_),
-      'CRS': ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString),
-      'EX_GeographicBoundingBox': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readEXGeographicBoundingBox_),
-      'BoundingBox': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readBoundingBox_),
-      'Dimension': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readDimension_),
-      'Attribution': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readAttribution_),
-      'AuthorityURL': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readAuthorityURL_),
-      'Identifier': ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString),
-      'MetadataURL': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readMetadataURL_),
-      'DataURL': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readFormatOnlineresource_),
-      'FeatureListURL': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readFormatOnlineresource_),
-      'Style': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readStyle_),
-      'MinScaleDenominator': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readDecimal),
-      'MaxScaleDenominator': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readDecimal),
-      'Layer': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readLayer_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.ATTRIBUTION_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'OnlineResource': ol.xml.makeObjectPropertySetter(
-          ol.format.XLink.readHref),
-      'LogoURL': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readSizedFormatOnlineresource_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.EX_GEOGRAPHIC_BOUNDING_BOX_PARSERS_ =
-    ol.xml.makeStructureNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'westBoundLongitude': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readDecimal),
-      'eastBoundLongitude': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readDecimal),
-      'southBoundLatitude': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readDecimal),
-      'northBoundLatitude': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readDecimal)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.REQUEST_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'GetCapabilities': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readOperationType_),
-      'GetMap': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readOperationType_),
-      'GetFeatureInfo': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readOperationType_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.OPERATIONTYPE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Format': ol.xml.makeObjectPropertyPusher(ol.format.XSD.readString),
-      'DCPType': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readDCPType_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.DCPTYPE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'HTTP': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readHTTP_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.HTTP_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Get': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readFormatOnlineresource_),
-      'Post': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readFormatOnlineresource_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.STYLE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Name': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Title': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'Abstract': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'LegendURL': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMSCapabilities.readSizedFormatOnlineresource_),
-      'StyleSheetURL': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readFormatOnlineresource_),
-      'StyleURL': ol.xml.makeObjectPropertySetter(
-          ol.format.WMSCapabilities.readFormatOnlineresource_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.FORMAT_ONLINERESOURCE_PARSERS_ =
-    ol.xml.makeStructureNS(ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Format': ol.xml.makeObjectPropertySetter(ol.format.XSD.readString),
-      'OnlineResource': ol.xml.makeObjectPropertySetter(
-          ol.format.XLink.readHref)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMSCapabilities.KEYWORDLIST_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMSCapabilities.NAMESPACE_URIS_, {
-      'Keyword': ol.xml.makeArrayPusher(ol.format.XSD.readString)
-    });
-
-goog.provide('ol.format.WMSGetFeatureInfo');
-
-goog.require('ol');
-goog.require('ol.array');
-goog.require('ol.format.GML2');
-goog.require('ol.format.XMLFeature');
-goog.require('ol.obj');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Format for reading WMSGetFeatureInfo format. It uses
- * {@link ol.format.GML2} to read features.
- *
- * @constructor
- * @extends {ol.format.XMLFeature}
- * @param {olx.format.WMSGetFeatureInfoOptions=} opt_options Options.
- * @api
- */
-ol.format.WMSGetFeatureInfo = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.featureNS_ = 'http://mapserver.gis.umn.edu/mapserver';
-
-
-  /**
-   * @private
-   * @type {ol.format.GML2}
-   */
-  this.gmlFormat_ = new ol.format.GML2();
-
-
-  /**
-   * @private
-   * @type {Array.<string>}
-   */
-  this.layers_ = options.layers ? options.layers : null;
-
-  ol.format.XMLFeature.call(this);
-};
-ol.inherits(ol.format.WMSGetFeatureInfo, ol.format.XMLFeature);
-
-
-/**
- * @const
- * @type {string}
- * @private
- */
-ol.format.WMSGetFeatureInfo.featureIdentifier_ = '_feature';
-
-
-/**
- * @const
- * @type {string}
- * @private
- */
-ol.format.WMSGetFeatureInfo.layerIdentifier_ = '_layer';
-
-
-/**
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Array.<ol.Feature>} Features.
- * @private
- */
-ol.format.WMSGetFeatureInfo.prototype.readFeatures_ = function(node, objectStack) {
-
-  node.setAttribute('namespaceURI', this.featureNS_);
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  var localName = node.localName;
-  /** @type {Array.<ol.Feature>} */
-  var features = [];
-  if (node.childNodes.length === 0) {
-    return features;
-  }
-  if (localName == 'msGMLOutput') {
-    for (var i = 0, ii = node.childNodes.length; i < ii; i++) {
-      var layer = node.childNodes[i];
-      if (layer.nodeType !== Node.ELEMENT_NODE) {
-        continue;
-      }
-      var context = objectStack[0];
-
-      ol.DEBUG && console.assert(layer.localName.indexOf(
-          ol.format.WMSGetFeatureInfo.layerIdentifier_) >= 0,
-          'localName of layer node should match layerIdentifier');
-
-      var toRemove = ol.format.WMSGetFeatureInfo.layerIdentifier_;
-      var layerName = layer.localName.replace(toRemove, '');
-
-      if (this.layers_ && !ol.array.includes(this.layers_, layerName)) {
-        continue;
-      }
-
-      var featureType = layerName +
-          ol.format.WMSGetFeatureInfo.featureIdentifier_;
-
-      context['featureType'] = featureType;
-      context['featureNS'] = this.featureNS_;
-
-      var parsers = {};
-      parsers[featureType] = ol.xml.makeArrayPusher(
-          this.gmlFormat_.readFeatureElement, this.gmlFormat_);
-      var parsersNS = ol.xml.makeStructureNS(
-          [context['featureNS'], null], parsers);
-      layer.setAttribute('namespaceURI', this.featureNS_);
-      var layerFeatures = ol.xml.pushParseAndPop(
-          [], parsersNS, layer, objectStack, this.gmlFormat_);
-      if (layerFeatures) {
-        ol.array.extend(features, layerFeatures);
-      }
-    }
-  }
-  if (localName == 'FeatureCollection') {
-    var gmlFeatures = ol.xml.pushParseAndPop([],
-        this.gmlFormat_.FEATURE_COLLECTION_PARSERS, node,
-        [{}], this.gmlFormat_);
-    if (gmlFeatures) {
-      features = gmlFeatures;
-    }
-  }
-  return features;
-};
-
-
-/**
- * Read all features from a WMSGetFeatureInfo response.
- *
- * @function
- * @param {Document|Node|Object|string} source Source.
- * @param {olx.format.ReadOptions=} opt_options Options.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.format.WMSGetFeatureInfo.prototype.readFeatures;
-
-
-/**
- * @inheritDoc
- */
-ol.format.WMSGetFeatureInfo.prototype.readFeaturesFromNode = function(node, opt_options) {
-  var options = {};
-  if (opt_options) {
-    ol.obj.assign(options, this.getReadOptions(node, opt_options));
-  }
-  return this.readFeatures_(node, [options]);
-};
-
-goog.provide('ol.format.WMTSCapabilities');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.format.OWS');
-goog.require('ol.format.XLink');
-goog.require('ol.format.XML');
-goog.require('ol.format.XSD');
-goog.require('ol.xml');
-
-
-/**
- * @classdesc
- * Format for reading WMTS capabilities data.
- *
- * @constructor
- * @extends {ol.format.XML}
- * @api
- */
-ol.format.WMTSCapabilities = function() {
-  ol.format.XML.call(this);
-
-  /**
-   * @type {ol.format.OWS}
-   * @private
-   */
-  this.owsParser_ = new ol.format.OWS();
-};
-ol.inherits(ol.format.WMTSCapabilities, ol.format.XML);
-
-
-/**
- * Read a WMTS capabilities document.
- *
- * @function
- * @param {Document|Node|string} source The XML source.
- * @return {Object} An object representing the WMTS capabilities.
- * @api
- */
-ol.format.WMTSCapabilities.prototype.read;
-
-
-/**
- * @param {Document} doc Document.
- * @return {Object} WMTS Capability object.
- */
-ol.format.WMTSCapabilities.prototype.readFromDocument = function(doc) {
-  ol.DEBUG && console.assert(doc.nodeType == Node.DOCUMENT_NODE,
-      'doc.nodeType should be DOCUMENT');
-  for (var n = doc.firstChild; n; n = n.nextSibling) {
-    if (n.nodeType == Node.ELEMENT_NODE) {
-      return this.readFromNode(n);
-    }
-  }
-  return null;
-};
-
-
-/**
- * @param {Node} node Node.
- * @return {Object} WMTS Capability object.
- */
-ol.format.WMTSCapabilities.prototype.readFromNode = function(node) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Capabilities',
-      'localName should be Capabilities');
-  var version = node.getAttribute('version').trim();
-  var WMTSCapabilityObject = this.owsParser_.readFromNode(node);
-  if (!WMTSCapabilityObject) {
-    return null;
-  }
-  WMTSCapabilityObject['version'] = version;
-  WMTSCapabilityObject = ol.xml.pushParseAndPop(WMTSCapabilityObject,
-      ol.format.WMTSCapabilities.PARSERS_, node, []);
-  return WMTSCapabilityObject ? WMTSCapabilityObject : null;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Attribution object.
- */
-ol.format.WMTSCapabilities.readContents_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Contents',
-      'localName should be Contents');
-
-  return ol.xml.pushParseAndPop({},
-      ol.format.WMTSCapabilities.CONTENTS_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Layers object.
- */
-ol.format.WMTSCapabilities.readLayer_ = function(node, objectStack) {
-  ol.DEBUG && console.assert(node.nodeType == Node.ELEMENT_NODE,
-      'node.nodeType should be ELEMENT');
-  ol.DEBUG && console.assert(node.localName == 'Layer', 'localName should be Layer');
-  return ol.xml.pushParseAndPop({},
-      ol.format.WMTSCapabilities.LAYER_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Tile Matrix Set object.
- */
-ol.format.WMTSCapabilities.readTileMatrixSet_ = function(node, objectStack) {
-  return ol.xml.pushParseAndPop({},
-      ol.format.WMTSCapabilities.TMS_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Style object.
- */
-ol.format.WMTSCapabilities.readStyle_ = function(node, objectStack) {
-  var style = ol.xml.pushParseAndPop({},
-      ol.format.WMTSCapabilities.STYLE_PARSERS_, node, objectStack);
-  if (!style) {
-    return undefined;
-  }
-  var isDefault = node.getAttribute('isDefault') === 'true';
-  style['isDefault'] = isDefault;
-  return style;
-
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Tile Matrix Set Link object.
- */
-ol.format.WMTSCapabilities.readTileMatrixSetLink_ = function(node,
-    objectStack) {
-  return ol.xml.pushParseAndPop({},
-      ol.format.WMTSCapabilities.TMS_LINKS_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Dimension object.
- */
-ol.format.WMTSCapabilities.readDimensions_ = function(node, objectStack) {
-  return ol.xml.pushParseAndPop({},
-      ol.format.WMTSCapabilities.DIMENSION_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Resource URL object.
- */
-ol.format.WMTSCapabilities.readResourceUrl_ = function(node, objectStack) {
-  var format = node.getAttribute('format');
-  var template = node.getAttribute('template');
-  var resourceType = node.getAttribute('resourceType');
-  var resource = {};
-  if (format) {
-    resource['format'] = format;
-  }
-  if (template) {
-    resource['template'] = template;
-  }
-  if (resourceType) {
-    resource['resourceType'] = resourceType;
-  }
-  return resource;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} WGS84 BBox object.
- */
-ol.format.WMTSCapabilities.readWgs84BoundingBox_ = function(node, objectStack) {
-  var coordinates = ol.xml.pushParseAndPop([],
-      ol.format.WMTSCapabilities.WGS84_BBOX_READERS_, node, objectStack);
-  if (coordinates.length != 2) {
-    return undefined;
-  }
-  return ol.extent.boundingExtent(coordinates);
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Legend object.
- */
-ol.format.WMTSCapabilities.readLegendUrl_ = function(node, objectStack) {
-  var legend = {};
-  legend['format'] = node.getAttribute('format');
-  legend['href'] = ol.format.XLink.readHref(node);
-  return legend;
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} Coordinates object.
- */
-ol.format.WMTSCapabilities.readCoordinates_ = function(node, objectStack) {
-  var coordinates = ol.format.XSD.readString(node).split(' ');
-  if (!coordinates || coordinates.length != 2) {
-    return undefined;
-  }
-  var x = +coordinates[0];
-  var y = +coordinates[1];
-  if (isNaN(x) || isNaN(y)) {
-    return undefined;
-  }
-  return [x, y];
-};
-
-
-/**
- * @private
- * @param {Node} node Node.
- * @param {Array.<*>} objectStack Object stack.
- * @return {Object|undefined} TileMatrix object.
- */
-ol.format.WMTSCapabilities.readTileMatrix_ = function(node, objectStack) {
-  return ol.xml.pushParseAndPop({},
-      ol.format.WMTSCapabilities.TM_PARSERS_, node, objectStack);
-};
-
-
-/**
- * @const
- * @private
- * @type {Array.<string>}
- */
-ol.format.WMTSCapabilities.NAMESPACE_URIS_ = [
-  null,
-  'http://www.opengis.net/wmts/1.0'
-];
-
-
-/**
- * @const
- * @private
- * @type {Array.<string>}
- */
-ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_ = [
-  null,
-  'http://www.opengis.net/ows/1.1'
-];
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
-      'Contents': ol.xml.makeObjectPropertySetter(
-          ol.format.WMTSCapabilities.readContents_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.CONTENTS_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
-      'Layer': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMTSCapabilities.readLayer_),
-      'TileMatrixSet': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMTSCapabilities.readTileMatrixSet_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.LAYER_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
-      'Style': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMTSCapabilities.readStyle_),
-      'Format': ol.xml.makeObjectPropertyPusher(
-          ol.format.XSD.readString),
-      'TileMatrixSetLink': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMTSCapabilities.readTileMatrixSetLink_),
-      'Dimension': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMTSCapabilities.readDimensions_),
-      'ResourceURL': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMTSCapabilities.readResourceUrl_)
-    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
-      'Title': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'Abstract': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'WGS84BoundingBox': ol.xml.makeObjectPropertySetter(
-          ol.format.WMTSCapabilities.readWgs84BoundingBox_),
-      'Identifier': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    }));
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.STYLE_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
-      'LegendURL': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMTSCapabilities.readLegendUrl_)
-    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
-      'Title': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'Identifier': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    }));
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.TMS_LINKS_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
-      'TileMatrixSet': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.DIMENSION_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
-      'Default': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'Value': ol.xml.makeObjectPropertyPusher(
-          ol.format.XSD.readString)
-    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
-      'Identifier': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    }));
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.WGS84_BBOX_READERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
-      'LowerCorner': ol.xml.makeArrayPusher(
-          ol.format.WMTSCapabilities.readCoordinates_),
-      'UpperCorner': ol.xml.makeArrayPusher(
-          ol.format.WMTSCapabilities.readCoordinates_)
-    });
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.TMS_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
-      'WellKnownScaleSet': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'TileMatrix': ol.xml.makeObjectPropertyPusher(
-          ol.format.WMTSCapabilities.readTileMatrix_)
-    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
-      'SupportedCRS': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString),
-      'Identifier': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    }));
-
-
-/**
- * @const
- * @type {Object.<string, Object.<string, ol.XmlParser>>}
- * @private
- */
-ol.format.WMTSCapabilities.TM_PARSERS_ = ol.xml.makeStructureNS(
-    ol.format.WMTSCapabilities.NAMESPACE_URIS_, {
-      'TopLeftCorner': ol.xml.makeObjectPropertySetter(
-          ol.format.WMTSCapabilities.readCoordinates_),
-      'ScaleDenominator': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readDecimal),
-      'TileWidth': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readNonNegativeInteger),
-      'TileHeight': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readNonNegativeInteger),
-      'MatrixWidth': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readNonNegativeInteger),
-      'MatrixHeight': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readNonNegativeInteger)
-    }, ol.xml.makeStructureNS(ol.format.WMTSCapabilities.OWS_NAMESPACE_URIS_, {
-      'Identifier': ol.xml.makeObjectPropertySetter(
-          ol.format.XSD.readString)
-    }));
-
-// FIXME handle geolocation not supported
-
-goog.provide('ol.Geolocation');
-
-goog.require('ol');
-goog.require('ol.Object');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.geom.Polygon');
-goog.require('ol.has');
-goog.require('ol.math');
-goog.require('ol.proj');
-goog.require('ol.sphere.WGS84');
-
-
-/**
- * @classdesc
- * Helper class for providing HTML5 Geolocation capabilities.
- * The [Geolocation API](http://www.w3.org/TR/geolocation-API/)
- * is used to locate a user's position.
- *
- * To get notified of position changes, register a listener for the generic
- * `change` event on your instance of `ol.Geolocation`.
- *
- * Example:
- *
- *     var geolocation = new ol.Geolocation({
- *       // take the projection to use from the map's view
- *       projection: view.getProjection()
- *     });
- *     // listen to changes in position
- *     geolocation.on('change', function(evt) {
- *       window.console.log(geolocation.getPosition());
- *     });
- *
- * @fires error
- * @constructor
- * @extends {ol.Object}
- * @param {olx.GeolocationOptions=} opt_options Options.
- * @api stable
- */
-ol.Geolocation = function(opt_options) {
-
-  ol.Object.call(this);
-
-  var options = opt_options || {};
-
-  /**
-   * The unprojected (EPSG:4326) device position.
-   * @private
-   * @type {ol.Coordinate}
-   */
-  this.position_ = null;
-
-  /**
-   * @private
-   * @type {ol.TransformFunction}
-   */
-  this.transform_ = ol.proj.identityTransform;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.watchId_ = undefined;
-
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.Geolocation.Property.PROJECTION),
-      this.handleProjectionChanged_, this);
-  ol.events.listen(
-      this, ol.Object.getChangeEventType(ol.Geolocation.Property.TRACKING),
-      this.handleTrackingChanged_, this);
-
-  if (options.projection !== undefined) {
-    this.setProjection(ol.proj.get(options.projection));
-  }
-  if (options.trackingOptions !== undefined) {
-    this.setTrackingOptions(options.trackingOptions);
-  }
-
-  this.setTracking(options.tracking !== undefined ? options.tracking : false);
-
-};
-ol.inherits(ol.Geolocation, ol.Object);
-
-
-/**
- * @inheritDoc
- */
-ol.Geolocation.prototype.disposeInternal = function() {
-  this.setTracking(false);
-  ol.Object.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * @private
- */
-ol.Geolocation.prototype.handleProjectionChanged_ = function() {
-  var projection = this.getProjection();
-  if (projection) {
-    this.transform_ = ol.proj.getTransformFromProjections(
-        ol.proj.get('EPSG:4326'), projection);
-    if (this.position_) {
-      this.set(
-          ol.Geolocation.Property.POSITION, this.transform_(this.position_));
-    }
-  }
-};
-
-
-/**
- * @private
- */
-ol.Geolocation.prototype.handleTrackingChanged_ = function() {
-  if (ol.has.GEOLOCATION) {
-    var tracking = this.getTracking();
-    if (tracking && this.watchId_ === undefined) {
-      this.watchId_ = navigator.geolocation.watchPosition(
-          this.positionChange_.bind(this),
-          this.positionError_.bind(this),
-          this.getTrackingOptions());
-    } else if (!tracking && this.watchId_ !== undefined) {
-      navigator.geolocation.clearWatch(this.watchId_);
-      this.watchId_ = undefined;
-    }
-  }
-};
-
-
-/**
- * @private
- * @param {GeolocationPosition} position position event.
- */
-ol.Geolocation.prototype.positionChange_ = function(position) {
-  var coords = position.coords;
-  this.set(ol.Geolocation.Property.ACCURACY, coords.accuracy);
-  this.set(ol.Geolocation.Property.ALTITUDE,
-      coords.altitude === null ? undefined : coords.altitude);
-  this.set(ol.Geolocation.Property.ALTITUDE_ACCURACY,
-      coords.altitudeAccuracy === null ?
-      undefined : coords.altitudeAccuracy);
-  this.set(ol.Geolocation.Property.HEADING, coords.heading === null ?
-      undefined : ol.math.toRadians(coords.heading));
-  if (!this.position_) {
-    this.position_ = [coords.longitude, coords.latitude];
-  } else {
-    this.position_[0] = coords.longitude;
-    this.position_[1] = coords.latitude;
-  }
-  var projectedPosition = this.transform_(this.position_);
-  this.set(ol.Geolocation.Property.POSITION, projectedPosition);
-  this.set(ol.Geolocation.Property.SPEED,
-      coords.speed === null ? undefined : coords.speed);
-  var geometry = ol.geom.Polygon.circular(
-      ol.sphere.WGS84, this.position_, coords.accuracy);
-  geometry.applyTransform(this.transform_);
-  this.set(ol.Geolocation.Property.ACCURACY_GEOMETRY, geometry);
-  this.changed();
-};
-
-/**
- * Triggered when the Geolocation returns an error.
- * @event error
- * @api
- */
-
-/**
- * @private
- * @param {GeolocationPositionError} error error object.
- */
-ol.Geolocation.prototype.positionError_ = function(error) {
-  error.type = ol.events.EventType.ERROR;
-  this.setTracking(false);
-  this.dispatchEvent(/** @type {{type: string, target: undefined}} */ (error));
-};
-
-
-/**
- * Get the accuracy of the position in meters.
- * @return {number|undefined} The accuracy of the position measurement in
- *     meters.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getAccuracy = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.Geolocation.Property.ACCURACY));
-};
-
-
-/**
- * Get a geometry of the position accuracy.
- * @return {?ol.geom.Geometry} A geometry of the position accuracy.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getAccuracyGeometry = function() {
-  return /** @type {?ol.geom.Geometry} */ (
-      this.get(ol.Geolocation.Property.ACCURACY_GEOMETRY) || null);
-};
-
-
-/**
- * Get the altitude associated with the position.
- * @return {number|undefined} The altitude of the position in meters above mean
- *     sea level.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getAltitude = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.Geolocation.Property.ALTITUDE));
-};
-
-
-/**
- * Get the altitude accuracy of the position.
- * @return {number|undefined} The accuracy of the altitude measurement in
- *     meters.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getAltitudeAccuracy = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.Geolocation.Property.ALTITUDE_ACCURACY));
-};
-
-
-/**
- * Get the heading as radians clockwise from North.
- * @return {number|undefined} The heading of the device in radians from north.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getHeading = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.Geolocation.Property.HEADING));
-};
-
-
-/**
- * Get the position of the device.
- * @return {ol.Coordinate|undefined} The current position of the device reported
- *     in the current projection.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getPosition = function() {
-  return /** @type {ol.Coordinate|undefined} */ (
-      this.get(ol.Geolocation.Property.POSITION));
-};
-
-
-/**
- * Get the projection associated with the position.
- * @return {ol.proj.Projection|undefined} The projection the position is
- *     reported in.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getProjection = function() {
-  return /** @type {ol.proj.Projection|undefined} */ (
-      this.get(ol.Geolocation.Property.PROJECTION));
-};
-
-
-/**
- * Get the speed in meters per second.
- * @return {number|undefined} The instantaneous speed of the device in meters
- *     per second.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getSpeed = function() {
-  return /** @type {number|undefined} */ (
-      this.get(ol.Geolocation.Property.SPEED));
-};
-
-
-/**
- * Determine if the device location is being tracked.
- * @return {boolean} The device location is being tracked.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getTracking = function() {
-  return /** @type {boolean} */ (
-      this.get(ol.Geolocation.Property.TRACKING));
-};
-
-
-/**
- * Get the tracking options.
- * @see http://www.w3.org/TR/geolocation-API/#position-options
- * @return {GeolocationPositionOptions|undefined} PositionOptions as defined by
- *     the [HTML5 Geolocation spec
- *     ](http://www.w3.org/TR/geolocation-API/#position_options_interface).
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.getTrackingOptions = function() {
-  return /** @type {GeolocationPositionOptions|undefined} */ (
-      this.get(ol.Geolocation.Property.TRACKING_OPTIONS));
-};
-
-
-/**
- * Set the projection to use for transforming the coordinates.
- * @param {ol.proj.Projection} projection The projection the position is
- *     reported in.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.setProjection = function(projection) {
-  this.set(ol.Geolocation.Property.PROJECTION, projection);
-};
-
-
-/**
- * Enable or disable tracking.
- * @param {boolean} tracking Enable tracking.
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.setTracking = function(tracking) {
-  this.set(ol.Geolocation.Property.TRACKING, tracking);
-};
-
-
-/**
- * Set the tracking options.
- * @see http://www.w3.org/TR/geolocation-API/#position-options
- * @param {GeolocationPositionOptions} options PositionOptions as defined by the
- *     [HTML5 Geolocation spec
- *     ](http://www.w3.org/TR/geolocation-API/#position_options_interface).
- * @observable
- * @api stable
- */
-ol.Geolocation.prototype.setTrackingOptions = function(options) {
-  this.set(ol.Geolocation.Property.TRACKING_OPTIONS, options);
-};
-
-
-/**
- * @enum {string}
- */
-ol.Geolocation.Property = {
-  ACCURACY: 'accuracy',
-  ACCURACY_GEOMETRY: 'accuracyGeometry',
-  ALTITUDE: 'altitude',
-  ALTITUDE_ACCURACY: 'altitudeAccuracy',
-  HEADING: 'heading',
-  POSITION: 'position',
-  PROJECTION: 'projection',
-  SPEED: 'speed',
-  TRACKING: 'tracking',
-  TRACKING_OPTIONS: 'trackingOptions'
-};
-
-goog.provide('ol.geom.Circle');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.geom.flat.deflate');
-
-
-/**
- * @classdesc
- * Circle geometry.
- *
- * @constructor
- * @extends {ol.geom.SimpleGeometry}
- * @param {ol.Coordinate} center Center.
- * @param {number=} opt_radius Radius.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api
- */
-ol.geom.Circle = function(center, opt_radius, opt_layout) {
-  ol.geom.SimpleGeometry.call(this);
-  var radius = opt_radius ? opt_radius : 0;
-  this.setCenterAndRadius(center, radius, opt_layout);
-};
-ol.inherits(ol.geom.Circle, ol.geom.SimpleGeometry);
-
-
-/**
- * Make a complete copy of the geometry.
- * @return {!ol.geom.Circle} Clone.
- * @api
- */
-ol.geom.Circle.prototype.clone = function() {
-  var circle = new ol.geom.Circle(null);
-  circle.setFlatCoordinates(this.layout, this.flatCoordinates.slice());
-  return circle;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.Circle.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) {
-  var flatCoordinates = this.flatCoordinates;
-  var dx = x - flatCoordinates[0];
-  var dy = y - flatCoordinates[1];
-  var squaredDistance = dx * dx + dy * dy;
-  if (squaredDistance < minSquaredDistance) {
-    var i;
-    if (squaredDistance === 0) {
-      for (i = 0; i < this.stride; ++i) {
-        closestPoint[i] = flatCoordinates[i];
-      }
-    } else {
-      var delta = this.getRadius() / Math.sqrt(squaredDistance);
-      closestPoint[0] = flatCoordinates[0] + delta * dx;
-      closestPoint[1] = flatCoordinates[1] + delta * dy;
-      for (i = 2; i < this.stride; ++i) {
-        closestPoint[i] = flatCoordinates[i];
-      }
-    }
-    closestPoint.length = this.stride;
-    return squaredDistance;
-  } else {
-    return minSquaredDistance;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.Circle.prototype.containsXY = function(x, y) {
-  var flatCoordinates = this.flatCoordinates;
-  var dx = x - flatCoordinates[0];
-  var dy = y - flatCoordinates[1];
-  return dx * dx + dy * dy <= this.getRadiusSquared_();
-};
-
-
-/**
- * Return the center of the circle as {@link ol.Coordinate coordinate}.
- * @return {ol.Coordinate} Center.
- * @api
- */
-ol.geom.Circle.prototype.getCenter = function() {
-  return this.flatCoordinates.slice(0, this.stride);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.geom.Circle.prototype.computeExtent = function(extent) {
-  var flatCoordinates = this.flatCoordinates;
-  var radius = flatCoordinates[this.stride] - flatCoordinates[0];
-  return ol.extent.createOrUpdate(
-      flatCoordinates[0] - radius, flatCoordinates[1] - radius,
-      flatCoordinates[0] + radius, flatCoordinates[1] + radius,
-      extent);
-};
-
-
-/**
- * Return the radius of the circle.
- * @return {number} Radius.
- * @api
- */
-ol.geom.Circle.prototype.getRadius = function() {
-  return Math.sqrt(this.getRadiusSquared_());
-};
-
-
-/**
- * @private
- * @return {number} Radius squared.
- */
-ol.geom.Circle.prototype.getRadiusSquared_ = function() {
-  var dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0];
-  var dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];
-  return dx * dx + dy * dy;
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.geom.Circle.prototype.getType = function() {
-  return ol.geom.GeometryType.CIRCLE;
-};
-
-
-/**
- * @inheritDoc
- * @api stable
- */
-ol.geom.Circle.prototype.intersectsExtent = function(extent) {
-  var circleExtent = this.getExtent();
-  if (ol.extent.intersects(extent, circleExtent)) {
-    var center = this.getCenter();
-
-    if (extent[0] <= center[0] && extent[2] >= center[0]) {
-      return true;
-    }
-    if (extent[1] <= center[1] && extent[3] >= center[1]) {
-      return true;
-    }
-
-    return ol.extent.forEachCorner(extent, this.intersectsCoordinate, this);
-  }
-  return false;
-
-};
-
-
-/**
- * Set the center of the circle as {@link ol.Coordinate coordinate}.
- * @param {ol.Coordinate} center Center.
- * @api
- */
-ol.geom.Circle.prototype.setCenter = function(center) {
-  var stride = this.stride;
-  ol.DEBUG && console.assert(center.length == stride,
-      'center array length should match stride');
-  var radius = this.flatCoordinates[stride] - this.flatCoordinates[0];
-  var flatCoordinates = center.slice();
-  flatCoordinates[stride] = flatCoordinates[0] + radius;
-  var i;
-  for (i = 1; i < stride; ++i) {
-    flatCoordinates[stride + i] = center[i];
-  }
-  this.setFlatCoordinates(this.layout, flatCoordinates);
-};
-
-
-/**
- * Set the center (as {@link ol.Coordinate coordinate}) and the radius (as
- * number) of the circle.
- * @param {ol.Coordinate} center Center.
- * @param {number} radius Radius.
- * @param {ol.geom.GeometryLayout=} opt_layout Layout.
- * @api
- */
-ol.geom.Circle.prototype.setCenterAndRadius = function(center, radius, opt_layout) {
-  if (!center) {
-    this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null);
-  } else {
-    this.setLayout(opt_layout, center, 0);
-    if (!this.flatCoordinates) {
-      this.flatCoordinates = [];
-    }
-    /** @type {Array.<number>} */
-    var flatCoordinates = this.flatCoordinates;
-    var offset = ol.geom.flat.deflate.coordinate(
-        flatCoordinates, 0, center, this.stride);
-    flatCoordinates[offset++] = flatCoordinates[0] + radius;
-    var i, ii;
-    for (i = 1, ii = this.stride; i < ii; ++i) {
-      flatCoordinates[offset++] = flatCoordinates[i];
-    }
-    flatCoordinates.length = offset;
-    this.changed();
-  }
-};
-
-
-/**
- * @param {ol.geom.GeometryLayout} layout Layout.
- * @param {Array.<number>} flatCoordinates Flat coordinates.
- */
-ol.geom.Circle.prototype.setFlatCoordinates = function(layout, flatCoordinates) {
-  this.setFlatCoordinatesInternal(layout, flatCoordinates);
-  this.changed();
-};
-
-
-/**
- * Set the radius of the circle. The radius is in the units of the projection.
- * @param {number} radius Radius.
- * @api
- */
-ol.geom.Circle.prototype.setRadius = function(radius) {
-  this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius;
-  this.changed();
-};
-
-
-/**
- * Transform each coordinate of the circle from one coordinate reference system
- * to another. The geometry is modified in place.
- * If you do not want the geometry modified in place, first clone() it and
- * then use this function on the clone.
- *
- * Internally a circle is currently represented by two points: the center of
- * the circle `[cx, cy]`, and the point to the right of the circle
- * `[cx + r, cy]`. This `transform` function just transforms these two points.
- * So the resulting geometry is also a circle, and that circle does not
- * correspond to the shape that would be obtained by transforming every point
- * of the original circle.
- *
- * @param {ol.ProjectionLike} source The current projection.  Can be a
- *     string identifier or a {@link ol.proj.Projection} object.
- * @param {ol.ProjectionLike} destination The desired projection.  Can be a
- *     string identifier or a {@link ol.proj.Projection} object.
- * @return {ol.geom.Circle} This geometry.  Note that original geometry is
- *     modified in place.
- * @function
- * @api stable
- */
-ol.geom.Circle.prototype.transform;
-
-goog.provide('ol.geom.flat.geodesic');
-
-goog.require('ol');
-goog.require('ol.math');
-goog.require('ol.proj');
-
-
-/**
- * @private
- * @param {function(number): ol.Coordinate} interpolate Interpolate function.
- * @param {ol.TransformFunction} transform Transform from longitude/latitude to
- *     projected coordinates.
- * @param {number} squaredTolerance Squared tolerance.
- * @return {Array.<number>} Flat coordinates.
- */
-ol.geom.flat.geodesic.line_ = function(interpolate, transform, squaredTolerance) {
-  // FIXME reduce garbage generation
-  // FIXME optimize stack operations
-
-  /** @type {Array.<number>} */
-  var flatCoordinates = [];
-
-  var geoA = interpolate(0);
-  var geoB = interpolate(1);
-
-  var a = transform(geoA);
-  var b = transform(geoB);
-
-  /** @type {Array.<ol.Coordinate>} */
-  var geoStack = [geoB, geoA];
-  /** @type {Array.<ol.Coordinate>} */
-  var stack = [b, a];
-  /** @type {Array.<number>} */
-  var fractionStack = [1, 0];
-
-  /** @type {Object.<string, boolean>} */
-  var fractions = {};
-
-  var maxIterations = 1e5;
-  var geoM, m, fracA, fracB, fracM, key;
-
-  while (--maxIterations > 0 && fractionStack.length > 0) {
-    // Pop the a coordinate off the stack
-    fracA = fractionStack.pop();
-    geoA = geoStack.pop();
-    a = stack.pop();
-    // Add the a coordinate if it has not been added yet
-    key = fracA.toString();
-    if (!(key in fractions)) {
-      flatCoordinates.push(a[0], a[1]);
-      fractions[key] = true;
-    }
-    // Pop the b coordinate off the stack
-    fracB = fractionStack.pop();
-    geoB = geoStack.pop();
-    b = stack.pop();
-    // Find the m point between the a and b coordinates
-    fracM = (fracA + fracB) / 2;
-    geoM = interpolate(fracM);
-    m = transform(geoM);
-    if (ol.math.squaredSegmentDistance(m[0], m[1], a[0], a[1],
-        b[0], b[1]) < squaredTolerance) {
-      // If the m point is sufficiently close to the straight line, then we
-      // discard it.  Just use the b coordinate and move on to the next line
-      // segment.
-      flatCoordinates.push(b[0], b[1]);
-      key = fracB.toString();
-      ol.DEBUG && console.assert(!(key in fractions),
-          'fractions object should contain key : ' + key);
-      fractions[key] = true;
-    } else {
-      // Otherwise, we need to subdivide the current line segment.  Split it
-      // into two and push the two line segments onto the stack.
-      fractionStack.push(fracB, fracM, fracM, fracA);
-      stack.push(b, m, m, a);
-      geoStack.push(geoB, geoM, geoM, geoA);
-    }
-  }
-  ol.DEBUG && console.assert(maxIterations > 0,
-      'maxIterations should be more than 0');
-
-  return flatCoordinates;
-};
-
-
-/**
-* Generate a great-circle arcs between two lat/lon points.
-* @param {number} lon1 Longitude 1 in degrees.
-* @param {number} lat1 Latitude 1 in degrees.
-* @param {number} lon2 Longitude 2 in degrees.
-* @param {number} lat2 Latitude 2 in degrees.
- * @param {ol.proj.Projection} projection Projection.
-* @param {number} squaredTolerance Squared tolerance.
-* @return {Array.<number>} Flat coordinates.
-*/
-ol.geom.flat.geodesic.greatCircleArc = function(
-    lon1, lat1, lon2, lat2, projection, squaredTolerance) {
-
-  var geoProjection = ol.proj.get('EPSG:4326');
-
-  var cosLat1 = Math.cos(ol.math.toRadians(lat1));
-  var sinLat1 = Math.sin(ol.math.toRadians(lat1));
-  var cosLat2 = Math.cos(ol.math.toRadians(lat2));
-  var sinLat2 = Math.sin(ol.math.toRadians(lat2));
-  var cosDeltaLon = Math.cos(ol.math.toRadians(lon2 - lon1));
-  var sinDeltaLon = Math.sin(ol.math.toRadians(lon2 - lon1));
-  var d = sinLat1 * sinLat2 + cosLat1 * cosLat2 * cosDeltaLon;
-
-  return ol.geom.flat.geodesic.line_(
-      /**
-       * @param {number} frac Fraction.
-       * @return {ol.Coordinate} Coordinate.
-       */
-      function(frac) {
-        if (1 <= d) {
-          return [lon2, lat2];
-        }
-        var D = frac * Math.acos(d);
-        var cosD = Math.cos(D);
-        var sinD = Math.sin(D);
-        var y = sinDeltaLon * cosLat2;
-        var x = cosLat1 * sinLat2 - sinLat1 * cosLat2 * cosDeltaLon;
-        var theta = Math.atan2(y, x);
-        var lat = Math.asin(sinLat1 * cosD + cosLat1 * sinD * Math.cos(theta));
-        var lon = ol.math.toRadians(lon1) +
-            Math.atan2(Math.sin(theta) * sinD * cosLat1,
-                       cosD - sinLat1 * Math.sin(lat));
-        return [ol.math.toDegrees(lon), ol.math.toDegrees(lat)];
-      }, ol.proj.getTransform(geoProjection, projection), squaredTolerance);
-};
-
-
-/**
- * Generate a meridian (line at constant longitude).
- * @param {number} lon Longitude.
- * @param {number} lat1 Latitude 1.
- * @param {number} lat2 Latitude 2.
- * @param {ol.proj.Projection} projection Projection.
- * @param {number} squaredTolerance Squared tolerance.
- * @return {Array.<number>} Flat coordinates.
- */
-ol.geom.flat.geodesic.meridian = function(lon, lat1, lat2, projection, squaredTolerance) {
-  var epsg4326Projection = ol.proj.get('EPSG:4326');
-  return ol.geom.flat.geodesic.line_(
-      /**
-       * @param {number} frac Fraction.
-       * @return {ol.Coordinate} Coordinate.
-       */
-      function(frac) {
-        return [lon, lat1 + ((lat2 - lat1) * frac)];
-      },
-      ol.proj.getTransform(epsg4326Projection, projection), squaredTolerance);
-};
-
-
-/**
- * Generate a parallel (line at constant latitude).
- * @param {number} lat Latitude.
- * @param {number} lon1 Longitude 1.
- * @param {number} lon2 Longitude 2.
- * @param {ol.proj.Projection} projection Projection.
- * @param {number} squaredTolerance Squared tolerance.
- * @return {Array.<number>} Flat coordinates.
- */
-ol.geom.flat.geodesic.parallel = function(lat, lon1, lon2, projection, squaredTolerance) {
-  var epsg4326Projection = ol.proj.get('EPSG:4326');
-  return ol.geom.flat.geodesic.line_(
-      /**
-       * @param {number} frac Fraction.
-       * @return {ol.Coordinate} Coordinate.
-       */
-      function(frac) {
-        return [lon1 + ((lon2 - lon1) * frac), lat];
-      },
-      ol.proj.getTransform(epsg4326Projection, projection), squaredTolerance);
-};
-
-goog.provide('ol.Graticule');
-
-goog.require('ol');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.flat.geodesic');
-goog.require('ol.math');
-goog.require('ol.proj');
-goog.require('ol.render.Event');
-goog.require('ol.style.Stroke');
-
-
-/**
- * Render a grid for a coordinate system on a map.
- * @constructor
- * @param {olx.GraticuleOptions=} opt_options Options.
- * @api
- */
-ol.Graticule = function(opt_options) {
-
-  var options = opt_options || {};
-
-  /**
-   * @type {ol.Map}
-   * @private
-   */
-  this.map_ = null;
-
-  /**
-   * @type {ol.proj.Projection}
-   * @private
-   */
-  this.projection_ = null;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.maxLat_ = Infinity;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.maxLon_ = Infinity;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.minLat_ = -Infinity;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.minLon_ = -Infinity;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.maxLatP_ = Infinity;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.maxLonP_ = Infinity;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.minLatP_ = -Infinity;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.minLonP_ = -Infinity;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.targetSize_ = options.targetSize !== undefined ?
-      options.targetSize : 100;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.maxLines_ = options.maxLines !== undefined ? options.maxLines : 100;
-  ol.DEBUG && console.assert(this.maxLines_ > 0,
-      'this.maxLines_ should be more than 0');
-
-  /**
-   * @type {Array.<ol.geom.LineString>}
-   * @private
-   */
-  this.meridians_ = [];
-
-  /**
-   * @type {Array.<ol.geom.LineString>}
-   * @private
-   */
-  this.parallels_ = [];
-
-  /**
-   * @type {ol.style.Stroke}
-   * @private
-   */
-  this.strokeStyle_ = options.strokeStyle !== undefined ?
-      options.strokeStyle : ol.Graticule.DEFAULT_STROKE_STYLE_;
-
-  /**
-   * @type {ol.TransformFunction|undefined}
-   * @private
-   */
-  this.fromLonLatTransform_ = undefined;
-
-  /**
-   * @type {ol.TransformFunction|undefined}
-   * @private
-   */
-  this.toLonLatTransform_ = undefined;
-
-  /**
-   * @type {ol.Coordinate}
-   * @private
-   */
-  this.projectionCenterLonLat_ = null;
-
-  this.setMap(options.map !== undefined ? options.map : null);
-};
-
-
-/**
- * @type {ol.style.Stroke}
- * @private
- * @const
- */
-ol.Graticule.DEFAULT_STROKE_STYLE_ = new ol.style.Stroke({
-  color: 'rgba(0,0,0,0.2)'
-});
-
-
-/**
- * TODO can be configurable
- * @type {Array.<number>}
- * @private
- */
-ol.Graticule.intervals_ = [90, 45, 30, 20, 10, 5, 2, 1, 0.5, 0.2, 0.1, 0.05,
-  0.01, 0.005, 0.002, 0.001];
-
-
-/**
- * @param {number} lon Longitude.
- * @param {number} minLat Minimal latitude.
- * @param {number} maxLat Maximal latitude.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {ol.Extent} extent Extent.
- * @param {number} index Index.
- * @return {number} Index.
- * @private
- */
-ol.Graticule.prototype.addMeridian_ = function(lon, minLat, maxLat, squaredTolerance, extent, index) {
-  var lineString = this.getMeridian_(lon, minLat, maxLat,
-      squaredTolerance, index);
-  if (ol.extent.intersects(lineString.getExtent(), extent)) {
-    this.meridians_[index++] = lineString;
-  }
-  return index;
-};
-
-
-/**
- * @param {number} lat Latitude.
- * @param {number} minLon Minimal longitude.
- * @param {number} maxLon Maximal longitude.
- * @param {number} squaredTolerance Squared tolerance.
- * @param {ol.Extent} extent Extent.
- * @param {number} index Index.
- * @return {number} Index.
- * @private
- */
-ol.Graticule.prototype.addParallel_ = function(lat, minLon, maxLon, squaredTolerance, extent, index) {
-  var lineString = this.getParallel_(lat, minLon, maxLon, squaredTolerance,
-      index);
-  if (ol.extent.intersects(lineString.getExtent(), extent)) {
-    this.parallels_[index++] = lineString;
-  }
-  return index;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {ol.Coordinate} center Center.
- * @param {number} resolution Resolution.
- * @param {number} squaredTolerance Squared tolerance.
- * @private
- */
-ol.Graticule.prototype.createGraticule_ = function(extent, center, resolution, squaredTolerance) {
-
-  var interval = this.getInterval_(resolution);
-  if (interval == -1) {
-    this.meridians_.length = this.parallels_.length = 0;
-    return;
-  }
-
-  var centerLonLat = this.toLonLatTransform_(center);
-  var centerLon = centerLonLat[0];
-  var centerLat = centerLonLat[1];
-  var maxLines = this.maxLines_;
-  var cnt, idx, lat, lon;
-
-  var validExtent = [
-    Math.max(extent[0], this.minLonP_),
-    Math.max(extent[1], this.minLatP_),
-    Math.min(extent[2], this.maxLonP_),
-    Math.min(extent[3], this.maxLatP_)
-  ];
-
-  validExtent = ol.proj.transformExtent(validExtent, this.projection_,
-      'EPSG:4326');
-  var maxLat = validExtent[3];
-  var maxLon = validExtent[2];
-  var minLat = validExtent[1];
-  var minLon = validExtent[0];
-
-  // Create meridians
-
-  centerLon = Math.floor(centerLon / interval) * interval;
-  lon = ol.math.clamp(centerLon, this.minLon_, this.maxLon_);
-
-  idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, 0);
-
-  cnt = 0;
-  while (lon != this.minLon_ && cnt++ < maxLines) {
-    lon = Math.max(lon - interval, this.minLon_);
-    idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, idx);
-  }
-
-  lon = ol.math.clamp(centerLon, this.minLon_, this.maxLon_);
-
-  cnt = 0;
-  while (lon != this.maxLon_ && cnt++ < maxLines) {
-    lon = Math.min(lon + interval, this.maxLon_);
-    idx = this.addMeridian_(lon, minLat, maxLat, squaredTolerance, extent, idx);
-  }
-
-  this.meridians_.length = idx;
-
-  // Create parallels
-
-  centerLat = Math.floor(centerLat / interval) * interval;
-  lat = ol.math.clamp(centerLat, this.minLat_, this.maxLat_);
-
-  idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, 0);
-
-  cnt = 0;
-  while (lat != this.minLat_ && cnt++ < maxLines) {
-    lat = Math.max(lat - interval, this.minLat_);
-    idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, idx);
-  }
-
-  lat = ol.math.clamp(centerLat, this.minLat_, this.maxLat_);
-
-  cnt = 0;
-  while (lat != this.maxLat_ && cnt++ < maxLines) {
-    lat = Math.min(lat + interval, this.maxLat_);
-    idx = this.addParallel_(lat, minLon, maxLon, squaredTolerance, extent, idx);
-  }
-
-  this.parallels_.length = idx;
-
-};
-
-
-/**
- * @param {number} resolution Resolution.
- * @return {number} The interval in degrees.
- * @private
- */
-ol.Graticule.prototype.getInterval_ = function(resolution) {
-  var centerLon = this.projectionCenterLonLat_[0];
-  var centerLat = this.projectionCenterLonLat_[1];
-  var interval = -1;
-  var i, ii, delta, dist;
-  var target = Math.pow(this.targetSize_ * resolution, 2);
-  /** @type {Array.<number>} **/
-  var p1 = [];
-  /** @type {Array.<number>} **/
-  var p2 = [];
-  for (i = 0, ii = ol.Graticule.intervals_.length; i < ii; ++i) {
-    delta = ol.Graticule.intervals_[i] / 2;
-    p1[0] = centerLon - delta;
-    p1[1] = centerLat - delta;
-    p2[0] = centerLon + delta;
-    p2[1] = centerLat + delta;
-    this.fromLonLatTransform_(p1, p1);
-    this.fromLonLatTransform_(p2, p2);
-    dist = Math.pow(p2[0] - p1[0], 2) + Math.pow(p2[1] - p1[1], 2);
-    if (dist <= target) {
-      break;
-    }
-    interval = ol.Graticule.intervals_[i];
-  }
-  return interval;
-};
-
-
-/**
- * Get the map associated with this graticule.
- * @return {ol.Map} The map.
- * @api
- */
-ol.Graticule.prototype.getMap = function() {
-  return this.map_;
-};
-
-
-/**
- * @param {number} lon Longitude.
- * @param {number} minLat Minimal latitude.
- * @param {number} maxLat Maximal latitude.
- * @param {number} squaredTolerance Squared tolerance.
- * @return {ol.geom.LineString} The meridian line string.
- * @param {number} index Index.
- * @private
- */
-ol.Graticule.prototype.getMeridian_ = function(lon, minLat, maxLat,
-                                               squaredTolerance, index) {
-  ol.DEBUG && console.assert(lon >= this.minLon_,
-      'lon should be larger than or equal to this.minLon_');
-  ol.DEBUG && console.assert(lon <= this.maxLon_,
-      'lon should be smaller than or equal to this.maxLon_');
-  var flatCoordinates = ol.geom.flat.geodesic.meridian(lon,
-      minLat, maxLat, this.projection_, squaredTolerance);
-  ol.DEBUG && console.assert(flatCoordinates.length > 0,
-      'flatCoordinates cannot be empty');
-  var lineString = this.meridians_[index] !== undefined ?
-      this.meridians_[index] : new ol.geom.LineString(null);
-  lineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);
-  return lineString;
-};
-
-
-/**
- * Get the list of meridians.  Meridians are lines of equal longitude.
- * @return {Array.<ol.geom.LineString>} The meridians.
- * @api
- */
-ol.Graticule.prototype.getMeridians = function() {
-  return this.meridians_;
-};
-
-
-/**
- * @param {number} lat Latitude.
- * @param {number} minLon Minimal longitude.
- * @param {number} maxLon Maximal longitude.
- * @param {number} squaredTolerance Squared tolerance.
- * @return {ol.geom.LineString} The parallel line string.
- * @param {number} index Index.
- * @private
- */
-ol.Graticule.prototype.getParallel_ = function(lat, minLon, maxLon,
-                                               squaredTolerance, index) {
-  ol.DEBUG && console.assert(lat >= this.minLat_,
-      'lat should be larger than or equal to this.minLat_');
-  ol.DEBUG && console.assert(lat <= this.maxLat_,
-      'lat should be smaller than or equal to this.maxLat_');
-  var flatCoordinates = ol.geom.flat.geodesic.parallel(lat,
-      this.minLon_, this.maxLon_, this.projection_, squaredTolerance);
-  ol.DEBUG && console.assert(flatCoordinates.length > 0,
-      'flatCoordinates cannot be empty');
-  var lineString = this.parallels_[index] !== undefined ?
-      this.parallels_[index] : new ol.geom.LineString(null);
-  lineString.setFlatCoordinates(ol.geom.GeometryLayout.XY, flatCoordinates);
-  return lineString;
-};
-
-
-/**
- * Get the list of parallels.  Pallels are lines of equal latitude.
- * @return {Array.<ol.geom.LineString>} The parallels.
- * @api
- */
-ol.Graticule.prototype.getParallels = function() {
-  return this.parallels_;
-};
-
-
-/**
- * @param {ol.render.Event} e Event.
- * @private
- */
-ol.Graticule.prototype.handlePostCompose_ = function(e) {
-  var vectorContext = e.vectorContext;
-  var frameState = e.frameState;
-  var extent = frameState.extent;
-  var viewState = frameState.viewState;
-  var center = viewState.center;
-  var projection = viewState.projection;
-  var resolution = viewState.resolution;
-  var pixelRatio = frameState.pixelRatio;
-  var squaredTolerance =
-      resolution * resolution / (4 * pixelRatio * pixelRatio);
-
-  var updateProjectionInfo = !this.projection_ ||
-      !ol.proj.equivalent(this.projection_, projection);
-
-  if (updateProjectionInfo) {
-    this.updateProjectionInfo_(projection);
-  }
-
-  //Fix the extent if wrapped.
-  //(note: this is the same extent as vectorContext.extent_)
-  var offsetX = 0;
-  if (projection.canWrapX()) {
-    var projectionExtent = projection.getExtent();
-    var worldWidth = ol.extent.getWidth(projectionExtent);
-    var x = frameState.focus[0];
-    if (x < projectionExtent[0] || x > projectionExtent[2]) {
-      var worldsAway = Math.ceil((projectionExtent[0] - x) / worldWidth);
-      offsetX = worldWidth * worldsAway;
-      extent = [
-        extent[0] + offsetX, extent[1],
-        extent[2] + offsetX, extent[3]
-      ];
-    }
-  }
-
-  this.createGraticule_(extent, center, resolution, squaredTolerance);
-
-  // Draw the lines
-  vectorContext.setFillStrokeStyle(null, this.strokeStyle_);
-  var i, l, line;
-  for (i = 0, l = this.meridians_.length; i < l; ++i) {
-    line = this.meridians_[i];
-    vectorContext.drawLineString(line, null);
-  }
-  for (i = 0, l = this.parallels_.length; i < l; ++i) {
-    line = this.parallels_[i];
-    vectorContext.drawLineString(line, null);
-  }
-};
-
-
-/**
- * @param {ol.proj.Projection} projection Projection.
- * @private
- */
-ol.Graticule.prototype.updateProjectionInfo_ = function(projection) {
-  var epsg4326Projection = ol.proj.get('EPSG:4326');
-
-  var extent = projection.getExtent();
-  var worldExtent = projection.getWorldExtent();
-  var worldExtentP = ol.proj.transformExtent(worldExtent,
-      epsg4326Projection, projection);
-
-  var maxLat = worldExtent[3];
-  var maxLon = worldExtent[2];
-  var minLat = worldExtent[1];
-  var minLon = worldExtent[0];
-
-  var maxLatP = worldExtentP[3];
-  var maxLonP = worldExtentP[2];
-  var minLatP = worldExtentP[1];
-  var minLonP = worldExtentP[0];
-
-  ol.DEBUG && console.assert(maxLat !== undefined, 'maxLat should be defined');
-  ol.DEBUG && console.assert(maxLon !== undefined, 'maxLon should be defined');
-  ol.DEBUG && console.assert(minLat !== undefined, 'minLat should be defined');
-  ol.DEBUG && console.assert(minLon !== undefined, 'minLon should be defined');
-
-  ol.DEBUG && console.assert(maxLatP !== undefined,
-      'projected maxLat should be defined');
-  ol.DEBUG && console.assert(maxLonP !== undefined,
-      'projected maxLon should be defined');
-  ol.DEBUG && console.assert(minLatP !== undefined,
-      'projected minLat should be defined');
-  ol.DEBUG && console.assert(minLonP !== undefined,
-      'projected minLon should be defined');
-
-  this.maxLat_ = maxLat;
-  this.maxLon_ = maxLon;
-  this.minLat_ = minLat;
-  this.minLon_ = minLon;
-
-  this.maxLatP_ = maxLatP;
-  this.maxLonP_ = maxLonP;
-  this.minLatP_ = minLatP;
-  this.minLonP_ = minLonP;
-
-
-  this.fromLonLatTransform_ = ol.proj.getTransform(
-      epsg4326Projection, projection);
-
-  this.toLonLatTransform_ = ol.proj.getTransform(
-      projection, epsg4326Projection);
-
-  this.projectionCenterLonLat_ = this.toLonLatTransform_(
-      ol.extent.getCenter(extent));
-
-  this.projection_ = projection;
-};
-
-
-/**
- * Set the map for this graticule.  The graticule will be rendered on the
- * provided map.
- * @param {ol.Map} map Map.
- * @api
- */
-ol.Graticule.prototype.setMap = function(map) {
-  if (this.map_) {
-    this.map_.un(ol.render.Event.Type.POSTCOMPOSE,
-        this.handlePostCompose_, this);
-    this.map_.render();
-  }
-  if (map) {
-    map.on(ol.render.Event.Type.POSTCOMPOSE,
-        this.handlePostCompose_, this);
-    map.render();
-  }
-  this.map_ = map;
-};
-
-goog.provide('ol.ImageTile');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-
-
-/**
- * @constructor
- * @extends {ol.Tile}
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Tile.State} state State.
- * @param {string} src Image source URI.
- * @param {?string} crossOrigin Cross origin.
- * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.
- */
-ol.ImageTile = function(tileCoord, state, src, crossOrigin, tileLoadFunction) {
-
-  ol.Tile.call(this, tileCoord, state);
-
-  /**
-   * Image URI
-   *
-   * @private
-   * @type {string}
-   */
-  this.src_ = src;
-
-  /**
-   * @private
-   * @type {Image}
-   */
-  this.image_ = new Image();
-  if (crossOrigin !== null) {
-    this.image_.crossOrigin = crossOrigin;
-  }
-
-  /**
-   * @private
-   * @type {Array.<ol.EventsKey>}
-   */
-  this.imageListenerKeys_ = null;
-
-  /**
-   * @private
-   * @type {ol.TileLoadFunctionType}
-   */
-  this.tileLoadFunction_ = tileLoadFunction;
-
-};
-ol.inherits(ol.ImageTile, ol.Tile);
-
-
-/**
- * @inheritDoc
- */
-ol.ImageTile.prototype.disposeInternal = function() {
-  if (this.state == ol.Tile.State.LOADING) {
-    this.unlistenImage_();
-  }
-  if (this.interimTile) {
-    this.interimTile.dispose();
-  }
-  this.state = ol.Tile.State.ABORT;
-  this.changed();
-  ol.Tile.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * Get the image element for this tile.
- * @inheritDoc
- * @api
- */
-ol.ImageTile.prototype.getImage = function() {
-  return this.image_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.ImageTile.prototype.getKey = function() {
-  return this.src_;
-};
-
-
-/**
- * Tracks loading or read errors.
- *
- * @private
- */
-ol.ImageTile.prototype.handleImageError_ = function() {
-  this.state = ol.Tile.State.ERROR;
-  this.unlistenImage_();
-  this.changed();
-};
-
-
-/**
- * Tracks successful image load.
- *
- * @private
- */
-ol.ImageTile.prototype.handleImageLoad_ = function() {
-  if (this.image_.naturalWidth && this.image_.naturalHeight) {
-    this.state = ol.Tile.State.LOADED;
-  } else {
-    this.state = ol.Tile.State.EMPTY;
-  }
-  this.unlistenImage_();
-  this.changed();
-};
-
-
-/**
- * Load the image or retry if loading previously failed.
- * Loading is taken care of by the tile queue, and calling this method is
- * only needed for preloading or for reloading in case of an error.
- * @api
- */
-ol.ImageTile.prototype.load = function() {
-  if (this.state == ol.Tile.State.IDLE || this.state == ol.Tile.State.ERROR) {
-    this.state = ol.Tile.State.LOADING;
-    this.changed();
-    ol.DEBUG && console.assert(!this.imageListenerKeys_,
-        'this.imageListenerKeys_ should be null');
-    this.imageListenerKeys_ = [
-      ol.events.listenOnce(this.image_, ol.events.EventType.ERROR,
-          this.handleImageError_, this),
-      ol.events.listenOnce(this.image_, ol.events.EventType.LOAD,
-          this.handleImageLoad_, this)
-    ];
-    this.tileLoadFunction_(this, this.src_);
-  }
-};
-
-
-/**
- * Discards event handlers which listen for load completion or errors.
- *
- * @private
- */
-ol.ImageTile.prototype.unlistenImage_ = function() {
-  this.imageListenerKeys_.forEach(ol.events.unlistenByKey);
-  this.imageListenerKeys_ = null;
-};
-
-// FIXME should handle all geo-referenced data, not just vector data
-
-goog.provide('ol.interaction.DragAndDrop');
-
-goog.require('ol');
-goog.require('ol.functions');
-goog.require('ol.events');
-goog.require('ol.events.Event');
-goog.require('ol.events.EventType');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.proj');
-
-
-/**
- * @classdesc
- * Handles input of vector data by drag and drop.
- *
- * @constructor
- * @extends {ol.interaction.Interaction}
- * @fires ol.interaction.DragAndDrop.Event
- * @param {olx.interaction.DragAndDropOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.DragAndDrop = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.interaction.Interaction.call(this, {
-    handleEvent: ol.interaction.DragAndDrop.handleEvent
-  });
-
-  /**
-   * @private
-   * @type {Array.<function(new: ol.format.Feature)>}
-   */
-  this.formatConstructors_ = options.formatConstructors ?
-      options.formatConstructors : [];
-
-  /**
-   * @private
-   * @type {ol.proj.Projection}
-   */
-  this.projection_ = options.projection ?
-      ol.proj.get(options.projection) : null;
-
-  /**
-   * @private
-   * @type {Array.<ol.EventsKey>}
-   */
-  this.dropListenKeys_ = null;
-
-  /**
-   * @private
-   * @type {Element}
-   */
-  this.target = options.target ? options.target : null;
-
-};
-ol.inherits(ol.interaction.DragAndDrop, ol.interaction.Interaction);
-
-
-/**
- * @param {Event} event Event.
- * @this {ol.interaction.DragAndDrop}
- * @private
- */
-ol.interaction.DragAndDrop.handleDrop_ = function(event) {
-  var files = event.dataTransfer.files;
-  var i, ii, file;
-  for (i = 0, ii = files.length; i < ii; ++i) {
-    file = files.item(i);
-    var reader = new FileReader();
-    reader.addEventListener(ol.events.EventType.LOAD,
-        this.handleResult_.bind(this, file));
-    reader.readAsText(file);
-  }
-};
-
-
-/**
- * @param {Event} event Event.
- * @private
- */
-ol.interaction.DragAndDrop.handleStop_ = function(event) {
-  event.stopPropagation();
-  event.preventDefault();
-  event.dataTransfer.dropEffect = 'copy';
-};
-
-
-/**
- * @param {File} file File.
- * @param {Event} event Load event.
- * @private
- */
-ol.interaction.DragAndDrop.prototype.handleResult_ = function(file, event) {
-  var result = event.target.result;
-  var map = this.getMap();
-  var projection = this.projection_;
-  if (!projection) {
-    var view = map.getView();
-    projection = view.getProjection();
-    ol.DEBUG && console.assert(projection !== undefined,
-        'projection should be defined');
-  }
-  var formatConstructors = this.formatConstructors_;
-  var features = [];
-  var i, ii;
-  for (i = 0, ii = formatConstructors.length; i < ii; ++i) {
-    var formatConstructor = formatConstructors[i];
-    var format = new formatConstructor();
-    features = this.tryReadFeatures_(format, result, {
-      featureProjection: projection
-    });
-    if (features && features.length > 0) {
-      break;
-    }
-  }
-  this.dispatchEvent(
-      new ol.interaction.DragAndDrop.Event(
-          ol.interaction.DragAndDrop.EventType.ADD_FEATURES, file,
-          features, projection));
-};
-
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} unconditionally and
- * neither prevents the browser default nor stops event propagation.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.DragAndDrop}
- * @api
- */
-ol.interaction.DragAndDrop.handleEvent = ol.functions.TRUE;
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.DragAndDrop.prototype.setMap = function(map) {
-  if (this.dropListenKeys_) {
-    this.dropListenKeys_.forEach(ol.events.unlistenByKey);
-    this.dropListenKeys_ = null;
-  }
-  ol.interaction.Interaction.prototype.setMap.call(this, map);
-  if (map) {
-    var dropArea = this.target ? this.target : map.getViewport();
-    this.dropListenKeys_ = [
-      ol.events.listen(dropArea, ol.events.EventType.DROP,
-          ol.interaction.DragAndDrop.handleDrop_, this),
-      ol.events.listen(dropArea, ol.events.EventType.DRAGENTER,
-          ol.interaction.DragAndDrop.handleStop_, this),
-      ol.events.listen(dropArea, ol.events.EventType.DRAGOVER,
-          ol.interaction.DragAndDrop.handleStop_, this),
-      ol.events.listen(dropArea, ol.events.EventType.DROP,
-          ol.interaction.DragAndDrop.handleStop_, this)
-    ];
-  }
-};
-
-
-/**
- * @param {ol.format.Feature} format Format.
- * @param {string} text Text.
- * @param {olx.format.ReadOptions} options Read options.
- * @private
- * @return {Array.<ol.Feature>} Features.
- */
-ol.interaction.DragAndDrop.prototype.tryReadFeatures_ = function(format, text, options) {
-  try {
-    return format.readFeatures(text, options);
-  } catch (e) {
-    return null;
-  }
-};
-
-
-/**
- * @enum {string}
- */
-ol.interaction.DragAndDrop.EventType = {
-  /**
-   * Triggered when features are added
-   * @event ol.interaction.DragAndDrop.Event#addfeatures
-   * @api stable
-   */
-  ADD_FEATURES: 'addfeatures'
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.interaction.DragAndDrop} instances are instances
- * of this type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.interaction.DragAndDropEvent}
- * @param {ol.interaction.DragAndDrop.EventType} type Type.
- * @param {File} file File.
- * @param {Array.<ol.Feature>=} opt_features Features.
- * @param {ol.proj.Projection=} opt_projection Projection.
- */
-ol.interaction.DragAndDrop.Event = function(type, file, opt_features, opt_projection) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The features parsed from dropped data.
-   * @type {Array.<ol.Feature>|undefined}
-   * @api stable
-   */
-  this.features = opt_features;
-
-  /**
-   * The dropped file.
-   * @type {File}
-   * @api stable
-   */
-  this.file = file;
-
-  /**
-   * The feature projection.
-   * @type {ol.proj.Projection|undefined}
-   * @api
-   */
-  this.projection = opt_projection;
-
-};
-ol.inherits(ol.interaction.DragAndDrop.Event, ol.events.Event);
-
-goog.provide('ol.interaction.DragRotateAndZoom');
-
-goog.require('ol');
-goog.require('ol.View');
-goog.require('ol.events.condition');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.interaction.Pointer');
-
-
-/**
- * @classdesc
- * Allows the user to zoom and rotate the map by clicking and dragging
- * on the map.  By default, this interaction is limited to when the shift
- * key is held down.
- *
- * This interaction is only supported for mouse devices.
- *
- * And this interaction is not included in the default interactions.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @param {olx.interaction.DragRotateAndZoomOptions=} opt_options Options.
- * @api stable
- */
-ol.interaction.DragRotateAndZoom = function(opt_options) {
-
-  var options = opt_options ? opt_options : {};
-
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.DragRotateAndZoom.handleDownEvent_,
-    handleDragEvent: ol.interaction.DragRotateAndZoom.handleDragEvent_,
-    handleUpEvent: ol.interaction.DragRotateAndZoom.handleUpEvent_
-  });
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition ?
-      options.condition : ol.events.condition.shiftKeyOnly;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.lastAngle_ = undefined;
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.lastMagnitude_ = undefined;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.lastScaleDelta_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.duration_ = options.duration !== undefined ? options.duration : 400;
-
-};
-ol.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Pointer);
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @this {ol.interaction.DragRotateAndZoom}
- * @private
- */
-ol.interaction.DragRotateAndZoom.handleDragEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return;
-  }
-
-  var map = mapBrowserEvent.map;
-  var size = map.getSize();
-  var offset = mapBrowserEvent.pixel;
-  var deltaX = offset[0] - size[0] / 2;
-  var deltaY = size[1] / 2 - offset[1];
-  var theta = Math.atan2(deltaY, deltaX);
-  var magnitude = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
-  var view = map.getView();
-  if (this.lastAngle_ !== undefined) {
-    var angleDelta = theta - this.lastAngle_;
-    ol.interaction.Interaction.rotateWithoutConstraints(
-        map, view, view.getRotation() - angleDelta);
-  }
-  this.lastAngle_ = theta;
-  if (this.lastMagnitude_ !== undefined) {
-    var resolution = this.lastMagnitude_ * (view.getResolution() / magnitude);
-    ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution);
-  }
-  if (this.lastMagnitude_ !== undefined) {
-    this.lastScaleDelta_ = this.lastMagnitude_ / magnitude;
-  }
-  this.lastMagnitude_ = magnitude;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.DragRotateAndZoom}
- * @private
- */
-ol.interaction.DragRotateAndZoom.handleUpEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return true;
-  }
-
-  var map = mapBrowserEvent.map;
-  var view = map.getView();
-  view.setHint(ol.View.Hint.INTERACTING, -1);
-  var direction = this.lastScaleDelta_ - 1;
-  ol.interaction.Interaction.rotate(map, view, view.getRotation());
-  ol.interaction.Interaction.zoom(map, view, view.getResolution(),
-      undefined, this.duration_, direction);
-  this.lastScaleDelta_ = 0;
-  return false;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.DragRotateAndZoom}
- * @private
- */
-ol.interaction.DragRotateAndZoom.handleDownEvent_ = function(mapBrowserEvent) {
-  if (!ol.events.condition.mouseOnly(mapBrowserEvent)) {
-    return false;
-  }
-
-  if (this.condition_(mapBrowserEvent)) {
-    mapBrowserEvent.map.getView().setHint(ol.View.Hint.INTERACTING, 1);
-    this.lastAngle_ = undefined;
-    this.lastMagnitude_ = undefined;
-    return true;
-  } else {
-    return false;
-  }
-};
-
-goog.provide('ol.loadingstrategy');
-
-
-/**
- * Strategy function for loading all features with a single request.
- * @param {ol.Extent} extent Extent.
- * @param {number} resolution Resolution.
- * @return {Array.<ol.Extent>} Extents.
- * @api
- */
-ol.loadingstrategy.all = function(extent, resolution) {
-  return [[-Infinity, -Infinity, Infinity, Infinity]];
-};
-
-
-/**
- * Strategy function for loading features based on the view's extent and
- * resolution.
- * @param {ol.Extent} extent Extent.
- * @param {number} resolution Resolution.
- * @return {Array.<ol.Extent>} Extents.
- * @api
- */
-ol.loadingstrategy.bbox = function(extent, resolution) {
-  return [extent];
-};
-
-
-/**
- * Creates a strategy function for loading features based on a tile grid.
- * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.
- * @return {function(ol.Extent, number): Array.<ol.Extent>} Loading strategy.
- * @api
- */
-ol.loadingstrategy.tile = function(tileGrid) {
-  return (
-      /**
-       * @param {ol.Extent} extent Extent.
-       * @param {number} resolution Resolution.
-       * @return {Array.<ol.Extent>} Extents.
-       */
-      function(extent, resolution) {
-        var z = tileGrid.getZForResolution(resolution);
-        var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
-        /** @type {Array.<ol.Extent>} */
-        var extents = [];
-        /** @type {ol.TileCoord} */
-        var tileCoord = [z, 0, 0];
-        for (tileCoord[1] = tileRange.minX; tileCoord[1] <= tileRange.maxX;
-             ++tileCoord[1]) {
-          for (tileCoord[2] = tileRange.minY; tileCoord[2] <= tileRange.maxY;
-               ++tileCoord[2]) {
-            extents.push(tileGrid.getTileCoordExtent(tileCoord));
-          }
-        }
-        return extents;
-      });
-};
-
-goog.provide('ol.ext.rbush');
-/** @typedef {function(*)} */
-ol.ext.rbush;
-(function() {
-var exports = {};
-var module = {exports: exports};
-var define;
-/**
- * @fileoverview
- * @suppress {accessControls, ambiguousFunctionDecl, checkDebuggerStatement, checkRegExp, checkTypes, checkVars, const, constantProperty, deprecated, duplicate, es5Strict, fileoverviewTags, missingProperties, nonStandardJsDocs, strictModuleDepCheck, suspiciousCode, undefinedNames, undefinedVars, unknownDefines, uselessCode, visibility}
- */
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.rbush = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports = partialSort;
-
-// Floyd-Rivest selection algorithm:
-// Rearrange items so that all items in the [left, k] range are smaller than all items in (k, right];
-// The k-th element will have the (k - left + 1)th smallest value in [left, right]
-
-function partialSort(arr, k, left, right, compare) {
-    left = left || 0;
-    right = right || (arr.length - 1);
-    compare = compare || defaultCompare;
-
-    while (right > left) {
-        if (right - left > 600) {
-            var n = right - left + 1;
-            var m = k - left + 1;
-            var z = Math.log(n);
-            var s = 0.5 * Math.exp(2 * z / 3);
-            var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);
-            var newLeft = Math.max(left, Math.floor(k - m * s / n + sd));
-            var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));
-            partialSort(arr, k, newLeft, newRight, compare);
-        }
-
-        var t = arr[k];
-        var i = left;
-        var j = right;
-
-        swap(arr, left, k);
-        if (compare(arr[right], t) > 0) swap(arr, left, right);
-
-        while (i < j) {
-            swap(arr, i, j);
-            i++;
-            j--;
-            while (compare(arr[i], t) < 0) i++;
-            while (compare(arr[j], t) > 0) j--;
-        }
-
-        if (compare(arr[left], t) === 0) swap(arr, left, j);
-        else {
-            j++;
-            swap(arr, j, right);
-        }
-
-        if (j <= k) left = j + 1;
-        if (k <= j) right = j - 1;
-    }
-}
-
-function swap(arr, i, j) {
-    var tmp = arr[i];
-    arr[i] = arr[j];
-    arr[j] = tmp;
-}
-
-function defaultCompare(a, b) {
-    return a < b ? -1 : a > b ? 1 : 0;
-}
-
-},{}],2:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports = rbush;
-
-var quickselect = _dereq_('quickselect');
-
-function rbush(maxEntries, format) {
-    if (!(this instanceof rbush)) return new rbush(maxEntries, format);
-
-    // max entries in a node is 9 by default; min node fill is 40% for best performance
-    this._maxEntries = Math.max(4, maxEntries || 9);
-    this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4));
-
-    if (format) {
-        this._initFormat(format);
-    }
-
-    this.clear();
-}
-
-rbush.prototype = {
-
-    all: function () {
-        return this._all(this.data, []);
-    },
-
-    search: function (bbox) {
-
-        var node = this.data,
-            result = [],
-            toBBox = this.toBBox;
-
-        if (!intersects(bbox, node)) return result;
-
-        var nodesToSearch = [],
-            i, len, child, childBBox;
-
-        while (node) {
-            for (i = 0, len = node.children.length; i < len; i++) {
-
-                child = node.children[i];
-                childBBox = node.leaf ? toBBox(child) : child;
-
-                if (intersects(bbox, childBBox)) {
-                    if (node.leaf) result.push(child);
-                    else if (contains(bbox, childBBox)) this._all(child, result);
-                    else nodesToSearch.push(child);
-                }
-            }
-            node = nodesToSearch.pop();
-        }
-
-        return result;
-    },
-
-    collides: function (bbox) {
-
-        var node = this.data,
-            toBBox = this.toBBox;
-
-        if (!intersects(bbox, node)) return false;
-
-        var nodesToSearch = [],
-            i, len, child, childBBox;
-
-        while (node) {
-            for (i = 0, len = node.children.length; i < len; i++) {
-
-                child = node.children[i];
-                childBBox = node.leaf ? toBBox(child) : child;
-
-                if (intersects(bbox, childBBox)) {
-                    if (node.leaf || contains(bbox, childBBox)) return true;
-                    nodesToSearch.push(child);
-                }
-            }
-            node = nodesToSearch.pop();
-        }
-
-        return false;
-    },
-
-    load: function (data) {
-        if (!(data && data.length)) return this;
-
-        if (data.length < this._minEntries) {
-            for (var i = 0, len = data.length; i < len; i++) {
-                this.insert(data[i]);
-            }
-            return this;
-        }
-
-        // recursively build the tree with the given data from stratch using OMT algorithm
-        var node = this._build(data.slice(), 0, data.length - 1, 0);
-
-        if (!this.data.children.length) {
-            // save as is if tree is empty
-            this.data = node;
-
-        } else if (this.data.height === node.height) {
-            // split root if trees have the same height
-            this._splitRoot(this.data, node);
-
-        } else {
-            if (this.data.height < node.height) {
-                // swap trees if inserted one is bigger
-                var tmpNode = this.data;
-                this.data = node;
-                node = tmpNode;
-            }
-
-            // insert the small tree into the large tree at appropriate level
-            this._insert(node, this.data.height - node.height - 1, true);
-        }
-
-        return this;
-    },
-
-    insert: function (item) {
-        if (item) this._insert(item, this.data.height - 1);
-        return this;
-    },
-
-    clear: function () {
-        this.data = createNode([]);
-        return this;
-    },
-
-    remove: function (item, equalsFn) {
-        if (!item) return this;
-
-        var node = this.data,
-            bbox = this.toBBox(item),
-            path = [],
-            indexes = [],
-            i, parent, index, goingUp;
-
-        // depth-first iterative tree traversal
-        while (node || path.length) {
-
-            if (!node) { // go up
-                node = path.pop();
-                parent = path[path.length - 1];
-                i = indexes.pop();
-                goingUp = true;
-            }
-
-            if (node.leaf) { // check current node
-                index = findItem(item, node.children, equalsFn);
-
-                if (index !== -1) {
-                    // item found, remove the item and condense tree upwards
-                    node.children.splice(index, 1);
-                    path.push(node);
-                    this._condense(path);
-                    return this;
-                }
-            }
-
-            if (!goingUp && !node.leaf && contains(node, bbox)) { // go down
-                path.push(node);
-                indexes.push(i);
-                i = 0;
-                parent = node;
-                node = node.children[0];
-
-            } else if (parent) { // go right
-                i++;
-                node = parent.children[i];
-                goingUp = false;
-
-            } else node = null; // nothing found
-        }
-
-        return this;
-    },
-
-    toBBox: function (item) { return item; },
-
-    compareMinX: compareNodeMinX,
-    compareMinY: compareNodeMinY,
-
-    toJSON: function () { return this.data; },
-
-    fromJSON: function (data) {
-        this.data = data;
-        return this;
-    },
-
-    _all: function (node, result) {
-        var nodesToSearch = [];
-        while (node) {
-            if (node.leaf) result.push.apply(result, node.children);
-            else nodesToSearch.push.apply(nodesToSearch, node.children);
-
-            node = nodesToSearch.pop();
-        }
-        return result;
-    },
-
-    _build: function (items, left, right, height) {
-
-        var N = right - left + 1,
-            M = this._maxEntries,
-            node;
-
-        if (N <= M) {
-            // reached leaf level; return leaf
-            node = createNode(items.slice(left, right + 1));
-            calcBBox(node, this.toBBox);
-            return node;
-        }
-
-        if (!height) {
-            // target height of the bulk-loaded tree
-            height = Math.ceil(Math.log(N) / Math.log(M));
-
-            // target number of root entries to maximize storage utilization
-            M = Math.ceil(N / Math.pow(M, height - 1));
-        }
-
-        node = createNode([]);
-        node.leaf = false;
-        node.height = height;
-
-        // split the items into M mostly square tiles
-
-        var N2 = Math.ceil(N / M),
-            N1 = N2 * Math.ceil(Math.sqrt(M)),
-            i, j, right2, right3;
-
-        multiSelect(items, left, right, N1, this.compareMinX);
-
-        for (i = left; i <= right; i += N1) {
-
-            right2 = Math.min(i + N1 - 1, right);
-
-            multiSelect(items, i, right2, N2, this.compareMinY);
-
-            for (j = i; j <= right2; j += N2) {
-
-                right3 = Math.min(j + N2 - 1, right2);
-
-                // pack each entry recursively
-                node.children.push(this._build(items, j, right3, height - 1));
-            }
-        }
-
-        calcBBox(node, this.toBBox);
-
-        return node;
-    },
-
-    _chooseSubtree: function (bbox, node, level, path) {
-
-        var i, len, child, targetNode, area, enlargement, minArea, minEnlargement;
-
-        while (true) {
-            path.push(node);
-
-            if (node.leaf || path.length - 1 === level) break;
-
-            minArea = minEnlargement = Infinity;
-
-            for (i = 0, len = node.children.length; i < len; i++) {
-                child = node.children[i];
-                area = bboxArea(child);
-                enlargement = enlargedArea(bbox, child) - area;
-
-                // choose entry with the least area enlargement
-                if (enlargement < minEnlargement) {
-                    minEnlargement = enlargement;
-                    minArea = area < minArea ? area : minArea;
-                    targetNode = child;
-
-                } else if (enlargement === minEnlargement) {
-                    // otherwise choose one with the smallest area
-                    if (area < minArea) {
-                        minArea = area;
-                        targetNode = child;
-                    }
-                }
-            }
-
-            node = targetNode || node.children[0];
-        }
-
-        return node;
-    },
-
-    _insert: function (item, level, isNode) {
-
-        var toBBox = this.toBBox,
-            bbox = isNode ? item : toBBox(item),
-            insertPath = [];
-
-        // find the best node for accommodating the item, saving all nodes along the path too
-        var node = this._chooseSubtree(bbox, this.data, level, insertPath);
-
-        // put the item into the node
-        node.children.push(item);
-        extend(node, bbox);
-
-        // split on node overflow; propagate upwards if necessary
-        while (level >= 0) {
-            if (insertPath[level].children.length > this._maxEntries) {
-                this._split(insertPath, level);
-                level--;
-            } else break;
-        }
-
-        // adjust bboxes along the insertion path
-        this._adjustParentBBoxes(bbox, insertPath, level);
-    },
-
-    // split overflowed node into two
-    _split: function (insertPath, level) {
-
-        var node = insertPath[level],
-            M = node.children.length,
-            m = this._minEntries;
-
-        this._chooseSplitAxis(node, m, M);
-
-        var splitIndex = this._chooseSplitIndex(node, m, M);
-
-        var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex));
-        newNode.height = node.height;
-        newNode.leaf = node.leaf;
-
-        calcBBox(node, this.toBBox);
-        calcBBox(newNode, this.toBBox);
-
-        if (level) insertPath[level - 1].children.push(newNode);
-        else this._splitRoot(node, newNode);
-    },
-
-    _splitRoot: function (node, newNode) {
-        // split root node
-        this.data = createNode([node, newNode]);
-        this.data.height = node.height + 1;
-        this.data.leaf = false;
-        calcBBox(this.data, this.toBBox);
-    },
-
-    _chooseSplitIndex: function (node, m, M) {
-
-        var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index;
-
-        minOverlap = minArea = Infinity;
-
-        for (i = m; i <= M - m; i++) {
-            bbox1 = distBBox(node, 0, i, this.toBBox);
-            bbox2 = distBBox(node, i, M, this.toBBox);
-
-            overlap = intersectionArea(bbox1, bbox2);
-            area = bboxArea(bbox1) + bboxArea(bbox2);
-
-            // choose distribution with minimum overlap
-            if (overlap < minOverlap) {
-                minOverlap = overlap;
-                index = i;
-
-                minArea = area < minArea ? area : minArea;
-
-            } else if (overlap === minOverlap) {
-                // otherwise choose distribution with minimum area
-                if (area < minArea) {
-                    minArea = area;
-                    index = i;
-                }
-            }
-        }
-
-        return index;
-    },
-
-    // sorts node children by the best axis for split
-    _chooseSplitAxis: function (node, m, M) {
-
-        var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX,
-            compareMinY = node.leaf ? this.compareMinY : compareNodeMinY,
-            xMargin = this._allDistMargin(node, m, M, compareMinX),
-            yMargin = this._allDistMargin(node, m, M, compareMinY);
-
-        // if total distributions margin value is minimal for x, sort by minX,
-        // otherwise it's already sorted by minY
-        if (xMargin < yMargin) node.children.sort(compareMinX);
-    },
-
-    // total margin of all possible split distributions where each node is at least m full
-    _allDistMargin: function (node, m, M, compare) {
-
-        node.children.sort(compare);
-
-        var toBBox = this.toBBox,
-            leftBBox = distBBox(node, 0, m, toBBox),
-            rightBBox = distBBox(node, M - m, M, toBBox),
-            margin = bboxMargin(leftBBox) + bboxMargin(rightBBox),
-            i, child;
-
-        for (i = m; i < M - m; i++) {
-            child = node.children[i];
-            extend(leftBBox, node.leaf ? toBBox(child) : child);
-            margin += bboxMargin(leftBBox);
-        }
-
-        for (i = M - m - 1; i >= m; i--) {
-            child = node.children[i];
-            extend(rightBBox, node.leaf ? toBBox(child) : child);
-            margin += bboxMargin(rightBBox);
-        }
-
-        return margin;
-    },
-
-    _adjustParentBBoxes: function (bbox, path, level) {
-        // adjust bboxes along the given tree path
-        for (var i = level; i >= 0; i--) {
-            extend(path[i], bbox);
-        }
-    },
-
-    _condense: function (path) {
-        // go through the path, removing empty nodes and updating bboxes
-        for (var i = path.length - 1, siblings; i >= 0; i--) {
-            if (path[i].children.length === 0) {
-                if (i > 0) {
-                    siblings = path[i - 1].children;
-                    siblings.splice(siblings.indexOf(path[i]), 1);
-
-                } else this.clear();
-
-            } else calcBBox(path[i], this.toBBox);
-        }
-    },
-
-    _initFormat: function (format) {
-        // data format (minX, minY, maxX, maxY accessors)
-
-        // uses eval-type function compilation instead of just accepting a toBBox function
-        // because the algorithms are very sensitive to sorting functions performance,
-        // so they should be dead simple and without inner calls
-
-        var compareArr = ['return a', ' - b', ';'];
-
-        this.compareMinX = new Function('a', 'b', compareArr.join(format[0]));
-        this.compareMinY = new Function('a', 'b', compareArr.join(format[1]));
-
-        this.toBBox = new Function('a',
-            'return {minX: a' + format[0] +
-            ', minY: a' + format[1] +
-            ', maxX: a' + format[2] +
-            ', maxY: a' + format[3] + '};');
-    }
-};
-
-function findItem(item, items, equalsFn) {
-    if (!equalsFn) return items.indexOf(item);
-
-    for (var i = 0; i < items.length; i++) {
-        if (equalsFn(item, items[i])) return i;
-    }
-    return -1;
-}
-
-// calculate node's bbox from bboxes of its children
-function calcBBox(node, toBBox) {
-    distBBox(node, 0, node.children.length, toBBox, node);
-}
-
-// min bounding rectangle of node children from k to p-1
-function distBBox(node, k, p, toBBox, destNode) {
-    if (!destNode) destNode = createNode(null);
-    destNode.minX = Infinity;
-    destNode.minY = Infinity;
-    destNode.maxX = -Infinity;
-    destNode.maxY = -Infinity;
-
-    for (var i = k, child; i < p; i++) {
-        child = node.children[i];
-        extend(destNode, node.leaf ? toBBox(child) : child);
-    }
-
-    return destNode;
-}
-
-function extend(a, b) {
-    a.minX = Math.min(a.minX, b.minX);
-    a.minY = Math.min(a.minY, b.minY);
-    a.maxX = Math.max(a.maxX, b.maxX);
-    a.maxY = Math.max(a.maxY, b.maxY);
-    return a;
-}
-
-function compareNodeMinX(a, b) { return a.minX - b.minX; }
-function compareNodeMinY(a, b) { return a.minY - b.minY; }
-
-function bboxArea(a)   { return (a.maxX - a.minX) * (a.maxY - a.minY); }
-function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); }
-
-function enlargedArea(a, b) {
-    return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) *
-           (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY));
-}
-
-function intersectionArea(a, b) {
-    var minX = Math.max(a.minX, b.minX),
-        minY = Math.max(a.minY, b.minY),
-        maxX = Math.min(a.maxX, b.maxX),
-        maxY = Math.min(a.maxY, b.maxY);
-
-    return Math.max(0, maxX - minX) *
-           Math.max(0, maxY - minY);
-}
-
-function contains(a, b) {
-    return a.minX <= b.minX &&
-           a.minY <= b.minY &&
-           b.maxX <= a.maxX &&
-           b.maxY <= a.maxY;
-}
-
-function intersects(a, b) {
-    return b.minX <= a.maxX &&
-           b.minY <= a.maxY &&
-           b.maxX >= a.minX &&
-           b.maxY >= a.minY;
-}
-
-function createNode(children) {
-    return {
-        children: children,
-        height: 1,
-        leaf: true,
-        minX: Infinity,
-        minY: Infinity,
-        maxX: -Infinity,
-        maxY: -Infinity
-    };
-}
-
-// sort an array so that items come in groups of n unsorted items, with groups sorted between each other;
-// combines selection algorithm with binary divide & conquer approach
-
-function multiSelect(arr, left, right, n, compare) {
-    var stack = [left, right],
-        mid;
-
-    while (stack.length) {
-        right = stack.pop();
-        left = stack.pop();
-
-        if (right - left <= n) continue;
-
-        mid = left + Math.ceil((right - left) / n / 2) * n;
-        quickselect(arr, mid, left, right, compare);
-
-        stack.push(left, mid, mid, right);
-    }
-}
-
-},{"quickselect":1}]},{},[2])(2)
-});
-ol.ext.rbush = module.exports;
-})();
-
-goog.provide('ol.structs.RBush');
-
-goog.require('ol');
-goog.require('ol.ext.rbush');
-goog.require('ol.extent');
-goog.require('ol.obj');
-
-
-/**
- * Wrapper around the RBush by Vladimir Agafonkin.
- *
- * @constructor
- * @param {number=} opt_maxEntries Max entries.
- * @see https://github.com/mourner/rbush
- * @struct
- * @template T
- */
-ol.structs.RBush = function(opt_maxEntries) {
-
-  /**
-   * @private
-   */
-  this.rbush_ = ol.ext.rbush(opt_maxEntries);
-
-  /**
-   * A mapping between the objects added to this rbush wrapper
-   * and the objects that are actually added to the internal rbush.
-   * @private
-   * @type {Object.<number, ol.RBushEntry>}
-   */
-  this.items_ = {};
-
-  if (ol.DEBUG) {
-    /**
-     * @private
-     * @type {number}
-     */
-    this.readers_ = 0;
-  }
-};
-
-
-/**
- * Insert a value into the RBush.
- * @param {ol.Extent} extent Extent.
- * @param {T} value Value.
- */
-ol.structs.RBush.prototype.insert = function(extent, value) {
-  if (ol.DEBUG && this.readers_) {
-    throw new Error('Can not insert value while reading');
-  }
-  /** @type {ol.RBushEntry} */
-  var item = {
-    minX: extent[0],
-    minY: extent[1],
-    maxX: extent[2],
-    maxY: extent[3],
-    value: value
-  };
-
-  this.rbush_.insert(item);
-  // remember the object that was added to the internal rbush
-  ol.DEBUG && console.assert(!(ol.getUid(value) in this.items_),
-      'uid (%s) of value (%s) already exists', ol.getUid(value), value);
-  this.items_[ol.getUid(value)] = item;
-};
-
-
-/**
- * Bulk-insert values into the RBush.
- * @param {Array.<ol.Extent>} extents Extents.
- * @param {Array.<T>} values Values.
- */
-ol.structs.RBush.prototype.load = function(extents, values) {
-  if (ol.DEBUG && this.readers_) {
-    throw new Error('Can not insert values while reading');
-  }
-  ol.DEBUG && console.assert(extents.length === values.length,
-      'extens and values must have same length (%s === %s)',
-      extents.length, values.length);
-
-  var items = new Array(values.length);
-  for (var i = 0, l = values.length; i < l; i++) {
-    var extent = extents[i];
-    var value = values[i];
-
-    /** @type {ol.RBushEntry} */
-    var item = {
-      minX: extent[0],
-      minY: extent[1],
-      maxX: extent[2],
-      maxY: extent[3],
-      value: value
-    };
-    items[i] = item;
-    ol.DEBUG && console.assert(!(ol.getUid(value) in this.items_),
-        'uid (%s) of value (%s) already exists', ol.getUid(value), value);
-    this.items_[ol.getUid(value)] = item;
-  }
-  this.rbush_.load(items);
-};
-
-
-/**
- * Remove a value from the RBush.
- * @param {T} value Value.
- * @return {boolean} Removed.
- */
-ol.structs.RBush.prototype.remove = function(value) {
-  if (ol.DEBUG && this.readers_) {
-    throw new Error('Can not remove value while reading');
-  }
-  var uid = ol.getUid(value);
-  ol.DEBUG && console.assert(uid in this.items_,
-      'uid (%s) of value (%s) does not exist', uid, value);
-
-  // get the object in which the value was wrapped when adding to the
-  // internal rbush. then use that object to do the removal.
-  var item = this.items_[uid];
-  delete this.items_[uid];
-  return this.rbush_.remove(item) !== null;
-};
-
-
-/**
- * Update the extent of a value in the RBush.
- * @param {ol.Extent} extent Extent.
- * @param {T} value Value.
- */
-ol.structs.RBush.prototype.update = function(extent, value) {
-  ol.DEBUG && console.assert(ol.getUid(value) in this.items_,
-      'uid (%s) of value (%s) does not exist', ol.getUid(value), value);
-
-  var item = this.items_[ol.getUid(value)];
-  var bbox = [item.minX, item.minY, item.maxX, item.maxY];
-  if (!ol.extent.equals(bbox, extent)) {
-    if (ol.DEBUG && this.readers_) {
-      throw new Error('Can not update extent while reading');
-    }
-    this.remove(value);
-    this.insert(extent, value);
-  }
-};
-
-
-/**
- * Return all values in the RBush.
- * @return {Array.<T>} All.
- */
-ol.structs.RBush.prototype.getAll = function() {
-  var items = this.rbush_.all();
-  return items.map(function(item) {
-    return item.value;
-  });
-};
-
-
-/**
- * Return all values in the given extent.
- * @param {ol.Extent} extent Extent.
- * @return {Array.<T>} All in extent.
- */
-ol.structs.RBush.prototype.getInExtent = function(extent) {
-  /** @type {ol.RBushEntry} */
-  var bbox = {
-    minX: extent[0],
-    minY: extent[1],
-    maxX: extent[2],
-    maxY: extent[3]
-  };
-  var items = this.rbush_.search(bbox);
-  return items.map(function(item) {
-    return item.value;
-  });
-};
-
-
-/**
- * Calls a callback function with each value in the tree.
- * If the callback returns a truthy value, this value is returned without
- * checking the rest of the tree.
- * @param {function(this: S, T): *} callback Callback.
- * @param {S=} opt_this The object to use as `this` in `callback`.
- * @return {*} Callback return value.
- * @template S
- */
-ol.structs.RBush.prototype.forEach = function(callback, opt_this) {
-  if (ol.DEBUG) {
-    ++this.readers_;
-    try {
-      return this.forEach_(this.getAll(), callback, opt_this);
-    } finally {
-      --this.readers_;
-    }
-  } else {
-    return this.forEach_(this.getAll(), callback, opt_this);
-  }
-};
-
-
-/**
- * Calls a callback function with each value in the provided extent.
- * @param {ol.Extent} extent Extent.
- * @param {function(this: S, T): *} callback Callback.
- * @param {S=} opt_this The object to use as `this` in `callback`.
- * @return {*} Callback return value.
- * @template S
- */
-ol.structs.RBush.prototype.forEachInExtent = function(extent, callback, opt_this) {
-  if (ol.DEBUG) {
-    ++this.readers_;
-    try {
-      return this.forEach_(this.getInExtent(extent), callback, opt_this);
-    } finally {
-      --this.readers_;
-    }
-  } else {
-    return this.forEach_(this.getInExtent(extent), callback, opt_this);
-  }
-};
-
-
-/**
- * @param {Array.<T>} values Values.
- * @param {function(this: S, T): *} callback Callback.
- * @param {S=} opt_this The object to use as `this` in `callback`.
- * @private
- * @return {*} Callback return value.
- * @template S
- */
-ol.structs.RBush.prototype.forEach_ = function(values, callback, opt_this) {
-  var result;
-  for (var i = 0, l = values.length; i < l; i++) {
-    result = callback.call(opt_this, values[i]);
-    if (result) {
-      return result;
-    }
-  }
-  return result;
-};
-
-
-/**
- * @return {boolean} Is empty.
- */
-ol.structs.RBush.prototype.isEmpty = function() {
-  return ol.obj.isEmpty(this.items_);
-};
-
-
-/**
- * Remove all values from the RBush.
- */
-ol.structs.RBush.prototype.clear = function() {
-  this.rbush_.clear();
-  this.items_ = {};
-};
-
-
-/**
- * @param {ol.Extent=} opt_extent Extent.
- * @return {!ol.Extent} Extent.
- */
-ol.structs.RBush.prototype.getExtent = function(opt_extent) {
-  // FIXME add getExtent() to rbush
-  var data = this.rbush_.data;
-  return [data.minX, data.minY, data.maxX, data.maxY];
-};
-
-// FIXME bulk feature upload - suppress events
-// FIXME make change-detection more refined (notably, geometry hint)
-
-goog.provide('ol.source.Vector');
-
-goog.require('ol');
-goog.require('ol.Collection');
-goog.require('ol.ObjectEventType');
-goog.require('ol.array');
-goog.require('ol.asserts');
-goog.require('ol.events');
-goog.require('ol.events.Event');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.featureloader');
-goog.require('ol.functions');
-goog.require('ol.loadingstrategy');
-goog.require('ol.obj');
-goog.require('ol.source.Source');
-goog.require('ol.source.State');
-goog.require('ol.structs.RBush');
-
-
-/**
- * @classdesc
- * Provides a source of features for vector layers. Vector features provided
- * by this source are suitable for editing. See {@link ol.source.VectorTile} for
- * vector data that is optimized for rendering.
- *
- * @constructor
- * @extends {ol.source.Source}
- * @fires ol.source.Vector.Event
- * @param {olx.source.VectorOptions=} opt_options Vector source options.
- * @api stable
- */
-ol.source.Vector = function(opt_options) {
-
-  var options = opt_options || {};
-
-  ol.source.Source.call(this, {
-    attributions: options.attributions,
-    logo: options.logo,
-    projection: undefined,
-    state: ol.source.State.READY,
-    wrapX: options.wrapX !== undefined ? options.wrapX : true
-  });
-
-  /**
-   * @private
-   * @type {ol.FeatureLoader}
-   */
-  this.loader_ = ol.nullFunction;
-
-  /**
-   * @private
-   * @type {ol.format.Feature|undefined}
-   */
-  this.format_ = options.format;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.overlaps_ = options.overlaps == undefined ? true : options.overlaps;
-
-  /**
-   * @private
-   * @type {string|ol.FeatureUrlFunction|undefined}
-   */
-  this.url_ = options.url;
-
-  if (options.loader !== undefined) {
-    this.loader_ = options.loader;
-  } else if (this.url_ !== undefined) {
-    ol.asserts.assert(this.format_, 7); // `format` must be set when `url` is set
-    // create a XHR feature loader for "url" and "format"
-    this.loader_ = ol.featureloader.xhr(this.url_, /** @type {ol.format.Feature} */ (this.format_));
-  }
-
-  /**
-   * @private
-   * @type {ol.LoadingStrategy}
-   */
-  this.strategy_ = options.strategy !== undefined ? options.strategy :
-      ol.loadingstrategy.all;
-
-  var useSpatialIndex =
-      options.useSpatialIndex !== undefined ? options.useSpatialIndex : true;
-
-  /**
-   * @private
-   * @type {ol.structs.RBush.<ol.Feature>}
-   */
-  this.featuresRtree_ = useSpatialIndex ? new ol.structs.RBush() : null;
-
-  /**
-   * @private
-   * @type {ol.structs.RBush.<{extent: ol.Extent}>}
-   */
-  this.loadedExtentsRtree_ = new ol.structs.RBush();
-
-  /**
-   * @private
-   * @type {Object.<string, ol.Feature>}
-   */
-  this.nullGeometryFeatures_ = {};
-
-  /**
-   * A lookup of features by id (the return from feature.getId()).
-   * @private
-   * @type {Object.<string, ol.Feature>}
-   */
-  this.idIndex_ = {};
-
-  /**
-   * A lookup of features without id (keyed by ol.getUid(feature)).
-   * @private
-   * @type {Object.<string, ol.Feature>}
-   */
-  this.undefIdIndex_ = {};
-
-  /**
-   * @private
-   * @type {Object.<string, Array.<ol.EventsKey>>}
-   */
-  this.featureChangeKeys_ = {};
-
-  /**
-   * @private
-   * @type {ol.Collection.<ol.Feature>}
-   */
-  this.featuresCollection_ = null;
-
-  var collection, features;
-  if (options.features instanceof ol.Collection) {
-    collection = options.features;
-    features = collection.getArray();
-  } else if (Array.isArray(options.features)) {
-    features = options.features;
-  }
-  if (!useSpatialIndex && collection === undefined) {
-    collection = new ol.Collection(features);
-  }
-  if (features !== undefined) {
-    this.addFeaturesInternal(features);
-  }
-  if (collection !== undefined) {
-    this.bindFeaturesCollection_(collection);
-  }
-
-};
-ol.inherits(ol.source.Vector, ol.source.Source);
-
-
-/**
- * Add a single feature to the source.  If you want to add a batch of features
- * at once, call {@link ol.source.Vector#addFeatures source.addFeatures()}
- * instead.
- * @param {ol.Feature} feature Feature to add.
- * @api stable
- */
-ol.source.Vector.prototype.addFeature = function(feature) {
-  this.addFeatureInternal(feature);
-  this.changed();
-};
-
-
-/**
- * Add a feature without firing a `change` event.
- * @param {ol.Feature} feature Feature.
- * @protected
- */
-ol.source.Vector.prototype.addFeatureInternal = function(feature) {
-  var featureKey = ol.getUid(feature).toString();
-
-  if (!this.addToIndex_(featureKey, feature)) {
-    return;
-  }
-
-  this.setupChangeEvents_(featureKey, feature);
-
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    var extent = geometry.getExtent();
-    if (this.featuresRtree_) {
-      this.featuresRtree_.insert(extent, feature);
-    }
-  } else {
-    this.nullGeometryFeatures_[featureKey] = feature;
-  }
-
-  this.dispatchEvent(
-      new ol.source.Vector.Event(ol.source.Vector.EventType.ADDFEATURE, feature));
-};
-
-
-/**
- * @param {string} featureKey Unique identifier for the feature.
- * @param {ol.Feature} feature The feature.
- * @private
- */
-ol.source.Vector.prototype.setupChangeEvents_ = function(featureKey, feature) {
-  ol.DEBUG && console.assert(!(featureKey in this.featureChangeKeys_),
-      'key (%s) not yet registered in featureChangeKey', featureKey);
-  this.featureChangeKeys_[featureKey] = [
-    ol.events.listen(feature, ol.events.EventType.CHANGE,
-        this.handleFeatureChange_, this),
-    ol.events.listen(feature, ol.ObjectEventType.PROPERTYCHANGE,
-        this.handleFeatureChange_, this)
-  ];
-};
-
-
-/**
- * @param {string} featureKey Unique identifier for the feature.
- * @param {ol.Feature} feature The feature.
- * @return {boolean} The feature is "valid", in the sense that it is also a
- *     candidate for insertion into the Rtree.
- * @private
- */
-ol.source.Vector.prototype.addToIndex_ = function(featureKey, feature) {
-  var valid = true;
-  var id = feature.getId();
-  if (id !== undefined) {
-    if (!(id.toString() in this.idIndex_)) {
-      this.idIndex_[id.toString()] = feature;
-    } else {
-      valid = false;
-    }
-  } else {
-    ol.asserts.assert(!(featureKey in this.undefIdIndex_),
-        30); // The passed `feature` was already added to the source
-    this.undefIdIndex_[featureKey] = feature;
-  }
-  return valid;
-};
-
-
-/**
- * Add a batch of features to the source.
- * @param {Array.<ol.Feature>} features Features to add.
- * @api stable
- */
-ol.source.Vector.prototype.addFeatures = function(features) {
-  this.addFeaturesInternal(features);
-  this.changed();
-};
-
-
-/**
- * Add features without firing a `change` event.
- * @param {Array.<ol.Feature>} features Features.
- * @protected
- */
-ol.source.Vector.prototype.addFeaturesInternal = function(features) {
-  var featureKey, i, length, feature;
-
-  var extents = [];
-  var newFeatures = [];
-  var geometryFeatures = [];
-
-  for (i = 0, length = features.length; i < length; i++) {
-    feature = features[i];
-    featureKey = ol.getUid(feature).toString();
-    if (this.addToIndex_(featureKey, feature)) {
-      newFeatures.push(feature);
-    }
-  }
-
-  for (i = 0, length = newFeatures.length; i < length; i++) {
-    feature = newFeatures[i];
-    featureKey = ol.getUid(feature).toString();
-    this.setupChangeEvents_(featureKey, feature);
-
-    var geometry = feature.getGeometry();
-    if (geometry) {
-      var extent = geometry.getExtent();
-      extents.push(extent);
-      geometryFeatures.push(feature);
-    } else {
-      this.nullGeometryFeatures_[featureKey] = feature;
-    }
-  }
-  if (this.featuresRtree_) {
-    this.featuresRtree_.load(extents, geometryFeatures);
-  }
-
-  for (i = 0, length = newFeatures.length; i < length; i++) {
-    this.dispatchEvent(new ol.source.Vector.Event(
-        ol.source.Vector.EventType.ADDFEATURE, newFeatures[i]));
-  }
-};
-
-
-/**
- * @param {!ol.Collection.<ol.Feature>} collection Collection.
- * @private
- */
-ol.source.Vector.prototype.bindFeaturesCollection_ = function(collection) {
-  ol.DEBUG && console.assert(!this.featuresCollection_,
-      'bindFeaturesCollection can only be called once');
-  var modifyingCollection = false;
-  ol.events.listen(this, ol.source.Vector.EventType.ADDFEATURE,
-      function(evt) {
-        if (!modifyingCollection) {
-          modifyingCollection = true;
-          collection.push(evt.feature);
-          modifyingCollection = false;
-        }
-      });
-  ol.events.listen(this, ol.source.Vector.EventType.REMOVEFEATURE,
-      function(evt) {
-        if (!modifyingCollection) {
-          modifyingCollection = true;
-          collection.remove(evt.feature);
-          modifyingCollection = false;
-        }
-      });
-  ol.events.listen(collection, ol.Collection.EventType.ADD,
-      function(evt) {
-        if (!modifyingCollection) {
-          modifyingCollection = true;
-          this.addFeature(/** @type {ol.Feature} */ (evt.element));
-          modifyingCollection = false;
-        }
-      }, this);
-  ol.events.listen(collection, ol.Collection.EventType.REMOVE,
-      function(evt) {
-        if (!modifyingCollection) {
-          modifyingCollection = true;
-          this.removeFeature(/** @type {ol.Feature} */ (evt.element));
-          modifyingCollection = false;
-        }
-      }, this);
-  this.featuresCollection_ = collection;
-};
-
-
-/**
- * Remove all features from the source.
- * @param {boolean=} opt_fast Skip dispatching of {@link removefeature} events.
- * @api stable
- */
-ol.source.Vector.prototype.clear = function(opt_fast) {
-  if (opt_fast) {
-    for (var featureId in this.featureChangeKeys_) {
-      var keys = this.featureChangeKeys_[featureId];
-      keys.forEach(ol.events.unlistenByKey);
-    }
-    if (!this.featuresCollection_) {
-      this.featureChangeKeys_ = {};
-      this.idIndex_ = {};
-      this.undefIdIndex_ = {};
-    }
-  } else {
-    if (this.featuresRtree_) {
-      this.featuresRtree_.forEach(this.removeFeatureInternal, this);
-      for (var id in this.nullGeometryFeatures_) {
-        this.removeFeatureInternal(this.nullGeometryFeatures_[id]);
-      }
-    }
-  }
-  if (this.featuresCollection_) {
-    this.featuresCollection_.clear();
-  }
-  ol.DEBUG && console.assert(ol.obj.isEmpty(this.featureChangeKeys_),
-      'featureChangeKeys is an empty object now');
-  ol.DEBUG && console.assert(ol.obj.isEmpty(this.idIndex_),
-      'idIndex is an empty object now');
-  ol.DEBUG && console.assert(ol.obj.isEmpty(this.undefIdIndex_),
-      'undefIdIndex is an empty object now');
-
-  if (this.featuresRtree_) {
-    this.featuresRtree_.clear();
-  }
-  this.loadedExtentsRtree_.clear();
-  this.nullGeometryFeatures_ = {};
-
-  var clearEvent = new ol.source.Vector.Event(ol.source.Vector.EventType.CLEAR);
-  this.dispatchEvent(clearEvent);
-  this.changed();
-};
-
-
-/**
- * Iterate through all features on the source, calling the provided callback
- * with each one.  If the callback returns any "truthy" value, iteration will
- * stop and the function will return the same value.
- *
- * @param {function(this: T, ol.Feature): S} callback Called with each feature
- *     on the source.  Return a truthy value to stop iteration.
- * @param {T=} opt_this The object to use as `this` in the callback.
- * @return {S|undefined} The return value from the last call to the callback.
- * @template T,S
- * @api stable
- */
-ol.source.Vector.prototype.forEachFeature = function(callback, opt_this) {
-  if (this.featuresRtree_) {
-    return this.featuresRtree_.forEach(callback, opt_this);
-  } else if (this.featuresCollection_) {
-    return this.featuresCollection_.forEach(callback, opt_this);
-  }
-};
-
-
-/**
- * Iterate through all features whose geometries contain the provided
- * coordinate, calling the callback with each feature.  If the callback returns
- * a "truthy" value, iteration will stop and the function will return the same
- * value.
- *
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {function(this: T, ol.Feature): S} callback Called with each feature
- *     whose goemetry contains the provided coordinate.
- * @param {T=} opt_this The object to use as `this` in the callback.
- * @return {S|undefined} The return value from the last call to the callback.
- * @template T,S
- */
-ol.source.Vector.prototype.forEachFeatureAtCoordinateDirect = function(coordinate, callback, opt_this) {
-  var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];
-  return this.forEachFeatureInExtent(extent, function(feature) {
-    var geometry = feature.getGeometry();
-    ol.DEBUG && console.assert(geometry, 'feature geometry is defined and not null');
-    if (geometry.intersectsCoordinate(coordinate)) {
-      return callback.call(opt_this, feature);
-    } else {
-      return undefined;
-    }
-  });
-};
-
-
-/**
- * Iterate through all features whose bounding box intersects the provided
- * extent (note that the feature's geometry may not intersect the extent),
- * calling the callback with each feature.  If the callback returns a "truthy"
- * value, iteration will stop and the function will return the same value.
- *
- * If you are interested in features whose geometry intersects an extent, call
- * the {@link ol.source.Vector#forEachFeatureIntersectingExtent
- * source.forEachFeatureIntersectingExtent()} method instead.
- *
- * When `useSpatialIndex` is set to false, this method will loop through all
- * features, equivalent to {@link ol.source.Vector#forEachFeature}.
- *
- * @param {ol.Extent} extent Extent.
- * @param {function(this: T, ol.Feature): S} callback Called with each feature
- *     whose bounding box intersects the provided extent.
- * @param {T=} opt_this The object to use as `this` in the callback.
- * @return {S|undefined} The return value from the last call to the callback.
- * @template T,S
- * @api
- */
-ol.source.Vector.prototype.forEachFeatureInExtent = function(extent, callback, opt_this) {
-  if (this.featuresRtree_) {
-    return this.featuresRtree_.forEachInExtent(extent, callback, opt_this);
-  } else if (this.featuresCollection_) {
-    return this.featuresCollection_.forEach(callback, opt_this);
-  }
-};
-
-
-/**
- * Iterate through all features whose geometry intersects the provided extent,
- * calling the callback with each feature.  If the callback returns a "truthy"
- * value, iteration will stop and the function will return the same value.
- *
- * If you only want to test for bounding box intersection, call the
- * {@link ol.source.Vector#forEachFeatureInExtent
- * source.forEachFeatureInExtent()} method instead.
- *
- * @param {ol.Extent} extent Extent.
- * @param {function(this: T, ol.Feature): S} callback Called with each feature
- *     whose geometry intersects the provided extent.
- * @param {T=} opt_this The object to use as `this` in the callback.
- * @return {S|undefined} The return value from the last call to the callback.
- * @template T,S
- * @api
- */
-ol.source.Vector.prototype.forEachFeatureIntersectingExtent = function(extent, callback, opt_this) {
-  return this.forEachFeatureInExtent(extent,
-      /**
-       * @param {ol.Feature} feature Feature.
-       * @return {S|undefined} The return value from the last call to the callback.
-       * @template S
-       */
-      function(feature) {
-        var geometry = feature.getGeometry();
-        ol.DEBUG && console.assert(geometry,
-            'feature geometry is defined and not null');
-        if (geometry.intersectsExtent(extent)) {
-          var result = callback.call(opt_this, feature);
-          if (result) {
-            return result;
-          }
-        }
-      });
-};
-
-
-/**
- * Get the features collection associated with this source. Will be `null`
- * unless the source was configured with `useSpatialIndex` set to `false`, or
- * with an {@link ol.Collection} as `features`.
- * @return {ol.Collection.<ol.Feature>} The collection of features.
- * @api
- */
-ol.source.Vector.prototype.getFeaturesCollection = function() {
-  return this.featuresCollection_;
-};
-
-
-/**
- * Get all features on the source in random order.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.source.Vector.prototype.getFeatures = function() {
-  var features;
-  if (this.featuresCollection_) {
-    features = this.featuresCollection_.getArray();
-  } else if (this.featuresRtree_) {
-    features = this.featuresRtree_.getAll();
-    if (!ol.obj.isEmpty(this.nullGeometryFeatures_)) {
-      ol.array.extend(
-          features, ol.obj.getValues(this.nullGeometryFeatures_));
-    }
-  }
-  return /** @type {Array.<ol.Feature>} */ (features);
-};
-
-
-/**
- * Get all features whose geometry intersects the provided coordinate.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @return {Array.<ol.Feature>} Features.
- * @api stable
- */
-ol.source.Vector.prototype.getFeaturesAtCoordinate = function(coordinate) {
-  var features = [];
-  this.forEachFeatureAtCoordinateDirect(coordinate, function(feature) {
-    features.push(feature);
-  });
-  return features;
-};
-
-
-/**
- * Get all features in the provided extent.  Note that this returns an array of
- * all features intersecting the given extent in random order (so it may include
- * features whose geometries do not intersect the extent).
- *
- * This method is not available when the source is configured with
- * `useSpatialIndex` set to `false`.
- * @param {ol.Extent} extent Extent.
- * @return {Array.<ol.Feature>} Features.
- * @api
- */
-ol.source.Vector.prototype.getFeaturesInExtent = function(extent) {
-  ol.DEBUG && console.assert(this.featuresRtree_,
-      'getFeaturesInExtent does not work when useSpatialIndex is set to false');
-  return this.featuresRtree_.getInExtent(extent);
-};
-
-
-/**
- * Get the closest feature to the provided coordinate.
- *
- * This method is not available when the source is configured with
- * `useSpatialIndex` set to `false`.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {function(ol.Feature):boolean=} opt_filter Feature filter function.
- *     The filter function will receive one argument, the {@link ol.Feature feature}
- *     and it should return a boolean value. By default, no filtering is made.
- * @return {ol.Feature} Closest feature.
- * @api stable
- */
-ol.source.Vector.prototype.getClosestFeatureToCoordinate = function(coordinate, opt_filter) {
-  // Find the closest feature using branch and bound.  We start searching an
-  // infinite extent, and find the distance from the first feature found.  This
-  // becomes the closest feature.  We then compute a smaller extent which any
-  // closer feature must intersect.  We continue searching with this smaller
-  // extent, trying to find a closer feature.  Every time we find a closer
-  // feature, we update the extent being searched so that any even closer
-  // feature must intersect it.  We continue until we run out of features.
-  var x = coordinate[0];
-  var y = coordinate[1];
-  var closestFeature = null;
-  var closestPoint = [NaN, NaN];
-  var minSquaredDistance = Infinity;
-  var extent = [-Infinity, -Infinity, Infinity, Infinity];
-  ol.DEBUG && console.assert(this.featuresRtree_,
-      'getClosestFeatureToCoordinate does not work with useSpatialIndex set ' +
-      'to false');
-  var filter = opt_filter ? opt_filter : ol.functions.TRUE;
-  this.featuresRtree_.forEachInExtent(extent,
-      /**
-       * @param {ol.Feature} feature Feature.
-       */
-      function(feature) {
-        if (filter(feature)) {
-          var geometry = feature.getGeometry();
-          ol.DEBUG && console.assert(geometry,
-              'feature geometry is defined and not null');
-          var previousMinSquaredDistance = minSquaredDistance;
-          minSquaredDistance = geometry.closestPointXY(
-              x, y, closestPoint, minSquaredDistance);
-          if (minSquaredDistance < previousMinSquaredDistance) {
-            closestFeature = feature;
-            // This is sneaky.  Reduce the extent that it is currently being
-            // searched while the R-Tree traversal using this same extent object
-            // is still in progress.  This is safe because the new extent is
-            // strictly contained by the old extent.
-            var minDistance = Math.sqrt(minSquaredDistance);
-            extent[0] = x - minDistance;
-            extent[1] = y - minDistance;
-            extent[2] = x + minDistance;
-            extent[3] = y + minDistance;
-          }
-        }
-      });
-  return closestFeature;
-};
-
-
-/**
- * Get the extent of the features currently in the source.
- *
- * This method is not available when the source is configured with
- * `useSpatialIndex` set to `false`.
- * @return {!ol.Extent} Extent.
- * @api stable
- */
-ol.source.Vector.prototype.getExtent = function() {
-  ol.DEBUG && console.assert(this.featuresRtree_,
-      'getExtent does not work when useSpatialIndex is set to false');
-  return this.featuresRtree_.getExtent();
-};
-
-
-/**
- * Get a feature by its identifier (the value returned by feature.getId()).
- * Note that the index treats string and numeric identifiers as the same.  So
- * `source.getFeatureById(2)` will return a feature with id `'2'` or `2`.
- *
- * @param {string|number} id Feature identifier.
- * @return {ol.Feature} The feature (or `null` if not found).
- * @api stable
- */
-ol.source.Vector.prototype.getFeatureById = function(id) {
-  var feature = this.idIndex_[id.toString()];
-  return feature !== undefined ? feature : null;
-};
-
-
-/**
- * Get the format associated with this source.
- *
- * @return {ol.format.Feature|undefined} The feature format.
- * @api
- */
-ol.source.Vector.prototype.getFormat = function() {
-  return this.format_;
-};
-
-
-/**
- * @return {boolean} The source can have overlapping geometries.
- */
-ol.source.Vector.prototype.getOverlaps = function() {
-  return this.overlaps_;
-};
-
-
-/**
- * Get the url associated with this source.
- *
- * @return {string|ol.FeatureUrlFunction|undefined} The url.
- * @api
- */
-ol.source.Vector.prototype.getUrl = function() {
-  return this.url_;
-};
-
-
-/**
- * @param {ol.events.Event} event Event.
- * @private
- */
-ol.source.Vector.prototype.handleFeatureChange_ = function(event) {
-  var feature = /** @type {ol.Feature} */ (event.target);
-  var featureKey = ol.getUid(feature).toString();
-  var geometry = feature.getGeometry();
-  if (!geometry) {
-    if (!(featureKey in this.nullGeometryFeatures_)) {
-      if (this.featuresRtree_) {
-        this.featuresRtree_.remove(feature);
-      }
-      this.nullGeometryFeatures_[featureKey] = feature;
-    }
-  } else {
-    var extent = geometry.getExtent();
-    if (featureKey in this.nullGeometryFeatures_) {
-      delete this.nullGeometryFeatures_[featureKey];
-      if (this.featuresRtree_) {
-        this.featuresRtree_.insert(extent, feature);
-      }
-    } else {
-      if (this.featuresRtree_) {
-        this.featuresRtree_.update(extent, feature);
-      }
-    }
-  }
-  var id = feature.getId();
-  var removed;
-  if (id !== undefined) {
-    var sid = id.toString();
-    if (featureKey in this.undefIdIndex_) {
-      delete this.undefIdIndex_[featureKey];
-      this.idIndex_[sid] = feature;
-    } else {
-      if (this.idIndex_[sid] !== feature) {
-        removed = this.removeFromIdIndex_(feature);
-        ol.DEBUG && console.assert(removed,
-            'Expected feature to be removed from index');
-        this.idIndex_[sid] = feature;
-      }
-    }
-  } else {
-    if (!(featureKey in this.undefIdIndex_)) {
-      removed = this.removeFromIdIndex_(feature);
-      ol.DEBUG && console.assert(removed,
-          'Expected feature to be removed from index');
-      this.undefIdIndex_[featureKey] = feature;
-    } else {
-      ol.DEBUG && console.assert(this.undefIdIndex_[featureKey] === feature,
-          'feature keyed under %s in undefIdKeys', featureKey);
-    }
-  }
-  this.changed();
-  this.dispatchEvent(new ol.source.Vector.Event(
-      ol.source.Vector.EventType.CHANGEFEATURE, feature));
-};
-
-
-/**
- * @return {boolean} Is empty.
- */
-ol.source.Vector.prototype.isEmpty = function() {
-  return this.featuresRtree_.isEmpty() &&
-      ol.obj.isEmpty(this.nullGeometryFeatures_);
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {number} resolution Resolution.
- * @param {ol.proj.Projection} projection Projection.
- */
-ol.source.Vector.prototype.loadFeatures = function(
-    extent, resolution, projection) {
-  var loadedExtentsRtree = this.loadedExtentsRtree_;
-  var extentsToLoad = this.strategy_(extent, resolution);
-  var i, ii;
-  for (i = 0, ii = extentsToLoad.length; i < ii; ++i) {
-    var extentToLoad = extentsToLoad[i];
-    var alreadyLoaded = loadedExtentsRtree.forEachInExtent(extentToLoad,
-        /**
-         * @param {{extent: ol.Extent}} object Object.
-         * @return {boolean} Contains.
-         */
-        function(object) {
-          return ol.extent.containsExtent(object.extent, extentToLoad);
-        });
-    if (!alreadyLoaded) {
-      this.loader_.call(this, extentToLoad, resolution, projection);
-      loadedExtentsRtree.insert(extentToLoad, {extent: extentToLoad.slice()});
-    }
-  }
-};
-
-
-/**
- * Remove a single feature from the source.  If you want to remove all features
- * at once, use the {@link ol.source.Vector#clear source.clear()} method
- * instead.
- * @param {ol.Feature} feature Feature to remove.
- * @api stable
- */
-ol.source.Vector.prototype.removeFeature = function(feature) {
-  var featureKey = ol.getUid(feature).toString();
-  if (featureKey in this.nullGeometryFeatures_) {
-    delete this.nullGeometryFeatures_[featureKey];
-  } else {
-    if (this.featuresRtree_) {
-      this.featuresRtree_.remove(feature);
-    }
-  }
-  this.removeFeatureInternal(feature);
-  this.changed();
-};
-
-
-/**
- * Remove feature without firing a `change` event.
- * @param {ol.Feature} feature Feature.
- * @protected
- */
-ol.source.Vector.prototype.removeFeatureInternal = function(feature) {
-  var featureKey = ol.getUid(feature).toString();
-  ol.DEBUG && console.assert(featureKey in this.featureChangeKeys_,
-      'featureKey exists in featureChangeKeys');
-  this.featureChangeKeys_[featureKey].forEach(ol.events.unlistenByKey);
-  delete this.featureChangeKeys_[featureKey];
-  var id = feature.getId();
-  if (id !== undefined) {
-    delete this.idIndex_[id.toString()];
-  } else {
-    delete this.undefIdIndex_[featureKey];
-  }
-  this.dispatchEvent(new ol.source.Vector.Event(
-      ol.source.Vector.EventType.REMOVEFEATURE, feature));
-};
-
-
-/**
- * Remove a feature from the id index.  Called internally when the feature id
- * may have changed.
- * @param {ol.Feature} feature The feature.
- * @return {boolean} Removed the feature from the index.
- * @private
- */
-ol.source.Vector.prototype.removeFromIdIndex_ = function(feature) {
-  var removed = false;
-  for (var id in this.idIndex_) {
-    if (this.idIndex_[id] === feature) {
-      delete this.idIndex_[id];
-      removed = true;
-      break;
-    }
-  }
-  return removed;
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.source.Vector} instances are instances of this
- * type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.source.Vector.Event}
- * @param {string} type Type.
- * @param {ol.Feature=} opt_feature Feature.
- */
-ol.source.Vector.Event = function(type, opt_feature) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The feature being added or removed.
-   * @type {ol.Feature|undefined}
-   * @api stable
-   */
-  this.feature = opt_feature;
-
-};
-ol.inherits(ol.source.Vector.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.source.Vector.EventType = {
-  /**
-   * Triggered when a feature is added to the source.
-   * @event ol.source.Vector.Event#addfeature
-   * @api stable
-   */
-  ADDFEATURE: 'addfeature',
-
-  /**
-   * Triggered when a feature is updated.
-   * @event ol.source.Vector.Event#changefeature
-   * @api
-   */
-  CHANGEFEATURE: 'changefeature',
-
-  /**
-   * Triggered when the clear method is called on the source.
-   * @event ol.source.Vector.Event#clear
-   * @api
-   */
-  CLEAR: 'clear',
-
-  /**
-   * Triggered when a feature is removed from the source.
-   * See {@link ol.source.Vector#clear source.clear()} for exceptions.
-   * @event ol.source.Vector.Event#removefeature
-   * @api stable
-   */
-  REMOVEFEATURE: 'removefeature'
-};
-
-goog.provide('ol.interaction.Draw');
-
-goog.require('ol');
-goog.require('ol.events');
-goog.require('ol.extent');
-goog.require('ol.events.Event');
-goog.require('ol.Feature');
-goog.require('ol.MapBrowserEvent.EventType');
-goog.require('ol.Object');
-goog.require('ol.coordinate');
-goog.require('ol.functions');
-goog.require('ol.events.condition');
-goog.require('ol.geom.Circle');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.interaction.Pointer');
-goog.require('ol.layer.Vector');
-goog.require('ol.source.Vector');
-goog.require('ol.style.Style');
-
-
-/**
- * @classdesc
- * Interaction for drawing feature geometries.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @fires ol.interaction.Draw.Event
- * @param {olx.interaction.DrawOptions} options Options.
- * @api stable
- */
-ol.interaction.Draw = function(options) {
-
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.Draw.handleDownEvent_,
-    handleEvent: ol.interaction.Draw.handleEvent,
-    handleUpEvent: ol.interaction.Draw.handleUpEvent_
-  });
-
-  /**
-   * @type {ol.Pixel}
-   * @private
-   */
-  this.downPx_ = null;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.freehand_ = false;
-
-  /**
-   * Target source for drawn features.
-   * @type {ol.source.Vector}
-   * @private
-   */
-  this.source_ = options.source ? options.source : null;
-
-  /**
-   * Target collection for drawn features.
-   * @type {ol.Collection.<ol.Feature>}
-   * @private
-   */
-  this.features_ = options.features ? options.features : null;
-
-  /**
-   * Pixel distance for snapping.
-   * @type {number}
-   * @private
-   */
-  this.snapTolerance_ = options.snapTolerance ? options.snapTolerance : 12;
-
-  /**
-   * Geometry type.
-   * @type {ol.geom.GeometryType}
-   * @private
-   */
-  this.type_ = options.type;
-
-  /**
-   * Drawing mode (derived from geometry type.
-   * @type {ol.interaction.Draw.Mode}
-   * @private
-   */
-  this.mode_ = ol.interaction.Draw.getMode_(this.type_);
-
-  /**
-   * The number of points that must be drawn before a polygon ring or line
-   * string can be finished.  The default is 3 for polygon rings and 2 for
-   * line strings.
-   * @type {number}
-   * @private
-   */
-  this.minPoints_ = options.minPoints ?
-      options.minPoints :
-      (this.mode_ === ol.interaction.Draw.Mode.POLYGON ? 3 : 2);
-
-  /**
-   * The number of points that can be drawn before a polygon ring or line string
-   * is finished. The default is no restriction.
-   * @type {number}
-   * @private
-   */
-  this.maxPoints_ = options.maxPoints ? options.maxPoints : Infinity;
-
-  /**
-   * A function to decide if a potential finish coordinate is permissable
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.finishCondition_ = options.finishCondition ? options.finishCondition : ol.functions.TRUE;
-
-  var geometryFunction = options.geometryFunction;
-  if (!geometryFunction) {
-    if (this.type_ === ol.geom.GeometryType.CIRCLE) {
-      /**
-       * @param {ol.Coordinate|Array.<ol.Coordinate>|Array.<Array.<ol.Coordinate>>} coordinates
-       *     The coordinates.
-       * @param {ol.geom.SimpleGeometry=} opt_geometry Optional geometry.
-       * @return {ol.geom.SimpleGeometry} A geometry.
-       */
-      geometryFunction = function(coordinates, opt_geometry) {
-        var circle = opt_geometry ? /** @type {ol.geom.Circle} */ (opt_geometry) :
-            new ol.geom.Circle([NaN, NaN]);
-        var squaredLength = ol.coordinate.squaredDistance(
-            coordinates[0], coordinates[1]);
-        circle.setCenterAndRadius(coordinates[0], Math.sqrt(squaredLength));
-        return circle;
-      };
-    } else {
-      var Constructor;
-      var mode = this.mode_;
-      if (mode === ol.interaction.Draw.Mode.POINT) {
-        Constructor = ol.geom.Point;
-      } else if (mode === ol.interaction.Draw.Mode.LINE_STRING) {
-        Constructor = ol.geom.LineString;
-      } else if (mode === ol.interaction.Draw.Mode.POLYGON) {
-        Constructor = ol.geom.Polygon;
-      }
-      /**
-       * @param {ol.Coordinate|Array.<ol.Coordinate>|Array.<Array.<ol.Coordinate>>} coordinates
-       *     The coordinates.
-       * @param {ol.geom.SimpleGeometry=} opt_geometry Optional geometry.
-       * @return {ol.geom.SimpleGeometry} A geometry.
-       */
-      geometryFunction = function(coordinates, opt_geometry) {
-        var geometry = opt_geometry;
-        if (geometry) {
-          if (mode === ol.interaction.Draw.Mode.POLYGON) {
-            geometry.setCoordinates([coordinates[0].concat([coordinates[0][0]])]);
-          } else {
-            geometry.setCoordinates(coordinates);
-          }
-        } else {
-          geometry = new Constructor(coordinates);
-        }
-        return geometry;
-      };
-    }
-  }
-
-  /**
-   * @type {ol.DrawGeometryFunctionType}
-   * @private
-   */
-  this.geometryFunction_ = geometryFunction;
-
-  /**
-   * Finish coordinate for the feature (first point for polygons, last point for
-   * linestrings).
-   * @type {ol.Coordinate}
-   * @private
-   */
-  this.finishCoordinate_ = null;
-
-  /**
-   * Sketch feature.
-   * @type {ol.Feature}
-   * @private
-   */
-  this.sketchFeature_ = null;
-
-  /**
-   * Sketch point.
-   * @type {ol.Feature}
-   * @private
-   */
-  this.sketchPoint_ = null;
-
-  /**
-   * Sketch coordinates. Used when drawing a line or polygon.
-   * @type {ol.Coordinate|Array.<ol.Coordinate>|Array.<Array.<ol.Coordinate>>}
-   * @private
-   */
-  this.sketchCoords_ = null;
-
-  /**
-   * Sketch line. Used when drawing polygon.
-   * @type {ol.Feature}
-   * @private
-   */
-  this.sketchLine_ = null;
-
-  /**
-   * Sketch line coordinates. Used when drawing a polygon or circle.
-   * @type {Array.<ol.Coordinate>}
-   * @private
-   */
-  this.sketchLineCoords_ = null;
-
-  /**
-   * Squared tolerance for handling up events.  If the squared distance
-   * between a down and up event is greater than this tolerance, up events
-   * will not be handled.
-   * @type {number}
-   * @private
-   */
-  this.squaredClickTolerance_ = options.clickTolerance ?
-      options.clickTolerance * options.clickTolerance : 36;
-
-  /**
-   * Draw overlay where our sketch features are drawn.
-   * @type {ol.layer.Vector}
-   * @private
-   */
-  this.overlay_ = new ol.layer.Vector({
-    source: new ol.source.Vector({
-      useSpatialIndex: false,
-      wrapX: options.wrapX ? options.wrapX : false
-    }),
-    style: options.style ? options.style :
-        ol.interaction.Draw.getDefaultStyleFunction()
-  });
-
-  /**
-   * Name of the geometry attribute for newly created features.
-   * @type {string|undefined}
-   * @private
-   */
-  this.geometryName_ = options.geometryName;
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition ?
-      options.condition : ol.events.condition.noModifierKeys;
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.freehandCondition_;
-  if (options.freehand) {
-    this.freehandCondition_ = ol.events.condition.always;
-  } else {
-    this.freehandCondition_ = options.freehandCondition ?
-        options.freehandCondition : ol.events.condition.shiftKeyOnly;
-  }
-
-  ol.events.listen(this,
-      ol.Object.getChangeEventType(ol.interaction.Interaction.Property.ACTIVE),
-      this.updateState_, this);
-
-};
-ol.inherits(ol.interaction.Draw, ol.interaction.Pointer);
-
-
-/**
- * @return {ol.StyleFunction} Styles.
- */
-ol.interaction.Draw.getDefaultStyleFunction = function() {
-  var styles = ol.style.Style.createDefaultEditing();
-  return function(feature, resolution) {
-    return styles[feature.getGeometry().getType()];
-  };
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.Draw.prototype.setMap = function(map) {
-  ol.interaction.Pointer.prototype.setMap.call(this, map);
-  this.updateState_();
-};
-
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} and may actually
- * draw or finish the drawing.
- * @param {ol.MapBrowserEvent} event Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.Draw}
- * @api
- */
-ol.interaction.Draw.handleEvent = function(event) {
-  this.freehand_ = this.mode_ !== ol.interaction.Draw.Mode.POINT && this.freehandCondition_(event);
-  var pass = !this.freehand_;
-  if (this.freehand_ &&
-      event.type === ol.MapBrowserEvent.EventType.POINTERDRAG && this.sketchFeature_ !== null) {
-    this.addToDrawing_(event);
-    pass = false;
-  } else if (event.type ===
-      ol.MapBrowserEvent.EventType.POINTERMOVE) {
-    pass = this.handlePointerMove_(event);
-  } else if (event.type === ol.MapBrowserEvent.EventType.DBLCLICK) {
-    pass = false;
-  }
-  return ol.interaction.Pointer.handleEvent.call(this, event) && pass;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} event Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.Draw}
- * @private
- */
-ol.interaction.Draw.handleDownEvent_ = function(event) {
-  if (this.freehand_) {
-    this.downPx_ = event.pixel;
-    if (!this.finishCoordinate_) {
-      this.startDrawing_(event);
-    }
-    return true;
-  } else if (this.condition_(event)) {
-    this.downPx_ = event.pixel;
-    return true;
-  } else {
-    return false;
-  }
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} event Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.Draw}
- * @private
- */
-ol.interaction.Draw.handleUpEvent_ = function(event) {
-  var downPx = this.downPx_;
-  var clickPx = event.pixel;
-  var dx = downPx[0] - clickPx[0];
-  var dy = downPx[1] - clickPx[1];
-  var squaredDistance = dx * dx + dy * dy;
-  var pass = true;
-  var shouldHandle = this.freehand_ ?
-      squaredDistance > this.squaredClickTolerance_ :
-      squaredDistance <= this.squaredClickTolerance_;
-  if (shouldHandle) {
-    this.handlePointerMove_(event);
-    if (!this.finishCoordinate_) {
-      this.startDrawing_(event);
-      if (this.mode_ === ol.interaction.Draw.Mode.POINT) {
-        this.finishDrawing();
-      }
-    } else if (this.freehand_ || this.mode_ === ol.interaction.Draw.Mode.CIRCLE) {
-      this.finishDrawing();
-    } else if (this.atFinish_(event)) {
-      if (this.finishCondition_(event)) {
-        this.finishDrawing();
-      }
-    } else {
-      this.addToDrawing_(event);
-    }
-    pass = false;
-  }
-  return pass;
-};
-
-
-/**
- * Handle move events.
- * @param {ol.MapBrowserEvent} event A move event.
- * @return {boolean} Pass the event to other interactions.
- * @private
- */
-ol.interaction.Draw.prototype.handlePointerMove_ = function(event) {
-  if (this.finishCoordinate_) {
-    this.modifyDrawing_(event);
-  } else {
-    this.createOrUpdateSketchPoint_(event);
-  }
-  return true;
-};
-
-
-/**
- * Determine if an event is within the snapping tolerance of the start coord.
- * @param {ol.MapBrowserEvent} event Event.
- * @return {boolean} The event is within the snapping tolerance of the start.
- * @private
- */
-ol.interaction.Draw.prototype.atFinish_ = function(event) {
-  var at = false;
-  if (this.sketchFeature_) {
-    var potentiallyDone = false;
-    var potentiallyFinishCoordinates = [this.finishCoordinate_];
-    if (this.mode_ === ol.interaction.Draw.Mode.LINE_STRING) {
-      potentiallyDone = this.sketchCoords_.length > this.minPoints_;
-    } else if (this.mode_ === ol.interaction.Draw.Mode.POLYGON) {
-      potentiallyDone = this.sketchCoords_[0].length >
-          this.minPoints_;
-      potentiallyFinishCoordinates = [this.sketchCoords_[0][0],
-        this.sketchCoords_[0][this.sketchCoords_[0].length - 2]];
-    }
-    if (potentiallyDone) {
-      var map = event.map;
-      for (var i = 0, ii = potentiallyFinishCoordinates.length; i < ii; i++) {
-        var finishCoordinate = potentiallyFinishCoordinates[i];
-        var finishPixel = map.getPixelFromCoordinate(finishCoordinate);
-        var pixel = event.pixel;
-        var dx = pixel[0] - finishPixel[0];
-        var dy = pixel[1] - finishPixel[1];
-        var snapTolerance = this.freehand_ ? 1 : this.snapTolerance_;
-        at = Math.sqrt(dx * dx + dy * dy) <= snapTolerance;
-        if (at) {
-          this.finishCoordinate_ = finishCoordinate;
-          break;
-        }
-      }
-    }
-  }
-  return at;
-};
-
-
-/**
- * @param {ol.MapBrowserEvent} event Event.
- * @private
- */
-ol.interaction.Draw.prototype.createOrUpdateSketchPoint_ = function(event) {
-  var coordinates = event.coordinate.slice();
-  if (!this.sketchPoint_) {
-    this.sketchPoint_ = new ol.Feature(new ol.geom.Point(coordinates));
-    this.updateSketchFeatures_();
-  } else {
-    var sketchPointGeom = /** @type {ol.geom.Point} */ (this.sketchPoint_.getGeometry());
-    sketchPointGeom.setCoordinates(coordinates);
-  }
-};
-
-
-/**
- * Start the drawing.
- * @param {ol.MapBrowserEvent} event Event.
- * @private
- */
-ol.interaction.Draw.prototype.startDrawing_ = function(event) {
-  var start = event.coordinate;
-  this.finishCoordinate_ = start;
-  if (this.mode_ === ol.interaction.Draw.Mode.POINT) {
-    this.sketchCoords_ = start.slice();
-  } else if (this.mode_ === ol.interaction.Draw.Mode.POLYGON) {
-    this.sketchCoords_ = [[start.slice(), start.slice()]];
-    this.sketchLineCoords_ = this.sketchCoords_[0];
-  } else {
-    this.sketchCoords_ = [start.slice(), start.slice()];
-    if (this.mode_ === ol.interaction.Draw.Mode.CIRCLE) {
-      this.sketchLineCoords_ = this.sketchCoords_;
-    }
-  }
-  if (this.sketchLineCoords_) {
-    this.sketchLine_ = new ol.Feature(
-        new ol.geom.LineString(this.sketchLineCoords_));
-  }
-  var geometry = this.geometryFunction_(this.sketchCoords_);
-  ol.DEBUG && console.assert(geometry !== undefined, 'geometry should be defined');
-  this.sketchFeature_ = new ol.Feature();
-  if (this.geometryName_) {
-    this.sketchFeature_.setGeometryName(this.geometryName_);
-  }
-  this.sketchFeature_.setGeometry(geometry);
-  this.updateSketchFeatures_();
-  this.dispatchEvent(new ol.interaction.Draw.Event(
-      ol.interaction.Draw.EventType.DRAWSTART, this.sketchFeature_));
-};
-
-
-/**
- * Modify the drawing.
- * @param {ol.MapBrowserEvent} event Event.
- * @private
- */
-ol.interaction.Draw.prototype.modifyDrawing_ = function(event) {
-  var coordinate = event.coordinate;
-  var geometry = /** @type {ol.geom.SimpleGeometry} */ (this.sketchFeature_.getGeometry());
-  var coordinates, last;
-  if (this.mode_ === ol.interaction.Draw.Mode.POINT) {
-    last = this.sketchCoords_;
-  } else if (this.mode_ === ol.interaction.Draw.Mode.POLYGON) {
-    coordinates = this.sketchCoords_[0];
-    last = coordinates[coordinates.length - 1];
-    if (this.atFinish_(event)) {
-      // snap to finish
-      coordinate = this.finishCoordinate_.slice();
-    }
-  } else {
-    coordinates = this.sketchCoords_;
-    last = coordinates[coordinates.length - 1];
-  }
-  last[0] = coordinate[0];
-  last[1] = coordinate[1];
-  ol.DEBUG && console.assert(this.sketchCoords_, 'sketchCoords_ expected');
-  this.geometryFunction_(
-      /** @type {!ol.Coordinate|!Array.<ol.Coordinate>|!Array.<Array.<ol.Coordinate>>} */ (this.sketchCoords_),
-      geometry);
-  if (this.sketchPoint_) {
-    var sketchPointGeom = /** @type {ol.geom.Point} */ (this.sketchPoint_.getGeometry());
-    sketchPointGeom.setCoordinates(coordinate);
-  }
-  var sketchLineGeom;
-  if (geometry instanceof ol.geom.Polygon &&
-      this.mode_ !== ol.interaction.Draw.Mode.POLYGON) {
-    if (!this.sketchLine_) {
-      this.sketchLine_ = new ol.Feature(new ol.geom.LineString(null));
-    }
-    var ring = geometry.getLinearRing(0);
-    sketchLineGeom = /** @type {ol.geom.LineString} */ (this.sketchLine_.getGeometry());
-    sketchLineGeom.setFlatCoordinates(
-        ring.getLayout(), ring.getFlatCoordinates());
-  } else if (this.sketchLineCoords_) {
-    sketchLineGeom = /** @type {ol.geom.LineString} */ (this.sketchLine_.getGeometry());
-    sketchLineGeom.setCoordinates(this.sketchLineCoords_);
-  }
-  this.updateSketchFeatures_();
-};
-
-
-/**
- * Add a new coordinate to the drawing.
- * @param {ol.MapBrowserEvent} event Event.
- * @private
- */
-ol.interaction.Draw.prototype.addToDrawing_ = function(event) {
-  var coordinate = event.coordinate;
-  var geometry = /** @type {ol.geom.SimpleGeometry} */ (this.sketchFeature_.getGeometry());
-  var done;
-  var coordinates;
-  if (this.mode_ === ol.interaction.Draw.Mode.LINE_STRING) {
-    this.finishCoordinate_ = coordinate.slice();
-    coordinates = this.sketchCoords_;
-    if (coordinates.length >= this.maxPoints_) {
-      if (this.freehand_) {
-        coordinates.pop();
-      } else {
-        done = true;
-      }
-    }
-    coordinates.push(coordinate.slice());
-    this.geometryFunction_(coordinates, geometry);
-  } else if (this.mode_ === ol.interaction.Draw.Mode.POLYGON) {
-    coordinates = this.sketchCoords_[0];
-    if (coordinates.length >= this.maxPoints_) {
-      if (this.freehand_) {
-        coordinates.pop();
-      } else {
-        done = true;
-      }
-    }
-    coordinates.push(coordinate.slice());
-    if (done) {
-      this.finishCoordinate_ = coordinates[0];
-    }
-    this.geometryFunction_(this.sketchCoords_, geometry);
-  }
-  this.updateSketchFeatures_();
-  if (done) {
-    this.finishDrawing();
-  }
-};
-
-
-/**
- * Remove last point of the feature currently being drawn.
- * @api
- */
-ol.interaction.Draw.prototype.removeLastPoint = function() {
-  var geometry = /** @type {ol.geom.SimpleGeometry} */ (this.sketchFeature_.getGeometry());
-  var coordinates, sketchLineGeom;
-  if (this.mode_ === ol.interaction.Draw.Mode.LINE_STRING) {
-    coordinates = this.sketchCoords_;
-    coordinates.splice(-2, 1);
-    this.geometryFunction_(coordinates, geometry);
-  } else if (this.mode_ === ol.interaction.Draw.Mode.POLYGON) {
-    coordinates = this.sketchCoords_[0];
-    coordinates.splice(-2, 1);
-    sketchLineGeom = /** @type {ol.geom.LineString} */ (this.sketchLine_.getGeometry());
-    sketchLineGeom.setCoordinates(coordinates);
-    this.geometryFunction_(this.sketchCoords_, geometry);
-  }
-
-  if (coordinates.length === 0) {
-    this.finishCoordinate_ = null;
-  }
-
-  this.updateSketchFeatures_();
-};
-
-
-/**
- * Stop drawing and add the sketch feature to the target layer.
- * The {@link ol.interaction.Draw.EventType.DRAWEND} event is dispatched before
- * inserting the feature.
- * @api
- */
-ol.interaction.Draw.prototype.finishDrawing = function() {
-  var sketchFeature = this.abortDrawing_();
-  var coordinates = this.sketchCoords_;
-  var geometry = /** @type {ol.geom.SimpleGeometry} */ (sketchFeature.getGeometry());
-  if (this.mode_ === ol.interaction.Draw.Mode.LINE_STRING) {
-    // remove the redundant last point
-    coordinates.pop();
-    this.geometryFunction_(coordinates, geometry);
-  } else if (this.mode_ === ol.interaction.Draw.Mode.POLYGON) {
-    // remove the redundant last point in ring
-    coordinates[0].pop();
-    this.geometryFunction_(coordinates, geometry);
-    coordinates = geometry.getCoordinates();
-  }
-
-  // cast multi-part geometries
-  if (this.type_ === ol.geom.GeometryType.MULTI_POINT) {
-    sketchFeature.setGeometry(new ol.geom.MultiPoint([coordinates]));
-  } else if (this.type_ === ol.geom.GeometryType.MULTI_LINE_STRING) {
-    sketchFeature.setGeometry(new ol.geom.MultiLineString([coordinates]));
-  } else if (this.type_ === ol.geom.GeometryType.MULTI_POLYGON) {
-    sketchFeature.setGeometry(new ol.geom.MultiPolygon([coordinates]));
-  }
-
-  // First dispatch event to allow full set up of feature
-  this.dispatchEvent(new ol.interaction.Draw.Event(
-      ol.interaction.Draw.EventType.DRAWEND, sketchFeature));
-
-  // Then insert feature
-  if (this.features_) {
-    this.features_.push(sketchFeature);
-  }
-  if (this.source_) {
-    this.source_.addFeature(sketchFeature);
-  }
-};
-
-
-/**
- * Stop drawing without adding the sketch feature to the target layer.
- * @return {ol.Feature} The sketch feature (or null if none).
- * @private
- */
-ol.interaction.Draw.prototype.abortDrawing_ = function() {
-  this.finishCoordinate_ = null;
-  var sketchFeature = this.sketchFeature_;
-  if (sketchFeature) {
-    this.sketchFeature_ = null;
-    this.sketchPoint_ = null;
-    this.sketchLine_ = null;
-    this.overlay_.getSource().clear(true);
-  }
-  return sketchFeature;
-};
-
-
-/**
- * Extend an existing geometry by adding additional points. This only works
- * on features with `LineString` geometries, where the interaction will
- * extend lines by adding points to the end of the coordinates array.
- * @param {!ol.Feature} feature Feature to be extended.
- * @api
- */
-ol.interaction.Draw.prototype.extend = function(feature) {
-  var geometry = feature.getGeometry();
-  ol.DEBUG && console.assert(this.mode_ == ol.interaction.Draw.Mode.LINE_STRING,
-      'interaction mode must be "line"');
-  ol.DEBUG && console.assert(geometry.getType() == ol.geom.GeometryType.LINE_STRING,
-      'feature geometry must be a line string');
-  var lineString = /** @type {ol.geom.LineString} */ (geometry);
-  this.sketchFeature_ = feature;
-  this.sketchCoords_ = lineString.getCoordinates();
-  var last = this.sketchCoords_[this.sketchCoords_.length - 1];
-  this.finishCoordinate_ = last.slice();
-  this.sketchCoords_.push(last.slice());
-  this.updateSketchFeatures_();
-  this.dispatchEvent(new ol.interaction.Draw.Event(
-      ol.interaction.Draw.EventType.DRAWSTART, this.sketchFeature_));
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.Draw.prototype.shouldStopEvent = ol.functions.FALSE;
-
-
-/**
- * Redraw the sketch features.
- * @private
- */
-ol.interaction.Draw.prototype.updateSketchFeatures_ = function() {
-  var sketchFeatures = [];
-  if (this.sketchFeature_) {
-    sketchFeatures.push(this.sketchFeature_);
-  }
-  if (this.sketchLine_) {
-    sketchFeatures.push(this.sketchLine_);
-  }
-  if (this.sketchPoint_) {
-    sketchFeatures.push(this.sketchPoint_);
-  }
-  var overlaySource = this.overlay_.getSource();
-  overlaySource.clear(true);
-  overlaySource.addFeatures(sketchFeatures);
-};
-
-
-/**
- * @private
- */
-ol.interaction.Draw.prototype.updateState_ = function() {
-  var map = this.getMap();
-  var active = this.getActive();
-  if (!map || !active) {
-    this.abortDrawing_();
-  }
-  this.overlay_.setMap(active ? map : null);
-};
-
-
-/**
- * Create a `geometryFunction` for `type: 'Circle'` that will create a regular
- * polygon with a user specified number of sides and start angle instead of an
- * `ol.geom.Circle` geometry.
- * @param {number=} opt_sides Number of sides of the regular polygon. Default is
- *     32.
- * @param {number=} opt_angle Angle of the first point in radians. 0 means East.
- *     Default is the angle defined by the heading from the center of the
- *     regular polygon to the current pointer position.
- * @return {ol.DrawGeometryFunctionType} Function that draws a
- *     polygon.
- * @api
- */
-ol.interaction.Draw.createRegularPolygon = function(opt_sides, opt_angle) {
-  return (
-      /**
-       * @param {ol.Coordinate|Array.<ol.Coordinate>|Array.<Array.<ol.Coordinate>>} coordinates
-       * @param {ol.geom.SimpleGeometry=} opt_geometry
-       * @return {ol.geom.SimpleGeometry}
-       */
-      function(coordinates, opt_geometry) {
-        var center = coordinates[0];
-        var end = coordinates[1];
-        var radius = Math.sqrt(
-            ol.coordinate.squaredDistance(center, end));
-        var geometry = opt_geometry ? /** @type {ol.geom.Polygon} */ (opt_geometry) :
-            ol.geom.Polygon.fromCircle(new ol.geom.Circle(center), opt_sides);
-        var angle = opt_angle ? opt_angle :
-            Math.atan((end[1] - center[1]) / (end[0] - center[0]));
-        ol.geom.Polygon.makeRegular(geometry, center, radius, angle);
-        return geometry;
-      }
-  );
-};
-
-
-/**
- * Create a `geometryFunction` that will create a box-shaped polygon (aligned
- * with the coordinate system axes).  Use this with the draw interaction and
- * `type: 'Circle'` to return a box instead of a circle geometry.
- * @return {ol.DrawGeometryFunctionType} Function that draws a box-shaped polygon.
- * @api
- */
-ol.interaction.Draw.createBox = function() {
-  return (
-    /**
-     * @param {ol.Coordinate|Array.<ol.Coordinate>|Array.<Array.<ol.Coordinate>>} coordinates
-     * @param {ol.geom.SimpleGeometry=} opt_geometry
-     * @return {ol.geom.SimpleGeometry}
-     */
-    function(coordinates, opt_geometry) {
-      var extent = ol.extent.boundingExtent(coordinates);
-      var geometry = opt_geometry || new ol.geom.Polygon(null);
-      geometry.setCoordinates([[
-        ol.extent.getBottomLeft(extent),
-        ol.extent.getBottomRight(extent),
-        ol.extent.getTopRight(extent),
-        ol.extent.getTopLeft(extent),
-        ol.extent.getBottomLeft(extent)
-      ]]);
-      return geometry;
-    }
-  );
-};
-
-
-/**
- * Get the drawing mode.  The mode for mult-part geometries is the same as for
- * their single-part cousins.
- * @param {ol.geom.GeometryType} type Geometry type.
- * @return {ol.interaction.Draw.Mode} Drawing mode.
- * @private
- */
-ol.interaction.Draw.getMode_ = function(type) {
-  var mode;
-  if (type === ol.geom.GeometryType.POINT ||
-      type === ol.geom.GeometryType.MULTI_POINT) {
-    mode = ol.interaction.Draw.Mode.POINT;
-  } else if (type === ol.geom.GeometryType.LINE_STRING ||
-      type === ol.geom.GeometryType.MULTI_LINE_STRING) {
-    mode = ol.interaction.Draw.Mode.LINE_STRING;
-  } else if (type === ol.geom.GeometryType.POLYGON ||
-      type === ol.geom.GeometryType.MULTI_POLYGON) {
-    mode = ol.interaction.Draw.Mode.POLYGON;
-  } else if (type === ol.geom.GeometryType.CIRCLE) {
-    mode = ol.interaction.Draw.Mode.CIRCLE;
-  }
-  return /** @type {!ol.interaction.Draw.Mode} */ (mode);
-};
-
-
-/**
- * Draw mode.  This collapses multi-part geometry types with their single-part
- * cousins.
- * @enum {string}
- */
-ol.interaction.Draw.Mode = {
-  POINT: 'Point',
-  LINE_STRING: 'LineString',
-  POLYGON: 'Polygon',
-  CIRCLE: 'Circle'
-};
-
-/**
- * @classdesc
- * Events emitted by {@link ol.interaction.Draw} instances are instances of
- * this type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.DrawEvent}
- * @param {ol.interaction.Draw.EventType} type Type.
- * @param {ol.Feature} feature The feature drawn.
- */
-ol.interaction.Draw.Event = function(type, feature) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The feature being drawn.
-   * @type {ol.Feature}
-   * @api stable
-   */
-  this.feature = feature;
-
-};
-ol.inherits(ol.interaction.Draw.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.interaction.Draw.EventType = {
-  /**
-   * Triggered upon feature draw start
-   * @event ol.interaction.Draw.Event#drawstart
-   * @api stable
-   */
-  DRAWSTART: 'drawstart',
-  /**
-   * Triggered upon feature draw end
-   * @event ol.interaction.Draw.Event#drawend
-   * @api stable
-   */
-  DRAWEND: 'drawend'
-};
-
-goog.provide('ol.interaction.Extent');
-
-goog.require('ol');
-goog.require('ol.Feature');
-goog.require('ol.MapBrowserEvent.EventType');
-goog.require('ol.MapBrowserPointerEvent');
-goog.require('ol.coordinate');
-goog.require('ol.events.Event');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.interaction.Pointer');
-goog.require('ol.layer.Vector');
-goog.require('ol.source.Vector');
-goog.require('ol.style.Style');
-
-
-/**
- * @classdesc
- * Allows the user to draw a vector box by clicking and dragging on the map.
- * Once drawn, the vector box can be modified by dragging its vertices or edges.
- * This interaction is only supported for mouse devices.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @fires ol.interaction.Extent.Event
- * @param {olx.interaction.ExtentOptions=} opt_options Options.
- * @api
- */
-ol.interaction.Extent = function(opt_options) {
-
-  /**
-   * Extent of the drawn box
-   * @type {ol.Extent}
-   * @private
-   */
-  this.extent_ = null;
-
-  /**
-   * Handler for pointer move events
-   * @type {function (ol.Coordinate): ol.Extent|null}
-   * @private
-   */
-  this.pointerHandler_ = null;
-
-  /**
-   * Pixel threshold to snap to extent
-   * @type {number}
-   * @private
-   */
-  this.pixelTolerance_ = 10;
-
-  /**
-   * Is the pointer snapped to an extent vertex
-   * @type {boolean}
-   * @private
-   */
-  this.snappedToVertex_ = false;
-
-  /**
-   * Feature for displaying the visible extent
-   * @type {ol.Feature}
-   * @private
-   */
-  this.extentFeature_ = null;
-
-  /**
-   * Feature for displaying the visible pointer
-   * @type {ol.Feature}
-   * @private
-   */
-  this.vertexFeature_ = null;
-
-  if (!opt_options) {
-    opt_options = {};
-  }
-
-  if (opt_options.extent) {
-    this.setExtent(opt_options.extent);
-  }
-
-  /* Inherit ol.interaction.Pointer */
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.Extent.handleDownEvent_,
-    handleDragEvent: ol.interaction.Extent.handleDragEvent_,
-    handleEvent: ol.interaction.Extent.handleEvent_,
-    handleUpEvent: ol.interaction.Extent.handleUpEvent_
-  });
-
-  /**
-   * Layer for the extentFeature
-   * @type {ol.layer.Vector}
-   * @private
-   */
-  this.extentOverlay_ = new ol.layer.Vector({
-    source: new ol.source.Vector({
-      useSpatialIndex: false,
-      wrapX: !!opt_options.wrapX
-    }),
-    style: opt_options.boxStyle ? opt_options.boxStyle : ol.interaction.Extent.getDefaultExtentStyleFunction_(),
-    updateWhileAnimating: true,
-    updateWhileInteracting: true
-  });
-
-  /**
-   * Layer for the vertexFeature
-   * @type {ol.layer.Vector}
-   * @private
-   */
-  this.vertexOverlay_ = new ol.layer.Vector({
-    source: new ol.source.Vector({
-      useSpatialIndex: false,
-      wrapX: !!opt_options.wrapX
-    }),
-    style: opt_options.pointerStyle ? opt_options.pointerStyle : ol.interaction.Extent.getDefaultPointerStyleFunction_(),
-    updateWhileAnimating: true,
-    updateWhileInteracting: true
-  });
-};
-
-ol.inherits(ol.interaction.Extent, ol.interaction.Pointer);
-
-/**
- * @param {ol.MapBrowserEvent} mapBrowserEvent Event.
- * @return {boolean} Propagate event?
- * @this {ol.interaction.Extent}
- * @private
- */
-ol.interaction.Extent.handleEvent_ = function(mapBrowserEvent) {
-  if (!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) {
-    return true;
-  }
-  //display pointer (if not dragging)
-  if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERMOVE && !this.handlingDownUpSequence) {
-    this.handlePointerMove_(mapBrowserEvent);
-  }
-  //call pointer to determine up/down/drag
-  ol.interaction.Pointer.handleEvent.call(this, mapBrowserEvent);
-  //return false to stop propagation
-  return false;
-};
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Event handled?
- * @this {ol.interaction.Extent}
- * @private
- */
-ol.interaction.Extent.handleDownEvent_ = function(mapBrowserEvent) {
-  var pixel = mapBrowserEvent.pixel;
-  var map = mapBrowserEvent.map;
-
-  var extent = this.getExtent();
-  var vertex = this.snapToVertex_(pixel, map);
-
-  //find the extent corner opposite the passed corner
-  var getOpposingPoint = function(point) {
-    var x_ = null;
-    var y_ = null;
-    if (point[0] == extent[0]) {
-      x_ = extent[2];
-    } else if (point[0] == extent[2]) {
-      x_ = extent[0];
-    }
-    if (point[1] == extent[1]) {
-      y_ = extent[3];
-    } else if (point[1] == extent[3]) {
-      y_ = extent[1];
-    }
-    if (x_ !== null && y_ !== null) {
-      return [x_, y_];
-    }
-    return null;
-  };
-  if (vertex && extent) {
-    var x = (vertex[0] == extent[0] || vertex[0] == extent[2]) ? vertex[0] : null;
-    var y = (vertex[1] == extent[1] || vertex[1] == extent[3]) ? vertex[1] : null;
-
-    //snap to point
-    if (x !== null && y !== null) {
-      this.pointerHandler_ = ol.interaction.Extent.getPointHandler_(getOpposingPoint(vertex));
-    //snap to edge
-    } else if (x !== null) {
-      this.pointerHandler_ = ol.interaction.Extent.getEdgeHandler_(
-        getOpposingPoint([x, extent[1]]),
-        getOpposingPoint([x, extent[3]])
-      );
-    } else if (y !== null) {
-      this.pointerHandler_ = ol.interaction.Extent.getEdgeHandler_(
-        getOpposingPoint([extent[0], y]),
-        getOpposingPoint([extent[2], y])
-      );
-    }
-  //no snap - new bbox
-  } else {
-    vertex = map.getCoordinateFromPixel(pixel);
-    this.setExtent([vertex[0], vertex[1], vertex[0], vertex[1]]);
-    this.pointerHandler_ = ol.interaction.Extent.getPointHandler_(vertex);
-  }
-  return true; //event handled; start downup sequence
-};
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Event handled?
- * @this {ol.interaction.Extent}
- * @private
- */
-ol.interaction.Extent.handleDragEvent_ = function(mapBrowserEvent) {
-  if (this.pointerHandler_) {
-    var pixelCoordinate = mapBrowserEvent.coordinate;
-    this.setExtent(this.pointerHandler_(pixelCoordinate));
-    this.createOrUpdatePointerFeature_(pixelCoordinate);
-  }
-  return true;
-};
-
-/**
- * @param {ol.MapBrowserPointerEvent} mapBrowserEvent Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.Extent}
- * @private
- */
-ol.interaction.Extent.handleUpEvent_ = function(mapBrowserEvent) {
-  this.pointerHandler_ = null;
-  //If bbox is zero area, set to null;
-  var extent = this.getExtent();
-  if (!extent || ol.extent.getArea(extent) === 0) {
-    this.setExtent(null);
-  }
-  return false; //Stop handling downup sequence
-};
-
-/**
- * Returns the default style for the drawn bbox
- *
- * @return {ol.StyleFunction} Default Extent style
- * @private
- */
-ol.interaction.Extent.getDefaultExtentStyleFunction_ = function() {
-  var style = ol.style.Style.createDefaultEditing();
-  return function(feature, resolution) {
-    return style[ol.geom.GeometryType.POLYGON];
-  };
-};
-
-/**
- * Returns the default style for the pointer
- *
- * @return {ol.StyleFunction} Default pointer style
- * @private
- */
-ol.interaction.Extent.getDefaultPointerStyleFunction_ = function() {
-  var style = ol.style.Style.createDefaultEditing();
-  return function(feature, resolution) {
-    return style[ol.geom.GeometryType.POINT];
-  };
-};
-
-/**
- * @param {ol.Coordinate} fixedPoint corner that will be unchanged in the new extent
- * @returns {function (ol.Coordinate): ol.Extent} event handler
- * @private
- */
-ol.interaction.Extent.getPointHandler_ = function(fixedPoint) {
-  return function(point) {
-    return ol.extent.boundingExtent([fixedPoint, point]);
-  };
-};
-
-/**
- * @param {ol.Coordinate} fixedP1 first corner that will be unchanged in the new extent
- * @param {ol.Coordinate} fixedP2 second corner that will be unchanged in the new extent
- * @returns {function (ol.Coordinate): ol.Extent|null} event handler
- * @private
- */
-ol.interaction.Extent.getEdgeHandler_ = function(fixedP1, fixedP2) {
-  if (fixedP1[0] == fixedP2[0]) {
-    return function(point) {
-      return ol.extent.boundingExtent([fixedP1, [point[0], fixedP2[1]]]);
-    };
-  } else if (fixedP1[1] == fixedP2[1]) {
-    return function(point) {
-      return ol.extent.boundingExtent([fixedP1, [fixedP2[0], point[1]]]);
-    };
-  } else {
-    return null;
-  }
-};
-
-/**
- * @param {ol.Extent} extent extent
- * @returns {Array<Array<ol.Coordinate>>} extent line segments
- * @private
- */
-ol.interaction.Extent.getSegments_ = function(extent) {
-  return [
-    [[extent[0], extent[1]], [extent[0], extent[3]]],
-    [[extent[0], extent[3]], [extent[2], extent[3]]],
-    [[extent[2], extent[3]], [extent[2], extent[1]]],
-    [[extent[2], extent[1]], [extent[0], extent[1]]]
-  ];
-};
-
-/**
- * @param {ol.Pixel} pixel cursor location
- * @param {ol.Map} map map
- * @returns {ol.Coordinate|null} snapped vertex on extent
- * @private
- */
-ol.interaction.Extent.prototype.snapToVertex_ = function(pixel, map) {
-  var pixelCoordinate = map.getCoordinateFromPixel(pixel);
-  var sortByDistance = function(a, b) {
-    return ol.coordinate.squaredDistanceToSegment(pixelCoordinate, a) -
-        ol.coordinate.squaredDistanceToSegment(pixelCoordinate, b);
-  };
-  var extent = this.getExtent();
-  if (extent) {
-    //convert extents to line segments and find the segment closest to pixelCoordinate
-    var segments = ol.interaction.Extent.getSegments_(extent);
-    segments.sort(sortByDistance);
-    var closestSegment = segments[0];
-
-    var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate,
-        closestSegment));
-    var vertexPixel = map.getPixelFromCoordinate(vertex);
-
-    //if the distance is within tolerance, snap to the segment
-    if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <=
-        this.pixelTolerance_) {
-
-      //test if we should further snap to a vertex
-      var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
-      var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
-      var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);
-      var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);
-      var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
-      this.snappedToVertex_ = dist <= this.pixelTolerance_;
-      if (this.snappedToVertex_) {
-        vertex = squaredDist1 > squaredDist2 ?
-            closestSegment[1] : closestSegment[0];
-      }
-      return vertex;
-    }
-  }
-  return null;
-};
-
-/**
- * @param {ol.MapBrowserEvent} mapBrowserEvent pointer move event
- * @private
- */
-ol.interaction.Extent.prototype.handlePointerMove_ = function(mapBrowserEvent) {
-  var pixel = mapBrowserEvent.pixel;
-  var map = mapBrowserEvent.map;
-
-  var vertex = this.snapToVertex_(pixel, map);
-  if (!vertex) {
-    vertex = map.getCoordinateFromPixel(pixel);
-  }
-  this.createOrUpdatePointerFeature_(vertex);
-};
-
-/**
- * @param {ol.Extent} extent extent
- * @returns {ol.Feature} extent as featrue
- * @private
- */
-ol.interaction.Extent.prototype.createOrUpdateExtentFeature_ = function(extent) {
-  var extentFeature = this.extentFeature_;
-
-  if (!extentFeature) {
-    if (!extent) {
-      extentFeature = new ol.Feature({});
-    } else {
-      extentFeature = new ol.Feature(ol.geom.Polygon.fromExtent(extent));
-    }
-    this.extentFeature_ = extentFeature;
-    this.extentOverlay_.getSource().addFeature(extentFeature);
-  } else {
-    if (!extent) {
-      extentFeature.setGeometry(undefined);
-    } else {
-      extentFeature.setGeometry(ol.geom.Polygon.fromExtent(extent));
-    }
-  }
-  return extentFeature;
-};
-
-
-/**
- * @param {ol.Coordinate} vertex location of feature
- * @returns {ol.Feature} vertex as feature
- * @private
- */
-ol.interaction.Extent.prototype.createOrUpdatePointerFeature_ = function(vertex) {
-  var vertexFeature = this.vertexFeature_;
-  if (!vertexFeature) {
-    vertexFeature = new ol.Feature(new ol.geom.Point(vertex));
-    this.vertexFeature_ = vertexFeature;
-    this.vertexOverlay_.getSource().addFeature(vertexFeature);
-  } else {
-    var geometry = /** @type {ol.geom.Point} */ (vertexFeature.getGeometry());
-    geometry.setCoordinates(vertex);
-  }
-  return vertexFeature;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.Extent.prototype.setMap = function(map) {
-  this.extentOverlay_.setMap(map);
-  this.vertexOverlay_.setMap(map);
-  ol.interaction.Pointer.prototype.setMap.call(this, map);
-};
-
-/**
- * Returns the current drawn extent in the view projection
- *
- * @return {ol.Extent} Drawn extent in the view projection.
- * @api
- */
-ol.interaction.Extent.prototype.getExtent = function() {
-  return this.extent_;
-};
-
-/**
- * Manually sets the drawn extent, using the view projection.
- *
- * @param {ol.Extent} extent Extent
- * @api
- */
-ol.interaction.Extent.prototype.setExtent = function(extent) {
-  //Null extent means no bbox
-  this.extent_ = extent ? extent : null;
-  this.createOrUpdateExtentFeature_(extent);
-  this.dispatchEvent(new ol.interaction.Extent.Event(this.extent_));
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.interaction.Extent} instances are instances of
- * this type.
- *
- * @constructor
- * @param {ol.Extent} extent the new extent
- * @extends {ol.events.Event}
- */
-ol.interaction.Extent.Event = function(extent) {
-  ol.events.Event.call(this, ol.interaction.Extent.EventType.EXTENTCHANGED);
-
-  /**
-   * The current extent.
-   * @type {ol.Extent}
-   * @api
-   */
-  this.extent_ = extent;
-};
-ol.inherits(ol.interaction.Extent.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.interaction.Extent.EventType = {
-  /**
-   * Triggered after the extent is changed
-   * @event ol.interaction.Extent.Event
-   * @api
-   */
-  EXTENTCHANGED: 'extentchanged'
-};
-
-goog.provide('ol.interaction.Modify');
-
-goog.require('ol');
-goog.require('ol.Collection');
-goog.require('ol.Feature');
-goog.require('ol.MapBrowserEvent.EventType');
-goog.require('ol.MapBrowserPointerEvent');
-goog.require('ol.View');
-goog.require('ol.array');
-goog.require('ol.coordinate');
-goog.require('ol.events');
-goog.require('ol.events.Event');
-goog.require('ol.events.EventType');
-goog.require('ol.events.condition');
-goog.require('ol.extent');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.Point');
-goog.require('ol.interaction.Pointer');
-goog.require('ol.layer.Vector');
-goog.require('ol.source.Vector');
-goog.require('ol.structs.RBush');
-goog.require('ol.style.Style');
-
-
-/**
- * @classdesc
- * Interaction for modifying feature geometries.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @param {olx.interaction.ModifyOptions} options Options.
- * @fires ol.interaction.Modify.Event
- * @api
- */
-ol.interaction.Modify = function(options) {
-
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.Modify.handleDownEvent_,
-    handleDragEvent: ol.interaction.Modify.handleDragEvent_,
-    handleEvent: ol.interaction.Modify.handleEvent,
-    handleUpEvent: ol.interaction.Modify.handleUpEvent_
-  });
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition ?
-      options.condition : ol.events.condition.primaryAction;
-
-
-  /**
-   * @private
-   * @param {ol.MapBrowserEvent} mapBrowserEvent Browser event.
-   * @return {boolean} Combined condition result.
-   */
-  this.defaultDeleteCondition_ = function(mapBrowserEvent) {
-    return ol.events.condition.noModifierKeys(mapBrowserEvent) &&
-      ol.events.condition.singleClick(mapBrowserEvent);
-  };
-
-  /**
-   * @type {ol.EventsConditionType}
-   * @private
-   */
-  this.deleteCondition_ = options.deleteCondition ?
-      options.deleteCondition : this.defaultDeleteCondition_;
-
-  /**
-   * Editing vertex.
-   * @type {ol.Feature}
-   * @private
-   */
-  this.vertexFeature_ = null;
-
-  /**
-   * Segments intersecting {@link this.vertexFeature_} by segment uid.
-   * @type {Object.<string, boolean>}
-   * @private
-   */
-  this.vertexSegments_ = null;
-
-  /**
-   * @type {ol.Pixel}
-   * @private
-   */
-  this.lastPixel_ = [0, 0];
-
-  /**
-   * Tracks if the next `singleclick` event should be ignored to prevent
-   * accidental deletion right after vertex creation.
-   * @type {boolean}
-   * @private
-   */
-  this.ignoreNextSingleClick_ = false;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.modified_ = false;
-
-  /**
-   * Segment RTree for each layer
-   * @type {ol.structs.RBush.<ol.ModifySegmentDataType>}
-   * @private
-   */
-  this.rBush_ = new ol.structs.RBush();
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.pixelTolerance_ = options.pixelTolerance !== undefined ?
-      options.pixelTolerance : 10;
-
-  /**
-   * @type {boolean}
-   * @private
-   */
-  this.snappedToVertex_ = false;
-
-  /**
-   * Indicate whether the interaction is currently changing a feature's
-   * coordinates.
-   * @type {boolean}
-   * @private
-   */
-  this.changingFeature_ = false;
-
-  /**
-   * @type {Array}
-   * @private
-   */
-  this.dragSegments_ = [];
-
-  /**
-   * Draw overlay where sketch features are drawn.
-   * @type {ol.layer.Vector}
-   * @private
-   */
-  this.overlay_ = new ol.layer.Vector({
-    source: new ol.source.Vector({
-      useSpatialIndex: false,
-      wrapX: !!options.wrapX
-    }),
-    style: options.style ? options.style :
-        ol.interaction.Modify.getDefaultStyleFunction(),
-    updateWhileAnimating: true,
-    updateWhileInteracting: true
-  });
-
-  /**
-  * @const
-  * @private
-  * @type {Object.<string, function(ol.Feature, ol.geom.Geometry)>}
-  */
-  this.SEGMENT_WRITERS_ = {
-    'Point': this.writePointGeometry_,
-    'LineString': this.writeLineStringGeometry_,
-    'LinearRing': this.writeLineStringGeometry_,
-    'Polygon': this.writePolygonGeometry_,
-    'MultiPoint': this.writeMultiPointGeometry_,
-    'MultiLineString': this.writeMultiLineStringGeometry_,
-    'MultiPolygon': this.writeMultiPolygonGeometry_,
-    'GeometryCollection': this.writeGeometryCollectionGeometry_
-  };
-
-  /**
-   * @type {ol.Collection.<ol.Feature>}
-   * @private
-   */
-  this.features_ = options.features;
-
-  this.features_.forEach(this.addFeature_, this);
-  ol.events.listen(this.features_, ol.Collection.EventType.ADD,
-      this.handleFeatureAdd_, this);
-  ol.events.listen(this.features_, ol.Collection.EventType.REMOVE,
-      this.handleFeatureRemove_, this);
-
-  /**
-   * @type {ol.MapBrowserPointerEvent}
-   * @private
-   */
-  this.lastPointerEvent_ = null;
-
-};
-ol.inherits(ol.interaction.Modify, ol.interaction.Pointer);
-
-
-/**
- * @param {ol.Feature} feature Feature.
- * @private
- */
-ol.interaction.Modify.prototype.addFeature_ = function(feature) {
-  var geometry = feature.getGeometry();
-  if (geometry && geometry.getType() in this.SEGMENT_WRITERS_) {
-    this.SEGMENT_WRITERS_[geometry.getType()].call(this, feature, geometry);
-  }
-  var map = this.getMap();
-  if (map) {
-    this.handlePointerAtPixel_(this.lastPixel_, map);
-  }
-  ol.events.listen(feature, ol.events.EventType.CHANGE,
-      this.handleFeatureChange_, this);
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} evt Map browser event
- * @private
- */
-ol.interaction.Modify.prototype.willModifyFeatures_ = function(evt) {
-  if (!this.modified_) {
-    this.modified_ = true;
-    this.dispatchEvent(new ol.interaction.Modify.Event(
-        ol.interaction.Modify.EventType.MODIFYSTART, this.features_, evt));
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- * @private
- */
-ol.interaction.Modify.prototype.removeFeature_ = function(feature) {
-  this.removeFeatureSegmentData_(feature);
-  // Remove the vertex feature if the collection of canditate features
-  // is empty.
-  if (this.vertexFeature_ && this.features_.getLength() === 0) {
-    this.overlay_.getSource().removeFeature(this.vertexFeature_);
-    this.vertexFeature_ = null;
-  }
-  ol.events.unlisten(feature, ol.events.EventType.CHANGE,
-      this.handleFeatureChange_, this);
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- * @private
- */
-ol.interaction.Modify.prototype.removeFeatureSegmentData_ = function(feature) {
-  var rBush = this.rBush_;
-  var /** @type {Array.<ol.ModifySegmentDataType>} */ nodesToRemove = [];
-  rBush.forEach(
-      /**
-       * @param {ol.ModifySegmentDataType} node RTree node.
-       */
-      function(node) {
-        if (feature === node.feature) {
-          nodesToRemove.push(node);
-        }
-      });
-  for (var i = nodesToRemove.length - 1; i >= 0; --i) {
-    rBush.remove(nodesToRemove[i]);
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.Modify.prototype.setActive = function(active) {
-  if (this.vertexFeature_ && !active) {
-    this.overlay_.getSource().removeFeature(this.vertexFeature_);
-    this.vertexFeature_ = null;
-  }
-  ol.interaction.Pointer.prototype.setActive.call(this, active);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.Modify.prototype.setMap = function(map) {
-  this.overlay_.setMap(map);
-  ol.interaction.Pointer.prototype.setMap.call(this, map);
-};
-
-
-/**
- * @param {ol.Collection.Event} evt Event.
- * @private
- */
-ol.interaction.Modify.prototype.handleFeatureAdd_ = function(evt) {
-  this.addFeature_(/** @type {ol.Feature} */ (evt.element));
-};
-
-
-/**
- * @param {ol.events.Event} evt Event.
- * @private
- */
-ol.interaction.Modify.prototype.handleFeatureChange_ = function(evt) {
-  if (!this.changingFeature_) {
-    var feature = /** @type {ol.Feature} */ (evt.target);
-    this.removeFeature_(feature);
-    this.addFeature_(feature);
-  }
-};
-
-
-/**
- * @param {ol.Collection.Event} evt Event.
- * @private
- */
-ol.interaction.Modify.prototype.handleFeatureRemove_ = function(evt) {
-  var feature = /** @type {ol.Feature} */ (evt.element);
-  this.removeFeature_(feature);
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.Point} geometry Geometry.
- * @private
- */
-ol.interaction.Modify.prototype.writePointGeometry_ = function(feature, geometry) {
-  var coordinates = geometry.getCoordinates();
-  var segmentData = /** @type {ol.ModifySegmentDataType} */ ({
-    feature: feature,
-    geometry: geometry,
-    segment: [coordinates, coordinates]
-  });
-  this.rBush_.insert(geometry.getExtent(), segmentData);
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.MultiPoint} geometry Geometry.
- * @private
- */
-ol.interaction.Modify.prototype.writeMultiPointGeometry_ = function(feature, geometry) {
-  var points = geometry.getCoordinates();
-  var coordinates, i, ii, segmentData;
-  for (i = 0, ii = points.length; i < ii; ++i) {
-    coordinates = points[i];
-    segmentData = /** @type {ol.ModifySegmentDataType} */ ({
-      feature: feature,
-      geometry: geometry,
-      depth: [i],
-      index: i,
-      segment: [coordinates, coordinates]
-    });
-    this.rBush_.insert(geometry.getExtent(), segmentData);
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.LineString} geometry Geometry.
- * @private
- */
-ol.interaction.Modify.prototype.writeLineStringGeometry_ = function(feature, geometry) {
-  var coordinates = geometry.getCoordinates();
-  var i, ii, segment, segmentData;
-  for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {
-    segment = coordinates.slice(i, i + 2);
-    segmentData = /** @type {ol.ModifySegmentDataType} */ ({
-      feature: feature,
-      geometry: geometry,
-      index: i,
-      segment: segment
-    });
-    this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.MultiLineString} geometry Geometry.
- * @private
- */
-ol.interaction.Modify.prototype.writeMultiLineStringGeometry_ = function(feature, geometry) {
-  var lines = geometry.getCoordinates();
-  var coordinates, i, ii, j, jj, segment, segmentData;
-  for (j = 0, jj = lines.length; j < jj; ++j) {
-    coordinates = lines[j];
-    for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {
-      segment = coordinates.slice(i, i + 2);
-      segmentData = /** @type {ol.ModifySegmentDataType} */ ({
-        feature: feature,
-        geometry: geometry,
-        depth: [j],
-        index: i,
-        segment: segment
-      });
-      this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);
-    }
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.Polygon} geometry Geometry.
- * @private
- */
-ol.interaction.Modify.prototype.writePolygonGeometry_ = function(feature, geometry) {
-  var rings = geometry.getCoordinates();
-  var coordinates, i, ii, j, jj, segment, segmentData;
-  for (j = 0, jj = rings.length; j < jj; ++j) {
-    coordinates = rings[j];
-    for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {
-      segment = coordinates.slice(i, i + 2);
-      segmentData = /** @type {ol.ModifySegmentDataType} */ ({
-        feature: feature,
-        geometry: geometry,
-        depth: [j],
-        index: i,
-        segment: segment
-      });
-      this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);
-    }
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.MultiPolygon} geometry Geometry.
- * @private
- */
-ol.interaction.Modify.prototype.writeMultiPolygonGeometry_ = function(feature, geometry) {
-  var polygons = geometry.getCoordinates();
-  var coordinates, i, ii, j, jj, k, kk, rings, segment, segmentData;
-  for (k = 0, kk = polygons.length; k < kk; ++k) {
-    rings = polygons[k];
-    for (j = 0, jj = rings.length; j < jj; ++j) {
-      coordinates = rings[j];
-      for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {
-        segment = coordinates.slice(i, i + 2);
-        segmentData = /** @type {ol.ModifySegmentDataType} */ ({
-          feature: feature,
-          geometry: geometry,
-          depth: [j, k],
-          index: i,
-          segment: segment
-        });
-        this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);
-      }
-    }
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.GeometryCollection} geometry Geometry.
- * @private
- */
-ol.interaction.Modify.prototype.writeGeometryCollectionGeometry_ = function(feature, geometry) {
-  var i, geometries = geometry.getGeometriesArray();
-  for (i = 0; i < geometries.length; ++i) {
-    this.SEGMENT_WRITERS_[geometries[i].getType()].call(
-        this, feature, geometries[i]);
-  }
-};
-
-
-/**
- * @param {ol.Coordinate} coordinates Coordinates.
- * @return {ol.Feature} Vertex feature.
- * @private
- */
-ol.interaction.Modify.prototype.createOrUpdateVertexFeature_ = function(coordinates) {
-  var vertexFeature = this.vertexFeature_;
-  if (!vertexFeature) {
-    vertexFeature = new ol.Feature(new ol.geom.Point(coordinates));
-    this.vertexFeature_ = vertexFeature;
-    this.overlay_.getSource().addFeature(vertexFeature);
-  } else {
-    var geometry = /** @type {ol.geom.Point} */ (vertexFeature.getGeometry());
-    geometry.setCoordinates(coordinates);
-  }
-  return vertexFeature;
-};
-
-
-/**
- * @param {ol.ModifySegmentDataType} a The first segment data.
- * @param {ol.ModifySegmentDataType} b The second segment data.
- * @return {number} The difference in indexes.
- * @private
- */
-ol.interaction.Modify.compareIndexes_ = function(a, b) {
-  return a.index - b.index;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} evt Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.Modify}
- * @private
- */
-ol.interaction.Modify.handleDownEvent_ = function(evt) {
-  if (!this.condition_(evt)) {
-    return false;
-  }
-  this.handlePointerAtPixel_(evt.pixel, evt.map);
-  this.dragSegments_.length = 0;
-  this.modified_ = false;
-  var vertexFeature = this.vertexFeature_;
-  if (vertexFeature) {
-    var insertVertices = [];
-    var geometry = /** @type {ol.geom.Point} */ (vertexFeature.getGeometry());
-    var vertex = geometry.getCoordinates();
-    var vertexExtent = ol.extent.boundingExtent([vertex]);
-    var segmentDataMatches = this.rBush_.getInExtent(vertexExtent);
-    var componentSegments = {};
-    segmentDataMatches.sort(ol.interaction.Modify.compareIndexes_);
-    for (var i = 0, ii = segmentDataMatches.length; i < ii; ++i) {
-      var segmentDataMatch = segmentDataMatches[i];
-      var segment = segmentDataMatch.segment;
-      var uid = ol.getUid(segmentDataMatch.feature);
-      var depth = segmentDataMatch.depth;
-      if (depth) {
-        uid += '-' + depth.join('-'); // separate feature components
-      }
-      if (!componentSegments[uid]) {
-        componentSegments[uid] = new Array(2);
-      }
-      if (ol.coordinate.equals(segment[0], vertex) &&
-          !componentSegments[uid][0]) {
-        this.dragSegments_.push([segmentDataMatch, 0]);
-        componentSegments[uid][0] = segmentDataMatch;
-      } else if (ol.coordinate.equals(segment[1], vertex) &&
-          !componentSegments[uid][1]) {
-
-        // prevent dragging closed linestrings by the connecting node
-        if ((segmentDataMatch.geometry.getType() ===
-            ol.geom.GeometryType.LINE_STRING ||
-            segmentDataMatch.geometry.getType() ===
-            ol.geom.GeometryType.MULTI_LINE_STRING) &&
-            componentSegments[uid][0] &&
-            componentSegments[uid][0].index === 0) {
-          continue;
-        }
-
-        this.dragSegments_.push([segmentDataMatch, 1]);
-        componentSegments[uid][1] = segmentDataMatch;
-      } else if (ol.getUid(segment) in this.vertexSegments_ &&
-          (!componentSegments[uid][0] && !componentSegments[uid][1])) {
-        insertVertices.push([segmentDataMatch, vertex]);
-      }
-    }
-    if (insertVertices.length) {
-      this.willModifyFeatures_(evt);
-    }
-    for (var j = insertVertices.length - 1; j >= 0; --j) {
-      this.insertVertex_.apply(this, insertVertices[j]);
-    }
-  }
-  return !!this.vertexFeature_;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} evt Event.
- * @this {ol.interaction.Modify}
- * @private
- */
-ol.interaction.Modify.handleDragEvent_ = function(evt) {
-  this.ignoreNextSingleClick_ = false;
-  this.willModifyFeatures_(evt);
-
-  var vertex = evt.coordinate;
-  for (var i = 0, ii = this.dragSegments_.length; i < ii; ++i) {
-    var dragSegment = this.dragSegments_[i];
-    var segmentData = dragSegment[0];
-    var depth = segmentData.depth;
-    var geometry = segmentData.geometry;
-    var coordinates = geometry.getCoordinates();
-    var segment = segmentData.segment;
-    var index = dragSegment[1];
-
-    while (vertex.length < geometry.getStride()) {
-      vertex.push(0);
-    }
-
-    switch (geometry.getType()) {
-      case ol.geom.GeometryType.POINT:
-        coordinates = vertex;
-        segment[0] = segment[1] = vertex;
-        break;
-      case ol.geom.GeometryType.MULTI_POINT:
-        coordinates[segmentData.index] = vertex;
-        segment[0] = segment[1] = vertex;
-        break;
-      case ol.geom.GeometryType.LINE_STRING:
-        coordinates[segmentData.index + index] = vertex;
-        segment[index] = vertex;
-        break;
-      case ol.geom.GeometryType.MULTI_LINE_STRING:
-        coordinates[depth[0]][segmentData.index + index] = vertex;
-        segment[index] = vertex;
-        break;
-      case ol.geom.GeometryType.POLYGON:
-        coordinates[depth[0]][segmentData.index + index] = vertex;
-        segment[index] = vertex;
-        break;
-      case ol.geom.GeometryType.MULTI_POLYGON:
-        coordinates[depth[1]][depth[0]][segmentData.index + index] = vertex;
-        segment[index] = vertex;
-        break;
-      default:
-        // pass
-    }
-
-    this.setGeometryCoordinates_(geometry, coordinates);
-  }
-  this.createOrUpdateVertexFeature_(vertex);
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} evt Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.Modify}
- * @private
- */
-ol.interaction.Modify.handleUpEvent_ = function(evt) {
-  var segmentData;
-  for (var i = this.dragSegments_.length - 1; i >= 0; --i) {
-    segmentData = this.dragSegments_[i][0];
-    this.rBush_.update(ol.extent.boundingExtent(segmentData.segment),
-        segmentData);
-  }
-  if (this.modified_) {
-    this.dispatchEvent(new ol.interaction.Modify.Event(
-        ol.interaction.Modify.EventType.MODIFYEND, this.features_, evt));
-    this.modified_ = false;
-  }
-  return false;
-};
-
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} and may modify the
- * geometry.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.Modify}
- * @api
- */
-ol.interaction.Modify.handleEvent = function(mapBrowserEvent) {
-  if (!(mapBrowserEvent instanceof ol.MapBrowserPointerEvent)) {
-    return true;
-  }
-  this.lastPointerEvent_ = mapBrowserEvent;
-
-  var handled;
-  if (!mapBrowserEvent.map.getView().getHints()[ol.View.Hint.INTERACTING] &&
-      mapBrowserEvent.type == ol.MapBrowserEvent.EventType.POINTERMOVE &&
-      !this.handlingDownUpSequence) {
-    this.handlePointerMove_(mapBrowserEvent);
-  }
-  if (this.vertexFeature_ && this.deleteCondition_(mapBrowserEvent)) {
-    if (mapBrowserEvent.type != ol.MapBrowserEvent.EventType.SINGLECLICK ||
-        !this.ignoreNextSingleClick_) {
-      handled = this.removePoint();
-    } else {
-      handled = true;
-    }
-  }
-
-  if (mapBrowserEvent.type == ol.MapBrowserEvent.EventType.SINGLECLICK) {
-    this.ignoreNextSingleClick_ = false;
-  }
-
-  return ol.interaction.Pointer.handleEvent.call(this, mapBrowserEvent) &&
-      !handled;
-};
-
-
-/**
- * @param {ol.MapBrowserEvent} evt Event.
- * @private
- */
-ol.interaction.Modify.prototype.handlePointerMove_ = function(evt) {
-  this.lastPixel_ = evt.pixel;
-  this.handlePointerAtPixel_(evt.pixel, evt.map);
-};
-
-
-/**
- * @param {ol.Pixel} pixel Pixel
- * @param {ol.Map} map Map.
- * @private
- */
-ol.interaction.Modify.prototype.handlePointerAtPixel_ = function(pixel, map) {
-  var pixelCoordinate = map.getCoordinateFromPixel(pixel);
-  var sortByDistance = function(a, b) {
-    return ol.coordinate.squaredDistanceToSegment(pixelCoordinate, a.segment) -
-        ol.coordinate.squaredDistanceToSegment(pixelCoordinate, b.segment);
-  };
-
-  var lowerLeft = map.getCoordinateFromPixel(
-      [pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]);
-  var upperRight = map.getCoordinateFromPixel(
-      [pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]);
-  var box = ol.extent.boundingExtent([lowerLeft, upperRight]);
-
-  var rBush = this.rBush_;
-  var nodes = rBush.getInExtent(box);
-  if (nodes.length > 0) {
-    nodes.sort(sortByDistance);
-    var node = nodes[0];
-    var closestSegment = node.segment;
-    var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate,
-        closestSegment));
-    var vertexPixel = map.getPixelFromCoordinate(vertex);
-    if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <=
-        this.pixelTolerance_) {
-      var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
-      var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
-      var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);
-      var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);
-      var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
-      this.snappedToVertex_ = dist <= this.pixelTolerance_;
-      if (this.snappedToVertex_) {
-        vertex = squaredDist1 > squaredDist2 ?
-            closestSegment[1] : closestSegment[0];
-      }
-      this.createOrUpdateVertexFeature_(vertex);
-      var vertexSegments = {};
-      vertexSegments[ol.getUid(closestSegment)] = true;
-      var segment;
-      for (var i = 1, ii = nodes.length; i < ii; ++i) {
-        segment = nodes[i].segment;
-        if ((ol.coordinate.equals(closestSegment[0], segment[0]) &&
-            ol.coordinate.equals(closestSegment[1], segment[1]) ||
-            (ol.coordinate.equals(closestSegment[0], segment[1]) &&
-            ol.coordinate.equals(closestSegment[1], segment[0])))) {
-          vertexSegments[ol.getUid(segment)] = true;
-        } else {
-          break;
-        }
-      }
-      this.vertexSegments_ = vertexSegments;
-      return;
-    }
-  }
-  if (this.vertexFeature_) {
-    this.overlay_.getSource().removeFeature(this.vertexFeature_);
-    this.vertexFeature_ = null;
-  }
-};
-
-
-/**
- * @param {ol.ModifySegmentDataType} segmentData Segment data.
- * @param {ol.Coordinate} vertex Vertex.
- * @private
- */
-ol.interaction.Modify.prototype.insertVertex_ = function(segmentData, vertex) {
-  var segment = segmentData.segment;
-  var feature = segmentData.feature;
-  var geometry = segmentData.geometry;
-  var depth = segmentData.depth;
-  var index = /** @type {number} */ (segmentData.index);
-  var coordinates;
-
-  while (vertex.length < geometry.getStride()) {
-    vertex.push(0);
-  }
-
-  switch (geometry.getType()) {
-    case ol.geom.GeometryType.MULTI_LINE_STRING:
-      coordinates = geometry.getCoordinates();
-      coordinates[depth[0]].splice(index + 1, 0, vertex);
-      break;
-    case ol.geom.GeometryType.POLYGON:
-      coordinates = geometry.getCoordinates();
-      coordinates[depth[0]].splice(index + 1, 0, vertex);
-      break;
-    case ol.geom.GeometryType.MULTI_POLYGON:
-      coordinates = geometry.getCoordinates();
-      coordinates[depth[1]][depth[0]].splice(index + 1, 0, vertex);
-      break;
-    case ol.geom.GeometryType.LINE_STRING:
-      coordinates = geometry.getCoordinates();
-      coordinates.splice(index + 1, 0, vertex);
-      break;
-    default:
-      return;
-  }
-
-  this.setGeometryCoordinates_(geometry, coordinates);
-  var rTree = this.rBush_;
-  rTree.remove(segmentData);
-  this.updateSegmentIndices_(geometry, index, depth, 1);
-  var newSegmentData = /** @type {ol.ModifySegmentDataType} */ ({
-    segment: [segment[0], vertex],
-    feature: feature,
-    geometry: geometry,
-    depth: depth,
-    index: index
-  });
-  rTree.insert(ol.extent.boundingExtent(newSegmentData.segment),
-      newSegmentData);
-  this.dragSegments_.push([newSegmentData, 1]);
-
-  var newSegmentData2 = /** @type {ol.ModifySegmentDataType} */ ({
-    segment: [vertex, segment[1]],
-    feature: feature,
-    geometry: geometry,
-    depth: depth,
-    index: index + 1
-  });
-  rTree.insert(ol.extent.boundingExtent(newSegmentData2.segment),
-      newSegmentData2);
-  this.dragSegments_.push([newSegmentData2, 0]);
-  this.ignoreNextSingleClick_ = true;
-};
-
-/**
- * Removes the vertex currently being pointed.
- * @return {boolean} True when a vertex was removed.
- * @api
- */
-ol.interaction.Modify.prototype.removePoint = function() {
-  var handled = false;
-  if (this.lastPointerEvent_ && this.lastPointerEvent_.type != ol.MapBrowserEvent.EventType.POINTERDRAG) {
-    var evt = this.lastPointerEvent_;
-    this.willModifyFeatures_(evt);
-    handled = this.removeVertex_();
-    this.dispatchEvent(new ol.interaction.Modify.Event(
-        ol.interaction.Modify.EventType.MODIFYEND, this.features_, evt));
-    this.modified_ = false;
-  }
-  return handled;
-};
-
-/**
- * Removes a vertex from all matching features.
- * @return {boolean} True when a vertex was removed.
- * @private
- */
-ol.interaction.Modify.prototype.removeVertex_ = function() {
-  var dragSegments = this.dragSegments_;
-  var segmentsByFeature = {};
-  var deleted = false;
-  var component, coordinates, dragSegment, geometry, i, index, left;
-  var newIndex, right, segmentData, uid;
-  for (i = dragSegments.length - 1; i >= 0; --i) {
-    dragSegment = dragSegments[i];
-    segmentData = dragSegment[0];
-    uid = ol.getUid(segmentData.feature);
-    if (segmentData.depth) {
-      // separate feature components
-      uid += '-' + segmentData.depth.join('-');
-    }
-    if (!(uid in segmentsByFeature)) {
-      segmentsByFeature[uid] = {};
-    }
-    if (dragSegment[1] === 0) {
-      segmentsByFeature[uid].right = segmentData;
-      segmentsByFeature[uid].index = segmentData.index;
-    } else if (dragSegment[1] == 1) {
-      segmentsByFeature[uid].left = segmentData;
-      segmentsByFeature[uid].index = segmentData.index + 1;
-    }
-
-  }
-  for (uid in segmentsByFeature) {
-    right = segmentsByFeature[uid].right;
-    left = segmentsByFeature[uid].left;
-    index = segmentsByFeature[uid].index;
-    newIndex = index - 1;
-    if (left !== undefined) {
-      segmentData = left;
-    } else {
-      segmentData = right;
-    }
-    if (newIndex < 0) {
-      newIndex = 0;
-    }
-    geometry = segmentData.geometry;
-    coordinates = geometry.getCoordinates();
-    component = coordinates;
-    deleted = false;
-    switch (geometry.getType()) {
-      case ol.geom.GeometryType.MULTI_LINE_STRING:
-        if (coordinates[segmentData.depth[0]].length > 2) {
-          coordinates[segmentData.depth[0]].splice(index, 1);
-          deleted = true;
-        }
-        break;
-      case ol.geom.GeometryType.LINE_STRING:
-        if (coordinates.length > 2) {
-          coordinates.splice(index, 1);
-          deleted = true;
-        }
-        break;
-      case ol.geom.GeometryType.MULTI_POLYGON:
-        component = component[segmentData.depth[1]];
-        /* falls through */
-      case ol.geom.GeometryType.POLYGON:
-        component = component[segmentData.depth[0]];
-        if (component.length > 4) {
-          if (index == component.length - 1) {
-            index = 0;
-          }
-          component.splice(index, 1);
-          deleted = true;
-          if (index === 0) {
-            // close the ring again
-            component.pop();
-            component.push(component[0]);
-            newIndex = component.length - 1;
-          }
-        }
-        break;
-      default:
-        // pass
-    }
-
-    if (deleted) {
-      this.setGeometryCoordinates_(geometry, coordinates);
-      var segments = [];
-      if (left !== undefined) {
-        this.rBush_.remove(left);
-        segments.push(left.segment[0]);
-      }
-      if (right !== undefined) {
-        this.rBush_.remove(right);
-        segments.push(right.segment[1]);
-      }
-      if (left !== undefined && right !== undefined) {
-        ol.DEBUG && console.assert(newIndex >= 0, 'newIndex should be larger than 0');
-
-        var newSegmentData = /** @type {ol.ModifySegmentDataType} */ ({
-          depth: segmentData.depth,
-          feature: segmentData.feature,
-          geometry: segmentData.geometry,
-          index: newIndex,
-          segment: segments
-        });
-        this.rBush_.insert(ol.extent.boundingExtent(newSegmentData.segment),
-            newSegmentData);
-      }
-      this.updateSegmentIndices_(geometry, index, segmentData.depth, -1);
-      if (this.vertexFeature_) {
-        this.overlay_.getSource().removeFeature(this.vertexFeature_);
-        this.vertexFeature_ = null;
-      }
-    }
-
-  }
-  return deleted;
-};
-
-
-/**
- * @param {ol.geom.SimpleGeometry} geometry Geometry.
- * @param {Array} coordinates Coordinates.
- * @private
- */
-ol.interaction.Modify.prototype.setGeometryCoordinates_ = function(geometry, coordinates) {
-  this.changingFeature_ = true;
-  geometry.setCoordinates(coordinates);
-  this.changingFeature_ = false;
-};
-
-
-/**
- * @param {ol.geom.SimpleGeometry} geometry Geometry.
- * @param {number} index Index.
- * @param {Array.<number>|undefined} depth Depth.
- * @param {number} delta Delta (1 or -1).
- * @private
- */
-ol.interaction.Modify.prototype.updateSegmentIndices_ = function(
-    geometry, index, depth, delta) {
-  this.rBush_.forEachInExtent(geometry.getExtent(), function(segmentDataMatch) {
-    if (segmentDataMatch.geometry === geometry &&
-        (depth === undefined || segmentDataMatch.depth === undefined ||
-        ol.array.equals(segmentDataMatch.depth, depth)) &&
-        segmentDataMatch.index > index) {
-      segmentDataMatch.index += delta;
-    }
-  });
-};
-
-
-/**
- * @return {ol.StyleFunction} Styles.
- */
-ol.interaction.Modify.getDefaultStyleFunction = function() {
-  var style = ol.style.Style.createDefaultEditing();
-  return function(feature, resolution) {
-    return style[ol.geom.GeometryType.POINT];
-  };
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.interaction.Modify} instances are instances of
- * this type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.ModifyEvent}
- * @param {ol.interaction.Modify.EventType} type Type.
- * @param {ol.Collection.<ol.Feature>} features The features modified.
- * @param {ol.MapBrowserPointerEvent} mapBrowserPointerEvent Associated
- *     {@link ol.MapBrowserPointerEvent}.
- */
-ol.interaction.Modify.Event = function(type, features, mapBrowserPointerEvent) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The features being modified.
-   * @type {ol.Collection.<ol.Feature>}
-   * @api
-   */
-  this.features = features;
-
-  /**
-   * Associated {@link ol.MapBrowserEvent}.
-   * @type {ol.MapBrowserEvent}
-   * @api
-   */
-  this.mapBrowserEvent = mapBrowserPointerEvent;
-};
-ol.inherits(ol.interaction.Modify.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.interaction.Modify.EventType = {
-  /**
-   * Triggered upon feature modification start
-   * @event ol.interaction.Modify.Event#modifystart
-   * @api
-   */
-  MODIFYSTART: 'modifystart',
-  /**
-   * Triggered upon feature modification end
-   * @event ol.interaction.Modify.Event#modifyend
-   * @api
-   */
-  MODIFYEND: 'modifyend'
-};
-
-goog.provide('ol.interaction.Select');
-
-goog.require('ol');
-goog.require('ol.functions');
-goog.require('ol.Collection');
-goog.require('ol.array');
-goog.require('ol.events');
-goog.require('ol.events.Event');
-goog.require('ol.events.condition');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.layer.Vector');
-goog.require('ol.obj');
-goog.require('ol.source.Vector');
-goog.require('ol.style.Style');
-
-
-/**
- * @classdesc
- * Interaction for selecting vector features. By default, selected features are
- * styled differently, so this interaction can be used for visual highlighting,
- * as well as selecting features for other actions, such as modification or
- * output. There are three ways of controlling which features are selected:
- * using the browser event as defined by the `condition` and optionally the
- * `toggle`, `add`/`remove`, and `multi` options; a `layers` filter; and a
- * further feature filter using the `filter` option.
- *
- * Selected features are added to an internal unmanaged layer.
- *
- * @constructor
- * @extends {ol.interaction.Interaction}
- * @param {olx.interaction.SelectOptions=} opt_options Options.
- * @fires ol.interaction.Select.Event
- * @api stable
- */
-ol.interaction.Select = function(opt_options) {
-
-  ol.interaction.Interaction.call(this, {
-    handleEvent: ol.interaction.Select.handleEvent
-  });
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.condition_ = options.condition ?
-      options.condition : ol.events.condition.singleClick;
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.addCondition_ = options.addCondition ?
-      options.addCondition : ol.events.condition.never;
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.removeCondition_ = options.removeCondition ?
-      options.removeCondition : ol.events.condition.never;
-
-  /**
-   * @private
-   * @type {ol.EventsConditionType}
-   */
-  this.toggleCondition_ = options.toggleCondition ?
-      options.toggleCondition : ol.events.condition.shiftKeyOnly;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.multi_ = options.multi ? options.multi : false;
-
-  /**
-   * @private
-   * @type {ol.SelectFilterFunction}
-   */
-  this.filter_ = options.filter ? options.filter :
-      ol.functions.TRUE;
-
-  var featureOverlay = new ol.layer.Vector({
-    source: new ol.source.Vector({
-      useSpatialIndex: false,
-      features: options.features,
-      wrapX: options.wrapX
-    }),
-    style: options.style ? options.style :
-        ol.interaction.Select.getDefaultStyleFunction(),
-    updateWhileAnimating: true,
-    updateWhileInteracting: true
-  });
-
-  /**
-   * @private
-   * @type {ol.layer.Vector}
-   */
-  this.featureOverlay_ = featureOverlay;
-
-  /** @type {function(ol.layer.Layer): boolean} */
-  var layerFilter;
-  if (options.layers) {
-    if (typeof options.layers === 'function') {
-      layerFilter = options.layers;
-    } else {
-      var layers = options.layers;
-      layerFilter = function(layer) {
-        return ol.array.includes(layers, layer);
-      };
-    }
-  } else {
-    layerFilter = ol.functions.TRUE;
-  }
-
-  /**
-   * @private
-   * @type {function(ol.layer.Layer): boolean}
-   */
-  this.layerFilter_ = layerFilter;
-
-  /**
-   * An association between selected feature (key)
-   * and layer (value)
-   * @private
-   * @type {Object.<number, ol.layer.Layer>}
-   */
-  this.featureLayerAssociation_ = {};
-
-  var features = this.featureOverlay_.getSource().getFeaturesCollection();
-  ol.events.listen(features, ol.Collection.EventType.ADD,
-      this.addFeature_, this);
-  ol.events.listen(features, ol.Collection.EventType.REMOVE,
-      this.removeFeature_, this);
-
-};
-ol.inherits(ol.interaction.Select, ol.interaction.Interaction);
-
-
-/**
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @param {ol.layer.Layer} layer Layer.
- * @private
- */
-ol.interaction.Select.prototype.addFeatureLayerAssociation_ = function(feature, layer) {
-  var key = ol.getUid(feature);
-  this.featureLayerAssociation_[key] = layer;
-};
-
-
-/**
- * Get the selected features.
- * @return {ol.Collection.<ol.Feature>} Features collection.
- * @api stable
- */
-ol.interaction.Select.prototype.getFeatures = function() {
-  return this.featureOverlay_.getSource().getFeaturesCollection();
-};
-
-
-/**
- * Returns the associated {@link ol.layer.Vector vectorlayer} of
- * the (last) selected feature. Note that this will not work with any
- * programmatic method like pushing features to
- * {@link ol.interaction.Select#getFeatures collection}.
- * @param {ol.Feature|ol.render.Feature} feature Feature
- * @return {ol.layer.Vector} Layer.
- * @api
- */
-ol.interaction.Select.prototype.getLayer = function(feature) {
-  var key = ol.getUid(feature);
-  return /** @type {ol.layer.Vector} */ (this.featureLayerAssociation_[key]);
-};
-
-
-/**
- * Handles the {@link ol.MapBrowserEvent map browser event} and may change the
- * selected state of features.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @this {ol.interaction.Select}
- * @api
- */
-ol.interaction.Select.handleEvent = function(mapBrowserEvent) {
-  if (!this.condition_(mapBrowserEvent)) {
-    return true;
-  }
-  var add = this.addCondition_(mapBrowserEvent);
-  var remove = this.removeCondition_(mapBrowserEvent);
-  var toggle = this.toggleCondition_(mapBrowserEvent);
-  var set = !add && !remove && !toggle;
-  var map = mapBrowserEvent.map;
-  var features = this.featureOverlay_.getSource().getFeaturesCollection();
-  var deselected = [];
-  var selected = [];
-  if (set) {
-    // Replace the currently selected feature(s) with the feature(s) at the
-    // pixel, or clear the selected feature(s) if there is no feature at
-    // the pixel.
-    ol.obj.clear(this.featureLayerAssociation_);
-    map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
-        /**
-         * @param {ol.Feature|ol.render.Feature} feature Feature.
-         * @param {ol.layer.Layer} layer Layer.
-         * @return {boolean|undefined} Continue to iterate over the features.
-         */
-        function(feature, layer) {
-          if (this.filter_(feature, layer)) {
-            selected.push(feature);
-            this.addFeatureLayerAssociation_(feature, layer);
-            return !this.multi_;
-          }
-        }, this, this.layerFilter_);
-    var i;
-    for (i = features.getLength() - 1; i >= 0; --i) {
-      var feature = features.item(i);
-      var index = selected.indexOf(feature);
-      if (index > -1) {
-        // feature is already selected
-        selected.splice(index, 1);
-      } else {
-        features.remove(feature);
-        deselected.push(feature);
-      }
-    }
-    if (selected.length !== 0) {
-      features.extend(selected);
-    }
-  } else {
-    // Modify the currently selected feature(s).
-    map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
-        /**
-         * @param {ol.Feature|ol.render.Feature} feature Feature.
-         * @param {ol.layer.Layer} layer Layer.
-         * @return {boolean|undefined} Continue to iterate over the features.
-         */
-        function(feature, layer) {
-          if (this.filter_(feature, layer)) {
-            if ((add || toggle) &&
-                !ol.array.includes(features.getArray(), feature)) {
-              selected.push(feature);
-              this.addFeatureLayerAssociation_(feature, layer);
-            } else if ((remove || toggle) &&
-                ol.array.includes(features.getArray(), feature)) {
-              deselected.push(feature);
-              this.removeFeatureLayerAssociation_(feature);
-            }
-            return !this.multi_;
-          }
-        }, this, this.layerFilter_);
-    var j;
-    for (j = deselected.length - 1; j >= 0; --j) {
-      features.remove(deselected[j]);
-    }
-    features.extend(selected);
-  }
-  if (selected.length > 0 || deselected.length > 0) {
-    this.dispatchEvent(
-        new ol.interaction.Select.Event(ol.interaction.Select.EventType.SELECT,
-            selected, deselected, mapBrowserEvent));
-  }
-  return ol.events.condition.pointerMove(mapBrowserEvent);
-};
-
-
-/**
- * Remove the interaction from its current map, if any,  and attach it to a new
- * map, if any. Pass `null` to just remove the interaction from the current map.
- * @param {ol.Map} map Map.
- * @api stable
- */
-ol.interaction.Select.prototype.setMap = function(map) {
-  var currentMap = this.getMap();
-  var selectedFeatures =
-      this.featureOverlay_.getSource().getFeaturesCollection();
-  if (currentMap) {
-    selectedFeatures.forEach(currentMap.unskipFeature, currentMap);
-  }
-  ol.interaction.Interaction.prototype.setMap.call(this, map);
-  this.featureOverlay_.setMap(map);
-  if (map) {
-    selectedFeatures.forEach(map.skipFeature, map);
-  }
-};
-
-
-/**
- * @return {ol.StyleFunction} Styles.
- */
-ol.interaction.Select.getDefaultStyleFunction = function() {
-  var styles = ol.style.Style.createDefaultEditing();
-  ol.array.extend(styles[ol.geom.GeometryType.POLYGON],
-      styles[ol.geom.GeometryType.LINE_STRING]);
-  ol.array.extend(styles[ol.geom.GeometryType.GEOMETRY_COLLECTION],
-      styles[ol.geom.GeometryType.LINE_STRING]);
-
-  return function(feature, resolution) {
-    if (!feature.getGeometry()) {
-      return null;
-    }
-    return styles[feature.getGeometry().getType()];
-  };
-};
-
-
-/**
- * @param {ol.Collection.Event} evt Event.
- * @private
- */
-ol.interaction.Select.prototype.addFeature_ = function(evt) {
-  var map = this.getMap();
-  if (map) {
-    map.skipFeature(/** @type {ol.Feature} */ (evt.element));
-  }
-};
-
-
-/**
- * @param {ol.Collection.Event} evt Event.
- * @private
- */
-ol.interaction.Select.prototype.removeFeature_ = function(evt) {
-  var map = this.getMap();
-  if (map) {
-    map.unskipFeature(/** @type {ol.Feature} */ (evt.element));
-  }
-};
-
-
-/**
- * @param {ol.Feature|ol.render.Feature} feature Feature.
- * @private
- */
-ol.interaction.Select.prototype.removeFeatureLayerAssociation_ = function(feature) {
-  var key = ol.getUid(feature);
-  delete this.featureLayerAssociation_[key];
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.interaction.Select} instances are instances of
- * this type.
- *
- * @param {ol.interaction.Select.EventType} type The event type.
- * @param {Array.<ol.Feature>} selected Selected features.
- * @param {Array.<ol.Feature>} deselected Deselected features.
- * @param {ol.MapBrowserEvent} mapBrowserEvent Associated
- *     {@link ol.MapBrowserEvent}.
- * @implements {oli.SelectEvent}
- * @extends {ol.events.Event}
- * @constructor
- */
-ol.interaction.Select.Event = function(type, selected, deselected, mapBrowserEvent) {
-  ol.events.Event.call(this, type);
-
-  /**
-   * Selected features array.
-   * @type {Array.<ol.Feature>}
-   * @api
-   */
-  this.selected = selected;
-
-  /**
-   * Deselected features array.
-   * @type {Array.<ol.Feature>}
-   * @api
-   */
-  this.deselected = deselected;
-
-  /**
-   * Associated {@link ol.MapBrowserEvent}.
-   * @type {ol.MapBrowserEvent}
-   * @api
-   */
-  this.mapBrowserEvent = mapBrowserEvent;
-};
-ol.inherits(ol.interaction.Select.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.interaction.Select.EventType = {
-  /**
-   * Triggered when feature(s) has been (de)selected.
-   * @event ol.interaction.Select.Event#select
-   * @api
-   */
-  SELECT: 'select'
-};
-
-goog.provide('ol.interaction.Snap');
-
-goog.require('ol');
-goog.require('ol.Collection');
-goog.require('ol.Object');
-goog.require('ol.Observable');
-goog.require('ol.coordinate');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.interaction.Pointer');
-goog.require('ol.functions');
-goog.require('ol.obj');
-goog.require('ol.source.Vector');
-goog.require('ol.structs.RBush');
-
-
-/**
- * @classdesc
- * Handles snapping of vector features while modifying or drawing them.  The
- * features can come from a {@link ol.source.Vector} or {@link ol.Collection}
- * Any interaction object that allows the user to interact
- * with the features using the mouse can benefit from the snapping, as long
- * as it is added before.
- *
- * The snap interaction modifies map browser event `coordinate` and `pixel`
- * properties to force the snap to occur to any interaction that them.
- *
- * Example:
- *
- *     var snap = new ol.interaction.Snap({
- *       source: source
- *     });
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @param {olx.interaction.SnapOptions=} opt_options Options.
- * @api
- */
-ol.interaction.Snap = function(opt_options) {
-
-  ol.interaction.Pointer.call(this, {
-    handleEvent: ol.interaction.Snap.handleEvent_,
-    handleDownEvent: ol.functions.TRUE,
-    handleUpEvent: ol.interaction.Snap.handleUpEvent_
-  });
-
-  var options = opt_options ? opt_options : {};
-
-  /**
-   * @type {ol.source.Vector}
-   * @private
-   */
-  this.source_ = options.source ? options.source : null;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.vertex_ = options.vertex !== undefined ? options.vertex : true;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.edge_ = options.edge !== undefined ? options.edge : true;
-
-  /**
-   * @type {ol.Collection.<ol.Feature>}
-   * @private
-   */
-  this.features_ = options.features ? options.features : null;
-
-  /**
-   * @type {Array.<ol.EventsKey>}
-   * @private
-   */
-  this.featuresListenerKeys_ = [];
-
-  /**
-   * @type {Object.<number, ol.EventsKey>}
-   * @private
-   */
-  this.geometryChangeListenerKeys_ = {};
-
-  /**
-   * @type {Object.<number, ol.EventsKey>}
-   * @private
-   */
-  this.geometryModifyListenerKeys_ = {};
-
-  /**
-   * Extents are preserved so indexed segment can be quickly removed
-   * when its feature geometry changes
-   * @type {Object.<number, ol.Extent>}
-   * @private
-   */
-  this.indexedFeaturesExtents_ = {};
-
-  /**
-   * If a feature geometry changes while a pointer drag|move event occurs, the
-   * feature doesn't get updated right away.  It will be at the next 'pointerup'
-   * event fired.
-   * @type {Object.<number, ol.Feature>}
-   * @private
-   */
-  this.pendingFeatures_ = {};
-
-  /**
-   * Used for distance sorting in sortByDistance_
-   * @type {ol.Coordinate}
-   * @private
-   */
-  this.pixelCoordinate_ = null;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.pixelTolerance_ = options.pixelTolerance !== undefined ?
-      options.pixelTolerance : 10;
-
-  /**
-   * @type {function(ol.SnapSegmentDataType, ol.SnapSegmentDataType): number}
-   * @private
-   */
-  this.sortByDistance_ = ol.interaction.Snap.sortByDistance.bind(this);
-
-
-  /**
-  * Segment RTree for each layer
-  * @type {ol.structs.RBush.<ol.SnapSegmentDataType>}
-  * @private
-  */
-  this.rBush_ = new ol.structs.RBush();
-
-
-  /**
-  * @const
-  * @private
-  * @type {Object.<string, function(ol.Feature, ol.geom.Geometry)>}
-  */
-  this.SEGMENT_WRITERS_ = {
-    'Point': this.writePointGeometry_,
-    'LineString': this.writeLineStringGeometry_,
-    'LinearRing': this.writeLineStringGeometry_,
-    'Polygon': this.writePolygonGeometry_,
-    'MultiPoint': this.writeMultiPointGeometry_,
-    'MultiLineString': this.writeMultiLineStringGeometry_,
-    'MultiPolygon': this.writeMultiPolygonGeometry_,
-    'GeometryCollection': this.writeGeometryCollectionGeometry_
-  };
-};
-ol.inherits(ol.interaction.Snap, ol.interaction.Pointer);
-
-
-/**
- * Add a feature to the collection of features that we may snap to.
- * @param {ol.Feature} feature Feature.
- * @param {boolean=} opt_listen Whether to listen to the geometry change or not
- *     Defaults to `true`.
- * @api
- */
-ol.interaction.Snap.prototype.addFeature = function(feature, opt_listen) {
-  var listen = opt_listen !== undefined ? opt_listen : true;
-  var feature_uid = ol.getUid(feature);
-  var geometry = feature.getGeometry();
-  if (geometry) {
-    var segmentWriter = this.SEGMENT_WRITERS_[geometry.getType()];
-    if (segmentWriter) {
-      this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent(
-          ol.extent.createEmpty());
-      segmentWriter.call(this, feature, geometry);
-
-      if (listen) {
-        this.geometryModifyListenerKeys_[feature_uid] = ol.events.listen(
-            geometry,
-            ol.events.EventType.CHANGE,
-            this.handleGeometryModify_.bind(this, feature),
-            this);
-      }
-    }
-  }
-
-  if (listen) {
-    this.geometryChangeListenerKeys_[feature_uid] = ol.events.listen(
-        feature,
-        ol.Object.getChangeEventType(feature.getGeometryName()),
-        this.handleGeometryChange_, this);
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- * @private
- */
-ol.interaction.Snap.prototype.forEachFeatureAdd_ = function(feature) {
-  this.addFeature(feature);
-};
-
-
-/**
- * @param {ol.Feature} feature Feature.
- * @private
- */
-ol.interaction.Snap.prototype.forEachFeatureRemove_ = function(feature) {
-  this.removeFeature(feature);
-};
-
-
-/**
- * @return {ol.Collection.<ol.Feature>|Array.<ol.Feature>} Features.
- * @private
- */
-ol.interaction.Snap.prototype.getFeatures_ = function() {
-  var features;
-  if (this.features_) {
-    features = this.features_;
-  } else if (this.source_) {
-    features = this.source_.getFeatures();
-  }
-  return /** @type {!Array.<ol.Feature>|!ol.Collection.<ol.Feature>} */ (features);
-};
-
-
-/**
- * @param {ol.source.Vector.Event|ol.Collection.Event} evt Event.
- * @private
- */
-ol.interaction.Snap.prototype.handleFeatureAdd_ = function(evt) {
-  var feature;
-  if (evt instanceof ol.source.Vector.Event) {
-    feature = evt.feature;
-  } else if (evt instanceof ol.Collection.Event) {
-    feature = evt.element;
-  }
-  this.addFeature(/** @type {ol.Feature} */ (feature));
-};
-
-
-/**
- * @param {ol.source.Vector.Event|ol.Collection.Event} evt Event.
- * @private
- */
-ol.interaction.Snap.prototype.handleFeatureRemove_ = function(evt) {
-  var feature;
-  if (evt instanceof ol.source.Vector.Event) {
-    feature = evt.feature;
-  } else if (evt instanceof ol.Collection.Event) {
-    feature = evt.element;
-  }
-  this.removeFeature(/** @type {ol.Feature} */ (feature));
-};
-
-
-/**
- * @param {ol.events.Event} evt Event.
- * @private
- */
-ol.interaction.Snap.prototype.handleGeometryChange_ = function(evt) {
-  var feature = /** @type {ol.Feature} */ (evt.target);
-  this.removeFeature(feature, true);
-  this.addFeature(feature, true);
-};
-
-
-/**
- * @param {ol.Feature} feature Feature which geometry was modified.
- * @param {ol.events.Event} evt Event.
- * @private
- */
-ol.interaction.Snap.prototype.handleGeometryModify_ = function(feature, evt) {
-  if (this.handlingDownUpSequence) {
-    var uid = ol.getUid(feature);
-    if (!(uid in this.pendingFeatures_)) {
-      this.pendingFeatures_[uid] = feature;
-    }
-  } else {
-    this.updateFeature_(feature);
-  }
-};
-
-
-/**
- * Remove a feature from the collection of features that we may snap to.
- * @param {ol.Feature} feature Feature
- * @param {boolean=} opt_unlisten Whether to unlisten to the geometry change
- *     or not. Defaults to `true`.
- * @api
- */
-ol.interaction.Snap.prototype.removeFeature = function(feature, opt_unlisten) {
-  var unlisten = opt_unlisten !== undefined ? opt_unlisten : true;
-  var feature_uid = ol.getUid(feature);
-  var extent = this.indexedFeaturesExtents_[feature_uid];
-  if (extent) {
-    var rBush = this.rBush_;
-    var i, nodesToRemove = [];
-    rBush.forEachInExtent(extent, function(node) {
-      if (feature === node.feature) {
-        nodesToRemove.push(node);
-      }
-    });
-    for (i = nodesToRemove.length - 1; i >= 0; --i) {
-      rBush.remove(nodesToRemove[i]);
-    }
-    if (unlisten) {
-      ol.Observable.unByKey(this.geometryModifyListenerKeys_[feature_uid]);
-      delete this.geometryModifyListenerKeys_[feature_uid];
-    }
-  }
-
-  if (unlisten) {
-    ol.Observable.unByKey(this.geometryChangeListenerKeys_[feature_uid]);
-    delete this.geometryChangeListenerKeys_[feature_uid];
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.Snap.prototype.setMap = function(map) {
-  var currentMap = this.getMap();
-  var keys = this.featuresListenerKeys_;
-  var features = this.getFeatures_();
-
-  if (currentMap) {
-    keys.forEach(ol.Observable.unByKey);
-    keys.length = 0;
-    features.forEach(this.forEachFeatureRemove_, this);
-  }
-  ol.interaction.Pointer.prototype.setMap.call(this, map);
-
-  if (map) {
-    if (this.features_) {
-      keys.push(
-        ol.events.listen(this.features_, ol.Collection.EventType.ADD,
-            this.handleFeatureAdd_, this),
-        ol.events.listen(this.features_, ol.Collection.EventType.REMOVE,
-            this.handleFeatureRemove_, this)
-      );
-    } else if (this.source_) {
-      keys.push(
-        ol.events.listen(this.source_, ol.source.Vector.EventType.ADDFEATURE,
-            this.handleFeatureAdd_, this),
-        ol.events.listen(this.source_, ol.source.Vector.EventType.REMOVEFEATURE,
-            this.handleFeatureRemove_, this)
-      );
-    }
-    features.forEach(this.forEachFeatureAdd_, this);
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.interaction.Snap.prototype.shouldStopEvent = ol.functions.FALSE;
-
-
-/**
- * @param {ol.Pixel} pixel Pixel
- * @param {ol.Coordinate} pixelCoordinate Coordinate
- * @param {ol.Map} map Map.
- * @return {ol.SnapResultType} Snap result
- */
-ol.interaction.Snap.prototype.snapTo = function(pixel, pixelCoordinate, map) {
-
-  var lowerLeft = map.getCoordinateFromPixel(
-      [pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]);
-  var upperRight = map.getCoordinateFromPixel(
-      [pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]);
-  var box = ol.extent.boundingExtent([lowerLeft, upperRight]);
-
-  var segments = this.rBush_.getInExtent(box);
-  var snappedToVertex = false;
-  var snapped = false;
-  var vertex = null;
-  var vertexPixel = null;
-  var dist, pixel1, pixel2, squaredDist1, squaredDist2;
-  if (segments.length > 0) {
-    this.pixelCoordinate_ = pixelCoordinate;
-    segments.sort(this.sortByDistance_);
-    var closestSegment = segments[0].segment;
-    if (this.vertex_ && !this.edge_) {
-      pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
-      pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
-      squaredDist1 = ol.coordinate.squaredDistance(pixel, pixel1);
-      squaredDist2 = ol.coordinate.squaredDistance(pixel, pixel2);
-      dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
-      snappedToVertex = dist <= this.pixelTolerance_;
-      if (snappedToVertex) {
-        snapped = true;
-        vertex = squaredDist1 > squaredDist2 ?
-            closestSegment[1] : closestSegment[0];
-        vertexPixel = map.getPixelFromCoordinate(vertex);
-      }
-    } else if (this.edge_) {
-      vertex = (ol.coordinate.closestOnSegment(pixelCoordinate,
-          closestSegment));
-      vertexPixel = map.getPixelFromCoordinate(vertex);
-      if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <=
-          this.pixelTolerance_) {
-        snapped = true;
-        if (this.vertex_) {
-          pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
-          pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
-          squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);
-          squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);
-          dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
-          snappedToVertex = dist <= this.pixelTolerance_;
-          if (snappedToVertex) {
-            vertex = squaredDist1 > squaredDist2 ?
-                closestSegment[1] : closestSegment[0];
-            vertexPixel = map.getPixelFromCoordinate(vertex);
-          }
-        }
-      }
-    }
-    if (snapped) {
-      vertexPixel = [Math.round(vertexPixel[0]), Math.round(vertexPixel[1])];
-    }
-  }
-  return /** @type {ol.SnapResultType} */ ({
-    snapped: snapped,
-    vertex: vertex,
-    vertexPixel: vertexPixel
-  });
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @private
- */
-ol.interaction.Snap.prototype.updateFeature_ = function(feature) {
-  this.removeFeature(feature, false);
-  this.addFeature(feature, false);
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.GeometryCollection} geometry Geometry.
- * @private
- */
-ol.interaction.Snap.prototype.writeGeometryCollectionGeometry_ = function(feature, geometry) {
-  var i, geometries = geometry.getGeometriesArray();
-  for (i = 0; i < geometries.length; ++i) {
-    this.SEGMENT_WRITERS_[geometries[i].getType()].call(
-        this, feature, geometries[i]);
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.LineString} geometry Geometry.
- * @private
- */
-ol.interaction.Snap.prototype.writeLineStringGeometry_ = function(feature, geometry) {
-  var coordinates = geometry.getCoordinates();
-  var i, ii, segment, segmentData;
-  for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {
-    segment = coordinates.slice(i, i + 2);
-    segmentData = /** @type {ol.SnapSegmentDataType} */ ({
-      feature: feature,
-      segment: segment
-    });
-    this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.MultiLineString} geometry Geometry.
- * @private
- */
-ol.interaction.Snap.prototype.writeMultiLineStringGeometry_ = function(feature, geometry) {
-  var lines = geometry.getCoordinates();
-  var coordinates, i, ii, j, jj, segment, segmentData;
-  for (j = 0, jj = lines.length; j < jj; ++j) {
-    coordinates = lines[j];
-    for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {
-      segment = coordinates.slice(i, i + 2);
-      segmentData = /** @type {ol.SnapSegmentDataType} */ ({
-        feature: feature,
-        segment: segment
-      });
-      this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);
-    }
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.MultiPoint} geometry Geometry.
- * @private
- */
-ol.interaction.Snap.prototype.writeMultiPointGeometry_ = function(feature, geometry) {
-  var points = geometry.getCoordinates();
-  var coordinates, i, ii, segmentData;
-  for (i = 0, ii = points.length; i < ii; ++i) {
-    coordinates = points[i];
-    segmentData = /** @type {ol.SnapSegmentDataType} */ ({
-      feature: feature,
-      segment: [coordinates, coordinates]
-    });
-    this.rBush_.insert(geometry.getExtent(), segmentData);
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.MultiPolygon} geometry Geometry.
- * @private
- */
-ol.interaction.Snap.prototype.writeMultiPolygonGeometry_ = function(feature, geometry) {
-  var polygons = geometry.getCoordinates();
-  var coordinates, i, ii, j, jj, k, kk, rings, segment, segmentData;
-  for (k = 0, kk = polygons.length; k < kk; ++k) {
-    rings = polygons[k];
-    for (j = 0, jj = rings.length; j < jj; ++j) {
-      coordinates = rings[j];
-      for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {
-        segment = coordinates.slice(i, i + 2);
-        segmentData = /** @type {ol.SnapSegmentDataType} */ ({
-          feature: feature,
-          segment: segment
-        });
-        this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);
-      }
-    }
-  }
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.Point} geometry Geometry.
- * @private
- */
-ol.interaction.Snap.prototype.writePointGeometry_ = function(feature, geometry) {
-  var coordinates = geometry.getCoordinates();
-  var segmentData = /** @type {ol.SnapSegmentDataType} */ ({
-    feature: feature,
-    segment: [coordinates, coordinates]
-  });
-  this.rBush_.insert(geometry.getExtent(), segmentData);
-};
-
-
-/**
- * @param {ol.Feature} feature Feature
- * @param {ol.geom.Polygon} geometry Geometry.
- * @private
- */
-ol.interaction.Snap.prototype.writePolygonGeometry_ = function(feature, geometry) {
-  var rings = geometry.getCoordinates();
-  var coordinates, i, ii, j, jj, segment, segmentData;
-  for (j = 0, jj = rings.length; j < jj; ++j) {
-    coordinates = rings[j];
-    for (i = 0, ii = coordinates.length - 1; i < ii; ++i) {
-      segment = coordinates.slice(i, i + 2);
-      segmentData = /** @type {ol.SnapSegmentDataType} */ ({
-        feature: feature,
-        segment: segment
-      });
-      this.rBush_.insert(ol.extent.boundingExtent(segment), segmentData);
-    }
-  }
-};
-
-
-/**
- * Handle all pointer events events.
- * @param {ol.MapBrowserEvent} evt A move event.
- * @return {boolean} Pass the event to other interactions.
- * @this {ol.interaction.Snap}
- * @private
- */
-ol.interaction.Snap.handleEvent_ = function(evt) {
-  var result = this.snapTo(evt.pixel, evt.coordinate, evt.map);
-  if (result.snapped) {
-    evt.coordinate = result.vertex.slice(0, 2);
-    evt.pixel = result.vertexPixel;
-  }
-  return ol.interaction.Pointer.handleEvent.call(this, evt);
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} evt Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.Snap}
- * @private
- */
-ol.interaction.Snap.handleUpEvent_ = function(evt) {
-  var featuresToUpdate = ol.obj.getValues(this.pendingFeatures_);
-  if (featuresToUpdate.length) {
-    featuresToUpdate.forEach(this.updateFeature_, this);
-    this.pendingFeatures_ = {};
-  }
-  return false;
-};
-
-
-/**
- * Sort segments by distance, helper function
- * @param {ol.SnapSegmentDataType} a The first segment data.
- * @param {ol.SnapSegmentDataType} b The second segment data.
- * @return {number} The difference in distance.
- * @this {ol.interaction.Snap}
- */
-ol.interaction.Snap.sortByDistance = function(a, b) {
-  return ol.coordinate.squaredDistanceToSegment(
-      this.pixelCoordinate_, a.segment) -
-      ol.coordinate.squaredDistanceToSegment(
-      this.pixelCoordinate_, b.segment);
-};
-
-goog.provide('ol.interaction.Translate');
-
-goog.require('ol');
-goog.require('ol.events.Event');
-goog.require('ol.functions');
-goog.require('ol.array');
-goog.require('ol.interaction.Pointer');
-
-
-/**
- * @classdesc
- * Interaction for translating (moving) features.
- *
- * @constructor
- * @extends {ol.interaction.Pointer}
- * @fires ol.interaction.Translate.Event
- * @param {olx.interaction.TranslateOptions} options Options.
- * @api
- */
-ol.interaction.Translate = function(options) {
-  ol.interaction.Pointer.call(this, {
-    handleDownEvent: ol.interaction.Translate.handleDownEvent_,
-    handleDragEvent: ol.interaction.Translate.handleDragEvent_,
-    handleMoveEvent: ol.interaction.Translate.handleMoveEvent_,
-    handleUpEvent: ol.interaction.Translate.handleUpEvent_
-  });
-
-
-  /**
-   * @type {string|undefined}
-   * @private
-   */
-  this.previousCursor_ = undefined;
-
-
-  /**
-   * The last position we translated to.
-   * @type {ol.Coordinate}
-   * @private
-   */
-  this.lastCoordinate_ = null;
-
-
-  /**
-   * @type {ol.Collection.<ol.Feature>}
-   * @private
-   */
-  this.features_ = options.features !== undefined ? options.features : null;
-
-  /** @type {function(ol.layer.Layer): boolean} */
-  var layerFilter;
-  if (options.layers) {
-    if (typeof options.layers === 'function') {
-      layerFilter = options.layers;
-    } else {
-      var layers = options.layers;
-      layerFilter = function(layer) {
-        return ol.array.includes(layers, layer);
-      };
-    }
-  } else {
-    layerFilter = ol.functions.TRUE;
-  }
-
-  /**
-   * @private
-   * @type {function(ol.layer.Layer): boolean}
-   */
-  this.layerFilter_ = layerFilter;
-
-  /**
-   * @type {ol.Feature}
-   * @private
-   */
-  this.lastFeature_ = null;
-};
-ol.inherits(ol.interaction.Translate, ol.interaction.Pointer);
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} event Event.
- * @return {boolean} Start drag sequence?
- * @this {ol.interaction.Translate}
- * @private
- */
-ol.interaction.Translate.handleDownEvent_ = function(event) {
-  this.lastFeature_ = this.featuresAtPixel_(event.pixel, event.map);
-  if (!this.lastCoordinate_ && this.lastFeature_) {
-    this.lastCoordinate_ = event.coordinate;
-    ol.interaction.Translate.handleMoveEvent_.call(this, event);
-    this.dispatchEvent(
-        new ol.interaction.Translate.Event(
-            ol.interaction.Translate.EventType.TRANSLATESTART, this.features_,
-            event.coordinate));
-    return true;
-  }
-  return false;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} event Event.
- * @return {boolean} Stop drag sequence?
- * @this {ol.interaction.Translate}
- * @private
- */
-ol.interaction.Translate.handleUpEvent_ = function(event) {
-  if (this.lastCoordinate_) {
-    this.lastCoordinate_ = null;
-    ol.interaction.Translate.handleMoveEvent_.call(this, event);
-    this.dispatchEvent(
-        new ol.interaction.Translate.Event(
-            ol.interaction.Translate.EventType.TRANSLATEEND, this.features_,
-            event.coordinate));
-    return true;
-  }
-  return false;
-};
-
-
-/**
- * @param {ol.MapBrowserPointerEvent} event Event.
- * @this {ol.interaction.Translate}
- * @private
- */
-ol.interaction.Translate.handleDragEvent_ = function(event) {
-  if (this.lastCoordinate_) {
-    var newCoordinate = event.coordinate;
-    var deltaX = newCoordinate[0] - this.lastCoordinate_[0];
-    var deltaY = newCoordinate[1] - this.lastCoordinate_[1];
-
-    if (this.features_) {
-      this.features_.forEach(function(feature) {
-        var geom = feature.getGeometry();
-        geom.translate(deltaX, deltaY);
-        feature.setGeometry(geom);
-      });
-    } else if (this.lastFeature_) {
-      var geom = this.lastFeature_.getGeometry();
-      geom.translate(deltaX, deltaY);
-      this.lastFeature_.setGeometry(geom);
-    }
-
-    this.lastCoordinate_ = newCoordinate;
-    this.dispatchEvent(
-        new ol.interaction.Translate.Event(
-            ol.interaction.Translate.EventType.TRANSLATING, this.features_,
-            newCoordinate));
-  }
-};
-
-
-/**
- * @param {ol.MapBrowserEvent} event Event.
- * @this {ol.interaction.Translate}
- * @private
- */
-ol.interaction.Translate.handleMoveEvent_ = function(event) {
-  var elem = event.map.getTargetElement();
-
-  // Change the cursor to grab/grabbing if hovering any of the features managed
-  // by the interaction
-  if (this.featuresAtPixel_(event.pixel, event.map)) {
-    this.previousCursor_ = elem.style.cursor;
-    // WebKit browsers don't support the grab icons without a prefix
-    elem.style.cursor = this.lastCoordinate_ ?
-        '-webkit-grabbing' : '-webkit-grab';
-
-    // Thankfully, attempting to set the standard ones will silently fail,
-    // keeping the prefixed icons
-    elem.style.cursor = this.lastCoordinate_ ?  'grabbing' : 'grab';
-  } else {
-    elem.style.cursor = this.previousCursor_ !== undefined ?
-        this.previousCursor_ : '';
-    this.previousCursor_ = undefined;
-  }
-};
-
-
-/**
- * Tests to see if the given coordinates intersects any of our selected
- * features.
- * @param {ol.Pixel} pixel Pixel coordinate to test for intersection.
- * @param {ol.Map} map Map to test the intersection on.
- * @return {ol.Feature} Returns the feature found at the specified pixel
- * coordinates.
- * @private
- */
-ol.interaction.Translate.prototype.featuresAtPixel_ = function(pixel, map) {
-  var found = null;
-
-  var intersectingFeature = map.forEachFeatureAtPixel(pixel,
-      function(feature) {
-        return feature;
-      }, this, this.layerFilter_);
-
-  if (this.features_ &&
-      ol.array.includes(this.features_.getArray(), intersectingFeature)) {
-    found = intersectingFeature;
-  }
-
-  return found;
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.interaction.Translate} instances are instances of
- * this type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.interaction.TranslateEvent}
- * @param {ol.interaction.Translate.EventType} type Type.
- * @param {ol.Collection.<ol.Feature>} features The features translated.
- * @param {ol.Coordinate} coordinate The event coordinate.
- */
-ol.interaction.Translate.Event = function(type, features, coordinate) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The features being translated.
-   * @type {ol.Collection.<ol.Feature>}
-   * @api
-   */
-  this.features = features;
-
-  /**
-   * The coordinate of the drag event.
-   * @const
-   * @type {ol.Coordinate}
-   * @api
-   */
-  this.coordinate = coordinate;
-};
-ol.inherits(ol.interaction.Translate.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.interaction.Translate.EventType = {
-  /**
-   * Triggered upon feature translation start.
-   * @event ol.interaction.Translate.Event#translatestart
-   * @api
-   */
-  TRANSLATESTART: 'translatestart',
-  /**
-   * Triggered upon feature translation.
-   * @event ol.interaction.Translate.Event#translating
-   * @api
-   */
-  TRANSLATING: 'translating',
-  /**
-   * Triggered upon feature translation end.
-   * @event ol.interaction.Translate.Event#translateend
-   * @api
-   */
-  TRANSLATEEND: 'translateend'
-};
-
-goog.provide('ol.layer.Heatmap');
-
-goog.require('ol.events');
-goog.require('ol');
-goog.require('ol.Object');
-goog.require('ol.dom');
-goog.require('ol.layer.Vector');
-goog.require('ol.math');
-goog.require('ol.obj');
-goog.require('ol.render.Event');
-goog.require('ol.style.Icon');
-goog.require('ol.style.Style');
-
-
-/**
- * @classdesc
- * Layer for rendering vector data as a heatmap.
- * Note that any property set in the options is set as a {@link ol.Object}
- * property on the layer object; for example, setting `title: 'My Title'` in the
- * options means that `title` is observable, and has get/set accessors.
- *
- * @constructor
- * @extends {ol.layer.Vector}
- * @fires ol.render.Event
- * @param {olx.layer.HeatmapOptions=} opt_options Options.
- * @api
- */
-ol.layer.Heatmap = function(opt_options) {
-  var options = opt_options ? opt_options : {};
-
-  var baseOptions = ol.obj.assign({}, options);
-
-  delete baseOptions.gradient;
-  delete baseOptions.radius;
-  delete baseOptions.blur;
-  delete baseOptions.shadow;
-  delete baseOptions.weight;
-  ol.layer.Vector.call(this, /** @type {olx.layer.VectorOptions} */ (baseOptions));
-
-  /**
-   * @private
-   * @type {Uint8ClampedArray}
-   */
-  this.gradient_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.shadow_ = options.shadow !== undefined ? options.shadow : 250;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.circleImage_ = undefined;
-
-  /**
-   * @private
-   * @type {Array.<Array.<ol.style.Style>>}
-   */
-  this.styleCache_ = null;
-
-  ol.events.listen(this,
-      ol.Object.getChangeEventType(ol.layer.Heatmap.Property.GRADIENT),
-      this.handleGradientChanged_, this);
-
-  this.setGradient(options.gradient ?
-      options.gradient : ol.layer.Heatmap.DEFAULT_GRADIENT);
-
-  this.setBlur(options.blur !== undefined ? options.blur : 15);
-
-  this.setRadius(options.radius !== undefined ? options.radius : 8);
-
-  ol.events.listen(this,
-      ol.Object.getChangeEventType(ol.layer.Heatmap.Property.BLUR),
-      this.handleStyleChanged_, this);
-  ol.events.listen(this,
-      ol.Object.getChangeEventType(ol.layer.Heatmap.Property.RADIUS),
-      this.handleStyleChanged_, this);
-
-  this.handleStyleChanged_();
-
-  var weight = options.weight ? options.weight : 'weight';
-  var weightFunction;
-  if (typeof weight === 'string') {
-    weightFunction = function(feature) {
-      return feature.get(weight);
-    };
-  } else {
-    weightFunction = weight;
-  }
-  ol.DEBUG && console.assert(typeof weightFunction === 'function',
-      'weightFunction should be a function');
-
-  this.setStyle(function(feature, resolution) {
-    ol.DEBUG && console.assert(this.styleCache_, 'this.styleCache_ expected');
-    ol.DEBUG && console.assert(this.circleImage_ !== undefined,
-        'this.circleImage_ should be defined');
-    var weight = weightFunction(feature);
-    var opacity = weight !== undefined ? ol.math.clamp(weight, 0, 1) : 1;
-    // cast to 8 bits
-    var index = (255 * opacity) | 0;
-    var style = this.styleCache_[index];
-    if (!style) {
-      style = [
-        new ol.style.Style({
-          image: new ol.style.Icon({
-            opacity: opacity,
-            src: this.circleImage_
-          })
-        })
-      ];
-      this.styleCache_[index] = style;
-    }
-    return style;
-  }.bind(this));
-
-  // For performance reasons, don't sort the features before rendering.
-  // The render order is not relevant for a heatmap representation.
-  this.setRenderOrder(null);
-
-  ol.events.listen(this, ol.render.Event.Type.RENDER, this.handleRender_, this);
-
-};
-ol.inherits(ol.layer.Heatmap, ol.layer.Vector);
-
-
-/**
- * @const
- * @type {Array.<string>}
- */
-ol.layer.Heatmap.DEFAULT_GRADIENT = ['#00f', '#0ff', '#0f0', '#ff0', '#f00'];
-
-
-/**
- * @param {Array.<string>} colors A list of colored.
- * @return {Uint8ClampedArray} An array.
- * @private
- */
-ol.layer.Heatmap.createGradient_ = function(colors) {
-  var width = 1;
-  var height = 256;
-  var context = ol.dom.createCanvasContext2D(width, height);
-
-  var gradient = context.createLinearGradient(0, 0, width, height);
-  var step = 1 / (colors.length - 1);
-  for (var i = 0, ii = colors.length; i < ii; ++i) {
-    gradient.addColorStop(i * step, colors[i]);
-  }
-
-  context.fillStyle = gradient;
-  context.fillRect(0, 0, width, height);
-
-  return context.getImageData(0, 0, width, height).data;
-};
-
-
-/**
- * @return {string} Data URL for a circle.
- * @private
- */
-ol.layer.Heatmap.prototype.createCircle_ = function() {
-  var radius = this.getRadius();
-  var blur = this.getBlur();
-  ol.DEBUG && console.assert(radius !== undefined && blur !== undefined,
-      'radius and blur should be defined');
-  var halfSize = radius + blur + 1;
-  var size = 2 * halfSize;
-  var context = ol.dom.createCanvasContext2D(size, size);
-  context.shadowOffsetX = context.shadowOffsetY = this.shadow_;
-  context.shadowBlur = blur;
-  context.shadowColor = '#000';
-  context.beginPath();
-  var center = halfSize - this.shadow_;
-  context.arc(center, center, radius, 0, Math.PI * 2, true);
-  context.fill();
-  return context.canvas.toDataURL();
-};
-
-
-/**
- * Return the blur size in pixels.
- * @return {number} Blur size in pixels.
- * @api
- * @observable
- */
-ol.layer.Heatmap.prototype.getBlur = function() {
-  return /** @type {number} */ (this.get(ol.layer.Heatmap.Property.BLUR));
-};
-
-
-/**
- * Return the gradient colors as array of strings.
- * @return {Array.<string>} Colors.
- * @api
- * @observable
- */
-ol.layer.Heatmap.prototype.getGradient = function() {
-  return /** @type {Array.<string>} */ (
-      this.get(ol.layer.Heatmap.Property.GRADIENT));
-};
-
-
-/**
- * Return the size of the radius in pixels.
- * @return {number} Radius size in pixel.
- * @api
- * @observable
- */
-ol.layer.Heatmap.prototype.getRadius = function() {
-  return /** @type {number} */ (this.get(ol.layer.Heatmap.Property.RADIUS));
-};
-
-
-/**
- * @private
- */
-ol.layer.Heatmap.prototype.handleGradientChanged_ = function() {
-  this.gradient_ = ol.layer.Heatmap.createGradient_(this.getGradient());
-};
-
-
-/**
- * @private
- */
-ol.layer.Heatmap.prototype.handleStyleChanged_ = function() {
-  this.circleImage_ = this.createCircle_();
-  this.styleCache_ = new Array(256);
-  this.changed();
-};
-
-
-/**
- * @param {ol.render.Event} event Post compose event
- * @private
- */
-ol.layer.Heatmap.prototype.handleRender_ = function(event) {
-  ol.DEBUG && console.assert(event.type == ol.render.Event.Type.RENDER,
-      'event.type should be RENDER');
-  ol.DEBUG && console.assert(this.gradient_, 'this.gradient_ expected');
-  var context = event.context;
-  var canvas = context.canvas;
-  var image = context.getImageData(0, 0, canvas.width, canvas.height);
-  var view8 = image.data;
-  var i, ii, alpha;
-  for (i = 0, ii = view8.length; i < ii; i += 4) {
-    alpha = view8[i + 3] * 4;
-    if (alpha) {
-      view8[i] = this.gradient_[alpha];
-      view8[i + 1] = this.gradient_[alpha + 1];
-      view8[i + 2] = this.gradient_[alpha + 2];
-    }
-  }
-  context.putImageData(image, 0, 0);
-};
-
-
-/**
- * Set the blur size in pixels.
- * @param {number} blur Blur size in pixels.
- * @api
- * @observable
- */
-ol.layer.Heatmap.prototype.setBlur = function(blur) {
-  this.set(ol.layer.Heatmap.Property.BLUR, blur);
-};
-
-
-/**
- * Set the gradient colors as array of strings.
- * @param {Array.<string>} colors Gradient.
- * @api
- * @observable
- */
-ol.layer.Heatmap.prototype.setGradient = function(colors) {
-  this.set(ol.layer.Heatmap.Property.GRADIENT, colors);
-};
-
-
-/**
- * Set the size of the radius in pixels.
- * @param {number} radius Radius size in pixel.
- * @api
- * @observable
- */
-ol.layer.Heatmap.prototype.setRadius = function(radius) {
-  this.set(ol.layer.Heatmap.Property.RADIUS, radius);
-};
-
-
-/**
- * @enum {string}
- */
-ol.layer.Heatmap.Property = {
-  BLUR: 'blur',
-  GRADIENT: 'gradient',
-  RADIUS: 'radius'
-};
-
-goog.provide('ol.net');
-
-goog.require('ol');
-
-
-/**
- * Simple JSONP helper. Supports error callbacks and a custom callback param.
- * The error callback will be called when no JSONP is executed after 10 seconds.
- *
- * @param {string} url Request url. A 'callback' query parameter will be
- *     appended.
- * @param {Function} callback Callback on success.
- * @param {function()=} opt_errback Callback on error.
- * @param {string=} opt_callbackParam Custom query parameter for the JSONP
- *     callback. Default is 'callback'.
- */
-ol.net.jsonp = function(url, callback, opt_errback, opt_callbackParam) {
-  var script = document.createElement('script');
-  var key = 'olc_' + ol.getUid(callback);
-  function cleanup() {
-    delete window[key];
-    script.parentNode.removeChild(script);
-  }
-  script.async = true;
-  script.src = url + (url.indexOf('?') == -1 ? '?' : '&') +
-      (opt_callbackParam || 'callback') + '=' + key;
-  var timer = setTimeout(function() {
-    cleanup();
-    if (opt_errback) {
-      opt_errback();
-    }
-  }, 10000);
-  window[key] = function(data) {
-    clearTimeout(timer);
-    cleanup();
-    callback(data);
-  };
-  document.getElementsByTagName('head')[0].appendChild(script);
-};
-
-goog.provide('ol.render');
-
-goog.require('ol.has');
-goog.require('ol.transform');
-goog.require('ol.render.canvas.Immediate');
-
-
-/**
- * Binds a Canvas Immediate API to a canvas context, to allow drawing geometries
- * to the context's canvas.
- *
- * The units for geometry coordinates are css pixels relative to the top left
- * corner of the canvas element.
- * ```js
- * var canvas = document.createElement('canvas');
- * var render = ol.render.toContext(canvas.getContext('2d'),
- *     { size: [100, 100] });
- * render.setFillStrokeStyle(new ol.style.Fill({ color: blue }));
- * render.drawPolygon(
- *     new ol.geom.Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]]));
- * ```
- *
- * @param {CanvasRenderingContext2D} context Canvas context.
- * @param {olx.render.ToContextOptions=} opt_options Options.
- * @return {ol.render.canvas.Immediate} Canvas Immediate.
- * @api
- */
-ol.render.toContext = function(context, opt_options) {
-  var canvas = context.canvas;
-  var options = opt_options ? opt_options : {};
-  var pixelRatio = options.pixelRatio || ol.has.DEVICE_PIXEL_RATIO;
-  var size = options.size;
-  if (size) {
-    canvas.width = size[0] * pixelRatio;
-    canvas.height = size[1] * pixelRatio;
-    canvas.style.width = size[0] + 'px';
-    canvas.style.height = size[1] + 'px';
-  }
-  var extent = [0, 0, canvas.width, canvas.height];
-  var transform = ol.transform.scale(ol.transform.create(), pixelRatio, pixelRatio);
-  return new ol.render.canvas.Immediate(context, pixelRatio, extent, transform,
-      0);
-};
-
-goog.provide('ol.reproj.Tile');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.math');
-goog.require('ol.reproj');
-goog.require('ol.reproj.Triangulation');
-
-
-/**
- * @classdesc
- * Class encapsulating single reprojected tile.
- * See {@link ol.source.TileImage}.
- *
- * @constructor
- * @extends {ol.Tile}
- * @param {ol.proj.Projection} sourceProj Source projection.
- * @param {ol.tilegrid.TileGrid} sourceTileGrid Source tile grid.
- * @param {ol.proj.Projection} targetProj Target projection.
- * @param {ol.tilegrid.TileGrid} targetTileGrid Target tile grid.
- * @param {ol.TileCoord} tileCoord Coordinate of the tile.
- * @param {ol.TileCoord} wrappedTileCoord Coordinate of the tile wrapped in X.
- * @param {number} pixelRatio Pixel ratio.
- * @param {number} gutter Gutter of the source tiles.
- * @param {ol.ReprojTileFunctionType} getTileFunction
- *     Function returning source tiles (z, x, y, pixelRatio).
- * @param {number=} opt_errorThreshold Acceptable reprojection error (in px).
- * @param {boolean=} opt_renderEdges Render reprojection edges.
- */
-ol.reproj.Tile = function(sourceProj, sourceTileGrid,
-    targetProj, targetTileGrid, tileCoord, wrappedTileCoord,
-    pixelRatio, gutter, getTileFunction,
-    opt_errorThreshold,
-    opt_renderEdges) {
-  ol.Tile.call(this, tileCoord, ol.Tile.State.IDLE);
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.renderEdges_ = opt_renderEdges !== undefined ? opt_renderEdges : false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.pixelRatio_ = pixelRatio;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.gutter_ = gutter;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = null;
-
-  /**
-   * @private
-   * @type {ol.tilegrid.TileGrid}
-   */
-  this.sourceTileGrid_ = sourceTileGrid;
-
-  /**
-   * @private
-   * @type {ol.tilegrid.TileGrid}
-   */
-  this.targetTileGrid_ = targetTileGrid;
-
-  /**
-   * @private
-   * @type {ol.TileCoord}
-   */
-  this.wrappedTileCoord_ = wrappedTileCoord ? wrappedTileCoord : tileCoord;
-
-  /**
-   * @private
-   * @type {!Array.<ol.Tile>}
-   */
-  this.sourceTiles_ = [];
-
-  /**
-   * @private
-   * @type {Array.<ol.EventsKey>}
-   */
-  this.sourcesListenerKeys_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.sourceZ_ = 0;
-
-  var targetExtent = targetTileGrid.getTileCoordExtent(this.wrappedTileCoord_);
-  var maxTargetExtent = this.targetTileGrid_.getExtent();
-  var maxSourceExtent = this.sourceTileGrid_.getExtent();
-
-  var limitedTargetExtent = maxTargetExtent ?
-      ol.extent.getIntersection(targetExtent, maxTargetExtent) : targetExtent;
-
-  if (ol.extent.getArea(limitedTargetExtent) === 0) {
-    // Tile is completely outside range -> EMPTY
-    // TODO: is it actually correct that the source even creates the tile ?
-    this.state = ol.Tile.State.EMPTY;
-    return;
-  }
-
-  var sourceProjExtent = sourceProj.getExtent();
-  if (sourceProjExtent) {
-    if (!maxSourceExtent) {
-      maxSourceExtent = sourceProjExtent;
-    } else {
-      maxSourceExtent = ol.extent.getIntersection(
-          maxSourceExtent, sourceProjExtent);
-    }
-  }
-
-  var targetResolution = targetTileGrid.getResolution(
-      this.wrappedTileCoord_[0]);
-
-  var targetCenter = ol.extent.getCenter(limitedTargetExtent);
-  var sourceResolution = ol.reproj.calculateSourceResolution(
-      sourceProj, targetProj, targetCenter, targetResolution);
-
-  if (!isFinite(sourceResolution) || sourceResolution <= 0) {
-    // invalid sourceResolution -> EMPTY
-    // probably edges of the projections when no extent is defined
-    this.state = ol.Tile.State.EMPTY;
-    return;
-  }
-
-  var errorThresholdInPixels = opt_errorThreshold !== undefined ?
-      opt_errorThreshold : ol.DEFAULT_RASTER_REPROJECTION_ERROR_THRESHOLD;
-
-  /**
-   * @private
-   * @type {!ol.reproj.Triangulation}
-   */
-  this.triangulation_ = new ol.reproj.Triangulation(
-      sourceProj, targetProj, limitedTargetExtent, maxSourceExtent,
-      sourceResolution * errorThresholdInPixels);
-
-  if (this.triangulation_.getTriangles().length === 0) {
-    // no valid triangles -> EMPTY
-    this.state = ol.Tile.State.EMPTY;
-    return;
-  }
-
-  this.sourceZ_ = sourceTileGrid.getZForResolution(sourceResolution);
-  var sourceExtent = this.triangulation_.calculateSourceExtent();
-
-  if (maxSourceExtent) {
-    if (sourceProj.canWrapX()) {
-      sourceExtent[1] = ol.math.clamp(
-          sourceExtent[1], maxSourceExtent[1], maxSourceExtent[3]);
-      sourceExtent[3] = ol.math.clamp(
-          sourceExtent[3], maxSourceExtent[1], maxSourceExtent[3]);
-    } else {
-      sourceExtent = ol.extent.getIntersection(sourceExtent, maxSourceExtent);
-    }
-  }
-
-  if (!ol.extent.getArea(sourceExtent)) {
-    this.state = ol.Tile.State.EMPTY;
-  } else {
-    var sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(
-        sourceExtent, this.sourceZ_);
-
-    var tilesRequired = sourceRange.getWidth() * sourceRange.getHeight();
-    if (ol.DEBUG && !(tilesRequired < ol.RASTER_REPROJECTION_MAX_SOURCE_TILES)) {
-      console.assert(false, 'reasonable number of tiles is required');
-      this.state = ol.Tile.State.ERROR;
-      return;
-    }
-    for (var srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {
-      for (var srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {
-        var tile = getTileFunction(this.sourceZ_, srcX, srcY, pixelRatio);
-        if (tile) {
-          this.sourceTiles_.push(tile);
-        }
-      }
-    }
-
-    if (this.sourceTiles_.length === 0) {
-      this.state = ol.Tile.State.EMPTY;
-    }
-  }
-};
-ol.inherits(ol.reproj.Tile, ol.Tile);
-
-
-/**
- * @inheritDoc
- */
-ol.reproj.Tile.prototype.disposeInternal = function() {
-  if (this.state == ol.Tile.State.LOADING) {
-    this.unlistenSources_();
-  }
-  ol.Tile.prototype.disposeInternal.call(this);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.reproj.Tile.prototype.getImage = function() {
-  return this.canvas_;
-};
-
-
-/**
- * @private
- */
-ol.reproj.Tile.prototype.reproject_ = function() {
-  var sources = [];
-  this.sourceTiles_.forEach(function(tile, i, arr) {
-    if (tile && tile.getState() == ol.Tile.State.LOADED) {
-      sources.push({
-        extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),
-        image: tile.getImage()
-      });
-    }
-  }, this);
-  this.sourceTiles_.length = 0;
-
-  if (sources.length === 0) {
-    this.state = ol.Tile.State.ERROR;
-  } else {
-    var z = this.wrappedTileCoord_[0];
-    var size = this.targetTileGrid_.getTileSize(z);
-    var width = typeof size === 'number' ? size : size[0];
-    var height = typeof size === 'number' ? size : size[1];
-    var targetResolution = this.targetTileGrid_.getResolution(z);
-    var sourceResolution = this.sourceTileGrid_.getResolution(this.sourceZ_);
-
-    var targetExtent = this.targetTileGrid_.getTileCoordExtent(
-        this.wrappedTileCoord_);
-    this.canvas_ = ol.reproj.render(width, height, this.pixelRatio_,
-        sourceResolution, this.sourceTileGrid_.getExtent(),
-        targetResolution, targetExtent, this.triangulation_, sources,
-        this.gutter_, this.renderEdges_);
-
-    this.state = ol.Tile.State.LOADED;
-  }
-  this.changed();
-};
-
-
-/**
- * @inheritDoc
- */
-ol.reproj.Tile.prototype.load = function() {
-  if (this.state == ol.Tile.State.IDLE) {
-    this.state = ol.Tile.State.LOADING;
-    this.changed();
-
-    var leftToLoad = 0;
-
-    ol.DEBUG && console.assert(!this.sourcesListenerKeys_,
-        'this.sourcesListenerKeys_ should be null');
-
-    this.sourcesListenerKeys_ = [];
-    this.sourceTiles_.forEach(function(tile, i, arr) {
-      var state = tile.getState();
-      if (state == ol.Tile.State.IDLE || state == ol.Tile.State.LOADING) {
-        leftToLoad++;
-
-        var sourceListenKey;
-        sourceListenKey = ol.events.listen(tile, ol.events.EventType.CHANGE,
-            function(e) {
-              var state = tile.getState();
-              if (state == ol.Tile.State.LOADED ||
-                  state == ol.Tile.State.ERROR ||
-                  state == ol.Tile.State.EMPTY) {
-                ol.events.unlistenByKey(sourceListenKey);
-                leftToLoad--;
-                ol.DEBUG && console.assert(leftToLoad >= 0,
-                    'leftToLoad should not be negative');
-                if (leftToLoad === 0) {
-                  this.unlistenSources_();
-                  this.reproject_();
-                }
-              }
-            }, this);
-        this.sourcesListenerKeys_.push(sourceListenKey);
-      }
-    }, this);
-
-    this.sourceTiles_.forEach(function(tile, i, arr) {
-      var state = tile.getState();
-      if (state == ol.Tile.State.IDLE) {
-        tile.load();
-      }
-    });
-
-    if (leftToLoad === 0) {
-      setTimeout(this.reproject_.bind(this), 0);
-    }
-  }
-};
-
-
-/**
- * @private
- */
-ol.reproj.Tile.prototype.unlistenSources_ = function() {
-  this.sourcesListenerKeys_.forEach(ol.events.unlistenByKey);
-  this.sourcesListenerKeys_ = null;
-};
-
-goog.provide('ol.TileUrlFunction');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.math');
-goog.require('ol.tilecoord');
-
-
-/**
- * @param {string} template Template.
- * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.
- * @return {ol.TileUrlFunctionType} Tile URL function.
- */
-ol.TileUrlFunction.createFromTemplate = function(template, tileGrid) {
-  var zRegEx = /\{z\}/g;
-  var xRegEx = /\{x\}/g;
-  var yRegEx = /\{y\}/g;
-  var dashYRegEx = /\{-y\}/g;
-  return (
-      /**
-       * @param {ol.TileCoord} tileCoord Tile Coordinate.
-       * @param {number} pixelRatio Pixel ratio.
-       * @param {ol.proj.Projection} projection Projection.
-       * @return {string|undefined} Tile URL.
-       */
-      function(tileCoord, pixelRatio, projection) {
-        if (!tileCoord) {
-          return undefined;
-        } else {
-          return template.replace(zRegEx, tileCoord[0].toString())
-              .replace(xRegEx, tileCoord[1].toString())
-              .replace(yRegEx, function() {
-                var y = -tileCoord[2] - 1;
-                return y.toString();
-              })
-              .replace(dashYRegEx, function() {
-                var z = tileCoord[0];
-                var range = tileGrid.getFullTileRange(z);
-                ol.asserts.assert(range, 55); // The {-y} placeholder requires a tile grid with extent
-                var y = range.getHeight() + tileCoord[2];
-                return y.toString();
-              });
-        }
-      });
-};
-
-
-/**
- * @param {Array.<string>} templates Templates.
- * @param {ol.tilegrid.TileGrid} tileGrid Tile grid.
- * @return {ol.TileUrlFunctionType} Tile URL function.
- */
-ol.TileUrlFunction.createFromTemplates = function(templates, tileGrid) {
-  var len = templates.length;
-  var tileUrlFunctions = new Array(len);
-  for (var i = 0; i < len; ++i) {
-    tileUrlFunctions[i] = ol.TileUrlFunction.createFromTemplate(
-        templates[i], tileGrid);
-  }
-  return ol.TileUrlFunction.createFromTileUrlFunctions(tileUrlFunctions);
-};
-
-
-/**
- * @param {Array.<ol.TileUrlFunctionType>} tileUrlFunctions Tile URL Functions.
- * @return {ol.TileUrlFunctionType} Tile URL function.
- */
-ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) {
-  ol.DEBUG && console.assert(tileUrlFunctions.length > 0,
-      'Length of tile url functions should be greater than 0');
-  if (tileUrlFunctions.length === 1) {
-    return tileUrlFunctions[0];
-  }
-  return (
-      /**
-       * @param {ol.TileCoord} tileCoord Tile Coordinate.
-       * @param {number} pixelRatio Pixel ratio.
-       * @param {ol.proj.Projection} projection Projection.
-       * @return {string|undefined} Tile URL.
-       */
-      function(tileCoord, pixelRatio, projection) {
-        if (!tileCoord) {
-          return undefined;
-        } else {
-          var h = ol.tilecoord.hash(tileCoord);
-          var index = ol.math.modulo(h, tileUrlFunctions.length);
-          return tileUrlFunctions[index](tileCoord, pixelRatio, projection);
-        }
-      });
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @return {string|undefined} Tile URL.
- */
-ol.TileUrlFunction.nullTileUrlFunction = function(tileCoord, pixelRatio, projection) {
-  return undefined;
-};
-
-
-/**
- * @param {string} url URL.
- * @return {Array.<string>} Array of urls.
- */
-ol.TileUrlFunction.expandUrl = function(url) {
-  var urls = [];
-  var match = /\{([a-z])-([a-z])\}/.exec(url);
-  if (match) {
-    // char range
-    var startCharCode = match[1].charCodeAt(0);
-    var stopCharCode = match[2].charCodeAt(0);
-    var charCode;
-    for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {
-      urls.push(url.replace(match[0], String.fromCharCode(charCode)));
-    }
-    return urls;
-  }
-  match = match = /\{(\d+)-(\d+)\}/.exec(url);
-  if (match) {
-    // number range
-    var stop = parseInt(match[2], 10);
-    for (var i = parseInt(match[1], 10); i <= stop; i++) {
-      urls.push(url.replace(match[0], i.toString()));
-    }
-    return urls;
-  }
-  urls.push(url);
-  return urls;
-};
-
-goog.provide('ol.TileCache');
-
-goog.require('ol');
-goog.require('ol.structs.LRUCache');
-
-
-/**
- * @constructor
- * @extends {ol.structs.LRUCache.<ol.Tile>}
- * @param {number=} opt_highWaterMark High water mark.
- * @struct
- */
-ol.TileCache = function(opt_highWaterMark) {
-
-  ol.structs.LRUCache.call(this);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.highWaterMark_ = opt_highWaterMark !== undefined ? opt_highWaterMark : 2048;
-
-};
-ol.inherits(ol.TileCache, ol.structs.LRUCache);
-
-
-/**
- * @return {boolean} Can expire cache.
- */
-ol.TileCache.prototype.canExpireCache = function() {
-  return this.getCount() > this.highWaterMark_;
-};
-
-
-/**
- * @param {Object.<string, ol.TileRange>} usedTiles Used tiles.
- */
-ol.TileCache.prototype.expireCache = function(usedTiles) {
-  var tile, zKey;
-  while (this.canExpireCache()) {
-    tile = this.peekLast();
-    zKey = tile.tileCoord[0].toString();
-    if (zKey in usedTiles && usedTiles[zKey].contains(tile.tileCoord)) {
-      break;
-    } else {
-      this.pop().dispose();
-    }
-  }
-};
-
-goog.provide('ol.source.Tile');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.TileCache');
-goog.require('ol.events.Event');
-goog.require('ol.proj');
-goog.require('ol.size');
-goog.require('ol.source.Source');
-goog.require('ol.tilecoord');
-goog.require('ol.tilegrid');
-
-
-/**
- * @classdesc
- * Abstract base class; normally only used for creating subclasses and not
- * instantiated in apps.
- * Base class for sources providing images divided into a tile grid.
- *
- * @constructor
- * @extends {ol.source.Source}
- * @param {ol.SourceTileOptions} options Tile source options.
- * @api
- */
-ol.source.Tile = function(options) {
-
-  ol.source.Source.call(this, {
-    attributions: options.attributions,
-    extent: options.extent,
-    logo: options.logo,
-    projection: options.projection,
-    state: options.state,
-    wrapX: options.wrapX
-  });
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.opaque_ = options.opaque !== undefined ? options.opaque : false;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.tilePixelRatio_ = options.tilePixelRatio !== undefined ?
-      options.tilePixelRatio : 1;
-
-  /**
-   * @protected
-   * @type {ol.tilegrid.TileGrid}
-   */
-  this.tileGrid = options.tileGrid !== undefined ? options.tileGrid : null;
-
-  /**
-   * @protected
-   * @type {ol.TileCache}
-   */
-  this.tileCache = new ol.TileCache(options.cacheSize);
-
-  /**
-   * @protected
-   * @type {ol.Size}
-   */
-  this.tmpSize = [0, 0];
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.key_ = '';
-
-};
-ol.inherits(ol.source.Tile, ol.source.Source);
-
-
-/**
- * @return {boolean} Can expire cache.
- */
-ol.source.Tile.prototype.canExpireCache = function() {
-  return this.tileCache.canExpireCache();
-};
-
-
-/**
- * @param {ol.proj.Projection} projection Projection.
- * @param {Object.<string, ol.TileRange>} usedTiles Used tiles.
- */
-ol.source.Tile.prototype.expireCache = function(projection, usedTiles) {
-  var tileCache = this.getTileCacheForProjection(projection);
-  if (tileCache) {
-    tileCache.expireCache(usedTiles);
-  }
-};
-
-
-/**
- * @param {ol.proj.Projection} projection Projection.
- * @param {number} z Zoom level.
- * @param {ol.TileRange} tileRange Tile range.
- * @param {function(ol.Tile):(boolean|undefined)} callback Called with each
- *     loaded tile.  If the callback returns `false`, the tile will not be
- *     considered loaded.
- * @return {boolean} The tile range is fully covered with loaded tiles.
- */
-ol.source.Tile.prototype.forEachLoadedTile = function(projection, z, tileRange, callback) {
-  var tileCache = this.getTileCacheForProjection(projection);
-  if (!tileCache) {
-    return false;
-  }
-
-  var covered = true;
-  var tile, tileCoordKey, loaded;
-  for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {
-    for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {
-      tileCoordKey = this.getKeyZXY(z, x, y);
-      loaded = false;
-      if (tileCache.containsKey(tileCoordKey)) {
-        tile = /** @type {!ol.Tile} */ (tileCache.get(tileCoordKey));
-        loaded = tile.getState() === ol.Tile.State.LOADED;
-        if (loaded) {
-          loaded = (callback(tile) !== false);
-        }
-      }
-      if (!loaded) {
-        covered = false;
-      }
-    }
-  }
-  return covered;
-};
-
-
-/**
- * @param {ol.proj.Projection} projection Projection.
- * @return {number} Gutter.
- */
-ol.source.Tile.prototype.getGutter = function(projection) {
-  return 0;
-};
-
-
-/**
- * Return the key to be used for all tiles in the source.
- * @return {string} The key for all tiles.
- * @protected
- */
-ol.source.Tile.prototype.getKey = function() {
-  return this.key_;
-};
-
-
-/**
- * Set the value to be used as the key for all tiles in the source.
- * @param {string} key The key for tiles.
- * @protected
- */
-ol.source.Tile.prototype.setKey = function(key) {
-  if (this.key_ !== key) {
-    this.key_ = key;
-    this.changed();
-  }
-};
-
-
-/**
- * @param {number} z Z.
- * @param {number} x X.
- * @param {number} y Y.
- * @return {string} Key.
- * @protected
- */
-ol.source.Tile.prototype.getKeyZXY = ol.tilecoord.getKeyZXY;
-
-
-/**
- * @param {ol.proj.Projection} projection Projection.
- * @return {boolean} Opaque.
- */
-ol.source.Tile.prototype.getOpaque = function(projection) {
-  return this.opaque_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.Tile.prototype.getResolutions = function() {
-  return this.tileGrid.getResolutions();
-};
-
-
-/**
- * @abstract
- * @param {number} z Tile coordinate z.
- * @param {number} x Tile coordinate x.
- * @param {number} y Tile coordinate y.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @return {!ol.Tile} Tile.
- */
-ol.source.Tile.prototype.getTile = function(z, x, y, pixelRatio, projection) {};
-
-
-/**
- * Return the tile grid of the tile source.
- * @return {ol.tilegrid.TileGrid} Tile grid.
- * @api stable
- */
-ol.source.Tile.prototype.getTileGrid = function() {
-  return this.tileGrid;
-};
-
-
-/**
- * @param {ol.proj.Projection} projection Projection.
- * @return {!ol.tilegrid.TileGrid} Tile grid.
- */
-ol.source.Tile.prototype.getTileGridForProjection = function(projection) {
-  if (!this.tileGrid) {
-    return ol.tilegrid.getForProjection(projection);
-  } else {
-    return this.tileGrid;
-  }
-};
-
-
-/**
- * @param {ol.proj.Projection} projection Projection.
- * @return {ol.TileCache} Tile cache.
- * @protected
- */
-ol.source.Tile.prototype.getTileCacheForProjection = function(projection) {
-  var thisProj = this.getProjection();
-  if (thisProj && !ol.proj.equivalent(thisProj, projection)) {
-    return null;
-  } else {
-    return this.tileCache;
-  }
-};
-
-
-/**
- * Get the tile pixel ratio for this source. Subclasses may override this
- * method, which is meant to return a supported pixel ratio that matches the
- * provided `opt_pixelRatio` as close as possible. When no `opt_pixelRatio` is
- * provided, it is meant to return `this.tilePixelRatio_`.
- * @param {number=} opt_pixelRatio Pixel ratio.
- * @return {number} Tile pixel ratio.
- */
-ol.source.Tile.prototype.getTilePixelRatio = function(opt_pixelRatio) {
-  return this.tilePixelRatio_;
-};
-
-
-/**
- * @param {number} z Z.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @return {ol.Size} Tile size.
- */
-ol.source.Tile.prototype.getTilePixelSize = function(z, pixelRatio, projection) {
-  var tileGrid = this.getTileGridForProjection(projection);
-  var tilePixelRatio = this.getTilePixelRatio(pixelRatio);
-  var tileSize = ol.size.toSize(tileGrid.getTileSize(z), this.tmpSize);
-  if (tilePixelRatio == 1) {
-    return tileSize;
-  } else {
-    return ol.size.scale(tileSize, tilePixelRatio, this.tmpSize);
-  }
-};
-
-
-/**
- * Returns a tile coordinate wrapped around the x-axis. When the tile coordinate
- * is outside the resolution and extent range of the tile grid, `null` will be
- * returned.
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.proj.Projection=} opt_projection Projection.
- * @return {ol.TileCoord} Tile coordinate to be passed to the tileUrlFunction or
- *     null if no tile URL should be created for the passed `tileCoord`.
- */
-ol.source.Tile.prototype.getTileCoordForTileUrlFunction = function(tileCoord, opt_projection) {
-  var projection = opt_projection !== undefined ?
-      opt_projection : this.getProjection();
-  var tileGrid = this.getTileGridForProjection(projection);
-  if (this.getWrapX() && projection.isGlobal()) {
-    tileCoord = ol.tilegrid.wrapX(tileGrid, tileCoord, projection);
-  }
-  return ol.tilecoord.withinExtentAndZ(tileCoord, tileGrid) ? tileCoord : null;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.Tile.prototype.refresh = function() {
-  this.tileCache.clear();
-  this.changed();
-};
-
-
-/**
- * Marks a tile coord as being used, without triggering a load.
- * @param {number} z Tile coordinate z.
- * @param {number} x Tile coordinate x.
- * @param {number} y Tile coordinate y.
- * @param {ol.proj.Projection} projection Projection.
- */
-ol.source.Tile.prototype.useTile = ol.nullFunction;
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.source.Tile} instances are instances of this
- * type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.source.Tile.Event}
- * @param {string} type Type.
- * @param {ol.Tile} tile The tile.
- */
-ol.source.Tile.Event = function(type, tile) {
-
-  ol.events.Event.call(this, type);
-
-  /**
-   * The tile related to the event.
-   * @type {ol.Tile}
-   * @api
-   */
-  this.tile = tile;
-
-};
-ol.inherits(ol.source.Tile.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.source.Tile.EventType = {
-
-  /**
-   * Triggered when a tile starts loading.
-   * @event ol.source.Tile.Event#tileloadstart
-   * @api stable
-   */
-  TILELOADSTART: 'tileloadstart',
-
-  /**
-   * Triggered when a tile finishes loading.
-   * @event ol.source.Tile.Event#tileloadend
-   * @api stable
-   */
-  TILELOADEND: 'tileloadend',
-
-  /**
-   * Triggered if tile loading results in an error.
-   * @event ol.source.Tile.Event#tileloaderror
-   * @api stable
-   */
-  TILELOADERROR: 'tileloaderror'
-
-};
-
-goog.provide('ol.source.UrlTile');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.TileUrlFunction');
-goog.require('ol.source.Tile');
-
-
-/**
- * @classdesc
- * Base class for sources providing tiles divided into a tile grid over http.
- *
- * @constructor
- * @fires ol.source.Tile.Event
- * @extends {ol.source.Tile}
- * @param {ol.SourceUrlTileOptions} options Image tile options.
- */
-ol.source.UrlTile = function(options) {
-
-  ol.source.Tile.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    extent: options.extent,
-    logo: options.logo,
-    opaque: options.opaque,
-    projection: options.projection,
-    state: options.state,
-    tileGrid: options.tileGrid,
-    tilePixelRatio: options.tilePixelRatio,
-    wrapX: options.wrapX
-  });
-
-  /**
-   * @protected
-   * @type {ol.TileLoadFunctionType}
-   */
-  this.tileLoadFunction = options.tileLoadFunction;
-
-  /**
-   * @protected
-   * @type {ol.TileUrlFunctionType}
-   */
-  this.tileUrlFunction = this.fixedTileUrlFunction ?
-      this.fixedTileUrlFunction.bind(this) :
-      ol.TileUrlFunction.nullTileUrlFunction;
-
-  /**
-   * @protected
-   * @type {!Array.<string>|null}
-   */
-  this.urls = null;
-
-  if (options.urls) {
-    this.setUrls(options.urls);
-  } else if (options.url) {
-    this.setUrl(options.url);
-  }
-  if (options.tileUrlFunction) {
-    this.setTileUrlFunction(options.tileUrlFunction);
-  }
-
-};
-ol.inherits(ol.source.UrlTile, ol.source.Tile);
-
-
-/**
- * @type {ol.TileUrlFunctionType|undefined}
- * @protected
- */
-ol.source.UrlTile.prototype.fixedTileUrlFunction;
-
-/**
- * Return the tile load function of the source.
- * @return {ol.TileLoadFunctionType} TileLoadFunction
- * @api
- */
-ol.source.UrlTile.prototype.getTileLoadFunction = function() {
-  return this.tileLoadFunction;
-};
-
-
-/**
- * Return the tile URL function of the source.
- * @return {ol.TileUrlFunctionType} TileUrlFunction
- * @api
- */
-ol.source.UrlTile.prototype.getTileUrlFunction = function() {
-  return this.tileUrlFunction;
-};
-
-
-/**
- * Return the URLs used for this source.
- * When a tileUrlFunction is used instead of url or urls,
- * null will be returned.
- * @return {!Array.<string>|null} URLs.
- * @api
- */
-ol.source.UrlTile.prototype.getUrls = function() {
-  return this.urls;
-};
-
-
-/**
- * Handle tile change events.
- * @param {ol.events.Event} event Event.
- * @protected
- */
-ol.source.UrlTile.prototype.handleTileChange = function(event) {
-  var tile = /** @type {ol.Tile} */ (event.target);
-  switch (tile.getState()) {
-    case ol.Tile.State.LOADING:
-      this.dispatchEvent(
-          new ol.source.Tile.Event(ol.source.Tile.EventType.TILELOADSTART, tile));
-      break;
-    case ol.Tile.State.LOADED:
-      this.dispatchEvent(
-          new ol.source.Tile.Event(ol.source.Tile.EventType.TILELOADEND, tile));
-      break;
-    case ol.Tile.State.ERROR:
-      this.dispatchEvent(
-          new ol.source.Tile.Event(ol.source.Tile.EventType.TILELOADERROR, tile));
-      break;
-    default:
-      // pass
-  }
-};
-
-
-/**
- * Set the tile load function of the source.
- * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.
- * @api
- */
-ol.source.UrlTile.prototype.setTileLoadFunction = function(tileLoadFunction) {
-  this.tileCache.clear();
-  this.tileLoadFunction = tileLoadFunction;
-  this.changed();
-};
-
-
-/**
- * Set the tile URL function of the source.
- * @param {ol.TileUrlFunctionType} tileUrlFunction Tile URL function.
- * @param {string=} opt_key Optional new tile key for the source.
- * @api
- */
-ol.source.UrlTile.prototype.setTileUrlFunction = function(tileUrlFunction, opt_key) {
-  this.tileUrlFunction = tileUrlFunction;
-  if (typeof opt_key !== 'undefined') {
-    this.setKey(opt_key);
-  } else {
-    this.changed();
-  }
-};
-
-
-/**
- * Set the URL to use for requests.
- * @param {string} url URL.
- * @api stable
- */
-ol.source.UrlTile.prototype.setUrl = function(url) {
-  var urls = this.urls = ol.TileUrlFunction.expandUrl(url);
-  this.setTileUrlFunction(this.fixedTileUrlFunction ?
-      this.fixedTileUrlFunction.bind(this) :
-      ol.TileUrlFunction.createFromTemplates(urls, this.tileGrid), url);
-};
-
-
-/**
- * Set the URLs to use for requests.
- * @param {Array.<string>} urls URLs.
- * @api stable
- */
-ol.source.UrlTile.prototype.setUrls = function(urls) {
-  this.urls = urls;
-  var key = urls.join('\n');
-  this.setTileUrlFunction(this.fixedTileUrlFunction ?
-      this.fixedTileUrlFunction.bind(this) :
-      ol.TileUrlFunction.createFromTemplates(urls, this.tileGrid), key);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.UrlTile.prototype.useTile = function(z, x, y) {
-  var tileCoordKey = this.getKeyZXY(z, x, y);
-  if (this.tileCache.containsKey(tileCoordKey)) {
-    this.tileCache.get(tileCoordKey);
-  }
-};
-
-goog.provide('ol.source.TileImage');
-
-goog.require('ol');
-goog.require('ol.ImageTile');
-goog.require('ol.Tile');
-goog.require('ol.TileCache');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.proj');
-goog.require('ol.reproj.Tile');
-goog.require('ol.source.UrlTile');
-goog.require('ol.tilegrid');
-
-
-/**
- * @classdesc
- * Base class for sources providing images divided into a tile grid.
- *
- * @constructor
- * @fires ol.source.Tile.Event
- * @extends {ol.source.UrlTile}
- * @param {olx.source.TileImageOptions} options Image tile options.
- * @api
- */
-ol.source.TileImage = function(options) {
-
-  ol.source.UrlTile.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    extent: options.extent,
-    logo: options.logo,
-    opaque: options.opaque,
-    projection: options.projection,
-    state: options.state,
-    tileGrid: options.tileGrid,
-    tileLoadFunction: options.tileLoadFunction ?
-        options.tileLoadFunction : ol.source.TileImage.defaultTileLoadFunction,
-    tilePixelRatio: options.tilePixelRatio,
-    tileUrlFunction: options.tileUrlFunction,
-    url: options.url,
-    urls: options.urls,
-    wrapX: options.wrapX
-  });
-
-  /**
-   * @protected
-   * @type {?string}
-   */
-  this.crossOrigin =
-      options.crossOrigin !== undefined ? options.crossOrigin : null;
-
-  /**
-   * @protected
-   * @type {function(new: ol.ImageTile, ol.TileCoord, ol.Tile.State, string,
-   *        ?string, ol.TileLoadFunctionType)}
-   */
-  this.tileClass = options.tileClass !== undefined ?
-      options.tileClass : ol.ImageTile;
-
-  /**
-   * @protected
-   * @type {Object.<string, ol.TileCache>}
-   */
-  this.tileCacheForProjection = {};
-
-  /**
-   * @protected
-   * @type {Object.<string, ol.tilegrid.TileGrid>}
-   */
-  this.tileGridForProjection = {};
-
-  /**
-   * @private
-   * @type {number|undefined}
-   */
-  this.reprojectionErrorThreshold_ = options.reprojectionErrorThreshold;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.renderReprojectionEdges_ = false;
-};
-ol.inherits(ol.source.TileImage, ol.source.UrlTile);
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileImage.prototype.canExpireCache = function() {
-  if (!ol.ENABLE_RASTER_REPROJECTION) {
-    return ol.source.UrlTile.prototype.canExpireCache.call(this);
-  }
-  if (this.tileCache.canExpireCache()) {
-    return true;
-  } else {
-    for (var key in this.tileCacheForProjection) {
-      if (this.tileCacheForProjection[key].canExpireCache()) {
-        return true;
-      }
-    }
-  }
-  return false;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileImage.prototype.expireCache = function(projection, usedTiles) {
-  if (!ol.ENABLE_RASTER_REPROJECTION) {
-    ol.source.UrlTile.prototype.expireCache.call(this, projection, usedTiles);
-    return;
-  }
-  var usedTileCache = this.getTileCacheForProjection(projection);
-
-  this.tileCache.expireCache(this.tileCache == usedTileCache ? usedTiles : {});
-  for (var id in this.tileCacheForProjection) {
-    var tileCache = this.tileCacheForProjection[id];
-    tileCache.expireCache(tileCache == usedTileCache ? usedTiles : {});
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileImage.prototype.getGutter = function(projection) {
-  if (ol.ENABLE_RASTER_REPROJECTION &&
-      this.getProjection() && projection &&
-      !ol.proj.equivalent(this.getProjection(), projection)) {
-    return 0;
-  } else {
-    return this.getGutterInternal();
-  }
-};
-
-
-/**
- * @protected
- * @return {number} Gutter.
- */
-ol.source.TileImage.prototype.getGutterInternal = function() {
-  return 0;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileImage.prototype.getOpaque = function(projection) {
-  if (ol.ENABLE_RASTER_REPROJECTION &&
-      this.getProjection() && projection &&
-      !ol.proj.equivalent(this.getProjection(), projection)) {
-    return false;
-  } else {
-    return ol.source.UrlTile.prototype.getOpaque.call(this, projection);
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileImage.prototype.getTileGridForProjection = function(projection) {
-  if (!ol.ENABLE_RASTER_REPROJECTION) {
-    return ol.source.UrlTile.prototype.getTileGridForProjection.call(this, projection);
-  }
-  var thisProj = this.getProjection();
-  if (this.tileGrid &&
-      (!thisProj || ol.proj.equivalent(thisProj, projection))) {
-    return this.tileGrid;
-  } else {
-    var projKey = ol.getUid(projection).toString();
-    if (!(projKey in this.tileGridForProjection)) {
-      this.tileGridForProjection[projKey] =
-          ol.tilegrid.getForProjection(projection);
-    }
-    return /** @type {!ol.tilegrid.TileGrid} */ (this.tileGridForProjection[projKey]);
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileImage.prototype.getTileCacheForProjection = function(projection) {
-  if (!ol.ENABLE_RASTER_REPROJECTION) {
-    return ol.source.UrlTile.prototype.getTileCacheForProjection.call(this, projection);
-  }
-  var thisProj = this.getProjection();
-  if (!thisProj || ol.proj.equivalent(thisProj, projection)) {
-    return this.tileCache;
-  } else {
-    var projKey = ol.getUid(projection).toString();
-    if (!(projKey in this.tileCacheForProjection)) {
-      this.tileCacheForProjection[projKey] = new ol.TileCache();
-    }
-    return this.tileCacheForProjection[projKey];
-  }
-};
-
-
-/**
- * @param {number} z Tile coordinate z.
- * @param {number} x Tile coordinate x.
- * @param {number} y Tile coordinate y.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @param {string} key The key set on the tile.
- * @return {!ol.Tile} Tile.
- * @private
- */
-ol.source.TileImage.prototype.createTile_ = function(z, x, y, pixelRatio, projection, key) {
-  var tileCoord = [z, x, y];
-  var urlTileCoord = this.getTileCoordForTileUrlFunction(
-      tileCoord, projection);
-  var tileUrl = urlTileCoord ?
-      this.tileUrlFunction(urlTileCoord, pixelRatio, projection) : undefined;
-  var tile = new this.tileClass(
-      tileCoord,
-      tileUrl !== undefined ? ol.Tile.State.IDLE : ol.Tile.State.EMPTY,
-      tileUrl !== undefined ? tileUrl : '',
-      this.crossOrigin,
-      this.tileLoadFunction);
-  tile.key = key;
-  ol.events.listen(tile, ol.events.EventType.CHANGE,
-      this.handleTileChange, this);
-  return tile;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileImage.prototype.getTile = function(z, x, y, pixelRatio, projection) {
-  if (!ol.ENABLE_RASTER_REPROJECTION ||
-      !this.getProjection() ||
-      !projection ||
-      ol.proj.equivalent(this.getProjection(), projection)) {
-    return this.getTileInternal(z, x, y, pixelRatio, /** @type {!ol.proj.Projection} */ (projection));
-  } else {
-    var cache = this.getTileCacheForProjection(projection);
-    var tileCoord = [z, x, y];
-    var tile;
-    var tileCoordKey = this.getKeyZXY.apply(this, tileCoord);
-    if (cache.containsKey(tileCoordKey)) {
-      tile = /** @type {!ol.Tile} */ (cache.get(tileCoordKey));
-    }
-    var key = this.getKey();
-    if (tile && tile.key == key) {
-      return tile;
-    } else {
-      var sourceProjection = /** @type {!ol.proj.Projection} */ (this.getProjection());
-      var sourceTileGrid = this.getTileGridForProjection(sourceProjection);
-      var targetTileGrid = this.getTileGridForProjection(projection);
-      var wrappedTileCoord =
-          this.getTileCoordForTileUrlFunction(tileCoord, projection);
-      var newTile = new ol.reproj.Tile(
-          sourceProjection, sourceTileGrid,
-          projection, targetTileGrid,
-          tileCoord, wrappedTileCoord, this.getTilePixelRatio(pixelRatio),
-          this.getGutterInternal(),
-          function(z, x, y, pixelRatio) {
-            return this.getTileInternal(z, x, y, pixelRatio, sourceProjection);
-          }.bind(this), this.reprojectionErrorThreshold_,
-          this.renderReprojectionEdges_);
-      newTile.key = key;
-
-      if (tile) {
-        newTile.interimTile = tile;
-        cache.replace(tileCoordKey, newTile);
-      } else {
-        cache.set(tileCoordKey, newTile);
-      }
-      return newTile;
-    }
-  }
-};
-
-
-/**
- * @param {number} z Tile coordinate z.
- * @param {number} x Tile coordinate x.
- * @param {number} y Tile coordinate y.
- * @param {number} pixelRatio Pixel ratio.
- * @param {!ol.proj.Projection} projection Projection.
- * @return {!ol.Tile} Tile.
- * @protected
- */
-ol.source.TileImage.prototype.getTileInternal = function(z, x, y, pixelRatio, projection) {
-  var tile = null;
-  var tileCoordKey = this.getKeyZXY(z, x, y);
-  var key = this.getKey();
-  if (!this.tileCache.containsKey(tileCoordKey)) {
-    tile = this.createTile_(z, x, y, pixelRatio, projection, key);
-    this.tileCache.set(tileCoordKey, tile);
-  } else {
-    tile = this.tileCache.get(tileCoordKey);
-    if (tile.key != key) {
-      // The source's params changed. If the tile has an interim tile and if we
-      // can use it then we use it. Otherwise we create a new tile.  In both
-      // cases we attempt to assign an interim tile to the new tile.
-      var interimTile = tile;
-      tile = this.createTile_(z, x, y, pixelRatio, projection, key);
-
-      //make the new tile the head of the list,
-      if (interimTile.getState() == ol.Tile.State.IDLE) {
-        //the old tile hasn't begun loading yet, and is now outdated, so we can simply discard it
-        tile.interimTile = interimTile.interimTile;
-      } else {
-        tile.interimTile = interimTile;
-      }
-      tile.refreshInterimChain();
-      this.tileCache.replace(tileCoordKey, tile);
-    }
-  }
-  return tile;
-};
-
-
-/**
- * Sets whether to render reprojection edges or not (usually for debugging).
- * @param {boolean} render Render the edges.
- * @api
- */
-ol.source.TileImage.prototype.setRenderReprojectionEdges = function(render) {
-  if (!ol.ENABLE_RASTER_REPROJECTION ||
-      this.renderReprojectionEdges_ == render) {
-    return;
-  }
-  this.renderReprojectionEdges_ = render;
-  for (var id in this.tileCacheForProjection) {
-    this.tileCacheForProjection[id].clear();
-  }
-  this.changed();
-};
-
-
-/**
- * Sets the tile grid to use when reprojecting the tiles to the given
- * projection instead of the default tile grid for the projection.
- *
- * This can be useful when the default tile grid cannot be created
- * (e.g. projection has no extent defined) or
- * for optimization reasons (custom tile size, resolutions, ...).
- *
- * @param {ol.ProjectionLike} projection Projection.
- * @param {ol.tilegrid.TileGrid} tilegrid Tile grid to use for the projection.
- * @api
- */
-ol.source.TileImage.prototype.setTileGridForProjection = function(projection, tilegrid) {
-  if (ol.ENABLE_RASTER_REPROJECTION) {
-    var proj = ol.proj.get(projection);
-    if (proj) {
-      var projKey = ol.getUid(proj).toString();
-      if (!(projKey in this.tileGridForProjection)) {
-        this.tileGridForProjection[projKey] = tilegrid;
-      }
-    }
-  }
-};
-
-
-/**
- * @param {ol.ImageTile} imageTile Image tile.
- * @param {string} src Source.
- */
-ol.source.TileImage.defaultTileLoadFunction = function(imageTile, src) {
-  imageTile.getImage().src = src;
-};
-
-goog.provide('ol.source.BingMaps');
-
-goog.require('ol');
-goog.require('ol.Attribution');
-goog.require('ol.TileUrlFunction');
-goog.require('ol.extent');
-goog.require('ol.net');
-goog.require('ol.proj');
-goog.require('ol.source.State');
-goog.require('ol.source.TileImage');
-goog.require('ol.tilecoord');
-goog.require('ol.tilegrid');
-
-
-/**
- * @classdesc
- * Layer source for Bing Maps tile data.
- *
- * @constructor
- * @extends {ol.source.TileImage}
- * @param {olx.source.BingMapsOptions} options Bing Maps options.
- * @api stable
- */
-ol.source.BingMaps = function(options) {
-
-  ol.source.TileImage.call(this, {
-    cacheSize: options.cacheSize,
-    crossOrigin: 'anonymous',
-    opaque: true,
-    projection: ol.proj.get('EPSG:3857'),
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    state: ol.source.State.LOADING,
-    tileLoadFunction: options.tileLoadFunction,
-    wrapX: options.wrapX !== undefined ? options.wrapX : true
-  });
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.culture_ = options.culture !== undefined ? options.culture : 'en-us';
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.maxZoom_ = options.maxZoom !== undefined ? options.maxZoom : -1;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.apiKey_ = options.key;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.imagerySet_ = options.imagerySet;
-
-  var url = 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/' +
-      this.imagerySet_ +
-      '?uriScheme=https&include=ImageryProviders&key=' + this.apiKey_;
-
-  ol.net.jsonp(url, this.handleImageryMetadataResponse.bind(this), undefined,
-      'jsonp');
-
-};
-ol.inherits(ol.source.BingMaps, ol.source.TileImage);
-
-
-/**
- * The attribution containing a link to the Microsoft® Bing™ Maps Platform APIs’
- * Terms Of Use.
- * @const
- * @type {ol.Attribution}
- * @api
- */
-ol.source.BingMaps.TOS_ATTRIBUTION = new ol.Attribution({
-  html: '<a class="ol-attribution-bing-tos" ' +
-      'href="http://www.microsoft.com/maps/product/terms.html">' +
-      'Terms of Use</a>'
-});
-
-
-/**
- * Get the api key used for this source.
- *
- * @return {string} The api key.
- * @api
- */
-ol.source.BingMaps.prototype.getApiKey = function() {
-  return this.apiKey_;
-};
-
-
-/**
- * Get the imagery set associated with this source.
- *
- * @return {string} The imagery set.
- * @api
- */
-ol.source.BingMaps.prototype.getImagerySet = function() {
-  return this.imagerySet_;
-};
-
-
-/**
- * @param {BingMapsImageryMetadataResponse} response Response.
- */
-ol.source.BingMaps.prototype.handleImageryMetadataResponse = function(response) {
-
-  if (response.statusCode != 200 ||
-      response.statusDescription != 'OK' ||
-      response.authenticationResultCode != 'ValidCredentials' ||
-      response.resourceSets.length != 1 ||
-      response.resourceSets[0].resources.length != 1) {
-    this.setState(ol.source.State.ERROR);
-    return;
-  }
-
-  var brandLogoUri = response.brandLogoUri;
-  if (brandLogoUri.indexOf('https') == -1) {
-    brandLogoUri = brandLogoUri.replace('http', 'https');
-  }
-  //var copyright = response.copyright;  // FIXME do we need to display this?
-  var resource = response.resourceSets[0].resources[0];
-  ol.DEBUG && console.assert(resource.imageWidth == resource.imageHeight,
-      'resource has imageWidth equal to imageHeight, i.e. is square');
-  var maxZoom = this.maxZoom_ == -1 ? resource.zoomMax : this.maxZoom_;
-
-  var sourceProjection = this.getProjection();
-  var extent = ol.tilegrid.extentFromProjection(sourceProjection);
-  var tileSize = resource.imageWidth == resource.imageHeight ?
-      resource.imageWidth : [resource.imageWidth, resource.imageHeight];
-  var tileGrid = ol.tilegrid.createXYZ({
-    extent: extent,
-    minZoom: resource.zoomMin,
-    maxZoom: maxZoom,
-    tileSize: tileSize
-  });
-  this.tileGrid = tileGrid;
-
-  var culture = this.culture_;
-  this.tileUrlFunction = ol.TileUrlFunction.createFromTileUrlFunctions(
-      resource.imageUrlSubdomains.map(function(subdomain) {
-        var quadKeyTileCoord = [0, 0, 0];
-        var imageUrl = resource.imageUrl
-            .replace('{subdomain}', subdomain)
-            .replace('{culture}', culture);
-        return (
-            /**
-             * @param {ol.TileCoord} tileCoord Tile coordinate.
-             * @param {number} pixelRatio Pixel ratio.
-             * @param {ol.proj.Projection} projection Projection.
-             * @return {string|undefined} Tile URL.
-             */
-            function(tileCoord, pixelRatio, projection) {
-              ol.DEBUG && console.assert(ol.proj.equivalent(
-                  projection, sourceProjection),
-                  'projections are equivalent');
-              if (!tileCoord) {
-                return undefined;
-              } else {
-                ol.tilecoord.createOrUpdate(tileCoord[0], tileCoord[1],
-                    -tileCoord[2] - 1, quadKeyTileCoord);
-                return imageUrl.replace('{quadkey}', ol.tilecoord.quadKey(
-                    quadKeyTileCoord));
-              }
-            });
-      }));
-
-  if (resource.imageryProviders) {
-    var transform = ol.proj.getTransformFromProjections(
-        ol.proj.get('EPSG:4326'), this.getProjection());
-
-    var attributions = resource.imageryProviders.map(function(imageryProvider) {
-      var html = imageryProvider.attribution;
-      /** @type {Object.<string, Array.<ol.TileRange>>} */
-      var tileRanges = {};
-      imageryProvider.coverageAreas.forEach(function(coverageArea) {
-        var minZ = coverageArea.zoomMin;
-        var maxZ = Math.min(coverageArea.zoomMax, maxZoom);
-        var bbox = coverageArea.bbox;
-        var epsg4326Extent = [bbox[1], bbox[0], bbox[3], bbox[2]];
-        var extent = ol.extent.applyTransform(epsg4326Extent, transform);
-        var tileRange, z, zKey;
-        for (z = minZ; z <= maxZ; ++z) {
-          zKey = z.toString();
-          tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
-          if (zKey in tileRanges) {
-            tileRanges[zKey].push(tileRange);
-          } else {
-            tileRanges[zKey] = [tileRange];
-          }
-        }
-      });
-      return new ol.Attribution({html: html, tileRanges: tileRanges});
-    });
-    attributions.push(ol.source.BingMaps.TOS_ATTRIBUTION);
-    this.setAttributions(attributions);
-  }
-
-  this.setLogo(brandLogoUri);
-
-  this.setState(ol.source.State.READY);
-
-};
-
-goog.provide('ol.source.XYZ');
-
-goog.require('ol');
-goog.require('ol.source.TileImage');
-goog.require('ol.tilegrid');
-
-
-/**
- * @classdesc
- * Layer source for tile data with URLs in a set XYZ format that are
- * defined in a URL template. By default, this follows the widely-used
- * Google grid where `x` 0 and `y` 0 are in the top left. Grids like
- * TMS where `x` 0 and `y` 0 are in the bottom left can be used by
- * using the `{-y}` placeholder in the URL template, so long as the
- * source does not have a custom tile grid. In this case,
- * {@link ol.source.TileImage} can be used with a `tileUrlFunction`
- * such as:
- *
- *  tileUrlFunction: function(coordinate) {
- *    return 'http://mapserver.com/' + coordinate[0] + '/' +
- *        coordinate[1] + '/' + coordinate[2] + '.png';
- *    }
- *
- *
- * @constructor
- * @extends {ol.source.TileImage}
- * @param {olx.source.XYZOptions=} opt_options XYZ options.
- * @api stable
- */
-ol.source.XYZ = function(opt_options) {
-  var options = opt_options || {};
-  var projection = options.projection !== undefined ?
-      options.projection : 'EPSG:3857';
-
-  var tileGrid = options.tileGrid !== undefined ? options.tileGrid :
-      ol.tilegrid.createXYZ({
-        extent: ol.tilegrid.extentFromProjection(projection),
-        maxZoom: options.maxZoom,
-        minZoom: options.minZoom,
-        tileSize: options.tileSize
-      });
-
-  ol.source.TileImage.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    crossOrigin: options.crossOrigin,
-    logo: options.logo,
-    opaque: options.opaque,
-    projection: projection,
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    tileGrid: tileGrid,
-    tileLoadFunction: options.tileLoadFunction,
-    tilePixelRatio: options.tilePixelRatio,
-    tileUrlFunction: options.tileUrlFunction,
-    url: options.url,
-    urls: options.urls,
-    wrapX: options.wrapX !== undefined ? options.wrapX : true
-  });
-
-};
-ol.inherits(ol.source.XYZ, ol.source.TileImage);
-
-goog.provide('ol.source.CartoDB');
-
-goog.require('ol');
-goog.require('ol.obj');
-goog.require('ol.source.State');
-goog.require('ol.source.XYZ');
-
-
-/**
- * @classdesc
- * Layer source for the CartoDB tiles.
- *
- * @constructor
- * @extends {ol.source.XYZ}
- * @param {olx.source.CartoDBOptions} options CartoDB options.
- * @api
- */
-ol.source.CartoDB = function(options) {
-
-  /**
-   * @type {string}
-   * @private
-   */
-  this.account_ = options.account;
-
-  /**
-   * @type {string}
-   * @private
-   */
-  this.mapId_ = options.map || '';
-
-  /**
-   * @type {!Object}
-   * @private
-   */
-  this.config_ = options.config || {};
-
-  /**
-   * @type {!Object.<string, CartoDBLayerInfo>}
-   * @private
-   */
-  this.templateCache_ = {};
-
-  ol.source.XYZ.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    crossOrigin: options.crossOrigin,
-    logo: options.logo,
-    maxZoom: options.maxZoom !== undefined ? options.maxZoom : 18,
-    minZoom: options.minZoom,
-    projection: options.projection,
-    state: ol.source.State.LOADING,
-    wrapX: options.wrapX
-  });
-  this.initializeMap_();
-};
-ol.inherits(ol.source.CartoDB, ol.source.XYZ);
-
-
-/**
- * Returns the current config.
- * @return {!Object} The current configuration.
- * @api
- */
-ol.source.CartoDB.prototype.getConfig = function() {
-  return this.config_;
-};
-
-
-/**
- * Updates the carto db config.
- * @param {Object} config a key-value lookup. Values will replace current values
- *     in the config.
- * @api
- */
-ol.source.CartoDB.prototype.updateConfig = function(config) {
-  ol.obj.assign(this.config_, config);
-  this.initializeMap_();
-};
-
-
-/**
- * Sets the CartoDB config
- * @param {Object} config In the case of anonymous maps, a CartoDB configuration
- *     object.
- * If using named maps, a key-value lookup with the template parameters.
- * @api
- */
-ol.source.CartoDB.prototype.setConfig = function(config) {
-  this.config_ = config || {};
-  this.initializeMap_();
-};
-
-
-/**
- * Issue a request to initialize the CartoDB map.
- * @private
- */
-ol.source.CartoDB.prototype.initializeMap_ = function() {
-  var paramHash = JSON.stringify(this.config_);
-  if (this.templateCache_[paramHash]) {
-    this.applyTemplate_(this.templateCache_[paramHash]);
-    return;
-  }
-  var mapUrl = 'https://' + this.account_ + '.cartodb.com/api/v1/map';
-
-  if (this.mapId_) {
-    mapUrl += '/named/' + this.mapId_;
-  }
-
-  var client = new XMLHttpRequest();
-  client.addEventListener('load', this.handleInitResponse_.bind(this, paramHash));
-  client.addEventListener('error', this.handleInitError_.bind(this));
-  client.open('POST', mapUrl);
-  client.setRequestHeader('Content-type', 'application/json');
-  client.send(JSON.stringify(this.config_));
-};
-
-
-/**
- * Handle map initialization response.
- * @param {string} paramHash a hash representing the parameter set that was used
- *     for the request
- * @param {Event} event Event.
- * @private
- */
-ol.source.CartoDB.prototype.handleInitResponse_ = function(paramHash, event) {
-  var client = /** @type {XMLHttpRequest} */ (event.target);
-  // status will be 0 for file:// urls
-  if (!client.status || client.status >= 200 && client.status < 300) {
-    var response;
-    try {
-      response = /** @type {CartoDBLayerInfo} */(JSON.parse(client.responseText));
-    } catch (err) {
-      this.setState(ol.source.State.ERROR);
-      return;
-    }
-    this.applyTemplate_(response);
-    this.templateCache_[paramHash] = response;
-    this.setState(ol.source.State.READY);
-  } else {
-    this.setState(ol.source.State.ERROR);
-  }
-};
-
-
-/**
- * @private
- * @param {Event} event Event.
- */
-ol.source.CartoDB.prototype.handleInitError_ = function(event) {
-  this.setState(ol.source.State.ERROR);
-};
-
-
-/**
- * Apply the new tile urls returned by carto db
- * @param {CartoDBLayerInfo} data Result of carto db call.
- * @private
- */
-ol.source.CartoDB.prototype.applyTemplate_ = function(data) {
-  var tilesUrl = 'https://' + data.cdn_url.https + '/' + this.account_ +
-      '/api/v1/map/' + data.layergroupid + '/{z}/{x}/{y}.png';
-  this.setUrl(tilesUrl);
-};
-
-// FIXME keep cluster cache by resolution ?
-// FIXME distance not respected because of the centroid
-
-goog.provide('ol.source.Cluster');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.Feature');
-goog.require('ol.coordinate');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.geom.Point');
-goog.require('ol.source.Vector');
-
-
-/**
- * @classdesc
- * Layer source to cluster vector data. Works out of the box with point
- * geometries. For other geometry types, or if not all geometries should be
- * considered for clustering, a custom `geometryFunction` can be defined.
- *
- * @constructor
- * @param {olx.source.ClusterOptions} options Constructor options.
- * @extends {ol.source.Vector}
- * @api
- */
-ol.source.Cluster = function(options) {
-  ol.source.Vector.call(this, {
-    attributions: options.attributions,
-    extent: options.extent,
-    logo: options.logo,
-    projection: options.projection,
-    wrapX: options.wrapX
-  });
-
-  /**
-   * @type {number|undefined}
-   * @private
-   */
-  this.resolution_ = undefined;
-
-  /**
-   * @type {number}
-   * @private
-   */
-  this.distance_ = options.distance !== undefined ? options.distance : 20;
-
-  /**
-   * @type {Array.<ol.Feature>}
-   * @private
-   */
-  this.features_ = [];
-
-  /**
-   * @param {ol.Feature} feature Feature.
-   * @return {ol.geom.Point} Cluster calculation point.
-   */
-  this.geometryFunction_ = options.geometryFunction || function(feature) {
-    var geometry = /** @type {ol.geom.Point} */ (feature.getGeometry());
-    ol.asserts.assert(geometry instanceof ol.geom.Point,
-        10); // The default `geometryFunction` can only handle `ol.geom.Point` geometries
-    return geometry;
-  };
-
-  /**
-   * @type {ol.source.Vector}
-   * @private
-   */
-  this.source_ = options.source;
-
-  this.source_.on(ol.events.EventType.CHANGE,
-      ol.source.Cluster.prototype.refresh_, this);
-};
-ol.inherits(ol.source.Cluster, ol.source.Vector);
-
-
-/**
- * Get a reference to the wrapped source.
- * @return {ol.source.Vector} Source.
- * @api
- */
-ol.source.Cluster.prototype.getSource = function() {
-  return this.source_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.Cluster.prototype.loadFeatures = function(extent, resolution,
-    projection) {
-  this.source_.loadFeatures(extent, resolution, projection);
-  if (resolution !== this.resolution_) {
-    this.clear();
-    this.resolution_ = resolution;
-    this.cluster_();
-    this.addFeatures(this.features_);
-  }
-};
-
-
-/**
- * Set the distance in pixels between clusters.
- * @param {number} distance The distance in pixels.
- * @api
- */
-ol.source.Cluster.prototype.setDistance = function(distance) {
-  this.distance_ = distance;
-  this.refresh_();
-};
-
-
-/**
- * handle the source changing
- * @private
- */
-ol.source.Cluster.prototype.refresh_ = function() {
-  this.clear();
-  this.cluster_();
-  this.addFeatures(this.features_);
-  this.changed();
-};
-
-
-/**
- * @private
- */
-ol.source.Cluster.prototype.cluster_ = function() {
-  if (this.resolution_ === undefined) {
-    return;
-  }
-  this.features_.length = 0;
-  var extent = ol.extent.createEmpty();
-  var mapDistance = this.distance_ * this.resolution_;
-  var features = this.source_.getFeatures();
-
-  /**
-   * @type {!Object.<string, boolean>}
-   */
-  var clustered = {};
-
-  for (var i = 0, ii = features.length; i < ii; i++) {
-    var feature = features[i];
-    if (!(ol.getUid(feature).toString() in clustered)) {
-      var geometry = this.geometryFunction_(feature);
-      if (geometry) {
-        var coordinates = geometry.getCoordinates();
-        ol.extent.createOrUpdateFromCoordinate(coordinates, extent);
-        ol.extent.buffer(extent, mapDistance, extent);
-
-        var neighbors = this.source_.getFeaturesInExtent(extent);
-        ol.DEBUG && console.assert(neighbors.length >= 1, 'at least one neighbor found');
-        neighbors = neighbors.filter(function(neighbor) {
-          var uid = ol.getUid(neighbor).toString();
-          if (!(uid in clustered)) {
-            clustered[uid] = true;
-            return true;
-          } else {
-            return false;
-          }
-        });
-        this.features_.push(this.createCluster_(neighbors));
-      }
-    }
-  }
-  ol.DEBUG && console.assert(
-      Object.keys(clustered).length == this.source_.getFeatures().length,
-      'number of clustered equals number of features in the source');
-};
-
-
-/**
- * @param {Array.<ol.Feature>} features Features
- * @return {ol.Feature} The cluster feature.
- * @private
- */
-ol.source.Cluster.prototype.createCluster_ = function(features) {
-  var centroid = [0, 0];
-  for (var i = features.length - 1; i >= 0; --i) {
-    var geometry = this.geometryFunction_(features[i]);
-    if (geometry) {
-      ol.coordinate.add(centroid, geometry.getCoordinates());
-    } else {
-      features.splice(i, 1);
-    }
-  }
-  ol.coordinate.scale(centroid, 1 / features.length);
-
-  var cluster = new ol.Feature(new ol.geom.Point(centroid));
-  cluster.set('features', features);
-  return cluster;
-};
-
-goog.provide('ol.uri');
-
-
-/**
- * Appends query parameters to a URI.
- *
- * @param {string} uri The original URI, which may already have query data.
- * @param {!Object} params An object where keys are URI-encoded parameter keys,
- *     and the values are arbitrary types or arrays.
- * @return {string} The new URI.
- */
-ol.uri.appendParams = function(uri, params) {
-  var keyParams = [];
-  // Skip any null or undefined parameter values
-  Object.keys(params).forEach(function(k) {
-    if (params[k] !== null && params[k] !== undefined) {
-      keyParams.push(k + '=' + encodeURIComponent(params[k]));
-    }
-  });
-  var qs = keyParams.join('&');
-  // remove any trailing ? or &
-  uri = uri.replace(/[?&]$/, '');
-  // append ? or & depending on whether uri has existing parameters
-  uri = uri.indexOf('?') === -1 ? uri + '?' : uri + '&';
-  return uri + qs;
-};
-
-goog.provide('ol.source.ImageArcGISRest');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.asserts');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.obj');
-goog.require('ol.source.Image');
-goog.require('ol.uri');
-
-
-/**
- * @classdesc
- * Source for data from ArcGIS Rest services providing single, untiled images.
- * Useful when underlying map service has labels.
- *
- * If underlying map service is not using labels,
- * take advantage of ol image caching and use
- * {@link ol.source.TileArcGISRest} data source.
- *
- * @constructor
- * @fires ol.source.Image.Event
- * @extends {ol.source.Image}
- * @param {olx.source.ImageArcGISRestOptions=} opt_options Image ArcGIS Rest Options.
- * @api
- */
-ol.source.ImageArcGISRest = function(opt_options) {
-
-  var options = opt_options || {};
-
-  ol.source.Image.call(this, {
-    attributions: options.attributions,
-    logo: options.logo,
-    projection: options.projection,
-    resolutions: options.resolutions
-  });
-
-  /**
-   * @private
-   * @type {?string}
-   */
-  this.crossOrigin_ =
-      options.crossOrigin !== undefined ? options.crossOrigin : null;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.url_ = options.url;
-
-  /**
-   * @private
-   * @type {ol.ImageLoadFunctionType}
-   */
-  this.imageLoadFunction_ = options.imageLoadFunction !== undefined ?
-      options.imageLoadFunction : ol.source.Image.defaultImageLoadFunction;
-
-
-  /**
-   * @private
-   * @type {!Object}
-   */
-  this.params_ = options.params || {};
-
-  /**
-   * @private
-   * @type {ol.Image}
-   */
-  this.image_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.imageSize_ = [0, 0];
-
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedRevision_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.ratio_ = options.ratio !== undefined ? options.ratio : 1.5;
-
-};
-ol.inherits(ol.source.ImageArcGISRest, ol.source.Image);
-
-
-/**
- * Get the user-provided params, i.e. those passed to the constructor through
- * the "params" option, and possibly updated using the updateParams method.
- * @return {Object} Params.
- * @api stable
- */
-ol.source.ImageArcGISRest.prototype.getParams = function() {
-  return this.params_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.ImageArcGISRest.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {
-
-  if (this.url_ === undefined) {
-    return null;
-  }
-
-  resolution = this.findNearestResolution(resolution);
-
-  var image = this.image_;
-  if (image &&
-      this.renderedRevision_ == this.getRevision() &&
-      image.getResolution() == resolution &&
-      image.getPixelRatio() == pixelRatio &&
-      ol.extent.containsExtent(image.getExtent(), extent)) {
-    return image;
-  }
-
-  var params = {
-    'F': 'image',
-    'FORMAT': 'PNG32',
-    'TRANSPARENT': true
-  };
-  ol.obj.assign(params, this.params_);
-
-  extent = extent.slice();
-  var centerX = (extent[0] + extent[2]) / 2;
-  var centerY = (extent[1] + extent[3]) / 2;
-  if (this.ratio_ != 1) {
-    var halfWidth = this.ratio_ * ol.extent.getWidth(extent) / 2;
-    var halfHeight = this.ratio_ * ol.extent.getHeight(extent) / 2;
-    extent[0] = centerX - halfWidth;
-    extent[1] = centerY - halfHeight;
-    extent[2] = centerX + halfWidth;
-    extent[3] = centerY + halfHeight;
-  }
-
-  var imageResolution = resolution / pixelRatio;
-
-  // Compute an integer width and height.
-  var width = Math.ceil(ol.extent.getWidth(extent) / imageResolution);
-  var height = Math.ceil(ol.extent.getHeight(extent) / imageResolution);
-
-  // Modify the extent to match the integer width and height.
-  extent[0] = centerX - imageResolution * width / 2;
-  extent[2] = centerX + imageResolution * width / 2;
-  extent[1] = centerY - imageResolution * height / 2;
-  extent[3] = centerY + imageResolution * height / 2;
-
-  this.imageSize_[0] = width;
-  this.imageSize_[1] = height;
-
-  var url = this.getRequestUrl_(extent, this.imageSize_, pixelRatio,
-      projection, params);
-
-  this.image_ = new ol.Image(extent, resolution, pixelRatio,
-      this.getAttributions(), url, this.crossOrigin_, this.imageLoadFunction_);
-
-  this.renderedRevision_ = this.getRevision();
-
-  ol.events.listen(this.image_, ol.events.EventType.CHANGE,
-      this.handleImageChange, this);
-
-  return this.image_;
-
-};
-
-
-/**
- * Return the image load function of the source.
- * @return {ol.ImageLoadFunctionType} The image load function.
- * @api
- */
-ol.source.ImageArcGISRest.prototype.getImageLoadFunction = function() {
-  return this.imageLoadFunction_;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {ol.Size} size Size.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @param {Object} params Params.
- * @return {string} Request URL.
- * @private
- */
-ol.source.ImageArcGISRest.prototype.getRequestUrl_ = function(extent, size, pixelRatio, projection, params) {
-
-  ol.DEBUG && console.assert(this.url_ !== undefined, 'url is defined');
-
-  // ArcGIS Server only wants the numeric portion of the projection ID.
-  var srid = projection.getCode().split(':').pop();
-
-  params['SIZE'] = size[0] + ',' + size[1];
-  params['BBOX'] = extent.join(',');
-  params['BBOXSR'] = srid;
-  params['IMAGESR'] = srid;
-  params['DPI'] = 90 * pixelRatio;
-
-  var url = this.url_;
-
-  var modifiedUrl = url
-    .replace(/MapServer\/?$/, 'MapServer/export')
-    .replace(/ImageServer\/?$/, 'ImageServer/exportImage');
-  if (modifiedUrl == url) {
-    ol.asserts.assert(false, 50); // `options.featureTypes` should be an Array
-  }
-  return ol.uri.appendParams(modifiedUrl, params);
-};
-
-
-/**
- * Return the URL used for this ArcGIS source.
- * @return {string|undefined} URL.
- * @api stable
- */
-ol.source.ImageArcGISRest.prototype.getUrl = function() {
-  return this.url_;
-};
-
-
-/**
- * Set the image load function of the source.
- * @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.
- * @api
- */
-ol.source.ImageArcGISRest.prototype.setImageLoadFunction = function(imageLoadFunction) {
-  this.image_ = null;
-  this.imageLoadFunction_ = imageLoadFunction;
-  this.changed();
-};
-
-
-/**
- * Set the URL to use for requests.
- * @param {string|undefined} url URL.
- * @api stable
- */
-ol.source.ImageArcGISRest.prototype.setUrl = function(url) {
-  if (url != this.url_) {
-    this.url_ = url;
-    this.image_ = null;
-    this.changed();
-  }
-};
-
-
-/**
- * Update the user-provided params.
- * @param {Object} params Params.
- * @api stable
- */
-ol.source.ImageArcGISRest.prototype.updateParams = function(params) {
-  ol.obj.assign(this.params_, params);
-  this.image_ = null;
-  this.changed();
-};
-
-goog.provide('ol.source.ImageMapGuide');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.obj');
-goog.require('ol.source.Image');
-goog.require('ol.uri');
-
-
-/**
- * @classdesc
- * Source for images from Mapguide servers
- *
- * @constructor
- * @fires ol.source.Image.Event
- * @extends {ol.source.Image}
- * @param {olx.source.ImageMapGuideOptions} options Options.
- * @api stable
- */
-ol.source.ImageMapGuide = function(options) {
-
-  ol.source.Image.call(this, {
-    projection: options.projection,
-    resolutions: options.resolutions
-  });
-
-  /**
-   * @private
-   * @type {?string}
-   */
-  this.crossOrigin_ =
-      options.crossOrigin !== undefined ? options.crossOrigin : null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.displayDpi_ = options.displayDpi !== undefined ?
-      options.displayDpi : 96;
-
-  /**
-   * @private
-   * @type {!Object}
-   */
-  this.params_ = options.params || {};
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.url_ = options.url;
-
-  /**
-   * @private
-   * @type {ol.ImageLoadFunctionType}
-   */
-  this.imageLoadFunction_ = options.imageLoadFunction !== undefined ?
-      options.imageLoadFunction : ol.source.Image.defaultImageLoadFunction;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.metersPerUnit_ = options.metersPerUnit !== undefined ?
-      options.metersPerUnit : 1;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.ratio_ = options.ratio !== undefined ? options.ratio : 1;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.useOverlay_ = options.useOverlay !== undefined ?
-      options.useOverlay : false;
-
-  /**
-   * @private
-   * @type {ol.Image}
-   */
-  this.image_ = null;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedRevision_ = 0;
-
-};
-ol.inherits(ol.source.ImageMapGuide, ol.source.Image);
-
-
-/**
- * Get the user-provided params, i.e. those passed to the constructor through
- * the "params" option, and possibly updated using the updateParams method.
- * @return {Object} Params.
- * @api stable
- */
-ol.source.ImageMapGuide.prototype.getParams = function() {
-  return this.params_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.ImageMapGuide.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {
-  resolution = this.findNearestResolution(resolution);
-  pixelRatio = this.hidpi_ ? pixelRatio : 1;
-
-  var image = this.image_;
-  if (image &&
-      this.renderedRevision_ == this.getRevision() &&
-      image.getResolution() == resolution &&
-      image.getPixelRatio() == pixelRatio &&
-      ol.extent.containsExtent(image.getExtent(), extent)) {
-    return image;
-  }
-
-  if (this.ratio_ != 1) {
-    extent = extent.slice();
-    ol.extent.scaleFromCenter(extent, this.ratio_);
-  }
-  var width = ol.extent.getWidth(extent) / resolution;
-  var height = ol.extent.getHeight(extent) / resolution;
-  var size = [width * pixelRatio, height * pixelRatio];
-
-  if (this.url_ !== undefined) {
-    var imageUrl = this.getUrl(this.url_, this.params_, extent, size,
-        projection);
-    image = new ol.Image(extent, resolution, pixelRatio,
-        this.getAttributions(), imageUrl, this.crossOrigin_,
-        this.imageLoadFunction_);
-    ol.events.listen(image, ol.events.EventType.CHANGE,
-        this.handleImageChange, this);
-  } else {
-    image = null;
-  }
-  this.image_ = image;
-  this.renderedRevision_ = this.getRevision();
-
-  return image;
-};
-
-
-/**
- * Return the image load function of the source.
- * @return {ol.ImageLoadFunctionType} The image load function.
- * @api
- */
-ol.source.ImageMapGuide.prototype.getImageLoadFunction = function() {
-  return this.imageLoadFunction_;
-};
-
-
-/**
- * @param {ol.Extent} extent The map extents.
- * @param {ol.Size} size The viewport size.
- * @param {number} metersPerUnit The meters-per-unit value.
- * @param {number} dpi The display resolution.
- * @return {number} The computed map scale.
- */
-ol.source.ImageMapGuide.getScale = function(extent, size, metersPerUnit, dpi) {
-  var mcsW = ol.extent.getWidth(extent);
-  var mcsH = ol.extent.getHeight(extent);
-  var devW = size[0];
-  var devH = size[1];
-  var mpp = 0.0254 / dpi;
-  if (devH * mcsW > devW * mcsH) {
-    return mcsW * metersPerUnit / (devW * mpp); // width limited
-  } else {
-    return mcsH * metersPerUnit / (devH * mpp); // height limited
-  }
-};
-
-
-/**
- * Update the user-provided params.
- * @param {Object} params Params.
- * @api stable
- */
-ol.source.ImageMapGuide.prototype.updateParams = function(params) {
-  ol.obj.assign(this.params_, params);
-  this.changed();
-};
-
-
-/**
- * @param {string} baseUrl The mapagent url.
- * @param {Object.<string, string|number>} params Request parameters.
- * @param {ol.Extent} extent Extent.
- * @param {ol.Size} size Size.
- * @param {ol.proj.Projection} projection Projection.
- * @return {string} The mapagent map image request URL.
- */
-ol.source.ImageMapGuide.prototype.getUrl = function(baseUrl, params, extent, size, projection) {
-  var scale = ol.source.ImageMapGuide.getScale(extent, size,
-      this.metersPerUnit_, this.displayDpi_);
-  var center = ol.extent.getCenter(extent);
-  var baseParams = {
-    'OPERATION': this.useOverlay_ ? 'GETDYNAMICMAPOVERLAYIMAGE' : 'GETMAPIMAGE',
-    'VERSION': '2.0.0',
-    'LOCALE': 'en',
-    'CLIENTAGENT': 'ol.source.ImageMapGuide source',
-    'CLIP': '1',
-    'SETDISPLAYDPI': this.displayDpi_,
-    'SETDISPLAYWIDTH': Math.round(size[0]),
-    'SETDISPLAYHEIGHT': Math.round(size[1]),
-    'SETVIEWSCALE': scale,
-    'SETVIEWCENTERX': center[0],
-    'SETVIEWCENTERY': center[1]
-  };
-  ol.obj.assign(baseParams, params);
-  return ol.uri.appendParams(baseUrl, baseParams);
-};
-
-
-/**
- * Set the image load function of the MapGuide source.
- * @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.
- * @api
- */
-ol.source.ImageMapGuide.prototype.setImageLoadFunction = function(
-    imageLoadFunction) {
-  this.image_ = null;
-  this.imageLoadFunction_ = imageLoadFunction;
-  this.changed();
-};
-
-goog.provide('ol.source.ImageStatic');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.proj');
-goog.require('ol.source.Image');
-
-
-/**
- * @classdesc
- * A layer source for displaying a single, static image.
- *
- * @constructor
- * @extends {ol.source.Image}
- * @param {olx.source.ImageStaticOptions} options Options.
- * @api stable
- */
-ol.source.ImageStatic = function(options) {
-  var imageExtent = options.imageExtent;
-
-  var crossOrigin = options.crossOrigin !== undefined ?
-      options.crossOrigin : null;
-
-  var /** @type {ol.ImageLoadFunctionType} */ imageLoadFunction =
-      options.imageLoadFunction !== undefined ?
-      options.imageLoadFunction : ol.source.Image.defaultImageLoadFunction;
-
-  ol.source.Image.call(this, {
-    attributions: options.attributions,
-    logo: options.logo,
-    projection: ol.proj.get(options.projection)
-  });
-
-  /**
-   * @private
-   * @type {ol.Image}
-   */
-  this.image_ = new ol.Image(imageExtent, undefined, 1, this.getAttributions(),
-      options.url, crossOrigin, imageLoadFunction);
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.imageSize_ = options.imageSize ? options.imageSize : null;
-
-  ol.events.listen(this.image_, ol.events.EventType.CHANGE,
-      this.handleImageChange, this);
-
-};
-ol.inherits(ol.source.ImageStatic, ol.source.Image);
-
-
-/**
- * @inheritDoc
- */
-ol.source.ImageStatic.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {
-  if (ol.extent.intersects(extent, this.image_.getExtent())) {
-    return this.image_;
-  }
-  return null;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.ImageStatic.prototype.handleImageChange = function(evt) {
-  if (this.image_.getState() == ol.Image.State.LOADED) {
-    var imageExtent = this.image_.getExtent();
-    var image = this.image_.getImage();
-    var imageWidth, imageHeight;
-    if (this.imageSize_) {
-      imageWidth = this.imageSize_[0];
-      imageHeight = this.imageSize_[1];
-    } else {
-      // TODO: remove the type cast when a closure-compiler > 20160315 is used.
-      // see: https://github.com/google/closure-compiler/pull/1664
-      imageWidth = /** @type {number} */ (image.width);
-      imageHeight = /** @type {number} */ (image.height);
-    }
-    var resolution = ol.extent.getHeight(imageExtent) / imageHeight;
-    var targetWidth = Math.ceil(ol.extent.getWidth(imageExtent) / resolution);
-    if (targetWidth != imageWidth) {
-      var context = ol.dom.createCanvasContext2D(targetWidth, imageHeight);
-      var canvas = context.canvas;
-      context.drawImage(image, 0, 0, imageWidth, imageHeight,
-          0, 0, canvas.width, canvas.height);
-      this.image_.setImage(canvas);
-    }
-  }
-  ol.source.Image.prototype.handleImageChange.call(this, evt);
-};
-
-goog.provide('ol.source.WMSServerType');
-
-
-/**
- * Available server types: `'carmentaserver'`, `'geoserver'`, `'mapserver'`,
- *     `'qgis'`. These are servers that have vendor parameters beyond the WMS
- *     specification that OpenLayers can make use of.
- * @enum {string}
- */
-ol.source.WMSServerType = {
-  CARMENTA_SERVER: 'carmentaserver',
-  GEOSERVER: 'geoserver',
-  MAPSERVER: 'mapserver',
-  QGIS: 'qgis'
-};
-
-// FIXME cannot be shared between maps with different projections
-
-goog.provide('ol.source.ImageWMS');
-
-goog.require('ol');
-goog.require('ol.Image');
-goog.require('ol.asserts');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.obj');
-goog.require('ol.proj');
-goog.require('ol.source.Image');
-goog.require('ol.source.WMSServerType');
-goog.require('ol.string');
-goog.require('ol.uri');
-
-
-/**
- * @classdesc
- * Source for WMS servers providing single, untiled images.
- *
- * @constructor
- * @fires ol.source.Image.Event
- * @extends {ol.source.Image}
- * @param {olx.source.ImageWMSOptions=} opt_options Options.
- * @api stable
- */
-ol.source.ImageWMS = function(opt_options) {
-
-  var options = opt_options || {};
-
-  ol.source.Image.call(this, {
-    attributions: options.attributions,
-    logo: options.logo,
-    projection: options.projection,
-    resolutions: options.resolutions
-  });
-
-  /**
-   * @private
-   * @type {?string}
-   */
-  this.crossOrigin_ =
-      options.crossOrigin !== undefined ? options.crossOrigin : null;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.url_ = options.url;
-
-  /**
-   * @private
-   * @type {ol.ImageLoadFunctionType}
-   */
-  this.imageLoadFunction_ = options.imageLoadFunction !== undefined ?
-      options.imageLoadFunction : ol.source.Image.defaultImageLoadFunction;
-
-  /**
-   * @private
-   * @type {!Object}
-   */
-  this.params_ = options.params || {};
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.v13_ = true;
-  this.updateV13_();
-
-  /**
-   * @private
-   * @type {ol.source.WMSServerType|undefined}
-   */
-  this.serverType_ =
-      /** @type {ol.source.WMSServerType|undefined} */ (options.serverType);
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;
-
-  /**
-   * @private
-   * @type {ol.Image}
-   */
-  this.image_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.imageSize_ = [0, 0];
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.renderedRevision_ = 0;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.ratio_ = options.ratio !== undefined ? options.ratio : 1.5;
-
-};
-ol.inherits(ol.source.ImageWMS, ol.source.Image);
-
-
-/**
- * @const
- * @type {ol.Size}
- * @private
- */
-ol.source.ImageWMS.GETFEATUREINFO_IMAGE_SIZE_ = [101, 101];
-
-
-/**
- * Return the GetFeatureInfo URL for the passed coordinate, resolution, and
- * projection. Return `undefined` if the GetFeatureInfo URL cannot be
- * constructed.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} resolution Resolution.
- * @param {ol.ProjectionLike} projection Projection.
- * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should
- *     be provided. If `QUERY_LAYERS` is not provided then the layers specified
- *     in the `LAYERS` parameter will be used. `VERSION` should not be
- *     specified here.
- * @return {string|undefined} GetFeatureInfo URL.
- * @api stable
- */
-ol.source.ImageWMS.prototype.getGetFeatureInfoUrl = function(coordinate, resolution, projection, params) {
-
-  ol.DEBUG && console.assert(!('VERSION' in params),
-      'key VERSION is not allowed in params');
-
-  if (this.url_ === undefined) {
-    return undefined;
-  }
-
-  var extent = ol.extent.getForViewAndSize(
-      coordinate, resolution, 0,
-      ol.source.ImageWMS.GETFEATUREINFO_IMAGE_SIZE_);
-
-  var baseParams = {
-    'SERVICE': 'WMS',
-    'VERSION': ol.DEFAULT_WMS_VERSION,
-    'REQUEST': 'GetFeatureInfo',
-    'FORMAT': 'image/png',
-    'TRANSPARENT': true,
-    'QUERY_LAYERS': this.params_['LAYERS']
-  };
-  ol.obj.assign(baseParams, this.params_, params);
-
-  var x = Math.floor((coordinate[0] - extent[0]) / resolution);
-  var y = Math.floor((extent[3] - coordinate[1]) / resolution);
-  baseParams[this.v13_ ? 'I' : 'X'] = x;
-  baseParams[this.v13_ ? 'J' : 'Y'] = y;
-
-  return this.getRequestUrl_(
-      extent, ol.source.ImageWMS.GETFEATUREINFO_IMAGE_SIZE_,
-      1, ol.proj.get(projection), baseParams);
-};
-
-
-/**
- * Get the user-provided params, i.e. those passed to the constructor through
- * the "params" option, and possibly updated using the updateParams method.
- * @return {Object} Params.
- * @api stable
- */
-ol.source.ImageWMS.prototype.getParams = function() {
-  return this.params_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.ImageWMS.prototype.getImageInternal = function(extent, resolution, pixelRatio, projection) {
-
-  if (this.url_ === undefined) {
-    return null;
-  }
-
-  resolution = this.findNearestResolution(resolution);
-
-  if (pixelRatio != 1 && (!this.hidpi_ || this.serverType_ === undefined)) {
-    pixelRatio = 1;
-  }
-
-  extent = extent.slice();
-  var centerX = (extent[0] + extent[2]) / 2;
-  var centerY = (extent[1] + extent[3]) / 2;
-
-  var imageResolution = resolution / pixelRatio;
-  var imageWidth = ol.extent.getWidth(extent) / imageResolution;
-  var imageHeight = ol.extent.getHeight(extent) / imageResolution;
-
-  var image = this.image_;
-  if (image &&
-      this.renderedRevision_ == this.getRevision() &&
-      image.getResolution() == resolution &&
-      image.getPixelRatio() == pixelRatio &&
-      ol.extent.containsExtent(image.getExtent(), extent)) {
-    return image;
-  }
-
-  if (this.ratio_ != 1) {
-    var halfWidth = this.ratio_ * ol.extent.getWidth(extent) / 2;
-    var halfHeight = this.ratio_ * ol.extent.getHeight(extent) / 2;
-    extent[0] = centerX - halfWidth;
-    extent[1] = centerY - halfHeight;
-    extent[2] = centerX + halfWidth;
-    extent[3] = centerY + halfHeight;
-  }
-
-  var params = {
-    'SERVICE': 'WMS',
-    'VERSION': ol.DEFAULT_WMS_VERSION,
-    'REQUEST': 'GetMap',
-    'FORMAT': 'image/png',
-    'TRANSPARENT': true
-  };
-  ol.obj.assign(params, this.params_);
-
-  this.imageSize_[0] = Math.ceil(imageWidth * this.ratio_);
-  this.imageSize_[1] = Math.ceil(imageHeight * this.ratio_);
-
-  var url = this.getRequestUrl_(extent, this.imageSize_, pixelRatio,
-      projection, params);
-
-  this.image_ = new ol.Image(extent, resolution, pixelRatio,
-      this.getAttributions(), url, this.crossOrigin_, this.imageLoadFunction_);
-
-  this.renderedRevision_ = this.getRevision();
-
-  ol.events.listen(this.image_, ol.events.EventType.CHANGE,
-      this.handleImageChange, this);
-
-  return this.image_;
-
-};
-
-
-/**
- * Return the image load function of the source.
- * @return {ol.ImageLoadFunctionType} The image load function.
- * @api
- */
-ol.source.ImageWMS.prototype.getImageLoadFunction = function() {
-  return this.imageLoadFunction_;
-};
-
-
-/**
- * @param {ol.Extent} extent Extent.
- * @param {ol.Size} size Size.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @param {Object} params Params.
- * @return {string} Request URL.
- * @private
- */
-ol.source.ImageWMS.prototype.getRequestUrl_ = function(extent, size, pixelRatio, projection, params) {
-
-  ol.asserts.assert(this.url_ !== undefined, 9); // `url` must be configured or set using `#setUrl()`
-
-  params[this.v13_ ? 'CRS' : 'SRS'] = projection.getCode();
-
-  if (!('STYLES' in this.params_)) {
-    params['STYLES'] = '';
-  }
-
-  if (pixelRatio != 1) {
-    switch (this.serverType_) {
-      case ol.source.WMSServerType.GEOSERVER:
-        var dpi = (90 * pixelRatio + 0.5) | 0;
-        if ('FORMAT_OPTIONS' in params) {
-          params['FORMAT_OPTIONS'] += ';dpi:' + dpi;
-        } else {
-          params['FORMAT_OPTIONS'] = 'dpi:' + dpi;
-        }
-        break;
-      case ol.source.WMSServerType.MAPSERVER:
-        params['MAP_RESOLUTION'] = 90 * pixelRatio;
-        break;
-      case ol.source.WMSServerType.CARMENTA_SERVER:
-      case ol.source.WMSServerType.QGIS:
-        params['DPI'] = 90 * pixelRatio;
-        break;
-      default:
-        ol.asserts.assert(false, 8); // Unknown `serverType` configured
-        break;
-    }
-  }
-
-  params['WIDTH'] = size[0];
-  params['HEIGHT'] = size[1];
-
-  var axisOrientation = projection.getAxisOrientation();
-  var bbox;
-  if (this.v13_ && axisOrientation.substr(0, 2) == 'ne') {
-    bbox = [extent[1], extent[0], extent[3], extent[2]];
-  } else {
-    bbox = extent;
-  }
-  params['BBOX'] = bbox.join(',');
-
-  return ol.uri.appendParams(/** @type {string} */ (this.url_), params);
-};
-
-
-/**
- * Return the URL used for this WMS source.
- * @return {string|undefined} URL.
- * @api stable
- */
-ol.source.ImageWMS.prototype.getUrl = function() {
-  return this.url_;
-};
-
-
-/**
- * Set the image load function of the source.
- * @param {ol.ImageLoadFunctionType} imageLoadFunction Image load function.
- * @api
- */
-ol.source.ImageWMS.prototype.setImageLoadFunction = function(
-    imageLoadFunction) {
-  this.image_ = null;
-  this.imageLoadFunction_ = imageLoadFunction;
-  this.changed();
-};
-
-
-/**
- * Set the URL to use for requests.
- * @param {string|undefined} url URL.
- * @api stable
- */
-ol.source.ImageWMS.prototype.setUrl = function(url) {
-  if (url != this.url_) {
-    this.url_ = url;
-    this.image_ = null;
-    this.changed();
-  }
-};
-
-
-/**
- * Update the user-provided params.
- * @param {Object} params Params.
- * @api stable
- */
-ol.source.ImageWMS.prototype.updateParams = function(params) {
-  ol.obj.assign(this.params_, params);
-  this.updateV13_();
-  this.image_ = null;
-  this.changed();
-};
-
-
-/**
- * @private
- */
-ol.source.ImageWMS.prototype.updateV13_ = function() {
-  var version = this.params_['VERSION'] || ol.DEFAULT_WMS_VERSION;
-  this.v13_ = ol.string.compareVersions(version, '1.3') >= 0;
-};
-
-goog.provide('ol.source.OSM');
-
-goog.require('ol');
-goog.require('ol.Attribution');
-goog.require('ol.source.XYZ');
-
-
-/**
- * @classdesc
- * Layer source for the OpenStreetMap tile server.
- *
- * @constructor
- * @extends {ol.source.XYZ}
- * @param {olx.source.OSMOptions=} opt_options Open Street Map options.
- * @api stable
- */
-ol.source.OSM = function(opt_options) {
-
-  var options = opt_options || {};
-
-  var attributions;
-  if (options.attributions !== undefined) {
-    attributions = options.attributions;
-  } else {
-    attributions = [ol.source.OSM.ATTRIBUTION];
-  }
-
-  var crossOrigin = options.crossOrigin !== undefined ?
-      options.crossOrigin : 'anonymous';
-
-  var url = options.url !== undefined ?
-      options.url : 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png';
-
-  ol.source.XYZ.call(this, {
-    attributions: attributions,
-    cacheSize: options.cacheSize,
-    crossOrigin: crossOrigin,
-    opaque: options.opaque !== undefined ? options.opaque : true,
-    maxZoom: options.maxZoom !== undefined ? options.maxZoom : 19,
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    tileLoadFunction: options.tileLoadFunction,
-    url: url,
-    wrapX: options.wrapX
-  });
-
-};
-ol.inherits(ol.source.OSM, ol.source.XYZ);
-
-
-/**
- * The attribution containing a link to the OpenStreetMap Copyright and License
- * page.
- * @const
- * @type {ol.Attribution}
- * @api
- */
-ol.source.OSM.ATTRIBUTION = new ol.Attribution({
-  html: '&copy; ' +
-      '<a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> ' +
-      'contributors.'
-});
-
-goog.provide('ol.ext.pixelworks');
-/** @typedef {function(*)} */
-ol.ext.pixelworks;
-(function() {
-var exports = {};
-var module = {exports: exports};
-var define;
-/**
- * @fileoverview
- * @suppress {accessControls, ambiguousFunctionDecl, checkDebuggerStatement, checkRegExp, checkTypes, checkVars, const, constantProperty, deprecated, duplicate, es5Strict, fileoverviewTags, missingProperties, nonStandardJsDocs, strictModuleDepCheck, suspiciousCode, undefinedNames, undefinedVars, unknownDefines, uselessCode, visibility}
- */
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.pixelworks = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
-var Processor = _dereq_('./processor');
-
-exports.Processor = Processor;
-
-},{"./processor":2}],2:[function(_dereq_,module,exports){
-var newImageData = _dereq_('./util').newImageData;
-
-/**
- * Create a function for running operations.  This function is serialized for
- * use in a worker.
- * @param {function(Array, Object):*} operation The operation.
- * @return {function(Object):ArrayBuffer} A function that takes an object with
- * buffers, meta, imageOps, width, and height properties and returns an array
- * buffer.
- */
-function createMinion(operation) {
-  var workerHasImageData = true;
-  try {
-    new ImageData(10, 10);
-  } catch (_) {
-    workerHasImageData = false;
-  }
-
-  function newWorkerImageData(data, width, height) {
-    if (workerHasImageData) {
-      return new ImageData(data, width, height);
-    } else {
-      return {data: data, width: width, height: height};
-    }
-  }
-
-  return function(data) {
-    // bracket notation for minification support
-    var buffers = data['buffers'];
-    var meta = data['meta'];
-    var imageOps = data['imageOps'];
-    var width = data['width'];
-    var height = data['height'];
-
-    var numBuffers = buffers.length;
-    var numBytes = buffers[0].byteLength;
-    var output, b;
-
-    if (imageOps) {
-      var images = new Array(numBuffers);
-      for (b = 0; b < numBuffers; ++b) {
-        images[b] = newWorkerImageData(
-            new Uint8ClampedArray(buffers[b]), width, height);
-      }
-      output = operation(images, meta).data;
-    } else {
-      output = new Uint8ClampedArray(numBytes);
-      var arrays = new Array(numBuffers);
-      var pixels = new Array(numBuffers);
-      for (b = 0; b < numBuffers; ++b) {
-        arrays[b] = new Uint8ClampedArray(buffers[b]);
-        pixels[b] = [0, 0, 0, 0];
-      }
-      for (var i = 0; i < numBytes; i += 4) {
-        for (var j = 0; j < numBuffers; ++j) {
-          var array = arrays[j];
-          pixels[j][0] = array[i];
-          pixels[j][1] = array[i + 1];
-          pixels[j][2] = array[i + 2];
-          pixels[j][3] = array[i + 3];
-        }
-        var pixel = operation(pixels, meta);
-        output[i] = pixel[0];
-        output[i + 1] = pixel[1];
-        output[i + 2] = pixel[2];
-        output[i + 3] = pixel[3];
-      }
-    }
-    return output.buffer;
-  };
-}
-
-/**
- * Create a worker for running operations.
- * @param {Object} config Configuration.
- * @param {function(MessageEvent)} onMessage Called with a message event.
- * @return {Worker} The worker.
- */
-function createWorker(config, onMessage) {
-  var lib = Object.keys(config.lib || {}).map(function(name) {
-    return 'var ' + name + ' = ' + config.lib[name].toString() + ';';
-  });
-
-  var lines = lib.concat([
-    'var __minion__ = (' + createMinion.toString() + ')(', config.operation.toString(), ');',
-    'self.addEventListener("message", function(event) {',
-    '  var buffer = __minion__(event.data);',
-    '  self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);',
-    '});'
-  ]);
-
-  var blob = new Blob(lines, {type: 'text/javascript'});
-  var source = URL.createObjectURL(blob);
-  var worker = new Worker(source);
-  worker.addEventListener('message', onMessage);
-  return worker;
-}
-
-/**
- * Create a faux worker for running operations.
- * @param {Object} config Configuration.
- * @param {function(MessageEvent)} onMessage Called with a message event.
- * @return {Object} The faux worker.
- */
-function createFauxWorker(config, onMessage) {
-  var minion = createMinion(config.operation);
-  return {
-    postMessage: function(data) {
-      setTimeout(function() {
-        onMessage({'data': {'buffer': minion(data), 'meta': data['meta']}});
-      }, 0);
-    }
-  };
-}
-
-/**
- * A processor runs pixel or image operations in workers.
- * @param {Object} config Configuration.
- */
-function Processor(config) {
-  this._imageOps = !!config.imageOps;
-  var threads;
-  if (config.threads === 0) {
-    threads = 0;
-  } else if (this._imageOps) {
-    threads = 1;
-  } else {
-    threads = config.threads || 1;
-  }
-  var workers = [];
-  if (threads) {
-    for (var i = 0; i < threads; ++i) {
-      workers[i] = createWorker(config, this._onWorkerMessage.bind(this, i));
-    }
-  } else {
-    workers[0] = createFauxWorker(config, this._onWorkerMessage.bind(this, 0));
-  }
-  this._workers = workers;
-  this._queue = [];
-  this._maxQueueLength = config.queue || Infinity;
-  this._running = 0;
-  this._dataLookup = {};
-  this._job = null;
-}
-
-/**
- * Run operation on input data.
- * @param {Array.<Array|ImageData>} inputs Array of pixels or image data
- *     (depending on the operation type).
- * @param {Object} meta A user data object.  This is passed to all operations
- *     and must be serializable.
- * @param {function(Error, ImageData, Object)} callback Called when work
- *     completes.  The first argument is any error.  The second is the ImageData
- *     generated by operations.  The third is the user data object.
- */
-Processor.prototype.process = function(inputs, meta, callback) {
-  this._enqueue({
-    inputs: inputs,
-    meta: meta,
-    callback: callback
-  });
-  this._dispatch();
-};
-
-/**
- * Stop responding to any completed work and destroy the processor.
- */
-Processor.prototype.destroy = function() {
-  for (var key in this) {
-    this[key] = null;
-  }
-  this._destroyed = true;
-};
-
-/**
- * Add a job to the queue.
- * @param {Object} job The job.
- */
-Processor.prototype._enqueue = function(job) {
-  this._queue.push(job);
-  while (this._queue.length > this._maxQueueLength) {
-    this._queue.shift().callback(null, null);
-  }
-};
-
-/**
- * Dispatch a job.
- */
-Processor.prototype._dispatch = function() {
-  if (this._running === 0 && this._queue.length > 0) {
-    var job = this._job = this._queue.shift();
-    var width = job.inputs[0].width;
-    var height = job.inputs[0].height;
-    var buffers = job.inputs.map(function(input) {
-      return input.data.buffer;
-    });
-    var threads = this._workers.length;
-    this._running = threads;
-    if (threads === 1) {
-      this._workers[0].postMessage({
-        'buffers': buffers,
-        'meta': job.meta,
-        'imageOps': this._imageOps,
-        'width': width,
-        'height': height
-      }, buffers);
-    } else {
-      var length = job.inputs[0].data.length;
-      var segmentLength = 4 * Math.ceil(length / 4 / threads);
-      for (var i = 0; i < threads; ++i) {
-        var offset = i * segmentLength;
-        var slices = [];
-        for (var j = 0, jj = buffers.length; j < jj; ++j) {
-          slices.push(buffers[i].slice(offset, offset + segmentLength));
-        }
-        this._workers[i].postMessage({
-          'buffers': slices,
-          'meta': job.meta,
-          'imageOps': this._imageOps,
-          'width': width,
-          'height': height
-        }, slices);
-      }
-    }
-  }
-};
-
-/**
- * Handle messages from the worker.
- * @param {number} index The worker index.
- * @param {MessageEvent} event The message event.
- */
-Processor.prototype._onWorkerMessage = function(index, event) {
-  if (this._destroyed) {
-    return;
-  }
-  this._dataLookup[index] = event.data;
-  --this._running;
-  if (this._running === 0) {
-    this._resolveJob();
-  }
-};
-
-/**
- * Resolve a job.  If there are no more worker threads, the processor callback
- * will be called.
- */
-Processor.prototype._resolveJob = function() {
-  var job = this._job;
-  var threads = this._workers.length;
-  var data, meta;
-  if (threads === 1) {
-    data = new Uint8ClampedArray(this._dataLookup[0]['buffer']);
-    meta = this._dataLookup[0]['meta'];
-  } else {
-    var length = job.inputs[0].data.length;
-    data = new Uint8ClampedArray(length);
-    meta = new Array(length);
-    var segmentLength = 4 * Math.ceil(length / 4 / threads);
-    for (var i = 0; i < threads; ++i) {
-      var buffer = this._dataLookup[i]['buffer'];
-      var offset = i * segmentLength;
-      data.set(new Uint8ClampedArray(buffer), offset);
-      meta[i] = this._dataLookup[i]['meta'];
-    }
-  }
-  this._job = null;
-  this._dataLookup = {};
-  job.callback(null,
-      newImageData(data, job.inputs[0].width, job.inputs[0].height), meta);
-  this._dispatch();
-};
-
-module.exports = Processor;
-
-},{"./util":3}],3:[function(_dereq_,module,exports){
-var hasImageData = true;
-try {
-  new ImageData(10, 10);
-} catch (_) {
-  hasImageData = false;
-}
-
-var context = document.createElement('canvas').getContext('2d');
-
-function newImageData(data, width, height) {
-  if (hasImageData) {
-    return new ImageData(data, width, height);
-  } else {
-    var imageData = context.createImageData(width, height);
-    imageData.data.set(data);
-    return imageData;
-  }
-}
-
-exports.newImageData = newImageData;
-
-},{}]},{},[1])(1)
-});
-ol.ext.pixelworks = module.exports;
-})();
-
-goog.provide('ol.source.Raster');
-goog.provide('ol.RasterOperationType');
-
-goog.require('ol');
-goog.require('ol.transform');
-goog.require('ol.ImageCanvas');
-goog.require('ol.TileQueue');
-goog.require('ol.dom');
-goog.require('ol.events');
-goog.require('ol.events.Event');
-goog.require('ol.events.EventType');
-goog.require('ol.ext.pixelworks');
-goog.require('ol.extent');
-goog.require('ol.layer.Image');
-goog.require('ol.layer.Tile');
-goog.require('ol.obj');
-goog.require('ol.renderer.canvas.ImageLayer');
-goog.require('ol.renderer.canvas.TileLayer');
-goog.require('ol.source.Image');
-goog.require('ol.source.State');
-goog.require('ol.source.Tile');
-
-
-/**
- * Raster operation type. Supported values are `'pixel'` and `'image'`.
- * @enum {string}
- */
-ol.RasterOperationType = {
-  PIXEL: 'pixel',
-  IMAGE: 'image'
-};
-
-
-/**
- * @classdesc
- * A source that transforms data from any number of input sources using an array
- * of {@link ol.RasterOperation} functions to transform input pixel values into
- * output pixel values.
- *
- * @constructor
- * @extends {ol.source.Image}
- * @fires ol.source.Raster.Event
- * @param {olx.source.RasterOptions} options Options.
- * @api
- */
-ol.source.Raster = function(options) {
-
-  /**
-   * @private
-   * @type {*}
-   */
-  this.worker_ = null;
-
-  /**
-   * @private
-   * @type {ol.RasterOperationType}
-   */
-  this.operationType_ = options.operationType !== undefined ?
-      options.operationType : ol.RasterOperationType.PIXEL;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.threads_ = options.threads !== undefined ? options.threads : 1;
-
-  /**
-   * @private
-   * @type {Array.<ol.renderer.canvas.Layer>}
-   */
-  this.renderers_ = ol.source.Raster.createRenderers_(options.sources);
-
-  for (var r = 0, rr = this.renderers_.length; r < rr; ++r) {
-    ol.events.listen(this.renderers_[r], ol.events.EventType.CHANGE,
-        this.changed, this);
-  }
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.canvasContext_ = ol.dom.createCanvasContext2D();
-
-  /**
-   * @private
-   * @type {ol.TileQueue}
-   */
-  this.tileQueue_ = new ol.TileQueue(
-      function() {
-        return 1;
-      },
-      this.changed.bind(this));
-
-  var layerStatesArray = ol.source.Raster.getLayerStatesArray_(this.renderers_);
-  var layerStates = {};
-  for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {
-    layerStates[ol.getUid(layerStatesArray[i].layer)] = layerStatesArray[i];
-  }
-
-  /**
-   * The most recently rendered state.
-   * @type {?ol.SourceRasterRenderedState}
-   * @private
-   */
-  this.renderedState_ = null;
-
-  /**
-   * The most recently rendered image canvas.
-   * @type {ol.ImageCanvas}
-   * @private
-   */
-  this.renderedImageCanvas_ = null;
-
-  /**
-   * @private
-   * @type {olx.FrameState}
-   */
-  this.frameState_ = {
-    animate: false,
-    attributions: {},
-    coordinateToPixelTransform: ol.transform.create(),
-    extent: null,
-    focus: null,
-    index: 0,
-    layerStates: layerStates,
-    layerStatesArray: layerStatesArray,
-    logos: {},
-    pixelRatio: 1,
-    pixelToCoordinateTransform: ol.transform.create(),
-    postRenderFunctions: [],
-    size: [0, 0],
-    skippedFeatureUids: {},
-    tileQueue: this.tileQueue_,
-    time: Date.now(),
-    usedTiles: {},
-    viewState: /** @type {olx.ViewState} */ ({
-      rotation: 0
-    }),
-    viewHints: [],
-    wantedTiles: {}
-  };
-
-  ol.source.Image.call(this, {});
-
-  if (options.operation !== undefined) {
-    this.setOperation(options.operation, options.lib);
-  }
-
-};
-ol.inherits(ol.source.Raster, ol.source.Image);
-
-
-/**
- * Set the operation.
- * @param {ol.RasterOperation} operation New operation.
- * @param {Object=} opt_lib Functions that will be available to operations run
- *     in a worker.
- * @api
- */
-ol.source.Raster.prototype.setOperation = function(operation, opt_lib) {
-  this.worker_ = new ol.ext.pixelworks.Processor({
-    operation: operation,
-    imageOps: this.operationType_ === ol.RasterOperationType.IMAGE,
-    queue: 1,
-    lib: opt_lib,
-    threads: this.threads_
-  });
-  this.changed();
-};
-
-
-/**
- * Update the stored frame state.
- * @param {ol.Extent} extent The view extent (in map units).
- * @param {number} resolution The view resolution.
- * @param {ol.proj.Projection} projection The view projection.
- * @return {olx.FrameState} The updated frame state.
- * @private
- */
-ol.source.Raster.prototype.updateFrameState_ = function(extent, resolution, projection) {
-
-  var frameState = /** @type {olx.FrameState} */ (
-      ol.obj.assign({}, this.frameState_));
-
-  frameState.viewState = /** @type {olx.ViewState} */ (
-      ol.obj.assign({}, frameState.viewState));
-
-  var center = ol.extent.getCenter(extent);
-  var width = Math.round(ol.extent.getWidth(extent) / resolution);
-  var height = Math.round(ol.extent.getHeight(extent) / resolution);
-
-  frameState.extent = extent;
-  frameState.focus = ol.extent.getCenter(extent);
-  frameState.size[0] = width;
-  frameState.size[1] = height;
-
-  var viewState = frameState.viewState;
-  viewState.center = center;
-  viewState.projection = projection;
-  viewState.resolution = resolution;
-  return frameState;
-};
-
-
-/**
- * Determine if the most recently rendered image canvas is dirty.
- * @param {ol.Extent} extent The requested extent.
- * @param {number} resolution The requested resolution.
- * @return {boolean} The image is dirty.
- * @private
- */
-ol.source.Raster.prototype.isDirty_ = function(extent, resolution) {
-  var state = this.renderedState_;
-  return !state ||
-      this.getRevision() !== state.revision ||
-      resolution !== state.resolution ||
-      !ol.extent.equals(extent, state.extent);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.Raster.prototype.getImage = function(extent, resolution, pixelRatio, projection) {
-
-  if (!this.allSourcesReady_()) {
-    return null;
-  }
-
-  var currentExtent = extent.slice();
-  if (!this.isDirty_(currentExtent, resolution)) {
-    return this.renderedImageCanvas_;
-  }
-
-  var context = this.canvasContext_;
-  var canvas = context.canvas;
-
-  var width = Math.round(ol.extent.getWidth(currentExtent) / resolution);
-  var height = Math.round(ol.extent.getHeight(currentExtent) / resolution);
-
-  if (width !== canvas.width ||
-      height !== canvas.height) {
-    canvas.width = width;
-    canvas.height = height;
-  }
-
-  var frameState = this.updateFrameState_(currentExtent, resolution, projection);
-
-  var imageCanvas = new ol.ImageCanvas(
-      currentExtent, resolution, 1, this.getAttributions(), canvas,
-      this.composeFrame_.bind(this, frameState));
-
-  this.renderedImageCanvas_ = imageCanvas;
-
-  this.renderedState_ = {
-    extent: currentExtent,
-    resolution: resolution,
-    revision: this.getRevision()
-  };
-
-  return imageCanvas;
-};
-
-
-/**
- * Determine if all sources are ready.
- * @return {boolean} All sources are ready.
- * @private
- */
-ol.source.Raster.prototype.allSourcesReady_ = function() {
-  var ready = true;
-  var source;
-  for (var i = 0, ii = this.renderers_.length; i < ii; ++i) {
-    source = this.renderers_[i].getLayer().getSource();
-    if (source.getState() !== ol.source.State.READY) {
-      ready = false;
-      break;
-    }
-  }
-  return ready;
-};
-
-
-/**
- * Compose the frame.  This renders data from all sources, runs pixel-wise
- * operations, and renders the result to the stored canvas context.
- * @param {olx.FrameState} frameState The frame state.
- * @param {function(Error)} callback Called when composition is complete.
- * @private
- */
-ol.source.Raster.prototype.composeFrame_ = function(frameState, callback) {
-  var len = this.renderers_.length;
-  var imageDatas = new Array(len);
-  for (var i = 0; i < len; ++i) {
-    var imageData = ol.source.Raster.getImageData_(
-        this.renderers_[i], frameState, frameState.layerStatesArray[i]);
-    if (imageData) {
-      imageDatas[i] = imageData;
-    } else {
-      // image not yet ready
-      return;
-    }
-  }
-
-  var data = {};
-  this.dispatchEvent(new ol.source.Raster.Event(
-      ol.source.Raster.EventType.BEFOREOPERATIONS, frameState, data));
-
-  this.worker_.process(imageDatas, data,
-      this.onWorkerComplete_.bind(this, frameState, callback));
-
-  frameState.tileQueue.loadMoreTiles(16, 16);
-};
-
-
-/**
- * Called when pixel processing is complete.
- * @param {olx.FrameState} frameState The frame state.
- * @param {function(Error)} callback Called when rendering is complete.
- * @param {Error} err Any error during processing.
- * @param {ImageData} output The output image data.
- * @param {Object} data The user data.
- * @private
- */
-ol.source.Raster.prototype.onWorkerComplete_ = function(frameState, callback, err, output, data) {
-  if (err) {
-    callback(err);
-    return;
-  }
-  if (!output) {
-    // job aborted
-    return;
-  }
-
-  this.dispatchEvent(new ol.source.Raster.Event(
-      ol.source.Raster.EventType.AFTEROPERATIONS, frameState, data));
-
-  var resolution = frameState.viewState.resolution / frameState.pixelRatio;
-  if (!this.isDirty_(frameState.extent, resolution)) {
-    this.canvasContext_.putImageData(output, 0, 0);
-  }
-
-  callback(null);
-};
-
-
-/**
- * Get image data from a renderer.
- * @param {ol.renderer.canvas.Layer} renderer Layer renderer.
- * @param {olx.FrameState} frameState The frame state.
- * @param {ol.LayerState} layerState The layer state.
- * @return {ImageData} The image data.
- * @private
- */
-ol.source.Raster.getImageData_ = function(renderer, frameState, layerState) {
-  if (!renderer.prepareFrame(frameState, layerState)) {
-    return null;
-  }
-  var width = frameState.size[0];
-  var height = frameState.size[1];
-  if (!ol.source.Raster.context_) {
-    ol.source.Raster.context_ = ol.dom.createCanvasContext2D(width, height);
-  } else {
-    var canvas = ol.source.Raster.context_.canvas;
-    if (canvas.width !== width || canvas.height !== height) {
-      ol.source.Raster.context_ = ol.dom.createCanvasContext2D(width, height);
-    } else {
-      ol.source.Raster.context_.clearRect(0, 0, width, height);
-    }
-  }
-  renderer.composeFrame(frameState, layerState, ol.source.Raster.context_);
-  return ol.source.Raster.context_.getImageData(0, 0, width, height);
-};
-
-
-/**
- * A reusable canvas context.
- * @type {CanvasRenderingContext2D}
- * @private
- */
-ol.source.Raster.context_ = null;
-
-
-/**
- * Get a list of layer states from a list of renderers.
- * @param {Array.<ol.renderer.canvas.Layer>} renderers Layer renderers.
- * @return {Array.<ol.LayerState>} The layer states.
- * @private
- */
-ol.source.Raster.getLayerStatesArray_ = function(renderers) {
-  return renderers.map(function(renderer) {
-    return renderer.getLayer().getLayerState();
-  });
-};
-
-
-/**
- * Create renderers for all sources.
- * @param {Array.<ol.source.Source>} sources The sources.
- * @return {Array.<ol.renderer.canvas.Layer>} Array of layer renderers.
- * @private
- */
-ol.source.Raster.createRenderers_ = function(sources) {
-  var len = sources.length;
-  var renderers = new Array(len);
-  for (var i = 0; i < len; ++i) {
-    renderers[i] = ol.source.Raster.createRenderer_(sources[i]);
-  }
-  return renderers;
-};
-
-
-/**
- * Create a renderer for the provided source.
- * @param {ol.source.Source} source The source.
- * @return {ol.renderer.canvas.Layer} The renderer.
- * @private
- */
-ol.source.Raster.createRenderer_ = function(source) {
-  var renderer = null;
-  if (source instanceof ol.source.Tile) {
-    renderer = ol.source.Raster.createTileRenderer_(source);
-  } else if (source instanceof ol.source.Image) {
-    renderer = ol.source.Raster.createImageRenderer_(source);
-  } else {
-    ol.DEBUG && console.assert(false, 'Unsupported source type: ' + source);
-  }
-  return renderer;
-};
-
-
-/**
- * Create an image renderer for the provided source.
- * @param {ol.source.Image} source The source.
- * @return {ol.renderer.canvas.Layer} The renderer.
- * @private
- */
-ol.source.Raster.createImageRenderer_ = function(source) {
-  var layer = new ol.layer.Image({source: source});
-  return new ol.renderer.canvas.ImageLayer(layer);
-};
-
-
-/**
- * Create a tile renderer for the provided source.
- * @param {ol.source.Tile} source The source.
- * @return {ol.renderer.canvas.Layer} The renderer.
- * @private
- */
-ol.source.Raster.createTileRenderer_ = function(source) {
-  var layer = new ol.layer.Tile({source: source});
-  return new ol.renderer.canvas.TileLayer(layer);
-};
-
-
-/**
- * @classdesc
- * Events emitted by {@link ol.source.Raster} instances are instances of this
- * type.
- *
- * @constructor
- * @extends {ol.events.Event}
- * @implements {oli.source.RasterEvent}
- * @param {string} type Type.
- * @param {olx.FrameState} frameState The frame state.
- * @param {Object} data An object made available to operations.
- */
-ol.source.Raster.Event = function(type, frameState, data) {
-  ol.events.Event.call(this, type);
-
-  /**
-   * The raster extent.
-   * @type {ol.Extent}
-   * @api
-   */
-  this.extent = frameState.extent;
-
-  /**
-   * The pixel resolution (map units per pixel).
-   * @type {number}
-   * @api
-   */
-  this.resolution = frameState.viewState.resolution / frameState.pixelRatio;
-
-  /**
-   * An object made available to all operations.  This can be used by operations
-   * as a storage object (e.g. for calculating statistics).
-   * @type {Object}
-   * @api
-   */
-  this.data = data;
-
-};
-ol.inherits(ol.source.Raster.Event, ol.events.Event);
-
-
-/**
- * @enum {string}
- */
-ol.source.Raster.EventType = {
-  /**
-   * Triggered before operations are run.
-   * @event ol.source.Raster.Event#beforeoperations
-   * @api
-   */
-  BEFOREOPERATIONS: 'beforeoperations',
-
-  /**
-   * Triggered after operations are run.
-   * @event ol.source.Raster.Event#afteroperations
-   * @api
-   */
-  AFTEROPERATIONS: 'afteroperations'
-};
-
-goog.provide('ol.source.Stamen');
-
-goog.require('ol');
-goog.require('ol.Attribution');
-goog.require('ol.source.OSM');
-goog.require('ol.source.XYZ');
-
-
-/**
- * @classdesc
- * Layer source for the Stamen tile server.
- *
- * @constructor
- * @extends {ol.source.XYZ}
- * @param {olx.source.StamenOptions} options Stamen options.
- * @api stable
- */
-ol.source.Stamen = function(options) {
-
-  var i = options.layer.indexOf('-');
-  var provider = i == -1 ? options.layer : options.layer.slice(0, i);
-  ol.DEBUG && console.assert(provider in ol.source.Stamen.ProviderConfig,
-      'known provider configured');
-  var providerConfig = ol.source.Stamen.ProviderConfig[provider];
-
-  ol.DEBUG && console.assert(options.layer in ol.source.Stamen.LayerConfig,
-      'known layer configured');
-  var layerConfig = ol.source.Stamen.LayerConfig[options.layer];
-
-  var url = options.url !== undefined ? options.url :
-      'https://stamen-tiles-{a-d}.a.ssl.fastly.net/' + options.layer +
-      '/{z}/{x}/{y}.' + layerConfig.extension;
-
-  ol.source.XYZ.call(this, {
-    attributions: ol.source.Stamen.ATTRIBUTIONS,
-    cacheSize: options.cacheSize,
-    crossOrigin: 'anonymous',
-    maxZoom: options.maxZoom != undefined ? options.maxZoom : providerConfig.maxZoom,
-    minZoom: options.minZoom != undefined ? options.minZoom : providerConfig.minZoom,
-    opaque: layerConfig.opaque,
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    tileLoadFunction: options.tileLoadFunction,
-    url: url
-  });
-
-};
-ol.inherits(ol.source.Stamen, ol.source.XYZ);
-
-
-/**
- * @const
- * @type {Array.<ol.Attribution>}
- */
-ol.source.Stamen.ATTRIBUTIONS = [
-  new ol.Attribution({
-    html: 'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, ' +
-        'under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY' +
-        ' 3.0</a>.'
-  }),
-  ol.source.OSM.ATTRIBUTION
-];
-
-/**
- * @type {Object.<string, {extension: string, opaque: boolean}>}
- */
-ol.source.Stamen.LayerConfig = {
-  'terrain': {
-    extension: 'jpg',
-    opaque: true
-  },
-  'terrain-background': {
-    extension: 'jpg',
-    opaque: true
-  },
-  'terrain-labels': {
-    extension: 'png',
-    opaque: false
-  },
-  'terrain-lines': {
-    extension: 'png',
-    opaque: false
-  },
-  'toner-background': {
-    extension: 'png',
-    opaque: true
-  },
-  'toner': {
-    extension: 'png',
-    opaque: true
-  },
-  'toner-hybrid': {
-    extension: 'png',
-    opaque: false
-  },
-  'toner-labels': {
-    extension: 'png',
-    opaque: false
-  },
-  'toner-lines': {
-    extension: 'png',
-    opaque: false
-  },
-  'toner-lite': {
-    extension: 'png',
-    opaque: true
-  },
-  'watercolor': {
-    extension: 'jpg',
-    opaque: true
-  }
-};
-
-/**
- * @type {Object.<string, {minZoom: number, maxZoom: number}>}
- */
-ol.source.Stamen.ProviderConfig = {
-  'terrain': {
-    minZoom: 4,
-    maxZoom: 18
-  },
-  'toner': {
-    minZoom: 0,
-    maxZoom: 20
-  },
-  'watercolor': {
-    minZoom: 1,
-    maxZoom: 16
-  }
-};
-
-goog.provide('ol.source.TileArcGISRest');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.extent');
-goog.require('ol.math');
-goog.require('ol.obj');
-goog.require('ol.size');
-goog.require('ol.source.TileImage');
-goog.require('ol.tilecoord');
-goog.require('ol.uri');
-
-
-/**
- * @classdesc
- * Layer source for tile data from ArcGIS Rest services. Map and Image
- * Services are supported.
- *
- * For cached ArcGIS services, better performance is available using the
- * {@link ol.source.XYZ} data source.
- *
- * @constructor
- * @extends {ol.source.TileImage}
- * @param {olx.source.TileArcGISRestOptions=} opt_options Tile ArcGIS Rest
- *     options.
- * @api
- */
-ol.source.TileArcGISRest = function(opt_options) {
-
-  var options = opt_options || {};
-
-  ol.source.TileImage.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    crossOrigin: options.crossOrigin,
-    logo: options.logo,
-    projection: options.projection,
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    tileGrid: options.tileGrid,
-    tileLoadFunction: options.tileLoadFunction,
-    url: options.url,
-    urls: options.urls,
-    wrapX: options.wrapX !== undefined ? options.wrapX : true
-  });
-
-  /**
-   * @private
-   * @type {!Object}
-   */
-  this.params_ = options.params || {};
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.tmpExtent_ = ol.extent.createEmpty();
-
-  this.setKey(this.getKeyForParams_());
-};
-ol.inherits(ol.source.TileArcGISRest, ol.source.TileImage);
-
-
-/**
- * @private
- * @return {string} The key for the current params.
- */
-ol.source.TileArcGISRest.prototype.getKeyForParams_ = function() {
-  var i = 0;
-  var res = [];
-  for (var key in this.params_) {
-    res[i++] = key + '-' + this.params_[key];
-  }
-  return res.join('/');
-};
-
-
-/**
- * Get the user-provided params, i.e. those passed to the constructor through
- * the "params" option, and possibly updated using the updateParams method.
- * @return {Object} Params.
- * @api
- */
-ol.source.TileArcGISRest.prototype.getParams = function() {
-  return this.params_;
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Size} tileSize Tile size.
- * @param {ol.Extent} tileExtent Tile extent.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @param {Object} params Params.
- * @return {string|undefined} Request URL.
- * @private
- */
-ol.source.TileArcGISRest.prototype.getRequestUrl_ = function(tileCoord, tileSize, tileExtent,
-        pixelRatio, projection, params) {
-
-  var urls = this.urls;
-  if (!urls) {
-    return undefined;
-  }
-
-  // ArcGIS Server only wants the numeric portion of the projection ID.
-  var srid = projection.getCode().split(':').pop();
-
-  params['SIZE'] = tileSize[0] + ',' + tileSize[1];
-  params['BBOX'] = tileExtent.join(',');
-  params['BBOXSR'] = srid;
-  params['IMAGESR'] = srid;
-  params['DPI'] = Math.round(
-      params['DPI'] ? params['DPI'] * pixelRatio : 90 * pixelRatio
-      );
-
-  var url;
-  if (urls.length == 1) {
-    url = urls[0];
-  } else {
-    var index = ol.math.modulo(ol.tilecoord.hash(tileCoord), urls.length);
-    url = urls[index];
-  }
-
-  var modifiedUrl = url
-      .replace(/MapServer\/?$/, 'MapServer/export')
-      .replace(/ImageServer\/?$/, 'ImageServer/exportImage');
-  if (modifiedUrl == url) {
-    ol.asserts.assert(false, 50); // Cannot determine Rest Service from url
-  }
-  return ol.uri.appendParams(modifiedUrl, params);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileArcGISRest.prototype.getTilePixelRatio = function(pixelRatio) {
-  return /** @type {number} */ (pixelRatio);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileArcGISRest.prototype.fixedTileUrlFunction = function(tileCoord, pixelRatio, projection) {
-
-  var tileGrid = this.getTileGrid();
-  if (!tileGrid) {
-    tileGrid = this.getTileGridForProjection(projection);
-  }
-
-  if (tileGrid.getResolutions().length <= tileCoord[0]) {
-    return undefined;
-  }
-
-  var tileExtent = tileGrid.getTileCoordExtent(
-      tileCoord, this.tmpExtent_);
-  var tileSize = ol.size.toSize(
-      tileGrid.getTileSize(tileCoord[0]), this.tmpSize);
-
-  if (pixelRatio != 1) {
-    tileSize = ol.size.scale(tileSize, pixelRatio, this.tmpSize);
-  }
-
-  // Apply default params and override with user specified values.
-  var baseParams = {
-    'F': 'image',
-    'FORMAT': 'PNG32',
-    'TRANSPARENT': true
-  };
-  ol.obj.assign(baseParams, this.params_);
-
-  return this.getRequestUrl_(tileCoord, tileSize, tileExtent,
-      pixelRatio, projection, baseParams);
-};
-
-
-/**
- * Update the user-provided params.
- * @param {Object} params Params.
- * @api stable
- */
-ol.source.TileArcGISRest.prototype.updateParams = function(params) {
-  ol.obj.assign(this.params_, params);
-  this.setKey(this.getKeyForParams_());
-};
-
-goog.provide('ol.source.TileDebug');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.dom');
-goog.require('ol.size');
-goog.require('ol.source.Tile');
-
-
-/**
- * @classdesc
- * A pseudo tile source, which does not fetch tiles from a server, but renders
- * a grid outline for the tile grid/projection along with the coordinates for
- * each tile. See examples/canvas-tiles for an example.
- *
- * Uses Canvas context2d, so requires Canvas support.
- *
- * @constructor
- * @extends {ol.source.Tile}
- * @param {olx.source.TileDebugOptions} options Debug tile options.
- * @api
- */
-ol.source.TileDebug = function(options) {
-
-  ol.source.Tile.call(this, {
-    opaque: false,
-    projection: options.projection,
-    tileGrid: options.tileGrid,
-    wrapX: options.wrapX !== undefined ? options.wrapX : true
-  });
-
-};
-ol.inherits(ol.source.TileDebug, ol.source.Tile);
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileDebug.prototype.getTile = function(z, x, y) {
-  var tileCoordKey = this.getKeyZXY(z, x, y);
-  if (this.tileCache.containsKey(tileCoordKey)) {
-    return /** @type {!ol.source.TileDebug.Tile_} */ (this.tileCache.get(tileCoordKey));
-  } else {
-    var tileSize = ol.size.toSize(this.tileGrid.getTileSize(z));
-    var tileCoord = [z, x, y];
-    var textTileCoord = this.getTileCoordForTileUrlFunction(tileCoord);
-    var text = !textTileCoord ? '' :
-        this.getTileCoordForTileUrlFunction(textTileCoord).toString();
-    var tile = new ol.source.TileDebug.Tile_(tileCoord, tileSize, text);
-    this.tileCache.set(tileCoordKey, tile);
-    return tile;
-  }
-};
-
-
-/**
- * @constructor
- * @extends {ol.Tile}
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Size} tileSize Tile size.
- * @param {string} text Text.
- * @private
- */
-ol.source.TileDebug.Tile_ = function(tileCoord, tileSize, text) {
-
-  ol.Tile.call(this, tileCoord, ol.Tile.State.LOADED);
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.tileSize_ = tileSize;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.text_ = text;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = null;
-
-};
-ol.inherits(ol.source.TileDebug.Tile_, ol.Tile);
-
-
-/**
- * Get the image element for this tile.
- * @return {HTMLCanvasElement} Image.
- */
-ol.source.TileDebug.Tile_.prototype.getImage = function() {
-  if (this.canvas_) {
-    return this.canvas_;
-  } else {
-    var tileSize = this.tileSize_;
-    var context = ol.dom.createCanvasContext2D(tileSize[0], tileSize[1]);
-
-    context.strokeStyle = 'black';
-    context.strokeRect(0.5, 0.5, tileSize[0] + 0.5, tileSize[1] + 0.5);
-
-    context.fillStyle = 'black';
-    context.textAlign = 'center';
-    context.textBaseline = 'middle';
-    context.font = '24px sans-serif';
-    context.fillText(this.text_, tileSize[0] / 2, tileSize[1] / 2);
-
-    this.canvas_ = context.canvas;
-    return context.canvas;
-  }
-};
-
-// FIXME check order of async callbacks
-
-/**
- * @see http://mapbox.com/developers/api/
- */
-
-goog.provide('ol.source.TileJSON');
-
-goog.require('ol');
-goog.require('ol.Attribution');
-goog.require('ol.TileUrlFunction');
-goog.require('ol.extent');
-goog.require('ol.net');
-goog.require('ol.proj');
-goog.require('ol.source.State');
-goog.require('ol.source.TileImage');
-goog.require('ol.tilegrid');
-
-
-/**
- * @classdesc
- * Layer source for tile data in TileJSON format.
- *
- * @constructor
- * @extends {ol.source.TileImage}
- * @param {olx.source.TileJSONOptions} options TileJSON options.
- * @api stable
- */
-ol.source.TileJSON = function(options) {
-
-  /**
-   * @type {TileJSON}
-   * @private
-   */
-  this.tileJSON_ = null;
-
-  ol.source.TileImage.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    crossOrigin: options.crossOrigin,
-    projection: ol.proj.get('EPSG:3857'),
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    state: ol.source.State.LOADING,
-    tileLoadFunction: options.tileLoadFunction,
-    wrapX: options.wrapX !== undefined ? options.wrapX : true
-  });
-
-  if (options.jsonp) {
-    ol.net.jsonp(options.url, this.handleTileJSONResponse.bind(this),
-        this.handleTileJSONError.bind(this));
-  } else {
-    var client = new XMLHttpRequest();
-    client.addEventListener('load', this.onXHRLoad_.bind(this));
-    client.addEventListener('error', this.onXHRError_.bind(this));
-    client.open('GET', options.url);
-    client.send();
-  }
-
-};
-ol.inherits(ol.source.TileJSON, ol.source.TileImage);
-
-
-/**
- * @private
- * @param {Event} event The load event.
- */
-ol.source.TileJSON.prototype.onXHRLoad_ = function(event) {
-  var client = /** @type {XMLHttpRequest} */ (event.target);
-  // status will be 0 for file:// urls
-  if (!client.status || client.status >= 200 && client.status < 300) {
-    var response;
-    try {
-      response = /** @type {TileJSON} */(JSON.parse(client.responseText));
-    } catch (err) {
-      this.handleTileJSONError();
-      return;
-    }
-    this.handleTileJSONResponse(response);
-  } else {
-    this.handleTileJSONError();
-  }
-};
-
-
-/**
- * @private
- * @param {Event} event The error event.
- */
-ol.source.TileJSON.prototype.onXHRError_ = function(event) {
-  this.handleTileJSONError();
-};
-
-
-/**
- * @return {TileJSON} The tilejson object.
- * @api
- */
-ol.source.TileJSON.prototype.getTileJSON = function() {
-  return this.tileJSON_;
-};
-
-
-/**
- * @protected
- * @param {TileJSON} tileJSON Tile JSON.
- */
-ol.source.TileJSON.prototype.handleTileJSONResponse = function(tileJSON) {
-
-  var epsg4326Projection = ol.proj.get('EPSG:4326');
-
-  var sourceProjection = this.getProjection();
-  var extent;
-  if (tileJSON.bounds !== undefined) {
-    var transform = ol.proj.getTransformFromProjections(
-        epsg4326Projection, sourceProjection);
-    extent = ol.extent.applyTransform(tileJSON.bounds, transform);
-  }
-
-  if (tileJSON.scheme !== undefined) {
-    ol.DEBUG && console.assert(tileJSON.scheme == 'xyz', 'tileJSON-scheme is "xyz"');
-  }
-  var minZoom = tileJSON.minzoom || 0;
-  var maxZoom = tileJSON.maxzoom || 22;
-  var tileGrid = ol.tilegrid.createXYZ({
-    extent: ol.tilegrid.extentFromProjection(sourceProjection),
-    maxZoom: maxZoom,
-    minZoom: minZoom
-  });
-  this.tileGrid = tileGrid;
-
-  this.tileUrlFunction =
-      ol.TileUrlFunction.createFromTemplates(tileJSON.tiles, tileGrid);
-
-  if (tileJSON.attribution !== undefined && !this.getAttributions()) {
-    var attributionExtent = extent !== undefined ?
-        extent : epsg4326Projection.getExtent();
-    /** @type {Object.<string, Array.<ol.TileRange>>} */
-    var tileRanges = {};
-    var z, zKey;
-    for (z = minZoom; z <= maxZoom; ++z) {
-      zKey = z.toString();
-      tileRanges[zKey] =
-          [tileGrid.getTileRangeForExtentAndZ(attributionExtent, z)];
-    }
-    this.setAttributions([
-      new ol.Attribution({
-        html: tileJSON.attribution,
-        tileRanges: tileRanges
-      })
-    ]);
-  }
-  this.tileJSON_ = tileJSON;
-  this.setState(ol.source.State.READY);
-
-};
-
-
-/**
- * @protected
- */
-ol.source.TileJSON.prototype.handleTileJSONError = function() {
-  this.setState(ol.source.State.ERROR);
-};
-
-goog.provide('ol.source.TileUTFGrid');
-
-goog.require('ol');
-goog.require('ol.Attribution');
-goog.require('ol.Tile');
-goog.require('ol.TileUrlFunction');
-goog.require('ol.asserts');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.extent');
-goog.require('ol.net');
-goog.require('ol.proj');
-goog.require('ol.source.State');
-goog.require('ol.source.Tile');
-goog.require('ol.tilegrid');
-
-
-/**
- * @classdesc
- * Layer source for UTFGrid interaction data loaded from TileJSON format.
- *
- * @constructor
- * @extends {ol.source.Tile}
- * @param {olx.source.TileUTFGridOptions} options Source options.
- * @api
- */
-ol.source.TileUTFGrid = function(options) {
-  ol.source.Tile.call(this, {
-    projection: ol.proj.get('EPSG:3857'),
-    state: ol.source.State.LOADING
-  });
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.preemptive_ = options.preemptive !== undefined ?
-      options.preemptive : true;
-
-  /**
-   * @private
-   * @type {!ol.TileUrlFunctionType}
-   */
-  this.tileUrlFunction_ = ol.TileUrlFunction.nullTileUrlFunction;
-
-  /**
-   * @private
-   * @type {string|undefined}
-   */
-  this.template_ = undefined;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.jsonp_ = options.jsonp || false;
-
-  if (options.url) {
-    if (this.jsonp_) {
-      ol.net.jsonp(options.url, this.handleTileJSONResponse.bind(this),
-          this.handleTileJSONError.bind(this));
-    } else {
-      var client = new XMLHttpRequest();
-      client.addEventListener('load', this.onXHRLoad_.bind(this));
-      client.addEventListener('error', this.onXHRError_.bind(this));
-      client.open('GET', options.url);
-      client.send();
-    }
-  } else if (options.tileJSON) {
-    this.handleTileJSONResponse(options.tileJSON);
-  } else {
-    ol.asserts.assert(false, 51); // Either `url` or `tileJSON` options must be provided
-  }
-};
-ol.inherits(ol.source.TileUTFGrid, ol.source.Tile);
-
-
-/**
- * @private
- * @param {Event} event The load event.
- */
-ol.source.TileUTFGrid.prototype.onXHRLoad_ = function(event) {
-  var client = /** @type {XMLHttpRequest} */ (event.target);
-  // status will be 0 for file:// urls
-  if (!client.status || client.status >= 200 && client.status < 300) {
-    var response;
-    try {
-      response = /** @type {TileJSON} */(JSON.parse(client.responseText));
-    } catch (err) {
-      this.handleTileJSONError();
-      return;
-    }
-    this.handleTileJSONResponse(response);
-  } else {
-    this.handleTileJSONError();
-  }
-};
-
-
-/**
- * @private
- * @param {Event} event The error event.
- */
-ol.source.TileUTFGrid.prototype.onXHRError_ = function(event) {
-  this.handleTileJSONError();
-};
-
-
-/**
- * Return the template from TileJSON.
- * @return {string|undefined} The template from TileJSON.
- * @api
- */
-ol.source.TileUTFGrid.prototype.getTemplate = function() {
-  return this.template_;
-};
-
-
-/**
- * Calls the callback (synchronously by default) with the available data
- * for given coordinate and resolution (or `null` if not yet loaded or
- * in case of an error).
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} resolution Resolution.
- * @param {function(this: T, *)} callback Callback.
- * @param {T=} opt_this The object to use as `this` in the callback.
- * @param {boolean=} opt_request If `true` the callback is always async.
- *                               The tile data is requested if not yet loaded.
- * @template T
- * @api
- */
-ol.source.TileUTFGrid.prototype.forDataAtCoordinateAndResolution = function(
-    coordinate, resolution, callback, opt_this, opt_request) {
-  if (this.tileGrid) {
-    var tileCoord = this.tileGrid.getTileCoordForCoordAndResolution(
-        coordinate, resolution);
-    var tile = /** @type {!ol.source.TileUTFGrid.Tile_} */(this.getTile(
-        tileCoord[0], tileCoord[1], tileCoord[2], 1, this.getProjection()));
-    tile.forDataAtCoordinate(coordinate, callback, opt_this, opt_request);
-  } else {
-    if (opt_request === true) {
-      setTimeout(function() {
-        callback.call(opt_this, null);
-      }, 0);
-    } else {
-      callback.call(opt_this, null);
-    }
-  }
-};
-
-
-/**
- * @protected
- */
-ol.source.TileUTFGrid.prototype.handleTileJSONError = function() {
-  this.setState(ol.source.State.ERROR);
-};
-
-
-/**
- * TODO: very similar to ol.source.TileJSON#handleTileJSONResponse
- * @protected
- * @param {TileJSON} tileJSON Tile JSON.
- */
-ol.source.TileUTFGrid.prototype.handleTileJSONResponse = function(tileJSON) {
-
-  var epsg4326Projection = ol.proj.get('EPSG:4326');
-
-  var sourceProjection = this.getProjection();
-  var extent;
-  if (tileJSON.bounds !== undefined) {
-    var transform = ol.proj.getTransformFromProjections(
-        epsg4326Projection, sourceProjection);
-    extent = ol.extent.applyTransform(tileJSON.bounds, transform);
-  }
-
-  if (tileJSON.scheme !== undefined) {
-    ol.DEBUG && console.assert(tileJSON.scheme == 'xyz', 'tileJSON-scheme is "xyz"');
-  }
-  var minZoom = tileJSON.minzoom || 0;
-  var maxZoom = tileJSON.maxzoom || 22;
-  var tileGrid = ol.tilegrid.createXYZ({
-    extent: ol.tilegrid.extentFromProjection(sourceProjection),
-    maxZoom: maxZoom,
-    minZoom: minZoom
-  });
-  this.tileGrid = tileGrid;
-
-  this.template_ = tileJSON.template;
-
-  var grids = tileJSON.grids;
-  if (!grids) {
-    this.setState(ol.source.State.ERROR);
-    return;
-  }
-
-  this.tileUrlFunction_ =
-      ol.TileUrlFunction.createFromTemplates(grids, tileGrid);
-
-  if (tileJSON.attribution !== undefined) {
-    var attributionExtent = extent !== undefined ?
-        extent : epsg4326Projection.getExtent();
-    /** @type {Object.<string, Array.<ol.TileRange>>} */
-    var tileRanges = {};
-    var z, zKey;
-    for (z = minZoom; z <= maxZoom; ++z) {
-      zKey = z.toString();
-      tileRanges[zKey] =
-          [tileGrid.getTileRangeForExtentAndZ(attributionExtent, z)];
-    }
-    this.setAttributions([
-      new ol.Attribution({
-        html: tileJSON.attribution,
-        tileRanges: tileRanges
-      })
-    ]);
-  }
-
-  this.setState(ol.source.State.READY);
-
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileUTFGrid.prototype.getTile = function(z, x, y, pixelRatio, projection) {
-  var tileCoordKey = this.getKeyZXY(z, x, y);
-  if (this.tileCache.containsKey(tileCoordKey)) {
-    return /** @type {!ol.Tile} */ (this.tileCache.get(tileCoordKey));
-  } else {
-    ol.DEBUG && console.assert(projection, 'argument projection is truthy');
-    var tileCoord = [z, x, y];
-    var urlTileCoord =
-        this.getTileCoordForTileUrlFunction(tileCoord, projection);
-    var tileUrl = this.tileUrlFunction_(urlTileCoord, pixelRatio, projection);
-    var tile = new ol.source.TileUTFGrid.Tile_(
-        tileCoord,
-        tileUrl !== undefined ? ol.Tile.State.IDLE : ol.Tile.State.EMPTY,
-        tileUrl !== undefined ? tileUrl : '',
-        this.tileGrid.getTileCoordExtent(tileCoord),
-        this.preemptive_,
-        this.jsonp_);
-    this.tileCache.set(tileCoordKey, tile);
-    return tile;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileUTFGrid.prototype.useTile = function(z, x, y) {
-  var tileCoordKey = this.getKeyZXY(z, x, y);
-  if (this.tileCache.containsKey(tileCoordKey)) {
-    this.tileCache.get(tileCoordKey);
-  }
-};
-
-
-/**
- * @constructor
- * @extends {ol.Tile}
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Tile.State} state State.
- * @param {string} src Image source URI.
- * @param {ol.Extent} extent Extent of the tile.
- * @param {boolean} preemptive Load the tile when visible (before it's needed).
- * @param {boolean} jsonp Load the tile as a script.
- * @private
- */
-ol.source.TileUTFGrid.Tile_ = function(tileCoord, state, src, extent, preemptive, jsonp) {
-
-  ol.Tile.call(this, tileCoord, state);
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.src_ = src;
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.extent_ = extent;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.preemptive_ = preemptive;
-
-  /**
-   * @private
-   * @type {Array.<string>}
-   */
-  this.grid_ = null;
-
-  /**
-   * @private
-   * @type {Array.<string>}
-   */
-  this.keys_ = null;
-
-  /**
-   * @private
-   * @type {Object.<string, Object>|undefined}
-   */
-  this.data_ = null;
-
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.jsonp_ = jsonp;
-
-};
-ol.inherits(ol.source.TileUTFGrid.Tile_, ol.Tile);
-
-
-/**
- * Get the image element for this tile.
- * @return {Image} Image.
- */
-ol.source.TileUTFGrid.Tile_.prototype.getImage = function() {
-  return null;
-};
-
-
-/**
- * Synchronously returns data at given coordinate (if available).
- * @param {ol.Coordinate} coordinate Coordinate.
- * @return {*} The data.
- */
-ol.source.TileUTFGrid.Tile_.prototype.getData = function(coordinate) {
-  if (!this.grid_ || !this.keys_) {
-    return null;
-  }
-  var xRelative = (coordinate[0] - this.extent_[0]) /
-      (this.extent_[2] - this.extent_[0]);
-  var yRelative = (coordinate[1] - this.extent_[1]) /
-      (this.extent_[3] - this.extent_[1]);
-
-  var row = this.grid_[Math.floor((1 - yRelative) * this.grid_.length)];
-
-  if (typeof row !== 'string') {
-    return null;
-  }
-
-  var code = row.charCodeAt(Math.floor(xRelative * row.length));
-  if (code >= 93) {
-    code--;
-  }
-  if (code >= 35) {
-    code--;
-  }
-  code -= 32;
-
-  var data = null;
-  if (code in this.keys_) {
-    var id = this.keys_[code];
-    if (this.data_ && id in this.data_) {
-      data = this.data_[id];
-    } else {
-      data = id;
-    }
-  }
-  return data;
-};
-
-
-/**
- * Calls the callback (synchronously by default) with the available data
- * for given coordinate (or `null` if not yet loaded).
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {function(this: T, *)} callback Callback.
- * @param {T=} opt_this The object to use as `this` in the callback.
- * @param {boolean=} opt_request If `true` the callback is always async.
- *                               The tile data is requested if not yet loaded.
- * @template T
- */
-ol.source.TileUTFGrid.Tile_.prototype.forDataAtCoordinate = function(coordinate, callback, opt_this, opt_request) {
-  if (this.state == ol.Tile.State.IDLE && opt_request === true) {
-    ol.events.listenOnce(this, ol.events.EventType.CHANGE, function(e) {
-      callback.call(opt_this, this.getData(coordinate));
-    }, this);
-    this.loadInternal_();
-  } else {
-    if (opt_request === true) {
-      setTimeout(function() {
-        callback.call(opt_this, this.getData(coordinate));
-      }.bind(this), 0);
-    } else {
-      callback.call(opt_this, this.getData(coordinate));
-    }
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileUTFGrid.Tile_.prototype.getKey = function() {
-  return this.src_;
-};
-
-
-/**
- * @private
- */
-ol.source.TileUTFGrid.Tile_.prototype.handleError_ = function() {
-  this.state = ol.Tile.State.ERROR;
-  this.changed();
-};
-
-
-/**
- * @param {!UTFGridJSON} json UTFGrid data.
- * @private
- */
-ol.source.TileUTFGrid.Tile_.prototype.handleLoad_ = function(json) {
-  this.grid_ = json.grid;
-  this.keys_ = json.keys;
-  this.data_ = json.data;
-
-  this.state = ol.Tile.State.EMPTY;
-  this.changed();
-};
-
-
-/**
- * @private
- */
-ol.source.TileUTFGrid.Tile_.prototype.loadInternal_ = function() {
-  if (this.state == ol.Tile.State.IDLE) {
-    this.state = ol.Tile.State.LOADING;
-    if (this.jsonp_) {
-      ol.net.jsonp(this.src_, this.handleLoad_.bind(this),
-          this.handleError_.bind(this));
-    } else {
-      var client = new XMLHttpRequest();
-      client.addEventListener('load', this.onXHRLoad_.bind(this));
-      client.addEventListener('error', this.onXHRError_.bind(this));
-      client.open('GET', this.src_);
-      client.send();
-    }
-  }
-};
-
-
-/**
- * @private
- * @param {Event} event The load event.
- */
-ol.source.TileUTFGrid.Tile_.prototype.onXHRLoad_ = function(event) {
-  var client = /** @type {XMLHttpRequest} */ (event.target);
-  // status will be 0 for file:// urls
-  if (!client.status || client.status >= 200 && client.status < 300) {
-    var response;
-    try {
-      response = /** @type {!UTFGridJSON} */(JSON.parse(client.responseText));
-    } catch (err) {
-      this.handleError_();
-      return;
-    }
-    this.handleLoad_(response);
-  } else {
-    this.handleError_();
-  }
-};
-
-
-/**
- * @private
- * @param {Event} event The error event.
- */
-ol.source.TileUTFGrid.Tile_.prototype.onXHRError_ = function(event) {
-  this.handleError_();
-};
-
-
-/**
- * Load not yet loaded URI.
- */
-ol.source.TileUTFGrid.Tile_.prototype.load = function() {
-  if (this.preemptive_) {
-    this.loadInternal_();
-  }
-};
-
-// FIXME add minZoom support
-// FIXME add date line wrap (tile coord transform)
-// FIXME cannot be shared between maps with different projections
-
-goog.provide('ol.source.TileWMS');
-
-goog.require('ol');
-goog.require('ol.asserts');
-goog.require('ol.extent');
-goog.require('ol.obj');
-goog.require('ol.math');
-goog.require('ol.proj');
-goog.require('ol.size');
-goog.require('ol.source.TileImage');
-goog.require('ol.source.WMSServerType');
-goog.require('ol.tilecoord');
-goog.require('ol.string');
-goog.require('ol.uri');
-
-/**
- * @classdesc
- * Layer source for tile data from WMS servers.
- *
- * @constructor
- * @extends {ol.source.TileImage}
- * @param {olx.source.TileWMSOptions=} opt_options Tile WMS options.
- * @api stable
- */
-ol.source.TileWMS = function(opt_options) {
-
-  var options = opt_options || {};
-
-  var params = options.params || {};
-
-  var transparent = 'TRANSPARENT' in params ? params['TRANSPARENT'] : true;
-
-  ol.source.TileImage.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    crossOrigin: options.crossOrigin,
-    logo: options.logo,
-    opaque: !transparent,
-    projection: options.projection,
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    tileGrid: options.tileGrid,
-    tileLoadFunction: options.tileLoadFunction,
-    url: options.url,
-    urls: options.urls,
-    wrapX: options.wrapX !== undefined ? options.wrapX : true
-  });
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.gutter_ = options.gutter !== undefined ? options.gutter : 0;
-
-  /**
-   * @private
-   * @type {!Object}
-   */
-  this.params_ = params;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.v13_ = true;
-
-  /**
-   * @private
-   * @type {ol.source.WMSServerType|undefined}
-   */
-  this.serverType_ =
-      /** @type {ol.source.WMSServerType|undefined} */ (options.serverType);
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.coordKeyPrefix_ = '';
-  this.resetCoordKeyPrefix_();
-
-  /**
-   * @private
-   * @type {ol.Extent}
-   */
-  this.tmpExtent_ = ol.extent.createEmpty();
-
-  this.updateV13_();
-  this.setKey(this.getKeyForParams_());
-
-};
-ol.inherits(ol.source.TileWMS, ol.source.TileImage);
-
-
-/**
- * Return the GetFeatureInfo URL for the passed coordinate, resolution, and
- * projection. Return `undefined` if the GetFeatureInfo URL cannot be
- * constructed.
- * @param {ol.Coordinate} coordinate Coordinate.
- * @param {number} resolution Resolution.
- * @param {ol.ProjectionLike} projection Projection.
- * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should
- *     be provided. If `QUERY_LAYERS` is not provided then the layers specified
- *     in the `LAYERS` parameter will be used. `VERSION` should not be
- *     specified here.
- * @return {string|undefined} GetFeatureInfo URL.
- * @api stable
- */
-ol.source.TileWMS.prototype.getGetFeatureInfoUrl = function(coordinate, resolution, projection, params) {
-
-  ol.DEBUG && console.assert(!('VERSION' in params),
-      'key VERSION is not allowed in params');
-
-  var projectionObj = ol.proj.get(projection);
-
-  var tileGrid = this.getTileGrid();
-  if (!tileGrid) {
-    tileGrid = this.getTileGridForProjection(projectionObj);
-  }
-
-  var tileCoord = tileGrid.getTileCoordForCoordAndResolution(
-      coordinate, resolution);
-
-  if (tileGrid.getResolutions().length <= tileCoord[0]) {
-    return undefined;
-  }
-
-  var tileResolution = tileGrid.getResolution(tileCoord[0]);
-  var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);
-  var tileSize = ol.size.toSize(
-      tileGrid.getTileSize(tileCoord[0]), this.tmpSize);
-
-  var gutter = this.gutter_;
-  if (gutter !== 0) {
-    tileSize = ol.size.buffer(tileSize, gutter, this.tmpSize);
-    tileExtent = ol.extent.buffer(tileExtent,
-        tileResolution * gutter, tileExtent);
-  }
-
-  var baseParams = {
-    'SERVICE': 'WMS',
-    'VERSION': ol.DEFAULT_WMS_VERSION,
-    'REQUEST': 'GetFeatureInfo',
-    'FORMAT': 'image/png',
-    'TRANSPARENT': true,
-    'QUERY_LAYERS': this.params_['LAYERS']
-  };
-  ol.obj.assign(baseParams, this.params_, params);
-
-  var x = Math.floor((coordinate[0] - tileExtent[0]) / tileResolution);
-  var y = Math.floor((tileExtent[3] - coordinate[1]) / tileResolution);
-
-  baseParams[this.v13_ ? 'I' : 'X'] = x;
-  baseParams[this.v13_ ? 'J' : 'Y'] = y;
-
-  return this.getRequestUrl_(tileCoord, tileSize, tileExtent,
-      1, projectionObj, baseParams);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileWMS.prototype.getGutterInternal = function() {
-  return this.gutter_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileWMS.prototype.getKeyZXY = function(z, x, y) {
-  return this.coordKeyPrefix_ + ol.source.TileImage.prototype.getKeyZXY.call(this, z, x, y);
-};
-
-
-/**
- * Get the user-provided params, i.e. those passed to the constructor through
- * the "params" option, and possibly updated using the updateParams method.
- * @return {Object} Params.
- * @api stable
- */
-ol.source.TileWMS.prototype.getParams = function() {
-  return this.params_;
-};
-
-
-/**
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Size} tileSize Tile size.
- * @param {ol.Extent} tileExtent Tile extent.
- * @param {number} pixelRatio Pixel ratio.
- * @param {ol.proj.Projection} projection Projection.
- * @param {Object} params Params.
- * @return {string|undefined} Request URL.
- * @private
- */
-ol.source.TileWMS.prototype.getRequestUrl_ = function(tileCoord, tileSize, tileExtent,
-        pixelRatio, projection, params) {
-
-  var urls = this.urls;
-  if (!urls) {
-    return undefined;
-  }
-
-  params['WIDTH'] = tileSize[0];
-  params['HEIGHT'] = tileSize[1];
-
-  params[this.v13_ ? 'CRS' : 'SRS'] = projection.getCode();
-
-  if (!('STYLES' in this.params_)) {
-    params['STYLES'] = '';
-  }
-
-  if (pixelRatio != 1) {
-    switch (this.serverType_) {
-      case ol.source.WMSServerType.GEOSERVER:
-        var dpi = (90 * pixelRatio + 0.5) | 0;
-        if ('FORMAT_OPTIONS' in params) {
-          params['FORMAT_OPTIONS'] += ';dpi:' + dpi;
-        } else {
-          params['FORMAT_OPTIONS'] = 'dpi:' + dpi;
-        }
-        break;
-      case ol.source.WMSServerType.MAPSERVER:
-        params['MAP_RESOLUTION'] = 90 * pixelRatio;
-        break;
-      case ol.source.WMSServerType.CARMENTA_SERVER:
-      case ol.source.WMSServerType.QGIS:
-        params['DPI'] = 90 * pixelRatio;
-        break;
-      default:
-        ol.asserts.assert(false, 52); // Unknown `serverType` configured
-        break;
-    }
-  }
-
-  var axisOrientation = projection.getAxisOrientation();
-  var bbox = tileExtent;
-  if (this.v13_ && axisOrientation.substr(0, 2) == 'ne') {
-    var tmp;
-    tmp = tileExtent[0];
-    bbox[0] = tileExtent[1];
-    bbox[1] = tmp;
-    tmp = tileExtent[2];
-    bbox[2] = tileExtent[3];
-    bbox[3] = tmp;
-  }
-  params['BBOX'] = bbox.join(',');
-
-  var url;
-  if (urls.length == 1) {
-    url = urls[0];
-  } else {
-    var index = ol.math.modulo(ol.tilecoord.hash(tileCoord), urls.length);
-    url = urls[index];
-  }
-  return ol.uri.appendParams(url, params);
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileWMS.prototype.getTilePixelRatio = function(pixelRatio) {
-  return (!this.hidpi_ || this.serverType_ === undefined) ? 1 :
-      /** @type {number} */ (pixelRatio);
-};
-
-
-/**
- * @private
- */
-ol.source.TileWMS.prototype.resetCoordKeyPrefix_ = function() {
-  var i = 0;
-  var res = [];
-
-  if (this.urls) {
-    var j, jj;
-    for (j = 0, jj = this.urls.length; j < jj; ++j) {
-      res[i++] = this.urls[j];
-    }
-  }
-
-  this.coordKeyPrefix_ = res.join('#');
-};
-
-
-/**
- * @private
- * @return {string} The key for the current params.
- */
-ol.source.TileWMS.prototype.getKeyForParams_ = function() {
-  var i = 0;
-  var res = [];
-  for (var key in this.params_) {
-    res[i++] = key + '-' + this.params_[key];
-  }
-  return res.join('/');
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.TileWMS.prototype.fixedTileUrlFunction = function(tileCoord, pixelRatio, projection) {
-
-  var tileGrid = this.getTileGrid();
-  if (!tileGrid) {
-    tileGrid = this.getTileGridForProjection(projection);
-  }
-
-  if (tileGrid.getResolutions().length <= tileCoord[0]) {
-    return undefined;
-  }
-
-  if (pixelRatio != 1 && (!this.hidpi_ || this.serverType_ === undefined)) {
-    pixelRatio = 1;
-  }
-
-  var tileResolution = tileGrid.getResolution(tileCoord[0]);
-  var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);
-  var tileSize = ol.size.toSize(
-      tileGrid.getTileSize(tileCoord[0]), this.tmpSize);
-
-  var gutter = this.gutter_;
-  if (gutter !== 0) {
-    tileSize = ol.size.buffer(tileSize, gutter, this.tmpSize);
-    tileExtent = ol.extent.buffer(tileExtent,
-        tileResolution * gutter, tileExtent);
-  }
-
-  if (pixelRatio != 1) {
-    tileSize = ol.size.scale(tileSize, pixelRatio, this.tmpSize);
-  }
-
-  var baseParams = {
-    'SERVICE': 'WMS',
-    'VERSION': ol.DEFAULT_WMS_VERSION,
-    'REQUEST': 'GetMap',
-    'FORMAT': 'image/png',
-    'TRANSPARENT': true
-  };
-  ol.obj.assign(baseParams, this.params_);
-
-  return this.getRequestUrl_(tileCoord, tileSize, tileExtent,
-      pixelRatio, projection, baseParams);
-};
-
-/**
- * @inheritDoc
- */
-ol.source.TileWMS.prototype.setUrls = function(urls) {
-  ol.source.TileImage.prototype.setUrls.call(this, urls);
-  this.resetCoordKeyPrefix_();
-};
-
-
-/**
- * Update the user-provided params.
- * @param {Object} params Params.
- * @api stable
- */
-ol.source.TileWMS.prototype.updateParams = function(params) {
-  ol.obj.assign(this.params_, params);
-  this.resetCoordKeyPrefix_();
-  this.updateV13_();
-  this.setKey(this.getKeyForParams_());
-};
-
-
-/**
- * @private
- */
-ol.source.TileWMS.prototype.updateV13_ = function() {
-  var version = this.params_['VERSION'] || ol.DEFAULT_WMS_VERSION;
-  this.v13_ = ol.string.compareVersions(version, '1.3') >= 0;
-};
-
-goog.provide('ol.VectorTile');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.dom');
-
-
-/**
- * @constructor
- * @extends {ol.Tile}
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Tile.State} state State.
- * @param {string} src Data source url.
- * @param {ol.format.Feature} format Feature format.
- * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.
- */
-ol.VectorTile = function(tileCoord, state, src, format, tileLoadFunction) {
-
-  ol.Tile.call(this, tileCoord, state);
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.context_ = ol.dom.createCanvasContext2D();
-
-  /**
-   * @private
-   * @type {ol.format.Feature}
-   */
-  this.format_ = format;
-
-  /**
-   * @private
-   * @type {Array.<ol.Feature>}
-   */
-  this.features_ = null;
-
-  /**
-   * @private
-   * @type {ol.FeatureLoader}
-   */
-  this.loader_;
-
-  /**
-   * Data projection
-   * @private
-   * @type {ol.proj.Projection}
-   */
-  this.projection_;
-
-  /**
-   * @private
-   * @type {ol.TileReplayState}
-   */
-  this.replayState_ = {
-    dirty: false,
-    renderedRenderOrder: null,
-    renderedRevision: -1,
-    renderedTileRevision: -1,
-    replayGroup: null,
-    skippedFeatures: []
-  };
-
-  /**
-   * @private
-   * @type {ol.TileLoadFunctionType}
-   */
-  this.tileLoadFunction_ = tileLoadFunction;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.url_ = src;
-
-};
-ol.inherits(ol.VectorTile, ol.Tile);
-
-
-/**
- * @return {CanvasRenderingContext2D} The rendering context.
- */
-ol.VectorTile.prototype.getContext = function() {
-  return this.context_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.VectorTile.prototype.getImage = function() {
-  return this.replayState_.renderedTileRevision == -1 ?
-      null : this.context_.canvas;
-};
-
-
-/**
- * Get the feature format assigned for reading this tile's features.
- * @return {ol.format.Feature} Feature format.
- * @api
- */
-ol.VectorTile.prototype.getFormat = function() {
-  return this.format_;
-};
-
-
-/**
- * @return {Array.<ol.Feature>} Features.
- */
-ol.VectorTile.prototype.getFeatures = function() {
-  return this.features_;
-};
-
-
-/**
- * @return {ol.TileReplayState} The replay state.
- */
-ol.VectorTile.prototype.getReplayState = function() {
-  return this.replayState_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.VectorTile.prototype.getKey = function() {
-  return this.url_;
-};
-
-
-/**
- * @return {ol.proj.Projection} Feature projection.
- */
-ol.VectorTile.prototype.getProjection = function() {
-  return this.projection_;
-};
-
-
-/**
- * Load the tile.
- */
-ol.VectorTile.prototype.load = function() {
-  if (this.state == ol.Tile.State.IDLE) {
-    this.setState(ol.Tile.State.LOADING);
-    this.tileLoadFunction_(this, this.url_);
-    this.loader_(null, NaN, null);
-  }
-};
-
-
-/**
- * @param {Array.<ol.Feature>} features Features.
- * @api
- */
-ol.VectorTile.prototype.setFeatures = function(features) {
-  this.features_ = features;
-  this.setState(ol.Tile.State.LOADED);
-};
-
-
-/**
- * Set the projection of the features that were added with {@link #setFeatures}.
- * @param {ol.proj.Projection} projection Feature projection.
- * @api
- */
-ol.VectorTile.prototype.setProjection = function(projection) {
-  this.projection_ = projection;
-};
-
-
-/**
- * @param {ol.Tile.State} tileState Tile state.
- */
-ol.VectorTile.prototype.setState = function(tileState) {
-  this.state = tileState;
-  this.changed();
-};
-
-
-/**
- * Set the feature loader for reading this tile's features.
- * @param {ol.FeatureLoader} loader Feature loader.
- * @api
- */
-ol.VectorTile.prototype.setLoader = function(loader) {
-  this.loader_ = loader;
-};
-
-goog.provide('ol.source.VectorTile');
-
-goog.require('ol');
-goog.require('ol.Tile');
-goog.require('ol.VectorTile');
-goog.require('ol.events');
-goog.require('ol.events.EventType');
-goog.require('ol.featureloader');
-goog.require('ol.size');
-goog.require('ol.source.UrlTile');
-
-
-/**
- * @classdesc
- * Class for layer sources providing vector data divided into a tile grid, to be
- * used with {@link ol.layer.VectorTile}. Although this source receives tiles
- * with vector features from the server, it is not meant for feature editing.
- * Features are optimized for rendering, their geometries are clipped at or near
- * tile boundaries and simplified for a view resolution. See
- * {@link ol.source.Vector} for vector sources that are suitable for feature
- * editing.
- *
- * @constructor
- * @fires ol.source.Tile.Event
- * @extends {ol.source.UrlTile}
- * @param {olx.source.VectorTileOptions} options Vector tile options.
- * @api
- */
-ol.source.VectorTile = function(options) {
-
-  ol.source.UrlTile.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize !== undefined ? options.cacheSize : 128,
-    extent: options.extent,
-    logo: options.logo,
-    opaque: false,
-    projection: options.projection,
-    state: options.state,
-    tileGrid: options.tileGrid,
-    tileLoadFunction: options.tileLoadFunction ?
-        options.tileLoadFunction : ol.source.VectorTile.defaultTileLoadFunction,
-    tileUrlFunction: options.tileUrlFunction,
-    tilePixelRatio: options.tilePixelRatio,
-    url: options.url,
-    urls: options.urls,
-    wrapX: options.wrapX === undefined ? true : options.wrapX
-  });
-
-  /**
-   * @private
-   * @type {ol.format.Feature}
-   */
-  this.format_ = options.format ? options.format : null;
-
-  /**
-   * @private
-   * @type {boolean}
-   */
-  this.overlaps_ = options.overlaps == undefined ? true : options.overlaps;
-
-  /**
-   * @protected
-   * @type {function(new: ol.VectorTile, ol.TileCoord, ol.Tile.State, string,
-   *        ol.format.Feature, ol.TileLoadFunctionType)}
-   */
-  this.tileClass = options.tileClass ? options.tileClass : ol.VectorTile;
-
-};
-ol.inherits(ol.source.VectorTile, ol.source.UrlTile);
-
-
-/**
- * @return {boolean} The source can have overlapping geometries.
- */
-ol.source.VectorTile.prototype.getOverlaps = function() {
-  return this.overlaps_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.VectorTile.prototype.getTile = function(z, x, y, pixelRatio, projection) {
-  var tileCoordKey = this.getKeyZXY(z, x, y);
-  if (this.tileCache.containsKey(tileCoordKey)) {
-    return /** @type {!ol.Tile} */ (this.tileCache.get(tileCoordKey));
-  } else {
-    var tileCoord = [z, x, y];
-    var urlTileCoord = this.getTileCoordForTileUrlFunction(
-        tileCoord, projection);
-    var tileUrl = urlTileCoord ?
-        this.tileUrlFunction(urlTileCoord, pixelRatio, projection) : undefined;
-    var tile = new this.tileClass(
-        tileCoord,
-        tileUrl !== undefined ? ol.Tile.State.IDLE : ol.Tile.State.EMPTY,
-        tileUrl !== undefined ? tileUrl : '',
-        this.format_, this.tileLoadFunction);
-    ol.events.listen(tile, ol.events.EventType.CHANGE,
-        this.handleTileChange, this);
-
-    this.tileCache.set(tileCoordKey, tile);
-    return tile;
-  }
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.VectorTile.prototype.getTilePixelRatio = function(opt_pixelRatio) {
-  return opt_pixelRatio == undefined ?
-      ol.source.UrlTile.prototype.getTilePixelRatio.call(this, opt_pixelRatio) :
-      opt_pixelRatio;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.source.VectorTile.prototype.getTilePixelSize = function(z, pixelRatio, projection) {
-  var tileSize = ol.size.toSize(this.tileGrid.getTileSize(z));
-  return [Math.round(tileSize[0] * pixelRatio), Math.round(tileSize[1] * pixelRatio)];
-};
-
-
-/**
- * @param {ol.VectorTile} vectorTile Vector tile.
- * @param {string} url URL.
- */
-ol.source.VectorTile.defaultTileLoadFunction = function(vectorTile, url) {
-  vectorTile.setLoader(ol.featureloader.tile(url, vectorTile.getFormat()));
-};
-
-goog.provide('ol.tilegrid.WMTS');
-
-goog.require('ol');
-goog.require('ol.proj');
-goog.require('ol.tilegrid.TileGrid');
-
-
-/**
- * @classdesc
- * Set the grid pattern for sources accessing WMTS tiled-image servers.
- *
- * @constructor
- * @extends {ol.tilegrid.TileGrid}
- * @param {olx.tilegrid.WMTSOptions} options WMTS options.
- * @struct
- * @api
- */
-ol.tilegrid.WMTS = function(options) {
-
-  ol.DEBUG && console.assert(
-      options.resolutions.length == options.matrixIds.length,
-      'options resolutions and matrixIds must have equal length (%s == %s)',
-      options.resolutions.length, options.matrixIds.length);
-
-  /**
-   * @private
-   * @type {!Array.<string>}
-   */
-  this.matrixIds_ = options.matrixIds;
-  // FIXME: should the matrixIds become optionnal?
-
-  ol.tilegrid.TileGrid.call(this, {
-    extent: options.extent,
-    origin: options.origin,
-    origins: options.origins,
-    resolutions: options.resolutions,
-    tileSize: options.tileSize,
-    tileSizes: options.tileSizes,
-    sizes: options.sizes
-  });
-
-};
-ol.inherits(ol.tilegrid.WMTS, ol.tilegrid.TileGrid);
-
-
-/**
- * @param {number} z Z.
- * @return {string} MatrixId..
- */
-ol.tilegrid.WMTS.prototype.getMatrixId = function(z) {
-  ol.DEBUG && console.assert(0 <= z && z < this.matrixIds_.length,
-      'attempted to retrieve matrixId for illegal z (%s)', z);
-  return this.matrixIds_[z];
-};
-
-
-/**
- * Get the list of matrix identifiers.
- * @return {Array.<string>} MatrixIds.
- * @api
- */
-ol.tilegrid.WMTS.prototype.getMatrixIds = function() {
-  return this.matrixIds_;
-};
-
-
-/**
- * Create a tile grid from a WMTS capabilities matrix set.
- * @param {Object} matrixSet An object representing a matrixSet in the
- *     capabilities document.
- * @param {ol.Extent=} opt_extent An optional extent to restrict the tile
- *     ranges the server provides.
- * @return {ol.tilegrid.WMTS} WMTS tileGrid instance.
- * @api
- */
-ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet = function(matrixSet, opt_extent) {
-
-  /** @type {!Array.<number>} */
-  var resolutions = [];
-  /** @type {!Array.<string>} */
-  var matrixIds = [];
-  /** @type {!Array.<ol.Coordinate>} */
-  var origins = [];
-  /** @type {!Array.<ol.Size>} */
-  var tileSizes = [];
-  /** @type {!Array.<ol.Size>} */
-  var sizes = [];
-
-  var supportedCRSPropName = 'SupportedCRS';
-  var matrixIdsPropName = 'TileMatrix';
-  var identifierPropName = 'Identifier';
-  var scaleDenominatorPropName = 'ScaleDenominator';
-  var topLeftCornerPropName = 'TopLeftCorner';
-  var tileWidthPropName = 'TileWidth';
-  var tileHeightPropName = 'TileHeight';
-
-  var projection;
-  projection = ol.proj.get(matrixSet[supportedCRSPropName].replace(
-      /urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, '$1:$3'));
-  var metersPerUnit = projection.getMetersPerUnit();
-  // swap origin x and y coordinates if axis orientation is lat/long
-  var switchOriginXY = projection.getAxisOrientation().substr(0, 2) == 'ne';
-
-  matrixSet[matrixIdsPropName].sort(function(a, b) {
-    return b[scaleDenominatorPropName] - a[scaleDenominatorPropName];
-  });
-
-  matrixSet[matrixIdsPropName].forEach(function(elt, index, array) {
-    matrixIds.push(elt[identifierPropName]);
-    var resolution = elt[scaleDenominatorPropName] * 0.28E-3 / metersPerUnit;
-    var tileWidth = elt[tileWidthPropName];
-    var tileHeight = elt[tileHeightPropName];
-    if (switchOriginXY) {
-      origins.push([elt[topLeftCornerPropName][1],
-        elt[topLeftCornerPropName][0]]);
-    } else {
-      origins.push(elt[topLeftCornerPropName]);
-    }
-    resolutions.push(resolution);
-    tileSizes.push(tileWidth == tileHeight ?
-        tileWidth : [tileWidth, tileHeight]);
-    // top-left origin, so height is negative
-    sizes.push([elt['MatrixWidth'], -elt['MatrixHeight']]);
-  });
-
-  return new ol.tilegrid.WMTS({
-    extent: opt_extent,
-    origins: origins,
-    resolutions: resolutions,
-    matrixIds: matrixIds,
-    tileSizes: tileSizes,
-    sizes: sizes
-  });
-};
-
-goog.provide('ol.source.WMTS');
-
-goog.require('ol');
-goog.require('ol.TileUrlFunction');
-goog.require('ol.array');
-goog.require('ol.extent');
-goog.require('ol.obj');
-goog.require('ol.proj');
-goog.require('ol.source.TileImage');
-goog.require('ol.tilegrid.WMTS');
-goog.require('ol.uri');
-
-
-/**
- * @classdesc
- * Layer source for tile data from WMTS servers.
- *
- * @constructor
- * @extends {ol.source.TileImage}
- * @param {olx.source.WMTSOptions} options WMTS options.
- * @api stable
- */
-ol.source.WMTS = function(options) {
-
-  // TODO: add support for TileMatrixLimits
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.version_ = options.version !== undefined ? options.version : '1.0.0';
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.format_ = options.format !== undefined ? options.format : 'image/jpeg';
-
-  /**
-   * @private
-   * @type {!Object}
-   */
-  this.dimensions_ = options.dimensions !== undefined ? options.dimensions : {};
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.layer_ = options.layer;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.matrixSet_ = options.matrixSet;
-
-  /**
-   * @private
-   * @type {string}
-   */
-  this.style_ = options.style;
-
-  var urls = options.urls;
-  if (urls === undefined && options.url !== undefined) {
-    urls = ol.TileUrlFunction.expandUrl(options.url);
-  }
-
-  // FIXME: should we guess this requestEncoding from options.url(s)
-  //        structure? that would mean KVP only if a template is not provided.
-
-  /**
-   * @private
-   * @type {ol.source.WMTS.RequestEncoding}
-   */
-  this.requestEncoding_ = options.requestEncoding !== undefined ?
-      /** @type {ol.source.WMTS.RequestEncoding} */ (options.requestEncoding) :
-      ol.source.WMTS.RequestEncoding.KVP;
-
-  var requestEncoding = this.requestEncoding_;
-
-  // FIXME: should we create a default tileGrid?
-  // we could issue a getCapabilities xhr to retrieve missing configuration
-  var tileGrid = options.tileGrid;
-
-  // context property names are lower case to allow for a case insensitive
-  // replacement as some services use different naming conventions
-  var context = {
-    'layer': this.layer_,
-    'style': this.style_,
-    'tilematrixset': this.matrixSet_
-  };
-
-  if (requestEncoding == ol.source.WMTS.RequestEncoding.KVP) {
-    ol.obj.assign(context, {
-      'Service': 'WMTS',
-      'Request': 'GetTile',
-      'Version': this.version_,
-      'Format': this.format_
-    });
-  }
-
-  var dimensions = this.dimensions_;
-
-  /**
-   * @param {string} template Template.
-   * @return {ol.TileUrlFunctionType} Tile URL function.
-   */
-  function createFromWMTSTemplate(template) {
-
-    // TODO: we may want to create our own appendParams function so that params
-    // order conforms to wmts spec guidance, and so that we can avoid to escape
-    // special template params
-
-    template = (requestEncoding == ol.source.WMTS.RequestEncoding.KVP) ?
-        ol.uri.appendParams(template, context) :
-        template.replace(/\{(\w+?)\}/g, function(m, p) {
-          return (p.toLowerCase() in context) ? context[p.toLowerCase()] : m;
-        });
-
-    return (
-        /**
-         * @param {ol.TileCoord} tileCoord Tile coordinate.
-         * @param {number} pixelRatio Pixel ratio.
-         * @param {ol.proj.Projection} projection Projection.
-         * @return {string|undefined} Tile URL.
-         */
-        function(tileCoord, pixelRatio, projection) {
-          if (!tileCoord) {
-            return undefined;
-          } else {
-            var localContext = {
-              'TileMatrix': tileGrid.getMatrixId(tileCoord[0]),
-              'TileCol': tileCoord[1],
-              'TileRow': -tileCoord[2] - 1
-            };
-            ol.obj.assign(localContext, dimensions);
-            var url = template;
-            if (requestEncoding == ol.source.WMTS.RequestEncoding.KVP) {
-              url = ol.uri.appendParams(url, localContext);
-            } else {
-              url = url.replace(/\{(\w+?)\}/g, function(m, p) {
-                return localContext[p];
-              });
-            }
-            return url;
-          }
-        });
-  }
-
-  var tileUrlFunction = (urls && urls.length > 0) ?
-      ol.TileUrlFunction.createFromTileUrlFunctions(
-          urls.map(createFromWMTSTemplate)) :
-      ol.TileUrlFunction.nullTileUrlFunction;
-
-  ol.source.TileImage.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    crossOrigin: options.crossOrigin,
-    logo: options.logo,
-    projection: options.projection,
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    tileClass: options.tileClass,
-    tileGrid: tileGrid,
-    tileLoadFunction: options.tileLoadFunction,
-    tilePixelRatio: options.tilePixelRatio,
-    tileUrlFunction: tileUrlFunction,
-    urls: urls,
-    wrapX: options.wrapX !== undefined ? options.wrapX : false
-  });
-
-  this.setKey(this.getKeyForDimensions_());
-
-};
-ol.inherits(ol.source.WMTS, ol.source.TileImage);
-
-
-/**
- * Get the dimensions, i.e. those passed to the constructor through the
- * "dimensions" option, and possibly updated using the updateDimensions
- * method.
- * @return {!Object} Dimensions.
- * @api
- */
-ol.source.WMTS.prototype.getDimensions = function() {
-  return this.dimensions_;
-};
-
-
-/**
- * Return the image format of the WMTS source.
- * @return {string} Format.
- * @api
- */
-ol.source.WMTS.prototype.getFormat = function() {
-  return this.format_;
-};
-
-
-/**
- * Return the layer of the WMTS source.
- * @return {string} Layer.
- * @api
- */
-ol.source.WMTS.prototype.getLayer = function() {
-  return this.layer_;
-};
-
-
-/**
- * Return the matrix set of the WMTS source.
- * @return {string} MatrixSet.
- * @api
- */
-ol.source.WMTS.prototype.getMatrixSet = function() {
-  return this.matrixSet_;
-};
-
-
-/**
- * Return the request encoding, either "KVP" or "REST".
- * @return {ol.source.WMTS.RequestEncoding} Request encoding.
- * @api
- */
-ol.source.WMTS.prototype.getRequestEncoding = function() {
-  return this.requestEncoding_;
-};
-
-
-/**
- * Return the style of the WMTS source.
- * @return {string} Style.
- * @api
- */
-ol.source.WMTS.prototype.getStyle = function() {
-  return this.style_;
-};
-
-
-/**
- * Return the version of the WMTS source.
- * @return {string} Version.
- * @api
- */
-ol.source.WMTS.prototype.getVersion = function() {
-  return this.version_;
-};
-
-
-/**
- * @private
- * @return {string} The key for the current dimensions.
- */
-ol.source.WMTS.prototype.getKeyForDimensions_ = function() {
-  var i = 0;
-  var res = [];
-  for (var key in this.dimensions_) {
-    res[i++] = key + '-' + this.dimensions_[key];
-  }
-  return res.join('/');
-};
-
-
-/**
- * Update the dimensions.
- * @param {Object} dimensions Dimensions.
- * @api
- */
-ol.source.WMTS.prototype.updateDimensions = function(dimensions) {
-  ol.obj.assign(this.dimensions_, dimensions);
-  this.setKey(this.getKeyForDimensions_());
-};
-
-
-/**
- * Generate source options from a capabilities object.
- * @param {Object} wmtsCap An object representing the capabilities document.
- * @param {Object} config Configuration properties for the layer.  Defaults for
- *                  the layer will apply if not provided.
- *
- * Required config properties:
- *  - layer - {string} The layer identifier.
- *
- * Optional config properties:
- *  - matrixSet - {string} The matrix set identifier, required if there is
- *       more than one matrix set in the layer capabilities.
- *  - projection - {string} The desired CRS when no matrixSet is specified.
- *       eg: "EPSG:3857". If the desired projection is not available,
- *       an error is thrown.
- *  - requestEncoding - {string} url encoding format for the layer. Default is
- *       the first tile url format found in the GetCapabilities response.
- *  - style - {string} The name of the style
- *  - format - {string} Image format for the layer. Default is the first
- *       format returned in the GetCapabilities response.
- * @return {olx.source.WMTSOptions} WMTS source options object.
- * @api
- */
-ol.source.WMTS.optionsFromCapabilities = function(wmtsCap, config) {
-
-  // TODO: add support for TileMatrixLimits
-  ol.DEBUG && console.assert(config['layer'],
-      'config "layer" must not be null');
-
-  var layers = wmtsCap['Contents']['Layer'];
-  var l = ol.array.find(layers, function(elt, index, array) {
-    return elt['Identifier'] == config['layer'];
-  });
-  ol.DEBUG && console.assert(l, 'found a matching layer in Contents/Layer');
-
-  ol.DEBUG && console.assert(l['TileMatrixSetLink'].length > 0,
-      'layer has TileMatrixSetLink');
-  var tileMatrixSets = wmtsCap['Contents']['TileMatrixSet'];
-  var idx, matrixSet;
-  if (l['TileMatrixSetLink'].length > 1) {
-    if ('projection' in config) {
-      idx = ol.array.findIndex(l['TileMatrixSetLink'],
-          function(elt, index, array) {
-            var tileMatrixSet = ol.array.find(tileMatrixSets, function(el) {
-              return el['Identifier'] == elt['TileMatrixSet'];
-            });
-            return tileMatrixSet['SupportedCRS'].replace(
-                /urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, '$1:$3'
-                   ) == config['projection'];
-          });
-    } else {
-      idx = ol.array.findIndex(l['TileMatrixSetLink'],
-          function(elt, index, array) {
-            return elt['TileMatrixSet'] == config['matrixSet'];
-          });
-    }
-  } else {
-    idx = 0;
-  }
-  if (idx < 0) {
-    idx = 0;
-  }
-  matrixSet = /** @type {string} */
-      (l['TileMatrixSetLink'][idx]['TileMatrixSet']);
-
-  ol.DEBUG && console.assert(matrixSet, 'TileMatrixSet must not be null');
-
-  var format = /** @type {string} */ (l['Format'][0]);
-  if ('format' in config) {
-    format = config['format'];
-  }
-  idx = ol.array.findIndex(l['Style'], function(elt, index, array) {
-    if ('style' in config) {
-      return elt['Title'] == config['style'];
-    } else {
-      return elt['isDefault'];
-    }
-  });
-  if (idx < 0) {
-    idx = 0;
-  }
-  var style = /** @type {string} */ (l['Style'][idx]['Identifier']);
-
-  var dimensions = {};
-  if ('Dimension' in l) {
-    l['Dimension'].forEach(function(elt, index, array) {
-      var key = elt['Identifier'];
-      var value = elt['Default'];
-      if (value !== undefined) {
-        ol.DEBUG && console.assert(ol.array.includes(elt['Value'], value),
-            'default value contained in values');
-      } else {
-        value = elt['Value'][0];
-      }
-      ol.DEBUG && console.assert(value !== undefined, 'value could be found');
-      dimensions[key] = value;
-    });
-  }
-
-  var matrixSets = wmtsCap['Contents']['TileMatrixSet'];
-  var matrixSetObj = ol.array.find(matrixSets, function(elt, index, array) {
-    return elt['Identifier'] == matrixSet;
-  });
-  ol.DEBUG && console.assert(matrixSetObj,
-      'found matrixSet in Contents/TileMatrixSet');
-
-  var projection;
-  if ('projection' in config) {
-    projection = ol.proj.get(config['projection']);
-  } else {
-    projection = ol.proj.get(matrixSetObj['SupportedCRS'].replace(
-        /urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, '$1:$3'));
-  }
-
-  var wgs84BoundingBox = l['WGS84BoundingBox'];
-  var extent, wrapX;
-  if (wgs84BoundingBox !== undefined) {
-    var wgs84ProjectionExtent = ol.proj.get('EPSG:4326').getExtent();
-    wrapX = (wgs84BoundingBox[0] == wgs84ProjectionExtent[0] &&
-        wgs84BoundingBox[2] == wgs84ProjectionExtent[2]);
-    extent = ol.proj.transformExtent(
-        wgs84BoundingBox, 'EPSG:4326', projection);
-    var projectionExtent = projection.getExtent();
-    if (projectionExtent) {
-      // If possible, do a sanity check on the extent - it should never be
-      // bigger than the validity extent of the projection of a matrix set.
-      if (!ol.extent.containsExtent(projectionExtent, extent)) {
-        extent = undefined;
-      }
-    }
-  }
-
-  var tileGrid = ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet(
-      matrixSetObj, extent);
-
-  /** @type {!Array.<string>} */
-  var urls = [];
-  var requestEncoding = config['requestEncoding'];
-  requestEncoding = requestEncoding !== undefined ? requestEncoding : '';
-
-  ol.DEBUG && console.assert(
-      ol.array.includes(['REST', 'RESTful', 'KVP', ''], requestEncoding),
-      'requestEncoding (%s) is one of "REST", "RESTful", "KVP" or ""',
-      requestEncoding);
-
-  if ('OperationsMetadata' in wmtsCap && 'GetTile' in wmtsCap['OperationsMetadata']) {
-    var gets = wmtsCap['OperationsMetadata']['GetTile']['DCP']['HTTP']['Get'];
-    ol.DEBUG && console.assert(gets.length >= 1);
-
-    for (var i = 0, ii = gets.length; i < ii; ++i) {
-      var constraint = ol.array.find(gets[i]['Constraint'], function(element) {
-        return element['name'] == 'GetEncoding';
-      });
-      var encodings = constraint['AllowedValues']['Value'];
-      ol.DEBUG && console.assert(encodings.length >= 1);
-
-      if (requestEncoding === '') {
-        // requestEncoding not provided, use the first encoding from the list
-        requestEncoding = encodings[0];
-      }
-      if (requestEncoding === ol.source.WMTS.RequestEncoding.KVP) {
-        if (ol.array.includes(encodings, ol.source.WMTS.RequestEncoding.KVP)) {
-          urls.push(/** @type {string} */ (gets[i]['href']));
-        }
-      } else {
-        break;
-      }
-    }
-  }
-  if (urls.length === 0) {
-    requestEncoding = ol.source.WMTS.RequestEncoding.REST;
-    l['ResourceURL'].forEach(function(element) {
-      if (element['resourceType'] === 'tile') {
-        format = element['format'];
-        urls.push(/** @type {string} */ (element['template']));
-      }
-    });
-  }
-  ol.DEBUG && console.assert(urls.length > 0, 'At least one URL found');
-
-  return {
-    urls: urls,
-    layer: config['layer'],
-    matrixSet: matrixSet,
-    format: format,
-    projection: projection,
-    requestEncoding: requestEncoding,
-    tileGrid: tileGrid,
-    style: style,
-    dimensions: dimensions,
-    wrapX: wrapX
-  };
-
-};
-
-
-/**
- * Request encoding. One of 'KVP', 'REST'.
- * @enum {string}
- */
-ol.source.WMTS.RequestEncoding = {
-  KVP: 'KVP',  // see spec §8
-  REST: 'REST' // see spec §10
-};
-
-goog.provide('ol.source.Zoomify');
-
-goog.require('ol');
-goog.require('ol.ImageTile');
-goog.require('ol.Tile');
-goog.require('ol.asserts');
-goog.require('ol.dom');
-goog.require('ol.extent');
-goog.require('ol.source.TileImage');
-goog.require('ol.tilegrid.TileGrid');
-
-
-/**
- * @classdesc
- * Layer source for tile data in Zoomify format.
- *
- * @constructor
- * @extends {ol.source.TileImage}
- * @param {olx.source.ZoomifyOptions=} opt_options Options.
- * @api stable
- */
-ol.source.Zoomify = function(opt_options) {
-
-  var options = opt_options || {};
-
-  var size = options.size;
-  var tierSizeCalculation = options.tierSizeCalculation !== undefined ?
-      options.tierSizeCalculation :
-      ol.source.Zoomify.TierSizeCalculation.DEFAULT;
-
-  var imageWidth = size[0];
-  var imageHeight = size[1];
-  var tierSizeInTiles = [];
-  var tileSize = ol.DEFAULT_TILE_SIZE;
-
-  switch (tierSizeCalculation) {
-    case ol.source.Zoomify.TierSizeCalculation.DEFAULT:
-      while (imageWidth > tileSize || imageHeight > tileSize) {
-        tierSizeInTiles.push([
-          Math.ceil(imageWidth / tileSize),
-          Math.ceil(imageHeight / tileSize)
-        ]);
-        tileSize += tileSize;
-      }
-      break;
-    case ol.source.Zoomify.TierSizeCalculation.TRUNCATED:
-      var width = imageWidth;
-      var height = imageHeight;
-      while (width > tileSize || height > tileSize) {
-        tierSizeInTiles.push([
-          Math.ceil(width / tileSize),
-          Math.ceil(height / tileSize)
-        ]);
-        width >>= 1;
-        height >>= 1;
-      }
-      break;
-    default:
-      ol.asserts.assert(false, 53); // Unknown `tierSizeCalculation` configured
-      break;
-  }
-
-  tierSizeInTiles.push([1, 1]);
-  tierSizeInTiles.reverse();
-
-  var resolutions = [1];
-  var tileCountUpToTier = [0];
-  var i, ii;
-  for (i = 1, ii = tierSizeInTiles.length; i < ii; i++) {
-    resolutions.push(1 << i);
-    tileCountUpToTier.push(
-        tierSizeInTiles[i - 1][0] * tierSizeInTiles[i - 1][1] +
-        tileCountUpToTier[i - 1]
-    );
-  }
-  resolutions.reverse();
-
-  var extent = [0, -size[1], size[0], 0];
-  var tileGrid = new ol.tilegrid.TileGrid({
-    extent: extent,
-    origin: ol.extent.getTopLeft(extent),
-    resolutions: resolutions
-  });
-
-  var url = options.url;
-
-  /**
-   * @this {ol.source.TileImage}
-   * @param {ol.TileCoord} tileCoord Tile Coordinate.
-   * @param {number} pixelRatio Pixel ratio.
-   * @param {ol.proj.Projection} projection Projection.
-   * @return {string|undefined} Tile URL.
-   */
-  function tileUrlFunction(tileCoord, pixelRatio, projection) {
-    if (!tileCoord) {
-      return undefined;
-    } else {
-      var tileCoordZ = tileCoord[0];
-      var tileCoordX = tileCoord[1];
-      var tileCoordY = -tileCoord[2] - 1;
-      var tileIndex =
-          tileCoordX +
-          tileCoordY * tierSizeInTiles[tileCoordZ][0] +
-          tileCountUpToTier[tileCoordZ];
-      var tileGroup = (tileIndex / ol.DEFAULT_TILE_SIZE) | 0;
-      return url + 'TileGroup' + tileGroup + '/' +
-          tileCoordZ + '-' + tileCoordX + '-' + tileCoordY + '.jpg';
-    }
-  }
-
-  ol.source.TileImage.call(this, {
-    attributions: options.attributions,
-    cacheSize: options.cacheSize,
-    crossOrigin: options.crossOrigin,
-    logo: options.logo,
-    reprojectionErrorThreshold: options.reprojectionErrorThreshold,
-    tileClass: ol.source.Zoomify.Tile_,
-    tileGrid: tileGrid,
-    tileUrlFunction: tileUrlFunction
-  });
-
-};
-ol.inherits(ol.source.Zoomify, ol.source.TileImage);
-
-
-/**
- * @constructor
- * @extends {ol.ImageTile}
- * @param {ol.TileCoord} tileCoord Tile coordinate.
- * @param {ol.Tile.State} state State.
- * @param {string} src Image source URI.
- * @param {?string} crossOrigin Cross origin.
- * @param {ol.TileLoadFunctionType} tileLoadFunction Tile load function.
- * @private
- */
-ol.source.Zoomify.Tile_ = function(
-    tileCoord, state, src, crossOrigin, tileLoadFunction) {
-
-  ol.ImageTile.call(this, tileCoord, state, src, crossOrigin, tileLoadFunction);
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}
-   */
-  this.zoomifyImage_ = null;
-
-};
-ol.inherits(ol.source.Zoomify.Tile_, ol.ImageTile);
-
-
-/**
- * @inheritDoc
- */
-ol.source.Zoomify.Tile_.prototype.getImage = function() {
-  if (this.zoomifyImage_) {
-    return this.zoomifyImage_;
-  }
-  var tileSize = ol.DEFAULT_TILE_SIZE;
-  var image = ol.ImageTile.prototype.getImage.call(this);
-  if (this.state == ol.Tile.State.LOADED) {
-    if (image.width == tileSize && image.height == tileSize) {
-      this.zoomifyImage_ = image;
-      return image;
-    } else {
-      var context = ol.dom.createCanvasContext2D(tileSize, tileSize);
-      context.drawImage(image, 0, 0);
-      this.zoomifyImage_ = context.canvas;
-      return context.canvas;
-    }
-  } else {
-    return image;
-  }
-};
-
-
-/**
- * @enum {string}
- */
-ol.source.Zoomify.TierSizeCalculation = {
-  DEFAULT: 'default',
-  TRUNCATED: 'truncated'
-};
-
-goog.provide('ol.style.Atlas');
-
-goog.require('ol');
-goog.require('ol.dom');
-
-
-/**
- * This class facilitates the creation of image atlases.
- *
- * Images added to an atlas will be rendered onto a single
- * atlas canvas. The distribution of images on the canvas is
- * managed with the bin packing algorithm described in:
- * http://www.blackpawn.com/texts/lightmaps/
- *
- * @constructor
- * @struct
- * @param {number} size The size in pixels of the sprite image.
- * @param {number} space The space in pixels between images.
- *    Because texture coordinates are float values, the edges of
- *    images might not be completely correct (in a way that the
- *    edges overlap when being rendered). To avoid this we add a
- *    padding around each image.
- */
-ol.style.Atlas = function(size, space) {
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.space_ = space;
-
-  /**
-   * @private
-   * @type {Array.<ol.AtlasBlock>}
-   */
-  this.emptyBlocks_ = [{x: 0, y: 0, width: size, height: size}];
-
-  /**
-   * @private
-   * @type {Object.<string, ol.AtlasInfo>}
-   */
-  this.entries_ = {};
-
-  /**
-   * @private
-   * @type {CanvasRenderingContext2D}
-   */
-  this.context_ = ol.dom.createCanvasContext2D(size, size);
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = this.context_.canvas;
-};
-
-
-/**
- * @param {string} id The identifier of the entry to check.
- * @return {?ol.AtlasInfo} The atlas info.
- */
-ol.style.Atlas.prototype.get = function(id) {
-  return this.entries_[id] || null;
-};
-
-
-/**
- * @param {string} id The identifier of the entry to add.
- * @param {number} width The width.
- * @param {number} height The height.
- * @param {function(CanvasRenderingContext2D, number, number)} renderCallback
- *    Called to render the new image onto an atlas image.
- * @param {Object=} opt_this Value to use as `this` when executing
- *    `renderCallback`.
- * @return {?ol.AtlasInfo} The position and atlas image for the entry.
- */
-ol.style.Atlas.prototype.add = function(id, width, height, renderCallback, opt_this) {
-  var block, i, ii;
-  for (i = 0, ii = this.emptyBlocks_.length; i < ii; ++i) {
-    block = this.emptyBlocks_[i];
-    if (block.width >= width + this.space_ &&
-        block.height >= height + this.space_) {
-      // we found a block that is big enough for our entry
-      var entry = {
-        offsetX: block.x + this.space_,
-        offsetY: block.y + this.space_,
-        image: this.canvas_
-      };
-      this.entries_[id] = entry;
-
-      // render the image on the atlas image
-      renderCallback.call(opt_this, this.context_,
-          block.x + this.space_, block.y + this.space_);
-
-      // split the block after the insertion, either horizontally or vertically
-      this.split_(i, block, width + this.space_, height + this.space_);
-
-      return entry;
-    }
-  }
-
-  // there is no space for the new entry in this atlas
-  return null;
-};
-
-
-/**
- * @private
- * @param {number} index The index of the block.
- * @param {ol.AtlasBlock} block The block to split.
- * @param {number} width The width of the entry to insert.
- * @param {number} height The height of the entry to insert.
- */
-ol.style.Atlas.prototype.split_ = function(index, block, width, height) {
-  var deltaWidth = block.width - width;
-  var deltaHeight = block.height - height;
-
-  /** @type {ol.AtlasBlock} */
-  var newBlock1;
-  /** @type {ol.AtlasBlock} */
-  var newBlock2;
-
-  if (deltaWidth > deltaHeight) {
-    // split vertically
-    // block right of the inserted entry
-    newBlock1 = {
-      x: block.x + width,
-      y: block.y,
-      width: block.width - width,
-      height: block.height
-    };
-
-    // block below the inserted entry
-    newBlock2 = {
-      x: block.x,
-      y: block.y + height,
-      width: width,
-      height: block.height - height
-    };
-    this.updateBlocks_(index, newBlock1, newBlock2);
-  } else {
-    // split horizontally
-    // block right of the inserted entry
-    newBlock1 = {
-      x: block.x + width,
-      y: block.y,
-      width: block.width - width,
-      height: height
-    };
-
-    // block below the inserted entry
-    newBlock2 = {
-      x: block.x,
-      y: block.y + height,
-      width: block.width,
-      height: block.height - height
-    };
-    this.updateBlocks_(index, newBlock1, newBlock2);
-  }
-};
-
-
-/**
- * Remove the old block and insert new blocks at the same array position.
- * The new blocks are inserted at the same position, so that splitted
- * blocks (that are potentially smaller) are filled first.
- * @private
- * @param {number} index The index of the block to remove.
- * @param {ol.AtlasBlock} newBlock1 The 1st block to add.
- * @param {ol.AtlasBlock} newBlock2 The 2nd block to add.
- */
-ol.style.Atlas.prototype.updateBlocks_ = function(index, newBlock1, newBlock2) {
-  var args = [index, 1];
-  if (newBlock1.width > 0 && newBlock1.height > 0) {
-    args.push(newBlock1);
-  }
-  if (newBlock2.width > 0 && newBlock2.height > 0) {
-    args.push(newBlock2);
-  }
-  this.emptyBlocks_.splice.apply(this.emptyBlocks_, args);
-};
-
-goog.provide('ol.style.AtlasManager');
-
-goog.require('ol');
-goog.require('ol.style.Atlas');
-
-
-/**
- * Manages the creation of image atlases.
- *
- * Images added to this manager will be inserted into an atlas, which
- * will be used for rendering.
- * The `size` given in the constructor is the size for the first
- * atlas. After that, when new atlases are created, they will have
- * twice the size as the latest atlas (until `maxSize` is reached).
- *
- * If an application uses many images or very large images, it is recommended
- * to set a higher `size` value to avoid the creation of too many atlases.
- *
- * @constructor
- * @struct
- * @api
- * @param {olx.style.AtlasManagerOptions=} opt_options Options.
- */
-ol.style.AtlasManager = function(opt_options) {
-
-  var options = opt_options || {};
-
-  /**
-   * The size in pixels of the latest atlas image.
-   * @private
-   * @type {number}
-   */
-  this.currentSize_ = options.initialSize !== undefined ?
-      options.initialSize : ol.INITIAL_ATLAS_SIZE;
-
-  /**
-   * The maximum size in pixels of atlas images.
-   * @private
-   * @type {number}
-   */
-  this.maxSize_ = options.maxSize !== undefined ?
-      options.maxSize : ol.MAX_ATLAS_SIZE != -1 ?
-          ol.MAX_ATLAS_SIZE : ol.WEBGL_MAX_TEXTURE_SIZE !== undefined ?
-              ol.WEBGL_MAX_TEXTURE_SIZE : 2048;
-
-  /**
-   * The size in pixels between images.
-   * @private
-   * @type {number}
-   */
-  this.space_ = options.space !== undefined ? options.space : 1;
-
-  /**
-   * @private
-   * @type {Array.<ol.style.Atlas>}
-   */
-  this.atlases_ = [new ol.style.Atlas(this.currentSize_, this.space_)];
-
-  /**
-   * The size in pixels of the latest atlas image for hit-detection images.
-   * @private
-   * @type {number}
-   */
-  this.currentHitSize_ = this.currentSize_;
-
-  /**
-   * @private
-   * @type {Array.<ol.style.Atlas>}
-   */
-  this.hitAtlases_ = [new ol.style.Atlas(this.currentHitSize_, this.space_)];
-};
-
-
-/**
- * @param {string} id The identifier of the entry to check.
- * @return {?ol.AtlasManagerInfo} The position and atlas image for the
- *    entry, or `null` if the entry is not part of the atlas manager.
- */
-ol.style.AtlasManager.prototype.getInfo = function(id) {
-  /** @type {?ol.AtlasInfo} */
-  var info = this.getInfo_(this.atlases_, id);
-
-  if (!info) {
-    return null;
-  }
-  var hitInfo = /** @type {ol.AtlasInfo} */ (this.getInfo_(this.hitAtlases_, id));
-
-  return this.mergeInfos_(info, hitInfo);
-};
-
-
-/**
- * @private
- * @param {Array.<ol.style.Atlas>} atlases The atlases to search.
- * @param {string} id The identifier of the entry to check.
- * @return {?ol.AtlasInfo} The position and atlas image for the entry,
- *    or `null` if the entry is not part of the atlases.
- */
-ol.style.AtlasManager.prototype.getInfo_ = function(atlases, id) {
-  var atlas, info, i, ii;
-  for (i = 0, ii = atlases.length; i < ii; ++i) {
-    atlas = atlases[i];
-    info = atlas.get(id);
-    if (info) {
-      return info;
-    }
-  }
-  return null;
-};
-
-
-/**
- * @private
- * @param {ol.AtlasInfo} info The info for the real image.
- * @param {ol.AtlasInfo} hitInfo The info for the hit-detection
- *    image.
- * @return {?ol.AtlasManagerInfo} The position and atlas image for the
- *    entry, or `null` if the entry is not part of the atlases.
- */
-ol.style.AtlasManager.prototype.mergeInfos_ = function(info, hitInfo) {
-  ol.DEBUG && console.assert(info.offsetX === hitInfo.offsetX,
-      'in order to merge, offsetX of info and hitInfo must be equal');
-  ol.DEBUG && console.assert(info.offsetY === hitInfo.offsetY,
-      'in order to merge, offsetY of info and hitInfo must be equal');
-  return /** @type {ol.AtlasManagerInfo} */ ({
-    offsetX: info.offsetX,
-    offsetY: info.offsetY,
-    image: info.image,
-    hitImage: hitInfo.image
-  });
-};
-
-
-/**
- * Add an image to the atlas manager.
- *
- * If an entry for the given id already exists, the entry will
- * be overridden (but the space on the atlas graphic will not be freed).
- *
- * If `renderHitCallback` is provided, the image (or the hit-detection version
- * of the image) will be rendered into a separate hit-detection atlas image.
- *
- * @param {string} id The identifier of the entry to add.
- * @param {number} width The width.
- * @param {number} height The height.
- * @param {function(CanvasRenderingContext2D, number, number)} renderCallback
- *    Called to render the new image onto an atlas image.
- * @param {function(CanvasRenderingContext2D, number, number)=}
- *    opt_renderHitCallback Called to render a hit-detection image onto a hit
- *    detection atlas image.
- * @param {Object=} opt_this Value to use as `this` when executing
- *    `renderCallback` and `renderHitCallback`.
- * @return {?ol.AtlasManagerInfo}  The position and atlas image for the
- *    entry, or `null` if the image is too big.
- */
-ol.style.AtlasManager.prototype.add = function(id, width, height,
-        renderCallback, opt_renderHitCallback, opt_this) {
-  if (width + this.space_ > this.maxSize_ ||
-      height + this.space_ > this.maxSize_) {
-    return null;
-  }
-
-  /** @type {?ol.AtlasInfo} */
-  var info = this.add_(false,
-      id, width, height, renderCallback, opt_this);
-  if (!info) {
-    return null;
-  }
-
-  // even if no hit-detection entry is requested, we insert a fake entry into
-  // the hit-detection atlas, to make sure that the offset is the same for
-  // the original image and the hit-detection image.
-  var renderHitCallback = opt_renderHitCallback !== undefined ?
-      opt_renderHitCallback : ol.nullFunction;
-
-  var hitInfo = /** @type {ol.AtlasInfo} */ (this.add_(true,
-      id, width, height, renderHitCallback, opt_this));
-
-  return this.mergeInfos_(info, hitInfo);
-};
-
-
-/**
- * @private
- * @param {boolean} isHitAtlas If the hit-detection atlases are used.
- * @param {string} id The identifier of the entry to add.
- * @param {number} width The width.
- * @param {number} height The height.
- * @param {function(CanvasRenderingContext2D, number, number)} renderCallback
- *    Called to render the new image onto an atlas image.
- * @param {Object=} opt_this Value to use as `this` when executing
- *    `renderCallback` and `renderHitCallback`.
- * @return {?ol.AtlasInfo}  The position and atlas image for the entry,
- *    or `null` if the image is too big.
- */
-ol.style.AtlasManager.prototype.add_ = function(isHitAtlas, id, width, height,
-        renderCallback, opt_this) {
-  var atlases = (isHitAtlas) ? this.hitAtlases_ : this.atlases_;
-  var atlas, info, i, ii;
-  for (i = 0, ii = atlases.length; i < ii; ++i) {
-    atlas = atlases[i];
-    info = atlas.add(id, width, height, renderCallback, opt_this);
-    if (info) {
-      return info;
-    } else if (!info && i === ii - 1) {
-      // the entry could not be added to one of the existing atlases,
-      // create a new atlas that is twice as big and try to add to this one.
-      var size;
-      if (isHitAtlas) {
-        size = Math.min(this.currentHitSize_ * 2, this.maxSize_);
-        this.currentHitSize_ = size;
-      } else {
-        size = Math.min(this.currentSize_ * 2, this.maxSize_);
-        this.currentSize_ = size;
-      }
-      atlas = new ol.style.Atlas(size, this.space_);
-      atlases.push(atlas);
-      // run the loop another time
-      ++ii;
-    }
-  }
-  ol.DEBUG && console.assert(false, 'Failed to add to atlasmanager');
-  return null;
-};
-
-goog.provide('ol.style.RegularShape');
-
-goog.require('ol');
-goog.require('ol.colorlike');
-goog.require('ol.dom');
-goog.require('ol.has');
-goog.require('ol.Image');
-goog.require('ol.render.canvas');
-goog.require('ol.style.Image');
-
-
-/**
- * @classdesc
- * Set regular shape style for vector features. The resulting shape will be
- * a regular polygon when `radius` is provided, or a star when `radius1` and
- * `radius2` are provided.
- *
- * @constructor
- * @param {olx.style.RegularShapeOptions} options Options.
- * @extends {ol.style.Image}
- * @api
- */
-ol.style.RegularShape = function(options) {
-
-  ol.DEBUG && console.assert(
-      options.radius !== undefined || options.radius1 !== undefined,
-      'must provide either "radius" or "radius1"');
-
-  /**
-   * @private
-   * @type {Array.<string>}
-   */
-  this.checksums_ = null;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.canvas_ = null;
-
-  /**
-   * @private
-   * @type {HTMLCanvasElement}
-   */
-  this.hitDetectionCanvas_ = null;
-
-  /**
-   * @private
-   * @type {ol.style.Fill}
-   */
-  this.fill_ = options.fill !== undefined ? options.fill : null;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.origin_ = [0, 0];
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.points_ = options.points;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.radius_ = /** @type {number} */ (options.radius !== undefined ?
-      options.radius : options.radius1);
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.radius2_ =
-      options.radius2 !== undefined ? options.radius2 : this.radius_;
-
-  /**
-   * @private
-   * @type {number}
-   */
-  this.angle_ = options.angle !== undefined ? options.angle : 0;
-
-  /**
-   * @private
-   * @type {ol.style.Stroke}
-   */
-  this.stroke_ = options.stroke !== undefined ? options.stroke : null;
-
-  /**
-   * @private
-   * @type {Array.<number>}
-   */
-  this.anchor_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.size_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.imageSize_ = null;
-
-  /**
-   * @private
-   * @type {ol.Size}
-   */
-  this.hitDetectionImageSize_ = null;
-
-  /**
-   * @private
-   * @type {ol.style.AtlasManager|undefined}
-   */
-  this.atlasManager_ = options.atlasManager;
-
-  this.render_(this.atlasManager_);
-
-  /**
-   * @type {boolean}
-   */
-  var snapToPixel = options.snapToPixel !== undefined ?
-      options.snapToPixel : true;
-
-  /**
-   * @type {boolean}
-   */
-  var rotateWithView = options.rotateWithView !== undefined ?
-      options.rotateWithView : false;
-
-  ol.style.Image.call(this, {
-    opacity: 1,
-    rotateWithView: rotateWithView,
-    rotation: options.rotation !== undefined ? options.rotation : 0,
-    scale: 1,
-    snapToPixel: snapToPixel
-  });
-
-};
-ol.inherits(ol.style.RegularShape, ol.style.Image);
-
-
-/**
- * Clones the style. If an atlasmanger was provided to the original style it will be used in the cloned style, too.
- * @return {ol.style.RegularShape} The cloned style.
- * @api
- */
-ol.style.RegularShape.prototype.clone = function() {
-  var style = new ol.style.RegularShape({
-    fill: this.getFill() ? this.getFill().clone() : undefined,
-    points: this.getRadius2() !== this.getRadius() ? this.getPoints() / 2 : this.getPoints(),
-    radius: this.getRadius(),
-    radius2: this.getRadius2(),
-    angle: this.getAngle(),
-    snapToPixel: this.getSnapToPixel(),
-    stroke: this.getStroke() ?  this.getStroke().clone() : undefined,
-    rotation: this.getRotation(),
-    rotateWithView: this.getRotateWithView(),
-    atlasManager: this.atlasManager_
-  });
-  style.setOpacity(this.getOpacity());
-  style.setScale(this.getScale());
-  return style;
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.style.RegularShape.prototype.getAnchor = function() {
-  return this.anchor_;
-};
-
-
-/**
- * Get the angle used in generating the shape.
- * @return {number} Shape's rotation in radians.
- * @api
- */
-ol.style.RegularShape.prototype.getAngle = function() {
-  return this.angle_;
-};
-
-
-/**
- * Get the fill style for the shape.
- * @return {ol.style.Fill} Fill style.
- * @api
- */
-ol.style.RegularShape.prototype.getFill = function() {
-  return this.fill_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.RegularShape.prototype.getHitDetectionImage = function(pixelRatio) {
-  return this.hitDetectionCanvas_;
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.style.RegularShape.prototype.getImage = function(pixelRatio) {
-  return this.canvas_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.RegularShape.prototype.getImageSize = function() {
-  return this.imageSize_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.RegularShape.prototype.getHitDetectionImageSize = function() {
-  return this.hitDetectionImageSize_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.RegularShape.prototype.getImageState = function() {
-  return ol.Image.State.LOADED;
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.style.RegularShape.prototype.getOrigin = function() {
-  return this.origin_;
-};
-
-
-/**
- * Get the number of points for generating the shape.
- * @return {number} Number of points for stars and regular polygons.
- * @api
- */
-ol.style.RegularShape.prototype.getPoints = function() {
-  return this.points_;
-};
-
-
-/**
- * Get the (primary) radius for the shape.
- * @return {number} Radius.
- * @api
- */
-ol.style.RegularShape.prototype.getRadius = function() {
-  return this.radius_;
-};
-
-
-/**
- * Get the secondary radius for the shape.
- * @return {number} Radius2.
- * @api
- */
-ol.style.RegularShape.prototype.getRadius2 = function() {
-  return this.radius2_;
-};
-
-
-/**
- * @inheritDoc
- * @api
- */
-ol.style.RegularShape.prototype.getSize = function() {
-  return this.size_;
-};
-
-
-/**
- * Get the stroke style for the shape.
- * @return {ol.style.Stroke} Stroke style.
- * @api
- */
-ol.style.RegularShape.prototype.getStroke = function() {
-  return this.stroke_;
-};
-
-
-/**
- * @inheritDoc
- */
-ol.style.RegularShape.prototype.listenImageChange = ol.nullFunction;
-
-
-/**
- * @inheritDoc
- */
-ol.style.RegularShape.prototype.load = ol.nullFunction;
-
-
-/**
- * @inheritDoc
- */
-ol.style.RegularShape.prototype.unlistenImageChange = ol.nullFunction;
-
-
-/**
- * @private
- * @param {ol.style.AtlasManager|undefined} atlasManager An atlas manager.
- */
-ol.style.RegularShape.prototype.render_ = function(atlasManager) {
-  var imageSize;
-  var lineCap = '';
-  var lineJoin = '';
-  var miterLimit = 0;
-  var lineDash = null;
-  var strokeStyle;
-  var strokeWidth = 0;
-
-  if (this.stroke_) {
-    strokeStyle = ol.colorlike.asColorLike(this.stroke_.getColor());
-    strokeWidth = this.stroke_.getWidth();
-    if (strokeWidth === undefined) {
-      strokeWidth = ol.render.canvas.defaultLineWidth;
-    }
-    lineDash = this.stroke_.getLineDash();
-    if (!ol.has.CANVAS_LINE_DASH) {
-      lineDash = null;
-    }
-    lineJoin = this.stroke_.getLineJoin();
-    if (lineJoin === undefined) {
-      lineJoin = ol.render.canvas.defaultLineJoin;
-    }
-    lineCap = this.stroke_.getLineCap();
-    if (lineCap === undefined) {
-      lineCap = ol.render.canvas.defaultLineCap;
-    }
-    miterLimit = this.stroke_.getMiterLimit();
-    if (miterLimit === undefined) {
-      miterLimit = ol.render.canvas.defaultMiterLimit;
-    }
-  }
-
-  var size = 2 * (this.radius_ + strokeWidth) + 1;
-
-  /** @type {ol.RegularShapeRenderOptions} */
-  var renderOptions = {
-    strokeStyle: strokeStyle,
-    strokeWidth: strokeWidth,
-    size: size,
-    lineCap: lineCap,
-    lineDash: lineDash,
-    lineJoin: lineJoin,
-    miterLimit: miterLimit
-  };
-
-  if (atlasManager === undefined) {
-    // no atlas manager is used, create a new canvas
-    var context = ol.dom.createCanvasContext2D(size, size);
-    this.canvas_ = context.canvas;
-
-    // canvas.width and height are rounded to the closest integer
-    size = this.canvas_.width;
-    imageSize = size;
-
-    this.draw_(renderOptions, context, 0, 0);
-
-    this.createHitDetectionCanvas_(renderOptions);
-  } else {
-    // an atlas manager is used, add the symbol to an atlas
-    size = Math.round(size);
-
-    var hasCustomHitDetectionImage = !this.fill_;
-    var renderHitDetectionCallback;
-    if (hasCustomHitDetectionImage) {
-      // render the hit-detection image into a separate atlas image
-      renderHitDetectionCallback =
-          this.drawHitDetectionCanvas_.bind(this, renderOptions);
-    }
-
-    var id = this.getChecksum();
-    var info = atlasManager.add(
-        id, size, size, this.draw_.bind(this, renderOptions),
-        renderHitDetectionCallback);
-    ol.DEBUG && console.assert(info, 'shape size is too large');
-
-    this.canvas_ = info.image;
-    this.origin_ = [info.offsetX, info.offsetY];
-    imageSize = info.image.width;
-
-    if (hasCustomHitDetectionImage) {
-      this.hitDetectionCanvas_ = info.hitImage;
-      this.hitDetectionImageSize_ =
-          [info.hitImage.width, info.hitImage.height];
-    } else {
-      this.hitDetectionCanvas_ = this.canvas_;
-      this.hitDetectionImageSize_ = [imageSize, imageSize];
-    }
-  }
-
-  this.anchor_ = [size / 2, size / 2];
-  this.size_ = [size, size];
-  this.imageSize_ = [imageSize, imageSize];
-};
-
-
-/**
- * @private
- * @param {ol.RegularShapeRenderOptions} renderOptions Render options.
- * @param {CanvasRenderingContext2D} context The rendering context.
- * @param {number} x The origin for the symbol (x).
- * @param {number} y The origin for the symbol (y).
- */
-ol.style.RegularShape.prototype.draw_ = function(renderOptions, context, x, y) {
-  var i, angle0, radiusC;
-  // reset transform
-  context.setTransform(1, 0, 0, 1, 0, 0);
-
-  // then move to (x, y)
-  context.translate(x, y);
-
-  context.beginPath();
-  if (this.radius2_ !== this.radius_) {
-    this.points_ = 2 * this.points_;
-  }
-  for (i = 0; i <= this.points_; i++) {
-    angle0 = i * 2 * Math.PI / this.points_ - Math.PI / 2 + this.angle_;
-    radiusC = i % 2 === 0 ? this.radius_ : this.radius2_;
-    context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0),
-                   renderOptions.size / 2 + radiusC * Math.sin(angle0));
-  }
-
-  if (this.fill_) {
-    context.fillStyle = ol.colorlike.asColorLike(this.fill_.getColor());
-    context.fill();
-  }
-  if (this.stroke_) {
-    context.strokeStyle = renderOptions.strokeStyle;
-    context.lineWidth = renderOptions.strokeWidth;
-    if (renderOptions.lineDash) {
-      context.setLineDash(renderOptions.lineDash);
-    }
-    context.lineCap = renderOptions.lineCap;
-    context.lineJoin = renderOptions.lineJoin;
-    context.miterLimit = renderOptions.miterLimit;
-    context.stroke();
-  }
-  context.closePath();
-};
-
-
-/**
- * @private
- * @param {ol.RegularShapeRenderOptions} renderOptions Render options.
- */
-ol.style.RegularShape.prototype.createHitDetectionCanvas_ = function(renderOptions) {
-  this.hitDetectionImageSize_ = [renderOptions.size, renderOptions.size];
-  if (this.fill_) {
-    this.hitDetectionCanvas_ = this.canvas_;
-    return;
-  }
-
-  // if no fill style is set, create an extra hit-detection image with a
-  // default fill style
-  var context = ol.dom.createCanvasContext2D(renderOptions.size, renderOptions.size);
-  this.hitDetectionCanvas_ = context.canvas;
-
-  this.drawHitDetectionCanvas_(renderOptions, context, 0, 0);
-};
-
-
-/**
- * @private
- * @param {ol.RegularShapeRenderOptions} renderOptions Render options.
- * @param {CanvasRenderingContext2D} context The context.
- * @param {number} x The origin for the symbol (x).
- * @param {number} y The origin for the symbol (y).
- */
-ol.style.RegularShape.prototype.drawHitDetectionCanvas_ = function(renderOptions, context, x, y) {
-  // reset transform
-  context.setTransform(1, 0, 0, 1, 0, 0);
-
-  // then move to (x, y)
-  context.translate(x, y);
-
-  context.beginPath();
-  if (this.radius2_ !== this.radius_) {
-    this.points_ = 2 * this.points_;
-  }
-  var i, radiusC, angle0;
-  for (i = 0; i <= this.points_; i++) {
-    angle0 = i * 2 * Math.PI / this.points_ - Math.PI / 2 + this.angle_;
-    radiusC = i % 2 === 0 ? this.radius_ : this.radius2_;
-    context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0),
-                   renderOptions.size / 2 + radiusC * Math.sin(angle0));
-  }
-
-  context.fillStyle = ol.render.canvas.defaultFillStyle;
-  context.fill();
-  if (this.stroke_) {
-    context.strokeStyle = renderOptions.strokeStyle;
-    context.lineWidth = renderOptions.strokeWidth;
-    if (renderOptions.lineDash) {
-      context.setLineDash(renderOptions.lineDash);
-    }
-    context.stroke();
-  }
-  context.closePath();
-};
-
-
-/**
- * @return {string} The checksum.
- */
-ol.style.RegularShape.prototype.getChecksum = function() {
-  var strokeChecksum = this.stroke_ ?
-      this.stroke_.getChecksum() : '-';
-  var fillChecksum = this.fill_ ?
-      this.fill_.getChecksum() : '-';
-
-  var recalculate = !this.checksums_ ||
-      (strokeChecksum != this.checksums_[1] ||
-      fillChecksum != this.checksums_[2] ||
-      this.radius_ != this.checksums_[3] ||
-      this.radius2_ != this.checksums_[4] ||
-      this.angle_ != this.checksums_[5] ||
-      this.points_ != this.checksums_[6]);
-
-  if (recalculate) {
-    var checksum = 'r' + strokeChecksum + fillChecksum +
-        (this.radius_ !== undefined ? this.radius_.toString() : '-') +
-        (this.radius2_ !== undefined ? this.radius2_.toString() : '-') +
-        (this.angle_ !== undefined ? this.angle_.toString() : '-') +
-        (this.points_ !== undefined ? this.points_.toString() : '-');
-    this.checksums_ = [checksum, strokeChecksum, fillChecksum,
-      this.radius_, this.radius2_, this.angle_, this.points_];
-  }
-
-  return this.checksums_[0];
-};
-
-// Copyright 2009 The Closure Library Authors.
-// All Rights Reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS-IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-// This file has been auto-generated by GenJsDeps, please do not edit.
-
-goog.addDependency(
-    'demos/editor/equationeditor.js', ['goog.demos.editor.EquationEditor'],
-    ['goog.ui.equation.EquationEditorDialog']);
-goog.addDependency(
-    'demos/editor/helloworld.js', ['goog.demos.editor.HelloWorld'],
-    ['goog.dom', 'goog.dom.TagName', 'goog.editor.Plugin']);
-goog.addDependency(
-    'demos/editor/helloworlddialog.js',
-    [
-      'goog.demos.editor.HelloWorldDialog',
-      'goog.demos.editor.HelloWorldDialog.OkEvent'
-    ],
-    [
-      'goog.dom.TagName', 'goog.events.Event', 'goog.string',
-      'goog.ui.editor.AbstractDialog', 'goog.ui.editor.AbstractDialog.Builder',
-      'goog.ui.editor.AbstractDialog.EventType'
-    ]);
-goog.addDependency(
-    'demos/editor/helloworlddialogplugin.js',
-    [
-      'goog.demos.editor.HelloWorldDialogPlugin',
-      'goog.demos.editor.HelloWorldDialogPlugin.Command'
-    ],
-    [
-      'goog.demos.editor.HelloWorldDialog', 'goog.dom.TagName',
-      'goog.editor.plugins.AbstractDialogPlugin', 'goog.editor.range',
-      'goog.functions', 'goog.ui.editor.AbstractDialog.EventType'
-    ]);
-
-/**
- * @fileoverview Custom exports file.
- * @suppress {checkVars,extraRequire}
- */
-
-goog.require('ol');
-goog.require('ol.AssertionError');
-goog.require('ol.Attribution');
-goog.require('ol.Collection');
-goog.require('ol.DeviceOrientation');
-goog.require('ol.Feature');
-goog.require('ol.Geolocation');
-goog.require('ol.Graticule');
-goog.require('ol.Image');
-goog.require('ol.ImageTile');
-goog.require('ol.Kinetic');
-goog.require('ol.Map');
-goog.require('ol.MapBrowserEvent');
-goog.require('ol.MapBrowserEvent.EventType');
-goog.require('ol.MapBrowserEventHandler');
-goog.require('ol.MapBrowserPointerEvent');
-goog.require('ol.MapEvent');
-goog.require('ol.Object');
-goog.require('ol.ObjectEvent');
-goog.require('ol.ObjectEventType');
-goog.require('ol.Observable');
-goog.require('ol.Overlay');
-goog.require('ol.RasterOperationType');
-goog.require('ol.Sphere');
-goog.require('ol.Tile');
-goog.require('ol.VectorTile');
-goog.require('ol.View');
-goog.require('ol.animation');
-goog.require('ol.color');
-goog.require('ol.colorlike');
-goog.require('ol.control');
-goog.require('ol.control.Attribution');
-goog.require('ol.control.Control');
-goog.require('ol.control.FullScreen');
-goog.require('ol.control.MousePosition');
-goog.require('ol.control.OverviewMap');
-goog.require('ol.control.Rotate');
-goog.require('ol.control.ScaleLine');
-goog.require('ol.control.Zoom');
-goog.require('ol.control.ZoomSlider');
-goog.require('ol.control.ZoomToExtent');
-goog.require('ol.coordinate');
-goog.require('ol.easing');
-goog.require('ol.events.Event');
-goog.require('ol.events.condition');
-goog.require('ol.extent');
-goog.require('ol.extent.Corner');
-goog.require('ol.extent.Relationship');
-goog.require('ol.featureloader');
-goog.require('ol.format.EsriJSON');
-goog.require('ol.format.Feature');
-goog.require('ol.format.GML');
-goog.require('ol.format.GML2');
-goog.require('ol.format.GML3');
-goog.require('ol.format.GMLBase');
-goog.require('ol.format.GPX');
-goog.require('ol.format.GeoJSON');
-goog.require('ol.format.IGC');
-goog.require('ol.format.KML');
-goog.require('ol.format.MVT');
-goog.require('ol.format.OSMXML');
-goog.require('ol.format.Polyline');
-goog.require('ol.format.TopoJSON');
-goog.require('ol.format.WFS');
-goog.require('ol.format.WKT');
-goog.require('ol.format.WMSCapabilities');
-goog.require('ol.format.WMSGetFeatureInfo');
-goog.require('ol.format.WMTSCapabilities');
-goog.require('ol.format.filter');
-goog.require('ol.format.filter.And');
-goog.require('ol.format.filter.Bbox');
-goog.require('ol.format.filter.Comparison');
-goog.require('ol.format.filter.ComparisonBinary');
-goog.require('ol.format.filter.EqualTo');
-goog.require('ol.format.filter.Filter');
-goog.require('ol.format.filter.GreaterThan');
-goog.require('ol.format.filter.GreaterThanOrEqualTo');
-goog.require('ol.format.filter.Intersects');
-goog.require('ol.format.filter.IsBetween');
-goog.require('ol.format.filter.IsLike');
-goog.require('ol.format.filter.IsNull');
-goog.require('ol.format.filter.LessThan');
-goog.require('ol.format.filter.LessThanOrEqualTo');
-goog.require('ol.format.filter.Not');
-goog.require('ol.format.filter.NotEqualTo');
-goog.require('ol.format.filter.Or');
-goog.require('ol.format.filter.Spatial');
-goog.require('ol.format.filter.Within');
-goog.require('ol.geom.Circle');
-goog.require('ol.geom.Geometry');
-goog.require('ol.geom.GeometryCollection');
-goog.require('ol.geom.GeometryLayout');
-goog.require('ol.geom.GeometryType');
-goog.require('ol.geom.LineString');
-goog.require('ol.geom.LinearRing');
-goog.require('ol.geom.MultiLineString');
-goog.require('ol.geom.MultiPoint');
-goog.require('ol.geom.MultiPolygon');
-goog.require('ol.geom.Point');
-goog.require('ol.geom.Polygon');
-goog.require('ol.geom.SimpleGeometry');
-goog.require('ol.has');
-goog.require('ol.interaction');
-goog.require('ol.interaction.DoubleClickZoom');
-goog.require('ol.interaction.DragAndDrop');
-goog.require('ol.interaction.DragBox');
-goog.require('ol.interaction.DragPan');
-goog.require('ol.interaction.DragRotate');
-goog.require('ol.interaction.DragRotateAndZoom');
-goog.require('ol.interaction.DragZoom');
-goog.require('ol.interaction.Draw');
-goog.require('ol.interaction.Extent');
-goog.require('ol.interaction.Interaction');
-goog.require('ol.interaction.KeyboardPan');
-goog.require('ol.interaction.KeyboardZoom');
-goog.require('ol.interaction.Modify');
-goog.require('ol.interaction.MouseWheelZoom');
-goog.require('ol.interaction.PinchRotate');
-goog.require('ol.interaction.PinchZoom');
-goog.require('ol.interaction.Pointer');
-goog.require('ol.interaction.Select');
-goog.require('ol.interaction.Snap');
-goog.require('ol.interaction.Translate');
-goog.require('ol.layer.Base');
-goog.require('ol.layer.Group');
-goog.require('ol.layer.Heatmap');
-goog.require('ol.layer.Image');
-goog.require('ol.layer.Layer');
-goog.require('ol.layer.LayerProperty');
-goog.require('ol.layer.Tile');
-goog.require('ol.layer.Vector');
-goog.require('ol.layer.VectorTile');
-goog.require('ol.loadingstrategy');
-goog.require('ol.proj');
-goog.require('ol.proj.METERS_PER_UNIT');
-goog.require('ol.proj.Projection');
-goog.require('ol.proj.Units');
-goog.require('ol.proj.common');
-goog.require('ol.render');
-goog.require('ol.render.Event');
-goog.require('ol.render.Feature');
-goog.require('ol.render.VectorContext');
-goog.require('ol.render.canvas.Immediate');
-goog.require('ol.render.webgl.Immediate');
-goog.require('ol.size');
-goog.require('ol.source.BingMaps');
-goog.require('ol.source.CartoDB');
-goog.require('ol.source.Cluster');
-goog.require('ol.source.Image');
-goog.require('ol.source.ImageArcGISRest');
-goog.require('ol.source.ImageCanvas');
-goog.require('ol.source.ImageMapGuide');
-goog.require('ol.source.ImageStatic');
-goog.require('ol.source.ImageVector');
-goog.require('ol.source.ImageWMS');
-goog.require('ol.source.OSM');
-goog.require('ol.source.Raster');
-goog.require('ol.source.Source');
-goog.require('ol.source.Stamen');
-goog.require('ol.source.Tile');
-goog.require('ol.source.TileArcGISRest');
-goog.require('ol.source.TileDebug');
-goog.require('ol.source.TileImage');
-goog.require('ol.source.TileJSON');
-goog.require('ol.source.TileUTFGrid');
-goog.require('ol.source.TileWMS');
-goog.require('ol.source.UrlTile');
-goog.require('ol.source.Vector');
-goog.require('ol.source.VectorTile');
-goog.require('ol.source.WMTS');
-goog.require('ol.source.XYZ');
-goog.require('ol.source.Zoomify');
-goog.require('ol.style.AtlasManager');
-goog.require('ol.style.Circle');
-goog.require('ol.style.Fill');
-goog.require('ol.style.Icon');
-goog.require('ol.style.Image');
-goog.require('ol.style.RegularShape');
-goog.require('ol.style.Stroke');
-goog.require('ol.style.Style');
-goog.require('ol.style.Text');
-goog.require('ol.tilegrid');
-goog.require('ol.tilegrid.TileGrid');
-goog.require('ol.tilegrid.WMTS');
-goog.require('ol.webgl.Context');
-goog.require('ol.xml');
-
-
-goog.exportSymbol(
-    'ol.animation.bounce',
-    ol.animation.bounce,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.animation.pan',
-    ol.animation.pan,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.animation.rotate',
-    ol.animation.rotate,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.animation.zoom',
-    ol.animation.zoom,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.AssertionError.prototype,
-    'code',
-    ol.AssertionError.prototype.code);
-
-goog.exportSymbol(
-    'ol.Attribution',
-    ol.Attribution,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Attribution.prototype,
-    'getHTML',
-    ol.Attribution.prototype.getHTML);
-
-goog.exportSymbol(
-    'ol.Collection',
-    ol.Collection,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'clear',
-    ol.Collection.prototype.clear);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'extend',
-    ol.Collection.prototype.extend);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'forEach',
-    ol.Collection.prototype.forEach);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'getArray',
-    ol.Collection.prototype.getArray);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'item',
-    ol.Collection.prototype.item);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'getLength',
-    ol.Collection.prototype.getLength);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'insertAt',
-    ol.Collection.prototype.insertAt);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'pop',
-    ol.Collection.prototype.pop);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'push',
-    ol.Collection.prototype.push);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'remove',
-    ol.Collection.prototype.remove);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'removeAt',
-    ol.Collection.prototype.removeAt);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'setAt',
-    ol.Collection.prototype.setAt);
-
-goog.exportProperty(
-    ol.Collection.Event.prototype,
-    'element',
-    ol.Collection.Event.prototype.element);
-
-goog.exportSymbol(
-    'ol.color.asArray',
-    ol.color.asArray,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.color.asString',
-    ol.color.asString,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.colorlike.asColorLike',
-    ol.colorlike.asColorLike,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.coordinate.add',
-    ol.coordinate.add,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.coordinate.createStringXY',
-    ol.coordinate.createStringXY,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.coordinate.format',
-    ol.coordinate.format,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.coordinate.rotate',
-    ol.coordinate.rotate,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.coordinate.toStringHDMS',
-    ol.coordinate.toStringHDMS,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.coordinate.toStringXY',
-    ol.coordinate.toStringXY,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.DeviceOrientation',
-    ol.DeviceOrientation,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'getAlpha',
-    ol.DeviceOrientation.prototype.getAlpha);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'getBeta',
-    ol.DeviceOrientation.prototype.getBeta);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'getGamma',
-    ol.DeviceOrientation.prototype.getGamma);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'getHeading',
-    ol.DeviceOrientation.prototype.getHeading);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'getTracking',
-    ol.DeviceOrientation.prototype.getTracking);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'setTracking',
-    ol.DeviceOrientation.prototype.setTracking);
-
-goog.exportSymbol(
-    'ol.easing.easeIn',
-    ol.easing.easeIn,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.easing.easeOut',
-    ol.easing.easeOut,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.easing.inAndOut',
-    ol.easing.inAndOut,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.easing.linear',
-    ol.easing.linear,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.easing.upAndDown',
-    ol.easing.upAndDown,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.boundingExtent',
-    ol.extent.boundingExtent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.buffer',
-    ol.extent.buffer,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.containsCoordinate',
-    ol.extent.containsCoordinate,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.containsExtent',
-    ol.extent.containsExtent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.containsXY',
-    ol.extent.containsXY,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.createEmpty',
-    ol.extent.createEmpty,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.equals',
-    ol.extent.equals,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.extend',
-    ol.extent.extend,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getBottomLeft',
-    ol.extent.getBottomLeft,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getBottomRight',
-    ol.extent.getBottomRight,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getCenter',
-    ol.extent.getCenter,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getHeight',
-    ol.extent.getHeight,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getIntersection',
-    ol.extent.getIntersection,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getSize',
-    ol.extent.getSize,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getTopLeft',
-    ol.extent.getTopLeft,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getTopRight',
-    ol.extent.getTopRight,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.getWidth',
-    ol.extent.getWidth,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.intersects',
-    ol.extent.intersects,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.isEmpty',
-    ol.extent.isEmpty,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.extent.applyTransform',
-    ol.extent.applyTransform,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.Feature',
-    ol.Feature,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'clone',
-    ol.Feature.prototype.clone);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'getGeometry',
-    ol.Feature.prototype.getGeometry);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'getId',
-    ol.Feature.prototype.getId);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'getGeometryName',
-    ol.Feature.prototype.getGeometryName);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'getStyle',
-    ol.Feature.prototype.getStyle);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'getStyleFunction',
-    ol.Feature.prototype.getStyleFunction);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'setGeometry',
-    ol.Feature.prototype.setGeometry);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'setStyle',
-    ol.Feature.prototype.setStyle);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'setId',
-    ol.Feature.prototype.setId);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'setGeometryName',
-    ol.Feature.prototype.setGeometryName);
-
-goog.exportSymbol(
-    'ol.featureloader.tile',
-    ol.featureloader.tile,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.featureloader.xhr',
-    ol.featureloader.xhr,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.Geolocation',
-    ol.Geolocation,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getAccuracy',
-    ol.Geolocation.prototype.getAccuracy);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getAccuracyGeometry',
-    ol.Geolocation.prototype.getAccuracyGeometry);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getAltitude',
-    ol.Geolocation.prototype.getAltitude);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getAltitudeAccuracy',
-    ol.Geolocation.prototype.getAltitudeAccuracy);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getHeading',
-    ol.Geolocation.prototype.getHeading);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getPosition',
-    ol.Geolocation.prototype.getPosition);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getProjection',
-    ol.Geolocation.prototype.getProjection);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getSpeed',
-    ol.Geolocation.prototype.getSpeed);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getTracking',
-    ol.Geolocation.prototype.getTracking);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getTrackingOptions',
-    ol.Geolocation.prototype.getTrackingOptions);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'setProjection',
-    ol.Geolocation.prototype.setProjection);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'setTracking',
-    ol.Geolocation.prototype.setTracking);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'setTrackingOptions',
-    ol.Geolocation.prototype.setTrackingOptions);
-
-goog.exportSymbol(
-    'ol.Graticule',
-    ol.Graticule,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Graticule.prototype,
-    'getMap',
-    ol.Graticule.prototype.getMap);
-
-goog.exportProperty(
-    ol.Graticule.prototype,
-    'getMeridians',
-    ol.Graticule.prototype.getMeridians);
-
-goog.exportProperty(
-    ol.Graticule.prototype,
-    'getParallels',
-    ol.Graticule.prototype.getParallels);
-
-goog.exportProperty(
-    ol.Graticule.prototype,
-    'setMap',
-    ol.Graticule.prototype.setMap);
-
-goog.exportSymbol(
-    'ol.has.DEVICE_PIXEL_RATIO',
-    ol.has.DEVICE_PIXEL_RATIO,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.has.CANVAS',
-    ol.has.CANVAS,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.has.DEVICE_ORIENTATION',
-    ol.has.DEVICE_ORIENTATION,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.has.GEOLOCATION',
-    ol.has.GEOLOCATION,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.has.TOUCH',
-    ol.has.TOUCH,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.has.WEBGL',
-    ol.has.WEBGL,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Image.prototype,
-    'getImage',
-    ol.Image.prototype.getImage);
-
-goog.exportProperty(
-    ol.Image.prototype,
-    'load',
-    ol.Image.prototype.load);
-
-goog.exportProperty(
-    ol.ImageTile.prototype,
-    'getImage',
-    ol.ImageTile.prototype.getImage);
-
-goog.exportProperty(
-    ol.ImageTile.prototype,
-    'load',
-    ol.ImageTile.prototype.load);
-
-goog.exportSymbol(
-    'ol.inherits',
-    ol.inherits,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.Kinetic',
-    ol.Kinetic,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.loadingstrategy.all',
-    ol.loadingstrategy.all,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.loadingstrategy.bbox',
-    ol.loadingstrategy.bbox,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.loadingstrategy.tile',
-    ol.loadingstrategy.tile,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.Map',
-    ol.Map,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'addControl',
-    ol.Map.prototype.addControl);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'addInteraction',
-    ol.Map.prototype.addInteraction);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'addLayer',
-    ol.Map.prototype.addLayer);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'addOverlay',
-    ol.Map.prototype.addOverlay);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'beforeRender',
-    ol.Map.prototype.beforeRender);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'forEachFeatureAtPixel',
-    ol.Map.prototype.forEachFeatureAtPixel);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'forEachLayerAtPixel',
-    ol.Map.prototype.forEachLayerAtPixel);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'hasFeatureAtPixel',
-    ol.Map.prototype.hasFeatureAtPixel);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getEventCoordinate',
-    ol.Map.prototype.getEventCoordinate);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getEventPixel',
-    ol.Map.prototype.getEventPixel);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getTarget',
-    ol.Map.prototype.getTarget);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getTargetElement',
-    ol.Map.prototype.getTargetElement);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getCoordinateFromPixel',
-    ol.Map.prototype.getCoordinateFromPixel);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getControls',
-    ol.Map.prototype.getControls);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getOverlays',
-    ol.Map.prototype.getOverlays);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getOverlayById',
-    ol.Map.prototype.getOverlayById);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getInteractions',
-    ol.Map.prototype.getInteractions);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getLayerGroup',
-    ol.Map.prototype.getLayerGroup);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getLayers',
-    ol.Map.prototype.getLayers);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getPixelFromCoordinate',
-    ol.Map.prototype.getPixelFromCoordinate);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getSize',
-    ol.Map.prototype.getSize);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getView',
-    ol.Map.prototype.getView);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getViewport',
-    ol.Map.prototype.getViewport);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'renderSync',
-    ol.Map.prototype.renderSync);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'render',
-    ol.Map.prototype.render);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'removeControl',
-    ol.Map.prototype.removeControl);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'removeInteraction',
-    ol.Map.prototype.removeInteraction);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'removeLayer',
-    ol.Map.prototype.removeLayer);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'removeOverlay',
-    ol.Map.prototype.removeOverlay);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'setLayerGroup',
-    ol.Map.prototype.setLayerGroup);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'setSize',
-    ol.Map.prototype.setSize);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'setTarget',
-    ol.Map.prototype.setTarget);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'setView',
-    ol.Map.prototype.setView);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'updateSize',
-    ol.Map.prototype.updateSize);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'originalEvent',
-    ol.MapBrowserEvent.prototype.originalEvent);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'pixel',
-    ol.MapBrowserEvent.prototype.pixel);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'coordinate',
-    ol.MapBrowserEvent.prototype.coordinate);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'dragging',
-    ol.MapBrowserEvent.prototype.dragging);
-
-goog.exportProperty(
-    ol.MapEvent.prototype,
-    'map',
-    ol.MapEvent.prototype.map);
-
-goog.exportProperty(
-    ol.MapEvent.prototype,
-    'frameState',
-    ol.MapEvent.prototype.frameState);
-
-goog.exportProperty(
-    ol.ObjectEvent.prototype,
-    'key',
-    ol.ObjectEvent.prototype.key);
-
-goog.exportProperty(
-    ol.ObjectEvent.prototype,
-    'oldValue',
-    ol.ObjectEvent.prototype.oldValue);
-
-goog.exportSymbol(
-    'ol.Object',
-    ol.Object,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'get',
-    ol.Object.prototype.get);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'getKeys',
-    ol.Object.prototype.getKeys);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'getProperties',
-    ol.Object.prototype.getProperties);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'set',
-    ol.Object.prototype.set);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'setProperties',
-    ol.Object.prototype.setProperties);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'unset',
-    ol.Object.prototype.unset);
-
-goog.exportSymbol(
-    'ol.Observable',
-    ol.Observable,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.Observable.unByKey',
-    ol.Observable.unByKey,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Observable.prototype,
-    'changed',
-    ol.Observable.prototype.changed);
-
-goog.exportProperty(
-    ol.Observable.prototype,
-    'dispatchEvent',
-    ol.Observable.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.Observable.prototype,
-    'getRevision',
-    ol.Observable.prototype.getRevision);
-
-goog.exportProperty(
-    ol.Observable.prototype,
-    'on',
-    ol.Observable.prototype.on);
-
-goog.exportProperty(
-    ol.Observable.prototype,
-    'once',
-    ol.Observable.prototype.once);
-
-goog.exportProperty(
-    ol.Observable.prototype,
-    'un',
-    ol.Observable.prototype.un);
-
-goog.exportProperty(
-    ol.Observable.prototype,
-    'unByKey',
-    ol.Observable.prototype.unByKey);
-
-goog.exportSymbol(
-    'ol.Overlay',
-    ol.Overlay,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getElement',
-    ol.Overlay.prototype.getElement);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getId',
-    ol.Overlay.prototype.getId);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getMap',
-    ol.Overlay.prototype.getMap);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getOffset',
-    ol.Overlay.prototype.getOffset);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getPosition',
-    ol.Overlay.prototype.getPosition);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getPositioning',
-    ol.Overlay.prototype.getPositioning);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'setElement',
-    ol.Overlay.prototype.setElement);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'setMap',
-    ol.Overlay.prototype.setMap);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'setOffset',
-    ol.Overlay.prototype.setOffset);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'setPosition',
-    ol.Overlay.prototype.setPosition);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'setPositioning',
-    ol.Overlay.prototype.setPositioning);
-
-goog.exportSymbol(
-    'ol.render.toContext',
-    ol.render.toContext,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.size.toSize',
-    ol.size.toSize,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Tile.prototype,
-    'getTileCoord',
-    ol.Tile.prototype.getTileCoord);
-
-goog.exportProperty(
-    ol.Tile.prototype,
-    'load',
-    ol.Tile.prototype.load);
-
-goog.exportProperty(
-    ol.VectorTile.prototype,
-    'getFormat',
-    ol.VectorTile.prototype.getFormat);
-
-goog.exportProperty(
-    ol.VectorTile.prototype,
-    'setFeatures',
-    ol.VectorTile.prototype.setFeatures);
-
-goog.exportProperty(
-    ol.VectorTile.prototype,
-    'setProjection',
-    ol.VectorTile.prototype.setProjection);
-
-goog.exportProperty(
-    ol.VectorTile.prototype,
-    'setLoader',
-    ol.VectorTile.prototype.setLoader);
-
-goog.exportSymbol(
-    'ol.View',
-    ol.View,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'constrainCenter',
-    ol.View.prototype.constrainCenter);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'constrainResolution',
-    ol.View.prototype.constrainResolution);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'constrainRotation',
-    ol.View.prototype.constrainRotation);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getCenter',
-    ol.View.prototype.getCenter);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'calculateExtent',
-    ol.View.prototype.calculateExtent);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getMaxResolution',
-    ol.View.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getMinResolution',
-    ol.View.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getProjection',
-    ol.View.prototype.getProjection);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getResolution',
-    ol.View.prototype.getResolution);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getResolutions',
-    ol.View.prototype.getResolutions);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getRotation',
-    ol.View.prototype.getRotation);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getZoom',
-    ol.View.prototype.getZoom);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'fit',
-    ol.View.prototype.fit);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'centerOn',
-    ol.View.prototype.centerOn);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'rotate',
-    ol.View.prototype.rotate);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'setCenter',
-    ol.View.prototype.setCenter);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'setResolution',
-    ol.View.prototype.setResolution);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'setRotation',
-    ol.View.prototype.setRotation);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'setZoom',
-    ol.View.prototype.setZoom);
-
-goog.exportSymbol(
-    'ol.xml.getAllTextContent',
-    ol.xml.getAllTextContent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.xml.parse',
-    ol.xml.parse,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.webgl.Context.prototype,
-    'getGL',
-    ol.webgl.Context.prototype.getGL);
-
-goog.exportProperty(
-    ol.webgl.Context.prototype,
-    'useProgram',
-    ol.webgl.Context.prototype.useProgram);
-
-goog.exportSymbol(
-    'ol.tilegrid.createXYZ',
-    ol.tilegrid.createXYZ,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.tilegrid.TileGrid',
-    ol.tilegrid.TileGrid,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'forEachTileCoord',
-    ol.tilegrid.TileGrid.prototype.forEachTileCoord);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getMaxZoom',
-    ol.tilegrid.TileGrid.prototype.getMaxZoom);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getMinZoom',
-    ol.tilegrid.TileGrid.prototype.getMinZoom);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getOrigin',
-    ol.tilegrid.TileGrid.prototype.getOrigin);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getResolution',
-    ol.tilegrid.TileGrid.prototype.getResolution);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getResolutions',
-    ol.tilegrid.TileGrid.prototype.getResolutions);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getTileCoordExtent',
-    ol.tilegrid.TileGrid.prototype.getTileCoordExtent);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getTileCoordForCoordAndResolution',
-    ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndResolution);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getTileCoordForCoordAndZ',
-    ol.tilegrid.TileGrid.prototype.getTileCoordForCoordAndZ);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getTileSize',
-    ol.tilegrid.TileGrid.prototype.getTileSize);
-
-goog.exportProperty(
-    ol.tilegrid.TileGrid.prototype,
-    'getZForResolution',
-    ol.tilegrid.TileGrid.prototype.getZForResolution);
-
-goog.exportSymbol(
-    'ol.tilegrid.WMTS',
-    ol.tilegrid.WMTS,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getMatrixIds',
-    ol.tilegrid.WMTS.prototype.getMatrixIds);
-
-goog.exportSymbol(
-    'ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet',
-    ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.style.AtlasManager',
-    ol.style.AtlasManager,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.style.Circle',
-    ol.style.Circle,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'clone',
-    ol.style.Circle.prototype.clone);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getFill',
-    ol.style.Circle.prototype.getFill);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getImage',
-    ol.style.Circle.prototype.getImage);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getRadius',
-    ol.style.Circle.prototype.getRadius);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getStroke',
-    ol.style.Circle.prototype.getStroke);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'setRadius',
-    ol.style.Circle.prototype.setRadius);
-
-goog.exportSymbol(
-    'ol.style.Fill',
-    ol.style.Fill,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.style.Fill.prototype,
-    'clone',
-    ol.style.Fill.prototype.clone);
-
-goog.exportProperty(
-    ol.style.Fill.prototype,
-    'getColor',
-    ol.style.Fill.prototype.getColor);
-
-goog.exportProperty(
-    ol.style.Fill.prototype,
-    'setColor',
-    ol.style.Fill.prototype.setColor);
-
-goog.exportSymbol(
-    'ol.style.Icon',
-    ol.style.Icon,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'clone',
-    ol.style.Icon.prototype.clone);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getAnchor',
-    ol.style.Icon.prototype.getAnchor);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getImage',
-    ol.style.Icon.prototype.getImage);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getOrigin',
-    ol.style.Icon.prototype.getOrigin);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getSrc',
-    ol.style.Icon.prototype.getSrc);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getSize',
-    ol.style.Icon.prototype.getSize);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'load',
-    ol.style.Icon.prototype.load);
-
-goog.exportSymbol(
-    'ol.style.Image',
-    ol.style.Image,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.style.Image.prototype,
-    'getOpacity',
-    ol.style.Image.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.style.Image.prototype,
-    'getRotateWithView',
-    ol.style.Image.prototype.getRotateWithView);
-
-goog.exportProperty(
-    ol.style.Image.prototype,
-    'getRotation',
-    ol.style.Image.prototype.getRotation);
-
-goog.exportProperty(
-    ol.style.Image.prototype,
-    'getScale',
-    ol.style.Image.prototype.getScale);
-
-goog.exportProperty(
-    ol.style.Image.prototype,
-    'getSnapToPixel',
-    ol.style.Image.prototype.getSnapToPixel);
-
-goog.exportProperty(
-    ol.style.Image.prototype,
-    'setOpacity',
-    ol.style.Image.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.style.Image.prototype,
-    'setRotation',
-    ol.style.Image.prototype.setRotation);
-
-goog.exportProperty(
-    ol.style.Image.prototype,
-    'setScale',
-    ol.style.Image.prototype.setScale);
-
-goog.exportSymbol(
-    'ol.style.RegularShape',
-    ol.style.RegularShape,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'clone',
-    ol.style.RegularShape.prototype.clone);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getAnchor',
-    ol.style.RegularShape.prototype.getAnchor);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getAngle',
-    ol.style.RegularShape.prototype.getAngle);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getFill',
-    ol.style.RegularShape.prototype.getFill);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getImage',
-    ol.style.RegularShape.prototype.getImage);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getOrigin',
-    ol.style.RegularShape.prototype.getOrigin);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getPoints',
-    ol.style.RegularShape.prototype.getPoints);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getRadius',
-    ol.style.RegularShape.prototype.getRadius);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getRadius2',
-    ol.style.RegularShape.prototype.getRadius2);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getSize',
-    ol.style.RegularShape.prototype.getSize);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getStroke',
-    ol.style.RegularShape.prototype.getStroke);
-
-goog.exportSymbol(
-    'ol.style.Stroke',
-    ol.style.Stroke,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'clone',
-    ol.style.Stroke.prototype.clone);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'getColor',
-    ol.style.Stroke.prototype.getColor);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'getLineCap',
-    ol.style.Stroke.prototype.getLineCap);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'getLineDash',
-    ol.style.Stroke.prototype.getLineDash);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'getLineJoin',
-    ol.style.Stroke.prototype.getLineJoin);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'getMiterLimit',
-    ol.style.Stroke.prototype.getMiterLimit);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'getWidth',
-    ol.style.Stroke.prototype.getWidth);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'setColor',
-    ol.style.Stroke.prototype.setColor);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'setLineCap',
-    ol.style.Stroke.prototype.setLineCap);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'setLineDash',
-    ol.style.Stroke.prototype.setLineDash);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'setLineJoin',
-    ol.style.Stroke.prototype.setLineJoin);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'setMiterLimit',
-    ol.style.Stroke.prototype.setMiterLimit);
-
-goog.exportProperty(
-    ol.style.Stroke.prototype,
-    'setWidth',
-    ol.style.Stroke.prototype.setWidth);
-
-goog.exportSymbol(
-    'ol.style.Style',
-    ol.style.Style,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'clone',
-    ol.style.Style.prototype.clone);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'getGeometry',
-    ol.style.Style.prototype.getGeometry);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'getGeometryFunction',
-    ol.style.Style.prototype.getGeometryFunction);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'getFill',
-    ol.style.Style.prototype.getFill);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'getImage',
-    ol.style.Style.prototype.getImage);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'getStroke',
-    ol.style.Style.prototype.getStroke);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'getText',
-    ol.style.Style.prototype.getText);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'getZIndex',
-    ol.style.Style.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'setGeometry',
-    ol.style.Style.prototype.setGeometry);
-
-goog.exportProperty(
-    ol.style.Style.prototype,
-    'setZIndex',
-    ol.style.Style.prototype.setZIndex);
-
-goog.exportSymbol(
-    'ol.style.Text',
-    ol.style.Text,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'clone',
-    ol.style.Text.prototype.clone);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getFont',
-    ol.style.Text.prototype.getFont);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getOffsetX',
-    ol.style.Text.prototype.getOffsetX);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getOffsetY',
-    ol.style.Text.prototype.getOffsetY);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getFill',
-    ol.style.Text.prototype.getFill);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getRotateWithView',
-    ol.style.Text.prototype.getRotateWithView);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getRotation',
-    ol.style.Text.prototype.getRotation);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getScale',
-    ol.style.Text.prototype.getScale);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getStroke',
-    ol.style.Text.prototype.getStroke);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getText',
-    ol.style.Text.prototype.getText);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getTextAlign',
-    ol.style.Text.prototype.getTextAlign);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'getTextBaseline',
-    ol.style.Text.prototype.getTextBaseline);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setFont',
-    ol.style.Text.prototype.setFont);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setOffsetX',
-    ol.style.Text.prototype.setOffsetX);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setOffsetY',
-    ol.style.Text.prototype.setOffsetY);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setFill',
-    ol.style.Text.prototype.setFill);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setRotation',
-    ol.style.Text.prototype.setRotation);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setScale',
-    ol.style.Text.prototype.setScale);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setStroke',
-    ol.style.Text.prototype.setStroke);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setText',
-    ol.style.Text.prototype.setText);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setTextAlign',
-    ol.style.Text.prototype.setTextAlign);
-
-goog.exportProperty(
-    ol.style.Text.prototype,
-    'setTextBaseline',
-    ol.style.Text.prototype.setTextBaseline);
-
-goog.exportSymbol(
-    'ol.Sphere',
-    ol.Sphere,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Sphere.prototype,
-    'geodesicArea',
-    ol.Sphere.prototype.geodesicArea);
-
-goog.exportProperty(
-    ol.Sphere.prototype,
-    'haversineDistance',
-    ol.Sphere.prototype.haversineDistance);
-
-goog.exportSymbol(
-    'ol.source.BingMaps',
-    ol.source.BingMaps,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.BingMaps.TOS_ATTRIBUTION',
-    ol.source.BingMaps.TOS_ATTRIBUTION,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getApiKey',
-    ol.source.BingMaps.prototype.getApiKey);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getImagerySet',
-    ol.source.BingMaps.prototype.getImagerySet);
-
-goog.exportSymbol(
-    'ol.source.CartoDB',
-    ol.source.CartoDB,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getConfig',
-    ol.source.CartoDB.prototype.getConfig);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'updateConfig',
-    ol.source.CartoDB.prototype.updateConfig);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setConfig',
-    ol.source.CartoDB.prototype.setConfig);
-
-goog.exportSymbol(
-    'ol.source.Cluster',
-    ol.source.Cluster,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getSource',
-    ol.source.Cluster.prototype.getSource);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'setDistance',
-    ol.source.Cluster.prototype.setDistance);
-
-goog.exportSymbol(
-    'ol.source.Image',
-    ol.source.Image,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.Image.Event.prototype,
-    'image',
-    ol.source.Image.Event.prototype.image);
-
-goog.exportSymbol(
-    'ol.source.ImageArcGISRest',
-    ol.source.ImageArcGISRest,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getParams',
-    ol.source.ImageArcGISRest.prototype.getParams);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getImageLoadFunction',
-    ol.source.ImageArcGISRest.prototype.getImageLoadFunction);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getUrl',
-    ol.source.ImageArcGISRest.prototype.getUrl);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'setImageLoadFunction',
-    ol.source.ImageArcGISRest.prototype.setImageLoadFunction);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'setUrl',
-    ol.source.ImageArcGISRest.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'updateParams',
-    ol.source.ImageArcGISRest.prototype.updateParams);
-
-goog.exportSymbol(
-    'ol.source.ImageCanvas',
-    ol.source.ImageCanvas,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.ImageMapGuide',
-    ol.source.ImageMapGuide,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getParams',
-    ol.source.ImageMapGuide.prototype.getParams);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getImageLoadFunction',
-    ol.source.ImageMapGuide.prototype.getImageLoadFunction);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'updateParams',
-    ol.source.ImageMapGuide.prototype.updateParams);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'setImageLoadFunction',
-    ol.source.ImageMapGuide.prototype.setImageLoadFunction);
-
-goog.exportSymbol(
-    'ol.source.ImageStatic',
-    ol.source.ImageStatic,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.ImageVector',
-    ol.source.ImageVector,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getSource',
-    ol.source.ImageVector.prototype.getSource);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getStyle',
-    ol.source.ImageVector.prototype.getStyle);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getStyleFunction',
-    ol.source.ImageVector.prototype.getStyleFunction);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'setStyle',
-    ol.source.ImageVector.prototype.setStyle);
-
-goog.exportSymbol(
-    'ol.source.ImageWMS',
-    ol.source.ImageWMS,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getGetFeatureInfoUrl',
-    ol.source.ImageWMS.prototype.getGetFeatureInfoUrl);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getParams',
-    ol.source.ImageWMS.prototype.getParams);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getImageLoadFunction',
-    ol.source.ImageWMS.prototype.getImageLoadFunction);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getUrl',
-    ol.source.ImageWMS.prototype.getUrl);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'setImageLoadFunction',
-    ol.source.ImageWMS.prototype.setImageLoadFunction);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'setUrl',
-    ol.source.ImageWMS.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'updateParams',
-    ol.source.ImageWMS.prototype.updateParams);
-
-goog.exportSymbol(
-    'ol.source.OSM',
-    ol.source.OSM,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.OSM.ATTRIBUTION',
-    ol.source.OSM.ATTRIBUTION,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.Raster',
-    ol.source.Raster,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'setOperation',
-    ol.source.Raster.prototype.setOperation);
-
-goog.exportProperty(
-    ol.source.Raster.Event.prototype,
-    'extent',
-    ol.source.Raster.Event.prototype.extent);
-
-goog.exportProperty(
-    ol.source.Raster.Event.prototype,
-    'resolution',
-    ol.source.Raster.Event.prototype.resolution);
-
-goog.exportProperty(
-    ol.source.Raster.Event.prototype,
-    'data',
-    ol.source.Raster.Event.prototype.data);
-
-goog.exportSymbol(
-    'ol.source.Source',
-    ol.source.Source,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'getAttributions',
-    ol.source.Source.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'getLogo',
-    ol.source.Source.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'getProjection',
-    ol.source.Source.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'getState',
-    ol.source.Source.prototype.getState);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'refresh',
-    ol.source.Source.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'setAttributions',
-    ol.source.Source.prototype.setAttributions);
-
-goog.exportSymbol(
-    'ol.source.Stamen',
-    ol.source.Stamen,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.Tile',
-    ol.source.Tile,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'getTileGrid',
-    ol.source.Tile.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.Tile.Event.prototype,
-    'tile',
-    ol.source.Tile.Event.prototype.tile);
-
-goog.exportSymbol(
-    'ol.source.TileArcGISRest',
-    ol.source.TileArcGISRest,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getParams',
-    ol.source.TileArcGISRest.prototype.getParams);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'updateParams',
-    ol.source.TileArcGISRest.prototype.updateParams);
-
-goog.exportSymbol(
-    'ol.source.TileDebug',
-    ol.source.TileDebug,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.TileImage',
-    ol.source.TileImage,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.TileImage.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'setTileGridForProjection',
-    ol.source.TileImage.prototype.setTileGridForProjection);
-
-goog.exportSymbol(
-    'ol.source.TileJSON',
-    ol.source.TileJSON,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getTileJSON',
-    ol.source.TileJSON.prototype.getTileJSON);
-
-goog.exportSymbol(
-    'ol.source.TileUTFGrid',
-    ol.source.TileUTFGrid,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getTemplate',
-    ol.source.TileUTFGrid.prototype.getTemplate);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'forDataAtCoordinateAndResolution',
-    ol.source.TileUTFGrid.prototype.forDataAtCoordinateAndResolution);
-
-goog.exportSymbol(
-    'ol.source.TileWMS',
-    ol.source.TileWMS,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getGetFeatureInfoUrl',
-    ol.source.TileWMS.prototype.getGetFeatureInfoUrl);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getParams',
-    ol.source.TileWMS.prototype.getParams);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'updateParams',
-    ol.source.TileWMS.prototype.updateParams);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getTileLoadFunction',
-    ol.source.UrlTile.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getTileUrlFunction',
-    ol.source.UrlTile.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getUrls',
-    ol.source.UrlTile.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'setTileLoadFunction',
-    ol.source.UrlTile.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'setTileUrlFunction',
-    ol.source.UrlTile.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'setUrl',
-    ol.source.UrlTile.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'setUrls',
-    ol.source.UrlTile.prototype.setUrls);
-
-goog.exportSymbol(
-    'ol.source.Vector',
-    ol.source.Vector,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'addFeature',
-    ol.source.Vector.prototype.addFeature);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'addFeatures',
-    ol.source.Vector.prototype.addFeatures);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'clear',
-    ol.source.Vector.prototype.clear);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'forEachFeature',
-    ol.source.Vector.prototype.forEachFeature);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'forEachFeatureInExtent',
-    ol.source.Vector.prototype.forEachFeatureInExtent);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'forEachFeatureIntersectingExtent',
-    ol.source.Vector.prototype.forEachFeatureIntersectingExtent);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getFeaturesCollection',
-    ol.source.Vector.prototype.getFeaturesCollection);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getFeatures',
-    ol.source.Vector.prototype.getFeatures);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getFeaturesAtCoordinate',
-    ol.source.Vector.prototype.getFeaturesAtCoordinate);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getFeaturesInExtent',
-    ol.source.Vector.prototype.getFeaturesInExtent);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getClosestFeatureToCoordinate',
-    ol.source.Vector.prototype.getClosestFeatureToCoordinate);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getExtent',
-    ol.source.Vector.prototype.getExtent);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getFeatureById',
-    ol.source.Vector.prototype.getFeatureById);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getFormat',
-    ol.source.Vector.prototype.getFormat);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getUrl',
-    ol.source.Vector.prototype.getUrl);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'removeFeature',
-    ol.source.Vector.prototype.removeFeature);
-
-goog.exportProperty(
-    ol.source.Vector.Event.prototype,
-    'feature',
-    ol.source.Vector.Event.prototype.feature);
-
-goog.exportSymbol(
-    'ol.source.VectorTile',
-    ol.source.VectorTile,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.WMTS',
-    ol.source.WMTS,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getDimensions',
-    ol.source.WMTS.prototype.getDimensions);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getFormat',
-    ol.source.WMTS.prototype.getFormat);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getLayer',
-    ol.source.WMTS.prototype.getLayer);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getMatrixSet',
-    ol.source.WMTS.prototype.getMatrixSet);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getRequestEncoding',
-    ol.source.WMTS.prototype.getRequestEncoding);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getStyle',
-    ol.source.WMTS.prototype.getStyle);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getVersion',
-    ol.source.WMTS.prototype.getVersion);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'updateDimensions',
-    ol.source.WMTS.prototype.updateDimensions);
-
-goog.exportSymbol(
-    'ol.source.WMTS.optionsFromCapabilities',
-    ol.source.WMTS.optionsFromCapabilities,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.XYZ',
-    ol.source.XYZ,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.source.Zoomify',
-    ol.source.Zoomify,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.render.Event.prototype,
-    'vectorContext',
-    ol.render.Event.prototype.vectorContext);
-
-goog.exportProperty(
-    ol.render.Event.prototype,
-    'frameState',
-    ol.render.Event.prototype.frameState);
-
-goog.exportProperty(
-    ol.render.Event.prototype,
-    'context',
-    ol.render.Event.prototype.context);
-
-goog.exportProperty(
-    ol.render.Event.prototype,
-    'glContext',
-    ol.render.Event.prototype.glContext);
-
-goog.exportProperty(
-    ol.render.Feature.prototype,
-    'get',
-    ol.render.Feature.prototype.get);
-
-goog.exportProperty(
-    ol.render.Feature.prototype,
-    'getExtent',
-    ol.render.Feature.prototype.getExtent);
-
-goog.exportProperty(
-    ol.render.Feature.prototype,
-    'getGeometry',
-    ol.render.Feature.prototype.getGeometry);
-
-goog.exportProperty(
-    ol.render.Feature.prototype,
-    'getProperties',
-    ol.render.Feature.prototype.getProperties);
-
-goog.exportProperty(
-    ol.render.Feature.prototype,
-    'getType',
-    ol.render.Feature.prototype.getType);
-
-goog.exportSymbol(
-    'ol.render.VectorContext',
-    ol.render.VectorContext,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.render.webgl.Immediate.prototype,
-    'setStyle',
-    ol.render.webgl.Immediate.prototype.setStyle);
-
-goog.exportProperty(
-    ol.render.webgl.Immediate.prototype,
-    'drawGeometry',
-    ol.render.webgl.Immediate.prototype.drawGeometry);
-
-goog.exportProperty(
-    ol.render.webgl.Immediate.prototype,
-    'drawFeature',
-    ol.render.webgl.Immediate.prototype.drawFeature);
-
-goog.exportProperty(
-    ol.render.canvas.Immediate.prototype,
-    'drawCircle',
-    ol.render.canvas.Immediate.prototype.drawCircle);
-
-goog.exportProperty(
-    ol.render.canvas.Immediate.prototype,
-    'setStyle',
-    ol.render.canvas.Immediate.prototype.setStyle);
-
-goog.exportProperty(
-    ol.render.canvas.Immediate.prototype,
-    'drawGeometry',
-    ol.render.canvas.Immediate.prototype.drawGeometry);
-
-goog.exportProperty(
-    ol.render.canvas.Immediate.prototype,
-    'drawFeature',
-    ol.render.canvas.Immediate.prototype.drawFeature);
-
-goog.exportSymbol(
-    'ol.proj.common.add',
-    ol.proj.common.add,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.METERS_PER_UNIT',
-    ol.proj.METERS_PER_UNIT,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.Projection',
-    ol.proj.Projection,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'getCode',
-    ol.proj.Projection.prototype.getCode);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'getExtent',
-    ol.proj.Projection.prototype.getExtent);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'getUnits',
-    ol.proj.Projection.prototype.getUnits);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'getMetersPerUnit',
-    ol.proj.Projection.prototype.getMetersPerUnit);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'getWorldExtent',
-    ol.proj.Projection.prototype.getWorldExtent);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'isGlobal',
-    ol.proj.Projection.prototype.isGlobal);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'setGlobal',
-    ol.proj.Projection.prototype.setGlobal);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'setExtent',
-    ol.proj.Projection.prototype.setExtent);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'setWorldExtent',
-    ol.proj.Projection.prototype.setWorldExtent);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'setGetPointResolution',
-    ol.proj.Projection.prototype.setGetPointResolution);
-
-goog.exportProperty(
-    ol.proj.Projection.prototype,
-    'getPointResolution',
-    ol.proj.Projection.prototype.getPointResolution);
-
-goog.exportSymbol(
-    'ol.proj.setProj4',
-    ol.proj.setProj4,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.addEquivalentProjections',
-    ol.proj.addEquivalentProjections,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.addProjection',
-    ol.proj.addProjection,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.addCoordinateTransforms',
-    ol.proj.addCoordinateTransforms,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.fromLonLat',
-    ol.proj.fromLonLat,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.toLonLat',
-    ol.proj.toLonLat,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.get',
-    ol.proj.get,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.equivalent',
-    ol.proj.equivalent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.getTransform',
-    ol.proj.getTransform,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.transform',
-    ol.proj.transform,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.proj.transformExtent',
-    ol.proj.transformExtent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.layer.Base',
-    ol.layer.Base,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getExtent',
-    ol.layer.Base.prototype.getExtent);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getMaxResolution',
-    ol.layer.Base.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getMinResolution',
-    ol.layer.Base.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getOpacity',
-    ol.layer.Base.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getVisible',
-    ol.layer.Base.prototype.getVisible);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getZIndex',
-    ol.layer.Base.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'setExtent',
-    ol.layer.Base.prototype.setExtent);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'setMaxResolution',
-    ol.layer.Base.prototype.setMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'setMinResolution',
-    ol.layer.Base.prototype.setMinResolution);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'setOpacity',
-    ol.layer.Base.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'setVisible',
-    ol.layer.Base.prototype.setVisible);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'setZIndex',
-    ol.layer.Base.prototype.setZIndex);
-
-goog.exportSymbol(
-    'ol.layer.Group',
-    ol.layer.Group,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getLayers',
-    ol.layer.Group.prototype.getLayers);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'setLayers',
-    ol.layer.Group.prototype.setLayers);
-
-goog.exportSymbol(
-    'ol.layer.Heatmap',
-    ol.layer.Heatmap,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getBlur',
-    ol.layer.Heatmap.prototype.getBlur);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getGradient',
-    ol.layer.Heatmap.prototype.getGradient);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getRadius',
-    ol.layer.Heatmap.prototype.getRadius);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setBlur',
-    ol.layer.Heatmap.prototype.setBlur);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setGradient',
-    ol.layer.Heatmap.prototype.setGradient);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setRadius',
-    ol.layer.Heatmap.prototype.setRadius);
-
-goog.exportSymbol(
-    'ol.layer.Image',
-    ol.layer.Image,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getSource',
-    ol.layer.Image.prototype.getSource);
-
-goog.exportSymbol(
-    'ol.layer.Layer',
-    ol.layer.Layer,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getSource',
-    ol.layer.Layer.prototype.getSource);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setMap',
-    ol.layer.Layer.prototype.setMap);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setSource',
-    ol.layer.Layer.prototype.setSource);
-
-goog.exportSymbol(
-    'ol.layer.Tile',
-    ol.layer.Tile,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getPreload',
-    ol.layer.Tile.prototype.getPreload);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getSource',
-    ol.layer.Tile.prototype.getSource);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setPreload',
-    ol.layer.Tile.prototype.setPreload);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getUseInterimTilesOnError',
-    ol.layer.Tile.prototype.getUseInterimTilesOnError);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setUseInterimTilesOnError',
-    ol.layer.Tile.prototype.setUseInterimTilesOnError);
-
-goog.exportSymbol(
-    'ol.layer.Vector',
-    ol.layer.Vector,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getSource',
-    ol.layer.Vector.prototype.getSource);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getStyle',
-    ol.layer.Vector.prototype.getStyle);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getStyleFunction',
-    ol.layer.Vector.prototype.getStyleFunction);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setStyle',
-    ol.layer.Vector.prototype.setStyle);
-
-goog.exportSymbol(
-    'ol.layer.VectorTile',
-    ol.layer.VectorTile,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getPreload',
-    ol.layer.VectorTile.prototype.getPreload);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getUseInterimTilesOnError',
-    ol.layer.VectorTile.prototype.getUseInterimTilesOnError);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setPreload',
-    ol.layer.VectorTile.prototype.setPreload);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setUseInterimTilesOnError',
-    ol.layer.VectorTile.prototype.setUseInterimTilesOnError);
-
-goog.exportSymbol(
-    'ol.interaction.DoubleClickZoom',
-    ol.interaction.DoubleClickZoom,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.DoubleClickZoom.handleEvent',
-    ol.interaction.DoubleClickZoom.handleEvent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.DragAndDrop',
-    ol.interaction.DragAndDrop,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.DragAndDrop.handleEvent',
-    ol.interaction.DragAndDrop.handleEvent,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.Event.prototype,
-    'features',
-    ol.interaction.DragAndDrop.Event.prototype.features);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.Event.prototype,
-    'file',
-    ol.interaction.DragAndDrop.Event.prototype.file);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.Event.prototype,
-    'projection',
-    ol.interaction.DragAndDrop.Event.prototype.projection);
-
-goog.exportSymbol(
-    'ol.interaction.DragBox',
-    ol.interaction.DragBox,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'getGeometry',
-    ol.interaction.DragBox.prototype.getGeometry);
-
-goog.exportProperty(
-    ol.interaction.DragBox.Event.prototype,
-    'coordinate',
-    ol.interaction.DragBox.Event.prototype.coordinate);
-
-goog.exportProperty(
-    ol.interaction.DragBox.Event.prototype,
-    'mapBrowserEvent',
-    ol.interaction.DragBox.Event.prototype.mapBrowserEvent);
-
-goog.exportSymbol(
-    'ol.interaction.DragPan',
-    ol.interaction.DragPan,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.DragRotate',
-    ol.interaction.DragRotate,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.DragRotateAndZoom',
-    ol.interaction.DragRotateAndZoom,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.DragZoom',
-    ol.interaction.DragZoom,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Draw',
-    ol.interaction.Draw,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Draw.handleEvent',
-    ol.interaction.Draw.handleEvent,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'removeLastPoint',
-    ol.interaction.Draw.prototype.removeLastPoint);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'finishDrawing',
-    ol.interaction.Draw.prototype.finishDrawing);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'extend',
-    ol.interaction.Draw.prototype.extend);
-
-goog.exportSymbol(
-    'ol.interaction.Draw.createRegularPolygon',
-    ol.interaction.Draw.createRegularPolygon,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Draw.createBox',
-    ol.interaction.Draw.createBox,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Draw.Event.prototype,
-    'feature',
-    ol.interaction.Draw.Event.prototype.feature);
-
-goog.exportSymbol(
-    'ol.interaction.Extent',
-    ol.interaction.Extent,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'getExtent',
-    ol.interaction.Extent.prototype.getExtent);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'setExtent',
-    ol.interaction.Extent.prototype.setExtent);
-
-goog.exportProperty(
-    ol.interaction.Extent.Event.prototype,
-    'extent_',
-    ol.interaction.Extent.Event.prototype.extent_);
-
-goog.exportSymbol(
-    'ol.interaction.defaults',
-    ol.interaction.defaults,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Interaction',
-    ol.interaction.Interaction,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'getActive',
-    ol.interaction.Interaction.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'getMap',
-    ol.interaction.Interaction.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'setActive',
-    ol.interaction.Interaction.prototype.setActive);
-
-goog.exportSymbol(
-    'ol.interaction.KeyboardPan',
-    ol.interaction.KeyboardPan,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.KeyboardPan.handleEvent',
-    ol.interaction.KeyboardPan.handleEvent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.KeyboardZoom',
-    ol.interaction.KeyboardZoom,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.KeyboardZoom.handleEvent',
-    ol.interaction.KeyboardZoom.handleEvent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Modify',
-    ol.interaction.Modify,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Modify.handleEvent',
-    ol.interaction.Modify.handleEvent,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'removePoint',
-    ol.interaction.Modify.prototype.removePoint);
-
-goog.exportProperty(
-    ol.interaction.Modify.Event.prototype,
-    'features',
-    ol.interaction.Modify.Event.prototype.features);
-
-goog.exportProperty(
-    ol.interaction.Modify.Event.prototype,
-    'mapBrowserEvent',
-    ol.interaction.Modify.Event.prototype.mapBrowserEvent);
-
-goog.exportSymbol(
-    'ol.interaction.MouseWheelZoom',
-    ol.interaction.MouseWheelZoom,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.MouseWheelZoom.handleEvent',
-    ol.interaction.MouseWheelZoom.handleEvent,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'setMouseAnchor',
-    ol.interaction.MouseWheelZoom.prototype.setMouseAnchor);
-
-goog.exportSymbol(
-    'ol.interaction.PinchRotate',
-    ol.interaction.PinchRotate,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.PinchZoom',
-    ol.interaction.PinchZoom,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Pointer',
-    ol.interaction.Pointer,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Pointer.handleEvent',
-    ol.interaction.Pointer.handleEvent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.interaction.Select',
-    ol.interaction.Select,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'getFeatures',
-    ol.interaction.Select.prototype.getFeatures);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'getLayer',
-    ol.interaction.Select.prototype.getLayer);
-
-goog.exportSymbol(
-    'ol.interaction.Select.handleEvent',
-    ol.interaction.Select.handleEvent,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'setMap',
-    ol.interaction.Select.prototype.setMap);
-
-goog.exportProperty(
-    ol.interaction.Select.Event.prototype,
-    'selected',
-    ol.interaction.Select.Event.prototype.selected);
-
-goog.exportProperty(
-    ol.interaction.Select.Event.prototype,
-    'deselected',
-    ol.interaction.Select.Event.prototype.deselected);
-
-goog.exportProperty(
-    ol.interaction.Select.Event.prototype,
-    'mapBrowserEvent',
-    ol.interaction.Select.Event.prototype.mapBrowserEvent);
-
-goog.exportSymbol(
-    'ol.interaction.Snap',
-    ol.interaction.Snap,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'addFeature',
-    ol.interaction.Snap.prototype.addFeature);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'removeFeature',
-    ol.interaction.Snap.prototype.removeFeature);
-
-goog.exportSymbol(
-    'ol.interaction.Translate',
-    ol.interaction.Translate,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.interaction.Translate.Event.prototype,
-    'features',
-    ol.interaction.Translate.Event.prototype.features);
-
-goog.exportProperty(
-    ol.interaction.Translate.Event.prototype,
-    'coordinate',
-    ol.interaction.Translate.Event.prototype.coordinate);
-
-goog.exportSymbol(
-    'ol.geom.Circle',
-    ol.geom.Circle,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'clone',
-    ol.geom.Circle.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getCenter',
-    ol.geom.Circle.prototype.getCenter);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getRadius',
-    ol.geom.Circle.prototype.getRadius);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getType',
-    ol.geom.Circle.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'intersectsExtent',
-    ol.geom.Circle.prototype.intersectsExtent);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'setCenter',
-    ol.geom.Circle.prototype.setCenter);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'setCenterAndRadius',
-    ol.geom.Circle.prototype.setCenterAndRadius);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'setRadius',
-    ol.geom.Circle.prototype.setRadius);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'transform',
-    ol.geom.Circle.prototype.transform);
-
-goog.exportSymbol(
-    'ol.geom.Geometry',
-    ol.geom.Geometry,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'getClosestPoint',
-    ol.geom.Geometry.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'intersectsCoordinate',
-    ol.geom.Geometry.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'getExtent',
-    ol.geom.Geometry.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'rotate',
-    ol.geom.Geometry.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'scale',
-    ol.geom.Geometry.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'simplify',
-    ol.geom.Geometry.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'transform',
-    ol.geom.Geometry.prototype.transform);
-
-goog.exportSymbol(
-    'ol.geom.GeometryCollection',
-    ol.geom.GeometryCollection,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'clone',
-    ol.geom.GeometryCollection.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'getGeometries',
-    ol.geom.GeometryCollection.prototype.getGeometries);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'getType',
-    ol.geom.GeometryCollection.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'intersectsExtent',
-    ol.geom.GeometryCollection.prototype.intersectsExtent);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'setGeometries',
-    ol.geom.GeometryCollection.prototype.setGeometries);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'applyTransform',
-    ol.geom.GeometryCollection.prototype.applyTransform);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'translate',
-    ol.geom.GeometryCollection.prototype.translate);
-
-goog.exportSymbol(
-    'ol.geom.LinearRing',
-    ol.geom.LinearRing,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'clone',
-    ol.geom.LinearRing.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getArea',
-    ol.geom.LinearRing.prototype.getArea);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getCoordinates',
-    ol.geom.LinearRing.prototype.getCoordinates);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getType',
-    ol.geom.LinearRing.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'setCoordinates',
-    ol.geom.LinearRing.prototype.setCoordinates);
-
-goog.exportSymbol(
-    'ol.geom.LineString',
-    ol.geom.LineString,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'appendCoordinate',
-    ol.geom.LineString.prototype.appendCoordinate);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'clone',
-    ol.geom.LineString.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'forEachSegment',
-    ol.geom.LineString.prototype.forEachSegment);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getCoordinateAtM',
-    ol.geom.LineString.prototype.getCoordinateAtM);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getCoordinates',
-    ol.geom.LineString.prototype.getCoordinates);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getCoordinateAt',
-    ol.geom.LineString.prototype.getCoordinateAt);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getLength',
-    ol.geom.LineString.prototype.getLength);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getType',
-    ol.geom.LineString.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'intersectsExtent',
-    ol.geom.LineString.prototype.intersectsExtent);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'setCoordinates',
-    ol.geom.LineString.prototype.setCoordinates);
-
-goog.exportSymbol(
-    'ol.geom.MultiLineString',
-    ol.geom.MultiLineString,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'appendLineString',
-    ol.geom.MultiLineString.prototype.appendLineString);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'clone',
-    ol.geom.MultiLineString.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getCoordinateAtM',
-    ol.geom.MultiLineString.prototype.getCoordinateAtM);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getCoordinates',
-    ol.geom.MultiLineString.prototype.getCoordinates);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getLineString',
-    ol.geom.MultiLineString.prototype.getLineString);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getLineStrings',
-    ol.geom.MultiLineString.prototype.getLineStrings);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getType',
-    ol.geom.MultiLineString.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'intersectsExtent',
-    ol.geom.MultiLineString.prototype.intersectsExtent);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'setCoordinates',
-    ol.geom.MultiLineString.prototype.setCoordinates);
-
-goog.exportSymbol(
-    'ol.geom.MultiPoint',
-    ol.geom.MultiPoint,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'appendPoint',
-    ol.geom.MultiPoint.prototype.appendPoint);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'clone',
-    ol.geom.MultiPoint.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getCoordinates',
-    ol.geom.MultiPoint.prototype.getCoordinates);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getPoint',
-    ol.geom.MultiPoint.prototype.getPoint);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getPoints',
-    ol.geom.MultiPoint.prototype.getPoints);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getType',
-    ol.geom.MultiPoint.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'intersectsExtent',
-    ol.geom.MultiPoint.prototype.intersectsExtent);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'setCoordinates',
-    ol.geom.MultiPoint.prototype.setCoordinates);
-
-goog.exportSymbol(
-    'ol.geom.MultiPolygon',
-    ol.geom.MultiPolygon,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'appendPolygon',
-    ol.geom.MultiPolygon.prototype.appendPolygon);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'clone',
-    ol.geom.MultiPolygon.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getArea',
-    ol.geom.MultiPolygon.prototype.getArea);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getCoordinates',
-    ol.geom.MultiPolygon.prototype.getCoordinates);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getInteriorPoints',
-    ol.geom.MultiPolygon.prototype.getInteriorPoints);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getPolygon',
-    ol.geom.MultiPolygon.prototype.getPolygon);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getPolygons',
-    ol.geom.MultiPolygon.prototype.getPolygons);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getType',
-    ol.geom.MultiPolygon.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'intersectsExtent',
-    ol.geom.MultiPolygon.prototype.intersectsExtent);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'setCoordinates',
-    ol.geom.MultiPolygon.prototype.setCoordinates);
-
-goog.exportSymbol(
-    'ol.geom.Point',
-    ol.geom.Point,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'clone',
-    ol.geom.Point.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getCoordinates',
-    ol.geom.Point.prototype.getCoordinates);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getType',
-    ol.geom.Point.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'intersectsExtent',
-    ol.geom.Point.prototype.intersectsExtent);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'setCoordinates',
-    ol.geom.Point.prototype.setCoordinates);
-
-goog.exportSymbol(
-    'ol.geom.Polygon',
-    ol.geom.Polygon,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'appendLinearRing',
-    ol.geom.Polygon.prototype.appendLinearRing);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'clone',
-    ol.geom.Polygon.prototype.clone);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getArea',
-    ol.geom.Polygon.prototype.getArea);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getCoordinates',
-    ol.geom.Polygon.prototype.getCoordinates);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getInteriorPoint',
-    ol.geom.Polygon.prototype.getInteriorPoint);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getLinearRingCount',
-    ol.geom.Polygon.prototype.getLinearRingCount);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getLinearRing',
-    ol.geom.Polygon.prototype.getLinearRing);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getLinearRings',
-    ol.geom.Polygon.prototype.getLinearRings);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getType',
-    ol.geom.Polygon.prototype.getType);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'intersectsExtent',
-    ol.geom.Polygon.prototype.intersectsExtent);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'setCoordinates',
-    ol.geom.Polygon.prototype.setCoordinates);
-
-goog.exportSymbol(
-    'ol.geom.Polygon.circular',
-    ol.geom.Polygon.circular,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.geom.Polygon.fromExtent',
-    ol.geom.Polygon.fromExtent,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.geom.Polygon.fromCircle',
-    ol.geom.Polygon.fromCircle,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.geom.SimpleGeometry',
-    ol.geom.SimpleGeometry,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'getFirstCoordinate',
-    ol.geom.SimpleGeometry.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'getLastCoordinate',
-    ol.geom.SimpleGeometry.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'getLayout',
-    ol.geom.SimpleGeometry.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'applyTransform',
-    ol.geom.SimpleGeometry.prototype.applyTransform);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'translate',
-    ol.geom.SimpleGeometry.prototype.translate);
-
-goog.exportSymbol(
-    'ol.format.EsriJSON',
-    ol.format.EsriJSON,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'readFeature',
-    ol.format.EsriJSON.prototype.readFeature);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'readFeatures',
-    ol.format.EsriJSON.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'readGeometry',
-    ol.format.EsriJSON.prototype.readGeometry);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'readProjection',
-    ol.format.EsriJSON.prototype.readProjection);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'writeGeometry',
-    ol.format.EsriJSON.prototype.writeGeometry);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'writeGeometryObject',
-    ol.format.EsriJSON.prototype.writeGeometryObject);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'writeFeature',
-    ol.format.EsriJSON.prototype.writeFeature);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'writeFeatureObject',
-    ol.format.EsriJSON.prototype.writeFeatureObject);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'writeFeatures',
-    ol.format.EsriJSON.prototype.writeFeatures);
-
-goog.exportProperty(
-    ol.format.EsriJSON.prototype,
-    'writeFeaturesObject',
-    ol.format.EsriJSON.prototype.writeFeaturesObject);
-
-goog.exportSymbol(
-    'ol.format.Feature',
-    ol.format.Feature,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.GeoJSON',
-    ol.format.GeoJSON,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'readFeature',
-    ol.format.GeoJSON.prototype.readFeature);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'readFeatures',
-    ol.format.GeoJSON.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'readGeometry',
-    ol.format.GeoJSON.prototype.readGeometry);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'readProjection',
-    ol.format.GeoJSON.prototype.readProjection);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'writeFeature',
-    ol.format.GeoJSON.prototype.writeFeature);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'writeFeatureObject',
-    ol.format.GeoJSON.prototype.writeFeatureObject);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'writeFeatures',
-    ol.format.GeoJSON.prototype.writeFeatures);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'writeFeaturesObject',
-    ol.format.GeoJSON.prototype.writeFeaturesObject);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'writeGeometry',
-    ol.format.GeoJSON.prototype.writeGeometry);
-
-goog.exportProperty(
-    ol.format.GeoJSON.prototype,
-    'writeGeometryObject',
-    ol.format.GeoJSON.prototype.writeGeometryObject);
-
-goog.exportSymbol(
-    'ol.format.GML',
-    ol.format.GML,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.GML.prototype,
-    'writeFeatures',
-    ol.format.GML.prototype.writeFeatures);
-
-goog.exportProperty(
-    ol.format.GML.prototype,
-    'writeFeaturesNode',
-    ol.format.GML.prototype.writeFeaturesNode);
-
-goog.exportSymbol(
-    'ol.format.GML2',
-    ol.format.GML2,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.GML3',
-    ol.format.GML3,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.GML3.prototype,
-    'writeGeometryNode',
-    ol.format.GML3.prototype.writeGeometryNode);
-
-goog.exportProperty(
-    ol.format.GML3.prototype,
-    'writeFeatures',
-    ol.format.GML3.prototype.writeFeatures);
-
-goog.exportProperty(
-    ol.format.GML3.prototype,
-    'writeFeaturesNode',
-    ol.format.GML3.prototype.writeFeaturesNode);
-
-goog.exportProperty(
-    ol.format.GMLBase.prototype,
-    'readFeatures',
-    ol.format.GMLBase.prototype.readFeatures);
-
-goog.exportSymbol(
-    'ol.format.GPX',
-    ol.format.GPX,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.GPX.prototype,
-    'readFeature',
-    ol.format.GPX.prototype.readFeature);
-
-goog.exportProperty(
-    ol.format.GPX.prototype,
-    'readFeatures',
-    ol.format.GPX.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.GPX.prototype,
-    'readProjection',
-    ol.format.GPX.prototype.readProjection);
-
-goog.exportProperty(
-    ol.format.GPX.prototype,
-    'writeFeatures',
-    ol.format.GPX.prototype.writeFeatures);
-
-goog.exportProperty(
-    ol.format.GPX.prototype,
-    'writeFeaturesNode',
-    ol.format.GPX.prototype.writeFeaturesNode);
-
-goog.exportSymbol(
-    'ol.format.IGC',
-    ol.format.IGC,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.IGC.prototype,
-    'readFeature',
-    ol.format.IGC.prototype.readFeature);
-
-goog.exportProperty(
-    ol.format.IGC.prototype,
-    'readFeatures',
-    ol.format.IGC.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.IGC.prototype,
-    'readProjection',
-    ol.format.IGC.prototype.readProjection);
-
-goog.exportSymbol(
-    'ol.format.KML',
-    ol.format.KML,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.KML.prototype,
-    'readFeature',
-    ol.format.KML.prototype.readFeature);
-
-goog.exportProperty(
-    ol.format.KML.prototype,
-    'readFeatures',
-    ol.format.KML.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.KML.prototype,
-    'readName',
-    ol.format.KML.prototype.readName);
-
-goog.exportProperty(
-    ol.format.KML.prototype,
-    'readNetworkLinks',
-    ol.format.KML.prototype.readNetworkLinks);
-
-goog.exportProperty(
-    ol.format.KML.prototype,
-    'readProjection',
-    ol.format.KML.prototype.readProjection);
-
-goog.exportProperty(
-    ol.format.KML.prototype,
-    'writeFeatures',
-    ol.format.KML.prototype.writeFeatures);
-
-goog.exportProperty(
-    ol.format.KML.prototype,
-    'writeFeaturesNode',
-    ol.format.KML.prototype.writeFeaturesNode);
-
-goog.exportSymbol(
-    'ol.format.MVT',
-    ol.format.MVT,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.MVT.prototype,
-    'readFeatures',
-    ol.format.MVT.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.MVT.prototype,
-    'readProjection',
-    ol.format.MVT.prototype.readProjection);
-
-goog.exportProperty(
-    ol.format.MVT.prototype,
-    'setLayers',
-    ol.format.MVT.prototype.setLayers);
-
-goog.exportSymbol(
-    'ol.format.OSMXML',
-    ol.format.OSMXML,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.OSMXML.prototype,
-    'readFeatures',
-    ol.format.OSMXML.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.OSMXML.prototype,
-    'readProjection',
-    ol.format.OSMXML.prototype.readProjection);
-
-goog.exportSymbol(
-    'ol.format.Polyline',
-    ol.format.Polyline,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.Polyline.encodeDeltas',
-    ol.format.Polyline.encodeDeltas,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.Polyline.decodeDeltas',
-    ol.format.Polyline.decodeDeltas,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.Polyline.encodeFloats',
-    ol.format.Polyline.encodeFloats,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.Polyline.decodeFloats',
-    ol.format.Polyline.decodeFloats,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.Polyline.prototype,
-    'readFeature',
-    ol.format.Polyline.prototype.readFeature);
-
-goog.exportProperty(
-    ol.format.Polyline.prototype,
-    'readFeatures',
-    ol.format.Polyline.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.Polyline.prototype,
-    'readGeometry',
-    ol.format.Polyline.prototype.readGeometry);
-
-goog.exportProperty(
-    ol.format.Polyline.prototype,
-    'readProjection',
-    ol.format.Polyline.prototype.readProjection);
-
-goog.exportProperty(
-    ol.format.Polyline.prototype,
-    'writeGeometry',
-    ol.format.Polyline.prototype.writeGeometry);
-
-goog.exportSymbol(
-    'ol.format.TopoJSON',
-    ol.format.TopoJSON,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.TopoJSON.prototype,
-    'readFeatures',
-    ol.format.TopoJSON.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.TopoJSON.prototype,
-    'readProjection',
-    ol.format.TopoJSON.prototype.readProjection);
-
-goog.exportSymbol(
-    'ol.format.WFS',
-    ol.format.WFS,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.WFS.prototype,
-    'readFeatures',
-    ol.format.WFS.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.WFS.prototype,
-    'readTransactionResponse',
-    ol.format.WFS.prototype.readTransactionResponse);
-
-goog.exportProperty(
-    ol.format.WFS.prototype,
-    'readFeatureCollectionMetadata',
-    ol.format.WFS.prototype.readFeatureCollectionMetadata);
-
-goog.exportProperty(
-    ol.format.WFS.prototype,
-    'writeGetFeature',
-    ol.format.WFS.prototype.writeGetFeature);
-
-goog.exportProperty(
-    ol.format.WFS.prototype,
-    'writeTransaction',
-    ol.format.WFS.prototype.writeTransaction);
-
-goog.exportProperty(
-    ol.format.WFS.prototype,
-    'readProjection',
-    ol.format.WFS.prototype.readProjection);
-
-goog.exportSymbol(
-    'ol.format.WKT',
-    ol.format.WKT,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.WKT.prototype,
-    'readFeature',
-    ol.format.WKT.prototype.readFeature);
-
-goog.exportProperty(
-    ol.format.WKT.prototype,
-    'readFeatures',
-    ol.format.WKT.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.WKT.prototype,
-    'readGeometry',
-    ol.format.WKT.prototype.readGeometry);
-
-goog.exportProperty(
-    ol.format.WKT.prototype,
-    'writeFeature',
-    ol.format.WKT.prototype.writeFeature);
-
-goog.exportProperty(
-    ol.format.WKT.prototype,
-    'writeFeatures',
-    ol.format.WKT.prototype.writeFeatures);
-
-goog.exportProperty(
-    ol.format.WKT.prototype,
-    'writeGeometry',
-    ol.format.WKT.prototype.writeGeometry);
-
-goog.exportSymbol(
-    'ol.format.WMSCapabilities',
-    ol.format.WMSCapabilities,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.WMSCapabilities.prototype,
-    'read',
-    ol.format.WMSCapabilities.prototype.read);
-
-goog.exportSymbol(
-    'ol.format.WMSGetFeatureInfo',
-    ol.format.WMSGetFeatureInfo,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.WMSGetFeatureInfo.prototype,
-    'readFeatures',
-    ol.format.WMSGetFeatureInfo.prototype.readFeatures);
-
-goog.exportSymbol(
-    'ol.format.WMTSCapabilities',
-    ol.format.WMTSCapabilities,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.format.WMTSCapabilities.prototype,
-    'read',
-    ol.format.WMTSCapabilities.prototype.read);
-
-goog.exportSymbol(
-    'ol.format.filter.And',
-    ol.format.filter.And,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.Bbox',
-    ol.format.filter.Bbox,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.Comparison',
-    ol.format.filter.Comparison,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.ComparisonBinary',
-    ol.format.filter.ComparisonBinary,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.EqualTo',
-    ol.format.filter.EqualTo,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.Filter',
-    ol.format.filter.Filter,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.GreaterThan',
-    ol.format.filter.GreaterThan,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.GreaterThanOrEqualTo',
-    ol.format.filter.GreaterThanOrEqualTo,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.and',
-    ol.format.filter.and,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.or',
-    ol.format.filter.or,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.not',
-    ol.format.filter.not,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.bbox',
-    ol.format.filter.bbox,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.intersects',
-    ol.format.filter.intersects,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.within',
-    ol.format.filter.within,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.equalTo',
-    ol.format.filter.equalTo,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.notEqualTo',
-    ol.format.filter.notEqualTo,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.lessThan',
-    ol.format.filter.lessThan,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.lessThanOrEqualTo',
-    ol.format.filter.lessThanOrEqualTo,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.greaterThan',
-    ol.format.filter.greaterThan,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.greaterThanOrEqualTo',
-    ol.format.filter.greaterThanOrEqualTo,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.isNull',
-    ol.format.filter.isNull,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.between',
-    ol.format.filter.between,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.like',
-    ol.format.filter.like,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.Intersects',
-    ol.format.filter.Intersects,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.IsBetween',
-    ol.format.filter.IsBetween,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.IsLike',
-    ol.format.filter.IsLike,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.IsNull',
-    ol.format.filter.IsNull,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.LessThan',
-    ol.format.filter.LessThan,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.LessThanOrEqualTo',
-    ol.format.filter.LessThanOrEqualTo,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.Not',
-    ol.format.filter.Not,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.NotEqualTo',
-    ol.format.filter.NotEqualTo,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.Or',
-    ol.format.filter.Or,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.Spatial',
-    ol.format.filter.Spatial,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.format.filter.Within',
-    ol.format.filter.Within,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.altKeyOnly',
-    ol.events.condition.altKeyOnly,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.altShiftKeysOnly',
-    ol.events.condition.altShiftKeysOnly,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.always',
-    ol.events.condition.always,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.click',
-    ol.events.condition.click,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.never',
-    ol.events.condition.never,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.pointerMove',
-    ol.events.condition.pointerMove,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.singleClick',
-    ol.events.condition.singleClick,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.doubleClick',
-    ol.events.condition.doubleClick,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.noModifierKeys',
-    ol.events.condition.noModifierKeys,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.platformModifierKeyOnly',
-    ol.events.condition.platformModifierKeyOnly,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.shiftKeyOnly',
-    ol.events.condition.shiftKeyOnly,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.targetNotEditable',
-    ol.events.condition.targetNotEditable,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.mouseOnly',
-    ol.events.condition.mouseOnly,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.events.condition.primaryAction',
-    ol.events.condition.primaryAction,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.events.Event.prototype,
-    'type',
-    ol.events.Event.prototype.type);
-
-goog.exportProperty(
-    ol.events.Event.prototype,
-    'target',
-    ol.events.Event.prototype.target);
-
-goog.exportProperty(
-    ol.events.Event.prototype,
-    'preventDefault',
-    ol.events.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.events.Event.prototype,
-    'stopPropagation',
-    ol.events.Event.prototype.stopPropagation);
-
-goog.exportSymbol(
-    'ol.control.Attribution',
-    ol.control.Attribution,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.Attribution.render',
-    ol.control.Attribution.render,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'getCollapsible',
-    ol.control.Attribution.prototype.getCollapsible);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'setCollapsible',
-    ol.control.Attribution.prototype.setCollapsible);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'setCollapsed',
-    ol.control.Attribution.prototype.setCollapsed);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'getCollapsed',
-    ol.control.Attribution.prototype.getCollapsed);
-
-goog.exportSymbol(
-    'ol.control.Control',
-    ol.control.Control,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'getMap',
-    ol.control.Control.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'setMap',
-    ol.control.Control.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'setTarget',
-    ol.control.Control.prototype.setTarget);
-
-goog.exportSymbol(
-    'ol.control.FullScreen',
-    ol.control.FullScreen,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.defaults',
-    ol.control.defaults,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.MousePosition',
-    ol.control.MousePosition,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.MousePosition.render',
-    ol.control.MousePosition.render,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'getCoordinateFormat',
-    ol.control.MousePosition.prototype.getCoordinateFormat);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'getProjection',
-    ol.control.MousePosition.prototype.getProjection);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'setCoordinateFormat',
-    ol.control.MousePosition.prototype.setCoordinateFormat);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'setProjection',
-    ol.control.MousePosition.prototype.setProjection);
-
-goog.exportSymbol(
-    'ol.control.OverviewMap',
-    ol.control.OverviewMap,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.OverviewMap.render',
-    ol.control.OverviewMap.render,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'getCollapsible',
-    ol.control.OverviewMap.prototype.getCollapsible);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'setCollapsible',
-    ol.control.OverviewMap.prototype.setCollapsible);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'setCollapsed',
-    ol.control.OverviewMap.prototype.setCollapsed);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'getCollapsed',
-    ol.control.OverviewMap.prototype.getCollapsed);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'getOverviewMap',
-    ol.control.OverviewMap.prototype.getOverviewMap);
-
-goog.exportSymbol(
-    'ol.control.Rotate',
-    ol.control.Rotate,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.Rotate.render',
-    ol.control.Rotate.render,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.ScaleLine',
-    ol.control.ScaleLine,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'getUnits',
-    ol.control.ScaleLine.prototype.getUnits);
-
-goog.exportSymbol(
-    'ol.control.ScaleLine.render',
-    ol.control.ScaleLine.render,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'setUnits',
-    ol.control.ScaleLine.prototype.setUnits);
-
-goog.exportSymbol(
-    'ol.control.Zoom',
-    ol.control.Zoom,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.ZoomSlider',
-    ol.control.ZoomSlider,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.ZoomSlider.render',
-    ol.control.ZoomSlider.render,
-    OPENLAYERS);
-
-goog.exportSymbol(
-    'ol.control.ZoomToExtent',
-    ol.control.ZoomToExtent,
-    OPENLAYERS);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'changed',
-    ol.Object.prototype.changed);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'dispatchEvent',
-    ol.Object.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'getRevision',
-    ol.Object.prototype.getRevision);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'on',
-    ol.Object.prototype.on);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'once',
-    ol.Object.prototype.once);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'un',
-    ol.Object.prototype.un);
-
-goog.exportProperty(
-    ol.Object.prototype,
-    'unByKey',
-    ol.Object.prototype.unByKey);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'get',
-    ol.Collection.prototype.get);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'getKeys',
-    ol.Collection.prototype.getKeys);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'getProperties',
-    ol.Collection.prototype.getProperties);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'set',
-    ol.Collection.prototype.set);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'setProperties',
-    ol.Collection.prototype.setProperties);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'unset',
-    ol.Collection.prototype.unset);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'changed',
-    ol.Collection.prototype.changed);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'dispatchEvent',
-    ol.Collection.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'getRevision',
-    ol.Collection.prototype.getRevision);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'on',
-    ol.Collection.prototype.on);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'once',
-    ol.Collection.prototype.once);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'un',
-    ol.Collection.prototype.un);
-
-goog.exportProperty(
-    ol.Collection.prototype,
-    'unByKey',
-    ol.Collection.prototype.unByKey);
-
-goog.exportProperty(
-    ol.Collection.Event.prototype,
-    'type',
-    ol.Collection.Event.prototype.type);
-
-goog.exportProperty(
-    ol.Collection.Event.prototype,
-    'target',
-    ol.Collection.Event.prototype.target);
-
-goog.exportProperty(
-    ol.Collection.Event.prototype,
-    'preventDefault',
-    ol.Collection.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.Collection.Event.prototype,
-    'stopPropagation',
-    ol.Collection.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'get',
-    ol.DeviceOrientation.prototype.get);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'getKeys',
-    ol.DeviceOrientation.prototype.getKeys);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'getProperties',
-    ol.DeviceOrientation.prototype.getProperties);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'set',
-    ol.DeviceOrientation.prototype.set);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'setProperties',
-    ol.DeviceOrientation.prototype.setProperties);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'unset',
-    ol.DeviceOrientation.prototype.unset);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'changed',
-    ol.DeviceOrientation.prototype.changed);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'dispatchEvent',
-    ol.DeviceOrientation.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'getRevision',
-    ol.DeviceOrientation.prototype.getRevision);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'on',
-    ol.DeviceOrientation.prototype.on);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'once',
-    ol.DeviceOrientation.prototype.once);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'un',
-    ol.DeviceOrientation.prototype.un);
-
-goog.exportProperty(
-    ol.DeviceOrientation.prototype,
-    'unByKey',
-    ol.DeviceOrientation.prototype.unByKey);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'get',
-    ol.Feature.prototype.get);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'getKeys',
-    ol.Feature.prototype.getKeys);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'getProperties',
-    ol.Feature.prototype.getProperties);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'set',
-    ol.Feature.prototype.set);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'setProperties',
-    ol.Feature.prototype.setProperties);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'unset',
-    ol.Feature.prototype.unset);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'changed',
-    ol.Feature.prototype.changed);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'dispatchEvent',
-    ol.Feature.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'getRevision',
-    ol.Feature.prototype.getRevision);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'on',
-    ol.Feature.prototype.on);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'once',
-    ol.Feature.prototype.once);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'un',
-    ol.Feature.prototype.un);
-
-goog.exportProperty(
-    ol.Feature.prototype,
-    'unByKey',
-    ol.Feature.prototype.unByKey);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'get',
-    ol.Geolocation.prototype.get);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getKeys',
-    ol.Geolocation.prototype.getKeys);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getProperties',
-    ol.Geolocation.prototype.getProperties);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'set',
-    ol.Geolocation.prototype.set);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'setProperties',
-    ol.Geolocation.prototype.setProperties);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'unset',
-    ol.Geolocation.prototype.unset);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'changed',
-    ol.Geolocation.prototype.changed);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'dispatchEvent',
-    ol.Geolocation.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'getRevision',
-    ol.Geolocation.prototype.getRevision);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'on',
-    ol.Geolocation.prototype.on);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'once',
-    ol.Geolocation.prototype.once);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'un',
-    ol.Geolocation.prototype.un);
-
-goog.exportProperty(
-    ol.Geolocation.prototype,
-    'unByKey',
-    ol.Geolocation.prototype.unByKey);
-
-goog.exportProperty(
-    ol.ImageTile.prototype,
-    'getTileCoord',
-    ol.ImageTile.prototype.getTileCoord);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'get',
-    ol.Map.prototype.get);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getKeys',
-    ol.Map.prototype.getKeys);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getProperties',
-    ol.Map.prototype.getProperties);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'set',
-    ol.Map.prototype.set);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'setProperties',
-    ol.Map.prototype.setProperties);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'unset',
-    ol.Map.prototype.unset);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'changed',
-    ol.Map.prototype.changed);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'dispatchEvent',
-    ol.Map.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'getRevision',
-    ol.Map.prototype.getRevision);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'on',
-    ol.Map.prototype.on);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'once',
-    ol.Map.prototype.once);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'un',
-    ol.Map.prototype.un);
-
-goog.exportProperty(
-    ol.Map.prototype,
-    'unByKey',
-    ol.Map.prototype.unByKey);
-
-goog.exportProperty(
-    ol.MapEvent.prototype,
-    'type',
-    ol.MapEvent.prototype.type);
-
-goog.exportProperty(
-    ol.MapEvent.prototype,
-    'target',
-    ol.MapEvent.prototype.target);
-
-goog.exportProperty(
-    ol.MapEvent.prototype,
-    'preventDefault',
-    ol.MapEvent.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.MapEvent.prototype,
-    'stopPropagation',
-    ol.MapEvent.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'map',
-    ol.MapBrowserEvent.prototype.map);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'frameState',
-    ol.MapBrowserEvent.prototype.frameState);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'type',
-    ol.MapBrowserEvent.prototype.type);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'target',
-    ol.MapBrowserEvent.prototype.target);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'preventDefault',
-    ol.MapBrowserEvent.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.MapBrowserEvent.prototype,
-    'stopPropagation',
-    ol.MapBrowserEvent.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'originalEvent',
-    ol.MapBrowserPointerEvent.prototype.originalEvent);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'pixel',
-    ol.MapBrowserPointerEvent.prototype.pixel);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'coordinate',
-    ol.MapBrowserPointerEvent.prototype.coordinate);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'dragging',
-    ol.MapBrowserPointerEvent.prototype.dragging);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'preventDefault',
-    ol.MapBrowserPointerEvent.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'stopPropagation',
-    ol.MapBrowserPointerEvent.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'map',
-    ol.MapBrowserPointerEvent.prototype.map);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'frameState',
-    ol.MapBrowserPointerEvent.prototype.frameState);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'type',
-    ol.MapBrowserPointerEvent.prototype.type);
-
-goog.exportProperty(
-    ol.MapBrowserPointerEvent.prototype,
-    'target',
-    ol.MapBrowserPointerEvent.prototype.target);
-
-goog.exportProperty(
-    ol.ObjectEvent.prototype,
-    'type',
-    ol.ObjectEvent.prototype.type);
-
-goog.exportProperty(
-    ol.ObjectEvent.prototype,
-    'target',
-    ol.ObjectEvent.prototype.target);
-
-goog.exportProperty(
-    ol.ObjectEvent.prototype,
-    'preventDefault',
-    ol.ObjectEvent.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.ObjectEvent.prototype,
-    'stopPropagation',
-    ol.ObjectEvent.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'get',
-    ol.Overlay.prototype.get);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getKeys',
-    ol.Overlay.prototype.getKeys);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getProperties',
-    ol.Overlay.prototype.getProperties);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'set',
-    ol.Overlay.prototype.set);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'setProperties',
-    ol.Overlay.prototype.setProperties);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'unset',
-    ol.Overlay.prototype.unset);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'changed',
-    ol.Overlay.prototype.changed);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'dispatchEvent',
-    ol.Overlay.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'getRevision',
-    ol.Overlay.prototype.getRevision);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'on',
-    ol.Overlay.prototype.on);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'once',
-    ol.Overlay.prototype.once);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'un',
-    ol.Overlay.prototype.un);
-
-goog.exportProperty(
-    ol.Overlay.prototype,
-    'unByKey',
-    ol.Overlay.prototype.unByKey);
-
-goog.exportProperty(
-    ol.VectorTile.prototype,
-    'getTileCoord',
-    ol.VectorTile.prototype.getTileCoord);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'get',
-    ol.View.prototype.get);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getKeys',
-    ol.View.prototype.getKeys);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getProperties',
-    ol.View.prototype.getProperties);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'set',
-    ol.View.prototype.set);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'setProperties',
-    ol.View.prototype.setProperties);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'unset',
-    ol.View.prototype.unset);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'changed',
-    ol.View.prototype.changed);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'dispatchEvent',
-    ol.View.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'getRevision',
-    ol.View.prototype.getRevision);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'on',
-    ol.View.prototype.on);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'once',
-    ol.View.prototype.once);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'un',
-    ol.View.prototype.un);
-
-goog.exportProperty(
-    ol.View.prototype,
-    'unByKey',
-    ol.View.prototype.unByKey);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'forEachTileCoord',
-    ol.tilegrid.WMTS.prototype.forEachTileCoord);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getMaxZoom',
-    ol.tilegrid.WMTS.prototype.getMaxZoom);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getMinZoom',
-    ol.tilegrid.WMTS.prototype.getMinZoom);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getOrigin',
-    ol.tilegrid.WMTS.prototype.getOrigin);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getResolution',
-    ol.tilegrid.WMTS.prototype.getResolution);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getResolutions',
-    ol.tilegrid.WMTS.prototype.getResolutions);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getTileCoordExtent',
-    ol.tilegrid.WMTS.prototype.getTileCoordExtent);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getTileCoordForCoordAndResolution',
-    ol.tilegrid.WMTS.prototype.getTileCoordForCoordAndResolution);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getTileCoordForCoordAndZ',
-    ol.tilegrid.WMTS.prototype.getTileCoordForCoordAndZ);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getTileSize',
-    ol.tilegrid.WMTS.prototype.getTileSize);
-
-goog.exportProperty(
-    ol.tilegrid.WMTS.prototype,
-    'getZForResolution',
-    ol.tilegrid.WMTS.prototype.getZForResolution);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getOpacity',
-    ol.style.Circle.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getRotateWithView',
-    ol.style.Circle.prototype.getRotateWithView);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getRotation',
-    ol.style.Circle.prototype.getRotation);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getScale',
-    ol.style.Circle.prototype.getScale);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'getSnapToPixel',
-    ol.style.Circle.prototype.getSnapToPixel);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'setOpacity',
-    ol.style.Circle.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'setRotation',
-    ol.style.Circle.prototype.setRotation);
-
-goog.exportProperty(
-    ol.style.Circle.prototype,
-    'setScale',
-    ol.style.Circle.prototype.setScale);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getOpacity',
-    ol.style.Icon.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getRotateWithView',
-    ol.style.Icon.prototype.getRotateWithView);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getRotation',
-    ol.style.Icon.prototype.getRotation);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getScale',
-    ol.style.Icon.prototype.getScale);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'getSnapToPixel',
-    ol.style.Icon.prototype.getSnapToPixel);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'setOpacity',
-    ol.style.Icon.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'setRotation',
-    ol.style.Icon.prototype.setRotation);
-
-goog.exportProperty(
-    ol.style.Icon.prototype,
-    'setScale',
-    ol.style.Icon.prototype.setScale);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getOpacity',
-    ol.style.RegularShape.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getRotateWithView',
-    ol.style.RegularShape.prototype.getRotateWithView);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getRotation',
-    ol.style.RegularShape.prototype.getRotation);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getScale',
-    ol.style.RegularShape.prototype.getScale);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'getSnapToPixel',
-    ol.style.RegularShape.prototype.getSnapToPixel);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'setOpacity',
-    ol.style.RegularShape.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'setRotation',
-    ol.style.RegularShape.prototype.setRotation);
-
-goog.exportProperty(
-    ol.style.RegularShape.prototype,
-    'setScale',
-    ol.style.RegularShape.prototype.setScale);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'get',
-    ol.source.Source.prototype.get);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'getKeys',
-    ol.source.Source.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'getProperties',
-    ol.source.Source.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'set',
-    ol.source.Source.prototype.set);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'setProperties',
-    ol.source.Source.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'unset',
-    ol.source.Source.prototype.unset);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'changed',
-    ol.source.Source.prototype.changed);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'dispatchEvent',
-    ol.source.Source.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'getRevision',
-    ol.source.Source.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'on',
-    ol.source.Source.prototype.on);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'once',
-    ol.source.Source.prototype.once);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'un',
-    ol.source.Source.prototype.un);
-
-goog.exportProperty(
-    ol.source.Source.prototype,
-    'unByKey',
-    ol.source.Source.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'getAttributions',
-    ol.source.Tile.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'getLogo',
-    ol.source.Tile.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'getProjection',
-    ol.source.Tile.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'getState',
-    ol.source.Tile.prototype.getState);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'refresh',
-    ol.source.Tile.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'setAttributions',
-    ol.source.Tile.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'get',
-    ol.source.Tile.prototype.get);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'getKeys',
-    ol.source.Tile.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'getProperties',
-    ol.source.Tile.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'set',
-    ol.source.Tile.prototype.set);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'setProperties',
-    ol.source.Tile.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'unset',
-    ol.source.Tile.prototype.unset);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'changed',
-    ol.source.Tile.prototype.changed);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'dispatchEvent',
-    ol.source.Tile.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'getRevision',
-    ol.source.Tile.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'on',
-    ol.source.Tile.prototype.on);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'once',
-    ol.source.Tile.prototype.once);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'un',
-    ol.source.Tile.prototype.un);
-
-goog.exportProperty(
-    ol.source.Tile.prototype,
-    'unByKey',
-    ol.source.Tile.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getTileGrid',
-    ol.source.UrlTile.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'refresh',
-    ol.source.UrlTile.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getAttributions',
-    ol.source.UrlTile.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getLogo',
-    ol.source.UrlTile.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getProjection',
-    ol.source.UrlTile.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getState',
-    ol.source.UrlTile.prototype.getState);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'setAttributions',
-    ol.source.UrlTile.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'get',
-    ol.source.UrlTile.prototype.get);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getKeys',
-    ol.source.UrlTile.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getProperties',
-    ol.source.UrlTile.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'set',
-    ol.source.UrlTile.prototype.set);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'setProperties',
-    ol.source.UrlTile.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'unset',
-    ol.source.UrlTile.prototype.unset);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'changed',
-    ol.source.UrlTile.prototype.changed);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'dispatchEvent',
-    ol.source.UrlTile.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'getRevision',
-    ol.source.UrlTile.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'on',
-    ol.source.UrlTile.prototype.on);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'once',
-    ol.source.UrlTile.prototype.once);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'un',
-    ol.source.UrlTile.prototype.un);
-
-goog.exportProperty(
-    ol.source.UrlTile.prototype,
-    'unByKey',
-    ol.source.UrlTile.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getTileLoadFunction',
-    ol.source.TileImage.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getTileUrlFunction',
-    ol.source.TileImage.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getUrls',
-    ol.source.TileImage.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'setTileLoadFunction',
-    ol.source.TileImage.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'setTileUrlFunction',
-    ol.source.TileImage.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'setUrl',
-    ol.source.TileImage.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'setUrls',
-    ol.source.TileImage.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getTileGrid',
-    ol.source.TileImage.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'refresh',
-    ol.source.TileImage.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getAttributions',
-    ol.source.TileImage.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getLogo',
-    ol.source.TileImage.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getProjection',
-    ol.source.TileImage.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getState',
-    ol.source.TileImage.prototype.getState);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'setAttributions',
-    ol.source.TileImage.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'get',
-    ol.source.TileImage.prototype.get);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getKeys',
-    ol.source.TileImage.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getProperties',
-    ol.source.TileImage.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'set',
-    ol.source.TileImage.prototype.set);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'setProperties',
-    ol.source.TileImage.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'unset',
-    ol.source.TileImage.prototype.unset);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'changed',
-    ol.source.TileImage.prototype.changed);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'dispatchEvent',
-    ol.source.TileImage.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'getRevision',
-    ol.source.TileImage.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'on',
-    ol.source.TileImage.prototype.on);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'once',
-    ol.source.TileImage.prototype.once);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'un',
-    ol.source.TileImage.prototype.un);
-
-goog.exportProperty(
-    ol.source.TileImage.prototype,
-    'unByKey',
-    ol.source.TileImage.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.BingMaps.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'setTileGridForProjection',
-    ol.source.BingMaps.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getTileLoadFunction',
-    ol.source.BingMaps.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getTileUrlFunction',
-    ol.source.BingMaps.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getUrls',
-    ol.source.BingMaps.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'setTileLoadFunction',
-    ol.source.BingMaps.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'setTileUrlFunction',
-    ol.source.BingMaps.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'setUrl',
-    ol.source.BingMaps.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'setUrls',
-    ol.source.BingMaps.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getTileGrid',
-    ol.source.BingMaps.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'refresh',
-    ol.source.BingMaps.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getAttributions',
-    ol.source.BingMaps.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getLogo',
-    ol.source.BingMaps.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getProjection',
-    ol.source.BingMaps.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getState',
-    ol.source.BingMaps.prototype.getState);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'setAttributions',
-    ol.source.BingMaps.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'get',
-    ol.source.BingMaps.prototype.get);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getKeys',
-    ol.source.BingMaps.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getProperties',
-    ol.source.BingMaps.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'set',
-    ol.source.BingMaps.prototype.set);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'setProperties',
-    ol.source.BingMaps.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'unset',
-    ol.source.BingMaps.prototype.unset);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'changed',
-    ol.source.BingMaps.prototype.changed);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'dispatchEvent',
-    ol.source.BingMaps.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'getRevision',
-    ol.source.BingMaps.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'on',
-    ol.source.BingMaps.prototype.on);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'once',
-    ol.source.BingMaps.prototype.once);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'un',
-    ol.source.BingMaps.prototype.un);
-
-goog.exportProperty(
-    ol.source.BingMaps.prototype,
-    'unByKey',
-    ol.source.BingMaps.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.XYZ.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'setTileGridForProjection',
-    ol.source.XYZ.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getTileLoadFunction',
-    ol.source.XYZ.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getTileUrlFunction',
-    ol.source.XYZ.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getUrls',
-    ol.source.XYZ.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'setTileLoadFunction',
-    ol.source.XYZ.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'setTileUrlFunction',
-    ol.source.XYZ.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'setUrl',
-    ol.source.XYZ.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'setUrls',
-    ol.source.XYZ.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getTileGrid',
-    ol.source.XYZ.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'refresh',
-    ol.source.XYZ.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getAttributions',
-    ol.source.XYZ.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getLogo',
-    ol.source.XYZ.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getProjection',
-    ol.source.XYZ.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getState',
-    ol.source.XYZ.prototype.getState);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'setAttributions',
-    ol.source.XYZ.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'get',
-    ol.source.XYZ.prototype.get);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getKeys',
-    ol.source.XYZ.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getProperties',
-    ol.source.XYZ.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'set',
-    ol.source.XYZ.prototype.set);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'setProperties',
-    ol.source.XYZ.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'unset',
-    ol.source.XYZ.prototype.unset);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'changed',
-    ol.source.XYZ.prototype.changed);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'dispatchEvent',
-    ol.source.XYZ.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'getRevision',
-    ol.source.XYZ.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'on',
-    ol.source.XYZ.prototype.on);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'once',
-    ol.source.XYZ.prototype.once);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'un',
-    ol.source.XYZ.prototype.un);
-
-goog.exportProperty(
-    ol.source.XYZ.prototype,
-    'unByKey',
-    ol.source.XYZ.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.CartoDB.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setTileGridForProjection',
-    ol.source.CartoDB.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getTileLoadFunction',
-    ol.source.CartoDB.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getTileUrlFunction',
-    ol.source.CartoDB.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getUrls',
-    ol.source.CartoDB.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setTileLoadFunction',
-    ol.source.CartoDB.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setTileUrlFunction',
-    ol.source.CartoDB.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setUrl',
-    ol.source.CartoDB.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setUrls',
-    ol.source.CartoDB.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getTileGrid',
-    ol.source.CartoDB.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'refresh',
-    ol.source.CartoDB.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getAttributions',
-    ol.source.CartoDB.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getLogo',
-    ol.source.CartoDB.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getProjection',
-    ol.source.CartoDB.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getState',
-    ol.source.CartoDB.prototype.getState);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setAttributions',
-    ol.source.CartoDB.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'get',
-    ol.source.CartoDB.prototype.get);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getKeys',
-    ol.source.CartoDB.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getProperties',
-    ol.source.CartoDB.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'set',
-    ol.source.CartoDB.prototype.set);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'setProperties',
-    ol.source.CartoDB.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'unset',
-    ol.source.CartoDB.prototype.unset);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'changed',
-    ol.source.CartoDB.prototype.changed);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'dispatchEvent',
-    ol.source.CartoDB.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'getRevision',
-    ol.source.CartoDB.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'on',
-    ol.source.CartoDB.prototype.on);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'once',
-    ol.source.CartoDB.prototype.once);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'un',
-    ol.source.CartoDB.prototype.un);
-
-goog.exportProperty(
-    ol.source.CartoDB.prototype,
-    'unByKey',
-    ol.source.CartoDB.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getAttributions',
-    ol.source.Vector.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getLogo',
-    ol.source.Vector.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getProjection',
-    ol.source.Vector.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getState',
-    ol.source.Vector.prototype.getState);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'refresh',
-    ol.source.Vector.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'setAttributions',
-    ol.source.Vector.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'get',
-    ol.source.Vector.prototype.get);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getKeys',
-    ol.source.Vector.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getProperties',
-    ol.source.Vector.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'set',
-    ol.source.Vector.prototype.set);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'setProperties',
-    ol.source.Vector.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'unset',
-    ol.source.Vector.prototype.unset);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'changed',
-    ol.source.Vector.prototype.changed);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'dispatchEvent',
-    ol.source.Vector.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'getRevision',
-    ol.source.Vector.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'on',
-    ol.source.Vector.prototype.on);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'once',
-    ol.source.Vector.prototype.once);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'un',
-    ol.source.Vector.prototype.un);
-
-goog.exportProperty(
-    ol.source.Vector.prototype,
-    'unByKey',
-    ol.source.Vector.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'addFeature',
-    ol.source.Cluster.prototype.addFeature);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'addFeatures',
-    ol.source.Cluster.prototype.addFeatures);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'clear',
-    ol.source.Cluster.prototype.clear);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'forEachFeature',
-    ol.source.Cluster.prototype.forEachFeature);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'forEachFeatureInExtent',
-    ol.source.Cluster.prototype.forEachFeatureInExtent);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'forEachFeatureIntersectingExtent',
-    ol.source.Cluster.prototype.forEachFeatureIntersectingExtent);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getFeaturesCollection',
-    ol.source.Cluster.prototype.getFeaturesCollection);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getFeatures',
-    ol.source.Cluster.prototype.getFeatures);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getFeaturesAtCoordinate',
-    ol.source.Cluster.prototype.getFeaturesAtCoordinate);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getFeaturesInExtent',
-    ol.source.Cluster.prototype.getFeaturesInExtent);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getClosestFeatureToCoordinate',
-    ol.source.Cluster.prototype.getClosestFeatureToCoordinate);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getExtent',
-    ol.source.Cluster.prototype.getExtent);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getFeatureById',
-    ol.source.Cluster.prototype.getFeatureById);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getFormat',
-    ol.source.Cluster.prototype.getFormat);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getUrl',
-    ol.source.Cluster.prototype.getUrl);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'removeFeature',
-    ol.source.Cluster.prototype.removeFeature);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getAttributions',
-    ol.source.Cluster.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getLogo',
-    ol.source.Cluster.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getProjection',
-    ol.source.Cluster.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getState',
-    ol.source.Cluster.prototype.getState);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'refresh',
-    ol.source.Cluster.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'setAttributions',
-    ol.source.Cluster.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'get',
-    ol.source.Cluster.prototype.get);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getKeys',
-    ol.source.Cluster.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getProperties',
-    ol.source.Cluster.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'set',
-    ol.source.Cluster.prototype.set);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'setProperties',
-    ol.source.Cluster.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'unset',
-    ol.source.Cluster.prototype.unset);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'changed',
-    ol.source.Cluster.prototype.changed);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'dispatchEvent',
-    ol.source.Cluster.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'getRevision',
-    ol.source.Cluster.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'on',
-    ol.source.Cluster.prototype.on);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'once',
-    ol.source.Cluster.prototype.once);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'un',
-    ol.source.Cluster.prototype.un);
-
-goog.exportProperty(
-    ol.source.Cluster.prototype,
-    'unByKey',
-    ol.source.Cluster.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'getAttributions',
-    ol.source.Image.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'getLogo',
-    ol.source.Image.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'getProjection',
-    ol.source.Image.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'getState',
-    ol.source.Image.prototype.getState);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'refresh',
-    ol.source.Image.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'setAttributions',
-    ol.source.Image.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'get',
-    ol.source.Image.prototype.get);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'getKeys',
-    ol.source.Image.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'getProperties',
-    ol.source.Image.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'set',
-    ol.source.Image.prototype.set);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'setProperties',
-    ol.source.Image.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'unset',
-    ol.source.Image.prototype.unset);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'changed',
-    ol.source.Image.prototype.changed);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'dispatchEvent',
-    ol.source.Image.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'getRevision',
-    ol.source.Image.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'on',
-    ol.source.Image.prototype.on);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'once',
-    ol.source.Image.prototype.once);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'un',
-    ol.source.Image.prototype.un);
-
-goog.exportProperty(
-    ol.source.Image.prototype,
-    'unByKey',
-    ol.source.Image.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Image.Event.prototype,
-    'type',
-    ol.source.Image.Event.prototype.type);
-
-goog.exportProperty(
-    ol.source.Image.Event.prototype,
-    'target',
-    ol.source.Image.Event.prototype.target);
-
-goog.exportProperty(
-    ol.source.Image.Event.prototype,
-    'preventDefault',
-    ol.source.Image.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.source.Image.Event.prototype,
-    'stopPropagation',
-    ol.source.Image.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getAttributions',
-    ol.source.ImageArcGISRest.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getLogo',
-    ol.source.ImageArcGISRest.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getProjection',
-    ol.source.ImageArcGISRest.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getState',
-    ol.source.ImageArcGISRest.prototype.getState);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'refresh',
-    ol.source.ImageArcGISRest.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'setAttributions',
-    ol.source.ImageArcGISRest.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'get',
-    ol.source.ImageArcGISRest.prototype.get);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getKeys',
-    ol.source.ImageArcGISRest.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getProperties',
-    ol.source.ImageArcGISRest.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'set',
-    ol.source.ImageArcGISRest.prototype.set);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'setProperties',
-    ol.source.ImageArcGISRest.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'unset',
-    ol.source.ImageArcGISRest.prototype.unset);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'changed',
-    ol.source.ImageArcGISRest.prototype.changed);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'dispatchEvent',
-    ol.source.ImageArcGISRest.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'getRevision',
-    ol.source.ImageArcGISRest.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'on',
-    ol.source.ImageArcGISRest.prototype.on);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'once',
-    ol.source.ImageArcGISRest.prototype.once);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'un',
-    ol.source.ImageArcGISRest.prototype.un);
-
-goog.exportProperty(
-    ol.source.ImageArcGISRest.prototype,
-    'unByKey',
-    ol.source.ImageArcGISRest.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'getAttributions',
-    ol.source.ImageCanvas.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'getLogo',
-    ol.source.ImageCanvas.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'getProjection',
-    ol.source.ImageCanvas.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'getState',
-    ol.source.ImageCanvas.prototype.getState);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'refresh',
-    ol.source.ImageCanvas.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'setAttributions',
-    ol.source.ImageCanvas.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'get',
-    ol.source.ImageCanvas.prototype.get);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'getKeys',
-    ol.source.ImageCanvas.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'getProperties',
-    ol.source.ImageCanvas.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'set',
-    ol.source.ImageCanvas.prototype.set);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'setProperties',
-    ol.source.ImageCanvas.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'unset',
-    ol.source.ImageCanvas.prototype.unset);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'changed',
-    ol.source.ImageCanvas.prototype.changed);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'dispatchEvent',
-    ol.source.ImageCanvas.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'getRevision',
-    ol.source.ImageCanvas.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'on',
-    ol.source.ImageCanvas.prototype.on);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'once',
-    ol.source.ImageCanvas.prototype.once);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'un',
-    ol.source.ImageCanvas.prototype.un);
-
-goog.exportProperty(
-    ol.source.ImageCanvas.prototype,
-    'unByKey',
-    ol.source.ImageCanvas.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getAttributions',
-    ol.source.ImageMapGuide.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getLogo',
-    ol.source.ImageMapGuide.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getProjection',
-    ol.source.ImageMapGuide.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getState',
-    ol.source.ImageMapGuide.prototype.getState);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'refresh',
-    ol.source.ImageMapGuide.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'setAttributions',
-    ol.source.ImageMapGuide.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'get',
-    ol.source.ImageMapGuide.prototype.get);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getKeys',
-    ol.source.ImageMapGuide.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getProperties',
-    ol.source.ImageMapGuide.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'set',
-    ol.source.ImageMapGuide.prototype.set);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'setProperties',
-    ol.source.ImageMapGuide.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'unset',
-    ol.source.ImageMapGuide.prototype.unset);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'changed',
-    ol.source.ImageMapGuide.prototype.changed);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'dispatchEvent',
-    ol.source.ImageMapGuide.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'getRevision',
-    ol.source.ImageMapGuide.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'on',
-    ol.source.ImageMapGuide.prototype.on);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'once',
-    ol.source.ImageMapGuide.prototype.once);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'un',
-    ol.source.ImageMapGuide.prototype.un);
-
-goog.exportProperty(
-    ol.source.ImageMapGuide.prototype,
-    'unByKey',
-    ol.source.ImageMapGuide.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'getAttributions',
-    ol.source.ImageStatic.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'getLogo',
-    ol.source.ImageStatic.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'getProjection',
-    ol.source.ImageStatic.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'getState',
-    ol.source.ImageStatic.prototype.getState);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'refresh',
-    ol.source.ImageStatic.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'setAttributions',
-    ol.source.ImageStatic.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'get',
-    ol.source.ImageStatic.prototype.get);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'getKeys',
-    ol.source.ImageStatic.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'getProperties',
-    ol.source.ImageStatic.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'set',
-    ol.source.ImageStatic.prototype.set);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'setProperties',
-    ol.source.ImageStatic.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'unset',
-    ol.source.ImageStatic.prototype.unset);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'changed',
-    ol.source.ImageStatic.prototype.changed);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'dispatchEvent',
-    ol.source.ImageStatic.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'getRevision',
-    ol.source.ImageStatic.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'on',
-    ol.source.ImageStatic.prototype.on);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'once',
-    ol.source.ImageStatic.prototype.once);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'un',
-    ol.source.ImageStatic.prototype.un);
-
-goog.exportProperty(
-    ol.source.ImageStatic.prototype,
-    'unByKey',
-    ol.source.ImageStatic.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getAttributions',
-    ol.source.ImageVector.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getLogo',
-    ol.source.ImageVector.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getProjection',
-    ol.source.ImageVector.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getState',
-    ol.source.ImageVector.prototype.getState);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'refresh',
-    ol.source.ImageVector.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'setAttributions',
-    ol.source.ImageVector.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'get',
-    ol.source.ImageVector.prototype.get);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getKeys',
-    ol.source.ImageVector.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getProperties',
-    ol.source.ImageVector.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'set',
-    ol.source.ImageVector.prototype.set);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'setProperties',
-    ol.source.ImageVector.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'unset',
-    ol.source.ImageVector.prototype.unset);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'changed',
-    ol.source.ImageVector.prototype.changed);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'dispatchEvent',
-    ol.source.ImageVector.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'getRevision',
-    ol.source.ImageVector.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'on',
-    ol.source.ImageVector.prototype.on);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'once',
-    ol.source.ImageVector.prototype.once);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'un',
-    ol.source.ImageVector.prototype.un);
-
-goog.exportProperty(
-    ol.source.ImageVector.prototype,
-    'unByKey',
-    ol.source.ImageVector.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getAttributions',
-    ol.source.ImageWMS.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getLogo',
-    ol.source.ImageWMS.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getProjection',
-    ol.source.ImageWMS.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getState',
-    ol.source.ImageWMS.prototype.getState);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'refresh',
-    ol.source.ImageWMS.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'setAttributions',
-    ol.source.ImageWMS.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'get',
-    ol.source.ImageWMS.prototype.get);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getKeys',
-    ol.source.ImageWMS.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getProperties',
-    ol.source.ImageWMS.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'set',
-    ol.source.ImageWMS.prototype.set);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'setProperties',
-    ol.source.ImageWMS.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'unset',
-    ol.source.ImageWMS.prototype.unset);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'changed',
-    ol.source.ImageWMS.prototype.changed);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'dispatchEvent',
-    ol.source.ImageWMS.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'getRevision',
-    ol.source.ImageWMS.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'on',
-    ol.source.ImageWMS.prototype.on);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'once',
-    ol.source.ImageWMS.prototype.once);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'un',
-    ol.source.ImageWMS.prototype.un);
-
-goog.exportProperty(
-    ol.source.ImageWMS.prototype,
-    'unByKey',
-    ol.source.ImageWMS.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.OSM.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'setTileGridForProjection',
-    ol.source.OSM.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getTileLoadFunction',
-    ol.source.OSM.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getTileUrlFunction',
-    ol.source.OSM.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getUrls',
-    ol.source.OSM.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'setTileLoadFunction',
-    ol.source.OSM.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'setTileUrlFunction',
-    ol.source.OSM.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'setUrl',
-    ol.source.OSM.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'setUrls',
-    ol.source.OSM.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getTileGrid',
-    ol.source.OSM.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'refresh',
-    ol.source.OSM.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getAttributions',
-    ol.source.OSM.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getLogo',
-    ol.source.OSM.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getProjection',
-    ol.source.OSM.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getState',
-    ol.source.OSM.prototype.getState);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'setAttributions',
-    ol.source.OSM.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'get',
-    ol.source.OSM.prototype.get);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getKeys',
-    ol.source.OSM.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getProperties',
-    ol.source.OSM.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'set',
-    ol.source.OSM.prototype.set);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'setProperties',
-    ol.source.OSM.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'unset',
-    ol.source.OSM.prototype.unset);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'changed',
-    ol.source.OSM.prototype.changed);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'dispatchEvent',
-    ol.source.OSM.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'getRevision',
-    ol.source.OSM.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'on',
-    ol.source.OSM.prototype.on);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'once',
-    ol.source.OSM.prototype.once);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'un',
-    ol.source.OSM.prototype.un);
-
-goog.exportProperty(
-    ol.source.OSM.prototype,
-    'unByKey',
-    ol.source.OSM.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'getAttributions',
-    ol.source.Raster.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'getLogo',
-    ol.source.Raster.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'getProjection',
-    ol.source.Raster.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'getState',
-    ol.source.Raster.prototype.getState);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'refresh',
-    ol.source.Raster.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'setAttributions',
-    ol.source.Raster.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'get',
-    ol.source.Raster.prototype.get);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'getKeys',
-    ol.source.Raster.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'getProperties',
-    ol.source.Raster.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'set',
-    ol.source.Raster.prototype.set);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'setProperties',
-    ol.source.Raster.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'unset',
-    ol.source.Raster.prototype.unset);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'changed',
-    ol.source.Raster.prototype.changed);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'dispatchEvent',
-    ol.source.Raster.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'getRevision',
-    ol.source.Raster.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'on',
-    ol.source.Raster.prototype.on);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'once',
-    ol.source.Raster.prototype.once);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'un',
-    ol.source.Raster.prototype.un);
-
-goog.exportProperty(
-    ol.source.Raster.prototype,
-    'unByKey',
-    ol.source.Raster.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Raster.Event.prototype,
-    'type',
-    ol.source.Raster.Event.prototype.type);
-
-goog.exportProperty(
-    ol.source.Raster.Event.prototype,
-    'target',
-    ol.source.Raster.Event.prototype.target);
-
-goog.exportProperty(
-    ol.source.Raster.Event.prototype,
-    'preventDefault',
-    ol.source.Raster.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.source.Raster.Event.prototype,
-    'stopPropagation',
-    ol.source.Raster.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.Stamen.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'setTileGridForProjection',
-    ol.source.Stamen.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getTileLoadFunction',
-    ol.source.Stamen.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getTileUrlFunction',
-    ol.source.Stamen.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getUrls',
-    ol.source.Stamen.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'setTileLoadFunction',
-    ol.source.Stamen.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'setTileUrlFunction',
-    ol.source.Stamen.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'setUrl',
-    ol.source.Stamen.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'setUrls',
-    ol.source.Stamen.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getTileGrid',
-    ol.source.Stamen.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'refresh',
-    ol.source.Stamen.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getAttributions',
-    ol.source.Stamen.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getLogo',
-    ol.source.Stamen.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getProjection',
-    ol.source.Stamen.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getState',
-    ol.source.Stamen.prototype.getState);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'setAttributions',
-    ol.source.Stamen.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'get',
-    ol.source.Stamen.prototype.get);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getKeys',
-    ol.source.Stamen.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getProperties',
-    ol.source.Stamen.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'set',
-    ol.source.Stamen.prototype.set);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'setProperties',
-    ol.source.Stamen.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'unset',
-    ol.source.Stamen.prototype.unset);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'changed',
-    ol.source.Stamen.prototype.changed);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'dispatchEvent',
-    ol.source.Stamen.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'getRevision',
-    ol.source.Stamen.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'on',
-    ol.source.Stamen.prototype.on);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'once',
-    ol.source.Stamen.prototype.once);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'un',
-    ol.source.Stamen.prototype.un);
-
-goog.exportProperty(
-    ol.source.Stamen.prototype,
-    'unByKey',
-    ol.source.Stamen.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Tile.Event.prototype,
-    'type',
-    ol.source.Tile.Event.prototype.type);
-
-goog.exportProperty(
-    ol.source.Tile.Event.prototype,
-    'target',
-    ol.source.Tile.Event.prototype.target);
-
-goog.exportProperty(
-    ol.source.Tile.Event.prototype,
-    'preventDefault',
-    ol.source.Tile.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.source.Tile.Event.prototype,
-    'stopPropagation',
-    ol.source.Tile.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.TileArcGISRest.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'setTileGridForProjection',
-    ol.source.TileArcGISRest.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getTileLoadFunction',
-    ol.source.TileArcGISRest.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getTileUrlFunction',
-    ol.source.TileArcGISRest.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getUrls',
-    ol.source.TileArcGISRest.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'setTileLoadFunction',
-    ol.source.TileArcGISRest.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'setTileUrlFunction',
-    ol.source.TileArcGISRest.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'setUrl',
-    ol.source.TileArcGISRest.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'setUrls',
-    ol.source.TileArcGISRest.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getTileGrid',
-    ol.source.TileArcGISRest.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'refresh',
-    ol.source.TileArcGISRest.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getAttributions',
-    ol.source.TileArcGISRest.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getLogo',
-    ol.source.TileArcGISRest.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getProjection',
-    ol.source.TileArcGISRest.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getState',
-    ol.source.TileArcGISRest.prototype.getState);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'setAttributions',
-    ol.source.TileArcGISRest.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'get',
-    ol.source.TileArcGISRest.prototype.get);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getKeys',
-    ol.source.TileArcGISRest.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getProperties',
-    ol.source.TileArcGISRest.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'set',
-    ol.source.TileArcGISRest.prototype.set);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'setProperties',
-    ol.source.TileArcGISRest.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'unset',
-    ol.source.TileArcGISRest.prototype.unset);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'changed',
-    ol.source.TileArcGISRest.prototype.changed);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'dispatchEvent',
-    ol.source.TileArcGISRest.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'getRevision',
-    ol.source.TileArcGISRest.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'on',
-    ol.source.TileArcGISRest.prototype.on);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'once',
-    ol.source.TileArcGISRest.prototype.once);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'un',
-    ol.source.TileArcGISRest.prototype.un);
-
-goog.exportProperty(
-    ol.source.TileArcGISRest.prototype,
-    'unByKey',
-    ol.source.TileArcGISRest.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'getTileGrid',
-    ol.source.TileDebug.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'refresh',
-    ol.source.TileDebug.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'getAttributions',
-    ol.source.TileDebug.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'getLogo',
-    ol.source.TileDebug.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'getProjection',
-    ol.source.TileDebug.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'getState',
-    ol.source.TileDebug.prototype.getState);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'setAttributions',
-    ol.source.TileDebug.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'get',
-    ol.source.TileDebug.prototype.get);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'getKeys',
-    ol.source.TileDebug.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'getProperties',
-    ol.source.TileDebug.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'set',
-    ol.source.TileDebug.prototype.set);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'setProperties',
-    ol.source.TileDebug.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'unset',
-    ol.source.TileDebug.prototype.unset);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'changed',
-    ol.source.TileDebug.prototype.changed);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'dispatchEvent',
-    ol.source.TileDebug.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'getRevision',
-    ol.source.TileDebug.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'on',
-    ol.source.TileDebug.prototype.on);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'once',
-    ol.source.TileDebug.prototype.once);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'un',
-    ol.source.TileDebug.prototype.un);
-
-goog.exportProperty(
-    ol.source.TileDebug.prototype,
-    'unByKey',
-    ol.source.TileDebug.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.TileJSON.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'setTileGridForProjection',
-    ol.source.TileJSON.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getTileLoadFunction',
-    ol.source.TileJSON.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getTileUrlFunction',
-    ol.source.TileJSON.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getUrls',
-    ol.source.TileJSON.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'setTileLoadFunction',
-    ol.source.TileJSON.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'setTileUrlFunction',
-    ol.source.TileJSON.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'setUrl',
-    ol.source.TileJSON.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'setUrls',
-    ol.source.TileJSON.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getTileGrid',
-    ol.source.TileJSON.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'refresh',
-    ol.source.TileJSON.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getAttributions',
-    ol.source.TileJSON.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getLogo',
-    ol.source.TileJSON.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getProjection',
-    ol.source.TileJSON.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getState',
-    ol.source.TileJSON.prototype.getState);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'setAttributions',
-    ol.source.TileJSON.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'get',
-    ol.source.TileJSON.prototype.get);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getKeys',
-    ol.source.TileJSON.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getProperties',
-    ol.source.TileJSON.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'set',
-    ol.source.TileJSON.prototype.set);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'setProperties',
-    ol.source.TileJSON.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'unset',
-    ol.source.TileJSON.prototype.unset);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'changed',
-    ol.source.TileJSON.prototype.changed);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'dispatchEvent',
-    ol.source.TileJSON.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'getRevision',
-    ol.source.TileJSON.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'on',
-    ol.source.TileJSON.prototype.on);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'once',
-    ol.source.TileJSON.prototype.once);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'un',
-    ol.source.TileJSON.prototype.un);
-
-goog.exportProperty(
-    ol.source.TileJSON.prototype,
-    'unByKey',
-    ol.source.TileJSON.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getTileGrid',
-    ol.source.TileUTFGrid.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'refresh',
-    ol.source.TileUTFGrid.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getAttributions',
-    ol.source.TileUTFGrid.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getLogo',
-    ol.source.TileUTFGrid.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getProjection',
-    ol.source.TileUTFGrid.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getState',
-    ol.source.TileUTFGrid.prototype.getState);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'setAttributions',
-    ol.source.TileUTFGrid.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'get',
-    ol.source.TileUTFGrid.prototype.get);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getKeys',
-    ol.source.TileUTFGrid.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getProperties',
-    ol.source.TileUTFGrid.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'set',
-    ol.source.TileUTFGrid.prototype.set);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'setProperties',
-    ol.source.TileUTFGrid.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'unset',
-    ol.source.TileUTFGrid.prototype.unset);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'changed',
-    ol.source.TileUTFGrid.prototype.changed);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'dispatchEvent',
-    ol.source.TileUTFGrid.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'getRevision',
-    ol.source.TileUTFGrid.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'on',
-    ol.source.TileUTFGrid.prototype.on);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'once',
-    ol.source.TileUTFGrid.prototype.once);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'un',
-    ol.source.TileUTFGrid.prototype.un);
-
-goog.exportProperty(
-    ol.source.TileUTFGrid.prototype,
-    'unByKey',
-    ol.source.TileUTFGrid.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.TileWMS.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'setTileGridForProjection',
-    ol.source.TileWMS.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getTileLoadFunction',
-    ol.source.TileWMS.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getTileUrlFunction',
-    ol.source.TileWMS.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getUrls',
-    ol.source.TileWMS.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'setTileLoadFunction',
-    ol.source.TileWMS.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'setTileUrlFunction',
-    ol.source.TileWMS.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'setUrl',
-    ol.source.TileWMS.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'setUrls',
-    ol.source.TileWMS.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getTileGrid',
-    ol.source.TileWMS.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'refresh',
-    ol.source.TileWMS.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getAttributions',
-    ol.source.TileWMS.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getLogo',
-    ol.source.TileWMS.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getProjection',
-    ol.source.TileWMS.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getState',
-    ol.source.TileWMS.prototype.getState);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'setAttributions',
-    ol.source.TileWMS.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'get',
-    ol.source.TileWMS.prototype.get);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getKeys',
-    ol.source.TileWMS.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getProperties',
-    ol.source.TileWMS.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'set',
-    ol.source.TileWMS.prototype.set);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'setProperties',
-    ol.source.TileWMS.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'unset',
-    ol.source.TileWMS.prototype.unset);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'changed',
-    ol.source.TileWMS.prototype.changed);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'dispatchEvent',
-    ol.source.TileWMS.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'getRevision',
-    ol.source.TileWMS.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'on',
-    ol.source.TileWMS.prototype.on);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'once',
-    ol.source.TileWMS.prototype.once);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'un',
-    ol.source.TileWMS.prototype.un);
-
-goog.exportProperty(
-    ol.source.TileWMS.prototype,
-    'unByKey',
-    ol.source.TileWMS.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Vector.Event.prototype,
-    'type',
-    ol.source.Vector.Event.prototype.type);
-
-goog.exportProperty(
-    ol.source.Vector.Event.prototype,
-    'target',
-    ol.source.Vector.Event.prototype.target);
-
-goog.exportProperty(
-    ol.source.Vector.Event.prototype,
-    'preventDefault',
-    ol.source.Vector.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.source.Vector.Event.prototype,
-    'stopPropagation',
-    ol.source.Vector.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getTileLoadFunction',
-    ol.source.VectorTile.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getTileUrlFunction',
-    ol.source.VectorTile.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getUrls',
-    ol.source.VectorTile.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'setTileLoadFunction',
-    ol.source.VectorTile.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'setTileUrlFunction',
-    ol.source.VectorTile.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'setUrl',
-    ol.source.VectorTile.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'setUrls',
-    ol.source.VectorTile.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getTileGrid',
-    ol.source.VectorTile.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'refresh',
-    ol.source.VectorTile.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getAttributions',
-    ol.source.VectorTile.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getLogo',
-    ol.source.VectorTile.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getProjection',
-    ol.source.VectorTile.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getState',
-    ol.source.VectorTile.prototype.getState);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'setAttributions',
-    ol.source.VectorTile.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'get',
-    ol.source.VectorTile.prototype.get);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getKeys',
-    ol.source.VectorTile.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getProperties',
-    ol.source.VectorTile.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'set',
-    ol.source.VectorTile.prototype.set);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'setProperties',
-    ol.source.VectorTile.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'unset',
-    ol.source.VectorTile.prototype.unset);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'changed',
-    ol.source.VectorTile.prototype.changed);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'dispatchEvent',
-    ol.source.VectorTile.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'getRevision',
-    ol.source.VectorTile.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'on',
-    ol.source.VectorTile.prototype.on);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'once',
-    ol.source.VectorTile.prototype.once);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'un',
-    ol.source.VectorTile.prototype.un);
-
-goog.exportProperty(
-    ol.source.VectorTile.prototype,
-    'unByKey',
-    ol.source.VectorTile.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.WMTS.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'setTileGridForProjection',
-    ol.source.WMTS.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getTileLoadFunction',
-    ol.source.WMTS.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getTileUrlFunction',
-    ol.source.WMTS.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getUrls',
-    ol.source.WMTS.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'setTileLoadFunction',
-    ol.source.WMTS.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'setTileUrlFunction',
-    ol.source.WMTS.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'setUrl',
-    ol.source.WMTS.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'setUrls',
-    ol.source.WMTS.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getTileGrid',
-    ol.source.WMTS.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'refresh',
-    ol.source.WMTS.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getAttributions',
-    ol.source.WMTS.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getLogo',
-    ol.source.WMTS.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getProjection',
-    ol.source.WMTS.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getState',
-    ol.source.WMTS.prototype.getState);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'setAttributions',
-    ol.source.WMTS.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'get',
-    ol.source.WMTS.prototype.get);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getKeys',
-    ol.source.WMTS.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getProperties',
-    ol.source.WMTS.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'set',
-    ol.source.WMTS.prototype.set);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'setProperties',
-    ol.source.WMTS.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'unset',
-    ol.source.WMTS.prototype.unset);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'changed',
-    ol.source.WMTS.prototype.changed);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'dispatchEvent',
-    ol.source.WMTS.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'getRevision',
-    ol.source.WMTS.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'on',
-    ol.source.WMTS.prototype.on);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'once',
-    ol.source.WMTS.prototype.once);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'un',
-    ol.source.WMTS.prototype.un);
-
-goog.exportProperty(
-    ol.source.WMTS.prototype,
-    'unByKey',
-    ol.source.WMTS.prototype.unByKey);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'setRenderReprojectionEdges',
-    ol.source.Zoomify.prototype.setRenderReprojectionEdges);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'setTileGridForProjection',
-    ol.source.Zoomify.prototype.setTileGridForProjection);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getTileLoadFunction',
-    ol.source.Zoomify.prototype.getTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getTileUrlFunction',
-    ol.source.Zoomify.prototype.getTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getUrls',
-    ol.source.Zoomify.prototype.getUrls);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'setTileLoadFunction',
-    ol.source.Zoomify.prototype.setTileLoadFunction);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'setTileUrlFunction',
-    ol.source.Zoomify.prototype.setTileUrlFunction);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'setUrl',
-    ol.source.Zoomify.prototype.setUrl);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'setUrls',
-    ol.source.Zoomify.prototype.setUrls);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getTileGrid',
-    ol.source.Zoomify.prototype.getTileGrid);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'refresh',
-    ol.source.Zoomify.prototype.refresh);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getAttributions',
-    ol.source.Zoomify.prototype.getAttributions);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getLogo',
-    ol.source.Zoomify.prototype.getLogo);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getProjection',
-    ol.source.Zoomify.prototype.getProjection);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getState',
-    ol.source.Zoomify.prototype.getState);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'setAttributions',
-    ol.source.Zoomify.prototype.setAttributions);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'get',
-    ol.source.Zoomify.prototype.get);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getKeys',
-    ol.source.Zoomify.prototype.getKeys);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getProperties',
-    ol.source.Zoomify.prototype.getProperties);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'set',
-    ol.source.Zoomify.prototype.set);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'setProperties',
-    ol.source.Zoomify.prototype.setProperties);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'unset',
-    ol.source.Zoomify.prototype.unset);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'changed',
-    ol.source.Zoomify.prototype.changed);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'dispatchEvent',
-    ol.source.Zoomify.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'getRevision',
-    ol.source.Zoomify.prototype.getRevision);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'on',
-    ol.source.Zoomify.prototype.on);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'once',
-    ol.source.Zoomify.prototype.once);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'un',
-    ol.source.Zoomify.prototype.un);
-
-goog.exportProperty(
-    ol.source.Zoomify.prototype,
-    'unByKey',
-    ol.source.Zoomify.prototype.unByKey);
-
-goog.exportProperty(
-    ol.reproj.Tile.prototype,
-    'getTileCoord',
-    ol.reproj.Tile.prototype.getTileCoord);
-
-goog.exportProperty(
-    ol.reproj.Tile.prototype,
-    'load',
-    ol.reproj.Tile.prototype.load);
-
-goog.exportProperty(
-    ol.renderer.Layer.prototype,
-    'changed',
-    ol.renderer.Layer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.Layer.prototype,
-    'dispatchEvent',
-    ol.renderer.Layer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.Layer.prototype,
-    'getRevision',
-    ol.renderer.Layer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.Layer.prototype,
-    'on',
-    ol.renderer.Layer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.Layer.prototype,
-    'once',
-    ol.renderer.Layer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.Layer.prototype,
-    'un',
-    ol.renderer.Layer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.Layer.prototype,
-    'unByKey',
-    ol.renderer.Layer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.webgl.Layer.prototype,
-    'changed',
-    ol.renderer.webgl.Layer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.webgl.Layer.prototype,
-    'dispatchEvent',
-    ol.renderer.webgl.Layer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.webgl.Layer.prototype,
-    'getRevision',
-    ol.renderer.webgl.Layer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.webgl.Layer.prototype,
-    'on',
-    ol.renderer.webgl.Layer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.webgl.Layer.prototype,
-    'once',
-    ol.renderer.webgl.Layer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.webgl.Layer.prototype,
-    'un',
-    ol.renderer.webgl.Layer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.webgl.Layer.prototype,
-    'unByKey',
-    ol.renderer.webgl.Layer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.webgl.ImageLayer.prototype,
-    'changed',
-    ol.renderer.webgl.ImageLayer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.webgl.ImageLayer.prototype,
-    'dispatchEvent',
-    ol.renderer.webgl.ImageLayer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.webgl.ImageLayer.prototype,
-    'getRevision',
-    ol.renderer.webgl.ImageLayer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.webgl.ImageLayer.prototype,
-    'on',
-    ol.renderer.webgl.ImageLayer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.webgl.ImageLayer.prototype,
-    'once',
-    ol.renderer.webgl.ImageLayer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.webgl.ImageLayer.prototype,
-    'un',
-    ol.renderer.webgl.ImageLayer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.webgl.ImageLayer.prototype,
-    'unByKey',
-    ol.renderer.webgl.ImageLayer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.webgl.TileLayer.prototype,
-    'changed',
-    ol.renderer.webgl.TileLayer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.webgl.TileLayer.prototype,
-    'dispatchEvent',
-    ol.renderer.webgl.TileLayer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.webgl.TileLayer.prototype,
-    'getRevision',
-    ol.renderer.webgl.TileLayer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.webgl.TileLayer.prototype,
-    'on',
-    ol.renderer.webgl.TileLayer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.webgl.TileLayer.prototype,
-    'once',
-    ol.renderer.webgl.TileLayer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.webgl.TileLayer.prototype,
-    'un',
-    ol.renderer.webgl.TileLayer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.webgl.TileLayer.prototype,
-    'unByKey',
-    ol.renderer.webgl.TileLayer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.webgl.VectorLayer.prototype,
-    'changed',
-    ol.renderer.webgl.VectorLayer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.webgl.VectorLayer.prototype,
-    'dispatchEvent',
-    ol.renderer.webgl.VectorLayer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.webgl.VectorLayer.prototype,
-    'getRevision',
-    ol.renderer.webgl.VectorLayer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.webgl.VectorLayer.prototype,
-    'on',
-    ol.renderer.webgl.VectorLayer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.webgl.VectorLayer.prototype,
-    'once',
-    ol.renderer.webgl.VectorLayer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.webgl.VectorLayer.prototype,
-    'un',
-    ol.renderer.webgl.VectorLayer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.webgl.VectorLayer.prototype,
-    'unByKey',
-    ol.renderer.webgl.VectorLayer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.canvas.Layer.prototype,
-    'changed',
-    ol.renderer.canvas.Layer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.canvas.Layer.prototype,
-    'dispatchEvent',
-    ol.renderer.canvas.Layer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.canvas.Layer.prototype,
-    'getRevision',
-    ol.renderer.canvas.Layer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.canvas.Layer.prototype,
-    'on',
-    ol.renderer.canvas.Layer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.canvas.Layer.prototype,
-    'once',
-    ol.renderer.canvas.Layer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.canvas.Layer.prototype,
-    'un',
-    ol.renderer.canvas.Layer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.canvas.Layer.prototype,
-    'unByKey',
-    ol.renderer.canvas.Layer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.canvas.ImageLayer.prototype,
-    'changed',
-    ol.renderer.canvas.ImageLayer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.canvas.ImageLayer.prototype,
-    'dispatchEvent',
-    ol.renderer.canvas.ImageLayer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.canvas.ImageLayer.prototype,
-    'getRevision',
-    ol.renderer.canvas.ImageLayer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.canvas.ImageLayer.prototype,
-    'on',
-    ol.renderer.canvas.ImageLayer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.canvas.ImageLayer.prototype,
-    'once',
-    ol.renderer.canvas.ImageLayer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.canvas.ImageLayer.prototype,
-    'un',
-    ol.renderer.canvas.ImageLayer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.canvas.ImageLayer.prototype,
-    'unByKey',
-    ol.renderer.canvas.ImageLayer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.canvas.TileLayer.prototype,
-    'changed',
-    ol.renderer.canvas.TileLayer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.canvas.TileLayer.prototype,
-    'dispatchEvent',
-    ol.renderer.canvas.TileLayer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.canvas.TileLayer.prototype,
-    'getRevision',
-    ol.renderer.canvas.TileLayer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.canvas.TileLayer.prototype,
-    'on',
-    ol.renderer.canvas.TileLayer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.canvas.TileLayer.prototype,
-    'once',
-    ol.renderer.canvas.TileLayer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.canvas.TileLayer.prototype,
-    'un',
-    ol.renderer.canvas.TileLayer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.canvas.TileLayer.prototype,
-    'unByKey',
-    ol.renderer.canvas.TileLayer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorLayer.prototype,
-    'changed',
-    ol.renderer.canvas.VectorLayer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorLayer.prototype,
-    'dispatchEvent',
-    ol.renderer.canvas.VectorLayer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorLayer.prototype,
-    'getRevision',
-    ol.renderer.canvas.VectorLayer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorLayer.prototype,
-    'on',
-    ol.renderer.canvas.VectorLayer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorLayer.prototype,
-    'once',
-    ol.renderer.canvas.VectorLayer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorLayer.prototype,
-    'un',
-    ol.renderer.canvas.VectorLayer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorLayer.prototype,
-    'unByKey',
-    ol.renderer.canvas.VectorLayer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorTileLayer.prototype,
-    'changed',
-    ol.renderer.canvas.VectorTileLayer.prototype.changed);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorTileLayer.prototype,
-    'dispatchEvent',
-    ol.renderer.canvas.VectorTileLayer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorTileLayer.prototype,
-    'getRevision',
-    ol.renderer.canvas.VectorTileLayer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorTileLayer.prototype,
-    'on',
-    ol.renderer.canvas.VectorTileLayer.prototype.on);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorTileLayer.prototype,
-    'once',
-    ol.renderer.canvas.VectorTileLayer.prototype.once);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorTileLayer.prototype,
-    'un',
-    ol.renderer.canvas.VectorTileLayer.prototype.un);
-
-goog.exportProperty(
-    ol.renderer.canvas.VectorTileLayer.prototype,
-    'unByKey',
-    ol.renderer.canvas.VectorTileLayer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.render.Event.prototype,
-    'type',
-    ol.render.Event.prototype.type);
-
-goog.exportProperty(
-    ol.render.Event.prototype,
-    'target',
-    ol.render.Event.prototype.target);
-
-goog.exportProperty(
-    ol.render.Event.prototype,
-    'preventDefault',
-    ol.render.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.render.Event.prototype,
-    'stopPropagation',
-    ol.render.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.pointer.PointerEvent.prototype,
-    'type',
-    ol.pointer.PointerEvent.prototype.type);
-
-goog.exportProperty(
-    ol.pointer.PointerEvent.prototype,
-    'target',
-    ol.pointer.PointerEvent.prototype.target);
-
-goog.exportProperty(
-    ol.pointer.PointerEvent.prototype,
-    'preventDefault',
-    ol.pointer.PointerEvent.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.pointer.PointerEvent.prototype,
-    'stopPropagation',
-    ol.pointer.PointerEvent.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'get',
-    ol.layer.Base.prototype.get);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getKeys',
-    ol.layer.Base.prototype.getKeys);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getProperties',
-    ol.layer.Base.prototype.getProperties);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'set',
-    ol.layer.Base.prototype.set);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'setProperties',
-    ol.layer.Base.prototype.setProperties);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'unset',
-    ol.layer.Base.prototype.unset);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'changed',
-    ol.layer.Base.prototype.changed);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'dispatchEvent',
-    ol.layer.Base.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'getRevision',
-    ol.layer.Base.prototype.getRevision);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'on',
-    ol.layer.Base.prototype.on);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'once',
-    ol.layer.Base.prototype.once);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'un',
-    ol.layer.Base.prototype.un);
-
-goog.exportProperty(
-    ol.layer.Base.prototype,
-    'unByKey',
-    ol.layer.Base.prototype.unByKey);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getExtent',
-    ol.layer.Group.prototype.getExtent);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getMaxResolution',
-    ol.layer.Group.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getMinResolution',
-    ol.layer.Group.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getOpacity',
-    ol.layer.Group.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getVisible',
-    ol.layer.Group.prototype.getVisible);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getZIndex',
-    ol.layer.Group.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'setExtent',
-    ol.layer.Group.prototype.setExtent);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'setMaxResolution',
-    ol.layer.Group.prototype.setMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'setMinResolution',
-    ol.layer.Group.prototype.setMinResolution);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'setOpacity',
-    ol.layer.Group.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'setVisible',
-    ol.layer.Group.prototype.setVisible);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'setZIndex',
-    ol.layer.Group.prototype.setZIndex);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'get',
-    ol.layer.Group.prototype.get);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getKeys',
-    ol.layer.Group.prototype.getKeys);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getProperties',
-    ol.layer.Group.prototype.getProperties);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'set',
-    ol.layer.Group.prototype.set);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'setProperties',
-    ol.layer.Group.prototype.setProperties);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'unset',
-    ol.layer.Group.prototype.unset);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'changed',
-    ol.layer.Group.prototype.changed);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'dispatchEvent',
-    ol.layer.Group.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'getRevision',
-    ol.layer.Group.prototype.getRevision);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'on',
-    ol.layer.Group.prototype.on);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'once',
-    ol.layer.Group.prototype.once);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'un',
-    ol.layer.Group.prototype.un);
-
-goog.exportProperty(
-    ol.layer.Group.prototype,
-    'unByKey',
-    ol.layer.Group.prototype.unByKey);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getExtent',
-    ol.layer.Layer.prototype.getExtent);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getMaxResolution',
-    ol.layer.Layer.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getMinResolution',
-    ol.layer.Layer.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getOpacity',
-    ol.layer.Layer.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getVisible',
-    ol.layer.Layer.prototype.getVisible);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getZIndex',
-    ol.layer.Layer.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setExtent',
-    ol.layer.Layer.prototype.setExtent);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setMaxResolution',
-    ol.layer.Layer.prototype.setMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setMinResolution',
-    ol.layer.Layer.prototype.setMinResolution);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setOpacity',
-    ol.layer.Layer.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setVisible',
-    ol.layer.Layer.prototype.setVisible);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setZIndex',
-    ol.layer.Layer.prototype.setZIndex);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'get',
-    ol.layer.Layer.prototype.get);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getKeys',
-    ol.layer.Layer.prototype.getKeys);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getProperties',
-    ol.layer.Layer.prototype.getProperties);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'set',
-    ol.layer.Layer.prototype.set);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'setProperties',
-    ol.layer.Layer.prototype.setProperties);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'unset',
-    ol.layer.Layer.prototype.unset);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'changed',
-    ol.layer.Layer.prototype.changed);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'dispatchEvent',
-    ol.layer.Layer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'getRevision',
-    ol.layer.Layer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'on',
-    ol.layer.Layer.prototype.on);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'once',
-    ol.layer.Layer.prototype.once);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'un',
-    ol.layer.Layer.prototype.un);
-
-goog.exportProperty(
-    ol.layer.Layer.prototype,
-    'unByKey',
-    ol.layer.Layer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setMap',
-    ol.layer.Vector.prototype.setMap);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setSource',
-    ol.layer.Vector.prototype.setSource);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getExtent',
-    ol.layer.Vector.prototype.getExtent);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getMaxResolution',
-    ol.layer.Vector.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getMinResolution',
-    ol.layer.Vector.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getOpacity',
-    ol.layer.Vector.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getVisible',
-    ol.layer.Vector.prototype.getVisible);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getZIndex',
-    ol.layer.Vector.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setExtent',
-    ol.layer.Vector.prototype.setExtent);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setMaxResolution',
-    ol.layer.Vector.prototype.setMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setMinResolution',
-    ol.layer.Vector.prototype.setMinResolution);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setOpacity',
-    ol.layer.Vector.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setVisible',
-    ol.layer.Vector.prototype.setVisible);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setZIndex',
-    ol.layer.Vector.prototype.setZIndex);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'get',
-    ol.layer.Vector.prototype.get);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getKeys',
-    ol.layer.Vector.prototype.getKeys);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getProperties',
-    ol.layer.Vector.prototype.getProperties);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'set',
-    ol.layer.Vector.prototype.set);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'setProperties',
-    ol.layer.Vector.prototype.setProperties);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'unset',
-    ol.layer.Vector.prototype.unset);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'changed',
-    ol.layer.Vector.prototype.changed);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'dispatchEvent',
-    ol.layer.Vector.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'getRevision',
-    ol.layer.Vector.prototype.getRevision);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'on',
-    ol.layer.Vector.prototype.on);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'once',
-    ol.layer.Vector.prototype.once);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'un',
-    ol.layer.Vector.prototype.un);
-
-goog.exportProperty(
-    ol.layer.Vector.prototype,
-    'unByKey',
-    ol.layer.Vector.prototype.unByKey);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getSource',
-    ol.layer.Heatmap.prototype.getSource);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getStyle',
-    ol.layer.Heatmap.prototype.getStyle);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getStyleFunction',
-    ol.layer.Heatmap.prototype.getStyleFunction);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setStyle',
-    ol.layer.Heatmap.prototype.setStyle);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setMap',
-    ol.layer.Heatmap.prototype.setMap);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setSource',
-    ol.layer.Heatmap.prototype.setSource);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getExtent',
-    ol.layer.Heatmap.prototype.getExtent);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getMaxResolution',
-    ol.layer.Heatmap.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getMinResolution',
-    ol.layer.Heatmap.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getOpacity',
-    ol.layer.Heatmap.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getVisible',
-    ol.layer.Heatmap.prototype.getVisible);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getZIndex',
-    ol.layer.Heatmap.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setExtent',
-    ol.layer.Heatmap.prototype.setExtent);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setMaxResolution',
-    ol.layer.Heatmap.prototype.setMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setMinResolution',
-    ol.layer.Heatmap.prototype.setMinResolution);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setOpacity',
-    ol.layer.Heatmap.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setVisible',
-    ol.layer.Heatmap.prototype.setVisible);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setZIndex',
-    ol.layer.Heatmap.prototype.setZIndex);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'get',
-    ol.layer.Heatmap.prototype.get);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getKeys',
-    ol.layer.Heatmap.prototype.getKeys);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getProperties',
-    ol.layer.Heatmap.prototype.getProperties);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'set',
-    ol.layer.Heatmap.prototype.set);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'setProperties',
-    ol.layer.Heatmap.prototype.setProperties);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'unset',
-    ol.layer.Heatmap.prototype.unset);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'changed',
-    ol.layer.Heatmap.prototype.changed);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'dispatchEvent',
-    ol.layer.Heatmap.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'getRevision',
-    ol.layer.Heatmap.prototype.getRevision);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'on',
-    ol.layer.Heatmap.prototype.on);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'once',
-    ol.layer.Heatmap.prototype.once);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'un',
-    ol.layer.Heatmap.prototype.un);
-
-goog.exportProperty(
-    ol.layer.Heatmap.prototype,
-    'unByKey',
-    ol.layer.Heatmap.prototype.unByKey);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setMap',
-    ol.layer.Image.prototype.setMap);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setSource',
-    ol.layer.Image.prototype.setSource);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getExtent',
-    ol.layer.Image.prototype.getExtent);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getMaxResolution',
-    ol.layer.Image.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getMinResolution',
-    ol.layer.Image.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getOpacity',
-    ol.layer.Image.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getVisible',
-    ol.layer.Image.prototype.getVisible);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getZIndex',
-    ol.layer.Image.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setExtent',
-    ol.layer.Image.prototype.setExtent);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setMaxResolution',
-    ol.layer.Image.prototype.setMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setMinResolution',
-    ol.layer.Image.prototype.setMinResolution);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setOpacity',
-    ol.layer.Image.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setVisible',
-    ol.layer.Image.prototype.setVisible);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setZIndex',
-    ol.layer.Image.prototype.setZIndex);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'get',
-    ol.layer.Image.prototype.get);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getKeys',
-    ol.layer.Image.prototype.getKeys);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getProperties',
-    ol.layer.Image.prototype.getProperties);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'set',
-    ol.layer.Image.prototype.set);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'setProperties',
-    ol.layer.Image.prototype.setProperties);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'unset',
-    ol.layer.Image.prototype.unset);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'changed',
-    ol.layer.Image.prototype.changed);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'dispatchEvent',
-    ol.layer.Image.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'getRevision',
-    ol.layer.Image.prototype.getRevision);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'on',
-    ol.layer.Image.prototype.on);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'once',
-    ol.layer.Image.prototype.once);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'un',
-    ol.layer.Image.prototype.un);
-
-goog.exportProperty(
-    ol.layer.Image.prototype,
-    'unByKey',
-    ol.layer.Image.prototype.unByKey);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setMap',
-    ol.layer.Tile.prototype.setMap);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setSource',
-    ol.layer.Tile.prototype.setSource);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getExtent',
-    ol.layer.Tile.prototype.getExtent);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getMaxResolution',
-    ol.layer.Tile.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getMinResolution',
-    ol.layer.Tile.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getOpacity',
-    ol.layer.Tile.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getVisible',
-    ol.layer.Tile.prototype.getVisible);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getZIndex',
-    ol.layer.Tile.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setExtent',
-    ol.layer.Tile.prototype.setExtent);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setMaxResolution',
-    ol.layer.Tile.prototype.setMaxResolution);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setMinResolution',
-    ol.layer.Tile.prototype.setMinResolution);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setOpacity',
-    ol.layer.Tile.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setVisible',
-    ol.layer.Tile.prototype.setVisible);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setZIndex',
-    ol.layer.Tile.prototype.setZIndex);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'get',
-    ol.layer.Tile.prototype.get);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getKeys',
-    ol.layer.Tile.prototype.getKeys);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getProperties',
-    ol.layer.Tile.prototype.getProperties);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'set',
-    ol.layer.Tile.prototype.set);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'setProperties',
-    ol.layer.Tile.prototype.setProperties);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'unset',
-    ol.layer.Tile.prototype.unset);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'changed',
-    ol.layer.Tile.prototype.changed);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'dispatchEvent',
-    ol.layer.Tile.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'getRevision',
-    ol.layer.Tile.prototype.getRevision);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'on',
-    ol.layer.Tile.prototype.on);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'once',
-    ol.layer.Tile.prototype.once);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'un',
-    ol.layer.Tile.prototype.un);
-
-goog.exportProperty(
-    ol.layer.Tile.prototype,
-    'unByKey',
-    ol.layer.Tile.prototype.unByKey);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getSource',
-    ol.layer.VectorTile.prototype.getSource);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getStyle',
-    ol.layer.VectorTile.prototype.getStyle);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getStyleFunction',
-    ol.layer.VectorTile.prototype.getStyleFunction);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setStyle',
-    ol.layer.VectorTile.prototype.setStyle);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setMap',
-    ol.layer.VectorTile.prototype.setMap);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setSource',
-    ol.layer.VectorTile.prototype.setSource);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getExtent',
-    ol.layer.VectorTile.prototype.getExtent);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getMaxResolution',
-    ol.layer.VectorTile.prototype.getMaxResolution);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getMinResolution',
-    ol.layer.VectorTile.prototype.getMinResolution);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getOpacity',
-    ol.layer.VectorTile.prototype.getOpacity);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getVisible',
-    ol.layer.VectorTile.prototype.getVisible);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getZIndex',
-    ol.layer.VectorTile.prototype.getZIndex);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setExtent',
-    ol.layer.VectorTile.prototype.setExtent);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setMaxResolution',
-    ol.layer.VectorTile.prototype.setMaxResolution);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setMinResolution',
-    ol.layer.VectorTile.prototype.setMinResolution);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setOpacity',
-    ol.layer.VectorTile.prototype.setOpacity);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setVisible',
-    ol.layer.VectorTile.prototype.setVisible);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setZIndex',
-    ol.layer.VectorTile.prototype.setZIndex);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'get',
-    ol.layer.VectorTile.prototype.get);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getKeys',
-    ol.layer.VectorTile.prototype.getKeys);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getProperties',
-    ol.layer.VectorTile.prototype.getProperties);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'set',
-    ol.layer.VectorTile.prototype.set);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'setProperties',
-    ol.layer.VectorTile.prototype.setProperties);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'unset',
-    ol.layer.VectorTile.prototype.unset);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'changed',
-    ol.layer.VectorTile.prototype.changed);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'dispatchEvent',
-    ol.layer.VectorTile.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'getRevision',
-    ol.layer.VectorTile.prototype.getRevision);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'on',
-    ol.layer.VectorTile.prototype.on);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'once',
-    ol.layer.VectorTile.prototype.once);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'un',
-    ol.layer.VectorTile.prototype.un);
-
-goog.exportProperty(
-    ol.layer.VectorTile.prototype,
-    'unByKey',
-    ol.layer.VectorTile.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'get',
-    ol.interaction.Interaction.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'getKeys',
-    ol.interaction.Interaction.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'getProperties',
-    ol.interaction.Interaction.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'set',
-    ol.interaction.Interaction.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'setProperties',
-    ol.interaction.Interaction.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'unset',
-    ol.interaction.Interaction.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'changed',
-    ol.interaction.Interaction.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'dispatchEvent',
-    ol.interaction.Interaction.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'getRevision',
-    ol.interaction.Interaction.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'on',
-    ol.interaction.Interaction.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'once',
-    ol.interaction.Interaction.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'un',
-    ol.interaction.Interaction.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.Interaction.prototype,
-    'unByKey',
-    ol.interaction.Interaction.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'getActive',
-    ol.interaction.DoubleClickZoom.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'getMap',
-    ol.interaction.DoubleClickZoom.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'setActive',
-    ol.interaction.DoubleClickZoom.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'get',
-    ol.interaction.DoubleClickZoom.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'getKeys',
-    ol.interaction.DoubleClickZoom.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'getProperties',
-    ol.interaction.DoubleClickZoom.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'set',
-    ol.interaction.DoubleClickZoom.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'setProperties',
-    ol.interaction.DoubleClickZoom.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'unset',
-    ol.interaction.DoubleClickZoom.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'changed',
-    ol.interaction.DoubleClickZoom.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'dispatchEvent',
-    ol.interaction.DoubleClickZoom.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'getRevision',
-    ol.interaction.DoubleClickZoom.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'on',
-    ol.interaction.DoubleClickZoom.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'once',
-    ol.interaction.DoubleClickZoom.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'un',
-    ol.interaction.DoubleClickZoom.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.DoubleClickZoom.prototype,
-    'unByKey',
-    ol.interaction.DoubleClickZoom.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'getActive',
-    ol.interaction.DragAndDrop.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'getMap',
-    ol.interaction.DragAndDrop.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'setActive',
-    ol.interaction.DragAndDrop.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'get',
-    ol.interaction.DragAndDrop.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'getKeys',
-    ol.interaction.DragAndDrop.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'getProperties',
-    ol.interaction.DragAndDrop.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'set',
-    ol.interaction.DragAndDrop.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'setProperties',
-    ol.interaction.DragAndDrop.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'unset',
-    ol.interaction.DragAndDrop.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'changed',
-    ol.interaction.DragAndDrop.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'dispatchEvent',
-    ol.interaction.DragAndDrop.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'getRevision',
-    ol.interaction.DragAndDrop.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'on',
-    ol.interaction.DragAndDrop.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'once',
-    ol.interaction.DragAndDrop.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'un',
-    ol.interaction.DragAndDrop.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.prototype,
-    'unByKey',
-    ol.interaction.DragAndDrop.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.Event.prototype,
-    'type',
-    ol.interaction.DragAndDrop.Event.prototype.type);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.Event.prototype,
-    'target',
-    ol.interaction.DragAndDrop.Event.prototype.target);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.Event.prototype,
-    'preventDefault',
-    ol.interaction.DragAndDrop.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.interaction.DragAndDrop.Event.prototype,
-    'stopPropagation',
-    ol.interaction.DragAndDrop.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'getActive',
-    ol.interaction.Pointer.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'getMap',
-    ol.interaction.Pointer.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'setActive',
-    ol.interaction.Pointer.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'get',
-    ol.interaction.Pointer.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'getKeys',
-    ol.interaction.Pointer.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'getProperties',
-    ol.interaction.Pointer.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'set',
-    ol.interaction.Pointer.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'setProperties',
-    ol.interaction.Pointer.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'unset',
-    ol.interaction.Pointer.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'changed',
-    ol.interaction.Pointer.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'dispatchEvent',
-    ol.interaction.Pointer.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'getRevision',
-    ol.interaction.Pointer.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'on',
-    ol.interaction.Pointer.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'once',
-    ol.interaction.Pointer.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'un',
-    ol.interaction.Pointer.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.Pointer.prototype,
-    'unByKey',
-    ol.interaction.Pointer.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'getActive',
-    ol.interaction.DragBox.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'getMap',
-    ol.interaction.DragBox.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'setActive',
-    ol.interaction.DragBox.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'get',
-    ol.interaction.DragBox.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'getKeys',
-    ol.interaction.DragBox.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'getProperties',
-    ol.interaction.DragBox.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'set',
-    ol.interaction.DragBox.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'setProperties',
-    ol.interaction.DragBox.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'unset',
-    ol.interaction.DragBox.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'changed',
-    ol.interaction.DragBox.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'dispatchEvent',
-    ol.interaction.DragBox.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'getRevision',
-    ol.interaction.DragBox.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'on',
-    ol.interaction.DragBox.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'once',
-    ol.interaction.DragBox.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'un',
-    ol.interaction.DragBox.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.DragBox.prototype,
-    'unByKey',
-    ol.interaction.DragBox.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.DragBox.Event.prototype,
-    'type',
-    ol.interaction.DragBox.Event.prototype.type);
-
-goog.exportProperty(
-    ol.interaction.DragBox.Event.prototype,
-    'target',
-    ol.interaction.DragBox.Event.prototype.target);
-
-goog.exportProperty(
-    ol.interaction.DragBox.Event.prototype,
-    'preventDefault',
-    ol.interaction.DragBox.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.interaction.DragBox.Event.prototype,
-    'stopPropagation',
-    ol.interaction.DragBox.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'getActive',
-    ol.interaction.DragPan.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'getMap',
-    ol.interaction.DragPan.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'setActive',
-    ol.interaction.DragPan.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'get',
-    ol.interaction.DragPan.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'getKeys',
-    ol.interaction.DragPan.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'getProperties',
-    ol.interaction.DragPan.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'set',
-    ol.interaction.DragPan.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'setProperties',
-    ol.interaction.DragPan.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'unset',
-    ol.interaction.DragPan.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'changed',
-    ol.interaction.DragPan.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'dispatchEvent',
-    ol.interaction.DragPan.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'getRevision',
-    ol.interaction.DragPan.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'on',
-    ol.interaction.DragPan.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'once',
-    ol.interaction.DragPan.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'un',
-    ol.interaction.DragPan.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.DragPan.prototype,
-    'unByKey',
-    ol.interaction.DragPan.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'getActive',
-    ol.interaction.DragRotate.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'getMap',
-    ol.interaction.DragRotate.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'setActive',
-    ol.interaction.DragRotate.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'get',
-    ol.interaction.DragRotate.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'getKeys',
-    ol.interaction.DragRotate.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'getProperties',
-    ol.interaction.DragRotate.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'set',
-    ol.interaction.DragRotate.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'setProperties',
-    ol.interaction.DragRotate.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'unset',
-    ol.interaction.DragRotate.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'changed',
-    ol.interaction.DragRotate.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'dispatchEvent',
-    ol.interaction.DragRotate.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'getRevision',
-    ol.interaction.DragRotate.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'on',
-    ol.interaction.DragRotate.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'once',
-    ol.interaction.DragRotate.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'un',
-    ol.interaction.DragRotate.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.DragRotate.prototype,
-    'unByKey',
-    ol.interaction.DragRotate.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'getActive',
-    ol.interaction.DragRotateAndZoom.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'getMap',
-    ol.interaction.DragRotateAndZoom.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'setActive',
-    ol.interaction.DragRotateAndZoom.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'get',
-    ol.interaction.DragRotateAndZoom.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'getKeys',
-    ol.interaction.DragRotateAndZoom.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'getProperties',
-    ol.interaction.DragRotateAndZoom.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'set',
-    ol.interaction.DragRotateAndZoom.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'setProperties',
-    ol.interaction.DragRotateAndZoom.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'unset',
-    ol.interaction.DragRotateAndZoom.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'changed',
-    ol.interaction.DragRotateAndZoom.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'dispatchEvent',
-    ol.interaction.DragRotateAndZoom.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'getRevision',
-    ol.interaction.DragRotateAndZoom.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'on',
-    ol.interaction.DragRotateAndZoom.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'once',
-    ol.interaction.DragRotateAndZoom.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'un',
-    ol.interaction.DragRotateAndZoom.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.DragRotateAndZoom.prototype,
-    'unByKey',
-    ol.interaction.DragRotateAndZoom.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'getGeometry',
-    ol.interaction.DragZoom.prototype.getGeometry);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'getActive',
-    ol.interaction.DragZoom.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'getMap',
-    ol.interaction.DragZoom.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'setActive',
-    ol.interaction.DragZoom.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'get',
-    ol.interaction.DragZoom.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'getKeys',
-    ol.interaction.DragZoom.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'getProperties',
-    ol.interaction.DragZoom.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'set',
-    ol.interaction.DragZoom.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'setProperties',
-    ol.interaction.DragZoom.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'unset',
-    ol.interaction.DragZoom.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'changed',
-    ol.interaction.DragZoom.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'dispatchEvent',
-    ol.interaction.DragZoom.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'getRevision',
-    ol.interaction.DragZoom.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'on',
-    ol.interaction.DragZoom.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'once',
-    ol.interaction.DragZoom.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'un',
-    ol.interaction.DragZoom.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.DragZoom.prototype,
-    'unByKey',
-    ol.interaction.DragZoom.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'getActive',
-    ol.interaction.Draw.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'getMap',
-    ol.interaction.Draw.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'setActive',
-    ol.interaction.Draw.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'get',
-    ol.interaction.Draw.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'getKeys',
-    ol.interaction.Draw.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'getProperties',
-    ol.interaction.Draw.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'set',
-    ol.interaction.Draw.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'setProperties',
-    ol.interaction.Draw.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'unset',
-    ol.interaction.Draw.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'changed',
-    ol.interaction.Draw.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'dispatchEvent',
-    ol.interaction.Draw.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'getRevision',
-    ol.interaction.Draw.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'on',
-    ol.interaction.Draw.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'once',
-    ol.interaction.Draw.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'un',
-    ol.interaction.Draw.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.Draw.prototype,
-    'unByKey',
-    ol.interaction.Draw.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Draw.Event.prototype,
-    'type',
-    ol.interaction.Draw.Event.prototype.type);
-
-goog.exportProperty(
-    ol.interaction.Draw.Event.prototype,
-    'target',
-    ol.interaction.Draw.Event.prototype.target);
-
-goog.exportProperty(
-    ol.interaction.Draw.Event.prototype,
-    'preventDefault',
-    ol.interaction.Draw.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.interaction.Draw.Event.prototype,
-    'stopPropagation',
-    ol.interaction.Draw.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'getActive',
-    ol.interaction.Extent.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'getMap',
-    ol.interaction.Extent.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'setActive',
-    ol.interaction.Extent.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'get',
-    ol.interaction.Extent.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'getKeys',
-    ol.interaction.Extent.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'getProperties',
-    ol.interaction.Extent.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'set',
-    ol.interaction.Extent.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'setProperties',
-    ol.interaction.Extent.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'unset',
-    ol.interaction.Extent.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'changed',
-    ol.interaction.Extent.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'dispatchEvent',
-    ol.interaction.Extent.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'getRevision',
-    ol.interaction.Extent.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'on',
-    ol.interaction.Extent.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'once',
-    ol.interaction.Extent.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'un',
-    ol.interaction.Extent.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.Extent.prototype,
-    'unByKey',
-    ol.interaction.Extent.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Extent.Event.prototype,
-    'type',
-    ol.interaction.Extent.Event.prototype.type);
-
-goog.exportProperty(
-    ol.interaction.Extent.Event.prototype,
-    'target',
-    ol.interaction.Extent.Event.prototype.target);
-
-goog.exportProperty(
-    ol.interaction.Extent.Event.prototype,
-    'preventDefault',
-    ol.interaction.Extent.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.interaction.Extent.Event.prototype,
-    'stopPropagation',
-    ol.interaction.Extent.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'getActive',
-    ol.interaction.KeyboardPan.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'getMap',
-    ol.interaction.KeyboardPan.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'setActive',
-    ol.interaction.KeyboardPan.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'get',
-    ol.interaction.KeyboardPan.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'getKeys',
-    ol.interaction.KeyboardPan.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'getProperties',
-    ol.interaction.KeyboardPan.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'set',
-    ol.interaction.KeyboardPan.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'setProperties',
-    ol.interaction.KeyboardPan.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'unset',
-    ol.interaction.KeyboardPan.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'changed',
-    ol.interaction.KeyboardPan.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'dispatchEvent',
-    ol.interaction.KeyboardPan.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'getRevision',
-    ol.interaction.KeyboardPan.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'on',
-    ol.interaction.KeyboardPan.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'once',
-    ol.interaction.KeyboardPan.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'un',
-    ol.interaction.KeyboardPan.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.KeyboardPan.prototype,
-    'unByKey',
-    ol.interaction.KeyboardPan.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'getActive',
-    ol.interaction.KeyboardZoom.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'getMap',
-    ol.interaction.KeyboardZoom.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'setActive',
-    ol.interaction.KeyboardZoom.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'get',
-    ol.interaction.KeyboardZoom.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'getKeys',
-    ol.interaction.KeyboardZoom.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'getProperties',
-    ol.interaction.KeyboardZoom.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'set',
-    ol.interaction.KeyboardZoom.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'setProperties',
-    ol.interaction.KeyboardZoom.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'unset',
-    ol.interaction.KeyboardZoom.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'changed',
-    ol.interaction.KeyboardZoom.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'dispatchEvent',
-    ol.interaction.KeyboardZoom.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'getRevision',
-    ol.interaction.KeyboardZoom.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'on',
-    ol.interaction.KeyboardZoom.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'once',
-    ol.interaction.KeyboardZoom.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'un',
-    ol.interaction.KeyboardZoom.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.KeyboardZoom.prototype,
-    'unByKey',
-    ol.interaction.KeyboardZoom.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'getActive',
-    ol.interaction.Modify.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'getMap',
-    ol.interaction.Modify.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'setActive',
-    ol.interaction.Modify.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'get',
-    ol.interaction.Modify.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'getKeys',
-    ol.interaction.Modify.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'getProperties',
-    ol.interaction.Modify.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'set',
-    ol.interaction.Modify.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'setProperties',
-    ol.interaction.Modify.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'unset',
-    ol.interaction.Modify.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'changed',
-    ol.interaction.Modify.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'dispatchEvent',
-    ol.interaction.Modify.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'getRevision',
-    ol.interaction.Modify.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'on',
-    ol.interaction.Modify.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'once',
-    ol.interaction.Modify.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'un',
-    ol.interaction.Modify.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.Modify.prototype,
-    'unByKey',
-    ol.interaction.Modify.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Modify.Event.prototype,
-    'type',
-    ol.interaction.Modify.Event.prototype.type);
-
-goog.exportProperty(
-    ol.interaction.Modify.Event.prototype,
-    'target',
-    ol.interaction.Modify.Event.prototype.target);
-
-goog.exportProperty(
-    ol.interaction.Modify.Event.prototype,
-    'preventDefault',
-    ol.interaction.Modify.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.interaction.Modify.Event.prototype,
-    'stopPropagation',
-    ol.interaction.Modify.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'getActive',
-    ol.interaction.MouseWheelZoom.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'getMap',
-    ol.interaction.MouseWheelZoom.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'setActive',
-    ol.interaction.MouseWheelZoom.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'get',
-    ol.interaction.MouseWheelZoom.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'getKeys',
-    ol.interaction.MouseWheelZoom.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'getProperties',
-    ol.interaction.MouseWheelZoom.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'set',
-    ol.interaction.MouseWheelZoom.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'setProperties',
-    ol.interaction.MouseWheelZoom.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'unset',
-    ol.interaction.MouseWheelZoom.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'changed',
-    ol.interaction.MouseWheelZoom.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'dispatchEvent',
-    ol.interaction.MouseWheelZoom.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'getRevision',
-    ol.interaction.MouseWheelZoom.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'on',
-    ol.interaction.MouseWheelZoom.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'once',
-    ol.interaction.MouseWheelZoom.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'un',
-    ol.interaction.MouseWheelZoom.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.MouseWheelZoom.prototype,
-    'unByKey',
-    ol.interaction.MouseWheelZoom.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'getActive',
-    ol.interaction.PinchRotate.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'getMap',
-    ol.interaction.PinchRotate.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'setActive',
-    ol.interaction.PinchRotate.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'get',
-    ol.interaction.PinchRotate.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'getKeys',
-    ol.interaction.PinchRotate.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'getProperties',
-    ol.interaction.PinchRotate.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'set',
-    ol.interaction.PinchRotate.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'setProperties',
-    ol.interaction.PinchRotate.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'unset',
-    ol.interaction.PinchRotate.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'changed',
-    ol.interaction.PinchRotate.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'dispatchEvent',
-    ol.interaction.PinchRotate.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'getRevision',
-    ol.interaction.PinchRotate.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'on',
-    ol.interaction.PinchRotate.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'once',
-    ol.interaction.PinchRotate.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'un',
-    ol.interaction.PinchRotate.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.PinchRotate.prototype,
-    'unByKey',
-    ol.interaction.PinchRotate.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'getActive',
-    ol.interaction.PinchZoom.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'getMap',
-    ol.interaction.PinchZoom.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'setActive',
-    ol.interaction.PinchZoom.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'get',
-    ol.interaction.PinchZoom.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'getKeys',
-    ol.interaction.PinchZoom.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'getProperties',
-    ol.interaction.PinchZoom.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'set',
-    ol.interaction.PinchZoom.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'setProperties',
-    ol.interaction.PinchZoom.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'unset',
-    ol.interaction.PinchZoom.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'changed',
-    ol.interaction.PinchZoom.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'dispatchEvent',
-    ol.interaction.PinchZoom.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'getRevision',
-    ol.interaction.PinchZoom.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'on',
-    ol.interaction.PinchZoom.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'once',
-    ol.interaction.PinchZoom.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'un',
-    ol.interaction.PinchZoom.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.PinchZoom.prototype,
-    'unByKey',
-    ol.interaction.PinchZoom.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'getActive',
-    ol.interaction.Select.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'getMap',
-    ol.interaction.Select.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'setActive',
-    ol.interaction.Select.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'get',
-    ol.interaction.Select.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'getKeys',
-    ol.interaction.Select.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'getProperties',
-    ol.interaction.Select.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'set',
-    ol.interaction.Select.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'setProperties',
-    ol.interaction.Select.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'unset',
-    ol.interaction.Select.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'changed',
-    ol.interaction.Select.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'dispatchEvent',
-    ol.interaction.Select.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'getRevision',
-    ol.interaction.Select.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'on',
-    ol.interaction.Select.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'once',
-    ol.interaction.Select.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'un',
-    ol.interaction.Select.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.Select.prototype,
-    'unByKey',
-    ol.interaction.Select.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Select.Event.prototype,
-    'type',
-    ol.interaction.Select.Event.prototype.type);
-
-goog.exportProperty(
-    ol.interaction.Select.Event.prototype,
-    'target',
-    ol.interaction.Select.Event.prototype.target);
-
-goog.exportProperty(
-    ol.interaction.Select.Event.prototype,
-    'preventDefault',
-    ol.interaction.Select.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.interaction.Select.Event.prototype,
-    'stopPropagation',
-    ol.interaction.Select.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'getActive',
-    ol.interaction.Snap.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'getMap',
-    ol.interaction.Snap.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'setActive',
-    ol.interaction.Snap.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'get',
-    ol.interaction.Snap.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'getKeys',
-    ol.interaction.Snap.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'getProperties',
-    ol.interaction.Snap.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'set',
-    ol.interaction.Snap.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'setProperties',
-    ol.interaction.Snap.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'unset',
-    ol.interaction.Snap.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'changed',
-    ol.interaction.Snap.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'dispatchEvent',
-    ol.interaction.Snap.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'getRevision',
-    ol.interaction.Snap.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'on',
-    ol.interaction.Snap.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'once',
-    ol.interaction.Snap.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'un',
-    ol.interaction.Snap.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.Snap.prototype,
-    'unByKey',
-    ol.interaction.Snap.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'getActive',
-    ol.interaction.Translate.prototype.getActive);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'getMap',
-    ol.interaction.Translate.prototype.getMap);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'setActive',
-    ol.interaction.Translate.prototype.setActive);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'get',
-    ol.interaction.Translate.prototype.get);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'getKeys',
-    ol.interaction.Translate.prototype.getKeys);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'getProperties',
-    ol.interaction.Translate.prototype.getProperties);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'set',
-    ol.interaction.Translate.prototype.set);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'setProperties',
-    ol.interaction.Translate.prototype.setProperties);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'unset',
-    ol.interaction.Translate.prototype.unset);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'changed',
-    ol.interaction.Translate.prototype.changed);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'dispatchEvent',
-    ol.interaction.Translate.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'getRevision',
-    ol.interaction.Translate.prototype.getRevision);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'on',
-    ol.interaction.Translate.prototype.on);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'once',
-    ol.interaction.Translate.prototype.once);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'un',
-    ol.interaction.Translate.prototype.un);
-
-goog.exportProperty(
-    ol.interaction.Translate.prototype,
-    'unByKey',
-    ol.interaction.Translate.prototype.unByKey);
-
-goog.exportProperty(
-    ol.interaction.Translate.Event.prototype,
-    'type',
-    ol.interaction.Translate.Event.prototype.type);
-
-goog.exportProperty(
-    ol.interaction.Translate.Event.prototype,
-    'target',
-    ol.interaction.Translate.Event.prototype.target);
-
-goog.exportProperty(
-    ol.interaction.Translate.Event.prototype,
-    'preventDefault',
-    ol.interaction.Translate.Event.prototype.preventDefault);
-
-goog.exportProperty(
-    ol.interaction.Translate.Event.prototype,
-    'stopPropagation',
-    ol.interaction.Translate.Event.prototype.stopPropagation);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'get',
-    ol.geom.Geometry.prototype.get);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'getKeys',
-    ol.geom.Geometry.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'getProperties',
-    ol.geom.Geometry.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'set',
-    ol.geom.Geometry.prototype.set);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'setProperties',
-    ol.geom.Geometry.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'unset',
-    ol.geom.Geometry.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'changed',
-    ol.geom.Geometry.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'dispatchEvent',
-    ol.geom.Geometry.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'getRevision',
-    ol.geom.Geometry.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'on',
-    ol.geom.Geometry.prototype.on);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'once',
-    ol.geom.Geometry.prototype.once);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'un',
-    ol.geom.Geometry.prototype.un);
-
-goog.exportProperty(
-    ol.geom.Geometry.prototype,
-    'unByKey',
-    ol.geom.Geometry.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'getClosestPoint',
-    ol.geom.SimpleGeometry.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'intersectsCoordinate',
-    ol.geom.SimpleGeometry.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'getExtent',
-    ol.geom.SimpleGeometry.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'rotate',
-    ol.geom.SimpleGeometry.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'scale',
-    ol.geom.SimpleGeometry.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'simplify',
-    ol.geom.SimpleGeometry.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'transform',
-    ol.geom.SimpleGeometry.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'get',
-    ol.geom.SimpleGeometry.prototype.get);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'getKeys',
-    ol.geom.SimpleGeometry.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'getProperties',
-    ol.geom.SimpleGeometry.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'set',
-    ol.geom.SimpleGeometry.prototype.set);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'setProperties',
-    ol.geom.SimpleGeometry.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'unset',
-    ol.geom.SimpleGeometry.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'changed',
-    ol.geom.SimpleGeometry.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'dispatchEvent',
-    ol.geom.SimpleGeometry.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'getRevision',
-    ol.geom.SimpleGeometry.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'on',
-    ol.geom.SimpleGeometry.prototype.on);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'once',
-    ol.geom.SimpleGeometry.prototype.once);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'un',
-    ol.geom.SimpleGeometry.prototype.un);
-
-goog.exportProperty(
-    ol.geom.SimpleGeometry.prototype,
-    'unByKey',
-    ol.geom.SimpleGeometry.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getFirstCoordinate',
-    ol.geom.Circle.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getLastCoordinate',
-    ol.geom.Circle.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getLayout',
-    ol.geom.Circle.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'rotate',
-    ol.geom.Circle.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'scale',
-    ol.geom.Circle.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getClosestPoint',
-    ol.geom.Circle.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'intersectsCoordinate',
-    ol.geom.Circle.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getExtent',
-    ol.geom.Circle.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'simplify',
-    ol.geom.Circle.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'get',
-    ol.geom.Circle.prototype.get);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getKeys',
-    ol.geom.Circle.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getProperties',
-    ol.geom.Circle.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'set',
-    ol.geom.Circle.prototype.set);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'setProperties',
-    ol.geom.Circle.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'unset',
-    ol.geom.Circle.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'changed',
-    ol.geom.Circle.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'dispatchEvent',
-    ol.geom.Circle.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'getRevision',
-    ol.geom.Circle.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'on',
-    ol.geom.Circle.prototype.on);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'once',
-    ol.geom.Circle.prototype.once);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'un',
-    ol.geom.Circle.prototype.un);
-
-goog.exportProperty(
-    ol.geom.Circle.prototype,
-    'unByKey',
-    ol.geom.Circle.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'getClosestPoint',
-    ol.geom.GeometryCollection.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'intersectsCoordinate',
-    ol.geom.GeometryCollection.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'getExtent',
-    ol.geom.GeometryCollection.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'rotate',
-    ol.geom.GeometryCollection.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'scale',
-    ol.geom.GeometryCollection.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'simplify',
-    ol.geom.GeometryCollection.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'transform',
-    ol.geom.GeometryCollection.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'get',
-    ol.geom.GeometryCollection.prototype.get);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'getKeys',
-    ol.geom.GeometryCollection.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'getProperties',
-    ol.geom.GeometryCollection.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'set',
-    ol.geom.GeometryCollection.prototype.set);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'setProperties',
-    ol.geom.GeometryCollection.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'unset',
-    ol.geom.GeometryCollection.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'changed',
-    ol.geom.GeometryCollection.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'dispatchEvent',
-    ol.geom.GeometryCollection.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'getRevision',
-    ol.geom.GeometryCollection.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'on',
-    ol.geom.GeometryCollection.prototype.on);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'once',
-    ol.geom.GeometryCollection.prototype.once);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'un',
-    ol.geom.GeometryCollection.prototype.un);
-
-goog.exportProperty(
-    ol.geom.GeometryCollection.prototype,
-    'unByKey',
-    ol.geom.GeometryCollection.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getFirstCoordinate',
-    ol.geom.LinearRing.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getLastCoordinate',
-    ol.geom.LinearRing.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getLayout',
-    ol.geom.LinearRing.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'rotate',
-    ol.geom.LinearRing.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'scale',
-    ol.geom.LinearRing.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getClosestPoint',
-    ol.geom.LinearRing.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'intersectsCoordinate',
-    ol.geom.LinearRing.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getExtent',
-    ol.geom.LinearRing.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'simplify',
-    ol.geom.LinearRing.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'transform',
-    ol.geom.LinearRing.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'get',
-    ol.geom.LinearRing.prototype.get);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getKeys',
-    ol.geom.LinearRing.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getProperties',
-    ol.geom.LinearRing.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'set',
-    ol.geom.LinearRing.prototype.set);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'setProperties',
-    ol.geom.LinearRing.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'unset',
-    ol.geom.LinearRing.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'changed',
-    ol.geom.LinearRing.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'dispatchEvent',
-    ol.geom.LinearRing.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'getRevision',
-    ol.geom.LinearRing.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'on',
-    ol.geom.LinearRing.prototype.on);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'once',
-    ol.geom.LinearRing.prototype.once);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'un',
-    ol.geom.LinearRing.prototype.un);
-
-goog.exportProperty(
-    ol.geom.LinearRing.prototype,
-    'unByKey',
-    ol.geom.LinearRing.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getFirstCoordinate',
-    ol.geom.LineString.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getLastCoordinate',
-    ol.geom.LineString.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getLayout',
-    ol.geom.LineString.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'rotate',
-    ol.geom.LineString.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'scale',
-    ol.geom.LineString.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getClosestPoint',
-    ol.geom.LineString.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'intersectsCoordinate',
-    ol.geom.LineString.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getExtent',
-    ol.geom.LineString.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'simplify',
-    ol.geom.LineString.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'transform',
-    ol.geom.LineString.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'get',
-    ol.geom.LineString.prototype.get);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getKeys',
-    ol.geom.LineString.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getProperties',
-    ol.geom.LineString.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'set',
-    ol.geom.LineString.prototype.set);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'setProperties',
-    ol.geom.LineString.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'unset',
-    ol.geom.LineString.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'changed',
-    ol.geom.LineString.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'dispatchEvent',
-    ol.geom.LineString.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'getRevision',
-    ol.geom.LineString.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'on',
-    ol.geom.LineString.prototype.on);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'once',
-    ol.geom.LineString.prototype.once);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'un',
-    ol.geom.LineString.prototype.un);
-
-goog.exportProperty(
-    ol.geom.LineString.prototype,
-    'unByKey',
-    ol.geom.LineString.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getFirstCoordinate',
-    ol.geom.MultiLineString.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getLastCoordinate',
-    ol.geom.MultiLineString.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getLayout',
-    ol.geom.MultiLineString.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'rotate',
-    ol.geom.MultiLineString.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'scale',
-    ol.geom.MultiLineString.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getClosestPoint',
-    ol.geom.MultiLineString.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'intersectsCoordinate',
-    ol.geom.MultiLineString.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getExtent',
-    ol.geom.MultiLineString.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'simplify',
-    ol.geom.MultiLineString.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'transform',
-    ol.geom.MultiLineString.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'get',
-    ol.geom.MultiLineString.prototype.get);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getKeys',
-    ol.geom.MultiLineString.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getProperties',
-    ol.geom.MultiLineString.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'set',
-    ol.geom.MultiLineString.prototype.set);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'setProperties',
-    ol.geom.MultiLineString.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'unset',
-    ol.geom.MultiLineString.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'changed',
-    ol.geom.MultiLineString.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'dispatchEvent',
-    ol.geom.MultiLineString.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'getRevision',
-    ol.geom.MultiLineString.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'on',
-    ol.geom.MultiLineString.prototype.on);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'once',
-    ol.geom.MultiLineString.prototype.once);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'un',
-    ol.geom.MultiLineString.prototype.un);
-
-goog.exportProperty(
-    ol.geom.MultiLineString.prototype,
-    'unByKey',
-    ol.geom.MultiLineString.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getFirstCoordinate',
-    ol.geom.MultiPoint.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getLastCoordinate',
-    ol.geom.MultiPoint.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getLayout',
-    ol.geom.MultiPoint.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'rotate',
-    ol.geom.MultiPoint.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'scale',
-    ol.geom.MultiPoint.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getClosestPoint',
-    ol.geom.MultiPoint.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'intersectsCoordinate',
-    ol.geom.MultiPoint.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getExtent',
-    ol.geom.MultiPoint.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'simplify',
-    ol.geom.MultiPoint.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'transform',
-    ol.geom.MultiPoint.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'get',
-    ol.geom.MultiPoint.prototype.get);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getKeys',
-    ol.geom.MultiPoint.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getProperties',
-    ol.geom.MultiPoint.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'set',
-    ol.geom.MultiPoint.prototype.set);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'setProperties',
-    ol.geom.MultiPoint.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'unset',
-    ol.geom.MultiPoint.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'changed',
-    ol.geom.MultiPoint.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'dispatchEvent',
-    ol.geom.MultiPoint.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'getRevision',
-    ol.geom.MultiPoint.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'on',
-    ol.geom.MultiPoint.prototype.on);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'once',
-    ol.geom.MultiPoint.prototype.once);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'un',
-    ol.geom.MultiPoint.prototype.un);
-
-goog.exportProperty(
-    ol.geom.MultiPoint.prototype,
-    'unByKey',
-    ol.geom.MultiPoint.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getFirstCoordinate',
-    ol.geom.MultiPolygon.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getLastCoordinate',
-    ol.geom.MultiPolygon.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getLayout',
-    ol.geom.MultiPolygon.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'rotate',
-    ol.geom.MultiPolygon.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'scale',
-    ol.geom.MultiPolygon.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getClosestPoint',
-    ol.geom.MultiPolygon.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'intersectsCoordinate',
-    ol.geom.MultiPolygon.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getExtent',
-    ol.geom.MultiPolygon.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'simplify',
-    ol.geom.MultiPolygon.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'transform',
-    ol.geom.MultiPolygon.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'get',
-    ol.geom.MultiPolygon.prototype.get);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getKeys',
-    ol.geom.MultiPolygon.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getProperties',
-    ol.geom.MultiPolygon.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'set',
-    ol.geom.MultiPolygon.prototype.set);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'setProperties',
-    ol.geom.MultiPolygon.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'unset',
-    ol.geom.MultiPolygon.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'changed',
-    ol.geom.MultiPolygon.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'dispatchEvent',
-    ol.geom.MultiPolygon.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'getRevision',
-    ol.geom.MultiPolygon.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'on',
-    ol.geom.MultiPolygon.prototype.on);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'once',
-    ol.geom.MultiPolygon.prototype.once);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'un',
-    ol.geom.MultiPolygon.prototype.un);
-
-goog.exportProperty(
-    ol.geom.MultiPolygon.prototype,
-    'unByKey',
-    ol.geom.MultiPolygon.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getFirstCoordinate',
-    ol.geom.Point.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getLastCoordinate',
-    ol.geom.Point.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getLayout',
-    ol.geom.Point.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'rotate',
-    ol.geom.Point.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'scale',
-    ol.geom.Point.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getClosestPoint',
-    ol.geom.Point.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'intersectsCoordinate',
-    ol.geom.Point.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getExtent',
-    ol.geom.Point.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'simplify',
-    ol.geom.Point.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'transform',
-    ol.geom.Point.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'get',
-    ol.geom.Point.prototype.get);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getKeys',
-    ol.geom.Point.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getProperties',
-    ol.geom.Point.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'set',
-    ol.geom.Point.prototype.set);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'setProperties',
-    ol.geom.Point.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'unset',
-    ol.geom.Point.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'changed',
-    ol.geom.Point.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'dispatchEvent',
-    ol.geom.Point.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'getRevision',
-    ol.geom.Point.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'on',
-    ol.geom.Point.prototype.on);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'once',
-    ol.geom.Point.prototype.once);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'un',
-    ol.geom.Point.prototype.un);
-
-goog.exportProperty(
-    ol.geom.Point.prototype,
-    'unByKey',
-    ol.geom.Point.prototype.unByKey);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getFirstCoordinate',
-    ol.geom.Polygon.prototype.getFirstCoordinate);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getLastCoordinate',
-    ol.geom.Polygon.prototype.getLastCoordinate);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getLayout',
-    ol.geom.Polygon.prototype.getLayout);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'rotate',
-    ol.geom.Polygon.prototype.rotate);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'scale',
-    ol.geom.Polygon.prototype.scale);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getClosestPoint',
-    ol.geom.Polygon.prototype.getClosestPoint);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'intersectsCoordinate',
-    ol.geom.Polygon.prototype.intersectsCoordinate);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getExtent',
-    ol.geom.Polygon.prototype.getExtent);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'simplify',
-    ol.geom.Polygon.prototype.simplify);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'transform',
-    ol.geom.Polygon.prototype.transform);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'get',
-    ol.geom.Polygon.prototype.get);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getKeys',
-    ol.geom.Polygon.prototype.getKeys);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getProperties',
-    ol.geom.Polygon.prototype.getProperties);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'set',
-    ol.geom.Polygon.prototype.set);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'setProperties',
-    ol.geom.Polygon.prototype.setProperties);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'unset',
-    ol.geom.Polygon.prototype.unset);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'changed',
-    ol.geom.Polygon.prototype.changed);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'dispatchEvent',
-    ol.geom.Polygon.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'getRevision',
-    ol.geom.Polygon.prototype.getRevision);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'on',
-    ol.geom.Polygon.prototype.on);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'once',
-    ol.geom.Polygon.prototype.once);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'un',
-    ol.geom.Polygon.prototype.un);
-
-goog.exportProperty(
-    ol.geom.Polygon.prototype,
-    'unByKey',
-    ol.geom.Polygon.prototype.unByKey);
-
-goog.exportProperty(
-    ol.format.GML.prototype,
-    'readFeatures',
-    ol.format.GML.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.GML2.prototype,
-    'readFeatures',
-    ol.format.GML2.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.format.GML3.prototype,
-    'readFeatures',
-    ol.format.GML3.prototype.readFeatures);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'get',
-    ol.control.Control.prototype.get);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'getKeys',
-    ol.control.Control.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'getProperties',
-    ol.control.Control.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'set',
-    ol.control.Control.prototype.set);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'setProperties',
-    ol.control.Control.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'unset',
-    ol.control.Control.prototype.unset);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'changed',
-    ol.control.Control.prototype.changed);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'dispatchEvent',
-    ol.control.Control.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'getRevision',
-    ol.control.Control.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'on',
-    ol.control.Control.prototype.on);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'once',
-    ol.control.Control.prototype.once);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'un',
-    ol.control.Control.prototype.un);
-
-goog.exportProperty(
-    ol.control.Control.prototype,
-    'unByKey',
-    ol.control.Control.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'getMap',
-    ol.control.Attribution.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'setMap',
-    ol.control.Attribution.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'setTarget',
-    ol.control.Attribution.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'get',
-    ol.control.Attribution.prototype.get);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'getKeys',
-    ol.control.Attribution.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'getProperties',
-    ol.control.Attribution.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'set',
-    ol.control.Attribution.prototype.set);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'setProperties',
-    ol.control.Attribution.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'unset',
-    ol.control.Attribution.prototype.unset);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'changed',
-    ol.control.Attribution.prototype.changed);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'dispatchEvent',
-    ol.control.Attribution.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'getRevision',
-    ol.control.Attribution.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'on',
-    ol.control.Attribution.prototype.on);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'once',
-    ol.control.Attribution.prototype.once);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'un',
-    ol.control.Attribution.prototype.un);
-
-goog.exportProperty(
-    ol.control.Attribution.prototype,
-    'unByKey',
-    ol.control.Attribution.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'getMap',
-    ol.control.FullScreen.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'setMap',
-    ol.control.FullScreen.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'setTarget',
-    ol.control.FullScreen.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'get',
-    ol.control.FullScreen.prototype.get);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'getKeys',
-    ol.control.FullScreen.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'getProperties',
-    ol.control.FullScreen.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'set',
-    ol.control.FullScreen.prototype.set);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'setProperties',
-    ol.control.FullScreen.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'unset',
-    ol.control.FullScreen.prototype.unset);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'changed',
-    ol.control.FullScreen.prototype.changed);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'dispatchEvent',
-    ol.control.FullScreen.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'getRevision',
-    ol.control.FullScreen.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'on',
-    ol.control.FullScreen.prototype.on);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'once',
-    ol.control.FullScreen.prototype.once);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'un',
-    ol.control.FullScreen.prototype.un);
-
-goog.exportProperty(
-    ol.control.FullScreen.prototype,
-    'unByKey',
-    ol.control.FullScreen.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'getMap',
-    ol.control.MousePosition.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'setMap',
-    ol.control.MousePosition.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'setTarget',
-    ol.control.MousePosition.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'get',
-    ol.control.MousePosition.prototype.get);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'getKeys',
-    ol.control.MousePosition.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'getProperties',
-    ol.control.MousePosition.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'set',
-    ol.control.MousePosition.prototype.set);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'setProperties',
-    ol.control.MousePosition.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'unset',
-    ol.control.MousePosition.prototype.unset);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'changed',
-    ol.control.MousePosition.prototype.changed);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'dispatchEvent',
-    ol.control.MousePosition.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'getRevision',
-    ol.control.MousePosition.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'on',
-    ol.control.MousePosition.prototype.on);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'once',
-    ol.control.MousePosition.prototype.once);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'un',
-    ol.control.MousePosition.prototype.un);
-
-goog.exportProperty(
-    ol.control.MousePosition.prototype,
-    'unByKey',
-    ol.control.MousePosition.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'getMap',
-    ol.control.OverviewMap.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'setMap',
-    ol.control.OverviewMap.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'setTarget',
-    ol.control.OverviewMap.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'get',
-    ol.control.OverviewMap.prototype.get);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'getKeys',
-    ol.control.OverviewMap.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'getProperties',
-    ol.control.OverviewMap.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'set',
-    ol.control.OverviewMap.prototype.set);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'setProperties',
-    ol.control.OverviewMap.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'unset',
-    ol.control.OverviewMap.prototype.unset);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'changed',
-    ol.control.OverviewMap.prototype.changed);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'dispatchEvent',
-    ol.control.OverviewMap.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'getRevision',
-    ol.control.OverviewMap.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'on',
-    ol.control.OverviewMap.prototype.on);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'once',
-    ol.control.OverviewMap.prototype.once);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'un',
-    ol.control.OverviewMap.prototype.un);
-
-goog.exportProperty(
-    ol.control.OverviewMap.prototype,
-    'unByKey',
-    ol.control.OverviewMap.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'getMap',
-    ol.control.Rotate.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'setMap',
-    ol.control.Rotate.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'setTarget',
-    ol.control.Rotate.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'get',
-    ol.control.Rotate.prototype.get);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'getKeys',
-    ol.control.Rotate.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'getProperties',
-    ol.control.Rotate.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'set',
-    ol.control.Rotate.prototype.set);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'setProperties',
-    ol.control.Rotate.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'unset',
-    ol.control.Rotate.prototype.unset);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'changed',
-    ol.control.Rotate.prototype.changed);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'dispatchEvent',
-    ol.control.Rotate.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'getRevision',
-    ol.control.Rotate.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'on',
-    ol.control.Rotate.prototype.on);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'once',
-    ol.control.Rotate.prototype.once);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'un',
-    ol.control.Rotate.prototype.un);
-
-goog.exportProperty(
-    ol.control.Rotate.prototype,
-    'unByKey',
-    ol.control.Rotate.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'getMap',
-    ol.control.ScaleLine.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'setMap',
-    ol.control.ScaleLine.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'setTarget',
-    ol.control.ScaleLine.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'get',
-    ol.control.ScaleLine.prototype.get);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'getKeys',
-    ol.control.ScaleLine.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'getProperties',
-    ol.control.ScaleLine.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'set',
-    ol.control.ScaleLine.prototype.set);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'setProperties',
-    ol.control.ScaleLine.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'unset',
-    ol.control.ScaleLine.prototype.unset);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'changed',
-    ol.control.ScaleLine.prototype.changed);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'dispatchEvent',
-    ol.control.ScaleLine.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'getRevision',
-    ol.control.ScaleLine.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'on',
-    ol.control.ScaleLine.prototype.on);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'once',
-    ol.control.ScaleLine.prototype.once);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'un',
-    ol.control.ScaleLine.prototype.un);
-
-goog.exportProperty(
-    ol.control.ScaleLine.prototype,
-    'unByKey',
-    ol.control.ScaleLine.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'getMap',
-    ol.control.Zoom.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'setMap',
-    ol.control.Zoom.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'setTarget',
-    ol.control.Zoom.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'get',
-    ol.control.Zoom.prototype.get);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'getKeys',
-    ol.control.Zoom.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'getProperties',
-    ol.control.Zoom.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'set',
-    ol.control.Zoom.prototype.set);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'setProperties',
-    ol.control.Zoom.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'unset',
-    ol.control.Zoom.prototype.unset);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'changed',
-    ol.control.Zoom.prototype.changed);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'dispatchEvent',
-    ol.control.Zoom.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'getRevision',
-    ol.control.Zoom.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'on',
-    ol.control.Zoom.prototype.on);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'once',
-    ol.control.Zoom.prototype.once);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'un',
-    ol.control.Zoom.prototype.un);
-
-goog.exportProperty(
-    ol.control.Zoom.prototype,
-    'unByKey',
-    ol.control.Zoom.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'getMap',
-    ol.control.ZoomSlider.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'setMap',
-    ol.control.ZoomSlider.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'setTarget',
-    ol.control.ZoomSlider.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'get',
-    ol.control.ZoomSlider.prototype.get);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'getKeys',
-    ol.control.ZoomSlider.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'getProperties',
-    ol.control.ZoomSlider.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'set',
-    ol.control.ZoomSlider.prototype.set);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'setProperties',
-    ol.control.ZoomSlider.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'unset',
-    ol.control.ZoomSlider.prototype.unset);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'changed',
-    ol.control.ZoomSlider.prototype.changed);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'dispatchEvent',
-    ol.control.ZoomSlider.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'getRevision',
-    ol.control.ZoomSlider.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'on',
-    ol.control.ZoomSlider.prototype.on);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'once',
-    ol.control.ZoomSlider.prototype.once);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'un',
-    ol.control.ZoomSlider.prototype.un);
-
-goog.exportProperty(
-    ol.control.ZoomSlider.prototype,
-    'unByKey',
-    ol.control.ZoomSlider.prototype.unByKey);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'getMap',
-    ol.control.ZoomToExtent.prototype.getMap);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'setMap',
-    ol.control.ZoomToExtent.prototype.setMap);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'setTarget',
-    ol.control.ZoomToExtent.prototype.setTarget);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'get',
-    ol.control.ZoomToExtent.prototype.get);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'getKeys',
-    ol.control.ZoomToExtent.prototype.getKeys);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'getProperties',
-    ol.control.ZoomToExtent.prototype.getProperties);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'set',
-    ol.control.ZoomToExtent.prototype.set);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'setProperties',
-    ol.control.ZoomToExtent.prototype.setProperties);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'unset',
-    ol.control.ZoomToExtent.prototype.unset);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'changed',
-    ol.control.ZoomToExtent.prototype.changed);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'dispatchEvent',
-    ol.control.ZoomToExtent.prototype.dispatchEvent);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'getRevision',
-    ol.control.ZoomToExtent.prototype.getRevision);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'on',
-    ol.control.ZoomToExtent.prototype.on);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'once',
-    ol.control.ZoomToExtent.prototype.once);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'un',
-    ol.control.ZoomToExtent.prototype.un);
-
-goog.exportProperty(
-    ol.control.ZoomToExtent.prototype,
-    'unByKey',
-    ol.control.ZoomToExtent.prototype.unByKey);
-ol.VERSION = 'v3.19.1';
-OPENLAYERS.ol = ol;
-
-  return OPENLAYERS.ol;
-}));
diff --git a/resources/assets/js/ol.js b/resources/assets/js/ol.js
index 1e6c7cb2ceecf5c0e96fbe753ed628745f3f590d..6aa50b147a7104a310580d236622a9d3a052e57d 100644
--- a/resources/assets/js/ol.js
+++ b/resources/assets/js/ol.js
@@ -1,945 +1,23937 @@
-// OpenLayers 3. See https://openlayers.org/
+// OpenLayers 3. See http://openlayers.org/
 // License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md
-// Version: v3.19.1
-;(function (root, factory) {
-  if (typeof exports === "object") {
-    module.exports = factory();
-  } else if (typeof define === "function" && define.amd) {
-    define([], factory);
-  } else {
-    root.ol = factory();
-  }
-}(this, function () {
-  var OPENLAYERS = {};
-  var k,aa=this;function r(a,b){var c=a.split("."),d=OPENLAYERS||aa;c[0]in d||!d.execScript||d.execScript("var "+c[0]);for(var e;c.length&&(e=c.shift());)c.length||void 0===b?d[e]?d=d[e]:d=d[e]={}:d[e]=b};var ba,ca;function v(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a}function da(){}function ea(a){return a.On||(a.On=++fa)}var fa=0;function ga(a){this.message="Assertion failed. See https://openlayers.org/en/v3.19.1/doc/errors/#"+a+" for details.";this.code=a;this.name="AssertionError"}v(ga,Error);function ha(a,b){if(!a)throw new ga(b);};function ia(a,b,c){return Math.min(Math.max(a,b),c)}var ja=function(){var a;"cosh"in Math?a=Math.cosh:a=function(a){a=Math.exp(a);return(a+1/a)/2};return a}();function ka(a){ha(0<a,29);return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))}function la(a,b,c,d,e,f){var g=e-c,h=f-d;if(0!==g||0!==h){var l=((a-c)*g+(b-d)*h)/(g*g+h*h);1<l?(c=e,d=f):0<l&&(c+=g*l,d+=h*l)}return ma(a,b,c,d)}function ma(a,b,c,d){a=c-a;b=d-b;return a*a+b*b}function na(a){return a*Math.PI/180}
-function oa(a,b){var c=a%b;return 0>c*b?c+b:c}function pa(a,b,c){return a+c*(b-a)};function qa(a){return function(b){if(b)return[ia(b[0],a[0],a[2]),ia(b[1],a[1],a[3])]}}function sa(a){return a};function ta(a,b,c){this.center=a;this.resolution=b;this.rotation=c};var ua="function"===typeof Object.assign?Object.assign:function(a,b){if(!a||!a)throw new TypeError("Cannot convert undefined or null to object");for(var c=Object(a),d=1,e=arguments.length;d<e;++d){var f=arguments[d];if(void 0!==f&&null!==f)for(var g in f)f.hasOwnProperty(g)&&(c[g]=f[g])}return c};function va(a){for(var b in a)delete a[b]}function wa(a){var b=[],c;for(c in a)b.push(a[c]);return b}function xa(a){for(var b in a)return!1;return!b};function ya(a){function b(b){var d=a.listener,e=a.jg||a.target;a.lg&&za(a);return d.call(e,b)}return a.kg=b}function Aa(a,b,c,d){for(var e,f=0,g=a.length;f<g;++f)if(e=a[f],e.listener===b&&e.jg===c)return d&&(e.deleteIndex=f),e}function Ba(a,b){var c=a.$a;return c?c[b]:void 0}function Ca(a){var b=a.$a;b||(b=a.$a={});return b}
-function Da(a,b){var c=Ba(a,b);if(c){for(var d=0,e=c.length;d<e;++d)a.removeEventListener(b,c[d].kg),va(c[d]);c.length=0;if(c=a.$a)delete c[b],0===Object.keys(c).length&&delete a.$a}}function w(a,b,c,d,e){var f=Ca(a),g=f[b];g||(g=f[b]=[]);(f=Aa(g,c,d,!1))?e||(f.lg=!1):(f={jg:d,lg:!!e,listener:c,target:a,type:b},a.addEventListener(b,ya(f)),g.push(f));return f}function Ea(a,b,c,d){return w(a,b,c,d,!0)}function Fa(a,b,c,d){(a=Ba(a,b))&&(c=Aa(a,c,d,!0))&&za(c)}
-function za(a){if(a&&a.target){a.target.removeEventListener(a.type,a.kg);var b=Ba(a.target,a.type);if(b){var c="deleteIndex"in a?a.deleteIndex:b.indexOf(a);-1!==c&&b.splice(c,1);0===b.length&&Da(a.target,a.type)}va(a)}}function Ha(a){var b=Ca(a),c;for(c in b)Da(a,c)};function Ia(){}Ia.prototype.Ib=!1;function Ja(a){a.Ib||(a.Ib=!0,a.la())}Ia.prototype.la=da;function Ka(a){this.type=a;this.target=null}Ka.prototype.preventDefault=Ka.prototype.stopPropagation=function(){this.io=!0};function La(a){a.stopPropagation()};function Ma(){this.Qa={};this.za={};this.na={}}v(Ma,Ia);Ma.prototype.addEventListener=function(a,b){var c=this.na[a];c||(c=this.na[a]=[]);-1===c.indexOf(b)&&c.push(b)};
-Ma.prototype.b=function(a){var b="string"===typeof a?new Ka(a):a;a=b.type;b.target=this;var c=this.na[a],d;if(c){a in this.za||(this.za[a]=0,this.Qa[a]=0);++this.za[a];for(var e=0,f=c.length;e<f;++e)if(!1===c[e].call(this,b)||b.io){d=!1;break}--this.za[a];if(0===this.za[a]){b=this.Qa[a];for(delete this.Qa[a];b--;)this.removeEventListener(a,da);delete this.za[a]}return d}};Ma.prototype.la=function(){Ha(this)};function Na(a,b){return b?b in a.na:0<Object.keys(a.na).length}
-Ma.prototype.removeEventListener=function(a,b){var c=this.na[a];if(c){var d=c.indexOf(b);a in this.Qa?(c[d]=da,++this.Qa[a]):(c.splice(d,1),0===c.length&&delete this.na[a])}};function Pa(){Ma.call(this);this.g=0}v(Pa,Ma);function Qa(a){if(Array.isArray(a))for(var b=0,c=a.length;b<c;++b)za(a[b]);else za(a)}k=Pa.prototype;k.v=function(){++this.g;this.b("change")};k.K=function(){return this.g};k.I=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=w(this,a[f],b,c);return e}return w(this,a,b,c)};k.L=function(a,b,c){if(Array.isArray(a)){for(var d=a.length,e=Array(d),f=0;f<d;++f)e[f]=Ea(this,a[f],b,c);return e}return Ea(this,a,b,c)};
-k.J=function(a,b,c){if(Array.isArray(a))for(var d=0,e=a.length;d<e;++d)Fa(this,a[d],b,c);else Fa(this,a,b,c)};k.M=Qa;function Ta(a,b,c){Ka.call(this,a);this.key=b;this.oldValue=c}v(Ta,Ka);function Ua(a){Pa.call(this);ea(this);this.T={};void 0!==a&&this.H(a)}v(Ua,Pa);var Va={};function Wa(a){return Va.hasOwnProperty(a)?Va[a]:Va[a]="change:"+a}k=Ua.prototype;k.get=function(a){var b;this.T.hasOwnProperty(a)&&(b=this.T[a]);return b};k.O=function(){return Object.keys(this.T)};k.N=function(){return ua({},this.T)};function Xa(a,b,c){var d;d=Wa(b);a.b(new Ta(d,b,c));a.b(new Ta("propertychange",b,c))}
-k.set=function(a,b,c){c?this.T[a]=b:(c=this.T[a],this.T[a]=b,c!==b&&Xa(this,a,c))};k.H=function(a,b){for(var c in a)this.set(c,a[c],b)};k.R=function(a,b){if(a in this.T){var c=this.T[a];delete this.T[a];b||Xa(this,a,c)}};function Ya(a,b){return a>b?1:a<b?-1:0}function Za(a,b){return 0<=a.indexOf(b)}function $a(a,b,c){var d=a.length;if(a[0]<=b)return 0;if(!(b<=a[d-1]))if(0<c)for(c=1;c<d;++c){if(a[c]<b)return c-1}else if(0>c)for(c=1;c<d;++c){if(a[c]<=b)return c}else for(c=1;c<d;++c){if(a[c]==b)return c;if(a[c]<b)return a[c-1]-b<b-a[c]?c-1:c}return d-1}function ab(a){return a.reduce(function(a,c){return Array.isArray(c)?a.concat(ab(c)):a.concat(c)},[])}
-function bb(a,b){var c,d=Array.isArray(b)?b:[b],e=d.length;for(c=0;c<e;c++)a[a.length]=d[c]}function cb(a,b){var c=a.indexOf(b),d=-1<c;d&&a.splice(c,1);return d}function db(a,b){for(var c=a.length>>>0,d,e=0;e<c;e++)if(d=a[e],b(d,e,a))return d;return null}function eb(a,b){var c=a.length;if(c!==b.length)return!1;for(var d=0;d<c;d++)if(a[d]!==b[d])return!1;return!0}
-function fb(a){var b=gb,c=a.length,d=Array(a.length),e;for(e=0;e<c;e++)d[e]={index:e,value:a[e]};d.sort(function(a,c){return b(a.value,c.value)||a.index-c.index});for(e=0;e<a.length;e++)a[e]=d[e].value}function hb(a,b){var c;return a.every(function(d,e){c=e;return!b(d,e,a)})?-1:c}function ib(a,b){var c=b||Ya;return a.every(function(b,e){if(0===e)return!0;var f=c(a[e-1],b);return!(0<f||0===f)})};function jb(a){return function(b,c,d){if(void 0!==b)return b=$a(a,b,d),b=ia(b+c,0,a.length-1),c=Math.floor(b),b!=c&&c<a.length-1?a[c]/Math.pow(a[c]/a[c+1],b-c):a[c]}}function kb(a,b,c){return function(d,e,f){if(void 0!==d)return d=Math.max(Math.floor(Math.log(b/d)/Math.log(a)+(-f/2+.5))+e,0),void 0!==c&&(d=Math.min(d,c)),b/Math.pow(a,d)}};function lb(a){if(void 0!==a)return 0}function mb(a,b){if(void 0!==a)return a+b}function nb(a){var b=2*Math.PI/a;return function(a,d){if(void 0!==a)return a=Math.floor((a+d)/b+.5)*b}}function ob(){var a=na(5);return function(b,c){if(void 0!==b)return Math.abs(b+c)<=a?0:b+c}};function pb(a,b){var c=void 0!==b?a.toFixed(b):""+a,d=c.indexOf("."),d=-1===d?c.length:d;return 2<d?c:Array(3-d).join("0")+c}function qb(a){a=(""+a).split(".");for(var b=["1","3"],c=0;c<Math.max(a.length,b.length);c++){var d=parseInt(a[c]||"0",10),e=parseInt(b[c]||"0",10);if(d>e)return 1;if(e>d)return-1}return 0};function rb(a,b){a[0]+=b[0];a[1]+=b[1];return a}function sb(a,b){var c=a[0],d=a[1],e=b[0],f=b[1],g=e[0],e=e[1],h=f[0],f=f[1],l=h-g,m=f-e,c=0===l&&0===m?0:(l*(c-g)+m*(d-e))/(l*l+m*m||0);0>=c||(1<=c?(g=h,e=f):(g+=c*l,e+=c*m));return[g,e]}function tb(a,b,c){a=oa(a+180,360)-180;var d=Math.abs(3600*a);return Math.floor(d/3600)+"\u00b0 "+pb(Math.floor(d/60%60))+"\u2032 "+pb(d%60,c||0)+"\u2033 "+b.charAt(0>a?1:0)}
-function ub(a,b,c){return a?b.replace("{x}",a[0].toFixed(c)).replace("{y}",a[1].toFixed(c)):""}function vb(a,b){for(var c=!0,d=a.length-1;0<=d;--d)if(a[d]!=b[d]){c=!1;break}return c}function wb(a,b){var c=Math.cos(b),d=Math.sin(b),e=a[1]*c+a[0]*d;a[0]=a[0]*c-a[1]*d;a[1]=e;return a}function xb(a,b){var c=a[0]-b[0],d=a[1]-b[1];return c*c+d*d}function yb(a,b){return xb(a,sb(a,b))}function zb(a,b){return ub(a,"{x}, {y}",b)};function Ab(a){for(var b=Bb(),c=0,d=a.length;c<d;++c)Cb(b,a[c]);return b}function Db(a,b,c){return c?(c[0]=a[0]-b,c[1]=a[1]-b,c[2]=a[2]+b,c[3]=a[3]+b,c):[a[0]-b,a[1]-b,a[2]+b,a[3]+b]}function Eb(a,b){return b?(b[0]=a[0],b[1]=a[1],b[2]=a[2],b[3]=a[3],b):a.slice()}function Fb(a,b,c){b=b<a[0]?a[0]-b:a[2]<b?b-a[2]:0;a=c<a[1]?a[1]-c:a[3]<c?c-a[3]:0;return b*b+a*a}function Gb(a,b){return Hb(a,b[0],b[1])}function Ib(a,b){return a[0]<=b[0]&&b[2]<=a[2]&&a[1]<=b[1]&&b[3]<=a[3]}
-function Hb(a,b,c){return a[0]<=b&&b<=a[2]&&a[1]<=c&&c<=a[3]}function Jb(a,b){var c=a[1],d=a[2],e=a[3],f=b[0],g=b[1],h=0;f<a[0]?h|=16:f>d&&(h|=4);g<c?h|=8:g>e&&(h|=2);0===h&&(h=1);return h}function Bb(){return[Infinity,Infinity,-Infinity,-Infinity]}function Kb(a,b,c,d,e){return e?(e[0]=a,e[1]=b,e[2]=c,e[3]=d,e):[a,b,c,d]}function Lb(a,b){var c=a[0],d=a[1];return Kb(c,d,c,d,b)}function Mb(a,b,c,d,e){e=Kb(Infinity,Infinity,-Infinity,-Infinity,e);return Ob(e,a,b,c,d)}
-function Pb(a,b){return a[0]==b[0]&&a[2]==b[2]&&a[1]==b[1]&&a[3]==b[3]}function Qb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[2]>a[2]&&(a[2]=b[2]);b[1]<a[1]&&(a[1]=b[1]);b[3]>a[3]&&(a[3]=b[3]);return a}function Cb(a,b){b[0]<a[0]&&(a[0]=b[0]);b[0]>a[2]&&(a[2]=b[0]);b[1]<a[1]&&(a[1]=b[1]);b[1]>a[3]&&(a[3]=b[1])}function Ob(a,b,c,d,e){for(;c<d;c+=e){var f=a,g=b[c],h=b[c+1];f[0]=Math.min(f[0],g);f[1]=Math.min(f[1],h);f[2]=Math.max(f[2],g);f[3]=Math.max(f[3],h)}return a}
-function Rb(a,b,c){var d;return(d=b.call(c,Sb(a)))||(d=b.call(c,Tb(a)))||(d=b.call(c,Vb(a)))?d:(d=b.call(c,Wb(a)))?d:!1}function Xb(a){var b=0;Yb(a)||(b=Zb(a)*$b(a));return b}function Sb(a){return[a[0],a[1]]}function Tb(a){return[a[2],a[1]]}function ac(a){return[(a[0]+a[2])/2,(a[1]+a[3])/2]}
-function bc(a,b,c,d,e){var f=b*d[0]/2;d=b*d[1]/2;b=Math.cos(c);var g=Math.sin(c);c=f*b;f*=g;b*=d;var h=d*g,l=a[0],m=a[1];a=l-c+h;d=l-c-h;g=l+c-h;c=l+c+h;var h=m-f-b,l=m-f+b,n=m+f+b,f=m+f-b;return Kb(Math.min(a,d,g,c),Math.min(h,l,n,f),Math.max(a,d,g,c),Math.max(h,l,n,f),e)}function $b(a){return a[3]-a[1]}function cc(a,b,c){c=c?c:Bb();dc(a,b)&&(c[0]=a[0]>b[0]?a[0]:b[0],c[1]=a[1]>b[1]?a[1]:b[1],c[2]=a[2]<b[2]?a[2]:b[2],c[3]=a[3]<b[3]?a[3]:b[3]);return c}function Wb(a){return[a[0],a[3]]}
-function Vb(a){return[a[2],a[3]]}function Zb(a){return a[2]-a[0]}function dc(a,b){return a[0]<=b[2]&&a[2]>=b[0]&&a[1]<=b[3]&&a[3]>=b[1]}function Yb(a){return a[2]<a[0]||a[3]<a[1]}function ec(a,b){var c=(a[2]-a[0])/2*(b-1),d=(a[3]-a[1])/2*(b-1);a[0]-=c;a[2]+=c;a[1]-=d;a[3]+=d}
-function fc(a,b,c){a=[a[0],a[1],a[0],a[3],a[2],a[1],a[2],a[3]];b(a,a,2);var d=[a[0],a[2],a[4],a[6]],e=[a[1],a[3],a[5],a[7]];b=Math.min.apply(null,d);a=Math.min.apply(null,e);d=Math.max.apply(null,d);e=Math.max.apply(null,e);return Kb(b,a,d,e,c)};function gc(){return!0}function hc(){return!1};/*
-
- Latitude/longitude spherical geodesy formulae taken from
- http://www.movable-type.co.uk/scripts/latlong.html
- Licensed under CC-BY-3.0.
-*/
-function ic(a){this.radius=a}ic.prototype.a=function(a){for(var b=0,c=a.length,d=a[c-1][0],e=a[c-1][1],f=0;f<c;f++)var g=a[f][0],h=a[f][1],b=b+na(g-d)*(2+Math.sin(na(e))+Math.sin(na(h))),d=g,e=h;return b*this.radius*this.radius/2};ic.prototype.b=function(a,b){var c=na(a[1]),d=na(b[1]),e=(d-c)/2,f=na(b[0]-a[0])/2,c=Math.sin(e)*Math.sin(e)+Math.sin(f)*Math.sin(f)*Math.cos(c)*Math.cos(d);return 2*this.radius*Math.atan2(Math.sqrt(c),Math.sqrt(1-c))};
-ic.prototype.offset=function(a,b,c){var d=na(a[1]);b/=this.radius;var e=Math.asin(Math.sin(d)*Math.cos(b)+Math.cos(d)*Math.sin(b)*Math.cos(c));return[180*(na(a[0])+Math.atan2(Math.sin(c)*Math.sin(b)*Math.cos(d),Math.cos(b)-Math.sin(d)*Math.sin(e)))/Math.PI,180*e/Math.PI]};var jc=new ic(6370997);var kc={};kc.degrees=2*Math.PI*jc.radius/360;kc.ft=.3048;kc.m=1;kc["us-ft"]=1200/3937;
-function lc(a){this.eb=a.code;this.c=a.units;this.f=void 0!==a.extent?a.extent:null;this.i=void 0!==a.worldExtent?a.worldExtent:null;this.b=void 0!==a.axisOrientation?a.axisOrientation:"enu";this.g=void 0!==a.global?a.global:!1;this.a=!(!this.g||!this.f);this.l=void 0!==a.getPointResolution?a.getPointResolution:this.fk;this.j=null;this.o=a.metersPerUnit;var b=mc,c=a.code,d=nc||window.proj4;if("function"==typeof d&&void 0===b[c]){var e=d.defs(c);if(void 0!==e){void 0!==e.axis&&void 0===a.axisOrientation&&
-(this.b=e.axis);void 0===a.metersPerUnit&&(this.o=e.to_meter);void 0===a.units&&(this.c=e.units);for(var f in b)b=d.defs(f),void 0!==b&&(a=qc(f),b===e?rc([a,this]):(b=d(f,c),sc(a,this,b.forward,b.inverse)))}}}k=lc.prototype;k.Gj=function(){return this.eb};k.D=function(){return this.f};k.yb=function(){return this.c};k.dc=function(){return this.o||kc[this.c]};k.sk=function(){return this.i};k.bl=function(){return this.g};k.Ro=function(a){this.g=a;this.a=!(!a||!this.f)};
-k.Am=function(a){this.f=a;this.a=!(!this.g||!a)};k.Yo=function(a){this.i=a};k.Qo=function(a){this.l=a};k.fk=function(a,b){if("degrees"==this.yb())return a;var c=tc(this,qc("EPSG:4326")),d=[b[0]-a/2,b[1],b[0]+a/2,b[1],b[0],b[1]-a/2,b[0],b[1]+a/2],d=c(d,d,2),c=(jc.b(d.slice(0,2),d.slice(2,4))+jc.b(d.slice(4,6),d.slice(6,8)))/2,d=this.dc();void 0!==d&&(c/=d);return c};k.getPointResolution=function(a,b){return this.l(a,b)};var mc={},uc={},nc=null;
-function rc(a){vc(a);a.forEach(function(b){a.forEach(function(a){b!==a&&wc(b,a,xc)})})}function yc(){var a=zc,b=Ac,c=Bc;Cc.forEach(function(d){a.forEach(function(a){wc(d,a,b);wc(a,d,c)})})}function Dc(a){mc[a.eb]=a;wc(a,a,xc)}function vc(a){var b=[];a.forEach(function(a){b.push(Dc(a))})}function Ec(a){return a?"string"===typeof a?qc(a):a:qc("EPSG:3857")}function wc(a,b,c){a=a.eb;b=b.eb;a in uc||(uc[a]={});uc[a][b]=c}function sc(a,b,c,d){a=qc(a);b=qc(b);wc(a,b,Fc(c));wc(b,a,Fc(d))}
-function Fc(a){return function(b,c,d){var e=b.length;d=void 0!==d?d:2;c=void 0!==c?c:Array(e);var f,g;for(g=0;g<e;g+=d)for(f=a([b[g],b[g+1]]),c[g]=f[0],c[g+1]=f[1],f=d-1;2<=f;--f)c[g+f]=b[g+f];return c}}function qc(a){var b;if(a instanceof lc)b=a;else if("string"===typeof a){b=mc[a];var c=nc||window.proj4;void 0===b&&"function"==typeof c&&void 0!==c.defs(a)&&(b=new lc({code:a}),Dc(b))}return b||null}function Hc(a,b){if(a===b)return!0;var c=a.yb()===b.yb();return a.eb===b.eb?c:tc(a,b)===xc&&c}
-function Ic(a,b){var c=qc(a),d=qc(b);return tc(c,d)}function tc(a,b){var c=a.eb,d=b.eb,e;c in uc&&d in uc[c]&&(e=uc[c][d]);void 0===e&&(e=Jc);return e}function Jc(a,b){if(void 0!==b&&a!==b){for(var c=0,d=a.length;c<d;++c)b[c]=a[c];a=b}return a}function xc(a,b){var c;if(void 0!==b){c=0;for(var d=a.length;c<d;++c)b[c]=a[c];c=b}else c=a.slice();return c}function Kc(a,b,c){return Ic(b,c)(a,void 0,a.length)}function Lc(a,b,c){b=Ic(b,c);return fc(a,b)};function Mc(){Ua.call(this);this.s=Bb();this.u=-1;this.i={};this.o=this.j=0}v(Mc,Ua);k=Mc.prototype;k.xb=function(a,b){var c=b?b:[NaN,NaN];this.vb(a[0],a[1],c,Infinity);return c};k.jb=function(a){return this.Ac(a[0],a[1])};k.Ac=hc;k.D=function(a){this.u!=this.g&&(this.s=this.Pd(this.s),this.u=this.g);var b=this.s;a?(a[0]=b[0],a[1]=b[1],a[2]=b[2],a[3]=b[3]):a=b;return a};k.Db=function(a){return this.pd(a*a)};k.lb=function(a,b){this.oc(Ic(a,b));return this};function Nc(a,b,c,d,e,f){for(var g=f?f:[],h=0;b<c;b+=d){var l=a[b],m=a[b+1];g[h++]=e[0]*l+e[2]*m+e[4];g[h++]=e[1]*l+e[3]*m+e[5]}f&&g.length!=h&&(g.length=h);return g};function Oc(){Mc.call(this);this.ia="XY";this.a=2;this.A=null}v(Oc,Mc);function Pc(a){var b;"XY"==a?b=2:"XYZ"==a||"XYM"==a?b=3:"XYZM"==a&&(b=4);return b}k=Oc.prototype;k.Ac=hc;k.Pd=function(a){return Mb(this.A,0,this.A.length,this.a,a)};k.Lb=function(){return this.A.slice(0,this.a)};k.ka=function(){return this.A};k.Mb=function(){return this.A.slice(this.A.length-this.a)};k.Nb=function(){return this.ia};
-k.pd=function(a){this.o!=this.g&&(va(this.i),this.j=0,this.o=this.g);if(0>a||0!==this.j&&a<=this.j)return this;var b=a.toString();if(this.i.hasOwnProperty(b))return this.i[b];var c=this.Mc(a);if(c.ka().length<this.A.length)return this.i[b]=c;this.j=a;return this};k.Mc=function(){return this};k.sa=function(){return this.a};function Qc(a,b,c){a.a=Pc(b);a.ia=b;a.A=c}
-function Rc(a,b,c,d){if(b)c=Pc(b);else{for(b=0;b<d;++b){if(0===c.length){a.ia="XY";a.a=2;return}c=c[0]}c=c.length;var e;2==c?e="XY":3==c?e="XYZ":4==c&&(e="XYZM");b=e}a.ia=b;a.a=c}k.oc=function(a){this.A&&(a(this.A,this.A,this.a),this.v())};
-k.rotate=function(a,b){var c=this.ka();if(c){for(var d=c.length,e=this.sa(),f=c?c:[],g=Math.cos(a),h=Math.sin(a),l=b[0],m=b[1],n=0,p=0;p<d;p+=e){var q=c[p]-l,t=c[p+1]-m;f[n++]=l+q*g-t*h;f[n++]=m+q*h+t*g;for(q=p+2;q<p+e;++q)f[n++]=c[q]}c&&f.length!=n&&(f.length=n);this.v()}};
-k.scale=function(a,b,c){var d=b;void 0===d&&(d=a);var e=c;e||(e=ac(this.D()));if(c=this.ka()){b=c.length;for(var f=this.sa(),g=c?c:[],h=e[0],e=e[1],l=0,m=0;m<b;m+=f){var n=c[m]-h,p=c[m+1]-e;g[l++]=h+a*n;g[l++]=e+d*p;for(n=m+2;n<m+f;++n)g[l++]=c[n]}c&&g.length!=l&&(g.length=l);this.v()}};k.Pc=function(a,b){var c=this.ka();if(c){var d=c.length,e=this.sa(),f=c?c:[],g=0,h,l;for(h=0;h<d;h+=e)for(f[g++]=c[h]+a,f[g++]=c[h+1]+b,l=h+2;l<h+e;++l)f[g++]=c[l];c&&f.length!=g&&(f.length=g);this.v()}};function Sc(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],l=a[b+1],e=e+(g*h-f*l),f=h,g=l;return e/2}function Tc(a,b,c,d){var e=0,f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],e=e+Sc(a,b,h,d);b=h}return e};function Uc(a,b,c,d,e,f,g){var h=a[b],l=a[b+1],m=a[c]-h,n=a[c+1]-l;if(0!==m||0!==n)if(f=((e-h)*m+(f-l)*n)/(m*m+n*n),1<f)b=c;else if(0<f){for(e=0;e<d;++e)g[e]=pa(a[b+e],a[c+e],f);g.length=d;return}for(e=0;e<d;++e)g[e]=a[b+e];g.length=d}function Vc(a,b,c,d,e){var f=a[b],g=a[b+1];for(b+=d;b<c;b+=d){var h=a[b],l=a[b+1],f=ma(f,g,h,l);f>e&&(e=f);f=h;g=l}return e}function Wc(a,b,c,d,e){var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f];e=Vc(a,b,h,d,e);b=h}return e}
-function Xc(a,b,c,d,e,f,g,h,l,m,n){if(b==c)return m;var p;if(0===e){p=ma(g,h,a[b],a[b+1]);if(p<m){for(n=0;n<d;++n)l[n]=a[b+n];l.length=d;return p}return m}for(var q=n?n:[NaN,NaN],t=b+d;t<c;)if(Uc(a,t-d,t,d,g,h,q),p=ma(g,h,q[0],q[1]),p<m){m=p;for(n=0;n<d;++n)l[n]=q[n];l.length=d;t+=d}else t+=d*Math.max((Math.sqrt(p)-Math.sqrt(m))/e|0,1);if(f&&(Uc(a,c-d,b,d,g,h,q),p=ma(g,h,q[0],q[1]),p<m)){m=p;for(n=0;n<d;++n)l[n]=q[n];l.length=d}return m}
-function Yc(a,b,c,d,e,f,g,h,l,m,n){n=n?n:[NaN,NaN];var p,q;p=0;for(q=c.length;p<q;++p){var t=c[p];m=Xc(a,b,t,d,e,f,g,h,l,m,n);b=t}return m};function Zc(a,b){var c=0,d,e;d=0;for(e=b.length;d<e;++d)a[c++]=b[d];return c}function $c(a,b,c,d){var e,f;e=0;for(f=c.length;e<f;++e){var g=c[e],h;for(h=0;h<d;++h)a[b++]=g[h]}return b}function ad(a,b,c,d,e){e=e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g)b=$c(a,b,c[g],d),e[f++]=b;e.length=f;return e};function cd(a,b,c,d,e){e=void 0!==e?e:[];for(var f=0;b<c;b+=d)e[f++]=a.slice(b,b+d);e.length=f;return e}function dd(a,b,c,d,e){e=void 0!==e?e:[];var f=0,g,h;g=0;for(h=c.length;g<h;++g){var l=c[g];e[f++]=cd(a,b,l,d,e[f]);b=l}e.length=f;return e};function ed(a,b,c,d,e,f,g){var h=(c-b)/d;if(3>h){for(;b<c;b+=d)f[g++]=a[b],f[g++]=a[b+1];return g}var l=Array(h);l[0]=1;l[h-1]=1;c=[b,c-d];for(var m=0,n;0<c.length;){var p=c.pop(),q=c.pop(),t=0,u=a[q],y=a[q+1],x=a[p],C=a[p+1];for(n=q+d;n<p;n+=d){var z=la(a[n],a[n+1],u,y,x,C);z>t&&(m=n,t=z)}t>e&&(l[(m-b)/d]=1,q+d<m&&c.push(q,m),m+d<p&&c.push(m,p))}for(n=0;n<h;++n)l[n]&&(f[g++]=a[b+n*d],f[g++]=a[b+n*d+1]);return g}
-function fd(a,b,c,d,e,f,g,h){var l,m;l=0;for(m=c.length;l<m;++l){var n=c[l];a:{var p=a,q=n,t=d,u=e,y=f;if(b!=q){var x=u*Math.round(p[b]/u),C=u*Math.round(p[b+1]/u);b+=t;y[g++]=x;y[g++]=C;var z,K;do if(z=u*Math.round(p[b]/u),K=u*Math.round(p[b+1]/u),b+=t,b==q){y[g++]=z;y[g++]=K;break a}while(z==x&&K==C);for(;b<q;){var V,Z;V=u*Math.round(p[b]/u);Z=u*Math.round(p[b+1]/u);b+=t;if(V!=z||Z!=K){var Ra=z-x,F=K-C,Ga=V-x,ra=Z-C;Ra*ra==F*Ga&&(0>Ra&&Ga<Ra||Ra==Ga||0<Ra&&Ga>Ra)&&(0>F&&ra<F||F==ra||0<F&&ra>F)||
-(y[g++]=z,y[g++]=K,x=z,C=K);z=V;K=Z}}y[g++]=z;y[g++]=K}}h.push(g);b=n}return g};function gd(a,b){Oc.call(this);this.c=this.l=-1;this.ma(a,b)}v(gd,Oc);k=gd.prototype;k.clone=function(){var a=new gd(null);hd(a,this.ia,this.A.slice());return a};k.vb=function(a,b,c,d){if(d<Fb(this.D(),a,b))return d;this.c!=this.g&&(this.l=Math.sqrt(Vc(this.A,0,this.A.length,this.a,0)),this.c=this.g);return Xc(this.A,0,this.A.length,this.a,this.l,!0,a,b,c,d)};k.bm=function(){return Sc(this.A,0,this.A.length,this.a)};k.Y=function(){return cd(this.A,0,this.A.length,this.a)};
-k.Mc=function(a){var b=[];b.length=ed(this.A,0,this.A.length,this.a,a,b,0);a=new gd(null);hd(a,"XY",b);return a};k.X=function(){return"LinearRing"};k.ma=function(a,b){a?(Rc(this,b,a,1),this.A||(this.A=[]),this.A.length=$c(this.A,0,a,this.a),this.v()):hd(this,"XY",null)};function hd(a,b,c){Qc(a,b,c);a.v()};function A(a,b){Oc.call(this);this.ma(a,b)}v(A,Oc);k=A.prototype;k.clone=function(){var a=new A(null);a.aa(this.ia,this.A.slice());return a};k.vb=function(a,b,c,d){var e=this.A;a=ma(a,b,e[0],e[1]);if(a<d){d=this.a;for(b=0;b<d;++b)c[b]=e[b];c.length=d;return a}return d};k.Y=function(){return this.A?this.A.slice():[]};k.Pd=function(a){return Lb(this.A,a)};k.X=function(){return"Point"};k.Na=function(a){return Hb(a,this.A[0],this.A[1])};
-k.ma=function(a,b){a?(Rc(this,b,a,0),this.A||(this.A=[]),this.A.length=Zc(this.A,a),this.v()):this.aa("XY",null)};k.aa=function(a,b){Qc(this,a,b);this.v()};function id(a,b,c,d,e){return!Rb(e,function(e){return!jd(a,b,c,d,e[0],e[1])})}function jd(a,b,c,d,e,f){for(var g=!1,h=a[c-d],l=a[c-d+1];b<c;b+=d){var m=a[b],n=a[b+1];l>f!=n>f&&e<(m-h)*(f-l)/(n-l)+h&&(g=!g);h=m;l=n}return g}function kd(a,b,c,d,e,f){if(0===c.length||!jd(a,b,c[0],d,e,f))return!1;var g;b=1;for(g=c.length;b<g;++b)if(jd(a,c[b-1],c[b],d,e,f))return!1;return!0};function ld(a,b,c,d,e,f,g){var h,l,m,n,p,q=e[f+1],t=[],u=c[0];m=a[u-d];p=a[u-d+1];for(h=b;h<u;h+=d){n=a[h];l=a[h+1];if(q<=p&&l<=q||p<=q&&q<=l)m=(q-p)/(l-p)*(n-m)+m,t.push(m);m=n;p=l}u=NaN;p=-Infinity;t.sort(Ya);m=t[0];h=1;for(l=t.length;h<l;++h){n=t[h];var y=Math.abs(n-m);y>p&&(m=(m+n)/2,kd(a,b,c,d,m,q)&&(u=m,p=y));m=n}isNaN(u)&&(u=e[f]);return g?(g.push(u,q),g):[u,q]};function md(a,b,c,d,e,f){for(var g=[a[b],a[b+1]],h=[],l;b+d<c;b+=d){h[0]=a[b+d];h[1]=a[b+d+1];if(l=e.call(f,g,h))return l;g[0]=h[0];g[1]=h[1]}return!1};function nd(a,b,c,d,e){var f=Ob(Bb(),a,b,c,d);return dc(e,f)?Ib(e,f)||f[0]>=e[0]&&f[2]<=e[2]||f[1]>=e[1]&&f[3]<=e[3]?!0:md(a,b,c,d,function(a,b){var c=!1,d=Jb(e,a),f=Jb(e,b);if(1===d||1===f)c=!0;else{var p=e[0],q=e[1],t=e[2],u=e[3],y=b[0],x=b[1],C=(x-a[1])/(y-a[0]);f&2&&!(d&2)&&(c=y-(x-u)/C,c=c>=p&&c<=t);c||!(f&4)||d&4||(c=x-(y-t)*C,c=c>=q&&c<=u);c||!(f&8)||d&8||(c=y-(x-q)/C,c=c>=p&&c<=t);c||!(f&16)||d&16||(c=x-(y-p)*C,c=c>=q&&c<=u)}return c}):!1}
-function od(a,b,c,d,e){var f=c[0];if(!(nd(a,b,f,d,e)||jd(a,b,f,d,e[0],e[1])||jd(a,b,f,d,e[0],e[3])||jd(a,b,f,d,e[2],e[1])||jd(a,b,f,d,e[2],e[3])))return!1;if(1===c.length)return!0;b=1;for(f=c.length;b<f;++b)if(id(a,c[b-1],c[b],d,e))return!1;return!0};function pd(a,b,c,d){for(var e=0,f=a[c-d],g=a[c-d+1];b<c;b+=d)var h=a[b],l=a[b+1],e=e+(h-f)*(l+g),f=h,g=l;return 0<e}function qd(a,b,c,d){var e=0;d=void 0!==d?d:!1;var f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],e=pd(a,e,h,c);if(0===f){if(d&&e||!d&&!e)return!1}else if(d&&!e||!d&&e)return!1;e=h}return!0}
-function rd(a,b,c,d,e){e=void 0!==e?e:!1;var f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],l=pd(a,b,h,d);if(0===f?e&&l||!e&&!l:e&&!l||!e&&l)for(var l=a,m=h,n=d;b<m-n;){var p;for(p=0;p<n;++p){var q=l[b+p];l[b+p]=l[m-n+p];l[m-n+p]=q}b+=n;m-=n}b=h}return b}function sd(a,b,c,d){var e=0,f,g;f=0;for(g=b.length;f<g;++f)e=rd(a,e,b[f],c,d);return e};function B(a,b){Oc.call(this);this.c=[];this.C=-1;this.B=null;this.P=this.G=this.S=-1;this.l=null;this.ma(a,b)}v(B,Oc);k=B.prototype;k.mj=function(a){this.A?bb(this.A,a.ka()):this.A=a.ka().slice();this.c.push(this.A.length);this.v()};k.clone=function(){var a=new B(null);a.aa(this.ia,this.A.slice(),this.c.slice());return a};
-k.vb=function(a,b,c,d){if(d<Fb(this.D(),a,b))return d;this.G!=this.g&&(this.S=Math.sqrt(Wc(this.A,0,this.c,this.a,0)),this.G=this.g);return Yc(this.A,0,this.c,this.a,this.S,!0,a,b,c,d)};k.Ac=function(a,b){return kd(this.Ob(),0,this.c,this.a,a,b)};k.em=function(){return Tc(this.Ob(),0,this.c,this.a)};k.Y=function(a){var b;void 0!==a?(b=this.Ob().slice(),rd(b,0,this.c,this.a,a)):b=this.A;return dd(b,0,this.c,this.a)};k.Eb=function(){return this.c};
-function td(a){if(a.C!=a.g){var b=ac(a.D());a.B=ld(a.Ob(),0,a.c,a.a,b,0);a.C=a.g}return a.B}k.Qj=function(){return new A(td(this))};k.Vj=function(){return this.c.length};k.Bg=function(a){if(0>a||this.c.length<=a)return null;var b=new gd(null);hd(b,this.ia,this.A.slice(0===a?0:this.c[a-1],this.c[a]));return b};k.Vd=function(){var a=this.ia,b=this.A,c=this.c,d=[],e=0,f,g;f=0;for(g=c.length;f<g;++f){var h=c[f],l=new gd(null);hd(l,a,b.slice(e,h));d.push(l);e=h}return d};
-k.Ob=function(){if(this.P!=this.g){var a=this.A;qd(a,this.c,this.a)?this.l=a:(this.l=a.slice(),this.l.length=rd(this.l,0,this.c,this.a));this.P=this.g}return this.l};k.Mc=function(a){var b=[],c=[];b.length=fd(this.A,0,this.c,this.a,Math.sqrt(a),b,0,c);a=new B(null);a.aa("XY",b,c);return a};k.X=function(){return"Polygon"};k.Na=function(a){return od(this.Ob(),0,this.c,this.a,a)};
-k.ma=function(a,b){if(a){Rc(this,b,a,2);this.A||(this.A=[]);var c=ad(this.A,0,a,this.a,this.c);this.A.length=0===c.length?0:c[c.length-1];this.v()}else this.aa("XY",null,this.c)};k.aa=function(a,b,c){Qc(this,a,b);this.c=c;this.v()};function ud(a,b,c,d){var e=d?d:32;d=[];var f;for(f=0;f<e;++f)bb(d,a.offset(b,c,2*Math.PI*f/e));d.push(d[0],d[1]);a=new B(null);a.aa("XY",d,[d.length]);return a}
-function vd(a){var b=a[0],c=a[1],d=a[2];a=a[3];b=[b,c,b,a,d,a,d,c,b,c];c=new B(null);c.aa("XY",b,[b.length]);return c}function wd(a,b,c){var d=b?b:32,e=a.sa();b=a.ia;for(var f=new B(null,b),d=e*(d+1),e=Array(d),g=0;g<d;g++)e[g]=0;f.aa(b,e,[e.length]);xd(f,a.td(),a.vf(),c);return f}function xd(a,b,c,d){var e=a.ka(),f=a.ia,g=a.sa(),h=a.Eb(),l=e.length/g-1;d=d?d:0;for(var m,n,p=0;p<=l;++p)n=p*g,m=d+2*oa(p,l)*Math.PI/l,e[n]=b[0]+c*Math.cos(m),e[n+1]=b[1]+c*Math.sin(m);a.aa(f,e,h)};function yd(a){Ua.call(this);a=a||{};this.c=[0,0];var b={};b[zd]=void 0!==a.center?a.center:null;this.l=Ec(a.projection);var c,d,e,f=void 0!==a.minZoom?a.minZoom:0;c=void 0!==a.maxZoom?a.maxZoom:28;var g=void 0!==a.zoomFactor?a.zoomFactor:2;if(void 0!==a.resolutions)c=a.resolutions,d=c[0],e=c[c.length-1],c=jb(c);else{d=Ec(a.projection);e=d.D();var h=(e?Math.max(Zb(e),$b(e)):360*kc.degrees/d.dc())/256/Math.pow(2,0),l=h/Math.pow(2,28);d=a.maxResolution;void 0!==d?f=0:d=h/Math.pow(g,f);e=a.minResolution;
-void 0===e&&(e=void 0!==a.maxZoom?void 0!==a.maxResolution?d/Math.pow(g,c):h/Math.pow(g,c):l);c=f+Math.floor(Math.log(d/e)/Math.log(g));e=d/Math.pow(g,c-f);c=kb(g,d,c-f)}this.a=d;this.i=e;this.s=g;this.f=a.resolutions;this.j=f;f=void 0!==a.extent?qa(a.extent):sa;(void 0!==a.enableRotation?a.enableRotation:1)?(g=a.constrainRotation,g=void 0===g||!0===g?ob():!1===g?mb:"number"===typeof g?nb(g):mb):g=lb;this.o=new ta(f,c,g);void 0!==a.resolution?b[Ad]=a.resolution:void 0!==a.zoom&&(b[Ad]=this.constrainResolution(this.a,
-a.zoom-this.j));b[Bd]=void 0!==a.rotation?a.rotation:0;this.H(b)}v(yd,Ua);k=yd.prototype;k.Qd=function(a){return this.o.center(a)};k.constrainResolution=function(a,b,c){return this.o.resolution(a,b||0,c||0)};k.constrainRotation=function(a,b){return this.o.rotation(a,b||0)};k.bb=function(){return this.get(zd)};function Cd(a,b){return void 0!==b?(b[0]=a.c[0],b[1]=a.c[1],b):a.c.slice()}
-k.Jc=function(a){var b=this.bb();ha(b,1);var c=this.Ma();ha(void 0!==c,2);var d=this.Pa();ha(void 0!==d,3);return bc(b,c,d,a)};k.Jl=function(){return this.a};k.Kl=function(){return this.i};k.Ll=function(){return this.l};k.Ma=function(){return this.get(Ad)};k.Ml=function(){return this.f};function Dd(a,b){return Math.max(Zb(a)/b[0],$b(a)/b[1])}function Ed(a){var b=a.a,c=Math.log(b/a.i)/Math.log(2);return function(a){return b/Math.pow(2,a*c)}}k.Pa=function(){return this.get(Bd)};
-function Fd(a){var b=a.a,c=Math.log(b/a.i)/Math.log(2);return function(a){return Math.log(b/a)/Math.log(2)/c}}k.U=function(){var a=this.bb(),b=this.l,c=this.Ma(),d=this.Pa();return{center:a.slice(),projection:void 0!==b?b:null,resolution:c,rotation:d}};k.tk=function(){var a,b=this.Ma();if(void 0!==b&&b>=this.i&&b<=this.a){a=this.j||0;var c,d;if(this.f){d=$a(this.f,b,1);a+=d;if(d==this.f.length-1)return a;c=this.f[d];d=c/this.f[d+1]}else c=this.a,d=this.s;a+=Math.log(c/b)/Math.log(d)}return a};
-k.$e=function(a,b,c){a instanceof Oc||(ha(Array.isArray(a),24),ha(!Yb(a),25),a=vd(a));var d=c||{};c=void 0!==d.padding?d.padding:[0,0,0,0];var e=void 0!==d.constrainResolution?d.constrainResolution:!0,f=void 0!==d.nearest?d.nearest:!1,g;void 0!==d.minResolution?g=d.minResolution:void 0!==d.maxZoom?g=this.constrainResolution(this.a,d.maxZoom-this.j,0):g=0;var h=a.ka(),l=this.Pa(),d=Math.cos(-l),l=Math.sin(-l),m=Infinity,n=Infinity,p=-Infinity,q=-Infinity;a=a.sa();for(var t=0,u=h.length;t<u;t+=a)var y=
-h[t]*d-h[t+1]*l,x=h[t]*l+h[t+1]*d,m=Math.min(m,y),n=Math.min(n,x),p=Math.max(p,y),q=Math.max(q,x);b=Dd([m,n,p,q],[b[0]-c[1]-c[3],b[1]-c[0]-c[2]]);b=isNaN(b)?g:Math.max(b,g);e&&(g=this.constrainResolution(b,0,0),!f&&g<b&&(g=this.constrainResolution(g,-1,0)),b=g);this.Yb(b);l=-l;f=(m+p)/2+(c[1]-c[3])/2*b;c=(n+q)/2+(c[0]-c[2])/2*b;this.rb([f*d-c*l,c*d+f*l])};
-k.sj=function(a,b,c){var d=this.Pa(),e=Math.cos(-d),d=Math.sin(-d),f=a[0]*e-a[1]*d;a=a[1]*e+a[0]*d;var g=this.Ma(),f=f+(b[0]/2-c[0])*g;a+=(c[1]-b[1]/2)*g;d=-d;this.rb([f*e-a*d,a*e+f*d])};function Gd(a){return!!a.bb()&&void 0!==a.Ma()}k.rotate=function(a,b){if(void 0!==b){var c,d=this.bb();void 0!==d&&(c=[d[0]-b[0],d[1]-b[1]],wb(c,a-this.Pa()),rb(c,b));this.rb(c)}this.ie(a)};k.rb=function(a){this.set(zd,a)};function Hd(a,b){a.c[1]+=b}k.Yb=function(a){this.set(Ad,a)};k.ie=function(a){this.set(Bd,a)};
-k.Zo=function(a){a=this.constrainResolution(this.a,a-this.j,0);this.Yb(a)};var zd="center",Ad="resolution",Bd="rotation";function Id(a){return Math.pow(a,3)}function Jd(a){return 1-Id(1-a)}function Kd(a){return 3*a*a-2*a*a*a}function Ld(a){return a}function Md(a){return.5>a?Kd(2*a):1-Kd(2*(a-.5))};function Nd(a){var b=a.source,c=a.start?a.start:Date.now(),d=b[0],e=b[1],f=void 0!==a.duration?a.duration:1E3,g=a.easing?a.easing:Kd;return function(a,b){if(b.time<c)return b.animate=!0,b.viewHints[0]+=1,!0;if(b.time<c+f){var m=1-g((b.time-c)/f),n=d-b.viewState.center[0],p=e-b.viewState.center[1];b.animate=!0;b.viewState.center[0]+=m*n;b.viewState.center[1]+=m*p;b.viewHints[0]+=1;return!0}return!1}}
-function Od(a){var b=a.rotation?a.rotation:0,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Kd,f=a.anchor?a.anchor:null;return function(a,h){if(h.time<c)return h.animate=!0,h.viewHints[0]+=1,!0;if(h.time<c+d){var l=1-e((h.time-c)/d),l=(b-h.viewState.rotation)*l;h.animate=!0;h.viewState.rotation+=l;if(f){var m=h.viewState.center;m[0]-=f[0];m[1]-=f[1];wb(m,l);rb(m,f)}h.viewHints[0]+=1;return!0}return!1}}
-function Pd(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Kd;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=1-e((g.time-c)/d),l=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*l;g.viewHints[0]+=1;return!0}return!1}};function Qd(a,b,c,d){this.ba=a;this.da=b;this.ea=c;this.ha=d}function Rd(a,b,c){return a.ba<=b&&b<=a.da&&a.ea<=c&&c<=a.ha}function Sd(a,b){return a.ba==b.ba&&a.ea==b.ea&&a.da==b.da&&a.ha==b.ha}function Td(a,b){return a.ba<=b.da&&a.da>=b.ba&&a.ea<=b.ha&&a.ha>=b.ea};function Ud(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]+2*b;c[1]=a[1]+2*b;return c}function Vd(a,b,c){void 0===c&&(c=[0,0]);c[0]=a[0]*b+.5|0;c[1]=a[1]*b+.5|0;return c}function Wd(a,b){if(Array.isArray(a))return a;void 0===b?b=[a,a]:b[0]=b[1]=a;return b};function Xd(a,b,c,d){return void 0!==d?(d[0]=a,d[1]=b,d[2]=c,d):[a,b,c]}function Yd(a){var b=a[0],c=Array(b),d=1<<b-1,e,f;for(e=0;e<b;++e)f=48,a[1]&d&&(f+=1),a[2]&d&&(f+=2),c[e]=String.fromCharCode(f),d>>=1;return c.join("")};function Zd(a){this.minZoom=void 0!==a.minZoom?a.minZoom:0;this.b=a.resolutions;ha(ib(this.b,function(a,b){return b-a}),17);this.maxZoom=this.b.length-1;this.g=void 0!==a.origin?a.origin:null;this.f=null;void 0!==a.origins&&(this.f=a.origins,ha(this.f.length==this.b.length,20));var b=a.extent;void 0===b||this.g||this.f||(this.g=Wb(b));ha(!this.g&&this.f||this.g&&!this.f,18);this.c=null;void 0!==a.tileSizes&&(this.c=a.tileSizes,ha(this.c.length==this.b.length,19));this.i=void 0!==a.tileSize?a.tileSize:
-this.c?null:256;ha(!this.i&&this.c||this.i&&!this.c,22);this.s=void 0!==b?b:null;this.a=null;this.j=[0,0];void 0!==a.sizes?this.a=a.sizes.map(function(a){return new Qd(Math.min(0,a[0]),Math.max(a[0]-1,-1),Math.min(0,a[1]),Math.max(a[1]-1,-1))},this):b&&$d(this,b)}var ae=[0,0,0];k=Zd.prototype;k.sg=function(a,b,c){a=be(this,a,b);for(var d=a.ba,e=a.da;d<=e;++d)for(var f=a.ea,g=a.ha;f<=g;++f)c([b,d,f])};
-function ce(a,b,c,d,e){e=a.Ia(b,e);for(b=b[0]-1;b>=a.minZoom;){if(c.call(null,b,be(a,e,b,d)))return!0;--b}return!1}k.D=function(){return this.s};k.Cg=function(){return this.maxZoom};k.Dg=function(){return this.minZoom};k.Tc=function(a){return this.g?this.g:this.f[a]};k.Ga=function(a){return this.b[a]};k.Bh=function(){return this.b};function de(a,b,c,d){return b[0]<a.maxZoom?(d=a.Ia(b,d),be(a,d,b[0]+1,c)):null}
-function ee(a,b,c,d){fe(a,b[0],b[1],c,!1,ae);var e=ae[1],f=ae[2];fe(a,b[2],b[3],c,!0,ae);a=ae[1];b=ae[2];void 0!==d?(d.ba=e,d.da=a,d.ea=f,d.ha=b):d=new Qd(e,a,f,b);return d}function be(a,b,c,d){c=a.Ga(c);return ee(a,b,c,d)}function ge(a,b){var c=a.Tc(b[0]),d=a.Ga(b[0]),e=Wd(a.Va(b[0]),a.j);return[c[0]+(b[1]+.5)*e[0]*d,c[1]+(b[2]+.5)*e[1]*d]}k.Ia=function(a,b){var c=this.Tc(a[0]),d=this.Ga(a[0]),e=Wd(this.Va(a[0]),this.j),f=c[0]+a[1]*e[0]*d,c=c[1]+a[2]*e[1]*d;return Kb(f,c,f+e[0]*d,c+e[1]*d,b)};
-k.Yd=function(a,b,c){return fe(this,a[0],a[1],b,!1,c)};function fe(a,b,c,d,e,f){var g=a.wc(d),h=d/a.Ga(g),l=a.Tc(g);a=Wd(a.Va(g),a.j);b=h*Math.floor((b-l[0])/d+(e?.5:0))/a[0];c=h*Math.floor((c-l[1])/d+(e?0:.5))/a[1];e?(b=Math.ceil(b)-1,c=Math.ceil(c)-1):(b=Math.floor(b),c=Math.floor(c));return Xd(g,b,c,f)}k.Zd=function(a,b,c){b=this.Ga(b);return fe(this,a[0],a[1],b,!1,c)};k.Va=function(a){return this.i?this.i:this.c[a]};k.wc=function(a,b){return ia($a(this.b,a,b||0),this.minZoom,this.maxZoom)};
-function $d(a,b){for(var c=a.b.length,d=Array(c),e=a.minZoom;e<c;++e)d[e]=be(a,b,e);a.a=d};function he(a){var b=a.j;if(!b){var b=ie(a),c=je(b,void 0,void 0),b=new Zd({extent:b,origin:Wb(b),resolutions:c,tileSize:void 0});a.j=b}return b}function ke(a){var b={};ua(b,void 0!==a?a:{});void 0===b.extent&&(b.extent=qc("EPSG:3857").D());b.resolutions=je(b.extent,b.maxZoom,b.tileSize);delete b.maxZoom;return new Zd(b)}function je(a,b,c){b=void 0!==b?b:42;var d=$b(a);a=Zb(a);c=Wd(void 0!==c?c:256);c=Math.max(a/c[0],d/c[1]);b+=1;d=Array(b);for(a=0;a<b;++a)d[a]=c/Math.pow(2,a);return d}
-function ie(a){a=qc(a);var b=a.D();b||(a=180*kc.degrees/a.dc(),b=Kb(-a,-a,a,a));return b};function le(a){this.a=a.html;this.b=a.tileRanges?a.tileRanges:null}le.prototype.g=function(){return this.a};function me(a){Ua.call(this);this.a=a?a:[];ne(this)}v(me,Ua);k=me.prototype;k.clear=function(){for(;0<this.yc();)this.pop()};k.qf=function(a){var b,c;b=0;for(c=a.length;b<c;++b)this.push(a[b]);return this};k.forEach=function(a,b){this.a.forEach(a,b)};k.sl=function(){return this.a};k.item=function(a){return this.a[a]};k.yc=function(){return this.get(qe)};k.ee=function(a,b){this.a.splice(a,0,b);ne(this);this.b(new re(se,b))};k.pop=function(){return this.Nf(this.yc()-1)};
-k.push=function(a){var b=this.a.length;this.ee(b,a);return b};k.remove=function(a){var b=this.a,c,d;c=0;for(d=b.length;c<d;++c)if(b[c]===a)return this.Nf(c)};k.Nf=function(a){var b=this.a[a];this.a.splice(a,1);ne(this);this.b(new re(te,b));return b};k.Oo=function(a,b){var c=this.yc();if(a<c)c=this.a[a],this.a[a]=b,this.b(new re(te,c)),this.b(new re(se,b));else{for(;c<a;++c)this.ee(c,void 0);this.ee(a,b)}};function ne(a){a.set(qe,a.a.length)}var qe="length",se="add",te="remove";
-function re(a,b){Ka.call(this,a);this.element=b}v(re,Ka);var ue=/^#(?:[0-9a-f]{3}){1,2}$/i,ve=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,we=/^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i,xe=/^([a-z]*)$/i;function ye(a){return Array.isArray(a)?a:ze(a)}function Ae(a){if("string"!==typeof a){var b=a[0];b!=(b|0)&&(b=b+.5|0);var c=a[1];c!=(c|0)&&(c=c+.5|0);var d=a[2];d!=(d|0)&&(d=d+.5|0);a="rgba("+b+","+c+","+d+","+(void 0===a[3]?1:a[3])+")"}return a}
-var ze=function(){var a={},b=0;return function(c){var d;if(a.hasOwnProperty(c))d=a[c];else{if(1024<=b){d=0;for(var e in a)0===(d++&3)&&(delete a[e],--b)}d=c;var f,g;xe.exec(d)&&(e=document.createElement("div"),e.style.color=d,document.body.appendChild(e),d=getComputedStyle(e).color,document.body.removeChild(e));ue.exec(d)?(f=d.length-1,ha(3==f||6==f,54),g=3==f?1:2,f=parseInt(d.substr(1+0*g,g),16),e=parseInt(d.substr(1+1*g,g),16),d=parseInt(d.substr(1+2*g,g),16),1==g&&(f=(f<<4)+f,e=(e<<4)+e,d=(d<<
-4)+d),f=[f,e,d,1]):(g=we.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),g=Number(g[4]),f=Be([f,e,d,g])):(g=ve.exec(d))?(f=Number(g[1]),e=Number(g[2]),d=Number(g[3]),f=Be([f,e,d,1])):ha(!1,14);d=f;a[c]=d;++b}return d}}();function Be(a){var b=[];b[0]=ia(a[0]+.5|0,0,255);b[1]=ia(a[1]+.5|0,0,255);b[2]=ia(a[2]+.5|0,0,255);b[3]=ia(a[3],0,1);return b};function Ce(a){return"string"===typeof a||a instanceof CanvasPattern||a instanceof CanvasGradient?a:Ae(a)};function De(a,b){var c=document.createElement("CANVAS");a&&(c.width=a);b&&(c.height=b);return c.getContext("2d")}function Ee(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)}function Fe(a){a&&a.parentNode&&a.parentNode.removeChild(a)};function Ge(a,b,c){Ka.call(this,a);this.map=b;this.frameState=void 0!==c?c:null}v(Ge,Ka);function He(a){Ua.call(this);this.element=a.element?a.element:null;this.a=this.P=null;this.s=[];this.render=a.render?a.render:da;a.target&&this.c(a.target)}v(He,Ua);He.prototype.la=function(){Fe(this.element);Ua.prototype.la.call(this)};He.prototype.i=function(){return this.a};
-He.prototype.setMap=function(a){this.a&&Fe(this.element);for(var b=0,c=this.s.length;b<c;++b)za(this.s[b]);this.s.length=0;if(this.a=a)(this.P?this.P:a.u).appendChild(this.element),this.render!==da&&this.s.push(w(a,"postrender",this.render,this)),a.render()};He.prototype.c=function(a){this.P="string"===typeof a?document.getElementById(a):a};function Ie(a){a=a?a:{};this.S=document.createElement("UL");this.u=document.createElement("LI");this.S.appendChild(this.u);this.u.style.display="none";this.f=void 0!==a.collapsed?a.collapsed:!0;this.l=void 0!==a.collapsible?a.collapsible:!0;this.l||(this.f=!1);var b=void 0!==a.className?a.className:"ol-attribution",c=void 0!==a.tipLabel?a.tipLabel:"Attributions",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00bb";"string"===typeof d?(this.C=document.createElement("span"),this.C.textContent=d):this.C=
-d;d=void 0!==a.label?a.label:"i";"string"===typeof d?(this.B=document.createElement("span"),this.B.textContent=d):this.B=d;var e=this.l&&!this.f?this.C:this.B,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);w(d,"click",this.Pl,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control"+(this.f&&this.l?" ol-collapsed":"")+(this.l?"":" ol-uncollapsible");c.appendChild(this.S);c.appendChild(d);He.call(this,{element:c,render:a.render?
-a.render:Je,target:a.target});this.G=!0;this.o={};this.j={};this.W={}}v(Ie,He);
-function Je(a){if(a=a.frameState){var b,c,d,e,f,g,h,l,m,n,p,q=a.layerStatesArray,t=ua({},a.attributions),u={},y=a.viewState.projection;c=0;for(b=q.length;c<b;c++)if(g=q[c].layer.ga())if(n=ea(g).toString(),m=g.j)for(d=0,e=m.length;d<e;d++)if(h=m[d],l=ea(h).toString(),!(l in t)){if(f=a.usedTiles[n]){var x=g.pb(y);a:{p=h;var C=y;if(p.b){var z,K,V,Z=void 0;for(Z in f)if(Z in p.b){V=f[Z];var Ra;z=0;for(K=p.b[Z].length;z<K;++z){Ra=p.b[Z][z];if(Td(Ra,V)){p=!0;break a}var F=be(x,ie(C),parseInt(Z,10)),Ga=
-F.da-F.ba+1;if(V.ba<F.ba||V.da>F.da)if(Td(Ra,new Qd(oa(V.ba,Ga),oa(V.da,Ga),V.ea,V.ha))||V.da-V.ba+1>Ga&&Td(Ra,F)){p=!0;break a}}}p=!1}else p=!0}}else p=!1;p?(l in u&&delete u[l],t[l]=h):u[l]=h}b=[t,u];c=b[0];b=b[1];for(var ra in this.o)ra in c?(this.j[ra]||(this.o[ra].style.display="",this.j[ra]=!0),delete c[ra]):ra in b?(this.j[ra]&&(this.o[ra].style.display="none",delete this.j[ra]),delete b[ra]):(Fe(this.o[ra]),delete this.o[ra],delete this.j[ra]);for(ra in c)d=document.createElement("LI"),d.innerHTML=
-c[ra].a,this.S.appendChild(d),this.o[ra]=d,this.j[ra]=!0;for(ra in b)d=document.createElement("LI"),d.innerHTML=b[ra].a,d.style.display="none",this.S.appendChild(d),this.o[ra]=d;ra=!xa(this.j)||!xa(a.logos);this.G!=ra&&(this.element.style.display=ra?"":"none",this.G=ra);ra&&xa(this.j)?this.element.classList.add("ol-logo-only"):this.element.classList.remove("ol-logo-only");var Oa;a=a.logos;ra=this.W;for(Oa in ra)Oa in a||(Fe(ra[Oa]),delete ra[Oa]);for(var Sa in a)b=a[Sa],b instanceof HTMLElement&&
-(this.u.appendChild(b),ra[Sa]=b),Sa in ra||(Oa=new Image,Oa.src=Sa,""===b?c=Oa:(c=document.createElement("a"),c.href=b,c.appendChild(Oa)),this.u.appendChild(c),ra[Sa]=c);this.u.style.display=xa(a)?"none":""}else this.G&&(this.element.style.display="none",this.G=!1)}k=Ie.prototype;k.Pl=function(a){a.preventDefault();Ke(this)};function Ke(a){a.element.classList.toggle("ol-collapsed");a.f?Ee(a.C,a.B):Ee(a.B,a.C);a.f=!a.f}k.Ol=function(){return this.l};
-k.Rl=function(a){this.l!==a&&(this.l=a,this.element.classList.toggle("ol-uncollapsible"),!a&&this.f&&Ke(this))};k.Ql=function(a){this.l&&this.f!==a&&Ke(this)};k.Nl=function(){return this.f};function Le(a){a=a?a:{};this.f=void 0!==a.className?a.className:"ol-full-screen";var b=void 0!==a.label?a.label:"\u2922";this.l="string"===typeof b?document.createTextNode(b):b;b=void 0!==a.labelActive?a.labelActive:"\u00d7";this.o="string"===typeof b?document.createTextNode(b):b;var c=a.tipLabel?a.tipLabel:"Toggle full-screen",b=document.createElement("button");b.className=this.f+"-"+Me();b.setAttribute("type","button");b.title=c;b.appendChild(this.l);w(b,"click",this.B,this);c=document.createElement("div");
-c.className=this.f+" ol-unselectable ol-control "+(Ne()?"":"ol-unsupported");c.appendChild(b);He.call(this,{element:c,target:a.target});this.C=void 0!==a.keys?a.keys:!1;this.j=a.source}v(Le,He);
-Le.prototype.B=function(a){a.preventDefault();Ne()&&(a=this.a)&&(Me()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(a=this.j?"string"===typeof this.j?document.getElementById(this.j):this.j:a.uc(),this.C?a.mozRequestFullScreenWithKeys?a.mozRequestFullScreenWithKeys():a.webkitRequestFullscreen?a.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT):
-Oe(a):Oe(a)))};Le.prototype.u=function(){var a=this.element.firstElementChild,b=this.a;Me()?(a.className=this.f+"-true",Ee(this.o,this.l)):(a.className=this.f+"-false",Ee(this.l,this.o));b&&b.Yc()};Le.prototype.setMap=function(a){He.prototype.setMap.call(this,a);a&&this.s.push(w(document,Pe(),this.u,this))};
-function Ne(){var a=document.body;return!!(a.webkitRequestFullscreen||a.mozRequestFullScreen&&document.mozFullScreenEnabled||a.msRequestFullscreen&&document.msFullscreenEnabled||a.requestFullscreen&&document.fullscreenEnabled)}function Me(){return!!(document.webkitIsFullScreen||document.mozFullScreen||document.msFullscreenElement||document.fullscreenElement)}
-function Oe(a){a.requestFullscreen?a.requestFullscreen():a.msRequestFullscreen?a.msRequestFullscreen():a.mozRequestFullScreen?a.mozRequestFullScreen():a.webkitRequestFullscreen&&a.webkitRequestFullscreen()}var Pe=function(){var a;return function(){if(!a){var b=document.body;b.webkitRequestFullscreen?a="webkitfullscreenchange":b.mozRequestFullScreen?a="mozfullscreenchange":b.msRequestFullscreen?a="MSFullscreenChange":b.requestFullscreen&&(a="fullscreenchange")}return a}}();function Qe(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-rotate",c=void 0!==a.label?a.label:"\u21e7";this.f=null;"string"===typeof c?(this.f=document.createElement("span"),this.f.className="ol-compass",this.f.textContent=c):(this.f=c,this.f.classList.add("ol-compass"));var d=a.tipLabel?a.tipLabel:"Reset rotation",c=document.createElement("button");c.className=b+"-reset";c.setAttribute("type","button");c.title=d;c.appendChild(this.f);w(c,"click",Qe.prototype.C,this);d=document.createElement("div");
-d.className=b+" ol-unselectable ol-control";d.appendChild(c);b=a.render?a.render:Re;this.l=a.resetNorth?a.resetNorth:void 0;He.call(this,{element:d,render:b,target:a.target});this.o=void 0!==a.duration?a.duration:250;this.j=void 0!==a.autoHide?a.autoHide:!0;this.u=void 0;this.j&&this.element.classList.add("ol-hidden")}v(Qe,He);
-Qe.prototype.C=function(a){a.preventDefault();if(void 0!==this.l)this.l();else{a=this.a;var b=a.$();if(b){var c=b.Pa();void 0!==c&&(0<this.o&&(c%=2*Math.PI,c<-Math.PI&&(c+=2*Math.PI),c>Math.PI&&(c-=2*Math.PI),a.ab(Od({rotation:c,duration:this.o,easing:Jd}))),b.ie(0))}}};
-function Re(a){if(a=a.frameState){a=a.viewState.rotation;if(a!=this.u){var b="rotate("+a+"rad)";if(this.j){var c=this.element.classList.contains("ol-hidden");c||0!==a?c&&0!==a&&this.element.classList.remove("ol-hidden"):this.element.classList.add("ol-hidden")}this.f.style.msTransform=b;this.f.style.webkitTransform=b;this.f.style.transform=b}this.u=a}};function Se(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-zoom",c=void 0!==a.delta?a.delta:1,d=void 0!==a.zoomInLabel?a.zoomInLabel:"+",e=void 0!==a.zoomOutLabel?a.zoomOutLabel:"\u2212",f=void 0!==a.zoomInTipLabel?a.zoomInTipLabel:"Zoom in",g=void 0!==a.zoomOutTipLabel?a.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=b+"-in";h.setAttribute("type","button");h.title=f;h.appendChild("string"===typeof d?document.createTextNode(d):d);w(h,"click",Se.prototype.j.bind(this,
-c));d=document.createElement("button");d.className=b+"-out";d.setAttribute("type","button");d.title=g;d.appendChild("string"===typeof e?document.createTextNode(e):e);w(d,"click",Se.prototype.j.bind(this,-c));c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(h);c.appendChild(d);He.call(this,{element:c,target:a.target});this.f=void 0!==a.duration?a.duration:250}v(Se,He);
-Se.prototype.j=function(a,b){b.preventDefault();var c=this.a,d=c.$();if(d){var e=d.Ma();e&&(0<this.f&&c.ab(Pd({resolution:e,duration:this.f,easing:Jd})),c=d.constrainResolution(e,a),d.Yb(c))}};function Te(a){a=a?a:{};var b=new me;(void 0!==a.zoom?a.zoom:1)&&b.push(new Se(a.zoomOptions));(void 0!==a.rotate?a.rotate:1)&&b.push(new Qe(a.rotateOptions));(void 0!==a.attribution?a.attribution:1)&&b.push(new Ie(a.attributionOptions));return b};function Ue(a){a=a?a:{};var b=document.createElement("DIV");b.className=void 0!==a.className?a.className:"ol-mouse-position";He.call(this,{element:b,render:a.render?a.render:Ve,target:a.target});w(this,Wa(We),this.Sl,this);a.coordinateFormat&&this.Uh(a.coordinateFormat);a.projection&&this.$g(qc(a.projection));this.u=void 0!==a.undefinedHTML?a.undefinedHTML:"";this.o=b.innerHTML;this.l=this.j=this.f=null}v(Ue,He);
-function Ve(a){a=a.frameState;a?this.f!=a.viewState.projection&&(this.f=a.viewState.projection,this.j=null):this.f=null;Xe(this,this.l)}k=Ue.prototype;k.Sl=function(){this.j=null};k.wg=function(){return this.get(Ye)};k.Zg=function(){return this.get(We)};k.Jk=function(a){this.l=this.a.Ud(a);Xe(this,this.l)};k.Kk=function(){Xe(this,null);this.l=null};k.setMap=function(a){He.prototype.setMap.call(this,a);a&&(a=a.a,this.s.push(w(a,"mousemove",this.Jk,this),w(a,"mouseout",this.Kk,this)))};
-k.Uh=function(a){this.set(Ye,a)};k.$g=function(a){this.set(We,a)};function Xe(a,b){var c=a.u;if(b&&a.f){if(!a.j){var d=a.Zg();a.j=d?tc(a.f,d):Jc}if(d=a.a.Ja(b))a.j(d,d),c=(c=a.wg())?c(d):d.toString()}a.o&&c==a.o||(a.element.innerHTML=c,a.o=c)}var We="projection",Ye="coordinateFormat";var Ze=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function $e(a,b){var c,d,e=Ze.length;for(d=0;d<e;++d)try{if(c=a.getContext(Ze[d],b))return c}catch(f){}return null};var af,bf="undefined"!==typeof navigator?navigator.userAgent.toLowerCase():"",cf=-1!==bf.indexOf("firefox"),df=-1!==bf.indexOf("safari")&&-1==bf.indexOf("chrom"),ef=-1!==bf.indexOf("webkit")&&-1==bf.indexOf("edge"),ff=-1!==bf.indexOf("macintosh"),gf=window.devicePixelRatio||1,hf=!1,jf=function(){if(!("HTMLCanvasElement"in window))return!1;try{var a=document.createElement("CANVAS").getContext("2d");return a?(void 0!==a.setLineDash&&(hf=!0),!0):!1}catch(b){return!1}}(),kf="DeviceOrientationEvent"in
-window,lf="geolocation"in navigator,mf="ontouchstart"in window,nf="PointerEvent"in window,of=!!navigator.msPointerEnabled,pf=!1,qf,rf=[];if("WebGLRenderingContext"in window)try{var sf=$e(document.createElement("CANVAS"),{failIfMajorPerformanceCaveat:!0});sf&&(pf=!0,qf=sf.getParameter(sf.MAX_TEXTURE_SIZE),rf=sf.getSupportedExtensions())}catch(a){}af=pf;ca=rf;ba=qf;function tf(a,b){this.b=a;this.c=b};function uf(a){tf.call(this,a,{mousedown:this.dl,mousemove:this.el,mouseup:this.hl,mouseover:this.gl,mouseout:this.fl});this.a=a.g;this.g=[]}v(uf,tf);function vf(a,b){for(var c=a.g,d=b.clientX,e=b.clientY,f=0,g=c.length,h;f<g&&(h=c[f]);f++){var l=Math.abs(e-h[1]);if(25>=Math.abs(d-h[0])&&25>=l)return!0}return!1}function wf(a){var b=xf(a,a),c=b.preventDefault;b.preventDefault=function(){a.preventDefault();c()};b.pointerId=1;b.isPrimary=!0;b.pointerType="mouse";return b}k=uf.prototype;
-k.dl=function(a){if(!vf(this,a)){if((1).toString()in this.a){var b=wf(a);yf(this.b,"pointercancel",b,a);delete this.a[(1).toString()]}b=wf(a);this.a[(1).toString()]=a;yf(this.b,"pointerdown",b,a)}};k.el=function(a){if(!vf(this,a)){var b=wf(a);yf(this.b,"pointermove",b,a)}};k.hl=function(a){if(!vf(this,a)){var b=this.a[(1).toString()];b&&b.button===a.button&&(b=wf(a),yf(this.b,"pointerup",b,a),delete this.a[(1).toString()])}};k.gl=function(a){if(!vf(this,a)){var b=wf(a);zf(this.b,b,a)}};
-k.fl=function(a){if(!vf(this,a)){var b=wf(a);Af(this.b,b,a)}};function Bf(a){tf.call(this,a,{MSPointerDown:this.ml,MSPointerMove:this.nl,MSPointerUp:this.ql,MSPointerOut:this.ol,MSPointerOver:this.pl,MSPointerCancel:this.ll,MSGotPointerCapture:this.jl,MSLostPointerCapture:this.kl});this.a=a.g;this.g=["","unavailable","touch","pen","mouse"]}v(Bf,tf);function Cf(a,b){var c=b;"number"===typeof b.pointerType&&(c=xf(b,b),c.pointerType=a.g[b.pointerType]);return c}k=Bf.prototype;
-k.ml=function(a){this.a[a.pointerId.toString()]=a;var b=Cf(this,a);yf(this.b,"pointerdown",b,a)};k.nl=function(a){var b=Cf(this,a);yf(this.b,"pointermove",b,a)};k.ql=function(a){var b=Cf(this,a);yf(this.b,"pointerup",b,a);delete this.a[a.pointerId.toString()]};k.ol=function(a){var b=Cf(this,a);Af(this.b,b,a)};k.pl=function(a){var b=Cf(this,a);zf(this.b,b,a)};k.ll=function(a){var b=Cf(this,a);yf(this.b,"pointercancel",b,a);delete this.a[a.pointerId.toString()]};
-k.kl=function(a){this.b.b(new Df("lostpointercapture",a,a))};k.jl=function(a){this.b.b(new Df("gotpointercapture",a,a))};function Ef(a){tf.call(this,a,{pointerdown:this.Zn,pointermove:this.$n,pointerup:this.co,pointerout:this.ao,pointerover:this.bo,pointercancel:this.Yn,gotpointercapture:this.uk,lostpointercapture:this.cl})}v(Ef,tf);k=Ef.prototype;k.Zn=function(a){Ff(this.b,a)};k.$n=function(a){Ff(this.b,a)};k.co=function(a){Ff(this.b,a)};k.ao=function(a){Ff(this.b,a)};k.bo=function(a){Ff(this.b,a)};k.Yn=function(a){Ff(this.b,a)};k.cl=function(a){Ff(this.b,a)};k.uk=function(a){Ff(this.b,a)};function Df(a,b,c){Ka.call(this,a);this.b=b;a=c?c:{};this.buttons=Gf(a);this.pressure=Hf(a,this.buttons);this.bubbles="bubbles"in a?a.bubbles:!1;this.cancelable="cancelable"in a?a.cancelable:!1;this.view="view"in a?a.view:null;this.detail="detail"in a?a.detail:null;this.screenX="screenX"in a?a.screenX:0;this.screenY="screenY"in a?a.screenY:0;this.clientX="clientX"in a?a.clientX:0;this.clientY="clientY"in a?a.clientY:0;this.button="button"in a?a.button:0;this.relatedTarget="relatedTarget"in a?a.relatedTarget:
-null;this.pointerId="pointerId"in a?a.pointerId:0;this.width="width"in a?a.width:0;this.height="height"in a?a.height:0;this.pointerType="pointerType"in a?a.pointerType:"";this.isPrimary="isPrimary"in a?a.isPrimary:!1;b.preventDefault&&(this.preventDefault=function(){b.preventDefault()})}v(Df,Ka);function Gf(a){if(a.buttons||If)a=a.buttons;else switch(a.which){case 1:a=1;break;case 2:a=4;break;case 3:a=2;break;default:a=0}return a}
-function Hf(a,b){var c=0;a.pressure?c=a.pressure:c=b?.5:0;return c}var If=!1;try{If=1===(new MouseEvent("click",{buttons:1})).buttons}catch(a){};function Jf(a,b){tf.call(this,a,{touchstart:this.ep,touchmove:this.cp,touchend:this.bp,touchcancel:this.ap});this.a=a.g;this.j=b;this.g=void 0;this.i=0;this.f=void 0}v(Jf,tf);k=Jf.prototype;k.Sh=function(){this.i=0;this.f=void 0};
-function Kf(a,b,c){b=xf(b,c);b.pointerId=c.identifier+2;b.bubbles=!0;b.cancelable=!0;b.detail=a.i;b.button=0;b.buttons=1;b.width=c.webkitRadiusX||c.radiusX||0;b.height=c.webkitRadiusY||c.radiusY||0;b.pressure=c.webkitForce||c.force||.5;b.isPrimary=a.g===c.identifier;b.pointerType="touch";b.clientX=c.clientX;b.clientY=c.clientY;b.screenX=c.screenX;b.screenY=c.screenY;return b}
-function Lf(a,b,c){function d(){b.preventDefault()}var e=Array.prototype.slice.call(b.changedTouches),f=e.length,g,h;for(g=0;g<f;++g)h=Kf(a,b,e[g]),h.preventDefault=d,c.call(a,b,h)}
-k.ep=function(a){var b=a.touches,c=Object.keys(this.a),d=c.length;if(d>=b.length){var e=[],f,g,h;for(f=0;f<d;++f){g=c[f];h=this.a[g];var l;if(!(l=1==g))a:{l=b.length;for(var m,n=0;n<l;n++)if(m=b[n],m.identifier===g-2){l=!0;break a}l=!1}l||e.push(h.out)}for(f=0;f<e.length;++f)this.Re(a,e[f])}b=a.changedTouches[0];c=Object.keys(this.a).length;if(0===c||1===c&&(1).toString()in this.a)this.g=b.identifier,void 0!==this.f&&clearTimeout(this.f);Mf(this,a);this.i++;Lf(this,a,this.Un)};
-k.Un=function(a,b){this.a[b.pointerId]={target:b.target,out:b,Ch:b.target};var c=this.b;b.bubbles=!0;yf(c,"pointerover",b,a);c=this.b;b.bubbles=!1;yf(c,"pointerenter",b,a);yf(this.b,"pointerdown",b,a)};k.cp=function(a){a.preventDefault();Lf(this,a,this.il)};
-k.il=function(a,b){var c=this.a[b.pointerId];if(c){var d=c.out,e=c.Ch;yf(this.b,"pointermove",b,a);d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,d.target=e,b.target?(Af(this.b,d,a),zf(this.b,b,a)):(b.target=e,b.relatedTarget=null,this.Re(a,b)));c.out=b;c.Ch=b.target}};k.bp=function(a){Mf(this,a);Lf(this,a,this.fp)};
-k.fp=function(a,b){yf(this.b,"pointerup",b,a);this.b.out(b,a);Nf(this.b,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.g=void 0,this.f=setTimeout(this.Sh.bind(this),200))};k.ap=function(a){Lf(this,a,this.Re)};k.Re=function(a,b){yf(this.b,"pointercancel",b,a);this.b.out(b,a);Nf(this.b,b,a);delete this.a[b.pointerId];b.isPrimary&&(this.g=void 0,this.f=setTimeout(this.Sh.bind(this),200))};
-function Mf(a,b){var c=a.j.g,d=b.changedTouches[0];if(a.g===d.identifier){var e=[d.clientX,d.clientY];c.push(e);setTimeout(function(){cb(c,e)},2500)}};function Of(a){Ma.call(this);this.i=a;this.g={};this.c={};this.a=[];nf?Pf(this,new Ef(this)):of?Pf(this,new Bf(this)):(a=new uf(this),Pf(this,a),mf&&Pf(this,new Jf(this,a)));a=this.a.length;for(var b,c=0;c<a;c++)b=this.a[c],Qf(this,Object.keys(b.c))}v(Of,Ma);function Pf(a,b){var c=Object.keys(b.c);c&&(c.forEach(function(a){var c=b.c[a];c&&(this.c[a]=c.bind(b))},a),a.a.push(b))}Of.prototype.f=function(a){var b=this.c[a.type];b&&b(a)};
-function Qf(a,b){b.forEach(function(a){w(this.i,a,this.f,this)},a)}function Rf(a,b){b.forEach(function(a){Fa(this.i,a,this.f,this)},a)}function xf(a,b){for(var c={},d,e=0,f=Sf.length;e<f;e++)d=Sf[e][0],c[d]=a[d]||b[d]||Sf[e][1];return c}function Nf(a,b,c){b.bubbles=!1;yf(a,"pointerleave",b,c)}Of.prototype.out=function(a,b){a.bubbles=!0;yf(this,"pointerout",a,b)};function Af(a,b,c){a.out(b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||Nf(a,b,c)}
-function zf(a,b,c){b.bubbles=!0;yf(a,"pointerover",b,c);var d=b.target,e=b.relatedTarget;d&&e&&d.contains(e)||(b.bubbles=!1,yf(a,"pointerenter",b,c))}function yf(a,b,c,d){a.b(new Df(b,d,c))}function Ff(a,b){a.b(new Df(b.type,b,b))}Of.prototype.la=function(){for(var a=this.a.length,b,c=0;c<a;c++)b=this.a[c],Rf(this,Object.keys(b.c));Ma.prototype.la.call(this)};
-var Sf=[["bubbles",!1],["cancelable",!1],["view",null],["detail",null],["screenX",0],["screenY",0],["clientX",0],["clientY",0],["ctrlKey",!1],["altKey",!1],["shiftKey",!1],["metaKey",!1],["button",0],["relatedTarget",null],["buttons",0],["pointerId",0],["width",0],["height",0],["pressure",0],["tiltX",0],["tiltY",0],["pointerType",""],["hwTimestamp",0],["isPrimary",!1],["type",""],["target",null],["currentTarget",null],["which",0]];function Tf(a,b,c,d,e){Ge.call(this,a,b,e);this.originalEvent=c;this.pixel=b.Ud(c);this.coordinate=b.Ja(this.pixel);this.dragging=void 0!==d?d:!1}v(Tf,Ge);Tf.prototype.preventDefault=function(){Ge.prototype.preventDefault.call(this);this.originalEvent.preventDefault()};Tf.prototype.stopPropagation=function(){Ge.prototype.stopPropagation.call(this);this.originalEvent.stopPropagation()};function Uf(a,b,c,d,e){Tf.call(this,a,b,c.b,d,e);this.b=c}v(Uf,Tf);
-function Vf(a){Ma.call(this);this.f=a;this.j=0;this.l=!1;this.c=[];this.g=null;a=this.f.a;this.u=0;this.T={};this.i=new Of(a);this.a=null;this.o=w(this.i,"pointerdown",this.Mk,this);this.s=w(this.i,"pointermove",this.Co,this)}v(Vf,Ma);function Wf(a,b){var c=new Uf(Xf,a.f,b);a.b(c);0!==a.j?(clearTimeout(a.j),a.j=0,c=new Uf(Yf,a.f,b),a.b(c)):a.j=setTimeout(function(){this.j=0;var a=new Uf(Zf,this.f,b);this.b(a)}.bind(a),250)}
-function $f(a,b){b.type==ag||b.type==bg?delete a.T[b.pointerId]:b.type==cg&&(a.T[b.pointerId]=!0);a.u=Object.keys(a.T).length}k=Vf.prototype;k.Kg=function(a){$f(this,a);var b=new Uf(ag,this.f,a);this.b(b);!this.l&&0===a.button&&Wf(this,this.g);0===this.u&&(this.c.forEach(za),this.c.length=0,this.l=!1,this.g=null,Ja(this.a),this.a=null)};
-k.Mk=function(a){$f(this,a);var b=new Uf(cg,this.f,a);this.b(b);this.g=a;0===this.c.length&&(this.a=new Of(document),this.c.push(w(this.a,dg,this.Fl,this),w(this.a,ag,this.Kg,this),w(this.i,bg,this.Kg,this)))};k.Fl=function(a){if(a.clientX!=this.g.clientX||a.clientY!=this.g.clientY){this.l=!0;var b=new Uf(eg,this.f,a,this.l);this.b(b)}a.preventDefault()};k.Co=function(a){this.b(new Uf(a.type,this.f,a,!(!this.g||a.clientX==this.g.clientX&&a.clientY==this.g.clientY)))};
-k.la=function(){this.s&&(za(this.s),this.s=null);this.o&&(za(this.o),this.o=null);this.c.forEach(za);this.c.length=0;this.a&&(Ja(this.a),this.a=null);this.i&&(Ja(this.i),this.i=null);Ma.prototype.la.call(this)};var Zf="singleclick",Xf="click",Yf="dblclick",eg="pointerdrag",dg="pointermove",cg="pointerdown",ag="pointerup",bg="pointercancel",fg={xp:Zf,mp:Xf,np:Yf,qp:eg,tp:dg,pp:cg,wp:ag,vp:"pointerover",up:"pointerout",rp:"pointerenter",sp:"pointerleave",op:bg};function gg(a,b){Ma.call(this);this.ya=a;this.state=b;this.a=null;this.key=""}v(gg,Ma);function hg(a){a.b("change")}gg.prototype.Xa=function(){return this.key+"/"+this.ya};function ig(a){if(!a.a)return a;var b=a.a;do{if(b.U()==jg)return b;b=b.a}while(b);return a}gg.prototype.i=function(){return this.ya};gg.prototype.U=function(){return this.state};var jg=2;function kg(a,b){this.o=a;this.f=b;this.b=[];this.g=[];this.a={}}kg.prototype.clear=function(){this.b.length=0;this.g.length=0;va(this.a)};function lg(a){var b=a.b,c=a.g,d=b[0];1==b.length?(b.length=0,c.length=0):(b[0]=b.pop(),c[0]=c.pop(),mg(a,0));b=a.f(d);delete a.a[b];return d}kg.prototype.c=function(a){ha(!(this.f(a)in this.a),31);var b=this.o(a);return Infinity!=b?(this.b.push(a),this.g.push(b),this.a[this.f(a)]=!0,ng(this,0,this.b.length-1),!0):!1};
-function mg(a,b){for(var c=a.b,d=a.g,e=c.length,f=c[b],g=d[b],h=b;b<e>>1;){var l=2*b+1,m=2*b+2,l=m<e&&d[m]<d[l]?m:l;c[b]=c[l];d[b]=d[l];b=l}c[b]=f;d[b]=g;ng(a,h,b)}function ng(a,b,c){var d=a.b;a=a.g;for(var e=d[c],f=a[c];c>b;){var g=c-1>>1;if(a[g]>f)d[c]=d[g],a[c]=a[g],c=g;else break}d[c]=e;a[c]=f}function og(a){var b=a.o,c=a.b,d=a.g,e=0,f=c.length,g,h,l;for(h=0;h<f;++h)g=c[h],l=b(g),Infinity==l?delete a.a[a.f(g)]:(d[e]=l,c[e++]=g);c.length=e;d.length=e;for(b=(a.b.length>>1)-1;0<=b;b--)mg(a,b)};function pg(a,b){kg.call(this,function(b){return a.apply(null,b)},function(a){return a[0].Xa()});this.s=b;this.j=0;this.i={}}v(pg,kg);pg.prototype.c=function(a){var b=kg.prototype.c.call(this,a);b&&w(a[0],"change",this.l,this);return b};pg.prototype.l=function(a){a=a.target;var b=a.U();if(b===jg||3===b||4===b||5===b)Fa(a,"change",this.l,this),a=a.Xa(),a in this.i&&(delete this.i[a],--this.j),this.s()};
-function qg(a,b,c){for(var d=0,e,f;a.j<b&&d<c&&0<a.b.length;)e=lg(a)[0],f=e.Xa(),0!==e.U()||f in a.i||(a.i[f]=!0,++a.j,++d,e.load())};function rg(a,b,c){this.f=a;this.g=b;this.i=c;this.b=[];this.a=this.c=0}function sg(a,b){var c=a.f,d=a.a,e=a.g-d,f=Math.log(a.g/a.a)/a.f;return Nd({source:b,duration:f,easing:function(a){return d*(Math.exp(c*a*f)-1)/e}})};function tg(a){Ua.call(this);this.s=null;this.Ba(!0);this.handleEvent=a.handleEvent}v(tg,Ua);tg.prototype.f=function(){return this.get(ug)};tg.prototype.c=function(){return this.s};tg.prototype.Ba=function(a){this.set(ug,a)};tg.prototype.setMap=function(a){this.s=a};function vg(a,b,c,d,e){if(void 0!==c){var f=b.Pa(),g=b.bb();void 0!==f&&g&&e&&0<e&&(a.ab(Od({rotation:f,duration:e,easing:Jd})),d&&a.ab(Nd({source:g,duration:e,easing:Jd})));b.rotate(c,d)}}
-function wg(a,b,c,d,e){var f=b.Ma();c=b.constrainResolution(f,c,0);xg(a,b,c,d,e)}function xg(a,b,c,d,e){if(c){var f=b.Ma(),g=b.bb();void 0!==f&&g&&c!==f&&e&&0<e&&(a.ab(Pd({resolution:f,duration:e,easing:Jd})),d&&a.ab(Nd({source:g,duration:e,easing:Jd})));if(d){var h;a=b.bb();e=b.Ma();void 0!==a&&void 0!==e&&(h=[d[0]-c*(d[0]-a[0])/e,d[1]-c*(d[1]-a[1])/e]);b.rb(h)}b.Yb(c)}}var ug="active";function yg(a){a=a?a:{};this.a=a.delta?a.delta:1;tg.call(this,{handleEvent:zg});this.i=void 0!==a.duration?a.duration:250}v(yg,tg);function zg(a){var b=!1,c=a.originalEvent;if(a.type==Yf){var b=a.map,d=a.coordinate,c=c.shiftKey?-this.a:this.a,e=b.$();wg(b,e,c,d,this.i);a.preventDefault();b=!0}return!b};function Ag(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}function Bg(a){a=a.originalEvent;return 0==a.button&&!(ef&&ff&&a.ctrlKey)}function Cg(a){return"pointermove"==a.type}function Dg(a){return a.type==Zf}function Eg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey}function Fg(a){a=a.originalEvent;return!a.altKey&&!(a.metaKey||a.ctrlKey)&&a.shiftKey}
-function Gg(a){a=a.originalEvent.target.tagName;return"INPUT"!==a&&"SELECT"!==a&&"TEXTAREA"!==a}function Hg(a){ha(a.b,56);return"mouse"==a.b.pointerType}function Ig(a){a=a.b;return a.isPrimary&&0===a.button};function Jg(a){a=a?a:{};tg.call(this,{handleEvent:a.handleEvent?a.handleEvent:Kg});this.Me=a.handleDownEvent?a.handleDownEvent:hc;this.Je=a.handleDragEvent?a.handleDragEvent:da;this.hj=a.handleMoveEvent?a.handleMoveEvent:da;this.pj=a.handleUpEvent?a.handleUpEvent:hc;this.C=!1;this.Z={};this.l=[]}v(Jg,tg);function Lg(a){for(var b=a.length,c=0,d=0,e=0;e<b;e++)c+=a[e].clientX,d+=a[e].clientY;return[c/b,d/b]}
-function Kg(a){if(!(a instanceof Uf))return!0;var b=!1,c=a.type;if(c===cg||c===eg||c===ag)c=a.b,a.type==ag?delete this.Z[c.pointerId]:a.type==cg?this.Z[c.pointerId]=c:c.pointerId in this.Z&&(this.Z[c.pointerId]=c),this.l=wa(this.Z);this.C&&(a.type==eg?this.Je(a):a.type==ag&&(this.C=this.pj(a)));a.type==cg?(this.C=a=this.Me(a),b=this.Fc(a)):a.type==dg&&this.hj(a);return!b}Jg.prototype.Fc=function(a){return a};function Mg(a){Jg.call(this,{handleDownEvent:Ng,handleDragEvent:Og,handleUpEvent:Pg});a=a?a:{};this.a=a.kinetic;this.i=this.j=null;this.u=a.condition?a.condition:Eg;this.o=!1}v(Mg,Jg);function Og(a){var b=Lg(this.l);this.a&&this.a.b.push(b[0],b[1],Date.now());if(this.i){var c=this.i[0]-b[0],d=b[1]-this.i[1];a=a.map.$();var e=a.U(),d=c=[c,d],f=e.resolution;d[0]*=f;d[1]*=f;wb(c,e.rotation);rb(c,e.center);c=a.Qd(c);a.rb(c)}this.i=b}
-function Pg(a){var b=a.map;a=b.$();if(0===this.l.length){var c;if(c=!this.o&&this.a)if(c=this.a,6>c.b.length)c=!1;else{var d=Date.now()-c.i,e=c.b.length-3;if(c.b[e+2]<d)c=!1;else{for(var f=e-3;0<f&&c.b[f+2]>d;)f-=3;var d=c.b[e+2]-c.b[f+2],g=c.b[e]-c.b[f],e=c.b[e+1]-c.b[f+1];c.c=Math.atan2(e,g);c.a=Math.sqrt(g*g+e*e)/d;c=c.a>c.g}}c?(c=this.a,c=(c.g-c.a)/c.f,e=this.a.c,f=a.bb(),this.j=sg(this.a,f),b.ab(this.j),f=b.Ca(f),b=b.Ja([f[0]-c*Math.cos(e),f[1]-c*Math.sin(e)]),b=a.Qd(b),a.rb(b)):b.render();Hd(a,
--1);return!1}this.i=null;return!0}function Ng(a){if(0<this.l.length&&this.u(a)){var b=a.map,c=b.$();this.i=null;this.C||Hd(c,1);this.j&&cb(b.S,this.j)&&(c.rb(a.frameState.viewState.center),this.j=null);this.a&&(a=this.a,a.b.length=0,a.c=0,a.a=0);this.o=1<this.l.length;return!0}return!1}Mg.prototype.Fc=hc;function Qg(a){a=a?a:{};Jg.call(this,{handleDownEvent:Rg,handleDragEvent:Sg,handleUpEvent:Tg});this.i=a.condition?a.condition:Ag;this.a=void 0;this.j=void 0!==a.duration?a.duration:250}v(Qg,Jg);function Sg(a){if(Hg(a)){var b=a.map,c=b.kb();a=a.pixel;c=Math.atan2(c[1]/2-a[1],a[0]-c[0]/2);if(void 0!==this.a){a=c-this.a;var d=b.$(),e=d.Pa();vg(b,d,e-a)}this.a=c}}
-function Tg(a){if(!Hg(a))return!0;a=a.map;var b=a.$();Hd(b,-1);var c=b.Pa(),d=this.j,c=b.constrainRotation(c,0);vg(a,b,c,void 0,d);return!1}function Rg(a){return Hg(a)&&Bg(a)&&this.i(a)?(Hd(a.map.$(),1),this.a=void 0,!0):!1}Qg.prototype.Fc=hc;function Ug(a){this.f=null;this.a=document.createElement("div");this.a.style.position="absolute";this.a.className="ol-box "+a;this.g=this.c=this.b=null}v(Ug,Ia);Ug.prototype.la=function(){this.setMap(null)};function Vg(a){var b=a.c,c=a.g;a=a.a.style;a.left=Math.min(b[0],c[0])+"px";a.top=Math.min(b[1],c[1])+"px";a.width=Math.abs(c[0]-b[0])+"px";a.height=Math.abs(c[1]-b[1])+"px"}
-Ug.prototype.setMap=function(a){if(this.b){this.b.C.removeChild(this.a);var b=this.a.style;b.left=b.top=b.width=b.height="inherit"}(this.b=a)&&this.b.C.appendChild(this.a)};function Wg(a){var b=a.c,c=a.g,b=[b,[b[0],c[1]],c,[c[0],b[1]]].map(a.b.Ja,a.b);b[4]=b[0].slice();a.f?a.f.ma([b]):a.f=new B([b])}Ug.prototype.V=function(){return this.f};function Xg(a){Jg.call(this,{handleDownEvent:Yg,handleDragEvent:Zg,handleUpEvent:$g});a=a?a:{};this.a=new Ug(a.className||"ol-dragbox");this.i=null;this.B=a.condition?a.condition:gc;this.u=a.boxEndCondition?a.boxEndCondition:ah}v(Xg,Jg);function ah(a,b,c){a=c[0]-b[0];b=c[1]-b[1];return 64<=a*a+b*b}function Zg(a){if(Hg(a)){var b=this.a,c=a.pixel;b.c=this.i;b.g=c;Wg(b);Vg(b);this.b(new bh(ch,a.coordinate,a))}}Xg.prototype.V=function(){return this.a.V()};Xg.prototype.o=da;
-function $g(a){if(!Hg(a))return!0;this.a.setMap(null);this.u(a,this.i,a.pixel)&&(this.o(a),this.b(new bh(dh,a.coordinate,a)));return!1}function Yg(a){if(Hg(a)&&Bg(a)&&this.B(a)){this.i=a.pixel;this.a.setMap(a.map);var b=this.a,c=this.i;b.c=this.i;b.g=c;Wg(b);Vg(b);this.b(new bh(eh,a.coordinate,a));return!0}return!1}var eh="boxstart",ch="boxdrag",dh="boxend";function bh(a,b,c){Ka.call(this,a);this.coordinate=b;this.mapBrowserEvent=c}v(bh,Ka);function fh(a){a=a?a:{};var b=a.condition?a.condition:Fg;this.j=void 0!==a.duration?a.duration:200;this.G=void 0!==a.out?a.out:!1;Xg.call(this,{condition:b,className:a.className||"ol-dragzoom"})}v(fh,Xg);
-fh.prototype.o=function(){var a=this.s,b=a.$(),c=a.kb(),d=this.V().D();if(this.G){var e=b.Jc(c),d=[a.Ca(Sb(d)),a.Ca(Vb(d))],f=Kb(Infinity,Infinity,-Infinity,-Infinity,void 0),g,h;g=0;for(h=d.length;g<h;++g)Cb(f,d[g]);ec(e,1/Dd(f,c));d=e}c=b.constrainResolution(Dd(d,c));e=b.Ma();f=b.bb();a.ab(Pd({resolution:e,duration:this.j,easing:Jd}));a.ab(Nd({source:f,duration:this.j,easing:Jd}));b.rb(ac(d));b.Yb(c)};function gh(a){tg.call(this,{handleEvent:hh});a=a||{};this.a=function(a){return Eg(a)&&Gg(a)};this.i=void 0!==a.condition?a.condition:this.a;this.j=void 0!==a.duration?a.duration:100;this.l=void 0!==a.pixelDelta?a.pixelDelta:128}v(gh,tg);
-function hh(a){var b=!1;if("keydown"==a.type){var c=a.originalEvent.keyCode;if(this.i(a)&&(40==c||37==c||39==c||38==c)){var d=a.map,b=d.$(),e=b.Ma()*this.l,f=0,g=0;40==c?g=-e:37==c?f=-e:39==c?f=e:g=e;c=[f,g];wb(c,b.Pa());e=this.j;if(f=b.bb())e&&0<e&&d.ab(Nd({source:f,duration:e,easing:Ld})),d=b.Qd([f[0]+c[0],f[1]+c[1]]),b.rb(d);a.preventDefault();b=!0}}return!b};function ih(a){tg.call(this,{handleEvent:jh});a=a?a:{};this.i=a.condition?a.condition:Gg;this.a=a.delta?a.delta:1;this.j=void 0!==a.duration?a.duration:100}v(ih,tg);function jh(a){var b=!1;if("keydown"==a.type||"keypress"==a.type){var c=a.originalEvent.charCode;if(this.i(a)&&(43==c||45==c)){var b=a.map,c=43==c?this.a:-this.a,d=b.$();wg(b,d,c,void 0,this.j);a.preventDefault();b=!0}}return!b};function kh(a){tg.call(this,{handleEvent:lh});a=a||{};this.i=0;this.C=void 0!==a.duration?a.duration:250;this.G=void 0!==a.timeout?a.timeout:80;this.o=void 0!==a.useAnchor?a.useAnchor:!0;this.a=null;this.l=this.j=void 0}v(kh,tg);
-function lh(a){var b=!1;if("wheel"==a.type||"mousewheel"==a.type){var b=a.map,c=a.originalEvent;this.o&&(this.a=a.coordinate);var d;"wheel"==a.type?(d=c.deltaY,cf&&c.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(d/=gf),c.deltaMode===WheelEvent.DOM_DELTA_LINE&&(d*=40)):"mousewheel"==a.type&&(d=-c.wheelDeltaY,df&&(d/=3));this.i+=d;void 0===this.j&&(this.j=Date.now());d=Math.max(this.G-(Date.now()-this.j),0);clearTimeout(this.l);this.l=setTimeout(this.u.bind(this,b),d);a.preventDefault();b=!0}return!b}
-kh.prototype.u=function(a){var b=ia(this.i,-1,1),c=a.$();wg(a,c,-b,this.a,this.C);this.i=0;this.a=null;this.l=this.j=void 0};kh.prototype.B=function(a){this.o=a;a||(this.a=null)};function mh(a){Jg.call(this,{handleDownEvent:nh,handleDragEvent:oh,handleUpEvent:ph});a=a||{};this.i=null;this.j=void 0;this.a=!1;this.o=0;this.B=void 0!==a.threshold?a.threshold:.3;this.u=void 0!==a.duration?a.duration:250}v(mh,Jg);
-function oh(a){var b=0,c=this.l[0],d=this.l[1],c=Math.atan2(d.clientY-c.clientY,d.clientX-c.clientX);void 0!==this.j&&(b=c-this.j,this.o+=b,!this.a&&Math.abs(this.o)>this.B&&(this.a=!0));this.j=c;a=a.map;c=a.a.getBoundingClientRect();d=Lg(this.l);d[0]-=c.left;d[1]-=c.top;this.i=a.Ja(d);this.a&&(c=a.$(),d=c.Pa(),a.render(),vg(a,c,d+b,this.i))}
-function ph(a){if(2>this.l.length){a=a.map;var b=a.$();Hd(b,-1);if(this.a){var c=b.Pa(),d=this.i,e=this.u,c=b.constrainRotation(c,0);vg(a,b,c,d,e)}return!1}return!0}function nh(a){return 2<=this.l.length?(a=a.map,this.i=null,this.j=void 0,this.a=!1,this.o=0,this.C||Hd(a.$(),1),a.render(),!0):!1}mh.prototype.Fc=hc;function qh(a){Jg.call(this,{handleDownEvent:rh,handleDragEvent:sh,handleUpEvent:th});a=a?a:{};this.i=null;this.o=void 0!==a.duration?a.duration:400;this.a=void 0;this.j=1}v(qh,Jg);function sh(a){var b=1,c=this.l[0],d=this.l[1],e=c.clientX-d.clientX,c=c.clientY-d.clientY,e=Math.sqrt(e*e+c*c);void 0!==this.a&&(b=this.a/e);this.a=e;1!=b&&(this.j=b);a=a.map;var e=a.$(),c=e.Ma(),d=a.a.getBoundingClientRect(),f=Lg(this.l);f[0]-=d.left;f[1]-=d.top;this.i=a.Ja(f);a.render();xg(a,e,c*b,this.i)}
-function th(a){if(2>this.l.length){a=a.map;var b=a.$();Hd(b,-1);var c=b.Ma(),d=this.i,e=this.o,c=b.constrainResolution(c,0,this.j-1);xg(a,b,c,d,e);return!1}return!0}function rh(a){return 2<=this.l.length?(a=a.map,this.i=null,this.a=void 0,this.j=1,this.C||Hd(a.$(),1),a.render(),!0):!1}qh.prototype.Fc=hc;function uh(a){a=a?a:{};var b=new me,c=new rg(-.005,.05,100);(void 0!==a.altShiftDragRotate?a.altShiftDragRotate:1)&&b.push(new Qg);(void 0!==a.doubleClickZoom?a.doubleClickZoom:1)&&b.push(new yg({delta:a.zoomDelta,duration:a.zoomDuration}));(void 0!==a.dragPan?a.dragPan:1)&&b.push(new Mg({kinetic:c}));(void 0!==a.pinchRotate?a.pinchRotate:1)&&b.push(new mh);(void 0!==a.pinchZoom?a.pinchZoom:1)&&b.push(new qh({duration:a.zoomDuration}));if(void 0!==a.keyboard?a.keyboard:1)b.push(new gh),b.push(new ih({delta:a.zoomDelta,
-duration:a.zoomDuration}));(void 0!==a.mouseWheelZoom?a.mouseWheelZoom:1)&&b.push(new kh({duration:a.zoomDuration}));(void 0!==a.shiftDragZoom?a.shiftDragZoom:1)&&b.push(new fh({duration:a.zoomDuration}));return b};function vh(a){Ua.call(this);var b=ua({},a);b.opacity=void 0!==a.opacity?a.opacity:1;b.visible=void 0!==a.visible?a.visible:!0;b.zIndex=void 0!==a.zIndex?a.zIndex:0;b.maxResolution=void 0!==a.maxResolution?a.maxResolution:Infinity;b.minResolution=void 0!==a.minResolution?a.minResolution:0;this.H(b);this.a={layer:this,sd:!0}}v(vh,Ua);
-function wh(a){a.a.opacity=ia(a.Rb(),0,1);a.a.mi=a.hf();a.a.visible=a.zb();a.a.extent=a.D();a.a.zIndex=a.Sb();a.a.maxResolution=a.Pb();a.a.minResolution=Math.max(a.Qb(),0);return a.a}k=vh.prototype;k.D=function(){return this.get("extent")};k.Pb=function(){return this.get("maxResolution")};k.Qb=function(){return this.get("minResolution")};k.Rb=function(){return this.get("opacity")};k.zb=function(){return this.get("visible")};k.Sb=function(){return this.get("zIndex")};
-k.fc=function(a){this.set("extent",a)};k.lc=function(a){this.set("maxResolution",a)};k.mc=function(a){this.set("minResolution",a)};k.gc=function(a){this.set("opacity",a)};k.hc=function(a){this.set("visible",a)};k.ic=function(a){this.set("zIndex",a)};function xh(a){var b=a||{};a=ua({},b);delete a.layers;b=b.layers;vh.call(this,a);this.c=[];this.f={};w(this,Wa(yh),this.Fk,this);b?Array.isArray(b)?b=new me(b.slice()):ha(b instanceof me,43):b=new me;this.gh(b)}v(xh,vh);k=xh.prototype;k.be=function(){this.zb()&&this.v()};
-k.Fk=function(){this.c.forEach(za);this.c.length=0;var a=this.Qc();this.c.push(w(a,se,this.Ek,this),w(a,te,this.Gk,this));for(var b in this.f)this.f[b].forEach(za);va(this.f);var a=a.a,c,d;b=0;for(c=a.length;b<c;b++)d=a[b],this.f[ea(d).toString()]=[w(d,"propertychange",this.be,this),w(d,"change",this.be,this)];this.v()};k.Ek=function(a){a=a.element;var b=ea(a).toString();this.f[b]=[w(a,"propertychange",this.be,this),w(a,"change",this.be,this)];this.v()};
-k.Gk=function(a){a=ea(a.element).toString();this.f[a].forEach(za);delete this.f[a];this.v()};k.Qc=function(){return this.get(yh)};k.gh=function(a){this.set(yh,a)};
-k.ff=function(a){var b=void 0!==a?a:[],c=b.length;this.Qc().forEach(function(a){a.ff(b)});a=wh(this);var d,e;for(d=b.length;c<d;c++)e=b[c],e.opacity*=a.opacity,e.visible=e.visible&&a.visible,e.maxResolution=Math.min(e.maxResolution,a.maxResolution),e.minResolution=Math.max(e.minResolution,a.minResolution),void 0!==a.extent&&(e.extent=void 0!==e.extent?cc(e.extent,a.extent):a.extent);return b};k.hf=function(){return"ready"};var yh="layers";function zh(a){lc.call(this,{code:a,units:"m",extent:Ah,global:!0,worldExtent:Bh})}v(zh,lc);zh.prototype.getPointResolution=function(a,b){return a/ja(b[1]/6378137)};var Ch=6378137*Math.PI,Ah=[-Ch,-Ch,Ch,Ch],Bh=[-180,-85,180,85],zc="EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" ").map(function(a){return new zh(a)});
-function Ac(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c){b[e]=Ch*a[e]/180;var f=6378137*Math.log(Math.tan(Math.PI*(a[e+1]+90)/360));f>Ch?f=Ch:f<-Ch&&(f=-Ch);b[e+1]=f}return b}function Bc(a,b,c){var d=a.length;c=1<c?c:2;void 0===b&&(2<c?b=a.slice():b=Array(d));for(var e=0;e<d;e+=c)b[e]=180*a[e]/Ch,b[e+1]=360*Math.atan(Math.exp(a[e+1]/6378137))/Math.PI-90;return b};var Dh=new ic(6378137);function Eh(a,b){lc.call(this,{code:a,units:"degrees",extent:Fh,axisOrientation:b,global:!0,metersPerUnit:Gh,worldExtent:Fh})}v(Eh,lc);Eh.prototype.getPointResolution=function(a){return a};
-var Fh=[-180,-90,180,90],Gh=Math.PI*Dh.radius/180,Cc=[new Eh("CRS:84"),new Eh("EPSG:4326","neu"),new Eh("urn:ogc:def:crs:EPSG::4326","neu"),new Eh("urn:ogc:def:crs:EPSG:6.6:4326","neu"),new Eh("urn:ogc:def:crs:OGC:1.3:CRS84"),new Eh("urn:ogc:def:crs:OGC:2:84"),new Eh("http://www.opengis.net/gml/srs/epsg.xml#4326","neu"),new Eh("urn:x-ogc:def:crs:EPSG:4326","neu")];function Hh(){rc(zc);rc(Cc);yc()};function Ih(a,b,c,d,e){Ka.call(this,a);this.vectorContext=b;this.frameState=c;this.context=d;this.glContext=e}v(Ih,Ka);function Jh(a){var b=ua({},a);delete b.source;vh.call(this,b);this.C=this.s=this.o=null;a.map&&this.setMap(a.map);w(this,Wa("source"),this.Sk,this);this.Ec(a.source?a.source:null)}v(Jh,vh);function Kh(a,b){return a.visible&&b>=a.minResolution&&b<a.maxResolution}k=Jh.prototype;k.ff=function(a){a=a?a:[];a.push(wh(this));return a};k.ga=function(){return this.get("source")||null};k.hf=function(){var a=this.ga();return a?a.U():"undefined"};k.zm=function(){this.v()};
-k.Sk=function(){this.C&&(za(this.C),this.C=null);var a=this.ga();a&&(this.C=w(a,"change",this.zm,this));this.v()};k.setMap=function(a){this.o&&(za(this.o),this.o=null);a||this.v();this.s&&(za(this.s),this.s=null);a&&(this.o=w(a,"precompose",function(a){var c=wh(this);c.sd=!1;c.zIndex=Infinity;a.frameState.layerStatesArray.push(c);a.frameState.layerStates[ea(this)]=c},this),this.s=w(this,"change",a.render,a),this.v())};k.Ec=function(a){this.set("source",a)};function Lh(){this.b={};this.a=0}Lh.prototype.clear=function(){this.b={};this.a=0};Lh.prototype.get=function(a,b,c){a=b+":"+a+":"+(c?Ae(c):"null");return a in this.b?this.b[a]:null};Lh.prototype.set=function(a,b,c,d){this.b[b+":"+a+":"+(c?Ae(c):"null")]=d;++this.a};var Mh=new Lh;var Nh=Array(6);function Oh(){return[1,0,0,1,0,0]}function Ph(a){return Qh(a,1,0,0,1,0,0)}function Rh(a,b){var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5],l=b[0],m=b[1],n=b[2],p=b[3],q=b[4],t=b[5];a[0]=c*l+e*m;a[1]=d*l+f*m;a[2]=c*n+e*p;a[3]=d*n+f*p;a[4]=c*q+e*t+g;a[5]=d*q+f*t+h;return a}function Qh(a,b,c,d,e,f,g){a[0]=b;a[1]=c;a[2]=d;a[3]=e;a[4]=f;a[5]=g;return a}function Sh(a,b){a[0]=b[0];a[1]=b[1];a[2]=b[2];a[3]=b[3];a[4]=b[4];a[5]=b[5];return a}
-function Th(a,b){var c=b[0],d=b[1];b[0]=a[0]*c+a[2]*d+a[4];b[1]=a[1]*c+a[3]*d+a[5];return b}function Uh(a,b){var c=Math.cos(b),d=Math.sin(b);Rh(a,Qh(Nh,c,d,-d,c,0,0))}function Vh(a,b,c){return Rh(a,Qh(Nh,b,0,0,c,0,0))}function Wh(a,b,c){Rh(a,Qh(Nh,1,0,0,1,b,c))}function Xh(a,b,c,d,e,f,g,h){var l=Math.sin(f);f=Math.cos(f);a[0]=d*f;a[1]=e*l;a[2]=-d*l;a[3]=e*f;a[4]=g*d*f-h*d*l+b;a[5]=g*e*l+h*e*f+c;return a}
-function Yh(a){var b=a[0]*a[3]-a[1]*a[2];ha(0!==b,32);var c=a[0],d=a[1],e=a[2],f=a[3],g=a[4],h=a[5];a[0]=f/b;a[1]=-d/b;a[2]=-e/b;a[3]=c/b;a[4]=(e*h-f*g)/b;a[5]=-(c*h-d*g)/b;return a};function Zh(a,b){this.l=b;this.f={};this.s={}}v(Zh,Ia);function $h(a){var b=a.viewState,c=a.coordinateToPixelTransform,d=a.pixelToCoordinateTransform;Xh(c,a.size[0]/2,a.size[1]/2,1/b.resolution,-1/b.resolution,-b.rotation,-b.center[0],-b.center[1]);Yh(Sh(d,c))}k=Zh.prototype;k.la=function(){for(var a in this.f)Ja(this.f[a])};function ai(){if(32<Mh.a){var a=0,b,c;for(b in Mh.b)c=Mh.b[b],0!==(a++&3)||Na(c)||(delete Mh.b[b],--Mh.a)}}
-k.xa=function(a,b,c,d,e,f){function g(a,e){var f=ea(a).toString(),g=b.layerStates[ea(e)].sd;if(!(f in b.skippedFeatureUids)||g)return c.call(d,a,g?e:null)}var h,l=b.viewState,m=l.resolution,n=l.projection,l=a;if(n.a){var n=n.D(),p=Zb(n),q=a[0];if(q<n[0]||q>n[2])l=[q+p*Math.ceil((n[0]-q)/p),a[1]]}n=b.layerStatesArray;for(p=n.length-1;0<=p;--p){var t=n[p],q=t.layer;if(Kh(t,m)&&e.call(f,q)&&(t=bi(this,q),q.ga()&&(h=t.xa(q.ga().G?l:a,b,g,d)),h))return h}};
-k.jh=function(a,b,c,d,e,f){var g,h=b.viewState.resolution,l=b.layerStatesArray,m;for(m=l.length-1;0<=m;--m){g=l[m];var n=g.layer;if(Kh(g,h)&&e.call(f,n)&&(g=bi(this,n).Bc(a,b,c,d)))return g}};k.kh=function(a,b,c,d){return void 0!==this.xa(a,b,gc,this,c,d)};function bi(a,b){var c=ea(b).toString();if(c in a.f)return a.f[c];var d=a.ng(b);a.f[c]=d;a.s[c]=w(d,"change",a.Dk,a);return d}k.Dk=function(){this.l.render()};k.Pf=da;
-k.Io=function(a,b){for(var c in this.f)if(!(b&&c in b.layerStates)){var d=c,e=this.f[d];delete this.f[d];za(this.s[d]);delete this.s[d];Ja(e)}};function ci(a,b){for(var c in a.f)if(!(c in b.layerStates)){b.postRenderFunctions.push(a.Io.bind(a));break}}function gb(a,b){return a.zIndex-b.zIndex};function di(a){Jh.call(this,a?a:{})}v(di,Jh);function D(a){a=a?a:{};var b=ua({},a);delete b.preload;delete b.useInterimTilesOnError;Jh.call(this,b);this.l(void 0!==a.preload?a.preload:0);this.B(void 0!==a.useInterimTilesOnError?a.useInterimTilesOnError:!0)}v(D,Jh);D.prototype.f=function(){return this.get(ei)};D.prototype.l=function(a){this.set(ei,a)};D.prototype.c=function(){return this.get(fi)};D.prototype.B=function(a){this.set(fi,a)};var ei="preload",fi="useInterimTilesOnError";function gi(a,b,c,d,e){Ma.call(this);this.j=e;this.extent=a;this.f=c;this.resolution=b;this.state=d}v(gi,Ma);function hi(a){a.b("change")}gi.prototype.D=function(){return this.extent};gi.prototype.U=function(){return this.state};function ii(a,b,c,d,e,f,g){gi.call(this,a,b,c,ji,d);this.o=e;this.g=new Image;null!==f&&(this.g.crossOrigin=f);this.i={};this.c=null;this.state=ji;this.l=g}v(ii,gi);ii.prototype.a=function(a){if(void 0!==a){var b;a=ea(a);if(a in this.i)return this.i[a];xa(this.i)?b=this.g:b=this.g.cloneNode(!1);return this.i[a]=b}return this.g};ii.prototype.s=function(){this.state=ki;this.c.forEach(za);this.c=null;hi(this)};
-ii.prototype.T=function(){void 0===this.resolution&&(this.resolution=$b(this.extent)/this.g.height);this.state=li;this.c.forEach(za);this.c=null;hi(this)};ii.prototype.load=function(){if(this.state==ji||this.state==ki)this.state=mi,hi(this),this.c=[Ea(this.g,"error",this.s,this),Ea(this.g,"load",this.T,this)],this.l(this,this.o)};var ji=0,mi=1,li=2,ki=3;var ni=[0,0,0,1],oi=[],pi=[0,0,0,1];function qi(a,b,c,d){0!==b&&(a.translate(c,d),a.rotate(b),a.translate(-c,-d))};function ri(a){this.l=a.opacity;this.T=a.rotateWithView;this.o=a.rotation;this.c=a.scale;this.u=a.snapToPixel}k=ri.prototype;k.qe=function(){return this.l};k.re=function(){return this.T};k.se=function(){return this.o};k.te=function(){return this.c};k.Xd=function(){return this.u};k.Rc=function(a){this.l=a};k.ue=function(a){this.o=a};k.Sc=function(a){this.c=a};function si(a){a=a||{};this.s=a.atlasManager;this.j=this.f=this.i=null;this.g=void 0!==a.fill?a.fill:null;this.b=void 0!==a.stroke?a.stroke:null;this.a=a.radius;this.S=[0,0];this.C=this.G=this.na=this.B=null;ti(this,this.s);ri.call(this,{opacity:1,rotateWithView:!1,rotation:0,scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0})}v(si,ri);k=si.prototype;
-k.clone=function(){var a=new si({fill:this.g?this.g.clone():void 0,stroke:this.b?this.b.clone():void 0,radius:this.a,snapToPixel:this.u,atlasManager:this.s});a.Rc(this.l);a.Sc(this.c);return a};k.cc=function(){return this.B};k.nn=function(){return this.g};k.pe=function(){return this.j};k.Tb=function(){return this.f};k.vd=function(){return li};k.md=function(){return this.G};k.jc=function(){return this.S};k.pn=function(){return this.a};k.Gb=function(){return this.na};k.qn=function(){return this.b};
-k.rn=function(a){this.a=a;ti(this,this.s)};k.pf=da;k.load=da;k.Uf=da;
-function ti(a,b){var c,d=null,e,f=0;a.b&&(e=Ce(a.b.a),f=a.b.f,void 0===f&&(f=1),d=a.b.g,hf||(d=null));var g=2*(a.a+f)+1,d={strokeStyle:e,Dd:f,size:g,lineDash:d};if(void 0===b)e=De(g,g),a.f=e.canvas,c=g=a.f.width,a.wh(d,e,0,0),a.C=[d.size,d.size],a.g?a.j=a.f:(e=De(d.size,d.size),a.j=e.canvas,a.vh(d,e,0,0));else{g=Math.round(g);(e=!a.g)&&(c=a.vh.bind(a,d));var f=a.b?ui(a.b):"-",h=a.g?vi(a.g):"-";a.i&&f==a.i[1]&&h==a.i[2]&&a.a==a.i[3]||(a.i=["c"+f+h+(void 0!==a.a?a.a.toString():"-"),f,h,a.a]);d=b.add(a.i[0],
-g,g,a.wh.bind(a,d),c);a.f=d.image;a.S=[d.offsetX,d.offsetY];c=d.image.width;e?(a.j=d.de,a.C=[d.de.width,d.de.height]):(a.j=a.f,a.C=[c,c])}a.B=[g/2,g/2];a.na=[g,g];a.G=[c,c]}k.wh=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);this.g&&(b.fillStyle=Ce(this.g.b),b.fill());this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.Dd,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};
-k.vh=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();b.arc(a.size/2,a.size/2,this.a,0,2*Math.PI,!0);b.fillStyle=Ae(ni);b.fill();this.b&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.Dd,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};function wi(a){a=a||{};this.b=void 0!==a.color?a.color:null;this.a=void 0}wi.prototype.clone=function(){var a=this.b;return new wi({color:a&&a.slice?a.slice():a||void 0})};wi.prototype.g=function(){return this.b};wi.prototype.f=function(a){this.b=a;this.a=void 0};function vi(a){void 0===a.a&&(a.a=a.b instanceof CanvasPattern||a.b instanceof CanvasGradient?ea(a.b).toString():"f"+(a.b?Ae(a.b):"-"));return a.a};function xi(a){a=a||{};this.a=void 0!==a.color?a.color:null;this.c=a.lineCap;this.g=void 0!==a.lineDash?a.lineDash:null;this.i=a.lineJoin;this.j=a.miterLimit;this.f=a.width;this.b=void 0}k=xi.prototype;k.clone=function(){var a=this.a;return new xi({color:a&&a.slice?a.slice():a||void 0,lineCap:this.c,lineDash:this.g?this.g.slice():void 0,lineJoin:this.i,miterLimit:this.j,width:this.f})};k.zn=function(){return this.a};k.Sj=function(){return this.c};k.An=function(){return this.g};k.Tj=function(){return this.i};
-k.Yj=function(){return this.j};k.Bn=function(){return this.f};k.Cn=function(a){this.a=a;this.b=void 0};k.So=function(a){this.c=a;this.b=void 0};k.setLineDash=function(a){this.g=a;this.b=void 0};k.To=function(a){this.i=a;this.b=void 0};k.Uo=function(a){this.j=a;this.b=void 0};k.Xo=function(a){this.f=a;this.b=void 0};
-function ui(a){void 0===a.b&&(a.b="s",a.b=a.a?"string"===typeof a.a?a.b+a.a:a.b+ea(a.a).toString():a.b+"-",a.b+=","+(void 0!==a.c?a.c.toString():"-")+","+(a.g?a.g.toString():"-")+","+(void 0!==a.i?a.i:"-")+","+(void 0!==a.j?a.j.toString():"-")+","+(void 0!==a.f?a.f.toString():"-"));return a.b};function yi(a){a=a||{};this.i=null;this.c=zi;void 0!==a.geometry&&this.zh(a.geometry);this.f=void 0!==a.fill?a.fill:null;this.a=void 0!==a.image?a.image:null;this.g=void 0!==a.stroke?a.stroke:null;this.j=void 0!==a.text?a.text:null;this.b=a.zIndex}k=yi.prototype;k.clone=function(){var a=this.V();a&&a.clone&&(a=a.clone());return new yi({geometry:a,fill:this.f?this.f.clone():void 0,image:this.a?this.a.clone():void 0,stroke:this.g?this.g.clone():void 0,text:this.Fa()?this.Fa().clone():void 0,zIndex:this.b})};
-k.V=function(){return this.i};k.Nj=function(){return this.c};k.Dn=function(){return this.f};k.En=function(){return this.a};k.Fn=function(){return this.g};k.Fa=function(){return this.j};k.Gn=function(){return this.b};k.zh=function(a){"function"===typeof a?this.c=a:"string"===typeof a?this.c=function(b){return b.get(a)}:a?a&&(this.c=function(){return a}):this.c=zi;this.i=a};k.Hn=function(a){this.b=a};
-function Ai(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(ha(a instanceof yi,41),b=[a]);a=function(){return b}}return a}var Bi=null;function Ci(){if(!Bi){var a=new wi({color:"rgba(255,255,255,0.4)"}),b=new xi({color:"#3399CC",width:1.25});Bi=[new yi({image:new si({fill:a,stroke:b,radius:5}),fill:a,stroke:b})]}return Bi}
-function Di(){var a={},b=[255,255,255,1],c=[0,153,255,1];a.Polygon=[new yi({fill:new wi({color:[255,255,255,.5]})})];a.MultiPolygon=a.Polygon;a.LineString=[new yi({stroke:new xi({color:b,width:5})}),new yi({stroke:new xi({color:c,width:3})})];a.MultiLineString=a.LineString;a.Circle=a.Polygon.concat(a.LineString);a.Point=[new yi({image:new si({radius:6,fill:new wi({color:c}),stroke:new xi({color:b,width:1.5})}),zIndex:Infinity})];a.MultiPoint=a.Point;a.GeometryCollection=a.Polygon.concat(a.LineString,
-a.Point);return a}function zi(a){return a.V()};function E(a){a=a?a:{};var b=ua({},a);delete b.style;delete b.renderBuffer;delete b.updateWhileAnimating;delete b.updateWhileInteracting;Jh.call(this,b);this.i=void 0!==a.renderBuffer?a.renderBuffer:100;this.B=null;this.j=void 0;this.l(a.style);this.Z=void 0!==a.updateWhileAnimating?a.updateWhileAnimating:!1;this.fa=void 0!==a.updateWhileInteracting?a.updateWhileInteracting:!1}v(E,Jh);E.prototype.G=function(){return this.B};E.prototype.S=function(){return this.j};
-E.prototype.l=function(a){this.B=void 0!==a?a:Ci;this.j=null===a?void 0:Ai(this.B);this.v()};function G(a){a=a?a:{};var b=ua({},a);delete b.preload;delete b.useInterimTilesOnError;E.call(this,b);this.P(a.preload?a.preload:0);this.W(a.useInterimTilesOnError?a.useInterimTilesOnError:!0);ha(void 0==a.renderMode||a.renderMode==Ei||a.renderMode==Fi||a.renderMode==Gi,28);this.u=a.renderMode||Fi}v(G,E);G.prototype.f=function(){return this.get(Hi)};G.prototype.c=function(){return this.get(Ii)};G.prototype.P=function(a){this.set(ei,a)};G.prototype.W=function(a){this.set(fi,a)};
-var Hi="preload",Ii="useInterimTilesOnError",Ei="image",Fi="hybrid",Gi="vector";function Ji(){};function Ki(a,b,c,d,e){this.f=a;this.C=b;this.c=c;this.B=d;this.ac=e;this.i=this.b=this.a=this.Z=this.Qa=this.W=null;this.fa=this.$a=this.T=this.na=this.S=this.G=0;this.ra=!1;this.j=this.Ib=0;this.oa=!1;this.za=0;this.g="";this.Aa=this.Ka=0;this.La=!1;this.o=this.ub=0;this.P=this.s=this.l=null;this.u=[];this.Jb=Oh()}v(Ki,Ji);
-function Li(a,b,c){if(a.i){b=Nc(b,0,c,2,a.B,a.u);c=a.f;var d=a.Jb,e=c.globalAlpha;1!=a.T&&(c.globalAlpha=e*a.T);var f=a.Ib;a.ra&&(f+=a.ac);var g,h;g=0;for(h=b.length;g<h;g+=2){var l=b[g]-a.G,m=b[g+1]-a.S;a.oa&&(l=Math.round(l),m=Math.round(m));if(0!==f||1!=a.j){var n=l+a.G,p=m+a.S;Xh(d,n,p,a.j,a.j,f,-n,-p);c.setTransform.apply(c,d)}c.drawImage(a.i,a.$a,a.fa,a.za,a.na,l,m,a.za,a.na)}0===f&&1==a.j||c.setTransform(1,0,0,1,0,0);1!=a.T&&(c.globalAlpha=e)}}
-function Mi(a,b,c,d){var e=0;if(a.P&&""!==a.g){a.l&&Ni(a,a.l);a.s&&Oi(a,a.s);var f=a.P,g=a.f,h=a.Z;h?(h.font!=f.font&&(h.font=g.font=f.font),h.textAlign!=f.textAlign&&(h.textAlign=g.textAlign=f.textAlign),h.textBaseline!=f.textBaseline&&(h.textBaseline=g.textBaseline=f.textBaseline)):(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline,a.Z={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});b=Nc(b,e,c,d,a.B,a.u);f=a.f;g=a.ub;for(a.La&&(g+=a.ac);e<c;e+=d){var h=b[e]+a.Ka,
-l=b[e+1]+a.Aa;if(0!==g||1!=a.o){var m=Xh(a.Jb,h,l,a.o,a.o,g,-h,-l);f.setTransform.apply(f,m)}a.s&&f.strokeText(a.g,h,l);a.l&&f.fillText(a.g,h,l)}0===g&&1==a.o||f.setTransform(1,0,0,1,0,0)}}function Pi(a,b,c,d,e,f){var g=a.f;a=Nc(b,c,d,e,a.B,a.u);g.moveTo(a[0],a[1]);b=a.length;f&&(b-=2);for(c=2;c<b;c+=2)g.lineTo(a[c],a[c+1]);f&&g.closePath();return d}function Qi(a,b,c,d,e){var f,g;f=0;for(g=d.length;f<g;++f)c=Pi(a,b,c,d[f],e,!0);return c}k=Ki.prototype;
-k.Rd=function(a){if(dc(this.c,a.D())){if(this.a||this.b){this.a&&Ni(this,this.a);this.b&&Oi(this,this.b);var b;b=this.B;var c=this.u,d=a.ka();b=d?Nc(d,0,d.length,a.sa(),b,c):null;c=b[2]-b[0];d=b[3]-b[1];c=Math.sqrt(c*c+d*d);d=this.f;d.beginPath();d.arc(b[0],b[1],c,0,2*Math.PI);this.a&&d.fill();this.b&&d.stroke()}""!==this.g&&Mi(this,a.td(),2,2)}};k.ud=function(a){this.Vb(a.f,a.g);this.Xb(a.a);this.Zb(a.Fa())};
-k.pc=function(a){switch(a.X()){case "Point":this.rc(a);break;case "LineString":this.kd(a);break;case "Polygon":this.Ze(a);break;case "MultiPoint":this.qc(a);break;case "MultiLineString":this.Xe(a);break;case "MultiPolygon":this.Ye(a);break;case "GeometryCollection":this.We(a);break;case "Circle":this.Rd(a)}};k.Ve=function(a,b){var c=(0,b.c)(a);c&&dc(this.c,c.D())&&(this.ud(b),this.pc(c))};k.We=function(a){a=a.f;var b,c;b=0;for(c=a.length;b<c;++b)this.pc(a[b])};
-k.rc=function(a){var b=a.ka();a=a.sa();this.i&&Li(this,b,b.length);""!==this.g&&Mi(this,b,b.length,a)};k.qc=function(a){var b=a.ka();a=a.sa();this.i&&Li(this,b,b.length);""!==this.g&&Mi(this,b,b.length,a)};k.kd=function(a){if(dc(this.c,a.D())){if(this.b){Oi(this,this.b);var b=this.f,c=a.ka();b.beginPath();Pi(this,c,0,c.length,a.sa(),!1);b.stroke()}""!==this.g&&(a=Ri(a),Mi(this,a,2,2))}};
-k.Xe=function(a){var b=a.D();if(dc(this.c,b)){if(this.b){Oi(this,this.b);var b=this.f,c=a.ka(),d=0,e=a.Eb(),f=a.sa();b.beginPath();var g,h;g=0;for(h=e.length;g<h;++g)d=Pi(this,c,d,e[g],f,!1);b.stroke()}""!==this.g&&(a=Si(a),Mi(this,a,a.length,2))}};k.Ze=function(a){if(dc(this.c,a.D())){if(this.b||this.a){this.a&&Ni(this,this.a);this.b&&Oi(this,this.b);var b=this.f;b.beginPath();Qi(this,a.Ob(),0,a.Eb(),a.sa());this.a&&b.fill();this.b&&b.stroke()}""!==this.g&&(a=td(a),Mi(this,a,2,2))}};
-k.Ye=function(a){if(dc(this.c,a.D())){if(this.b||this.a){this.a&&Ni(this,this.a);this.b&&Oi(this,this.b);var b=this.f,c=Ti(a),d=0,e=a.c,f=a.sa(),g,h;b.beginPath();g=0;for(h=e.length;g<h;++g)d=Qi(this,c,d,e[g],f);this.a&&b.fill();this.b&&b.stroke()}""!==this.g&&(a=Ui(a),Mi(this,a,a.length,2))}};function Ni(a,b){var c=a.f,d=a.W;d?d.fillStyle!=b.fillStyle&&(d.fillStyle=c.fillStyle=b.fillStyle):(c.fillStyle=b.fillStyle,a.W={fillStyle:b.fillStyle})}
-function Oi(a,b){var c=a.f,d=a.Qa;d?(d.lineCap!=b.lineCap&&(d.lineCap=c.lineCap=b.lineCap),hf&&!eb(d.lineDash,b.lineDash)&&c.setLineDash(d.lineDash=b.lineDash),d.lineJoin!=b.lineJoin&&(d.lineJoin=c.lineJoin=b.lineJoin),d.lineWidth!=b.lineWidth&&(d.lineWidth=c.lineWidth=b.lineWidth),d.miterLimit!=b.miterLimit&&(d.miterLimit=c.miterLimit=b.miterLimit),d.strokeStyle!=b.strokeStyle&&(d.strokeStyle=c.strokeStyle=b.strokeStyle)):(c.lineCap=b.lineCap,hf&&c.setLineDash(b.lineDash),c.lineJoin=b.lineJoin,c.lineWidth=
-b.lineWidth,c.miterLimit=b.miterLimit,c.strokeStyle=b.strokeStyle,a.Qa={lineCap:b.lineCap,lineDash:b.lineDash,lineJoin:b.lineJoin,lineWidth:b.lineWidth,miterLimit:b.miterLimit,strokeStyle:b.strokeStyle})}
-k.Vb=function(a,b){if(a){var c=a.b;this.a={fillStyle:Ce(c?c:ni)}}else this.a=null;if(b){var c=b.a,d=b.c,e=b.g,f=b.i,g=b.f,h=b.j;this.b={lineCap:void 0!==d?d:"round",lineDash:e?e:oi,lineJoin:void 0!==f?f:"round",lineWidth:this.C*(void 0!==g?g:1),miterLimit:void 0!==h?h:10,strokeStyle:Ce(c?c:pi)}}else this.b=null};
-k.Xb=function(a){if(a){var b=a.cc(),c=a.Tb(1),d=a.jc(),e=a.Gb();this.G=b[0];this.S=b[1];this.na=e[1];this.i=c;this.T=a.l;this.$a=d[0];this.fa=d[1];this.ra=a.T;this.Ib=a.o;this.j=a.c;this.oa=a.u;this.za=e[0]}else this.i=null};
-k.Zb=function(a){if(a){var b=a.b;b?(b=b.b,this.l={fillStyle:Ce(b?b:ni)}):this.l=null;var c=a.f;if(c){var b=c.a,d=c.c,e=c.g,f=c.i,g=c.f,c=c.j;this.s={lineCap:void 0!==d?d:"round",lineDash:e?e:oi,lineJoin:void 0!==f?f:"round",lineWidth:void 0!==g?g:1,miterLimit:void 0!==c?c:10,strokeStyle:Ce(b?b:pi)}}else this.s=null;var b=a.g,d=a.c,e=a.i,f=a.s,g=a.j,c=a.a,h=a.Fa(),l=a.l;a=a.o;this.P={font:void 0!==b?b:"10px sans-serif",textAlign:void 0!==l?l:"center",textBaseline:void 0!==a?a:"middle"};this.g=void 0!==
-h?h:"";this.Ka=void 0!==d?this.C*d:0;this.Aa=void 0!==e?this.C*e:0;this.La=void 0!==f?f:!1;this.ub=void 0!==g?g:0;this.o=this.C*(void 0!==c?c:1)}else this.g=""};function Vi(a){Pa.call(this);this.a=a}v(Vi,Pa);k=Vi.prototype;k.xa=da;k.Bc=function(a,b,c,d){a=Th(b.pixelToCoordinateTransform,a.slice());if(this.xa(a,b,gc,this))return c.call(d,this.a,null)};k.le=hc;k.Ue=function(a,b,c){return function(d,e){return Wi(a,b,d,e,function(a){c[d]||(c[d]={});c[d][a.ya.toString()]=a})}};k.Cm=function(a){a.target.U()===li&&Xi(this)};function Yi(a,b){var c=b.U();c!=li&&c!=ki&&w(b,"change",a.Cm,a);c==ji&&(b.load(),c=b.U());return c==li}
-function Xi(a){var b=a.a;b.zb()&&"ready"==b.hf()&&a.v()}function Zi(a,b){b.qh()&&a.postRenderFunctions.push(function(a,b,e){b=ea(a).toString();a.Kc(e.viewState.projection,e.usedTiles[b])}.bind(null,b))}function $i(a,b){if(b){var c,d,e;d=0;for(e=b.length;d<e;++d)c=b[d],a[ea(c).toString()]=c}}function aj(a,b){var c=b.S;void 0!==c&&("string"===typeof c?a.logos[c]="":c&&(ha("string"==typeof c.href,44),ha("string"==typeof c.src,45),a.logos[c.src]=c.href))}
-function bj(a,b,c,d){b=ea(b).toString();c=c.toString();b in a?c in a[b]?(a=a[b][c],d.ba<a.ba&&(a.ba=d.ba),d.da>a.da&&(a.da=d.da),d.ea<a.ea&&(a.ea=d.ea),d.ha>a.ha&&(a.ha=d.ha)):a[b][c]=d:(a[b]={},a[b][c]=d)}
-function cj(a,b,c,d,e,f,g,h,l,m){var n=ea(b).toString();n in a.wantedTiles||(a.wantedTiles[n]={});var p=a.wantedTiles[n];a=a.tileQueue;var q=c.minZoom,t,u,y,x,C,z;for(z=g;z>=q;--z)for(u=be(c,f,z,u),y=c.Ga(z),x=u.ba;x<=u.da;++x)for(C=u.ea;C<=u.ha;++C)g-z<=h?(t=b.vc(z,x,C,d,e),0==t.U()&&(p[t.Xa()]=!0,t.Xa()in a.a||a.c([t,n,ge(c,t.ya),y])),void 0!==l&&l.call(m,t)):b.Vf(z,x,C,e)};function dj(a){Vi.call(this,a);this.S=Oh()}v(dj,Vi);function ej(a,b,c){var d=b.pixelRatio,e=b.size[0]*d,f=b.size[1]*d,g=b.viewState.rotation,h=Wb(c),l=Vb(c),m=Tb(c);c=Sb(c);Th(b.coordinateToPixelTransform,h);Th(b.coordinateToPixelTransform,l);Th(b.coordinateToPixelTransform,m);Th(b.coordinateToPixelTransform,c);a.save();qi(a,-g,e/2,f/2);a.beginPath();a.moveTo(h[0]*d,h[1]*d);a.lineTo(l[0]*d,l[1]*d);a.lineTo(m[0]*d,m[1]*d);a.lineTo(c[0]*d,c[1]*d);a.clip();qi(a,g,e/2,f/2)}
-dj.prototype.i=function(a,b,c){fj(this,"precompose",c,a,void 0);var d=this.f?this.f.a():null;if(d){var e=b.extent,f=void 0!==e;f&&ej(c,a,e);var e=this.s,g=c.globalAlpha;c.globalAlpha=b.opacity;c.drawImage(d,0,0,+d.width,+d.height,Math.round(e[4]),Math.round(e[5]),Math.round(d.width*e[0]),Math.round(d.height*e[3]));c.globalAlpha=g;f&&c.restore()}gj(this,c,a)};
-function fj(a,b,c,d,e){var f=a.a;if(Na(f,b)){var g=d.size[0]*d.pixelRatio,h=d.size[1]*d.pixelRatio,l=d.viewState.rotation;qi(c,-l,g/2,h/2);a=void 0!==e?e:hj(a,d,0);f.b(new Ih(b,new Ki(c,d.pixelRatio,d.extent,a,d.viewState.rotation),d,c,null));qi(c,l,g/2,h/2)}}function gj(a,b,c,d){fj(a,"postcompose",b,c,d)}function hj(a,b,c){var d=b.viewState,e=b.pixelRatio,f=e/d.resolution;return Xh(a.S,e*b.size[0]/2,e*b.size[1]/2,f,-f,-d.rotation,-d.center[0]+c,-d.center[1])};function ij(){};function jj(a,b,c,d){this.ra=a;this.W=b;this.overlaps=d;this.f=0;this.resolution=c;this.na=this.S=null;this.a=[];this.coordinates=[];this.Qa=Oh();this.b=[];this.Z=[];this.fa=Oh();this.$a=Oh()}v(jj,Ji);
-function kj(a,b,c,d,e,f,g){var h=a.coordinates.length,l=a.af();g&&(c+=e);g=[b[c],b[c+1]];var m=[NaN,NaN],n=!0,p,q,t;for(p=c+e;p<d;p+=e)m[0]=b[p],m[1]=b[p+1],t=Jb(l,m),t!==q?(n&&(a.coordinates[h++]=g[0],a.coordinates[h++]=g[1]),a.coordinates[h++]=m[0],a.coordinates[h++]=m[1],n=!1):1===t?(a.coordinates[h++]=m[0],a.coordinates[h++]=m[1],n=!1):n=!0,g[0]=m[0],g[1]=m[1],q=t;if(f&&n||p===c+e)a.coordinates[h++]=g[0],a.coordinates[h++]=g[1];return h}
-function lj(a,b){a.S=[0,b,0];a.a.push(a.S);a.na=[0,b,0];a.b.push(a.na)}function mj(a,b,c){if(a.P){var d=Th(a.Qa,a.P.slice());b.translate(d[0],d[1]);b.rotate(c)}b.fill();a.P&&b.setTransform.apply(b,a.$a)}
-function nj(a,b,c,d,e,f,g,h,l){var m;eb(d,a.Qa)?m=a.Z:(m=Nc(a.coordinates,0,a.coordinates.length,2,d,a.Z),Sh(a.Qa,d));d=!xa(f);for(var n=0,p=g.length,q,t,u=a.fa,y=a.$a,x,C,z,K,V=0,Z=0,Ra=a.a!=g||a.overlaps?0:200;n<p;){var F=g[n],Ga,ra,Oa,Sa;switch(F[0]){case 0:q=F[1];d&&f[ea(q).toString()]||!q.V()?n=F[2]:void 0===l||dc(l,q.V().D())?++n:n=F[2]+1;break;case 1:V>Ra&&(mj(a,b,e),V=0);Z>Ra&&(b.stroke(),Z=0);V||Z||b.beginPath();++n;break;case 2:q=F[1];t=m[q];F=m[q+1];z=m[q+2]-t;q=m[q+3]-F;q=Math.sqrt(z*
-z+q*q);b.moveTo(t+q,F);b.arc(t,F,q,0,2*Math.PI,!0);++n;break;case 3:b.closePath();++n;break;case 4:q=F[1];t=F[2];Ga=F[3];ra=F[4]*c;Oa=F[5]*c;var Nb=F[6],Ub=F[7],oc=F[8],Gc=F[9];Sa=F[10];z=F[11];K=F[12];var pc=F[13],oe=F[14];for(Sa&&(z+=e);q<t;q+=2){F=m[q]-ra;Sa=m[q+1]-Oa;pc&&(F=Math.round(F),Sa=Math.round(Sa));if(1!=K||0!==z){var pe=F+ra,bd=Sa+Oa;Xh(u,pe,bd,K,K,z,-pe,-bd);b.setTransform.apply(b,u)}pe=b.globalAlpha;1!=Ub&&(b.globalAlpha=pe*Ub);var bd=oe+oc>Ga.width?Ga.width-oc:oe,Rn=Nb+Gc>Ga.height?
-Ga.height-Gc:Nb;b.drawImage(Ga,oc,Gc,bd,Rn,F,Sa,bd*c,Rn*c);1!=Ub&&(b.globalAlpha=pe);1==K&&0===z||b.setTransform.apply(b,y)}++n;break;case 5:q=F[1];t=F[2];Oa=F[3];Nb=F[4]*c;Ub=F[5]*c;z=F[6];K=F[7]*c;Ga=F[8];ra=F[9];for((Sa=F[10])&&(z+=e);q<t;q+=2){F=m[q]+Nb;Sa=m[q+1]+Ub;if(1!=K||0!==z)Xh(u,F,Sa,K,K,z,-F,-Sa),b.setTransform.apply(b,u);oc=Oa.split("\n");Gc=oc.length;1<Gc?(pc=Math.round(1.5*b.measureText("M").width),Sa-=(Gc-1)/2*pc):pc=0;for(oe=0;oe<Gc;oe++)pe=oc[oe],ra&&b.strokeText(pe,F,Sa),Ga&&b.fillText(pe,
-F,Sa),Sa+=pc;1==K&&0===z||b.setTransform.apply(b,y)}++n;break;case 6:if(void 0!==h&&(q=F[1],q=h(q)))return q;++n;break;case 7:Ra?V++:mj(a,b,e);++n;break;case 8:q=F[1];t=F[2];F=m[q];Sa=m[q+1];z=F+.5|0;K=Sa+.5|0;if(z!==x||K!==C)b.moveTo(F,Sa),x=z,C=K;for(q+=2;q<t;q+=2)if(F=m[q],Sa=m[q+1],z=F+.5|0,K=Sa+.5|0,q==t-2||z!==x||K!==C)b.lineTo(F,Sa),x=z,C=K;++n;break;case 9:a.P=F[2];V&&(mj(a,b,e),V=0);b.fillStyle=F[1];++n;break;case 10:x=void 0!==F[7]?F[7]:!0;C=F[2];Z&&(b.stroke(),Z=0);b.strokeStyle=F[1];b.lineWidth=
-x?C*c:C;b.lineCap=F[3];b.lineJoin=F[4];b.miterLimit=F[5];hf&&b.setLineDash(F[6]);C=x=NaN;++n;break;case 11:b.font=F[1];b.textAlign=F[2];b.textBaseline=F[3];++n;break;case 12:Ra?Z++:b.stroke();++n;break;default:++n}}V&&mj(a,b,e);Z&&b.stroke()}jj.prototype.Za=function(a,b,c,d,e){nj(this,a,b,c,d,e,this.a,void 0,void 0)};
-function oj(a){var b=a.b;b.reverse();var c,d=b.length,e,f,g=-1;for(c=0;c<d;++c)if(e=b[c],f=e[0],6==f)g=c;else if(0==f){e[2]=c;e=a.b;for(f=c;g<f;){var h=e[g];e[g]=e[f];e[f]=h;++g;--f}g=-1}}function pj(a,b){a.S[2]=a.a.length;a.S=null;a.na[2]=a.b.length;a.na=null;var c=[6,b];a.a.push(c);a.b.push(c)}jj.prototype.ke=da;jj.prototype.af=function(){return this.W};function qj(a,b,c,d){jj.call(this,a,b,c,d);this.j=this.za=null;this.G=this.B=this.C=this.u=this.T=this.s=this.o=this.l=this.i=this.c=this.g=void 0}v(qj,jj);
-qj.prototype.rc=function(a,b){if(this.j){lj(this,b);var c=a.ka(),d=this.coordinates.length,c=kj(this,c,0,c.length,a.sa(),!1,!1);this.a.push([4,d,c,this.j,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]);this.b.push([4,d,c,this.za,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]);pj(this,b)}};
-qj.prototype.qc=function(a,b){if(this.j){lj(this,b);var c=a.ka(),d=this.coordinates.length,c=kj(this,c,0,c.length,a.sa(),!1,!1);this.a.push([4,d,c,this.j,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]);this.b.push([4,d,c,this.za,this.g,this.c,this.i,this.l,this.o,this.s,this.T,this.u,this.C,this.B,this.G]);pj(this,b)}};qj.prototype.ke=function(){oj(this);this.c=this.g=void 0;this.j=this.za=null;this.G=this.B=this.u=this.T=this.s=this.o=this.l=this.C=this.i=void 0};
-qj.prototype.Xb=function(a){var b=a.cc(),c=a.Gb(),d=a.pe(1),e=a.Tb(1),f=a.jc();this.g=b[0];this.c=b[1];this.za=d;this.j=e;this.i=c[1];this.l=a.l;this.o=f[0];this.s=f[1];this.T=a.T;this.u=a.o;this.C=a.c;this.B=a.u;this.G=c[0]};function rj(a,b,c,d){jj.call(this,a,b,c,d);this.c=null;this.g={hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,nf:0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}v(rj,jj);function sj(a,b,c,d,e){var f=a.coordinates.length;b=kj(a,b,c,d,e,!1,!1);f=[8,f,b];a.a.push(f);a.b.push(f);return d}k=rj.prototype;k.af=function(){this.c||(this.c=Eb(this.W),0<this.f&&Db(this.c,this.resolution*(this.f+1)/2,this.c));return this.c};
-function tj(a){var b=a.g,c=b.strokeStyle,d=b.lineCap,e=b.lineDash,f=b.lineJoin,g=b.lineWidth,h=b.miterLimit;b.hd==c&&b.cd==d&&eb(b.dd,e)&&b.ed==f&&b.fd==g&&b.gd==h||(b.nf!=a.coordinates.length&&(a.a.push([12]),b.nf=a.coordinates.length),a.a.push([10,c,g,d,f,h,e],[1]),b.hd=c,b.cd=d,b.dd=e,b.ed=f,b.fd=g,b.gd=h)}
-k.kd=function(a,b){var c=this.g,d=c.lineWidth;void 0!==c.strokeStyle&&void 0!==d&&(tj(this),lj(this,b),this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]),c=a.ka(),sj(this,c,0,c.length,a.sa()),this.b.push([12]),pj(this,b))};
-k.Xe=function(a,b){var c=this.g,d=c.lineWidth;if(void 0!==c.strokeStyle&&void 0!==d){tj(this);lj(this,b);this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash],[1]);var c=a.Eb(),d=a.ka(),e=a.sa(),f=0,g,h;g=0;for(h=c.length;g<h;++g)f=sj(this,d,f,c[g],e);this.b.push([12]);pj(this,b)}};k.ke=function(){this.g.nf!=this.coordinates.length&&this.a.push([12]);oj(this);this.g=null};
-k.Vb=function(a,b){var c=b.a;this.g.strokeStyle=Ce(c?c:pi);c=b.c;this.g.lineCap=void 0!==c?c:"round";c=b.g;this.g.lineDash=c?c:oi;c=b.i;this.g.lineJoin=void 0!==c?c:"round";c=b.f;this.g.lineWidth=void 0!==c?c:1;c=b.j;this.g.miterLimit=void 0!==c?c:10;this.g.lineWidth>this.f&&(this.f=this.g.lineWidth,this.c=null)};function uj(a,b,c,d){jj.call(this,a,b,c,d);this.c=null;this.g={og:void 0,hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}v(uj,jj);
-function vj(a,b,c,d,e){var f=a.g,g=void 0!==f.fillStyle,f=void 0!=f.strokeStyle,h=d.length,l=[1];a.a.push(l);a.b.push(l);for(l=0;l<h;++l){var m=d[l],n=a.coordinates.length;c=kj(a,b,c,m,e,!0,!f);c=[8,n,c];a.a.push(c);a.b.push(c);f&&(c=[3],a.a.push(c),a.b.push(c));c=m}b=[7];a.b.push(b);g&&a.a.push(b);f&&(g=[12],a.a.push(g),a.b.push(g));return c}k=uj.prototype;
-k.Rd=function(a,b){var c=this.g,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){wj(this,a);lj(this,b);this.b.push([9,Ae(ni)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var e=a.ka(),d=this.coordinates.length;kj(this,e,0,e.length,a.sa(),!1,!1);e=[1];d=[2,d];this.a.push(e,d);this.b.push(e,d);d=[7];this.b.push(d);void 0!==c.fillStyle&&this.a.push(d);void 0!==c.strokeStyle&&(c=[12],this.a.push(c),this.b.push(c));pj(this,b)}};
-k.Ze=function(a,b){var c=this.g;wj(this,a);lj(this,b);this.b.push([9,Ae(ni)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.Eb(),d=a.Ob();vj(this,d,0,c,a.sa());pj(this,b)};
-k.Ye=function(a,b){var c=this.g,d=c.strokeStyle;if(void 0!==c.fillStyle||void 0!==d){wj(this,a);lj(this,b);this.b.push([9,Ae(ni)]);void 0!==c.strokeStyle&&this.b.push([10,c.strokeStyle,c.lineWidth,c.lineCap,c.lineJoin,c.miterLimit,c.lineDash]);var c=a.c,d=Ti(a),e=a.sa(),f=0,g,h;g=0;for(h=c.length;g<h;++g)f=vj(this,d,f,c[g],e);pj(this,b)}};k.ke=function(){oj(this);this.g=null;var a=this.ra;if(0!==a){var b=this.coordinates,c,d;c=0;for(d=b.length;c<d;++c)b[c]=a*Math.round(b[c]/a)}};
-k.af=function(){this.c||(this.c=Eb(this.W),0<this.f&&Db(this.c,this.resolution*(this.f+1)/2,this.c));return this.c};
-k.Vb=function(a,b){var c=this.g;if(a){var d=a.b;c.fillStyle=Ce(d?d:ni)}else c.fillStyle=void 0;b?(d=b.a,c.strokeStyle=Ce(d?d:pi),d=b.c,c.lineCap=void 0!==d?d:"round",d=b.g,c.lineDash=d?d.slice():oi,d=b.i,c.lineJoin=void 0!==d?d:"round",d=b.f,c.lineWidth=void 0!==d?d:1,d=b.j,c.miterLimit=void 0!==d?d:10,c.lineWidth>this.f&&(this.f=c.lineWidth,this.c=null)):(c.strokeStyle=void 0,c.lineCap=void 0,c.lineDash=null,c.lineJoin=void 0,c.lineWidth=void 0,c.miterLimit=void 0)};
-function wj(a,b){var c=a.g,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,l=c.lineWidth,m=c.miterLimit;if(void 0!==d&&("string"!==typeof d||c.og!=d)){var n=[9,d];"string"!==typeof d&&(d=b.D(),n.push([d[0],d[3]]));a.a.push(n);c.og=c.fillStyle}void 0===e||c.hd==e&&c.cd==f&&c.dd==g&&c.ed==h&&c.fd==l&&c.gd==m||(a.a.push([10,e,l,f,h,m,g]),c.hd=e,c.cd=f,c.dd=g,c.ed=h,c.fd=l,c.gd=m)};function xj(a,b,c,d){jj.call(this,a,b,c,d);this.G=this.B=this.C=null;this.j="";this.o=this.l=0;this.s=void 0;this.u=this.T=0;this.i=this.c=this.g=null}v(xj,jj);
-function yj(a,b,c,d,e){if(""!==a.j&&a.i&&(a.g||a.c)){if(a.g){var f=a.g,g=a.C;if(!g||g.fillStyle!=f.fillStyle){var h=[9,f.fillStyle];a.a.push(h);a.b.push(h);g?g.fillStyle=f.fillStyle:a.C={fillStyle:f.fillStyle}}}a.c&&(f=a.c,g=a.B,g&&g.lineCap==f.lineCap&&g.lineDash==f.lineDash&&g.lineJoin==f.lineJoin&&g.lineWidth==f.lineWidth&&g.miterLimit==f.miterLimit&&g.strokeStyle==f.strokeStyle||(h=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit,f.lineDash,!1],a.a.push(h),a.b.push(h),g?(g.lineCap=
-f.lineCap,g.lineDash=f.lineDash,g.lineJoin=f.lineJoin,g.lineWidth=f.lineWidth,g.miterLimit=f.miterLimit,g.strokeStyle=f.strokeStyle):a.B={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=a.i;g=a.G;g&&g.font==f.font&&g.textAlign==f.textAlign&&g.textBaseline==f.textBaseline||(h=[11,f.font,f.textAlign,f.textBaseline],a.a.push(h),a.b.push(h),g?(g.font=f.font,g.textAlign=f.textAlign,g.textBaseline=f.textBaseline):a.G=
-{font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});lj(a,e);f=a.coordinates.length;b=kj(a,b,0,c,d,!1,!1);b=[5,f,b,a.j,a.l,a.o,a.T,a.u,!!a.g,!!a.c,a.s];a.a.push(b);a.b.push(b);pj(a,e)}}
-xj.prototype.Zb=function(a){if(a){var b=a.b;b?(b=b.b,b=Ce(b?b:ni),this.g?this.g.fillStyle=b:this.g={fillStyle:b}):this.g=null;var c=a.f;if(c){var b=c.a,d=c.c,e=c.g,f=c.i,g=c.f,c=c.j,d=void 0!==d?d:"round",e=e?e.slice():oi,f=void 0!==f?f:"round",g=void 0!==g?g:1,c=void 0!==c?c:10,b=Ce(b?b:pi);if(this.c){var h=this.c;h.lineCap=d;h.lineDash=e;h.lineJoin=f;h.lineWidth=g;h.miterLimit=c;h.strokeStyle=b}else this.c={lineCap:d,lineDash:e,lineJoin:f,lineWidth:g,miterLimit:c,strokeStyle:b}}else this.c=null;
-var l=a.g,b=a.c,d=a.i,e=a.s,g=a.j,c=a.a,f=a.Fa(),h=a.l,m=a.o;a=void 0!==l?l:"10px sans-serif";h=void 0!==h?h:"center";m=void 0!==m?m:"middle";this.i?(l=this.i,l.font=a,l.textAlign=h,l.textBaseline=m):this.i={font:a,textAlign:h,textBaseline:m};this.j=void 0!==f?f:"";this.l=void 0!==b?b:0;this.o=void 0!==d?d:0;this.s=void 0!==e?e:!1;this.T=void 0!==g?g:0;this.u=void 0!==c?c:1}else this.j=""};var zj=["Polygon","LineString","Image","Text"];function Aj(a,b,c,d,e){this.s=a;this.f=b;this.l=d;this.o=c;this.c=e;this.a={};this.i=De(1,1);this.j=Oh()}v(Aj,ij);function Bj(a){for(var b in a.a){var c=a.a[b],d;for(d in c)c[d].ke()}}Aj.prototype.xa=function(a,b,c,d,e){var f=Xh(this.j,.5,.5,1/b,-1/b,-c,-a[0],-a[1]),g=this.i;g.clearRect(0,0,1,1);var h;void 0!==this.c&&(h=Bb(),Cb(h,a),Db(h,b*this.c,h));return Cj(this,g,f,c,d,function(a){if(0<g.getImageData(0,0,1,1).data[3]){if(a=e(a))return a;g.clearRect(0,0,1,1)}},h)};
-Aj.prototype.b=function(a,b){var c=void 0!==a?a.toString():"0",d=this.a[c];void 0===d&&(d={},this.a[c]=d);c=d[b];void 0===c&&(c=new Dj[b](this.s,this.f,this.o,this.l),d[b]=c);return c};Aj.prototype.g=function(){return xa(this.a)};
-Aj.prototype.Za=function(a,b,c,d,e,f){var g=Object.keys(this.a).map(Number);g.sort(Ya);var h=this.f,l=h[0],m=h[1],n=h[2],h=h[3],l=[l,m,l,h,n,h,n,m];Nc(l,0,8,2,c,l);a.save();a.beginPath();a.moveTo(l[0],l[1]);a.lineTo(l[2],l[3]);a.lineTo(l[4],l[5]);a.lineTo(l[6],l[7]);a.clip();f=f?f:zj;for(var p,q,l=0,m=g.length;l<m;++l)for(p=this.a[g[l].toString()],n=0,h=f.length;n<h;++n)q=p[f[n]],void 0!==q&&q.Za(a,b,c,d,e);a.restore()};
-function Cj(a,b,c,d,e,f,g){var h=Object.keys(a.a).map(Number);h.sort(function(a,b){return b-a});var l,m,n,p,q;l=0;for(m=h.length;l<m;++l)for(p=a.a[h[l].toString()],n=zj.length-1;0<=n;--n)if(q=p[zj[n]],void 0!==q&&(q=nj(q,b,1,c,d,e,q.b,f,g)))return q}var Dj={Image:qj,LineString:rj,Polygon:uj,Text:xj};function Ej(a,b){return ea(a)-ea(b)}function Fj(a,b){var c=.5*a/b;return c*c}function Gj(a,b,c,d,e,f){var g=!1,h,l;if(h=c.a)l=h.vd(),l==li||l==ki?h.Uf(e,f):(l==ji&&h.load(),h.pf(e,f),g=!0);if(e=(0,c.c)(b))d=e.pd(d),(0,Hj[d.X()])(a,d,c,b);return g}
-var Hj={Point:function(a,b,c,d){var e=c.a;if(e){if(e.vd()!=li)return;var f=a.b(c.b,"Image");f.Xb(e);f.rc(b,d)}if(e=c.Fa())a=a.b(c.b,"Text"),a.Zb(e),yj(a,b.ka(),2,2,d)},LineString:function(a,b,c,d){var e=c.g;if(e){var f=a.b(c.b,"LineString");f.Vb(null,e);f.kd(b,d)}if(e=c.Fa())a=a.b(c.b,"Text"),a.Zb(e),yj(a,Ri(b),2,2,d)},Polygon:function(a,b,c,d){var e=c.f,f=c.g;if(e||f){var g=a.b(c.b,"Polygon");g.Vb(e,f);g.Ze(b,d)}if(e=c.Fa())a=a.b(c.b,"Text"),a.Zb(e),yj(a,td(b),2,2,d)},MultiPoint:function(a,b,c,d){var e=
-c.a;if(e){if(e.vd()!=li)return;var f=a.b(c.b,"Image");f.Xb(e);f.qc(b,d)}if(e=c.Fa())a=a.b(c.b,"Text"),a.Zb(e),c=b.ka(),yj(a,c,c.length,b.sa(),d)},MultiLineString:function(a,b,c,d){var e=c.g;if(e){var f=a.b(c.b,"LineString");f.Vb(null,e);f.Xe(b,d)}if(e=c.Fa())a=a.b(c.b,"Text"),a.Zb(e),b=Si(b),yj(a,b,b.length,2,d)},MultiPolygon:function(a,b,c,d){var e=c.f,f=c.g;if(f||e){var g=a.b(c.b,"Polygon");g.Vb(e,f);g.Ye(b,d)}if(e=c.Fa())a=a.b(c.b,"Text"),a.Zb(e),b=Ui(b),yj(a,b,b.length,2,d)},GeometryCollection:function(a,
-b,c,d){b=b.f;var e,f;e=0;for(f=b.length;e<f;++e)(0,Hj[b[e].X()])(a,b[e],c,d)},Circle:function(a,b,c,d){var e=c.f,f=c.g;if(e||f){var g=a.b(c.b,"Polygon");g.Vb(e,f);g.Rd(b,d)}if(e=c.Fa())a=a.b(c.b,"Text"),a.Zb(e),yj(a,b.td(),2,2,d)}};function Ij(a,b,c,d,e,f){this.c=void 0!==f?f:null;gi.call(this,a,b,c,void 0!==f?ji:li,d);this.g=e}v(Ij,gi);Ij.prototype.i=function(a){this.state=a?ki:li;hi(this)};Ij.prototype.load=function(){this.state==ji&&(this.state=mi,hi(this),this.c(this.i.bind(this)))};Ij.prototype.a=function(){return this.g};var Jj,Kj=-1<navigator.userAgent.indexOf("OPR"),Lj=-1<navigator.userAgent.indexOf("Edge");Jj=!(!navigator.userAgent.match("CriOS")&&"chrome"in window&&"Google Inc."===navigator.vendor&&0==Kj&&0==Lj);function Mj(a,b,c,d){var e=Kc(c,b,a);c=b.getPointResolution(d,c);b=b.dc();void 0!==b&&(c*=b);b=a.dc();void 0!==b&&(c/=b);a=a.getPointResolution(c,e)/c;isFinite(a)&&0<a&&(c/=a);return c}function Nj(a,b,c,d){a=c-a;b=d-b;var e=Math.sqrt(a*a+b*b);return[Math.round(c+a/e),Math.round(d+b/e)]}
-function Oj(a,b,c,d,e,f,g,h,l,m,n){var p=De(Math.round(c*a),Math.round(c*b));if(0===l.length)return p.canvas;p.scale(c,c);var q=Bb();l.forEach(function(a){Qb(q,a.extent)});var t=De(Math.round(c*Zb(q)/d),Math.round(c*$b(q)/d)),u=c/d;l.forEach(function(a){t.drawImage(a.image,m,m,a.image.width-2*m,a.image.height-2*m,(a.extent[0]-q[0])*u,-(a.extent[3]-q[3])*u,Zb(a.extent)*u,$b(a.extent)*u)});var y=Wb(g);h.f.forEach(function(a){var b=a.source,e=a.target,g=b[1][0],h=b[1][1],l=b[2][0],m=b[2][1];a=(e[0][0]-
-y[0])/f;var n=-(e[0][1]-y[1])/f,u=(e[1][0]-y[0])/f,ra=-(e[1][1]-y[1])/f,Oa=(e[2][0]-y[0])/f,Sa=-(e[2][1]-y[1])/f,e=b[0][0],b=b[0][1],g=g-e,h=h-b,l=l-e,m=m-b;a:{g=[[g,h,0,0,u-a],[l,m,0,0,Oa-a],[0,0,g,h,ra-n],[0,0,l,m,Sa-n]];h=g.length;for(l=0;l<h;l++){for(var m=l,Nb=Math.abs(g[l][l]),Ub=l+1;Ub<h;Ub++){var oc=Math.abs(g[Ub][l]);oc>Nb&&(Nb=oc,m=Ub)}if(0===Nb){g=null;break a}Nb=g[m];g[m]=g[l];g[l]=Nb;for(m=l+1;m<h;m++)for(Nb=-g[m][l]/g[l][l],Ub=l;Ub<h+1;Ub++)g[m][Ub]=l==Ub?0:g[m][Ub]+Nb*g[l][Ub]}l=Array(h);
-for(m=h-1;0<=m;m--)for(l[m]=g[m][h]/g[m][m],Nb=m-1;0<=Nb;Nb--)g[Nb][h]-=g[Nb][m]*l[m];g=l}g&&(p.save(),p.beginPath(),Jj?(l=(a+u+Oa)/3,m=(n+ra+Sa)/3,h=Nj(l,m,a,n),u=Nj(l,m,u,ra),Oa=Nj(l,m,Oa,Sa),p.moveTo(u[0],u[1]),p.lineTo(h[0],h[1]),p.lineTo(Oa[0],Oa[1])):(p.moveTo(u,ra),p.lineTo(a,n),p.lineTo(Oa,Sa)),p.clip(),p.transform(g[0],g[2],g[1],g[3],a,n),p.translate(q[0]-e,q[3]-b),p.scale(d/c,-d/c),p.drawImage(t.canvas,0,0),p.restore())});n&&(p.save(),p.strokeStyle="black",p.lineWidth=1,h.f.forEach(function(a){var b=
-a.target;a=(b[0][0]-y[0])/f;var c=-(b[0][1]-y[1])/f,d=(b[1][0]-y[0])/f,e=-(b[1][1]-y[1])/f,g=(b[2][0]-y[0])/f,b=-(b[2][1]-y[1])/f;p.beginPath();p.moveTo(d,e);p.lineTo(a,c);p.lineTo(g,b);p.closePath();p.stroke()}),p.restore());return p.canvas};function Pj(a,b,c,d,e){this.g=a;this.c=b;var f={},g=Ic(this.c,this.g);this.a=function(a){var b=a[0]+"/"+a[1];f[b]||(f[b]=g(a));return f[b]};this.i=d;this.s=e*e;this.f=[];this.l=!1;this.o=this.g.a&&!!d&&!!this.g.D()&&Zb(d)==Zb(this.g.D());this.b=this.g.D()?Zb(this.g.D()):null;this.j=this.c.D()?Zb(this.c.D()):null;a=Wb(c);b=Vb(c);d=Tb(c);c=Sb(c);e=this.a(a);var h=this.a(b),l=this.a(d),m=this.a(c);Qj(this,a,b,d,c,e,h,l,m,10);if(this.l){var n=Infinity;this.f.forEach(function(a){n=Math.min(n,a.source[0][0],
-a.source[1][0],a.source[2][0])});this.f.forEach(function(a){if(Math.max(a.source[0][0],a.source[1][0],a.source[2][0])-n>this.b/2){var b=[[a.source[0][0],a.source[0][1]],[a.source[1][0],a.source[1][1]],[a.source[2][0],a.source[2][1]]];b[0][0]-n>this.b/2&&(b[0][0]-=this.b);b[1][0]-n>this.b/2&&(b[1][0]-=this.b);b[2][0]-n>this.b/2&&(b[2][0]-=this.b);Math.max(b[0][0],b[1][0],b[2][0])-Math.min(b[0][0],b[1][0],b[2][0])<this.b/2&&(a.source=b)}},this)}f={}}
-function Qj(a,b,c,d,e,f,g,h,l,m){var n=Ab([f,g,h,l]),p=a.b?Zb(n)/a.b:null,q=a.b,t=a.g.a&&.5<p&&1>p,u=!1;if(0<m){if(a.c.g&&a.j)var y=Ab([b,c,d,e]),u=u|.25<Zb(y)/a.j;!t&&a.g.g&&p&&(u|=.25<p)}if(u||!a.i||dc(n,a.i)){if(!(u||isFinite(f[0])&&isFinite(f[1])&&isFinite(g[0])&&isFinite(g[1])&&isFinite(h[0])&&isFinite(h[1])&&isFinite(l[0])&&isFinite(l[1])))if(0<m)u=!0;else return;if(0<m&&(u||(n=a.a([(b[0]+d[0])/2,(b[1]+d[1])/2]),q=t?(oa(f[0],q)+oa(h[0],q))/2-oa(n[0],q):(f[0]+h[0])/2-n[0],n=(f[1]+h[1])/2-n[1],
-u=q*q+n*n>a.s),u)){Math.abs(b[0]-d[0])<=Math.abs(b[1]-d[1])?(t=[(c[0]+d[0])/2,(c[1]+d[1])/2],q=a.a(t),n=[(e[0]+b[0])/2,(e[1]+b[1])/2],p=a.a(n),Qj(a,b,c,t,n,f,g,q,p,m-1),Qj(a,n,t,d,e,p,q,h,l,m-1)):(t=[(b[0]+c[0])/2,(b[1]+c[1])/2],q=a.a(t),n=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=a.a(n),Qj(a,b,t,n,e,f,q,p,l,m-1),Qj(a,t,c,d,n,q,g,h,p,m-1));return}if(t){if(!a.o)return;a.l=!0}a.f.push({source:[f,h,l],target:[b,d,e]});a.f.push({source:[f,g,h],target:[b,c,d]})}}
-function Rj(a){var b=Bb();a.f.forEach(function(a){a=a.source;Cb(b,a[0]);Cb(b,a[1]);Cb(b,a[2])});return b};function Sj(a,b,c,d,e,f){this.T=b;this.s=a.D();var g=b.D(),h=g?cc(c,g):c,g=Mj(a,b,ac(h),d);this.l=new Pj(a,b,h,this.s,.5*g);this.c=d;this.g=c;a=Rj(this.l);this.o=(this.sb=f(a,g,e))?this.sb.f:1;this.Cd=this.i=null;e=li;f=[];this.sb&&(e=ji,f=this.sb.j);gi.call(this,c,d,this.o,e,f)}v(Sj,gi);Sj.prototype.la=function(){this.state==mi&&(za(this.Cd),this.Cd=null);gi.prototype.la.call(this)};Sj.prototype.a=function(){return this.i};
-Sj.prototype.Bd=function(){var a=this.sb.U();a==li&&(this.i=Oj(Zb(this.g)/this.c,$b(this.g)/this.c,this.o,this.sb.resolution,0,this.c,this.g,this.l,[{extent:this.sb.D(),image:this.sb.a()}],0));this.state=a;hi(this)};Sj.prototype.load=function(){if(this.state==ji){this.state=mi;hi(this);var a=this.sb.U();a==li||a==ki?this.Bd():(this.Cd=w(this.sb,"change",function(){var a=this.sb.U();if(a==li||a==ki)za(this.Cd),this.Cd=null,this.Bd()},this),this.sb.load())}};function Tj(a){Ua.call(this);this.f=qc(a.projection);this.j=Uj(a.attributions);this.S=a.logo;this.Ka=void 0!==a.state?a.state:"ready";this.G=void 0!==a.wrapX?a.wrapX:!1}v(Tj,Ua);function Uj(a){if("string"===typeof a)return[new le({html:a})];if(a instanceof le)return[a];if(Array.isArray(a)){for(var b=a.length,c=Array(b),d=0;d<b;d++){var e=a[d];c[d]="string"===typeof e?new le({html:e}):e}return c}return null}k=Tj.prototype;k.xa=da;k.va=function(){return this.j};k.ua=function(){return this.S};k.wa=function(){return this.f};
-k.U=function(){return this.Ka};k.ta=function(){this.v()};k.qa=function(a){this.j=Uj(a);this.v()};function Vj(a,b){a.Ka=b;a.v()};function Wj(a){Tj.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state});this.C=void 0!==a.resolutions?a.resolutions:null;this.a=null;this.ra=0}v(Wj,Tj);function Xj(a,b){a.C&&(b=a.C[$a(a.C,b,0)]);return b}
-Wj.prototype.W=function(a,b,c,d){var e=this.f;if(e&&d&&!Hc(e,d)){if(this.a){if(this.ra==this.g&&Hc(this.a.T,d)&&this.a.resolution==b&&this.a.f==c&&Pb(this.a.D(),a))return this.a;Ja(this.a);this.a=null}this.a=new Sj(e,d,a,b,c,function(a,b,c){return this.Lc(a,b,c,e)}.bind(this));this.ra=this.g;return this.a}e&&(d=e);return this.Lc(a,b,c,d)};Wj.prototype.o=function(a){a=a.target;switch(a.U()){case mi:this.b(new Yj(Zj,a));break;case li:this.b(new Yj(ak,a));break;case ki:this.b(new Yj(bk,a))}};
-function ck(a,b){a.a().src=b}function Yj(a,b){Ka.call(this,a);this.image=b}v(Yj,Ka);var Zj="imageloadstart",ak="imageloadend",bk="imageloaderror";function dk(a){Wj.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions,state:a.state});this.fa=a.canvasFunction;this.P=null;this.Z=0;this.oa=void 0!==a.ratio?a.ratio:1.5}v(dk,Wj);dk.prototype.Lc=function(a,b,c,d){b=Xj(this,b);var e=this.P;if(e&&this.Z==this.g&&e.resolution==b&&e.f==c&&Ib(e.D(),a))return e;a=a.slice();ec(a,this.oa);(d=this.fa(a,b,c,[Zb(a)/b*c,$b(a)/b*c],d))&&(e=new Ij(a,b,c,this.j,d));this.P=e;this.Z=this.g;return e};function ek(a){this.c=a.source;this.La=Oh();this.i=De();this.l=[0,0];this.Aa=void 0==a.renderBuffer?100:a.renderBuffer;this.u=null;dk.call(this,{attributions:a.attributions,canvasFunction:this.rj.bind(this),logo:a.logo,projection:a.projection,ratio:a.ratio,resolutions:a.resolutions,state:this.c.U()});this.B=null;this.s=void 0;this.nh(a.style);w(this.c,"change",this.Tm,this)}v(ek,dk);k=ek.prototype;
-k.rj=function(a,b,c,d,e){var f=new Aj(.5*b/c,a,b,this.c.Aa,this.Aa);this.c.rd(a,b,e);var g=!1;this.c.Kb(a,function(a){var d;if(!(d=g)){var e;(d=a.zc())?e=d.call(a,b):this.s&&(e=this.s(a,b));if(e){var n,p=!1;Array.isArray(e)||(e=[e]);d=0;for(n=e.length;d<n;++d)p=Gj(f,a,e[d],Fj(b,c),this.Sm,this)||p;d=p}else d=!1}g=d},this);Bj(f);if(g)return null;this.l[0]!=d[0]||this.l[1]!=d[1]?(this.i.canvas.width=d[0],this.i.canvas.height=d[1],this.l[0]=d[0],this.l[1]=d[1]):this.i.clearRect(0,0,d[0],d[1]);a=fk(this,
-ac(a),b,c,d);f.Za(this.i,c,a,0,{});this.u=f;return this.i.canvas};k.xa=function(a,b,c,d,e){if(this.u){var f={};return this.u.xa(a,b,0,d,function(a){var b=ea(a).toString();if(!(b in f))return f[b]=!0,e(a)})}};k.Pm=function(){return this.c};k.Qm=function(){return this.B};k.Rm=function(){return this.s};function fk(a,b,c,d,e){c=d/c;return Xh(a.La,e[0]/2,e[1]/2,c,-c,0,-b[0],-b[1])}k.Sm=function(){this.v()};k.Tm=function(){Vj(this,this.c.U())};
-k.nh=function(a){this.B=void 0!==a?a:Ci;this.s=a?Ai(this.B):void 0;this.v()};function gk(a){dj.call(this,a);this.f=null;this.s=Oh();this.c=this.l=null}v(gk,dj);gk.prototype.xa=function(a,b,c,d){var e=this.a;return e.ga().xa(a,b.viewState.resolution,b.viewState.rotation,b.skippedFeatureUids,function(a){return c.call(d,a,e)})};
-gk.prototype.Bc=function(a,b,c,d){if(this.f&&this.f.a())if(this.a.ga()instanceof ek){if(a=Th(b.pixelToCoordinateTransform,a.slice()),this.xa(a,b,gc,this))return c.call(d,this.a,null)}else if(this.l||(this.l=Yh(this.s.slice())),b=Th(this.l,a.slice()),this.c||(this.c=De(1,1)),this.c.clearRect(0,0,1,1),this.c.drawImage(this.f?this.f.a():null,b[0],b[1],1,1,0,0,1,1),b=this.c.getImageData(0,0,1,1).data,0<b[3])return c.call(d,this.a,b)};
-gk.prototype.j=function(a,b){var c=a.pixelRatio,d=a.viewState,e=d.center,f=d.resolution,g=this.a.ga(),h=a.viewHints,l=a.extent;void 0!==b.extent&&(l=cc(l,b.extent));h[0]||h[1]||Yb(l)||(d=g.W(l,f,c,d.projection))&&Yi(this,d)&&(this.f=d);if(this.f){var d=this.f,h=d.D(),l=d.resolution,m=d.f,f=c*l/(f*m),n=Ph(this.s);Wh(n,c*a.size[0]/2,c*a.size[1]/2);Vh(n,f,f);Wh(n,m*(h[0]-e[0])/l,m*(e[1]-h[3])/l);this.l=null;$i(a.attributions,d.j);aj(a,g)}return!!this.f};function hk(a){dj.call(this,a);this.c=De();this.l=[];this.o=Bb();this.P=[0,0,0];this.G=Oh();this.B=0}v(hk,dj);hk.prototype.i=function(a,b,c){var d=hj(this,a,0);fj(this,"precompose",c,a,d);ik(this,c,a,b);gj(this,c,a,d)};
-hk.prototype.j=function(a,b){function c(a){a=a.U();return a==jg||4==a||3==a&&!t}var d=a.pixelRatio,e=a.viewState,f=e.projection,g=this.a,h=g.ga(),l=h.pb(f),e=l.wc(e.resolution,this.B),m=l.Ga(e),n=a.extent;void 0!==b.extent&&(n=cc(n,b.extent));if(Yb(n))return!1;var m=ee(l,n,m),p={};p[e]={};var q=this.Ue(h,f,p),t=g.c(),u=this.o,y=new Qd(0,0,0,0),x,C,z,K;for(z=m.ba;z<=m.da;++z)for(K=m.ea;K<=m.ha;++K)x=h.vc(e,z,K,d,f),c(x)||(x=ig(x)),c(x)?p[e][x.ya.toString()]=x:(C=ce(l,x.ya,q,y,u),C||(x=de(l,x.ya,y,
-u))&&q(e+1,x));q=Object.keys(p).map(Number);q.sort(Ya);u=this.l;u.length=0;var V,y=0;for(z=q.length;y<z;++y)for(V in x=q[y],K=p[x],K)x=K[V],x.U()==jg&&u.push(x);bj(a.usedTiles,h,e,m);cj(a,h,l,d,f,n,e,g.f());Zi(a,h);aj(a,h);return!0};hk.prototype.Bc=function(a,b,c,d){var e=this.c.canvas,f=b.size,g=b.pixelRatio;e.width=f[0]*g;e.height=f[1]*g;this.i(b,wh(this.a),this.c);a=this.c.getImageData(a[0],a[1],1,1).data;if(0<a[3])return c.call(d,this.a,a)};
-function ik(a,b,c,d){var e=a.l;if(0!==e.length){var f=c.pixelRatio,g=c.viewState,h=g.center,l=g.projection,m=g.rotation,n=c.size,p=Math.round(f*n[0]/2),n=Math.round(f*n[1]/2),g=f/g.resolution,q=a.a,t=q.ga(),u=t.gb(f)*t.df(l),y=t.pb(l),q=Na(q,"render"),x=b,C=1,z,K,V;if(m||q){x=a.c;z=x.canvas;var C=t.gb(f)/f,Z=b.canvas.width*C;K=b.canvas.height*C;V=Math.round(Math.sqrt(Z*Z+K*K));z.width!=V?z.width=z.height=V:x.clearRect(0,0,V,V);z=(V-Z)/2/C;K=(V-K)/2/C;g*=C;p=Math.round(C*(p+z));n=Math.round(C*(n+K))}Z=
-x.globalAlpha;x.globalAlpha=d.opacity;var Ra,F=t.gf(l)&&1==d.opacity;F||(e.reverse(),Ra=[]);var Ga=d.extent;if(d=void 0!==Ga){var ra=Wb(Ga),Oa=Vb(Ga),Sa=Tb(Ga),Ga=Sb(Ga);Th(c.coordinateToPixelTransform,ra);Th(c.coordinateToPixelTransform,Oa);Th(c.coordinateToPixelTransform,Sa);Th(c.coordinateToPixelTransform,Ga);var Nb=z||0,Ub=K||0;x.save();var oc=x.canvas.width/2,Gc=x.canvas.height/2;qi(x,-m,oc,Gc);x.beginPath();x.moveTo(C*(ra[0]*f+Nb),C*(ra[1]*f+Ub));x.lineTo(C*(Oa[0]*f+Nb),C*(Oa[1]*f+Ub));x.lineTo(C*
-(Sa[0]*f+Nb),C*(Sa[1]*f+Ub));x.lineTo(C*(Ga[0]*f+Nb),C*(Ga[1]*f+Ub));x.clip();qi(x,m,oc,Gc)}ra=0;for(Oa=e.length;ra<Oa;++ra){var Sa=e[ra],Ga=Sa.ya,Gc=y.Ia(Ga,a.o),oc=Ga[0],pc=Sb(y.Ia(y.Zd(h,oc,a.P))),Ga=Math.round(Zb(Gc)*g),Nb=Math.round($b(Gc)*g),Ub=Math.round((Gc[0]-pc[0])*g/Ga)*Ga+p+Math.round((pc[0]-h[0])*g),Gc=Math.round((pc[1]-Gc[3])*g/Nb)*Nb+n+Math.round((h[1]-pc[1])*g);if(!F){pc=[Ub,Gc,Ub+Ga,Gc+Nb];x.save();for(var oe=0,pe=Ra.length;oe<pe;++oe){var bd=Ra[oe];dc(pc,bd)&&(x.beginPath(),x.moveTo(pc[0],
-pc[1]),x.lineTo(pc[0],pc[3]),x.lineTo(pc[2],pc[3]),x.lineTo(pc[2],pc[1]),x.moveTo(bd[0],bd[1]),x.lineTo(bd[2],bd[1]),x.lineTo(bd[2],bd[3]),x.lineTo(bd[0],bd[3]),x.closePath(),x.clip())}Ra.push(pc)}oc=t.kf(oc,f,l);x.drawImage(Sa.qb(),u,u,oc[0],oc[1],Ub,Gc,Ga,Nb);F||x.restore()}d&&x.restore();q&&(e=z-p/C+p,f=K-n/C+n,h=Xh(a.G,V/2-e,V/2-f,g,-g,-m,-h[0]+e/g,-h[1]-f/g),fj(a,"render",x,c,h));(m||q)&&b.drawImage(x.canvas,-Math.round(z),-Math.round(K),V/C,V/C);x.globalAlpha=Z}};function jk(a){dj.call(this,a);this.c=!1;this.B=-1;this.C=NaN;this.T=Bb();this.l=this.u=null;this.o=De()}v(jk,dj);
-jk.prototype.i=function(a,b,c){var d=a.extent,e=a.pixelRatio,f=b.sd?a.skippedFeatureUids:{},g=a.viewState,h=g.projection,g=g.rotation,l=h.D(),m=this.a.ga(),n=hj(this,a,0);fj(this,"precompose",c,a,n);var p=b.extent,q=void 0!==p;q&&ej(c,a,p);if((p=this.l)&&!p.g()){var t=0,u=0,y;if(Na(this.a,"render")){y=c.canvas.width;var x=c.canvas.height;if(g){var C=Math.round(Math.sqrt(y*y+x*x)),t=(C-y)/2,u=(C-x)/2;y=x=C}this.o.canvas.width=y;this.o.canvas.height=x;y=this.o}else y=c;x=y.globalAlpha;y.globalAlpha=
-b.opacity;y!=c&&y.translate(t,u);b=a.size[0]*e;C=a.size[1]*e;qi(y,-g,b/2,C/2);p.Za(y,e,n,g,f);if(m.G&&h.a&&!Ib(l,d)){for(var h=d[0],m=Zb(l),z=0;h<l[0];)--z,n=m*z,n=hj(this,a,n),p.Za(y,e,n,g,f),h+=m;z=0;for(h=d[2];h>l[2];)++z,n=m*z,n=hj(this,a,n),p.Za(y,e,n,g,f),h-=m;n=hj(this,a,0)}qi(y,g,b/2,C/2);y!=c&&(fj(this,"render",y,a,n),c.drawImage(y.canvas,-t,-u),y.translate(-t,-u));y.globalAlpha=x}q&&c.restore();gj(this,c,a,n)};
-jk.prototype.xa=function(a,b,c,d){if(this.l){var e=this.a,f={};return this.l.xa(a,b.viewState.resolution,b.viewState.rotation,{},function(a){var b=ea(a).toString();if(!(b in f))return f[b]=!0,c.call(d,a,e)})}};jk.prototype.G=function(){Xi(this)};
-jk.prototype.j=function(a){function b(a){var b,d=a.zc();d?b=d.call(a,m):(d=c.j)&&(b=d(a,m));if(b){if(b){d=!1;if(Array.isArray(b))for(var e=0,f=b.length;e<f;++e)d=Gj(q,a,b[e],Fj(m,n),this.G,this)||d;else d=Gj(q,a,b,Fj(m,n),this.G,this)||d;a=d}else a=!1;this.c=this.c||a}}var c=this.a,d=c.ga();$i(a.attributions,d.j);aj(a,d);var e=a.viewHints[0],f=a.viewHints[1],g=c.Z,h=c.fa;if(!this.c&&!g&&e||!h&&f)return!0;var l=a.extent,h=a.viewState,e=h.projection,m=h.resolution,n=a.pixelRatio,f=c.g,p=c.i,g=c.get("renderOrder");
-void 0===g&&(g=Ej);l=Db(l,p*m);p=h.projection.D();d.G&&h.projection.a&&!Ib(p,a.extent)&&(a=Math.max(Zb(l)/2,Zb(p)),l[0]=p[0]-a,l[2]=p[2]+a);if(!this.c&&this.C==m&&this.B==f&&this.u==g&&Ib(this.T,l))return!0;this.l=null;this.c=!1;var q=new Aj(.5*m/n,l,m,d.Aa,c.i);d.rd(l,m,e);if(g){var t=[];d.Kb(l,function(a){t.push(a)},this);t.sort(g);t.forEach(b,this)}else d.Kb(l,b,this);Bj(q);this.C=m;this.B=f;this.u=g;this.T=l;this.l=q;return!0};function kk(a){hk.call(this,a);this.u=!1;this.T=Oh();this.B=a.u==Gi?1:0}v(kk,hk);var lk={image:zj,hybrid:["Polygon","LineString"]},mk={hybrid:["Image","Text"],vector:zj};
-kk.prototype.i=function(a,b,c){var d=hj(this,a,0);fj(this,"precompose",c,a,d);var e=b.extent,f=void 0!==e;f&&ej(c,a,e);e=this.a.u;e!==Gi&&ik(this,c,a,b);if(e!==Ei){var g=this.a,e=mk[g.u],h=a.pixelRatio,l=b.sd?a.skippedFeatureUids:{},m=a.viewState,n=m.center,p=m.rotation,q=a.size,m=h/m.resolution,t=g.ga(),u=t.gb(),y=hj(this,a,0);Na(g,"render")?(this.c.canvas.width=c.canvas.width,this.c.canvas.height=c.canvas.height,g=this.c):g=c;var x=g.globalAlpha;g.globalAlpha=b.opacity;b=this.l;var t=t.tileGrid,
-C,z,K,V,Z,Ra,F,Ga;z=0;for(K=b.length;z<K;++z)V=b[z],F=V.f,Z=t.Ia(V.ya,this.o),C=V.ya[0],Ra="tile-pixels"==V.l.yb(),C=t.Ga(C),Ga=C/u,C=Math.round(h*q[0]/2),V=Math.round(h*q[1]/2),Ra?(Z=Wb(Z),Ph(this.T),Z=Xh(this.T,C,V,m*Ga,m*Ga,p,(Z[0]-n[0])/Ga,(n[1]-Z[1])/Ga)):Z=y,qi(g,-p,C,V),F.Ad.Za(g,h,Z,p,l,e),qi(g,p,C,V);g!=c&&(fj(this,"render",g,a,y),c.drawImage(g.canvas,0,0));g.globalAlpha=x}f&&c.restore();gj(this,c,a,d)};
-function nk(a,b,c){function d(a){var b,c=a.zc();c?b=c.call(a,u):(c=e.j)&&(b=c(a,u));if(b){Array.isArray(b)||(b=[b]);var c=z,d=C;if(b){var f=!1;if(Array.isArray(b))for(var g=0,h=b.length;g<h;++g)f=Gj(d,a,b[g],c,this.C,this)||f;else f=Gj(d,a,b,c,this.C,this)||f;a=f}else a=!1;this.u=this.u||a;l.jd=l.jd||a}}var e=a.a,f=c.pixelRatio;c=c.viewState.projection;var g=e.g,h=e.get("renderOrder")||null,l=b.f;if(l.jd||l.Rh!=g||l.Qf!=h){l.Ad=null;l.jd=!1;var m=e.ga(),n=m.tileGrid,p=b.ya,q=b.l,t="tile-pixels"==
-q.yb(),u=n.Ga(p[0]),y;if(t)var x=t=m.gb(),n=Wd(n.Va(p[0])),n=[0,0,n[0]*x,n[1]*x];else t=u,n=n.Ia(p),Hc(c,q)||(y=!0,b.uf(c));l.jd=!1;var C=new Aj(0,n,t,m.i,e.i),z=Fj(t,f);b=b.c;h&&h!==l.Qf&&b.sort(h);m=0;for(t=b.length;m<t;++m)f=b[m],y&&f.V().lb(q,c),d.call(a,f);Bj(C);l.Rh=g;l.Qf=h;l.Ad=C;l.resolution=NaN}}
-kk.prototype.xa=function(a,b,c,d){var e=b.viewState.resolution;b=b.viewState.rotation;var f=this.a,g={},h=this.l,l=f.ga(),m=l.tileGrid,n,p,q,t,u,y;q=0;for(t=h.length;q<t;++q)y=h[q],p=y.ya,u=l.tileGrid.Ia(p,this.o),Gb(u,a)&&("tile-pixels"===y.l.yb()?(u=Wb(u),e=l.gb(),p=m.Ga(p[0])/e,p=[(a[0]-u[0])/p,(u[1]-a[1])/p]):p=a,y=y.f.Ad,n=n||y.xa(p,e,b,{},function(a){var b=ea(a).toString();if(!(b in g))return g[b]=!0,c.call(d,a,f)}));return n};kk.prototype.C=function(){Xi(this)};
-kk.prototype.j=function(a,b){var c=hk.prototype.j.call(this,a,b);if(c)for(var d=Object.keys(a.Ce||{}),e=0,f=this.l.length;e<f;++e){var g=this.l[e];nk(this,g,a);var h=g,g=a,l=this.a,m=lk[l.u];if(m){var n=g.pixelRatio,p=h.f,q=l.g;if(!eb(p.li,d)||p.Rf!==q){p.li=d;p.Rf=q;var q=h.g,t=l.ga(),u=t.tileGrid,y=h.ya[0],x=u.Ga(y),l=Wd(u.Va(y)),y=u.Ga(y),C=y/x,z=l[0]*n*C,K=l[1]*n*C;q.canvas.width=z/C+.5;q.canvas.height=K/C+.5;q.scale(1/C,1/C);q.translate(z/2,K/2);C="tile-pixels"==h.l.yb();x=n/x;t=t.gb();y/=t;
-u=u.Ia(h.ya,this.o);h=Ph(this.T);C?(Vh(h,x*y,x*y),Wh(h,-l[0]*t/2,-l[1]*t/2)):(l=ac(u),Vh(h,x,-x),Wh(h,-l[0],-l[1]));p.Ad.Za(q,n,h,0,g.skippedFeatureUids||{},m)}}}return c};function ok(a,b){Zh.call(this,0,b);this.g=De();this.b=this.g.canvas;this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.a=!0;this.c=Oh()}v(ok,Zh);ok.prototype.ng=function(a){return a instanceof di?new gk(a):a instanceof D?new hk(a):a instanceof G?new kk(a):a instanceof E?new jk(a):null};
-function pk(a,b,c){var d=a.l,e=a.g;if(Na(d,b)){var f=c.extent,g=c.pixelRatio,h=c.viewState.rotation,l=c.viewState,m=c.pixelRatio/l.resolution;a=Xh(a.c,a.b.width/2,a.b.height/2,m,-m,-l.rotation,-l.center[0],-l.center[1]);d.b(new Ih(b,new Ki(e,g,f,a,h),c,e,null))}}ok.prototype.X=function(){return"canvas"};
-ok.prototype.Pf=function(a){if(a){var b=this.g,c=a.pixelRatio,d=Math.round(a.size[0]*c),c=Math.round(a.size[1]*c);this.b.width!=d||this.b.height!=c?(this.b.width=d,this.b.height=c):b.clearRect(0,0,d,c);var e=a.viewState.rotation;$h(a);pk(this,"precompose",a);var f=a.layerStatesArray;fb(f);qi(b,e,d/2,c/2);var g=a.viewState.resolution,h,l,m,n;h=0;for(l=f.length;h<l;++h)n=f[h],m=n.layer,m=bi(this,m),Kh(n,g)&&"ready"==n.mi&&m.j(a,n)&&m.i(a,n,b);qi(b,-e,d/2,c/2);pk(this,"postcompose",a);this.a||(this.b.style.display=
-"",this.a=!0);ci(this,a);a.postRenderFunctions.push(ai)}else this.a&&(this.b.style.display="none",this.a=!1)};function qk(a){this.b=a};function rk(a){this.b=a}v(rk,qk);rk.prototype.X=function(){return 35632};function sk(a){this.b=a}v(sk,qk);sk.prototype.X=function(){return 35633};function tk(){this.b="precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"}v(tk,rk);var uk=new tk;
-function vk(){this.b="varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"}v(vk,sk);var wk=new vk;
-function xk(a,b){this.l=a.getUniformLocation(b,"j");this.o=a.getUniformLocation(b,"i");this.i=a.getUniformLocation(b,"k");this.j=a.getUniformLocation(b,"h");this.b=a.getAttribLocation(b,"e");this.a=a.getAttribLocation(b,"f");this.f=a.getAttribLocation(b,"c");this.g=a.getAttribLocation(b,"g");this.c=a.getAttribLocation(b,"d")};function yk(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function zk(a,b){a[0]=b[0];a[1]=b[1];a[4]=b[2];a[5]=b[3];a[12]=b[4];a[13]=b[5];return a};function Ak(a){this.b=void 0!==a?a:[];this.a=Bk}var Bk=35044;function Ck(a,b){this.j=a;this.b=b;this.a={};this.c={};this.f={};this.o=this.s=this.i=this.l=null;(this.g=Za(ca,"OES_element_index_uint"))&&b.getExtension("OES_element_index_uint");w(this.j,"webglcontextlost",this.Qn,this);w(this.j,"webglcontextrestored",this.Rn,this)}v(Ck,Ia);
-function Dk(a,b,c){var d=a.b,e=c.b,f=String(ea(c));if(f in a.a)d.bindBuffer(b,a.a[f].buffer);else{var g=d.createBuffer();d.bindBuffer(b,g);var h;34962==b?h=new Float32Array(e):34963==b&&(h=a.g?new Uint32Array(e):new Uint16Array(e));d.bufferData(b,h,c.a);a.a[f]={bc:c,buffer:g}}}function Ek(a,b){var c=a.b,d=String(ea(b)),e=a.a[d];c.isContextLost()||c.deleteBuffer(e.buffer);delete a.a[d]}k=Ck.prototype;
-k.la=function(){Ha(this.j);var a=this.b;if(!a.isContextLost()){for(var b in this.a)a.deleteBuffer(this.a[b].buffer);for(b in this.f)a.deleteProgram(this.f[b]);for(b in this.c)a.deleteShader(this.c[b]);a.deleteFramebuffer(this.i);a.deleteRenderbuffer(this.o);a.deleteTexture(this.s)}};k.Pn=function(){return this.b};
-function Fk(a){if(!a.i){var b=a.b,c=b.createFramebuffer();b.bindFramebuffer(b.FRAMEBUFFER,c);var d=Gk(b,1,1),e=b.createRenderbuffer();b.bindRenderbuffer(b.RENDERBUFFER,e);b.renderbufferStorage(b.RENDERBUFFER,b.DEPTH_COMPONENT16,1,1);b.framebufferTexture2D(b.FRAMEBUFFER,b.COLOR_ATTACHMENT0,b.TEXTURE_2D,d,0);b.framebufferRenderbuffer(b.FRAMEBUFFER,b.DEPTH_ATTACHMENT,b.RENDERBUFFER,e);b.bindTexture(b.TEXTURE_2D,null);b.bindRenderbuffer(b.RENDERBUFFER,null);b.bindFramebuffer(b.FRAMEBUFFER,null);a.i=c;
-a.s=d;a.o=e}return a.i}function Hk(a,b){var c=String(ea(b));if(c in a.c)return a.c[c];var d=a.b,e=d.createShader(b.X());d.shaderSource(e,b.b);d.compileShader(e);return a.c[c]=e}function Ik(a,b,c){var d=ea(b)+"/"+ea(c);if(d in a.f)return a.f[d];var e=a.b,f=e.createProgram();e.attachShader(f,Hk(a,b));e.attachShader(f,Hk(a,c));e.linkProgram(f);return a.f[d]=f}k.Qn=function(){va(this.a);va(this.c);va(this.f);this.o=this.s=this.i=this.l=null};k.Rn=function(){};
-k.ve=function(a){if(a==this.l)return!1;this.b.useProgram(a);this.l=a;return!0};function Jk(a,b,c){var d=a.createTexture();a.bindTexture(a.TEXTURE_2D,d);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.LINEAR);a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.LINEAR);void 0!==b&&a.texParameteri(3553,10242,b);void 0!==c&&a.texParameteri(3553,10243,c);return d}function Gk(a,b,c){var d=Jk(a,void 0,void 0);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,b,c,0,a.RGBA,a.UNSIGNED_BYTE,null);return d}
-function Kk(a,b){var c=Jk(a,33071,33071);a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,b);return c};function Lk(a,b){this.B=this.C=void 0;this.o=ac(b);this.u=[];this.i=[];this.S=void 0;this.c=[];this.f=[];this.za=this.na=void 0;this.a=[];this.G=this.l=null;this.P=void 0;this.Ka=Oh();this.Aa=Oh();this.Qa=this.W=void 0;this.La=Oh();this.ra=yk();this.fa=this.$a=this.Z=void 0;this.oa=[];this.j=[];this.b=[];this.T=null;this.g=[];this.s=[];this.Ib=void 0}v(Lk,Ji);
-function Mk(a,b){var c=a.T,d=a.l,e=a.oa,f=a.j,g=b.b;return function(){if(!g.isContextLost()){var a,l;a=0;for(l=e.length;a<l;++a)g.deleteTexture(e[a]);a=0;for(l=f.length;a<l;++a)g.deleteTexture(f[a])}Ek(b,c);Ek(b,d)}}
-function Nk(a,b,c,d){var e=a.C,f=a.B,g=a.S,h=a.na,l=a.za,m=a.P,n=a.W,p=a.Qa,q=a.Z?1:0,t=a.$a,u=a.fa,y=a.Ib,x=Math.cos(t),t=Math.sin(t),C=a.a.length,z=a.b.length,K,V,Z,Ra,F,Ga;for(K=0;K<c;K+=d)F=b[K]-a.o[0],Ga=b[K+1]-a.o[1],V=z/8,Z=-u*e,Ra=-u*(g-f),a.b[z++]=F,a.b[z++]=Ga,a.b[z++]=Z*x-Ra*t,a.b[z++]=Z*t+Ra*x,a.b[z++]=n/l,a.b[z++]=(p+g)/h,a.b[z++]=m,a.b[z++]=q,Z=u*(y-e),Ra=-u*(g-f),a.b[z++]=F,a.b[z++]=Ga,a.b[z++]=Z*x-Ra*t,a.b[z++]=Z*t+Ra*x,a.b[z++]=(n+y)/l,a.b[z++]=(p+g)/h,a.b[z++]=m,a.b[z++]=q,Z=u*(y-
-e),Ra=u*f,a.b[z++]=F,a.b[z++]=Ga,a.b[z++]=Z*x-Ra*t,a.b[z++]=Z*t+Ra*x,a.b[z++]=(n+y)/l,a.b[z++]=p/h,a.b[z++]=m,a.b[z++]=q,Z=-u*e,Ra=u*f,a.b[z++]=F,a.b[z++]=Ga,a.b[z++]=Z*x-Ra*t,a.b[z++]=Z*t+Ra*x,a.b[z++]=n/l,a.b[z++]=p/h,a.b[z++]=m,a.b[z++]=q,a.a[C++]=V,a.a[C++]=V+1,a.a[C++]=V+2,a.a[C++]=V,a.a[C++]=V+2,a.a[C++]=V+3}Lk.prototype.qc=function(a,b){this.g.push(this.a.length);this.s.push(b);var c=a.ka();Nk(this,c,c.length,a.sa())};
-Lk.prototype.rc=function(a,b){this.g.push(this.a.length);this.s.push(b);var c=a.ka();Nk(this,c,c.length,a.sa())};function Ok(a,b){var c=b.b;a.u.push(a.a.length);a.i.push(a.a.length);a.T=new Ak(a.b);Dk(b,34962,a.T);a.l=new Ak(a.a);Dk(b,34963,a.l);var d={};Pk(a.oa,a.c,d,c);Pk(a.j,a.f,d,c);a.C=void 0;a.B=void 0;a.S=void 0;a.c=null;a.f=null;a.na=void 0;a.za=void 0;a.a=null;a.P=void 0;a.W=void 0;a.Qa=void 0;a.Z=void 0;a.$a=void 0;a.fa=void 0;a.b=null;a.Ib=void 0}
-function Pk(a,b,c,d){var e,f,g,h=b.length;for(g=0;g<h;++g)e=b[g],f=ea(e).toString(),f in c?e=c[f]:(e=Kk(d,e),c[f]=e),a[g]=e}
-Lk.prototype.Za=function(a,b,c,d,e,f,g,h,l,m,n){f=a.b;Dk(a,34962,this.T);Dk(a,34963,this.l);var p=Ik(a,uk,wk),q;this.G?q=this.G:this.G=q=new xk(f,p);a.ve(p);f.enableVertexAttribArray(q.f);f.vertexAttribPointer(q.f,2,5126,!1,32,0);f.enableVertexAttribArray(q.b);f.vertexAttribPointer(q.b,2,5126,!1,32,8);f.enableVertexAttribArray(q.c);f.vertexAttribPointer(q.c,2,5126,!1,32,16);f.enableVertexAttribArray(q.a);f.vertexAttribPointer(q.a,1,5126,!1,32,24);f.enableVertexAttribArray(q.g);f.vertexAttribPointer(q.g,
-1,5126,!1,32,28);p=Ph(this.La);Vh(p,2/(c*e[0]),2/(c*e[1]));Uh(p,-d);Wh(p,-(b[0]-this.o[0]),-(b[1]-this.o[1]));b=Ph(this.Aa);Vh(b,2/e[0],2/e[1]);e=Ph(this.Ka);0!==d&&Uh(e,-d);f.uniformMatrix4fv(q.j,!1,zk(this.ra,p));f.uniformMatrix4fv(q.o,!1,zk(this.ra,b));f.uniformMatrix4fv(q.l,!1,zk(this.ra,e));f.uniform1f(q.i,g);var t;if(void 0===l)Qk(this,f,a,h,this.oa,this.u);else{if(m)a:{d=a.g?5125:5123;a=a.g?4:2;e=this.g.length-1;for(g=this.j.length-1;0<=g;--g)for(f.bindTexture(3553,this.j[g]),m=0<g?this.i[g-
-1]:0,b=this.i[g];0<=e&&this.g[e]>=m;){t=this.g[e];c=this.s[e];p=ea(c).toString();if(void 0===h[p]&&c.V()&&(void 0===n||dc(n,c.V().D()))&&(f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),f.drawElements(4,b-t,d,t*a),b=l(c))){h=b;break a}b=t;e--}h=void 0}else f.clear(f.COLOR_BUFFER_BIT|f.DEPTH_BUFFER_BIT),Qk(this,f,a,h,this.j,this.i),h=(h=l(null))?h:void 0;t=h}f.disableVertexAttribArray(q.f);f.disableVertexAttribArray(q.b);f.disableVertexAttribArray(q.c);f.disableVertexAttribArray(q.a);f.disableVertexAttribArray(q.g);
-return t};function Qk(a,b,c,d,e,f){var g=c.g?5125:5123;c=c.g?4:2;if(xa(d)){var h;a=0;d=e.length;for(h=0;a<d;++a){b.bindTexture(3553,e[a]);var l=f[a];b.drawElements(4,l-h,g,h*c);h=l}}else{h=0;var m,l=0;for(m=e.length;l<m;++l){b.bindTexture(3553,e[l]);for(var n=0<l?f[l-1]:0,p=f[l],q=n;h<a.g.length&&a.g[h]<=p;){var t=ea(a.s[h]).toString();void 0!==d[t]?(q!==n&&b.drawElements(4,n-q,g,q*c),n=q=h===a.g.length-1?p:a.g[h+1]):n=h===a.g.length-1?p:a.g[h+1];h++}q!==n&&b.drawElements(4,n-q,g,q*c)}}}
-Lk.prototype.Xb=function(a){var b=a.cc(),c=a.Tb(1),d=a.md(),e=a.pe(1),f=a.l,g=a.jc(),h=a.T,l=a.o,m=a.Gb();a=a.c;var n;0===this.c.length?this.c.push(c):(n=this.c[this.c.length-1],ea(n)!=ea(c)&&(this.u.push(this.a.length),this.c.push(c)));0===this.f.length?this.f.push(e):(n=this.f[this.f.length-1],ea(n)!=ea(e)&&(this.i.push(this.a.length),this.f.push(e)));this.C=b[0];this.B=b[1];this.S=m[1];this.na=d[1];this.za=d[0];this.P=f;this.W=g[0];this.Qa=g[1];this.$a=l;this.Z=h;this.fa=a;this.Ib=m[0]};
-function Rk(a,b,c){this.c=b;this.i=a;this.f=c;this.a={}}v(Rk,ij);function Sk(a,b){var c=[],d;for(d in a.a)c.push(Mk(a.a[d],b));return function(){for(var a=c.length,b,d=0;d<a;d++)b=c[d].apply(this,arguments);return b}}function Tk(a,b){for(var c in a.a)Ok(a.a[c],b)}Rk.prototype.b=function(a,b){var c=this.a[b];void 0===c&&(c=new Uk[b](this.i,this.c),this.a[b]=c);return c};Rk.prototype.g=function(){return xa(this.a)};
-Rk.prototype.Za=function(a,b,c,d,e,f,g,h){var l,m,n;l=0;for(m=zj.length;l<m;++l)n=this.a[zj[l]],void 0!==n&&n.Za(a,b,c,d,e,f,g,h,void 0,!1)};function Vk(a,b,c,d,e,f,g,h,l,m,n){var p=Wk,q,t;for(q=zj.length-1;0<=q;--q)if(t=a.a[zj[q]],void 0!==t&&(t=t.Za(b,c,d,e,p,f,g,h,l,m,n)))return t}
-Rk.prototype.xa=function(a,b,c,d,e,f,g,h,l,m){var n=b.b;n.bindFramebuffer(n.FRAMEBUFFER,Fk(b));var p;void 0!==this.f&&(p=Db(Lb(a),d*this.f));return Vk(this,b,a,d,e,g,h,l,function(a){var b=new Uint8Array(4);n.readPixels(0,0,1,1,n.RGBA,n.UNSIGNED_BYTE,b);if(0<b[3]&&(a=m(a)))return a},!0,p)};
-function Xk(a,b,c,d,e,f,g,h){var l=c.b;l.bindFramebuffer(l.FRAMEBUFFER,Fk(c));return void 0!==Vk(a,c,b,d,e,f,g,h,function(){var a=new Uint8Array(4);l.readPixels(0,0,1,1,l.RGBA,l.UNSIGNED_BYTE,a);return 0<a[3]},!1)}var Uk={Image:Lk},Wk=[1,1];function Yk(a,b,c,d,e,f,g){this.b=a;this.f=b;this.g=f;this.c=g;this.l=e;this.j=d;this.i=c;this.a=null}v(Yk,Ji);k=Yk.prototype;k.ud=function(a){this.Xb(a.a)};k.pc=function(a){switch(a.X()){case "Point":this.rc(a,null);break;case "MultiPoint":this.qc(a,null);break;case "GeometryCollection":this.We(a,null)}};k.Ve=function(a,b){var c=(0,b.c)(a);c&&dc(this.g,c.D())&&(this.ud(b),this.pc(c))};k.We=function(a){a=a.f;var b,c;b=0;for(c=a.length;b<c;++b)this.pc(a[b])};
-k.rc=function(a,b){var c=this.b,d=(new Rk(1,this.g)).b(0,"Image");d.Xb(this.a);d.rc(a,b);Ok(d,c);d.Za(this.b,this.f,this.i,this.j,this.l,this.c,1,{},void 0,!1);Mk(d,c)()};k.qc=function(a,b){var c=this.b,d=(new Rk(1,this.g)).b(0,"Image");d.Xb(this.a);d.qc(a,b);Ok(d,c);d.Za(this.b,this.f,this.i,this.j,this.l,this.c,1,{},void 0,!1);Mk(d,c)()};k.Xb=function(a){this.a=a};function Zk(){this.b="precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"}v(Zk,rk);var $k=new Zk;function al(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"}v(al,sk);var bl=new al;
-function cl(a,b){this.g=a.getUniformLocation(b,"f");this.f=a.getUniformLocation(b,"e");this.i=a.getUniformLocation(b,"d");this.c=a.getUniformLocation(b,"g");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function dl(a,b){Vi.call(this,b);this.f=a;this.W=new Ak([-1,-1,0,0,1,-1,1,0,-1,1,0,1,1,1,1,1]);this.i=this.tb=null;this.j=void 0;this.s=Oh();this.u=Oh();this.B=yk();this.T=null}v(dl,Vi);
-function el(a,b,c){var d=a.f.g;if(void 0===a.j||a.j!=c){b.postRenderFunctions.push(function(a,b,c){a.isContextLost()||(a.deleteFramebuffer(b),a.deleteTexture(c))}.bind(null,d,a.i,a.tb));b=Gk(d,c,c);var e=d.createFramebuffer();d.bindFramebuffer(36160,e);d.framebufferTexture2D(36160,36064,3553,b,0);a.tb=b;a.i=e;a.j=c}else d.bindFramebuffer(36160,a.i)}
-dl.prototype.lh=function(a,b,c){fl(this,"precompose",c,a);Dk(c,34962,this.W);var d=c.b,e=Ik(c,$k,bl),f;this.T?f=this.T:this.T=f=new cl(d,e);c.ve(e)&&(d.enableVertexAttribArray(f.b),d.vertexAttribPointer(f.b,2,5126,!1,16,0),d.enableVertexAttribArray(f.a),d.vertexAttribPointer(f.a,2,5126,!1,16,8),d.uniform1i(f.c,0));d.uniformMatrix4fv(f.i,!1,zk(this.B,this.s));d.uniformMatrix4fv(f.f,!1,zk(this.B,this.u));d.uniform1f(f.g,b.opacity);d.bindTexture(3553,this.tb);d.drawArrays(5,0,4);fl(this,"postcompose",
-c,a)};function fl(a,b,c,d){a=a.a;if(Na(a,b)){var e=d.viewState;a.b(new Ih(b,new Yk(c,e.center,e.resolution,e.rotation,d.size,d.extent,d.pixelRatio),d,null,c))}}dl.prototype.xf=function(){this.i=this.tb=null;this.j=void 0};function gl(a,b){dl.call(this,a,b);this.o=this.l=this.c=null}v(gl,dl);function hl(a,b){var c=b.a();return Kk(a.f.g,c)}gl.prototype.xa=function(a,b,c,d){var e=this.a;return e.ga().xa(a,b.viewState.resolution,b.viewState.rotation,b.skippedFeatureUids,function(a){return c.call(d,a,e)})};
-gl.prototype.yf=function(a,b){var c=this.f.g,d=a.pixelRatio,e=a.viewState,f=e.center,g=e.resolution,h=e.rotation,l=this.c,m=this.tb,n=this.a.ga(),p=a.viewHints,q=a.extent;void 0!==b.extent&&(q=cc(q,b.extent));p[0]||p[1]||Yb(q)||(e=n.W(q,g,d,e.projection))&&Yi(this,e)&&(l=e,m=hl(this,e),this.tb&&a.postRenderFunctions.push(function(a,b){a.isContextLost()||a.deleteTexture(b)}.bind(null,c,this.tb)));l&&(c=this.f.c.j,il(this,c.width,c.height,d,f,g,h,l.D()),this.o=null,d=this.s,Ph(d),Vh(d,1,-1),Wh(d,0,
--1),this.c=l,this.tb=m,$i(a.attributions,l.j),aj(a,n));return!0};function il(a,b,c,d,e,f,g,h){b*=f;c*=f;a=a.u;Ph(a);Vh(a,2*d/b,2*d/c);Uh(a,-g);Wh(a,h[0]-e[0],h[1]-e[1]);Vh(a,(h[2]-h[0])/2,(h[3]-h[1])/2);Wh(a,1,1)}gl.prototype.le=function(a,b){return void 0!==this.xa(a,b,gc,this)};
-gl.prototype.Bc=function(a,b,c,d){if(this.c&&this.c.a())if(this.a.ga()instanceof ek){var e=Th(b.pixelToCoordinateTransform,a.slice());if(this.xa(e,b,gc,this))return c.call(d,this.a,null)}else{e=[this.c.a().width,this.c.a().height];if(!this.o){var f=b.size;b=Oh();Wh(b,-1,-1);Vh(b,2/f[0],2/f[1]);Wh(b,0,f[1]);Vh(b,1,-1);var f=Yh(this.u.slice()),g=Oh();Wh(g,0,e[1]);Vh(g,1,-1);Vh(g,e[0]/2,e[1]/2);Wh(g,1,1);Rh(g,f);Rh(g,b);this.o=g}a=Th(this.o,a.slice());if(!(0>a[0]||a[0]>e[0]||0>a[1]||a[1]>e[1])&&(this.l||
-(this.l=De(1,1)),this.l.clearRect(0,0,1,1),this.l.drawImage(this.c.a(),a[0],a[1],1,1,0,0,1,1),e=this.l.getImageData(0,0,1,1).data,0<e[3]))return c.call(d,this.a,e)}};function jl(){this.b="precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"}v(jl,rk);var kl=new jl;function ll(){this.b="varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"}v(ll,sk);var ml=new ll;function nl(a,b){this.g=a.getUniformLocation(b,"e");this.f=a.getUniformLocation(b,"d");this.b=a.getAttribLocation(b,"b");this.a=a.getAttribLocation(b,"c")};function pl(a,b){dl.call(this,a,b);this.S=kl;this.Z=ml;this.c=null;this.G=new Ak([0,0,0,1,1,0,1,1,0,1,0,0,1,1,1,0]);this.C=this.l=null;this.o=-1;this.P=[0,0]}v(pl,dl);k=pl.prototype;k.la=function(){Ek(this.f.c,this.G);dl.prototype.la.call(this)};k.Ue=function(a,b,c){var d=this.f;return function(e,f){return Wi(a,b,e,f,function(a){var b=d.a.b.hasOwnProperty(a.Xa());b&&(c[e]||(c[e]={}),c[e][a.ya.toString()]=a);return b})}};k.xf=function(){dl.prototype.xf.call(this);this.c=null};
-k.yf=function(a,b,c){var d=this.f,e=c.b,f=a.viewState,g=f.projection,h=this.a,l=h.ga(),m=l.pb(g),n=m.wc(f.resolution),p=m.Ga(n),q=l.kf(n,a.pixelRatio,g),t=q[0]/Wd(m.Va(n),this.P)[0],u=p/t,y=l.gb(t)*l.df(g),x=f.center,C=a.extent,z=ee(m,C,p);if(this.l&&Sd(this.l,z)&&this.o==l.g)u=this.C;else{var K=[z.da-z.ba+1,z.ha-z.ea+1],V=ka(Math.max(K[0]*q[0],K[1]*q[1])),K=u*V,Z=m.Tc(n),Ra=Z[0]+z.ba*q[0]*u,u=Z[1]+z.ea*q[1]*u,u=[Ra,u,Ra+K,u+K];el(this,a,V);e.viewport(0,0,V,V);e.clearColor(0,0,0,0);e.clear(16384);
-e.disable(3042);V=Ik(c,this.S,this.Z);c.ve(V);this.c||(this.c=new nl(e,V));Dk(c,34962,this.G);e.enableVertexAttribArray(this.c.b);e.vertexAttribPointer(this.c.b,2,5126,!1,16,0);e.enableVertexAttribArray(this.c.a);e.vertexAttribPointer(this.c.a,2,5126,!1,16,8);e.uniform1i(this.c.g,0);c={};c[n]={};var F=this.Ue(l,g,c),Ga=h.c(),V=!0,Ra=Bb(),ra=new Qd(0,0,0,0),Oa,Sa,Nb;for(Sa=z.ba;Sa<=z.da;++Sa)for(Nb=z.ea;Nb<=z.ha;++Nb){Z=l.vc(n,Sa,Nb,t,g);if(void 0!==b.extent&&(Oa=m.Ia(Z.ya,Ra),!dc(Oa,b.extent)))continue;
-Oa=Z.U();(Oa=Oa==jg||4==Oa||3==Oa&&!Ga)||(Z=ig(Z));Oa=Z.U();if(Oa==jg){if(d.a.b.hasOwnProperty(Z.Xa())){c[n][Z.ya.toString()]=Z;continue}}else if(4==Oa||3==Oa&&!Ga)continue;V=!1;Oa=ce(m,Z.ya,F,ra,Ra);Oa||(Z=de(m,Z.ya,ra,Ra))&&F(n+1,Z)}b=Object.keys(c).map(Number);b.sort(Ya);for(var F=new Float32Array(4),Ub,Ga=0,ra=b.length;Ga<ra;++Ga)for(Ub in Sa=c[b[Ga]],Sa)Z=Sa[Ub],Oa=m.Ia(Z.ya,Ra),F[0]=2*(Oa[2]-Oa[0])/K,F[1]=2*(Oa[3]-Oa[1])/K,F[2]=2*(Oa[0]-u[0])/K-1,F[3]=2*(Oa[1]-u[1])/K-1,e.uniform4fv(this.c.f,
-F),ql(d,Z,q,y*t),e.drawArrays(5,0,4);V?(this.l=z,this.C=u,this.o=l.g):(this.C=this.l=null,this.o=-1,a.animate=!0)}bj(a.usedTiles,l,n,z);var oc=d.j;cj(a,l,m,t,g,C,n,h.f(),function(a){a.U()!=jg||d.a.b.hasOwnProperty(a.Xa())||a.Xa()in oc.a||oc.c([a,ge(m,a.ya),m.Ga(a.ya[0]),q,y*t])},this);Zi(a,l);aj(a,l);e=this.s;Ph(e);Wh(e,(Math.round(x[0]/p)*p-u[0])/(u[2]-u[0]),(Math.round(x[1]/p)*p-u[1])/(u[3]-u[1]));0!==f.rotation&&Uh(e,f.rotation);Vh(e,a.size[0]*f.resolution/(u[2]-u[0]),a.size[1]*f.resolution/(u[3]-
-u[1]));Wh(e,-.5,-.5);return!0};k.Bc=function(a,b,c,d){if(this.i){a=Th(this.s,[a[0]/b.size[0],(b.size[1]-a[1])/b.size[1]].slice());a=[a[0]*this.j,a[1]*this.j];b=this.f.c.b;b.bindFramebuffer(b.FRAMEBUFFER,this.i);var e=new Uint8Array(4);b.readPixels(a[0],a[1],1,1,b.RGBA,b.UNSIGNED_BYTE,e);if(0<e[3])return c.call(d,this.a,e)}};function rl(a,b){dl.call(this,a,b);this.o=!1;this.P=-1;this.S=NaN;this.C=Bb();this.l=this.c=this.G=null}v(rl,dl);k=rl.prototype;k.lh=function(a,b,c){this.l=b;var d=a.viewState,e=this.c;e&&!e.g()&&e.Za(c,d.center,d.resolution,d.rotation,a.size,a.pixelRatio,b.opacity,b.sd?a.skippedFeatureUids:{})};k.la=function(){var a=this.c;a&&(Sk(a,this.f.c)(),this.c=null);dl.prototype.la.call(this)};
-k.xa=function(a,b,c,d){if(this.c&&this.l){var e=b.viewState,f=this.a,g={};return this.c.xa(a,this.f.c,e.center,e.resolution,e.rotation,b.size,b.pixelRatio,this.l.opacity,{},function(a){var b=ea(a).toString();if(!(b in g))return g[b]=!0,c.call(d,a,f)})}};k.le=function(a,b){if(this.c&&this.l){var c=b.viewState;return Xk(this.c,a,this.f.c,c.resolution,c.rotation,b.pixelRatio,this.l.opacity,b.skippedFeatureUids)}return!1};
-k.Bc=function(a,b,c,d){a=Th(b.pixelToCoordinateTransform,a.slice());if(this.le(a,b))return c.call(d,this.a,null)};k.mh=function(){Xi(this)};
-k.yf=function(a,b,c){function d(a){var b,c=a.zc();c?b=c.call(a,m):(c=e.j)&&(b=c(a,m));if(b){if(b){c=!1;if(Array.isArray(b))for(var d=0,f=b.length;d<f;++d)c=Gj(q,a,b[d],Fj(m,n),this.mh,this)||c;else c=Gj(q,a,b,Fj(m,n),this.mh,this)||c;a=c}else a=!1;this.o=this.o||a}}var e=this.a;b=e.ga();$i(a.attributions,b.j);aj(a,b);var f=a.viewHints[0],g=a.viewHints[1],h=e.Z,l=e.fa;if(!this.o&&!h&&f||!l&&g)return!0;var g=a.extent,h=a.viewState,f=h.projection,m=h.resolution,n=a.pixelRatio,h=e.g,p=e.i,l=e.get("renderOrder");
-void 0===l&&(l=Ej);g=Db(g,p*m);if(!this.o&&this.S==m&&this.P==h&&this.G==l&&Ib(this.C,g))return!0;this.c&&a.postRenderFunctions.push(Sk(this.c,c));this.o=!1;var q=new Rk(.5*m/n,g,e.i);b.rd(g,m,f);if(l){var t=[];b.Kb(g,function(a){t.push(a)},this);t.sort(l);t.forEach(d,this)}else b.Kb(g,d,this);Tk(q,c);this.S=m;this.P=h;this.G=l;this.C=g;this.c=q;return!0};function sl(){this.f=0;this.b={};this.g=this.a=null}k=sl.prototype;k.clear=function(){this.f=0;this.b={};this.g=this.a=null};k.forEach=function(a,b){for(var c=this.a;c;)a.call(b,c.Gc,c.ec,this),c=c.Ab};k.get=function(a){a=this.b[a];ha(void 0!==a,15);if(a===this.g)return a.Gc;a===this.a?(this.a=this.a.Ab,this.a.Uc=null):(a.Ab.Uc=a.Uc,a.Uc.Ab=a.Ab);a.Ab=null;a.Uc=this.g;this.g=this.g.Ab=a;return a.Gc};
-k.pop=function(){var a=this.a;delete this.b[a.ec];a.Ab&&(a.Ab.Uc=null);this.a=a.Ab;this.a||(this.g=null);--this.f;return a.Gc};k.replace=function(a,b){this.get(a);this.b[a].Gc=b};k.set=function(a,b){ha(!(a in this.b),16);var c={ec:a,Ab:null,Uc:this.g,Gc:b};this.g?this.g.Ab=c:this.a=c;this.g=c;this.b[a]=c;++this.f};function tl(a,b){Zh.call(this,0,b);this.b=document.createElement("CANVAS");this.b.style.width="100%";this.b.style.height="100%";this.b.className="ol-unselectable";a.insertBefore(this.b,a.childNodes[0]||null);this.u=this.C=0;this.B=De();this.o=!0;this.g=$e(this.b,{antialias:!0,depth:!1,failIfMajorPerformanceCaveat:!0,preserveDrawingBuffer:!1,stencil:!0});this.c=new Ck(this.b,this.g);w(this.b,"webglcontextlost",this.Dm,this);w(this.b,"webglcontextrestored",this.Em,this);this.a=new sl;this.T=null;this.j=
-new kg(function(a){var b=a[1];a=a[2];var e=b[0]-this.T[0],b=b[1]-this.T[1];return 65536*Math.log(a)+Math.sqrt(e*e+b*b)/a}.bind(this),function(a){return a[0].Xa()});this.G=function(){if(0!==this.j.b.length){og(this.j);var a=lg(this.j);ql(this,a[0],a[3],a[4])}return!1}.bind(this);this.i=0;ul(this)}v(tl,Zh);
-function ql(a,b,c,d){var e=a.g,f=b.Xa();if(a.a.b.hasOwnProperty(f))a=a.a.get(f),e.bindTexture(3553,a.tb),9729!=a.Og&&(e.texParameteri(3553,10240,9729),a.Og=9729),9729!=a.Qg&&(e.texParameteri(3553,10241,9729),a.Qg=9729);else{var g=e.createTexture();e.bindTexture(3553,g);if(0<d){var h=a.B.canvas,l=a.B;a.C!==c[0]||a.u!==c[1]?(h.width=c[0],h.height=c[1],a.C=c[0],a.u=c[1]):l.clearRect(0,0,c[0],c[1]);l.drawImage(b.qb(),d,d,c[0],c[1],0,0,c[0],c[1]);e.texImage2D(3553,0,6408,6408,5121,h)}else e.texImage2D(3553,
-0,6408,6408,5121,b.qb());e.texParameteri(3553,10240,9729);e.texParameteri(3553,10241,9729);e.texParameteri(3553,10242,33071);e.texParameteri(3553,10243,33071);a.a.set(f,{tb:g,Og:9729,Qg:9729})}}k=tl.prototype;k.ng=function(a){return a instanceof di?new gl(this,a):a instanceof D?new pl(this,a):a instanceof E?new rl(this,a):null};function vl(a,b,c){var d=a.l;if(Na(d,b)){a=a.c;var e=c.viewState;d.b(new Ih(b,new Yk(a,e.center,e.resolution,e.rotation,c.size,c.extent,c.pixelRatio),c,null,a))}}
-k.la=function(){var a=this.g;a.isContextLost()||this.a.forEach(function(b){b&&a.deleteTexture(b.tb)});Ja(this.c);Zh.prototype.la.call(this)};k.uj=function(a,b){for(var c=this.g,d;1024<this.a.f-this.i;){if(d=this.a.a.Gc)c.deleteTexture(d.tb);else if(+this.a.a.ec==b.index)break;else--this.i;this.a.pop()}};k.X=function(){return"webgl"};k.Dm=function(a){a.preventDefault();this.a.clear();this.i=0;a=this.f;for(var b in a)a[b].xf()};k.Em=function(){ul(this);this.l.render()};
-function ul(a){a=a.g;a.activeTexture(33984);a.blendFuncSeparate(770,771,1,771);a.disable(2884);a.disable(2929);a.disable(3089);a.disable(2960)}
-k.Pf=function(a){var b=this.c,c=this.g;if(c.isContextLost())return!1;if(!a)return this.o&&(this.b.style.display="none",this.o=!1),!1;this.T=a.focus;this.a.set((-a.index).toString(),null);++this.i;vl(this,"precompose",a);var d=[],e=a.layerStatesArray;fb(e);var f=a.viewState.resolution,g,h,l,m;g=0;for(h=e.length;g<h;++g)m=e[g],Kh(m,f)&&"ready"==m.mi&&(l=bi(this,m.layer),l.yf(a,m,b)&&d.push(m));e=a.size[0]*a.pixelRatio;f=a.size[1]*a.pixelRatio;if(this.b.width!=e||this.b.height!=f)this.b.width=e,this.b.height=
-f;c.bindFramebuffer(36160,null);c.clearColor(0,0,0,0);c.clear(16384);c.enable(3042);c.viewport(0,0,this.b.width,this.b.height);g=0;for(h=d.length;g<h;++g)m=d[g],l=bi(this,m.layer),l.lh(a,m,b);this.o||(this.b.style.display="",this.o=!0);$h(a);1024<this.a.f-this.i&&a.postRenderFunctions.push(this.uj.bind(this));0!==this.j.b.length&&(a.postRenderFunctions.push(this.G),a.animate=!0);vl(this,"postcompose",a);ci(this,a);a.postRenderFunctions.push(ai)};
-k.xa=function(a,b,c,d,e,f){var g;if(this.g.isContextLost())return!1;var h=b.viewState,l=b.layerStatesArray,m;for(m=l.length-1;0<=m;--m){g=l[m];var n=g.layer;if(Kh(g,h.resolution)&&e.call(f,n)&&(g=bi(this,n).xa(a,b,c,d)))return g}};k.kh=function(a,b,c,d){var e=!1;if(this.g.isContextLost())return!1;var f=b.viewState,g=b.layerStatesArray,h;for(h=g.length-1;0<=h;--h){var l=g[h],m=l.layer;if(Kh(l,f.resolution)&&c.call(d,m)&&(e=bi(this,m).le(a,b)))return!0}return e};
-k.jh=function(a,b,c,d,e){if(this.g.isContextLost())return!1;var f=b.viewState,g,h=b.layerStatesArray,l;for(l=h.length-1;0<=l;--l){g=h[l];var m=g.layer;if(Kh(g,f.resolution)&&e.call(d,m)&&(g=bi(this,m).Bc(a,b,c,d)))return g}};var wl=["canvas","webgl"];
-function H(a){Ua.call(this);var b=xl(a);this.Jb=void 0!==a.loadTilesWhileAnimating?a.loadTilesWhileAnimating:!1;this.ac=void 0!==a.loadTilesWhileInteracting?a.loadTilesWhileInteracting:!1;this.Me=void 0!==a.pixelRatio?a.pixelRatio:gf;this.Le=b.logos;this.Z=function(){this.i=void 0;this.Jo.call(this,Date.now())}.bind(this);this.La=Oh();this.Je=Oh();this.ub=0;this.f=null;this.Aa=Bb();this.G=this.P=null;this.a=document.createElement("DIV");this.a.className="ol-viewport"+(mf?" ol-touch":"");this.a.style.position=
-"relative";this.a.style.overflow="hidden";this.a.style.width="100%";this.a.style.height="100%";this.a.style.msTouchAction="none";this.a.style.touchAction="none";this.C=document.createElement("DIV");this.C.className="ol-overlaycontainer";this.a.appendChild(this.C);this.u=document.createElement("DIV");this.u.className="ol-overlaycontainer-stopevent";a=["click","dblclick","mousedown","touchstart","mspointerdown",cg,"mousewheel","wheel"];for(var c=0,d=a.length;c<d;++c)w(this.u,a[c],La);this.a.appendChild(this.u);
-this.ra=new Vf(this);for(var e in fg)w(this.ra,fg[e],this.Jg,this);this.fa=b.keyboardEventTarget;this.s=null;w(this.a,"wheel",this.Nc,this);w(this.a,"mousewheel",this.Nc,this);this.l=b.controls;this.j=b.interactions;this.o=b.overlays;this.Af={};this.B=new b.Lo(this.a,this);this.W=null;this.S=[];this.Ka=[];this.oa=new pg(this.pk.bind(this),this.Uk.bind(this));this.Ce={};w(this,Wa(yl),this.Ck,this);w(this,Wa(zl),this.Vk,this);w(this,Wa(Al),this.Rk,this);w(this,Wa(Bl),this.Tk,this);this.H(b.values);
-this.l.forEach(function(a){a.setMap(this)},this);w(this.l,se,function(a){a.element.setMap(this)},this);w(this.l,te,function(a){a.element.setMap(null)},this);this.j.forEach(function(a){a.setMap(this)},this);w(this.j,se,function(a){a.element.setMap(this)},this);w(this.j,te,function(a){a.element.setMap(null)},this);this.o.forEach(this.ig,this);w(this.o,se,function(a){this.ig(a.element)},this);w(this.o,te,function(a){var b=a.element.j;void 0!==b&&delete this.Af[b.toString()];a.element.setMap(null)},this)}
-v(H,Ua);k=H.prototype;k.ij=function(a){this.l.push(a)};k.jj=function(a){this.j.push(a)};k.gg=function(a){this.tc().Qc().push(a)};k.hg=function(a){this.o.push(a)};k.ig=function(a){var b=a.j;void 0!==b&&(this.Af[b.toString()]=a);a.setMap(this)};k.ab=function(a){this.render();Array.prototype.push.apply(this.S,arguments)};
-k.la=function(){Ja(this.ra);Ja(this.B);Fa(this.a,"wheel",this.Nc,this);Fa(this.a,"mousewheel",this.Nc,this);void 0!==this.c&&(window.removeEventListener("resize",this.c,!1),this.c=void 0);this.i&&(cancelAnimationFrame(this.i),this.i=void 0);this.Xg(null);Ua.prototype.la.call(this)};k.Sd=function(a,b,c,d,e){if(this.f)return a=this.Ja(a),this.B.xa(a,this.f,b,void 0!==c?c:null,void 0!==d?d:gc,void 0!==e?e:null)};
-k.Gl=function(a,b,c,d,e){if(this.f)return this.B.jh(a,this.f,b,void 0!==c?c:null,void 0!==d?d:gc,void 0!==e?e:null)};k.Xk=function(a,b,c){if(!this.f)return!1;a=this.Ja(a);return this.B.kh(a,this.f,void 0!==b?b:gc,void 0!==c?c:null)};k.Kj=function(a){return this.Ja(this.Ud(a))};k.Ud=function(a){var b=this.a.getBoundingClientRect();a=a.changedTouches?a.changedTouches[0]:a;return[a.clientX-b.left,a.clientY-b.top]};k.jf=function(){return this.get(Bl)};
-k.uc=function(){var a=this.jf();return void 0!==a?"string"===typeof a?document.getElementById(a):a:null};k.Ja=function(a){var b=this.f;return b?Th(b.pixelToCoordinateTransform,a.slice()):null};k.Ij=function(){return this.l};k.bk=function(){return this.o};k.ak=function(a){a=this.Af[a.toString()];return void 0!==a?a:null};k.Pj=function(){return this.j};k.tc=function(){return this.get(yl)};k.Wg=function(){return this.tc().Qc()};
-k.Ca=function(a){var b=this.f;return b?Th(b.coordinateToPixelTransform,a.slice(0,2)):null};k.kb=function(){return this.get(Al)};k.$=function(){return this.get(zl)};k.rk=function(){return this.a};k.pk=function(a,b,c,d){var e=this.f;if(!(e&&b in e.wantedTiles&&e.wantedTiles[b][a.Xa()]))return Infinity;a=c[0]-e.focus[0];c=c[1]-e.focus[1];return 65536*Math.log(d)+Math.sqrt(a*a+c*c)/d};k.Nc=function(a,b){var c=new Tf(b||a.type,this,a);this.Jg(c)};
-k.Jg=function(a){if(this.f){this.W=a.coordinate;a.frameState=this.f;var b=this.j.a,c;if(!1!==this.b(a))for(c=b.length-1;0<=c;c--){var d=b[c];if(d.f()&&!d.handleEvent(a))break}}};k.Pk=function(){var a=this.f,b=this.oa;if(0!==b.b.length){var c=16,d=c;if(a){var e=a.viewHints;e[0]&&(c=this.Jb?8:0,d=2);e[1]&&(c=this.ac?8:0,d=2)}b.j<c&&(og(b),qg(b,c,d))}b=this.Ka;c=0;for(d=b.length;c<d;++c)b[c](this,a);b.length=0};k.Rk=function(){this.render()};
-k.Tk=function(){var a;this.jf()&&(a=this.uc());if(this.s){for(var b=0,c=this.s.length;b<c;++b)za(this.s[b]);this.s=null}a?(a.appendChild(this.a),a=this.fa?this.fa:a,this.s=[w(a,"keydown",this.Nc,this),w(a,"keypress",this.Nc,this)],this.c||(this.c=this.Yc.bind(this),window.addEventListener("resize",this.c,!1))):(Fe(this.a),void 0!==this.c&&(window.removeEventListener("resize",this.c,!1),this.c=void 0));this.Yc()};k.Uk=function(){this.render()};k.Wk=function(){this.render()};
-k.Vk=function(){this.P&&(za(this.P),this.P=null);var a=this.$();a&&(this.P=w(a,"propertychange",this.Wk,this));this.render()};k.Ck=function(){this.G&&(this.G.forEach(za),this.G=null);var a=this.tc();a&&(this.G=[w(a,"propertychange",this.render,this),w(a,"change",this.render,this)]);this.render()};k.Ko=function(){this.i&&cancelAnimationFrame(this.i);this.Z()};k.render=function(){void 0===this.i&&(this.i=requestAnimationFrame(this.Z))};k.Do=function(a){return this.l.remove(a)};k.Eo=function(a){return this.j.remove(a)};
-k.Go=function(a){return this.tc().Qc().remove(a)};k.Ho=function(a){return this.o.remove(a)};
-k.Jo=function(a){var b,c,d,e=this.kb(),f=this.$(),g=Bb(),h=null;if(void 0!==e&&0<e[0]&&0<e[1]&&f&&Gd(f)){var h=Cd(f,this.f?this.f.viewHints:void 0),l=this.tc().ff(),m={};b=0;for(c=l.length;b<c;++b)m[ea(l[b].layer)]=l[b];d=f.U();h={animate:!1,attributions:{},coordinateToPixelTransform:this.La,extent:g,focus:this.W?this.W:d.center,index:this.ub++,layerStates:m,layerStatesArray:l,logos:ua({},this.Le),pixelRatio:this.Me,pixelToCoordinateTransform:this.Je,postRenderFunctions:[],size:e,skippedFeatureUids:this.Ce,
-tileQueue:this.oa,time:a,usedTiles:{},viewState:d,viewHints:h,wantedTiles:{}}}if(h){a=this.S;b=e=0;for(c=a.length;b<c;++b)f=a[b],f(this,h)&&(a[e++]=f);a.length=e;h.extent=bc(d.center,d.resolution,d.rotation,h.size,g)}this.f=h;this.B.Pf(h);h&&(h.animate&&this.render(),Array.prototype.push.apply(this.Ka,h.postRenderFunctions),0!==this.S.length||h.viewHints[0]||h.viewHints[1]||Pb(h.extent,this.Aa)||(this.b(new Ge("moveend",this,h)),Eb(h.extent,this.Aa)));this.b(new Ge("postrender",this,h));setTimeout(this.Pk.bind(this),
-0)};k.ai=function(a){this.set(yl,a)};k.Tf=function(a){this.set(Al,a)};k.Xg=function(a){this.set(Bl,a)};k.Wo=function(a){this.set(zl,a)};k.ki=function(a){a=ea(a).toString();this.Ce[a]=!0;this.render()};k.Yc=function(){var a=this.uc();if(a){var b=getComputedStyle(a);this.Tf([a.offsetWidth-parseFloat(b.borderLeftWidth)-parseFloat(b.paddingLeft)-parseFloat(b.paddingRight)-parseFloat(b.borderRightWidth),a.offsetHeight-parseFloat(b.borderTopWidth)-parseFloat(b.paddingTop)-parseFloat(b.paddingBottom)-parseFloat(b.borderBottomWidth)])}else this.Tf(void 0)};
-k.oi=function(a){a=ea(a).toString();delete this.Ce[a];this.render()};
-function xl(a){var b=null;void 0!==a.keyboardEventTarget&&(b="string"===typeof a.keyboardEventTarget?document.getElementById(a.keyboardEventTarget):a.keyboardEventTarget);var c={},d={};if(void 0===a.logo||"boolean"===typeof a.logo&&a.logo)d["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"]="https://openlayers.org/";
-else{var e=a.logo;"string"===typeof e?d[e]="":e instanceof HTMLElement?d[ea(e).toString()]=e:e&&(ha("string"==typeof e.href,44),ha("string"==typeof e.src,45),d[e.src]=e.href)}e=a.layers instanceof xh?a.layers:new xh({layers:a.layers});c[yl]=e;c[Bl]=a.target;c[zl]=void 0!==a.view?a.view:new yd;var e=Zh,f;void 0!==a.renderer?(Array.isArray(a.renderer)?f=a.renderer:"string"===typeof a.renderer?f=[a.renderer]:ha(!1,46),0<=f.indexOf("dom")&&(f=f.concat(wl))):f=wl;var g,h;g=0;for(h=f.length;g<h;++g){var l=
-f[g];if("canvas"==l){if(jf){e=ok;break}}else if("webgl"==l&&af){e=tl;break}}void 0!==a.controls?Array.isArray(a.controls)?f=new me(a.controls.slice()):(ha(a.controls instanceof me,47),f=a.controls):f=Te();void 0!==a.interactions?Array.isArray(a.interactions)?g=new me(a.interactions.slice()):(ha(a.interactions instanceof me,48),g=a.interactions):g=uh();void 0!==a.overlays?Array.isArray(a.overlays)?a=new me(a.overlays.slice()):(ha(a.overlays instanceof me,49),a=a.overlays):a=new me;return{controls:f,
-interactions:g,keyboardEventTarget:b,logos:d,overlays:a,Lo:e,values:c}}var yl="layergroup",Al="size",Bl="target",zl="view";Hh();function Cl(a){Ua.call(this);this.j=a.id;this.o=void 0!==a.insertFirst?a.insertFirst:!0;this.s=void 0!==a.stopEvent?a.stopEvent:!0;this.f=document.createElement("DIV");this.f.className="ol-overlay-container";this.f.style.position="absolute";this.autoPan=void 0!==a.autoPan?a.autoPan:!1;this.i=void 0!==a.autoPanAnimation?a.autoPanAnimation:{};this.l=void 0!==a.autoPanMargin?a.autoPanMargin:20;this.a={Od:"",fe:"",Be:"",De:"",visible:!0};this.c=null;w(this,Wa(Dl),this.xk,this);w(this,Wa(El),this.Hk,this);
-w(this,Wa(Fl),this.Lk,this);w(this,Wa(Gl),this.Nk,this);w(this,Wa(Hl),this.Ok,this);void 0!==a.element&&this.Vh(a.element);this.ci(void 0!==a.offset?a.offset:[0,0]);this.fi(void 0!==a.positioning?a.positioning:Il);void 0!==a.position&&this.tf(a.position)}v(Cl,Ua);k=Cl.prototype;k.Td=function(){return this.get(Dl)};k.Hl=function(){return this.j};k.he=function(){return this.get(El)};k.Eg=function(){return this.get(Fl)};k.Yg=function(){return this.get(Gl)};k.Fg=function(){return this.get(Hl)};
-k.xk=function(){for(var a=this.f;a.lastChild;)a.removeChild(a.lastChild);(a=this.Td())&&this.f.appendChild(a)};k.Hk=function(){this.c&&(Fe(this.f),za(this.c),this.c=null);var a=this.he();a&&(this.c=w(a,"postrender",this.render,this),Jl(this),a=this.s?a.u:a.C,this.o?a.insertBefore(this.f,a.childNodes[0]||null):a.appendChild(this.f))};k.render=function(){Jl(this)};k.Lk=function(){Jl(this)};
-k.Nk=function(){Jl(this);if(void 0!==this.get(Gl)&&this.autoPan){var a=this.he();if(void 0!==a&&a.uc()){var b=Kl(a.uc(),a.kb()),c=this.Td(),d=c.offsetWidth,e=c.currentStyle||getComputedStyle(c),d=d+(parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)),e=c.offsetHeight,f=c.currentStyle||getComputedStyle(c),e=e+(parseInt(f.marginTop,10)+parseInt(f.marginBottom,10)),g=Kl(c,[d,e]),c=this.l;Ib(b,g)||(d=g[0]-b[0],e=b[2]-g[2],f=g[1]-b[1],g=b[3]-g[3],b=[0,0],0>d?b[0]=d-c:0>e&&(b[0]=Math.abs(e)+c),0>f?b[1]=
-f-c:0>g&&(b[1]=Math.abs(g)+c),0===b[0]&&0===b[1])||(c=a.$().bb(),d=a.Ca(c),b=[d[0]+b[0],d[1]+b[1]],this.i&&(this.i.source=c,a.ab(Nd(this.i))),a.$().rb(a.Ja(b)))}}};k.Ok=function(){Jl(this)};k.Vh=function(a){this.set(Dl,a)};k.setMap=function(a){this.set(El,a)};k.ci=function(a){this.set(Fl,a)};k.tf=function(a){this.set(Gl,a)};function Kl(a,b){var c=a.getBoundingClientRect(),d=c.left+window.pageXOffset,c=c.top+window.pageYOffset;return[d,c,d+b[0],c+b[1]]}k.fi=function(a){this.set(Hl,a)};
-function Ll(a,b){a.a.visible!==b&&(a.f.style.display=b?"":"none",a.a.visible=b)}
-function Jl(a){var b=a.he(),c=a.Yg();if(void 0!==b&&b.f&&void 0!==c){var c=b.Ca(c),d=b.kb(),b=a.f.style,e=a.Eg(),f=a.Fg(),g=e[0],e=e[1];if(f==Ml||f==Nl||f==Ol)""!==a.a.fe&&(a.a.fe=b.left=""),g=Math.round(d[0]-c[0]-g)+"px",a.a.Be!=g&&(a.a.Be=b.right=g);else{""!==a.a.Be&&(a.a.Be=b.right="");if(f==Pl||f==Ql||f==Rl)g-=a.f.offsetWidth/2;g=Math.round(c[0]+g)+"px";a.a.fe!=g&&(a.a.fe=b.left=g)}if(f==Sl||f==Pl||f==Ml)""!==a.a.De&&(a.a.De=b.top=""),c=Math.round(d[1]-c[1]-e)+"px",a.a.Od!=c&&(a.a.Od=b.bottom=
-c);else{""!==a.a.Od&&(a.a.Od=b.bottom="");if(f==Tl||f==Ql||f==Nl)e-=a.f.offsetHeight/2;c=Math.round(c[1]+e)+"px";a.a.De!=c&&(a.a.De=b.top=c)}Ll(a,!0)}else Ll(a,!1)}var Sl="bottom-left",Pl="bottom-center",Ml="bottom-right",Tl="center-left",Ql="center-center",Nl="center-right",Il="top-left",Rl="top-center",Ol="top-right",Dl="element",El="map",Fl="offset",Gl="position",Hl="positioning";function Ul(a){a=a?a:{};this.j=void 0!==a.collapsed?a.collapsed:!0;this.l=void 0!==a.collapsible?a.collapsible:!0;this.l||(this.j=!1);var b=void 0!==a.className?a.className:"ol-overviewmap",c=void 0!==a.tipLabel?a.tipLabel:"Overview map",d=void 0!==a.collapseLabel?a.collapseLabel:"\u00ab";"string"===typeof d?(this.o=document.createElement("span"),this.o.textContent=d):this.o=d;d=void 0!==a.label?a.label:"\u00bb";"string"===typeof d?(this.u=document.createElement("span"),this.u.textContent=d):this.u=
-d;var e=this.l&&!this.j?this.o:this.u,d=document.createElement("button");d.setAttribute("type","button");d.title=c;d.appendChild(e);w(d,"click",this.Vl,this);c=document.createElement("DIV");c.className="ol-overviewmap-map";var f=this.f=new H({controls:new me,interactions:new me,target:c,view:a.view});a.layers&&a.layers.forEach(function(a){f.gg(a)},this);e=document.createElement("DIV");e.className="ol-overviewmap-box";e.style.boxSizing="border-box";this.C=new Cl({position:[0,0],positioning:Sl,element:e});
-this.f.hg(this.C);e=document.createElement("div");e.className=b+" ol-unselectable ol-control"+(this.j&&this.l?" ol-collapsed":"")+(this.l?"":" ol-uncollapsible");e.appendChild(c);e.appendChild(d);He.call(this,{element:e,render:a.render?a.render:Vl,target:a.target})}v(Ul,He);k=Ul.prototype;
-k.setMap=function(a){var b=this.a;a!==b&&(b&&(b=b.$())&&Fa(b,Wa(Bd),this.ce,this),He.prototype.setMap.call(this,a),a&&(this.s.push(w(a,"propertychange",this.Ik,this)),0===this.f.Wg().yc()&&this.f.ai(a.tc()),a=a.$()))&&(w(a,Wa(Bd),this.ce,this),Gd(a)&&(this.f.Yc(),Wl(this)))};k.Ik=function(a){a.key===zl&&((a=a.oldValue)&&Fa(a,Wa(Bd),this.ce,this),a=this.a.$(),w(a,Wa(Bd),this.ce,this))};k.ce=function(){this.f.$().ie(this.a.$().Pa())};
-function Vl(){var a=this.a,b=this.f;if(a.f&&b.f){var c=a.kb(),a=a.$().Jc(c),d=b.kb(),c=b.$().Jc(d),e=b.Ca(Wb(a)),f=b.Ca(Tb(a)),b=Math.abs(e[0]-f[0]),e=Math.abs(e[1]-f[1]),f=d[0],d=d[1];b<.1*f||e<.1*d||b>.75*f||e>.75*d?Wl(this):Ib(c,a)||(a=this.f,c=this.a.$(),a.$().rb(c.bb()))}Xl(this)}function Wl(a){var b=a.a;a=a.f;var c=b.kb(),b=b.$().Jc(c),c=a.kb();a=a.$();ec(b,1/(.1*Math.pow(2,Math.log(7.5)/Math.LN2/2)));a.$e(b,c)}
-function Xl(a){var b=a.a,c=a.f;if(b.f&&c.f){var d=b.kb(),e=b.$(),f=c.$(),c=e.Pa(),b=a.C,g=a.C.Td(),h=e.Jc(d),d=f.Ma(),e=Sb(h),f=Vb(h),l;if(a=a.a.$().bb())l=[e[0]-a[0],e[1]-a[1]],wb(l,c),rb(l,a);b.tf(l);g&&(g.style.width=Math.abs((e[0]-f[0])/d)+"px",g.style.height=Math.abs((f[1]-e[1])/d)+"px")}}k.Vl=function(a){a.preventDefault();Yl(this)};
-function Yl(a){a.element.classList.toggle("ol-collapsed");a.j?Ee(a.o,a.u):Ee(a.u,a.o);a.j=!a.j;var b=a.f;a.j||b.f||(b.Yc(),Wl(a),Ea(b,"postrender",function(){Xl(this)},a))}k.Ul=function(){return this.l};k.Xl=function(a){this.l!==a&&(this.l=a,this.element.classList.toggle("ol-uncollapsible"),!a&&this.j&&Yl(this))};k.Wl=function(a){this.l&&this.j!==a&&Yl(this)};k.Tl=function(){return this.j};k.ck=function(){return this.f};function Zl(a){a=a?a:{};var b=void 0!==a.className?a.className:"ol-scale-line";this.l=document.createElement("DIV");this.l.className=b+"-inner";this.f=document.createElement("DIV");this.f.className=b+" ol-unselectable";this.f.appendChild(this.l);this.u=null;this.o=void 0!==a.minWidth?a.minWidth:64;this.j=!1;this.B=void 0;this.C="";He.call(this,{element:this.f,render:a.render?a.render:$l,target:a.target});w(this,Wa(am),this.S,this);this.G(a.units||bm)}v(Zl,He);var cm=[1,2,5];Zl.prototype.yb=function(){return this.get(am)};
-function $l(a){(a=a.frameState)?this.u=a.viewState:this.u=null;dm(this)}Zl.prototype.S=function(){dm(this)};Zl.prototype.G=function(a){this.set(am,a)};
-function dm(a){var b=a.u;if(b){var c=b.projection,d=c.dc(),b=c.getPointResolution(b.resolution,b.center)*d,d=a.o*b,c="",e=a.yb();e==em?(c=kc.degrees,b/=c,d<c/60?(c="\u2033",b*=3600):d<c?(c="\u2032",b*=60):c="\u00b0"):e==fm?.9144>d?(c="in",b/=.0254):1609.344>d?(c="ft",b/=.3048):(c="mi",b/=1609.344):e==gm?(b/=1852,c="nm"):e==bm?1>d?(c="mm",b*=1E3):1E3>d?c="m":(c="km",b/=1E3):e==hm?.9144>d?(c="in",b*=39.37):1609.344>d?(c="ft",b/=.30480061):(c="mi",b/=1609.3472):ha(!1,33);for(var e=3*Math.floor(Math.log(a.o*
-b)/Math.log(10)),f;;){f=cm[(e%3+3)%3]*Math.pow(10,Math.floor(e/3));d=Math.round(f/b);if(isNaN(d)){a.f.style.display="none";a.j=!1;return}if(d>=a.o)break;++e}b=f+" "+c;a.C!=b&&(a.l.innerHTML=b,a.C=b);a.B!=d&&(a.l.style.width=d+"px",a.B=d);a.j||(a.f.style.display="",a.j=!0)}else a.j&&(a.f.style.display="none",a.j=!1)}var am="units",em="degrees",fm="imperial",gm="nautical",bm="metric",hm="us";function im(a){a=a?a:{};this.f=void 0;this.j=jm;this.u=[];this.B=this.o=0;this.W=null;this.fa=!1;this.Z=void 0!==a.duration?a.duration:200;var b=void 0!==a.className?a.className:"ol-zoomslider",c=document.createElement("button");c.setAttribute("type","button");c.className=b+"-thumb ol-unselectable";var d=document.createElement("div");d.className=b+" ol-unselectable ol-control";d.appendChild(c);this.l=new Of(d);w(this.l,"pointerdown",this.wk,this);w(this.l,"pointermove",this.Hg,this);w(this.l,"pointerup",
-this.Ig,this);w(d,"click",this.vk,this);w(c,"click",La);He.call(this,{element:d,render:a.render?a.render:km})}v(im,He);im.prototype.la=function(){Ja(this.l);He.prototype.la.call(this)};var jm=0;k=im.prototype;k.setMap=function(a){He.prototype.setMap.call(this,a);a&&a.render()};
-function km(a){if(a.frameState){if(!this.fa){var b=this.element,c=b.offsetWidth,d=b.offsetHeight,e=b.firstElementChild,f=getComputedStyle(e),b=e.offsetWidth+parseFloat(f.marginRight)+parseFloat(f.marginLeft),e=e.offsetHeight+parseFloat(f.marginTop)+parseFloat(f.marginBottom);this.W=[b,e];c>d?(this.j=1,this.B=c-b):(this.j=jm,this.o=d-e);this.fa=!0}a=a.frameState.viewState.resolution;a!==this.f&&(this.f=a,lm(this,a))}}
-k.vk=function(a){var b=this.a,c=b.$(),d=c.Ma();b.ab(Pd({resolution:d,duration:this.Z,easing:Jd}));a=mm(this,ia(1===this.j?(a.offsetX-this.W[0]/2)/this.B:(a.offsetY-this.W[1]/2)/this.o,0,1));c.Yb(c.constrainResolution(a))};
-k.wk=function(a){if(!this.C&&a.b.target===this.element.firstElementChild&&(Hd(this.a.$(),1),this.G=a.clientX,this.S=a.clientY,this.C=!0,0===this.u.length)){a=this.Hg;var b=this.Ig;this.u.push(w(document,"mousemove",a,this),w(document,"touchmove",a,this),w(document,"pointermove",a,this),w(document,"mouseup",b,this),w(document,"touchend",b,this),w(document,"pointerup",b,this))}};
-k.Hg=function(a){if(this.C){var b=this.element.firstElementChild;this.f=mm(this,ia(1===this.j?(a.clientX-this.G+parseInt(b.style.left,10))/this.B:(a.clientY-this.S+parseInt(b.style.top,10))/this.o,0,1));this.a.$().Yb(this.f);lm(this,this.f);this.G=a.clientX;this.S=a.clientY}};k.Ig=function(){if(this.C){var a=this.a,b=a.$();Hd(b,-1);a.ab(Pd({resolution:this.f,duration:this.Z,easing:Jd}));a=b.constrainResolution(this.f);b.Yb(a);this.C=!1;this.S=this.G=void 0;this.u.forEach(za);this.u.length=0}};
-function lm(a,b){var c;c=1-Fd(a.a.$())(b);var d=a.element.firstElementChild;1==a.j?d.style.left=a.B*c+"px":d.style.top=a.o*c+"px"}function mm(a,b){return Ed(a.a.$())(1-b)};function nm(a){a=a?a:{};this.f=a.extent?a.extent:null;var b=void 0!==a.className?a.className:"ol-zoom-extent",c=void 0!==a.label?a.label:"E",d=void 0!==a.tipLabel?a.tipLabel:"Fit to extent",e=document.createElement("button");e.setAttribute("type","button");e.title=d;e.appendChild("string"===typeof c?document.createTextNode(c):c);w(e,"click",this.j,this);c=document.createElement("div");c.className=b+" ol-unselectable ol-control";c.appendChild(e);He.call(this,{element:c,target:a.target})}v(nm,He);
-nm.prototype.j=function(a){a.preventDefault();var b=this.a;a=b.$();var c=this.f?this.f:a.l.D(),b=b.kb();a.$e(c,b)};function om(a){Ua.call(this);a=a?a:{};this.a=null;w(this,Wa(pm),this.ul,this);this.rf(void 0!==a.tracking?a.tracking:!1)}v(om,Ua);k=om.prototype;k.la=function(){this.rf(!1);Ua.prototype.la.call(this)};
-k.Sn=function(a){if(null!==a.alpha){var b=na(a.alpha);this.set(qm,b);"boolean"===typeof a.absolute&&a.absolute?this.set(rm,b):"number"===typeof a.webkitCompassHeading&&-1!=a.webkitCompassAccuracy&&this.set(rm,na(a.webkitCompassHeading))}null!==a.beta&&this.set(sm,na(a.beta));null!==a.gamma&&this.set(tm,na(a.gamma));this.v()};k.Cj=function(){return this.get(qm)};k.Fj=function(){return this.get(sm)};k.Mj=function(){return this.get(tm)};k.tl=function(){return this.get(rm)};k.Sg=function(){return this.get(pm)};
-k.ul=function(){if(kf){var a=this.Sg();a&&!this.a?this.a=w(window,"deviceorientation",this.Sn,this):a||null===this.a||(za(this.a),this.a=null)}};k.rf=function(a){this.set(pm,a)};var qm="alpha",sm="beta",tm="gamma",rm="heading",pm="tracking";function I(a){Ua.call(this);this.a=void 0;this.f="geometry";this.i=null;this.j=void 0;this.c=null;w(this,Wa(this.f),this.ae,this);void 0!==a&&(a instanceof Mc||!a?this.Oa(a):this.H(a))}v(I,Ua);k=I.prototype;k.clone=function(){var a=new I(this.N());a.Dc(this.f);var b=this.V();b&&a.Oa(b.clone());(b=this.i)&&a.sf(b);return a};k.V=function(){return this.get(this.f)};k.vl=function(){return this.a};k.Oj=function(){return this.f};k.wl=function(){return this.i};k.zc=function(){return this.j};k.xl=function(){this.v()};
-k.ae=function(){this.c&&(za(this.c),this.c=null);var a=this.V();a&&(this.c=w(a,"change",this.xl,this));this.v()};k.Oa=function(a){this.set(this.f,a)};k.sf=function(a){this.j=(this.i=a)?um(a):void 0;this.v()};k.Wb=function(a){this.a=a;this.v()};k.Dc=function(a){Fa(this,Wa(this.f),this.ae,this);this.f=a;w(this,Wa(this.f),this.ae,this);this.ae()};function um(a){if("function"!==typeof a){var b;Array.isArray(a)?b=a:(ha(a instanceof yi,41),b=[a]);a=function(){return b}}return a};var vm=document.implementation.createDocument("","",null);function wm(a,b){return vm.createElementNS(a,b)}function xm(a,b){return ym(a,b,[]).join("")}function ym(a,b,c){if(a.nodeType==Node.CDATA_SECTION_NODE||a.nodeType==Node.TEXT_NODE)b?c.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g,"")):c.push(a.nodeValue);else for(a=a.firstChild;a;a=a.nextSibling)ym(a,b,c);return c}function zm(a){return a instanceof Document}function Am(a){return a instanceof Node}
-function Bm(a){return(new DOMParser).parseFromString(a,"application/xml")}function Cm(a,b){return function(c,d){var e=a.call(b,c,d);void 0!==e&&bb(d[d.length-1],e)}}function Dm(a,b){return function(c,d){var e=a.call(void 0!==b?b:this,c,d);void 0!==e&&d[d.length-1].push(e)}}function Em(a,b){return function(c,d){var e=a.call(void 0!==b?b:this,c,d);void 0!==e&&(d[d.length-1]=e)}}
-function Fm(a){return function(b,c){var d=a.call(this,b,c);if(void 0!==d){var e=c[c.length-1],f=b.localName,g;f in e?g=e[f]:g=e[f]=[];g.push(d)}}}function J(a,b){return function(c,d){var e=a.call(this,c,d);void 0!==e&&(d[d.length-1][void 0!==b?b:c.localName]=e)}}function L(a,b){return function(c,d,e){a.call(void 0!==b?b:this,c,d,e);e[e.length-1].node.appendChild(c)}}
-function Gm(a){var b,c;return function(d,e,f){if(!b){b={};var g={};g[d.localName]=a;b[d.namespaceURI]=g;c=Hm(d.localName)}Im(b,c,e,f)}}function Hm(a,b){return function(c,d,e){c=d[d.length-1].node;d=a;void 0===d&&(d=e);e=b;void 0===b&&(e=c.namespaceURI);return wm(e,d)}}var Jm=Hm();function Km(a,b){for(var c=b.length,d=Array(c),e=0;e<c;++e)d[e]=a[b[e]];return d}function M(a,b,c){c=void 0!==c?c:{};var d,e;d=0;for(e=a.length;d<e;++d)c[a[d]]=b;return c}
-function Lm(a,b,c,d){for(b=b.firstElementChild;b;b=b.nextElementSibling){var e=a[b.namespaceURI];void 0!==e&&(e=e[b.localName])&&e.call(d,b,c)}}function N(a,b,c,d,e){d.push(a);Lm(b,c,d,e);return d.pop()}function Im(a,b,c,d,e,f){for(var g=(void 0!==e?e:c).length,h,l,m=0;m<g;++m)h=c[m],void 0!==h&&(l=b.call(f,h,d,void 0!==e?e[m]:void 0),void 0!==l&&a[l.namespaceURI][l.localName].call(f,l,h,d))}function Mm(a,b,c,d,e,f,g){e.push(a);Im(b,c,d,e,f,g);e.pop()};function Nm(a,b,c,d){return function(e,f,g){var h=new XMLHttpRequest;h.open("GET","function"===typeof a?a(e,f,g):a,!0);"arraybuffer"==b.X()&&(h.responseType="arraybuffer");h.onload=function(){if(!h.status||200<=h.status&&300>h.status){var a=b.X(),e;"json"==a||"text"==a?e=h.responseText:"xml"==a?(e=h.responseXML)||(e=Bm(h.responseText)):"arraybuffer"==a&&(e=h.response);e?c.call(this,b.Ha(e,{featureProjection:g}),b.Sa(e)):d.call(this)}else d.call(this)}.bind(this);h.send()}}
-function Om(a,b){return Nm(a,b,function(a,b){this.uf(b);this.Wh(a)},function(){this.state=3;hg(this)})}function Pm(a,b){return Nm(a,b,function(a){this.Ic(a)},da)};function Qm(){this.j=this.defaultDataProjection=null}function Rm(a,b,c){var d;c&&(d={dataProjection:c.dataProjection?c.dataProjection:a.Sa(b),featureProjection:c.featureProjection});return Sm(a,d)}function Sm(a,b){return ua({dataProjection:a.defaultDataProjection,featureProjection:a.j},b)}
-function Tm(a,b,c){var d=c?qc(c.featureProjection):null,e=c?qc(c.dataProjection):null,f;d&&e&&!Hc(d,e)?a instanceof Mc?f=(b?a.clone():a).lb(b?d:e,b?e:d):f=Lc(b?a.slice():a,b?d:e,b?e:d):f=a;if(b&&c&&c.decimals){var g=Math.pow(10,c.decimals);a=function(a){for(var b=0,c=a.length;b<c;++b)a[b]=Math.round(a[b]*g)/g;return a};Array.isArray(f)?a(f):f.oc(a)}return f};function Um(){Qm.call(this)}v(Um,Qm);function Vm(a){return"string"===typeof a?(a=JSON.parse(a))?a:null:null!==a?a:null}k=Um.prototype;k.X=function(){return"json"};k.Ub=function(a,b){return this.Vc(Vm(a),Rm(this,a,b))};k.Ha=function(a,b){return this.Gf(Vm(a),Rm(this,a,b))};k.Wc=function(a,b){return this.Ih(Vm(a),Rm(this,a,b))};k.Sa=function(a){return this.Oh(Vm(a))};k.Fd=function(a,b){return JSON.stringify(this.Zc(a,b))};k.$b=function(a,b){return JSON.stringify(this.Ge(a,b))};
-k.$c=function(a,b){return JSON.stringify(this.He(a,b))};function Wm(a,b,c,d,e,f){var g=NaN,h=NaN,l=(c-b)/d;if(0!==l)if(1==l)g=a[b],h=a[b+1];else if(2==l)g=(1-e)*a[b]+e*a[b+d],h=(1-e)*a[b+1]+e*a[b+d+1];else{var h=a[b],l=a[b+1],m=0,g=[0],n;for(n=b+d;n<c;n+=d){var p=a[n],q=a[n+1],m=m+Math.sqrt((p-h)*(p-h)+(q-l)*(q-l));g.push(m);h=p;l=q}c=e*m;l=0;m=g.length;for(n=!1;l<m;)e=l+(m-l>>1),h=+Ya(g[e],c),0>h?l=e+1:(m=e,n=!h);e=n?l:~l;0>e?(c=(c-g[-e-2])/(g[-e-1]-g[-e-2]),b+=(-e-2)*d,g=pa(a[b],a[b+d],c),h=pa(a[b+1],a[b+d+1],c)):(g=a[b+e*d],h=a[b+e*d+1])}return f?(f[0]=
-g,f[1]=h,f):[g,h]}function Xm(a,b,c,d,e,f){if(c==b)return null;if(e<a[b+d-1])return f?(c=a.slice(b,b+d),c[d-1]=e,c):null;if(a[c-1]<e)return f?(c=a.slice(c-d,c),c[d-1]=e,c):null;if(e==a[b+d-1])return a.slice(b,b+d);b/=d;for(c/=d;b<c;)f=b+c>>1,e<a[(f+1)*d-1]?c=f:b=f+1;c=a[b*d-1];if(e==c)return a.slice((b-1)*d,(b-1)*d+d);f=(e-c)/(a[(b+1)*d-1]-c);c=[];var g;for(g=0;g<d-1;++g)c.push(pa(a[(b-1)*d+g],a[b*d+g],f));c.push(e);return c}
-function Ym(a,b,c,d,e,f){var g=0;if(f)return Xm(a,g,b[b.length-1],c,d,e);if(d<a[c-1])return e?(a=a.slice(0,c),a[c-1]=d,a):null;if(a[a.length-1]<d)return e?(a=a.slice(a.length-c),a[c-1]=d,a):null;e=0;for(f=b.length;e<f;++e){var h=b[e];if(g!=h){if(d<a[g+c-1])break;if(d<=a[h-1])return Xm(a,g,h,c,d,!1);g=h}}return null};function O(a,b){Oc.call(this);this.c=null;this.C=this.B=this.l=-1;this.ma(a,b)}v(O,Oc);k=O.prototype;k.kj=function(a){this.A?bb(this.A,a):this.A=a.slice();this.v()};k.clone=function(){var a=new O(null);a.aa(this.ia,this.A.slice());return a};k.vb=function(a,b,c,d){if(d<Fb(this.D(),a,b))return d;this.C!=this.g&&(this.B=Math.sqrt(Vc(this.A,0,this.A.length,this.a,0)),this.C=this.g);return Xc(this.A,0,this.A.length,this.a,this.B,!1,a,b,c,d)};
-k.zj=function(a,b){return md(this.A,0,this.A.length,this.a,a,b)};k.$l=function(a,b){return"XYM"!=this.ia&&"XYZM"!=this.ia?null:Xm(this.A,0,this.A.length,this.a,a,void 0!==b?b:!1)};k.Y=function(){return cd(this.A,0,this.A.length,this.a)};k.vg=function(a,b){return Wm(this.A,0,this.A.length,this.a,a,b)};k.am=function(){var a=this.A,b=this.a,c=a[0],d=a[1],e=0,f;for(f=0+b;f<this.A.length;f+=b)var g=a[f],h=a[f+1],e=e+Math.sqrt((g-c)*(g-c)+(h-d)*(h-d)),c=g,d=h;return e};
-function Ri(a){a.l!=a.g&&(a.c=a.vg(.5,a.c),a.l=a.g);return a.c}k.Mc=function(a){var b=[];b.length=ed(this.A,0,this.A.length,this.a,a,b,0);a=new O(null);a.aa("XY",b);return a};k.X=function(){return"LineString"};k.Na=function(a){return nd(this.A,0,this.A.length,this.a,a)};k.ma=function(a,b){a?(Rc(this,b,a,1),this.A||(this.A=[]),this.A.length=$c(this.A,0,a,this.a),this.v()):this.aa("XY",null)};k.aa=function(a,b){Qc(this,a,b);this.v()};function P(a,b){Oc.call(this);this.c=[];this.l=this.C=-1;this.ma(a,b)}v(P,Oc);k=P.prototype;k.lj=function(a){this.A?bb(this.A,a.ka().slice()):this.A=a.ka().slice();this.c.push(this.A.length);this.v()};k.clone=function(){var a=new P(null);a.aa(this.ia,this.A.slice(),this.c.slice());return a};k.vb=function(a,b,c,d){if(d<Fb(this.D(),a,b))return d;this.l!=this.g&&(this.C=Math.sqrt(Wc(this.A,0,this.c,this.a,0)),this.l=this.g);return Yc(this.A,0,this.c,this.a,this.C,!1,a,b,c,d)};
-k.cm=function(a,b,c){return"XYM"!=this.ia&&"XYZM"!=this.ia||0===this.A.length?null:Ym(this.A,this.c,this.a,a,void 0!==b?b:!1,void 0!==c?c:!1)};k.Y=function(){return dd(this.A,0,this.c,this.a)};k.Eb=function(){return this.c};k.Uj=function(a){if(0>a||this.c.length<=a)return null;var b=new O(null);b.aa(this.ia,this.A.slice(0===a?0:this.c[a-1],this.c[a]));return b};
-k.od=function(){var a=this.A,b=this.c,c=this.ia,d=[],e=0,f,g;f=0;for(g=b.length;f<g;++f){var h=b[f],l=new O(null);l.aa(c,a.slice(e,h));d.push(l);e=h}return d};function Si(a){var b=[],c=a.A,d=0,e=a.c;a=a.a;var f,g;f=0;for(g=e.length;f<g;++f){var h=e[f],d=Wm(c,d,h,a,.5);bb(b,d);d=h}return b}k.Mc=function(a){var b=[],c=[],d=this.A,e=this.c,f=this.a,g=0,h=0,l,m;l=0;for(m=e.length;l<m;++l){var n=e[l],h=ed(d,g,n,f,a,b,h);c.push(h);g=n}b.length=h;a=new P(null);a.aa("XY",b,c);return a};k.X=function(){return"MultiLineString"};
-k.Na=function(a){a:{var b=this.A,c=this.c,d=this.a,e=0,f,g;f=0;for(g=c.length;f<g;++f){if(nd(b,e,c[f],d,a)){a=!0;break a}e=c[f]}a=!1}return a};k.ma=function(a,b){if(a){Rc(this,b,a,2);this.A||(this.A=[]);var c=ad(this.A,0,a,this.a,this.c);this.A.length=0===c.length?0:c[c.length-1];this.v()}else this.aa("XY",null,this.c)};k.aa=function(a,b,c){Qc(this,a,b);this.c=c;this.v()};
-function Zm(a,b){var c=a.ia,d=[],e=[],f,g;f=0;for(g=b.length;f<g;++f){var h=b[f];0===f&&(c=h.ia);bb(d,h.ka());e.push(d.length)}a.aa(c,d,e)};function Q(a,b){Oc.call(this);this.ma(a,b)}v(Q,Oc);k=Q.prototype;k.nj=function(a){this.A?bb(this.A,a.ka()):this.A=a.ka().slice();this.v()};k.clone=function(){var a=new Q(null);a.aa(this.ia,this.A.slice());return a};k.vb=function(a,b,c,d){if(d<Fb(this.D(),a,b))return d;var e=this.A,f=this.a,g,h,l;g=0;for(h=e.length;g<h;g+=f)if(l=ma(a,b,e[g],e[g+1]),l<d){d=l;for(l=0;l<f;++l)c[l]=e[g+l];c.length=f}return d};k.Y=function(){return cd(this.A,0,this.A.length,this.a)};
-k.ek=function(a){var b=this.A?this.A.length/this.a:0;if(0>a||b<=a)return null;b=new A(null);b.aa(this.ia,this.A.slice(a*this.a,(a+1)*this.a));return b};k.je=function(){var a=this.A,b=this.ia,c=this.a,d=[],e,f;e=0;for(f=a.length;e<f;e+=c){var g=new A(null);g.aa(b,a.slice(e,e+c));d.push(g)}return d};k.X=function(){return"MultiPoint"};k.Na=function(a){var b=this.A,c=this.a,d,e,f,g;d=0;for(e=b.length;d<e;d+=c)if(f=b[d],g=b[d+1],Hb(a,f,g))return!0;return!1};
-k.ma=function(a,b){a?(Rc(this,b,a,1),this.A||(this.A=[]),this.A.length=$c(this.A,0,a,this.a),this.v()):this.aa("XY",null)};k.aa=function(a,b){Qc(this,a,b);this.v()};function R(a,b){Oc.call(this);this.c=[];this.C=-1;this.B=null;this.P=this.G=this.S=-1;this.l=null;this.ma(a,b)}v(R,Oc);k=R.prototype;k.oj=function(a){if(this.A){var b=this.A.length;bb(this.A,a.ka());a=a.Eb().slice();var c,d;c=0;for(d=a.length;c<d;++c)a[c]+=b}else this.A=a.ka().slice(),a=a.Eb().slice(),this.c.push();this.c.push(a);this.v()};k.clone=function(){for(var a=new R(null),b=this.c.length,c=Array(b),d=0;d<b;++d)c[d]=this.c[d].slice();$m(a,this.ia,this.A.slice(),c);return a};
-k.vb=function(a,b,c,d){if(d<Fb(this.D(),a,b))return d;if(this.G!=this.g){var e=this.c,f=0,g=0,h,l;h=0;for(l=e.length;h<l;++h)var m=e[h],g=Wc(this.A,f,m,this.a,g),f=m[m.length-1];this.S=Math.sqrt(g);this.G=this.g}e=Ti(this);f=this.c;g=this.a;h=this.S;l=0;var m=[NaN,NaN],n,p;n=0;for(p=f.length;n<p;++n){var q=f[n];d=Yc(e,l,q,g,h,!0,a,b,c,d,m);l=q[q.length-1]}return d};
-k.Ac=function(a,b){var c;a:{c=Ti(this);var d=this.c,e=this.a,f=0;if(0!==d.length){var g,h;g=0;for(h=d.length;g<h;++g){var l=d[g];if(kd(c,f,l,e,a,b)){c=!0;break a}f=l[l.length-1]}}c=!1}return c};k.dm=function(){var a=Ti(this),b=this.c,c=0,d=0,e,f;e=0;for(f=b.length;e<f;++e)var g=b[e],d=d+Tc(a,c,g,this.a),c=g[g.length-1];return d};
-k.Y=function(a){var b;void 0!==a?(b=Ti(this).slice(),sd(b,this.c,this.a,a)):b=this.A;a=b;b=this.c;var c=this.a,d=0,e=[],f=0,g,h;g=0;for(h=b.length;g<h;++g){var l=b[g];e[f++]=dd(a,d,l,c,e[f]);d=l[l.length-1]}e.length=f;return e};
-function Ui(a){if(a.C!=a.g){var b=a.A,c=a.c,d=a.a,e=0,f=[],g,h;g=0;for(h=c.length;g<h;++g){var l=c[g],e=Mb(b,e,l[0],d);f.push((e[0]+e[2])/2,(e[1]+e[3])/2);e=l[l.length-1]}b=Ti(a);c=a.c;d=a.a;g=0;h=[];l=0;for(e=c.length;l<e;++l){var m=c[l];h=ld(b,g,m,d,f,2*l,h);g=m[m.length-1]}a.B=h;a.C=a.g}return a.B}k.Rj=function(){var a=new Q(null);a.aa("XY",Ui(this).slice());return a};
-function Ti(a){if(a.P!=a.g){var b=a.A,c;a:{c=a.c;var d,e;d=0;for(e=c.length;d<e;++d)if(!qd(b,c[d],a.a,void 0)){c=!1;break a}c=!0}c?a.l=b:(a.l=b.slice(),a.l.length=sd(a.l,a.c,a.a));a.P=a.g}return a.l}k.Mc=function(a){var b=[],c=[],d=this.A,e=this.c,f=this.a;a=Math.sqrt(a);var g=0,h=0,l,m;l=0;for(m=e.length;l<m;++l){var n=e[l],p=[],h=fd(d,g,n,f,a,b,h,p);c.push(p);g=n[n.length-1]}b.length=h;d=new R(null);$m(d,"XY",b,c);return d};
-k.gk=function(a){if(0>a||this.c.length<=a)return null;var b;0===a?b=0:(b=this.c[a-1],b=b[b.length-1]);a=this.c[a].slice();var c=a[a.length-1];if(0!==b){var d,e;d=0;for(e=a.length;d<e;++d)a[d]-=b}d=new B(null);d.aa(this.ia,this.A.slice(b,c),a);return d};k.Wd=function(){var a=this.ia,b=this.A,c=this.c,d=[],e=0,f,g,h,l;f=0;for(g=c.length;f<g;++f){var m=c[f].slice(),n=m[m.length-1];if(0!==e)for(h=0,l=m.length;h<l;++h)m[h]-=e;h=new B(null);h.aa(a,b.slice(e,n),m);d.push(h);e=n}return d};k.X=function(){return"MultiPolygon"};
-k.Na=function(a){a:{var b=Ti(this),c=this.c,d=this.a,e=0,f,g;f=0;for(g=c.length;f<g;++f){var h=c[f];if(od(b,e,h,d,a)){a=!0;break a}e=h[h.length-1]}a=!1}return a};k.ma=function(a,b){if(a){Rc(this,b,a,3);this.A||(this.A=[]);var c=this.A,d=this.a,e=this.c,f=0,e=e?e:[],g=0,h,l;h=0;for(l=a.length;h<l;++h)f=ad(c,f,a[h],d,e[g]),e[g++]=f,f=f[f.length-1];e.length=g;0===e.length?this.A.length=0:(c=e[e.length-1],this.A.length=0===c.length?0:c[c.length-1]);this.v()}else $m(this,"XY",null,this.c)};
-function $m(a,b,c,d){Qc(a,b,c);a.c=d;a.v()}function an(a,b){var c=a.ia,d=[],e=[],f,g,h;f=0;for(g=b.length;f<g;++f){var l=b[f];0===f&&(c=l.ia);var m=d.length;h=l.Eb();var n,p;n=0;for(p=h.length;n<p;++n)h[n]+=m;bb(d,l.ka());e.push(h)}$m(a,c,d,e)};function bn(a){a=a?a:{};Qm.call(this);this.b=a.geometryName}v(bn,Um);
-function cn(a,b){if(!a)return null;var c;if("number"===typeof a.x&&"number"===typeof a.y)c="Point";else if(a.points)c="MultiPoint";else if(a.paths)c=1===a.paths.length?"LineString":"MultiLineString";else if(a.rings){var d=a.rings,e=dn(a),f=[];c=[];var g,h;g=0;for(h=d.length;g<h;++g){var l=ab(d[g]);pd(l,0,l.length,e.length)?f.push([d[g]]):c.push(d[g])}for(;c.length;){d=c.shift();e=!1;for(g=f.length-1;0<=g;g--)if(Ib((new gd(f[g][0])).D(),(new gd(d)).D())){f[g].push(d);e=!0;break}e||f.push([d.reverse()])}a=
-ua({},a);1===f.length?(c="Polygon",a.rings=f[0]):(c="MultiPolygon",a.rings=f)}return Tm((0,en[c])(a),!1,b)}function dn(a){var b="XY";!0===a.hasZ&&!0===a.hasM?b="XYZM":!0===a.hasZ?b="XYZ":!0===a.hasM&&(b="XYM");return b}function fn(a){a=a.ia;return{hasZ:"XYZ"===a||"XYZM"===a,hasM:"XYM"===a||"XYZM"===a}}
-var en={Point:function(a){return void 0!==a.m&&void 0!==a.z?new A([a.x,a.y,a.z,a.m],"XYZM"):void 0!==a.z?new A([a.x,a.y,a.z],"XYZ"):void 0!==a.m?new A([a.x,a.y,a.m],"XYM"):new A([a.x,a.y])},LineString:function(a){return new O(a.paths[0],dn(a))},Polygon:function(a){return new B(a.rings,dn(a))},MultiPoint:function(a){return new Q(a.points,dn(a))},MultiLineString:function(a){return new P(a.paths,dn(a))},MultiPolygon:function(a){return new R(a.rings,dn(a))}},gn={Point:function(a){var b=a.Y(),c;a=a.ia;
-"XYZ"===a?c={x:b[0],y:b[1],z:b[2]}:"XYM"===a?c={x:b[0],y:b[1],m:b[2]}:"XYZM"===a?c={x:b[0],y:b[1],z:b[2],m:b[3]}:"XY"===a?c={x:b[0],y:b[1]}:ha(!1,34);return c},LineString:function(a){var b=fn(a);return{hasZ:b.hasZ,hasM:b.hasM,paths:[a.Y()]}},Polygon:function(a){var b=fn(a);return{hasZ:b.hasZ,hasM:b.hasM,rings:a.Y(!1)}},MultiPoint:function(a){var b=fn(a);return{hasZ:b.hasZ,hasM:b.hasM,points:a.Y()}},MultiLineString:function(a){var b=fn(a);return{hasZ:b.hasZ,hasM:b.hasM,paths:a.Y()}},MultiPolygon:function(a){var b=
-fn(a);a=a.Y(!1);for(var c=[],d=0;d<a.length;d++)for(var e=a[d].length-1;0<=e;e--)c.push(a[d][e]);return{hasZ:b.hasZ,hasM:b.hasM,rings:c}}};k=bn.prototype;k.Vc=function(a,b){var c=cn(a.geometry,b),d=new I;this.b&&d.Dc(this.b);d.Oa(c);b&&b.mf&&a.attributes[b.mf]&&d.Wb(a.attributes[b.mf]);a.attributes&&d.H(a.attributes);return d};
-k.Gf=function(a,b){var c=b?b:{};if(a.features){var d=[],e=a.features,f,g;c.mf=a.objectIdFieldName;f=0;for(g=e.length;f<g;++f)d.push(this.Vc(e[f],c));return d}return[this.Vc(a,c)]};k.Ih=function(a,b){return cn(a,b)};k.Oh=function(a){return a.spatialReference&&a.spatialReference.wkid?qc("EPSG:"+a.spatialReference.wkid):null};function hn(a,b){return(0,gn[a.X()])(Tm(a,!0,b),b)}k.He=function(a,b){return hn(a,Sm(this,b))};
-k.Zc=function(a,b){b=Sm(this,b);var c={},d=a.V();d&&(c.geometry=hn(d,b));d=a.N();delete d[a.f];c.attributes=xa(d)?{}:d;b&&b.featureProjection&&(c.spatialReference={wkid:qc(b.featureProjection).eb.split(":").pop()});return c};k.Ge=function(a,b){b=Sm(this,b);var c=[],d,e;d=0;for(e=a.length;d<e;++d)c.push(this.Zc(a[d],b));return{features:c}};function jn(a){this.Hb=a};function kn(a){this.Hb=a}v(kn,jn);function ln(a,b,c){this.Hb=a;this.b=b;this.a=c}v(ln,kn);function mn(a,b){ln.call(this,"And",a,b)}v(mn,ln);function nn(a,b,c){this.Hb="BBOX";this.geometryName=a;this.extent=b;this.srsName=c}v(nn,jn);function on(a,b){this.Hb=a;this.b=b}v(on,jn);function pn(a,b,c,d){on.call(this,a,b);this.g=c;this.a=d}v(pn,on);function qn(a,b,c){pn.call(this,"PropertyIsEqualTo",a,b,c)}v(qn,pn);function rn(a,b){pn.call(this,"PropertyIsGreaterThan",a,b)}v(rn,pn);function sn(a,b){pn.call(this,"PropertyIsGreaterThanOrEqualTo",a,b)}v(sn,pn);function tn(a,b,c,d){this.Hb=a;this.geometryName=b||"the_geom";this.geometry=c;this.srsName=d}v(tn,jn);function un(a,b,c){tn.call(this,"Intersects",a,b,c)}v(un,tn);function vn(a,b,c){on.call(this,"PropertyIsBetween",a);this.a=b;this.g=c}v(vn,on);function wn(a,b,c,d,e,f){on.call(this,"PropertyIsLike",a);this.f=b;this.i=void 0!==c?c:"*";this.c=void 0!==d?d:".";this.g=void 0!==e?e:"!";this.a=f}v(wn,on);function xn(a){on.call(this,"PropertyIsNull",a)}v(xn,on);function yn(a,b){pn.call(this,"PropertyIsLessThan",a,b)}v(yn,pn);function zn(a,b){pn.call(this,"PropertyIsLessThanOrEqualTo",a,b)}v(zn,pn);function An(a){this.Hb="Not";this.condition=a}v(An,kn);function Bn(a,b,c){pn.call(this,"PropertyIsNotEqualTo",a,b,c)}v(Bn,pn);function Cn(a,b){ln.call(this,"Or",a,b)}v(Cn,ln);function Dn(a,b,c){tn.call(this,"Within",a,b,c)}v(Dn,tn);function En(a,b){return new mn(a,b)}function Fn(a,b,c){return new nn(a,b,c)};function Gn(a){Mc.call(this);this.f=a?a:null;Hn(this)}v(Gn,Mc);function In(a){var b=[],c,d;c=0;for(d=a.length;c<d;++c)b.push(a[c].clone());return b}function Jn(a){var b,c;if(a.f)for(b=0,c=a.f.length;b<c;++b)Fa(a.f[b],"change",a.v,a)}function Hn(a){var b,c;if(a.f)for(b=0,c=a.f.length;b<c;++b)w(a.f[b],"change",a.v,a)}k=Gn.prototype;k.clone=function(){var a=new Gn(null);a.Zh(this.f);return a};
-k.vb=function(a,b,c,d){if(d<Fb(this.D(),a,b))return d;var e=this.f,f,g;f=0;for(g=e.length;f<g;++f)d=e[f].vb(a,b,c,d);return d};k.Ac=function(a,b){var c=this.f,d,e;d=0;for(e=c.length;d<e;++d)if(c[d].Ac(a,b))return!0;return!1};k.Pd=function(a){Kb(Infinity,Infinity,-Infinity,-Infinity,a);for(var b=this.f,c=0,d=b.length;c<d;++c)Qb(a,b[c].D());return a};k.cf=function(){return In(this.f)};
-k.pd=function(a){this.o!=this.g&&(va(this.i),this.j=0,this.o=this.g);if(0>a||0!==this.j&&a<this.j)return this;var b=a.toString();if(this.i.hasOwnProperty(b))return this.i[b];var c=[],d=this.f,e=!1,f,g;f=0;for(g=d.length;f<g;++f){var h=d[f],l=h.pd(a);c.push(l);l!==h&&(e=!0)}if(e)return a=new Gn(null),Jn(a),a.f=c,Hn(a),a.v(),this.i[b]=a;this.j=a;return this};k.X=function(){return"GeometryCollection"};k.Na=function(a){var b=this.f,c,d;c=0;for(d=b.length;c<d;++c)if(b[c].Na(a))return!0;return!1};
-k.rotate=function(a,b){for(var c=this.f,d=0,e=c.length;d<e;++d)c[d].rotate(a,b);this.v()};k.scale=function(a,b,c){c||(c=ac(this.D()));for(var d=this.f,e=0,f=d.length;e<f;++e)d[e].scale(a,b,c);this.v()};k.Zh=function(a){a=In(a);Jn(this);this.f=a;Hn(this);this.v()};k.oc=function(a){var b=this.f,c,d;c=0;for(d=b.length;c<d;++c)b[c].oc(a);this.v()};k.Pc=function(a,b){var c=this.f,d,e;d=0;for(e=c.length;d<e;++d)c[d].Pc(a,b);this.v()};k.la=function(){Jn(this);Mc.prototype.la.call(this)};function Kn(a){a=a?a:{};Qm.call(this);this.defaultDataProjection=qc(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326");a.featureProjection&&(this.j=qc(a.featureProjection));this.b=a.geometryName}v(Kn,Um);function Ln(a,b){return a?Tm((0,Mn[a.type])(a),!1,b):null}function Nn(a,b){return(0,On[a.X()])(Tm(a,!0,b),b)}
-var Mn={Point:function(a){return new A(a.coordinates)},LineString:function(a){return new O(a.coordinates)},Polygon:function(a){return new B(a.coordinates)},MultiPoint:function(a){return new Q(a.coordinates)},MultiLineString:function(a){return new P(a.coordinates)},MultiPolygon:function(a){return new R(a.coordinates)},GeometryCollection:function(a,b){var c=a.geometries.map(function(a){return Ln(a,b)});return new Gn(c)}},On={Point:function(a){return{type:"Point",coordinates:a.Y()}},LineString:function(a){return{type:"LineString",
-coordinates:a.Y()}},Polygon:function(a,b){var c;b&&(c=b.rightHanded);return{type:"Polygon",coordinates:a.Y(c)}},MultiPoint:function(a){return{type:"MultiPoint",coordinates:a.Y()}},MultiLineString:function(a){return{type:"MultiLineString",coordinates:a.Y()}},MultiPolygon:function(a,b){var c;b&&(c=b.rightHanded);return{type:"MultiPolygon",coordinates:a.Y(c)}},GeometryCollection:function(a,b){return{type:"GeometryCollection",geometries:a.f.map(function(a){var d=ua({},b);delete d.featureProjection;return Nn(a,
-d)})}},Circle:function(){return{type:"GeometryCollection",geometries:[]}}};k=Kn.prototype;k.Vc=function(a,b){var c;c="Feature"===a.type?a:{type:"Feature",geometry:a};var d=Ln(c.geometry,b),e=new I;this.b&&e.Dc(this.b);e.Oa(d);void 0!==c.id&&e.Wb(c.id);c.properties&&e.H(c.properties);return e};k.Gf=function(a,b){var c;if("FeatureCollection"===a.type){c=[];var d=a.features,e,f;e=0;for(f=d.length;e<f;++e)c.push(this.Vc(d[e],b))}else c=[this.Vc(a,b)];return c};k.Ih=function(a,b){return Ln(a,b)};
-k.Oh=function(a){a=a.crs;var b;a?"name"==a.type?b=qc(a.properties.name):"EPSG"==a.type?b=qc("EPSG:"+a.properties.code):ha(!1,36):b=this.defaultDataProjection;return b};k.Zc=function(a,b){b=Sm(this,b);var c={type:"Feature"},d=a.a;void 0!==d&&(c.id=d);(d=a.V())?c.geometry=Nn(d,b):c.geometry=null;d=a.N();delete d[a.f];xa(d)?c.properties=null:c.properties=d;return c};k.Ge=function(a,b){b=Sm(this,b);var c=[],d,e;d=0;for(e=a.length;d<e;++d)c.push(this.Zc(a[d],b));return{type:"FeatureCollection",features:c}};
-k.He=function(a,b){return Nn(a,Sm(this,b))};function Pn(){this.f=new XMLSerializer;Qm.call(this)}v(Pn,Qm);k=Pn.prototype;k.X=function(){return"xml"};k.Ub=function(a,b){if(zm(a))return Qn(this,a,b);if(Am(a))return this.Gh(a,b);if("string"===typeof a){var c=Bm(a);return Qn(this,c,b)}return null};function Qn(a,b,c){a=Sn(a,b,c);return 0<a.length?a[0]:null}k.Ha=function(a,b){if(zm(a))return Sn(this,a,b);if(Am(a))return this.kc(a,b);if("string"===typeof a){var c=Bm(a);return Sn(this,c,b)}return[]};
-function Sn(a,b,c){var d=[];for(b=b.firstChild;b;b=b.nextSibling)b.nodeType==Node.ELEMENT_NODE&&bb(d,a.kc(b,c));return d}k.Wc=function(a,b){if(zm(a))return this.u(a,b);if(Am(a)){var c=this.xe(a,[Rm(this,a,b?b:{})]);return c?c:null}return"string"===typeof a?(c=Bm(a),this.u(c,b)):null};k.Sa=function(a){return zm(a)?this.Lf(a):Am(a)?this.Ae(a):"string"===typeof a?(a=Bm(a),this.Lf(a)):null};k.Lf=function(){return this.defaultDataProjection};k.Ae=function(){return this.defaultDataProjection};
-k.Fd=function(a,b){var c=this.B(a,b);return this.f.serializeToString(c)};k.$b=function(a,b){var c=this.a(a,b);return this.f.serializeToString(c)};k.$c=function(a,b){var c=this.T(a,b);return this.f.serializeToString(c)};function Tn(a){a=a?a:{};this.featureType=a.featureType;this.featureNS=a.featureNS;this.srsName=a.srsName;this.schemaLocation="";this.b={};this.b["http://www.opengis.net/gml"]={featureMember:Em(Tn.prototype.xd),featureMembers:Em(Tn.prototype.xd)};Pn.call(this)}v(Tn,Pn);var Un=/^[\s\xa0]*$/;k=Tn.prototype;
-k.xd=function(a,b){var c=a.localName,d=null;if("FeatureCollection"==c)"http://www.opengis.net/wfs"===a.namespaceURI?d=N([],this.b,a,b,this):d=N(null,this.b,a,b,this);else if("featureMembers"==c||"featureMember"==c){var e=b[0],f=e.featureType,g=e.featureNS,h,l;if(!f&&a.childNodes){f=[];g={};h=0;for(l=a.childNodes.length;h<l;++h){var m=a.childNodes[h];if(1===m.nodeType){var n=m.nodeName.split(":").pop();if(-1===f.indexOf(n)){var p="",q=0,m=m.namespaceURI,t;for(t in g){if(g[t]===m){p=t;break}++q}p||
-(p="p"+q,g[p]=m);f.push(p+":"+n)}}}"featureMember"!=c&&(e.featureType=f,e.featureNS=g)}"string"===typeof g&&(h=g,g={},g.p0=h);var e={},f=Array.isArray(f)?f:[f],u;for(u in g){n={};h=0;for(l=f.length;h<l;++h)(-1===f[h].indexOf(":")?"p0":f[h].split(":")[0])===u&&(n[f[h].split(":").pop()]="featureMembers"==c?Dm(this.Ff,this):Em(this.Ff,this));e[g[u]]=n}"featureMember"==c?d=N(void 0,e,a,b):d=N([],e,a,b)}null===d&&(d=[]);return d};
-k.xe=function(a,b){var c=b[0];c.srsName=a.firstElementChild.getAttribute("srsName");var d=N(null,this.Yf,a,b,this);if(d)return Tm(d,!1,c)};
-k.Ff=function(a,b){var c,d;(d=a.getAttribute("fid"))||(d=a.getAttributeNS("http://www.opengis.net/gml","id")||"");var e={},f;for(c=a.firstElementChild;c;c=c.nextElementSibling){var g=c.localName;if(0===c.childNodes.length||1===c.childNodes.length&&(3===c.firstChild.nodeType||4===c.firstChild.nodeType)){var h=xm(c,!1);Un.test(h)&&(h=void 0);e[g]=h}else"boundedBy"!==g&&(f=g),e[g]=this.xe(c,b)}c=new I(e);f&&c.Dc(f);d&&c.Wb(d);return c};
-k.Nh=function(a,b){var c=this.we(a,b);if(c){var d=new A(null);d.aa("XYZ",c);return d}};k.Lh=function(a,b){var c=N([],this.Ji,a,b,this);if(c)return new Q(c)};k.Kh=function(a,b){var c=N([],this.Ii,a,b,this);if(c){var d=new P(null);Zm(d,c);return d}};k.Mh=function(a,b){var c=N([],this.Ki,a,b,this);if(c){var d=new R(null);an(d,c);return d}};k.Dh=function(a,b){Lm(this.Ni,a,b,this)};k.Mg=function(a,b){Lm(this.Gi,a,b,this)};k.Eh=function(a,b){Lm(this.Oi,a,b,this)};
-k.ye=function(a,b){var c=this.we(a,b);if(c){var d=new O(null);d.aa("XYZ",c);return d}};k.oo=function(a,b){var c=N(null,this.Hd,a,b,this);if(c)return c};k.Jh=function(a,b){var c=this.we(a,b);if(c){var d=new gd(null);hd(d,"XYZ",c);return d}};k.ze=function(a,b){var c=N([null],this.Ke,a,b,this);if(c&&c[0]){var d=new B(null),e=c[0],f=[e.length],g,h;g=1;for(h=c.length;g<h;++g)bb(e,c[g]),f.push(e.length);d.aa("XYZ",e,f);return d}};k.we=function(a,b){return N(null,this.Hd,a,b,this)};
-k.Ji={"http://www.opengis.net/gml":{pointMember:Dm(Tn.prototype.Dh),pointMembers:Dm(Tn.prototype.Dh)}};k.Ii={"http://www.opengis.net/gml":{lineStringMember:Dm(Tn.prototype.Mg),lineStringMembers:Dm(Tn.prototype.Mg)}};k.Ki={"http://www.opengis.net/gml":{polygonMember:Dm(Tn.prototype.Eh),polygonMembers:Dm(Tn.prototype.Eh)}};k.Ni={"http://www.opengis.net/gml":{Point:Dm(Tn.prototype.we)}};k.Gi={"http://www.opengis.net/gml":{LineString:Dm(Tn.prototype.ye)}};k.Oi={"http://www.opengis.net/gml":{Polygon:Dm(Tn.prototype.ze)}};
-k.Id={"http://www.opengis.net/gml":{LinearRing:Em(Tn.prototype.oo)}};k.kc=function(a,b){var c={featureType:this.featureType,featureNS:this.featureNS};b&&ua(c,Rm(this,a,b));return this.xd(a,[c])||[]};k.Ae=function(a){return qc(this.srsName?this.srsName:a.firstElementChild.getAttribute("srsName"))};function Vn(a){a=xm(a,!1);return Wn(a)}function Wn(a){if(a=/^\s*(true|1)|(false|0)\s*$/.exec(a))return void 0!==a[1]||!1}function Xn(a){a=xm(a,!1);a=Date.parse(a);return isNaN(a)?void 0:a/1E3}function Yn(a){a=xm(a,!1);return Zn(a)}function Zn(a){if(a=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(a))return parseFloat(a[1])}function $n(a){a=xm(a,!1);return ao(a)}function ao(a){if(a=/^\s*(\d+)\s*$/.exec(a))return parseInt(a[1],10)}function S(a){return xm(a,!1).trim()}
-function bo(a,b){co(a,b?"1":"0")}function eo(a,b){a.appendChild(vm.createTextNode(b.toPrecision()))}function fo(a,b){a.appendChild(vm.createTextNode(b.toString()))}function co(a,b){a.appendChild(vm.createTextNode(b))};function go(a){a=a?a:{};Tn.call(this,a);this.s=void 0!==a.surface?a.surface:!1;this.i=void 0!==a.curve?a.curve:!1;this.l=void 0!==a.multiCurve?a.multiCurve:!0;this.o=void 0!==a.multiSurface?a.multiSurface:!0;this.schemaLocation=a.schemaLocation?a.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"}v(go,Tn);k=go.prototype;k.so=function(a,b){var c=N([],this.Hi,a,b,this);if(c){var d=new P(null);Zm(d,c);return d}};
-k.to=function(a,b){var c=N([],this.Li,a,b,this);if(c){var d=new R(null);an(d,c);return d}};k.pg=function(a,b){Lm(this.Di,a,b,this)};k.ni=function(a,b){Lm(this.Si,a,b,this)};k.wo=function(a,b){return N([null],this.Mi,a,b,this)};k.yo=function(a,b){return N([null],this.Ri,a,b,this)};k.xo=function(a,b){return N([null],this.Ke,a,b,this)};k.ro=function(a,b){return N([null],this.Hd,a,b,this)};k.al=function(a,b){var c=N(void 0,this.Id,a,b,this);c&&b[b.length-1].push(c)};
-k.vj=function(a,b){var c=N(void 0,this.Id,a,b,this);c&&(b[b.length-1][0]=c)};k.Ph=function(a,b){var c=N([null],this.Ti,a,b,this);if(c&&c[0]){var d=new B(null),e=c[0],f=[e.length],g,h;g=1;for(h=c.length;g<h;++g)bb(e,c[g]),f.push(e.length);d.aa("XYZ",e,f);return d}};k.Fh=function(a,b){var c=N([null],this.Ei,a,b,this);if(c){var d=new O(null);d.aa("XYZ",c);return d}};k.no=function(a,b){var c=N([null],this.Fi,a,b,this);return Kb(c[1][0],c[1][1],c[2][0],c[2][1])};
-k.po=function(a,b){for(var c=xm(a,!1),d=/^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/,e=[],f;f=d.exec(c);)e.push(parseFloat(f[1])),c=c.substr(f[0].length);if(""===c){c=b[0].srsName;d="enu";c&&(d=qc(c).b);if("neu"===d)for(c=0,d=e.length;c<d;c+=3)f=e[c],e[c]=e[c+1],e[c+1]=f;c=e.length;2==c&&e.push(0);return 0===c?void 0:e}};
-k.Jf=function(a,b){var c=xm(a,!1).replace(/^\s*|\s*$/g,""),d=b[0].srsName,e=a.parentNode.getAttribute("srsDimension"),f="enu";d&&(f=qc(d).b);c=c.split(/\s+/);d=2;a.getAttribute("srsDimension")?d=ao(a.getAttribute("srsDimension")):a.getAttribute("dimension")?d=ao(a.getAttribute("dimension")):e&&(d=ao(e));for(var g,h,l=[],m=0,n=c.length;m<n;m+=d)e=parseFloat(c[m]),g=parseFloat(c[m+1]),h=3===d?parseFloat(c[m+2]):0,"en"===f.substr(0,2)?l.push(e,g,h):l.push(g,e,h);return l};
-k.Hd={"http://www.opengis.net/gml":{pos:Em(go.prototype.po),posList:Em(go.prototype.Jf)}};k.Ke={"http://www.opengis.net/gml":{interior:go.prototype.al,exterior:go.prototype.vj}};
-k.Yf={"http://www.opengis.net/gml":{Point:Em(Tn.prototype.Nh),MultiPoint:Em(Tn.prototype.Lh),LineString:Em(Tn.prototype.ye),MultiLineString:Em(Tn.prototype.Kh),LinearRing:Em(Tn.prototype.Jh),Polygon:Em(Tn.prototype.ze),MultiPolygon:Em(Tn.prototype.Mh),Surface:Em(go.prototype.Ph),MultiSurface:Em(go.prototype.to),Curve:Em(go.prototype.Fh),MultiCurve:Em(go.prototype.so),Envelope:Em(go.prototype.no)}};k.Hi={"http://www.opengis.net/gml":{curveMember:Dm(go.prototype.pg),curveMembers:Dm(go.prototype.pg)}};
-k.Li={"http://www.opengis.net/gml":{surfaceMember:Dm(go.prototype.ni),surfaceMembers:Dm(go.prototype.ni)}};k.Di={"http://www.opengis.net/gml":{LineString:Dm(Tn.prototype.ye),Curve:Dm(go.prototype.Fh)}};k.Si={"http://www.opengis.net/gml":{Polygon:Dm(Tn.prototype.ze),Surface:Dm(go.prototype.Ph)}};k.Ti={"http://www.opengis.net/gml":{patches:Em(go.prototype.wo)}};k.Ei={"http://www.opengis.net/gml":{segments:Em(go.prototype.yo)}};k.Fi={"http://www.opengis.net/gml":{lowerCorner:Dm(go.prototype.Jf),upperCorner:Dm(go.prototype.Jf)}};
-k.Mi={"http://www.opengis.net/gml":{PolygonPatch:Em(go.prototype.xo)}};k.Ri={"http://www.opengis.net/gml":{LineStringSegment:Em(go.prototype.ro)}};function ho(a,b,c){c=c[c.length-1].srsName;b=b.Y();for(var d=b.length,e=Array(d),f,g=0;g<d;++g){f=b[g];var h=g,l="enu";c&&(l=qc(c).b);e[h]="en"===l.substr(0,2)?f[0]+" "+f[1]:f[1]+" "+f[0]}co(a,e.join(" "))}
-k.zi=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);d=wm(a.namespaceURI,"pos");a.appendChild(d);c=c[c.length-1].srsName;a="enu";c&&(a=qc(c).b);b=b.Y();co(d,"en"===a.substr(0,2)?b[0]+" "+b[1]:b[1]+" "+b[0])};var io={"http://www.opengis.net/gml":{lowerCorner:L(co),upperCorner:L(co)}};k=go.prototype;k.jp=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);Mm({node:a},io,Jm,[b[0]+" "+b[1],b[2]+" "+b[3]],c,["lowerCorner","upperCorner"],this)};
-k.wi=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);d=wm(a.namespaceURI,"posList");a.appendChild(d);ho(d,b,c)};k.Qi=function(a,b){var c=b[b.length-1],d=c.node,e=c.exteriorWritten;void 0===e&&(c.exteriorWritten=!0);return wm(d.namespaceURI,void 0!==e?"interior":"exterior")};
-k.Ie=function(a,b,c){var d=c[c.length-1].srsName;"PolygonPatch"!==a.nodeName&&d&&a.setAttribute("srsName",d);"Polygon"===a.nodeName||"PolygonPatch"===a.nodeName?(b=b.Vd(),Mm({node:a,srsName:d},jo,this.Qi,b,c,void 0,this)):"Surface"===a.nodeName&&(d=wm(a.namespaceURI,"patches"),a.appendChild(d),a=wm(d.namespaceURI,"PolygonPatch"),d.appendChild(a),this.Ie(a,b,c))};
-k.Ee=function(a,b,c){var d=c[c.length-1].srsName;"LineStringSegment"!==a.nodeName&&d&&a.setAttribute("srsName",d);"LineString"===a.nodeName||"LineStringSegment"===a.nodeName?(d=wm(a.namespaceURI,"posList"),a.appendChild(d),ho(d,b,c)):"Curve"===a.nodeName&&(d=wm(a.namespaceURI,"segments"),a.appendChild(d),a=wm(d.namespaceURI,"LineStringSegment"),d.appendChild(a),this.Ee(a,b,c))};
-k.yi=function(a,b,c){var d=c[c.length-1],e=d.srsName,d=d.surface;e&&a.setAttribute("srsName",e);b=b.Wd();Mm({node:a,srsName:e,surface:d},ko,this.c,b,c,void 0,this)};k.kp=function(a,b,c){var d=c[c.length-1].srsName;d&&a.setAttribute("srsName",d);b=b.je();Mm({node:a,srsName:d},lo,Hm("pointMember"),b,c,void 0,this)};k.xi=function(a,b,c){var d=c[c.length-1],e=d.srsName,d=d.curve;e&&a.setAttribute("srsName",e);b=b.od();Mm({node:a,srsName:e,curve:d},mo,this.c,b,c,void 0,this)};
-k.Ai=function(a,b,c){var d=wm(a.namespaceURI,"LinearRing");a.appendChild(d);this.wi(d,b,c)};k.Bi=function(a,b,c){var d=this.g(b,c);d&&(a.appendChild(d),this.Ie(d,b,c))};k.lp=function(a,b,c){var d=wm(a.namespaceURI,"Point");a.appendChild(d);this.zi(d,b,c)};k.vi=function(a,b,c){var d=this.g(b,c);d&&(a.appendChild(d),this.Ee(d,b,c))};
-k.ad=function(a,b,c){var d=c[c.length-1],e=ua({},d);e.node=a;var f;Array.isArray(b)?d.dataProjection?f=Lc(b,d.featureProjection,d.dataProjection):f=b:f=Tm(b,!0,d);Mm(e,no,this.g,[f],c,void 0,this)};
-k.ti=function(a,b,c){var d=b.a;d&&a.setAttribute("fid",d);var d=c[c.length-1],e=d.featureNS,f=b.f;d.Cc||(d.Cc={},d.Cc[e]={});var g=b.N();b=[];var h=[],l;for(l in g){var m=g[l];null!==m&&(b.push(l),h.push(m),l==f||m instanceof Mc?l in d.Cc[e]||(d.Cc[e][l]=L(this.ad,this)):l in d.Cc[e]||(d.Cc[e][l]=L(co)))}l=ua({},d);l.node=a;Mm(l,d.Cc,Hm(void 0,e),h,c,b)};
-var ko={"http://www.opengis.net/gml":{surfaceMember:L(go.prototype.Bi),polygonMember:L(go.prototype.Bi)}},lo={"http://www.opengis.net/gml":{pointMember:L(go.prototype.lp)}},mo={"http://www.opengis.net/gml":{lineStringMember:L(go.prototype.vi),curveMember:L(go.prototype.vi)}},jo={"http://www.opengis.net/gml":{exterior:L(go.prototype.Ai),interior:L(go.prototype.Ai)}},no={"http://www.opengis.net/gml":{Curve:L(go.prototype.Ee),MultiCurve:L(go.prototype.xi),Point:L(go.prototype.zi),MultiPoint:L(go.prototype.kp),
-LineString:L(go.prototype.Ee),MultiLineString:L(go.prototype.xi),LinearRing:L(go.prototype.wi),Polygon:L(go.prototype.Ie),MultiPolygon:L(go.prototype.yi),Surface:L(go.prototype.Ie),MultiSurface:L(go.prototype.yi),Envelope:L(go.prototype.jp)}},oo={MultiLineString:"lineStringMember",MultiCurve:"curveMember",MultiPolygon:"polygonMember",MultiSurface:"surfaceMember"};go.prototype.c=function(a,b){return wm("http://www.opengis.net/gml",oo[b[b.length-1].node.nodeName])};
-go.prototype.g=function(a,b){var c=b[b.length-1],d=c.multiSurface,e=c.surface,f=c.curve,c=c.multiCurve,g;Array.isArray(a)?g="Envelope":(g=a.X(),"MultiPolygon"===g&&!0===d?g="MultiSurface":"Polygon"===g&&!0===e?g="Surface":"LineString"===g&&!0===f?g="Curve":"MultiLineString"===g&&!0===c&&(g="MultiCurve"));return wm("http://www.opengis.net/gml",g)};
-go.prototype.T=function(a,b){b=Sm(this,b);var c=wm("http://www.opengis.net/gml","geom"),d={node:c,srsName:this.srsName,curve:this.i,surface:this.s,multiSurface:this.o,multiCurve:this.l};b&&ua(d,b);this.ad(c,a,[d]);return c};
-go.prototype.a=function(a,b){b=Sm(this,b);var c=wm("http://www.opengis.net/gml","featureMembers");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.schemaLocation);var d={srsName:this.srsName,curve:this.i,surface:this.s,multiSurface:this.o,multiCurve:this.l,featureNS:this.featureNS,featureType:this.featureType};b&&ua(d,b);var d=[d],e=d[d.length-1],f=e.featureType,g=e.featureNS,h={};h[g]={};h[g][f]=L(this.ti,this);e=ua({},e);e.node=c;Mm(e,h,Hm(f,g),a,d);return c};function po(a){a=a?a:{};Tn.call(this,a);this.b["http://www.opengis.net/gml"].featureMember=Dm(Tn.prototype.xd);this.schemaLocation=a.schemaLocation?a.schemaLocation:"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"}v(po,Tn);k=po.prototype;
-k.Hh=function(a,b){var c=xm(a,!1).replace(/^\s*|\s*$/g,""),d=b[0].srsName,e=a.parentNode.getAttribute("srsDimension"),f="enu";d&&(d=qc(d))&&(f=d.b);c=c.split(/[\s,]+/);d=2;a.getAttribute("srsDimension")?d=ao(a.getAttribute("srsDimension")):a.getAttribute("dimension")?d=ao(a.getAttribute("dimension")):e&&(d=ao(e));for(var g,h,l=[],m=0,n=c.length;m<n;m+=d)e=parseFloat(c[m]),g=parseFloat(c[m+1]),h=3===d?parseFloat(c[m+2]):0,"en"===f.substr(0,2)?l.push(e,g,h):l.push(g,e,h);return l};
-k.lo=function(a,b){var c=N([null],this.Ci,a,b,this);return Kb(c[1][0],c[1][1],c[1][3],c[1][4])};k.Zk=function(a,b){var c=N(void 0,this.Id,a,b,this);c&&b[b.length-1].push(c)};k.Tn=function(a,b){var c=N(void 0,this.Id,a,b,this);c&&(b[b.length-1][0]=c)};k.Hd={"http://www.opengis.net/gml":{coordinates:Em(po.prototype.Hh)}};k.Ke={"http://www.opengis.net/gml":{innerBoundaryIs:po.prototype.Zk,outerBoundaryIs:po.prototype.Tn}};k.Ci={"http://www.opengis.net/gml":{coordinates:Dm(po.prototype.Hh)}};
-k.Yf={"http://www.opengis.net/gml":{Point:Em(Tn.prototype.Nh),MultiPoint:Em(Tn.prototype.Lh),LineString:Em(Tn.prototype.ye),MultiLineString:Em(Tn.prototype.Kh),LinearRing:Em(Tn.prototype.Jh),Polygon:Em(Tn.prototype.ze),MultiPolygon:Em(Tn.prototype.Mh),Box:Em(po.prototype.lo)}};function qo(a){a=a?a:{};Pn.call(this);this.defaultDataProjection=qc("EPSG:4326");this.b=a.readExtensions}v(qo,Pn);var ro=[null,"http://www.topografix.com/GPX/1/0","http://www.topografix.com/GPX/1/1"];function so(a,b,c){a.push(parseFloat(b.getAttribute("lon")),parseFloat(b.getAttribute("lat")));"ele"in c?(a.push(c.ele),delete c.ele):a.push(0);"time"in c?(a.push(c.time),delete c.time):a.push(0);return a}function to(a,b){var c=b[b.length-1],d=a.getAttribute("href");null!==d&&(c.link=d);Lm(uo,a,b)}
-function vo(a,b){b[b.length-1].extensionsNode_=a}function wo(a,b){var c=b[0],d=N({flatCoordinates:[]},xo,a,b);if(d){var e=d.flatCoordinates;delete d.flatCoordinates;var f=new O(null);f.aa("XYZM",e);Tm(f,!1,c);c=new I(f);c.H(d);return c}}function yo(a,b){var c=b[0],d=N({flatCoordinates:[],ends:[]},zo,a,b);if(d){var e=d.flatCoordinates;delete d.flatCoordinates;var f=d.ends;delete d.ends;var g=new P(null);g.aa("XYZM",e,f);Tm(g,!1,c);c=new I(g);c.H(d);return c}}
-function Ao(a,b){var c=b[0],d=N({},Bo,a,b);if(d){var e=so([],a,d),e=new A(e,"XYZM");Tm(e,!1,c);c=new I(e);c.H(d);return c}}
-var Co={rte:wo,trk:yo,wpt:Ao},Do=M(ro,{rte:Dm(wo),trk:Dm(yo),wpt:Dm(Ao)}),uo=M(ro,{text:J(S,"linkText"),type:J(S,"linkType")}),xo=M(ro,{name:J(S),cmt:J(S),desc:J(S),src:J(S),link:to,number:J($n),extensions:vo,type:J(S),rtept:function(a,b){var c=N({},Eo,a,b);c&&so(b[b.length-1].flatCoordinates,a,c)}}),Eo=M(ro,{ele:J(Yn),time:J(Xn)}),zo=M(ro,{name:J(S),cmt:J(S),desc:J(S),src:J(S),link:to,number:J($n),type:J(S),extensions:vo,trkseg:function(a,b){var c=b[b.length-1];Lm(Fo,a,b);c.ends.push(c.flatCoordinates.length)}}),
-Fo=M(ro,{trkpt:function(a,b){var c=N({},Go,a,b);c&&so(b[b.length-1].flatCoordinates,a,c)}}),Go=M(ro,{ele:J(Yn),time:J(Xn)}),Bo=M(ro,{ele:J(Yn),time:J(Xn),magvar:J(Yn),geoidheight:J(Yn),name:J(S),cmt:J(S),desc:J(S),src:J(S),link:to,sym:J(S),type:J(S),fix:J(S),sat:J($n),hdop:J(Yn),vdop:J(Yn),pdop:J(Yn),ageofdgpsdata:J(Yn),dgpsid:J($n),extensions:vo});
-function Ho(a,b){b||(b=[]);for(var c=0,d=b.length;c<d;++c){var e=b[c];if(a.b){var f=e.get("extensionsNode_")||null;a.b(e,f)}e.set("extensionsNode_",void 0)}}qo.prototype.Gh=function(a,b){if(!Za(ro,a.namespaceURI))return null;var c=Co[a.localName];if(!c)return null;c=c(a,[Rm(this,a,b)]);if(!c)return null;Ho(this,[c]);return c};qo.prototype.kc=function(a,b){if(!Za(ro,a.namespaceURI))return[];if("gpx"==a.localName){var c=N([],Do,a,[Rm(this,a,b)]);if(c)return Ho(this,c),c}return[]};
-function Io(a,b,c){a.setAttribute("href",b);b=c[c.length-1].properties;Mm({node:a},Jo,Jm,[b.linkText,b.linkType],c,Ko)}function Lo(a,b,c){var d=c[c.length-1],e=d.node.namespaceURI,f=d.properties;a.setAttributeNS(null,"lat",b[1]);a.setAttributeNS(null,"lon",b[0]);switch(d.geometryLayout){case "XYZM":0!==b[3]&&(f.time=b[3]);case "XYZ":0!==b[2]&&(f.ele=b[2]);break;case "XYM":0!==b[2]&&(f.time=b[2])}b="rtept"==a.nodeName?Mo[e]:No[e];d=Km(f,b);Mm({node:a,properties:f},Oo,Jm,d,c,b)}
-var Ko=["text","type"],Jo=M(ro,{text:L(co),type:L(co)}),Po=M(ro,"name cmt desc src link number type rtept".split(" ")),Qo=M(ro,{name:L(co),cmt:L(co),desc:L(co),src:L(co),link:L(Io),number:L(fo),type:L(co),rtept:Gm(L(Lo))}),Mo=M(ro,["ele","time"]),Ro=M(ro,"name cmt desc src link number type trkseg".split(" ")),Uo=M(ro,{name:L(co),cmt:L(co),desc:L(co),src:L(co),link:L(Io),number:L(fo),type:L(co),trkseg:Gm(L(function(a,b,c){Mm({node:a,geometryLayout:b.ia,properties:{}},So,To,b.Y(),c)}))}),To=Hm("trkpt"),
-So=M(ro,{trkpt:L(Lo)}),No=M(ro,"ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),Oo=M(ro,{ele:L(eo),time:L(function(a,b){var c=new Date(1E3*b);a.appendChild(vm.createTextNode(c.getUTCFullYear()+"-"+pb(c.getUTCMonth()+1)+"-"+pb(c.getUTCDate())+"T"+pb(c.getUTCHours())+":"+pb(c.getUTCMinutes())+":"+pb(c.getUTCSeconds())+"Z"))}),magvar:L(eo),geoidheight:L(eo),name:L(co),cmt:L(co),desc:L(co),src:L(co),link:L(Io),sym:L(co),type:L(co),fix:L(co),
-sat:L(fo),hdop:L(eo),vdop:L(eo),pdop:L(eo),ageofdgpsdata:L(eo),dgpsid:L(fo)}),Vo={Point:"wpt",LineString:"rte",MultiLineString:"trk"};function Wo(a,b){var c=a.V();if(c&&(c=Vo[c.X()]))return wm(b[b.length-1].node.namespaceURI,c)}
-var Xo=M(ro,{rte:L(function(a,b,c){var d=c[0],e=b.N();a={node:a,properties:e};if(b=b.V())b=Tm(b,!0,d),a.geometryLayout=b.ia,e.rtept=b.Y();d=Po[c[c.length-1].node.namespaceURI];e=Km(e,d);Mm(a,Qo,Jm,e,c,d)}),trk:L(function(a,b,c){var d=c[0],e=b.N();a={node:a,properties:e};if(b=b.V())b=Tm(b,!0,d),e.trkseg=b.od();d=Ro[c[c.length-1].node.namespaceURI];e=Km(e,d);Mm(a,Uo,Jm,e,c,d)}),wpt:L(function(a,b,c){var d=c[0],e=c[c.length-1];e.properties=b.N();if(b=b.V())b=Tm(b,!0,d),e.geometryLayout=b.ia,Lo(a,b.Y(),
-c)})});qo.prototype.a=function(a,b){b=Sm(this,b);var c=wm("http://www.topografix.com/GPX/1/1","gpx");c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd");c.setAttribute("version","1.1");c.setAttribute("creator","OpenLayers 3");Mm({node:c},Xo,Wo,a,[b]);return c};function Yo(){Qm.call(this)}v(Yo,Qm);function Zo(a){return"string"===typeof a?a:""}k=Yo.prototype;k.X=function(){return"text"};k.Ub=function(a,b){return this.wd(Zo(a),Sm(this,b))};k.Ha=function(a,b){return this.Hf(Zo(a),Sm(this,b))};k.Wc=function(a,b){return this.yd(Zo(a),Sm(this,b))};k.Sa=function(){return this.defaultDataProjection};k.Fd=function(a,b){return this.Fe(a,Sm(this,b))};k.$b=function(a,b){return this.ui(a,Sm(this,b))};k.$c=function(a,b){return this.Gd(a,Sm(this,b))};function $o(a){a=a?a:{};Qm.call(this);this.defaultDataProjection=qc("EPSG:4326");this.b=a.altitudeMode?a.altitudeMode:ap}v($o,Yo);var bp=/^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,cp=/^H.([A-Z]{3}).*?:(.*)/,dp=/^HFDTE(\d{2})(\d{2})(\d{2})/,ep=/\r\n|\r|\n/;
-$o.prototype.wd=function(a,b){var c=this.b,d=a.split(ep),e={},f=[],g=2E3,h=0,l=1,m=-1,n,p;n=0;for(p=d.length;n<p;++n){var q=d[n],t;if("B"==q.charAt(0)){if(t=bp.exec(q)){var q=parseInt(t[1],10),u=parseInt(t[2],10),y=parseInt(t[3],10),x=parseInt(t[4],10)+parseInt(t[5],10)/6E4;"S"==t[6]&&(x=-x);var C=parseInt(t[7],10)+parseInt(t[8],10)/6E4;"W"==t[9]&&(C=-C);f.push(C,x);c!=ap&&f.push(c==fp?parseInt(t[11],10):c==gp?parseInt(t[12],10):0);t=Date.UTC(g,h,l,q,u,y);t<m&&(t=Date.UTC(g,h,l+1,q,u,y));f.push(t/
-1E3);m=t}}else"H"==q.charAt(0)&&((t=dp.exec(q))?(l=parseInt(t[1],10),h=parseInt(t[2],10)-1,g=2E3+parseInt(t[3],10)):(t=cp.exec(q))&&(e[t[1]]=t[2].trim()))}if(0===f.length)return null;d=new O(null);d.aa(c==ap?"XYM":"XYZM",f);c=new I(Tm(d,!1,b));c.H(e);return c};$o.prototype.Hf=function(a,b){var c=this.wd(a,b);return c?[c]:[]};var gp="barometric",fp="gps",ap="none";function hp(a,b,c,d,e,f){Ma.call(this);this.l=null;this.a=a?a:new Image;null!==d&&(this.a.crossOrigin=d);this.c=f?document.createElement("CANVAS"):null;this.j=f;this.i=null;this.f=e;this.g=c;this.o=b;this.s=!1;this.f==li&&ip(this)}v(hp,Ma);function ip(a){var b=De(1,1);try{b.drawImage(a.a,0,0),b.getImageData(0,0,1,1)}catch(c){a.s=!0}}hp.prototype.T=function(){this.f=ki;this.i.forEach(za);this.i=null;this.b("change")};
-hp.prototype.u=function(){this.f=li;this.g&&(this.a.width=this.g[0],this.a.height=this.g[1]);this.g=[this.a.width,this.a.height];this.i.forEach(za);this.i=null;ip(this);if(!this.s&&null!==this.j){this.c.width=this.a.width;this.c.height=this.a.height;var a=this.c.getContext("2d");a.drawImage(this.a,0,0);for(var b=a.getImageData(0,0,this.a.width,this.a.height),c=b.data,d=this.j[0]/255,e=this.j[1]/255,f=this.j[2]/255,g=0,h=c.length;g<h;g+=4)c[g]*=d,c[g+1]*=e,c[g+2]*=f;a.putImageData(b,0,0)}this.b("change")};
-hp.prototype.load=function(){if(this.f==ji){this.f=mi;this.i=[Ea(this.a,"error",this.T,this),Ea(this.a,"load",this.u,this)];try{this.a.src=this.o}catch(a){this.T()}}};function jp(a){a=a||{};this.f=void 0!==a.anchor?a.anchor:[.5,.5];this.j=null;this.a=void 0!==a.anchorOrigin?a.anchorOrigin:kp;this.B=void 0!==a.anchorXUnits?a.anchorXUnits:lp;this.G=void 0!==a.anchorYUnits?a.anchorYUnits:lp;this.na=void 0!==a.crossOrigin?a.crossOrigin:null;var b=void 0!==a.img?a.img:null,c=void 0!==a.imgSize?a.imgSize:null,d=a.src;ha(!(void 0!==d&&b),4);ha(!b||b&&c,5);void 0!==d&&0!==d.length||!b||(d=b.src||ea(b).toString());ha(void 0!==d&&0<d.length,6);var e=void 0!==a.src?ji:li;
-this.i=void 0!==a.color?ye(a.color):null;var f=this.na,g=this.i,h=Mh.get(d,f,g);h||(h=new hp(b,d,c,f,e,g),Mh.set(d,f,g,h));this.b=h;this.S=void 0!==a.offset?a.offset:[0,0];this.g=void 0!==a.offsetOrigin?a.offsetOrigin:kp;this.s=null;this.C=void 0!==a.size?a.size:null;ri.call(this,{opacity:void 0!==a.opacity?a.opacity:1,rotation:void 0!==a.rotation?a.rotation:0,scale:void 0!==a.scale?a.scale:1,snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:
-!1})}v(jp,ri);k=jp.prototype;
-k.clone=function(){var a=this.Tb(1),b;if(this.b.f===li)if("IMG"===a.tagName.toUpperCase())b=a.cloneNode(!0);else{b=document.createElement("canvas");var c=b.getContext("2d");b.width=a.width;b.height=a.height;c.drawImage(a,0,0)}return new jp({anchor:this.f.slice(),anchorOrigin:this.a,anchorXUnits:this.B,anchorYUnits:this.G,crossOrigin:this.na,color:this.i&&this.i.slice?this.i.slice():this.i||void 0,img:b?b:void 0,imgSize:b?this.b.g.slice():void 0,src:b?void 0:this.b.o,offset:this.S.slice(),offsetOrigin:this.g,
-size:null!==this.C?this.C.slice():void 0,opacity:this.l,scale:this.c,snapToPixel:this.u,rotation:this.o,rotateWithView:this.T})};k.cc=function(){if(this.j)return this.j;var a=this.f,b=this.Gb();if(this.B==lp||this.G==lp){if(!b)return null;a=this.f.slice();this.B==lp&&(a[0]*=b[0]);this.G==lp&&(a[1]*=b[1])}if(this.a!=kp){if(!b)return null;a===this.f&&(a=this.f.slice());if(this.a==mp||this.a==np)a[0]=-a[0]+b[0];if(this.a==op||this.a==np)a[1]=-a[1]+b[1]}return this.j=a};
-k.Tb=function(){var a=this.b;return a.c?a.c:a.a};k.md=function(){return this.b.g};k.vd=function(){return this.b.f};k.pe=function(){var a=this.b;if(!a.l)if(a.s){var b=a.g[0],c=a.g[1],d=De(b,c);d.fillRect(0,0,b,c);a.l=d.canvas}else a.l=a.a;return a.l};k.jc=function(){if(this.s)return this.s;var a=this.S;if(this.g!=kp){var b=this.Gb(),c=this.b.g;if(!b||!c)return null;a=a.slice();if(this.g==mp||this.g==np)a[0]=c[0]-b[0]-a[0];if(this.g==op||this.g==np)a[1]=c[1]-b[1]-a[1]}return this.s=a};k.sn=function(){return this.b.o};
-k.Gb=function(){return this.C?this.C:this.b.g};k.pf=function(a,b){return w(this.b,"change",a,b)};k.load=function(){this.b.load()};k.Uf=function(a,b){Fa(this.b,"change",a,b)};var lp="fraction",op="bottom-left",np="bottom-right",kp="top-left",mp="top-right";function pp(a){a=a||{};this.g=a.font;this.j=a.rotation;this.s=a.rotateWithView;this.a=a.scale;this.T=a.text;this.l=a.textAlign;this.o=a.textBaseline;this.b=void 0!==a.fill?a.fill:new wi({color:"#333"});this.f=void 0!==a.stroke?a.stroke:null;this.c=void 0!==a.offsetX?a.offsetX:0;this.i=void 0!==a.offsetY?a.offsetY:0}k=pp.prototype;
-k.clone=function(){return new pp({font:this.g,rotation:this.j,rotateWithView:this.s,scale:this.a,text:this.Fa(),textAlign:this.l,textBaseline:this.o,fill:this.b?this.b.clone():void 0,stroke:this.f?this.f.clone():void 0,offsetX:this.c,offsetY:this.i})};k.Lj=function(){return this.g};k.Zj=function(){return this.c};k.$j=function(){return this.i};k.In=function(){return this.b};k.Jn=function(){return this.s};k.Kn=function(){return this.j};k.Ln=function(){return this.a};k.Mn=function(){return this.f};
-k.Fa=function(){return this.T};k.lk=function(){return this.l};k.mk=function(){return this.o};k.Yh=function(a){this.g=a};k.di=function(a){this.c=a};k.ei=function(a){this.i=a};k.Xh=function(a){this.b=a};k.Nn=function(a){this.j=a};k.Ah=function(a){this.a=a};k.gi=function(a){this.f=a};k.hi=function(a){this.T=a};k.ii=function(a){this.l=a};k.Vo=function(a){this.o=a};function qp(a){a=a?a:{};Pn.call(this);this.defaultDataProjection=qc("EPSG:4326");var b;a.defaultStyle?b=a.defaultStyle:(b=rp)||(sp=[255,255,255,1],tp=new wi({color:sp}),up=[20,2],vp=wp="pixels",xp=[64,64],yp="https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png",zp=.5,Ap=new jp({anchor:up,anchorOrigin:op,anchorXUnits:wp,anchorYUnits:vp,crossOrigin:"anonymous",rotation:0,scale:zp,size:xp,src:yp}),Bp="NO_IMAGE",Cp=new xi({color:sp,width:1}),Dp=new xi({color:[51,51,51,1],width:2}),Ep=new pp({font:"bold 16px Helvetica",
-fill:tp,stroke:Dp,scale:.8}),Fp=new yi({fill:tp,image:Ap,text:Ep,stroke:Cp,zIndex:0}),b=rp=[Fp]);this.g=b;this.c=void 0!==a.extractStyles?a.extractStyles:!0;this.l=void 0!==a.writeStyles?a.writeStyles:!0;this.b={};this.i=void 0!==a.showPointNames?a.showPointNames:!0}var rp,sp,tp,up,wp,vp,xp,yp,zp,Ap,Bp,Cp,Dp,Ep,Fp;v(qp,Pn);
-var Gp=["http://www.google.com/kml/ext/2.2"],Hp=[null,"http://earth.google.com/kml/2.0","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.2","http://www.opengis.net/kml/2.2"],Ip={fraction:lp,pixels:"pixels"};
-function Jp(a,b){var c,d=[0,0],e="start";if(a.a){c=a.a.md();null===c&&(c=xp);var f=a.a.c;isNaN(f)&&(f=zp);2==c.length&&(d[0]=f*c[0]/2,d[1]=-f*c[1]/2,e="left")}null!==a.Fa()?(f=a.Fa(),c=f.clone(),c.Yh(f.g||Ep.g),c.Ah(f.a||Ep.a),c.Xh(f.b||Ep.b),c.gi(f.f||Dp)):c=Ep.clone();c.hi(b);c.di(d[0]);c.ei(d[1]);c.ii(e);return new yi({text:c})}
-function Kp(a,b,c,d,e){return function(){var f=e,g="";f&&this.V()&&(f="Point"===this.V().X());f&&(g=this.get("name"),f=f&&g);if(a)return f?(f=Jp(a[0],g),a.concat(f)):a;if(b){var h=Lp(b,c,d);return f?(f=Jp(h[0],g),h.concat(f)):h}return f?(f=Jp(c[0],g),c.concat(f)):c}}function Lp(a,b,c){return Array.isArray(a)?a:"string"===typeof a?(!(a in c)&&"#"+a in c&&(a="#"+a),Lp(c[a],b,c)):b}
-function Mp(a){a=xm(a,!1);if(a=/^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(a))return a=a[1],[parseInt(a.substr(6,2),16),parseInt(a.substr(4,2),16),parseInt(a.substr(2,2),16),parseInt(a.substr(0,2),16)/255]}function Np(a){a=xm(a,!1);for(var b=[],c=/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i,d;d=c.exec(a);)b.push(parseFloat(d[1]),parseFloat(d[2]),d[3]?parseFloat(d[3]):0),a=a.substr(d[0].length);return""!==a?void 0:b}
-function Op(a){var b=xm(a,!1).trim();return a.baseURI?(new URL(b,a.baseURI)).href:b}function Pp(a){return Yn(a)}function Qp(a,b){return N(null,Rp,a,b)}function Sp(a,b){var c=N({A:[],si:[]},Tp,a,b);if(c){var d=c.A,c=c.si,e,f;e=0;for(f=Math.min(d.length,c.length);e<f;++e)d[4*e+3]=c[e];c=new O(null);c.aa("XYZM",d);return c}}function Up(a,b){var c=N({},Vp,a,b),d=N(null,Wp,a,b);if(d){var e=new O(null);e.aa("XYZ",d);e.H(c);return e}}
-function Xp(a,b){var c=N({},Vp,a,b),d=N(null,Wp,a,b);if(d){var e=new B(null);e.aa("XYZ",d,[d.length]);e.H(c);return e}}
-function Yp(a,b){var c=N([],Zp,a,b);if(!c)return null;if(0===c.length)return new Gn(c);var d,e=!0,f=c[0].X(),g,h,l;h=1;for(l=c.length;h<l;++h)if(g=c[h],g.X()!=f){e=!1;break}if(e)if("Point"==f){d=c[0];e=d.ia;f=d.ka();h=1;for(l=c.length;h<l;++h)g=c[h],bb(f,g.ka());d=new Q(null);d.aa(e,f);$p(d,c)}else"LineString"==f?(d=new P(null),Zm(d,c),$p(d,c)):"Polygon"==f?(d=new R(null),an(d,c),$p(d,c)):"GeometryCollection"==f?d=new Gn(c):ha(!1,37);else d=new Gn(c);return d}
-function aq(a,b){var c=N({},Vp,a,b),d=N(null,Wp,a,b);if(d){var e=new A(null);e.aa("XYZ",d);e.H(c);return e}}function bq(a,b){var c=N({},Vp,a,b),d=N([null],cq,a,b);if(d&&d[0]){var e=new B(null),f=d[0],g=[f.length],h,l;h=1;for(l=d.length;h<l;++h)bb(f,d[h]),g.push(f.length);e.aa("XYZ",f,g);e.H(c);return e}}
-function dq(a,b){var c=N({},eq,a,b);if(!c)return null;var d="fillStyle"in c?c.fillStyle:tp,e=c.fill;void 0===e||e||(d=null);e="imageStyle"in c?c.imageStyle:Ap;e==Bp&&(e=void 0);var f="textStyle"in c?c.textStyle:Ep,g="strokeStyle"in c?c.strokeStyle:Cp,c=c.outline;void 0===c||c||(g=null);return[new yi({fill:d,image:e,stroke:g,text:f,zIndex:void 0})]}
-function $p(a,b){var c=b.length,d=Array(b.length),e=Array(b.length),f,g,h,l;h=l=!1;for(g=0;g<c;++g)f=b[g],d[g]=f.get("extrude"),e[g]=f.get("altitudeMode"),h=h||void 0!==d[g],l=l||e[g];h&&a.set("extrude",d);l&&a.set("altitudeMode",e)}function fq(a,b){Lm(gq,a,b)}
-var hq=M(Hp,{value:Em(S)}),gq=M(Hp,{Data:function(a,b){var c=a.getAttribute("name");if(null!==c){var d=N(void 0,hq,a,b);d&&(b[b.length-1][c]=d)}},SchemaData:function(a,b){Lm(iq,a,b)}}),Vp=M(Hp,{extrude:J(Vn),altitudeMode:J(S)}),Rp=M(Hp,{coordinates:Em(Np)}),cq=M(Hp,{innerBoundaryIs:function(a,b){var c=N(void 0,jq,a,b);c&&b[b.length-1].push(c)},outerBoundaryIs:function(a,b){var c=N(void 0,kq,a,b);c&&(b[b.length-1][0]=c)}}),Tp=M(Hp,{when:function(a,b){var c=b[b.length-1].si,d=xm(a,!1),d=Date.parse(d);
-c.push(isNaN(d)?0:d)}},M(Gp,{coord:function(a,b){var c=b[b.length-1].A,d=xm(a,!1);(d=/^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(d))?c.push(parseFloat(d[1]),parseFloat(d[2]),parseFloat(d[3]),0):c.push(0,0,0,0)}})),Wp=M(Hp,{coordinates:Em(Np)}),lq=M(Hp,{href:J(Op)},M(Gp,{x:J(Yn),y:J(Yn),w:J(Yn),h:J(Yn)})),mq=M(Hp,{Icon:J(function(a,b){var c=N({},lq,a,b);return c?c:null}),heading:J(Yn),hotSpot:J(function(a){var b=
-a.getAttribute("xunits"),c=a.getAttribute("yunits");return{x:parseFloat(a.getAttribute("x")),Wf:Ip[b],y:parseFloat(a.getAttribute("y")),Xf:Ip[c]}}),scale:J(Pp)}),jq=M(Hp,{LinearRing:Em(Qp)}),nq=M(Hp,{color:J(Mp),scale:J(Pp)}),oq=M(Hp,{color:J(Mp),width:J(Yn)}),Zp=M(Hp,{LineString:Dm(Up),LinearRing:Dm(Xp),MultiGeometry:Dm(Yp),Point:Dm(aq),Polygon:Dm(bq)}),pq=M(Gp,{Track:Dm(Sp)}),rq=M(Hp,{ExtendedData:fq,Link:function(a,b){Lm(qq,a,b)},address:J(S),description:J(S),name:J(S),open:J(Vn),phoneNumber:J(S),
-visibility:J(Vn)}),qq=M(Hp,{href:J(Op)}),kq=M(Hp,{LinearRing:Em(Qp)}),sq=M(Hp,{Style:J(dq),key:J(S),styleUrl:J(Op)}),uq=M(Hp,{ExtendedData:fq,MultiGeometry:J(Yp,"geometry"),LineString:J(Up,"geometry"),LinearRing:J(Xp,"geometry"),Point:J(aq,"geometry"),Polygon:J(bq,"geometry"),Style:J(dq),StyleMap:function(a,b){var c=N(void 0,tq,a,b);if(c){var d=b[b.length-1];Array.isArray(c)?d.Style=c:"string"===typeof c?d.styleUrl=c:ha(!1,38)}},address:J(S),description:J(S),name:J(S),open:J(Vn),phoneNumber:J(S),
-styleUrl:J(Op),visibility:J(Vn)},M(Gp,{MultiTrack:J(function(a,b){var c=N([],pq,a,b);if(c){var d=new P(null);Zm(d,c);return d}},"geometry"),Track:J(Sp,"geometry")})),vq=M(Hp,{color:J(Mp),fill:J(Vn),outline:J(Vn)}),iq=M(Hp,{SimpleData:function(a,b){var c=a.getAttribute("name");if(null!==c){var d=S(a);b[b.length-1][c]=d}}}),eq=M(Hp,{IconStyle:function(a,b){var c=N({},mq,a,b);if(c){var d=b[b.length-1],e="Icon"in c?c.Icon:{},f=!("Icon"in c)||0<Object.keys(e).length,g,h=e.href;h?g=h:f&&(g=yp);var l,m,
-n;(h=c.hotSpot)?(l=[h.x,h.y],m=h.Wf,n=h.Xf):g===yp?(l=up,m=wp,n=vp):/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(g)&&(l=[.5,0],n=m=lp);var p,h=e.x,q=e.y;void 0!==h&&void 0!==q&&(p=[h,q]);var t,h=e.w,e=e.h;void 0!==h&&void 0!==e&&(t=[h,e]);var u,e=c.heading;void 0!==e&&(u=na(e));c=c.scale;c=isNaN(c)||void 0===c?zp:c*zp;f?(g==yp&&(t=xp,void 0===c&&(c=zp)),f=new jp({anchor:l,anchorOrigin:op,anchorXUnits:m,anchorYUnits:n,crossOrigin:"anonymous",offset:p,offsetOrigin:op,rotation:u,scale:c,size:t,src:g}),
-d.imageStyle=f):d.imageStyle=Bp}},LabelStyle:function(a,b){var c=N({},nq,a,b);c&&(b[b.length-1].textStyle=new pp({fill:new wi({color:"color"in c?c.color:sp}),scale:c.scale}))},LineStyle:function(a,b){var c=N({},oq,a,b);c&&(b[b.length-1].strokeStyle=new xi({color:"color"in c?c.color:sp,width:"width"in c?c.width:1}))},PolyStyle:function(a,b){var c=N({},vq,a,b);if(c){var d=b[b.length-1];d.fillStyle=new wi({color:"color"in c?c.color:sp});var e=c.fill;void 0!==e&&(d.fill=e);c=c.outline;void 0!==c&&(d.outline=
-c)}}}),tq=M(Hp,{Pair:function(a,b){var c=N({},sq,a,b);if(c){var d=c.key;d&&"normal"==d&&((d=c.styleUrl)&&(b[b.length-1]=d),(c=c.Style)&&(b[b.length-1]=c))}}});k=qp.prototype;k.Ef=function(a,b){var c=M(Hp,{Document:Cm(this.Ef,this),Folder:Cm(this.Ef,this),Placemark:Dm(this.Kf,this),Style:this.Ao.bind(this),StyleMap:this.zo.bind(this)});if(c=N([],c,a,b,this))return c};
-k.Kf=function(a,b){var c=N({geometry:null},uq,a,b);if(c){var d=new I,e=a.getAttribute("id");null!==e&&d.Wb(e);var e=b[0],f=c.geometry;f&&Tm(f,!1,e);d.Oa(f);delete c.geometry;this.c&&d.sf(Kp(c.Style,c.styleUrl,this.g,this.b,this.i));delete c.Style;d.H(c);return d}};k.Ao=function(a,b){var c=a.getAttribute("id");if(null!==c){var d=dq(a,b);d&&(c=a.baseURI?(new URL("#"+c,a.baseURI)).href:"#"+c,this.b[c]=d)}};
-k.zo=function(a,b){var c=a.getAttribute("id");if(null!==c){var d=N(void 0,tq,a,b);d&&(c=a.baseURI?(new URL("#"+c,a.baseURI)).href:"#"+c,this.b[c]=d)}};k.Gh=function(a,b){if(!Za(Hp,a.namespaceURI))return null;var c=this.Kf(a,[Rm(this,a,b)]);return c?c:null};
-k.kc=function(a,b){if(!Za(Hp,a.namespaceURI))return[];var c;c=a.localName;if("Document"==c||"Folder"==c)return(c=this.Ef(a,[Rm(this,a,b)]))?c:[];if("Placemark"==c)return(c=this.Kf(a,[Rm(this,a,b)]))?[c]:[];if("kml"==c){c=[];var d;for(d=a.firstElementChild;d;d=d.nextElementSibling){var e=this.kc(d,b);e&&bb(c,e)}return c}return[]};k.uo=function(a){if(zm(a))return wq(this,a);if(Am(a))return xq(this,a);if("string"===typeof a)return a=Bm(a),wq(this,a)};
-function wq(a,b){var c;for(c=b.firstChild;c;c=c.nextSibling)if(c.nodeType==Node.ELEMENT_NODE){var d=xq(a,c);if(d)return d}}function xq(a,b){var c;for(c=b.firstElementChild;c;c=c.nextElementSibling)if(Za(Hp,c.namespaceURI)&&"name"==c.localName)return S(c);for(c=b.firstElementChild;c;c=c.nextElementSibling){var d=c.localName;if(Za(Hp,c.namespaceURI)&&("Document"==d||"Folder"==d||"Placemark"==d||"kml"==d)&&(d=xq(a,c)))return d}}
-k.vo=function(a){var b=[];zm(a)?bb(b,yq(this,a)):Am(a)?bb(b,zq(this,a)):"string"===typeof a&&(a=Bm(a),bb(b,yq(this,a)));return b};function yq(a,b){var c,d=[];for(c=b.firstChild;c;c=c.nextSibling)c.nodeType==Node.ELEMENT_NODE&&bb(d,zq(a,c));return d}
-function zq(a,b){var c,d=[];for(c=b.firstElementChild;c;c=c.nextElementSibling)if(Za(Hp,c.namespaceURI)&&"NetworkLink"==c.localName){var e=N({},rq,c,[]);d.push(e)}for(c=b.firstElementChild;c;c=c.nextElementSibling)e=c.localName,!Za(Hp,c.namespaceURI)||"Document"!=e&&"Folder"!=e&&"kml"!=e||bb(d,zq(a,c));return d}function Aq(a,b){var c=ye(b),c=[255*(4==c.length?c[3]:1),c[2],c[1],c[0]],d;for(d=0;4>d;++d){var e=parseInt(c[d],10).toString(16);c[d]=1==e.length?"0"+e:e}co(a,c.join(""))}
-function Bq(a,b,c){a={node:a};var d=b.X(),e,f;"GeometryCollection"==d?(e=b.cf(),f=Cq):"MultiPoint"==d?(e=b.je(),f=Dq):"MultiLineString"==d?(e=b.od(),f=Eq):"MultiPolygon"==d?(e=b.Wd(),f=Fq):ha(!1,39);Mm(a,Gq,f,e,c)}function Hq(a,b,c){Mm({node:a},Iq,Jq,[b],c)}
-function Kq(a,b,c){var d={node:a};b.a&&a.setAttribute("id",b.a);a=b.N();var e=b.zc();e&&(e=e.call(b,0))&&(e=Array.isArray(e)?e[0]:e,this.l&&(a.Style=e),(e=e.Fa())&&(a.name=e.Fa()));e=Lq[c[c.length-1].node.namespaceURI];a=Km(a,e);Mm(d,Mq,Jm,a,c,e);a=c[0];(b=b.V())&&(b=Tm(b,!0,a));Mm(d,Mq,Cq,[b],c)}function Nq(a,b,c){var d=b.ka();a={node:a};a.layout=b.ia;a.stride=b.sa();Mm(a,Oq,Pq,[d],c)}function Qq(a,b,c){b=b.Vd();var d=b.shift();a={node:a};Mm(a,Rq,Sq,b,c);Mm(a,Rq,Tq,[d],c)}
-function Uq(a,b){eo(a,Math.round(b*b*1E6)/1E6)}
-var Vq=M(Hp,["Document","Placemark"]),Yq=M(Hp,{Document:L(function(a,b,c){Mm({node:a},Wq,Xq,b,c,void 0,this)}),Placemark:L(Kq)}),Wq=M(Hp,{Placemark:L(Kq)}),Zq={Point:"Point",LineString:"LineString",LinearRing:"LinearRing",Polygon:"Polygon",MultiPoint:"MultiGeometry",MultiLineString:"MultiGeometry",MultiPolygon:"MultiGeometry",GeometryCollection:"MultiGeometry"},$q=M(Hp,["href"],M(Gp,["x","y","w","h"])),ar=M(Hp,{href:L(co)},M(Gp,{x:L(eo),y:L(eo),w:L(eo),h:L(eo)})),br=M(Hp,["scale","heading","Icon",
-"hotSpot"]),dr=M(Hp,{Icon:L(function(a,b,c){a={node:a};var d=$q[c[c.length-1].node.namespaceURI],e=Km(b,d);Mm(a,ar,Jm,e,c,d);d=$q[Gp[0]];e=Km(b,d);Mm(a,ar,cr,e,c,d)}),heading:L(eo),hotSpot:L(function(a,b){a.setAttribute("x",b.x);a.setAttribute("y",b.y);a.setAttribute("xunits",b.Wf);a.setAttribute("yunits",b.Xf)}),scale:L(Uq)}),er=M(Hp,["color","scale"]),fr=M(Hp,{color:L(Aq),scale:L(Uq)}),gr=M(Hp,["color","width"]),hr=M(Hp,{color:L(Aq),width:L(eo)}),Iq=M(Hp,{LinearRing:L(Nq)}),Gq=M(Hp,{LineString:L(Nq),
-Point:L(Nq),Polygon:L(Qq),GeometryCollection:L(Bq)}),Lq=M(Hp,"name open visibility address phoneNumber description styleUrl Style".split(" ")),Mq=M(Hp,{MultiGeometry:L(Bq),LineString:L(Nq),LinearRing:L(Nq),Point:L(Nq),Polygon:L(Qq),Style:L(function(a,b,c){a={node:a};var d={},e=b.f,f=b.g,g=b.a;b=b.Fa();g instanceof jp&&(d.IconStyle=g);b&&(d.LabelStyle=b);f&&(d.LineStyle=f);e&&(d.PolyStyle=e);b=ir[c[c.length-1].node.namespaceURI];d=Km(d,b);Mm(a,jr,Jm,d,c,b)}),address:L(co),description:L(co),name:L(co),
-open:L(bo),phoneNumber:L(co),styleUrl:L(co),visibility:L(bo)}),Oq=M(Hp,{coordinates:L(function(a,b,c){c=c[c.length-1];var d=c.layout;c=c.stride;var e;"XY"==d||"XYM"==d?e=2:"XYZ"==d||"XYZM"==d?e=3:ha(!1,34);var f,g=b.length,h="";if(0<g){h+=b[0];for(d=1;d<e;++d)h+=","+b[d];for(f=c;f<g;f+=c)for(h+=" "+b[f],d=1;d<e;++d)h+=","+b[f+d]}co(a,h)})}),Rq=M(Hp,{outerBoundaryIs:L(Hq),innerBoundaryIs:L(Hq)}),kr=M(Hp,{color:L(Aq)}),ir=M(Hp,["IconStyle","LabelStyle","LineStyle","PolyStyle"]),jr=M(Hp,{IconStyle:L(function(a,
-b,c){a={node:a};var d={},e=b.Gb(),f=b.md(),g={href:b.b.o};if(e){g.w=e[0];g.h=e[1];var h=b.cc(),l=b.jc();l&&f&&0!==l[0]&&l[1]!==e[1]&&(g.x=l[0],g.y=f[1]-(l[1]+e[1]));h&&0!==h[0]&&h[1]!==e[1]&&(d.hotSpot={x:h[0],Wf:"pixels",y:e[1]-h[1],Xf:"pixels"})}d.Icon=g;e=b.c;1!==e&&(d.scale=e);b=b.o;0!==b&&(d.heading=b);b=br[c[c.length-1].node.namespaceURI];d=Km(d,b);Mm(a,dr,Jm,d,c,b)}),LabelStyle:L(function(a,b,c){a={node:a};var d={},e=b.b;e&&(d.color=e.b);(b=b.a)&&1!==b&&(d.scale=b);b=er[c[c.length-1].node.namespaceURI];
-d=Km(d,b);Mm(a,fr,Jm,d,c,b)}),LineStyle:L(function(a,b,c){a={node:a};var d=gr[c[c.length-1].node.namespaceURI];b=Km({color:b.a,width:b.f},d);Mm(a,hr,Jm,b,c,d)}),PolyStyle:L(function(a,b,c){Mm({node:a},kr,lr,[b.b],c)})});function cr(a,b,c){return wm(Gp[0],"gx:"+c)}function Xq(a,b){return wm(b[b.length-1].node.namespaceURI,"Placemark")}function Cq(a,b){if(a)return wm(b[b.length-1].node.namespaceURI,Zq[a.X()])}
-var lr=Hm("color"),Pq=Hm("coordinates"),Sq=Hm("innerBoundaryIs"),Dq=Hm("Point"),Eq=Hm("LineString"),Jq=Hm("LinearRing"),Fq=Hm("Polygon"),Tq=Hm("outerBoundaryIs");
-qp.prototype.a=function(a,b){b=Sm(this,b);var c=wm(Hp[4],"kml");c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:gx",Gp[0]);c.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");c.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation","http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");var d={node:c},e={};1<a.length?e.Document=a:1==a.length&&(e.Placemark=a[0]);var f=Vq[c.namespaceURI],
-e=Km(e,f);Mm(d,Yq,Jm,e,[b],f,this);return c};var mr,nr,or,pr;
-(function(){var a={},b={ja:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.ja=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Bp=c()}})(function(){return function d(a,b,g){function h(m,p){if(!b[m]){if(!a[m]){var q="function"==typeof require&&require;if(!p&&q)return q(m,!0);if(l)return l(m,!0);q=Error("Cannot find module '"+m+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[m]={ja:{}};a[m][0].call(q.ja,function(b){var d=
-a[m][1][b];return h(d?d:b)},q,q.ja,d,a,b,g)}return b[m].ja}for(var l="function"==typeof require&&require,m=0;m<g.length;m++)h(g[m]);return h}({1:[function(a,b,f){f.read=function(a,b,d,e,f){var p;p=8*f-e-1;var q=(1<<p)-1,t=q>>1,u=-7;f=d?f-1:0;var y=d?-1:1,x=a[b+f];f+=y;d=x&(1<<-u)-1;x>>=-u;for(u+=p;0<u;d=256*d+a[b+f],f+=y,u-=8);p=d&(1<<-u)-1;d>>=-u;for(u+=e;0<u;p=256*p+a[b+f],f+=y,u-=8);if(0===d)d=1-t;else{if(d===q)return p?NaN:Infinity*(x?-1:1);p+=Math.pow(2,e);d-=t}return(x?-1:1)*p*Math.pow(2,d-
-e)};f.write=function(a,b,d,e,f,p){var q,t=8*p-f-1,u=(1<<t)-1,y=u>>1,x=23===f?Math.pow(2,-24)-Math.pow(2,-77):0;p=e?0:p-1;var C=e?1:-1,z=0>b||0===b&&0>1/b?1:0;b=Math.abs(b);isNaN(b)||Infinity===b?(b=isNaN(b)?1:0,e=u):(e=Math.floor(Math.log(b)/Math.LN2),1>b*(q=Math.pow(2,-e))&&(e--,q*=2),b=1<=e+y?b+x/q:b+x*Math.pow(2,1-y),2<=b*q&&(e++,q/=2),e+y>=u?(b=0,e=u):1<=e+y?(b=(b*q-1)*Math.pow(2,f),e+=y):(b=b*Math.pow(2,y-1)*Math.pow(2,f),e=0));for(;8<=f;a[d+p]=b&255,p+=C,b/=256,f-=8);e=e<<f|b;for(t+=f;0<t;a[d+
-p]=e&255,p+=C,e/=256,t-=8);a[d+p-C]|=128*z}},{}],2:[function(a,b){function f(a){this.bc=ArrayBuffer.isView(a)?a:new Uint8Array(a||0);this.type=this.ca=0;this.length=this.bc.length}function g(a,b,d){var e=d.bc,f,g;g=e[d.ca++];f=(g&112)>>4;if(128>g)return h(a,f,b);g=e[d.ca++];f|=(g&127)<<3;if(128>g)return h(a,f,b);g=e[d.ca++];f|=(g&127)<<10;if(128>g)return h(a,f,b);g=e[d.ca++];f|=(g&127)<<17;if(128>g)return h(a,f,b);g=e[d.ca++];f|=(g&127)<<24;if(128>g)return h(a,f,b);g=e[d.ca++];if(128>g)return h(a,
-f|(g&1)<<31,b);throw Error("Expected varint not more than 10 bytes");}function h(a,b,d){return d?4294967296*b+(a>>>0):4294967296*(b>>>0)+(a>>>0)}b.ja=f;var l=a("ieee754");f.f=0;f.g=1;f.b=2;f.a=5;f.prototype={If:function(a,b,d){for(d=d||this.length;this.ca<d;){var e=this.Ea(),f=e>>3,g=this.ca;this.type=e&7;a(f,b,this);this.ca===g&&this.$o(e)}return b},qo:function(){var a=l.read(this.bc,this.ca,!0,23,4);this.ca+=4;return a},mo:function(){var a=l.read(this.bc,this.ca,!0,52,8);this.ca+=8;return a},Ea:function(a){var b=
-this.bc,d,e;e=b[this.ca++];d=e&127;if(128>e)return d;e=b[this.ca++];d|=(e&127)<<7;if(128>e)return d;e=b[this.ca++];d|=(e&127)<<14;if(128>e)return d;e=b[this.ca++];d|=(e&127)<<21;if(128>e)return d;e=b[this.ca];return g(d|(e&15)<<28,a,this)},Bo:function(){return this.Ea(!0)},zd:function(){var a=this.Ea();return 1===a%2?(a+1)/-2:a/2},ko:function(){return!!this.Ea()},Mf:function(){for(var a=this.Ea()+this.ca,b=this.bc,d="",e=this.ca;e<a;){var f=b[e],g=null,h=239<f?4:223<f?3:191<f?2:1;if(e+h>a)break;var l,
-C,z;if(1===h)128>f&&(g=f);else if(2===h)l=b[e+1],128===(l&192)&&(g=(f&31)<<6|l&63,127>=g&&(g=null));else if(3===h){if(l=b[e+1],C=b[e+2],128===(l&192)&&128===(C&192)&&(g=(f&15)<<12|(l&63)<<6|C&63,2047>=g||55296<=g&&57343>=g))g=null}else 4===h&&(l=b[e+1],C=b[e+2],z=b[e+3],128===(l&192)&&128===(C&192)&&128===(z&192)&&(g=(f&15)<<18|(l&63)<<12|(C&63)<<6|z&63,65535>=g||1114112<=g))&&(g=null);null===g?(g=65533,h=1):65535<g&&(g-=65536,d+=String.fromCharCode(g>>>10&1023|55296),g=56320|g&1023);d+=String.fromCharCode(g);
-e+=h}this.ca=a;return d},$o:function(a){a&=7;if(a===f.f)for(;127<this.bc[this.ca++];);else if(a===f.b)this.ca=this.Ea()+this.ca;else if(a===f.a)this.ca+=4;else if(a===f.g)this.ca+=8;else throw Error("Unimplemented type: "+a);}}},{ieee754:1}]},{},[2])(2)});mr=b.ja})();(function(){var a={},b={ja:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.ja=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Ep=c()}})(function(){return function d(a,b,g){function h(m,p){if(!b[m]){if(!a[m]){var q="function"==typeof require&&require;if(!p&&q)return q(m,!0);if(l)return l(m,!0);q=Error("Cannot find module '"+m+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[m]={ja:{}};a[m][0].call(q.ja,function(b){var d=
-a[m][1][b];return h(d?d:b)},q,q.ja,d,a,b,g)}return b[m].ja}for(var l="function"==typeof require&&require,m=0;m<g.length;m++)h(g[m]);return h}({1:[function(a,b){function f(a,b){this.x=a;this.y=b}b.ja=f;f.prototype={clone:function(){return new f(this.x,this.y)},add:function(a){return this.clone().Vi(a)},rotate:function(a){return this.clone().ej(a)},round:function(){return this.clone().fj()},angle:function(){return Math.atan2(this.y,this.x)},Vi:function(a){this.x+=a.x;this.y+=a.y;return this},ej:function(a){var b=
-Math.cos(a);a=Math.sin(a);var d=a*this.x+b*this.y;this.x=b*this.x-a*this.y;this.y=d;return this},fj:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this}};f.b=function(a){return a instanceof f?a:Array.isArray(a)?new f(a[0],a[1]):a}},{}],2:[function(a,b){b.ja.Ui=a("./lib/vectortile.js");b.ja.yp=a("./lib/vectortilefeature.js");b.ja.zp=a("./lib/vectortilelayer.js")},{"./lib/vectortile.js":3,"./lib/vectortilefeature.js":4,"./lib/vectortilelayer.js":5}],3:[function(a,b){function f(a,
-b,d){3===a&&(a=new g(d,d.Ea()+d.ca),a.length&&(b[a.name]=a))}var g=a("./vectortilelayer");b.ja=function(a,b){this.layers=a.If(f,{},b)}},{"./vectortilelayer":5}],4:[function(a,b){function f(a,b,d,e,f){this.properties={};this.extent=d;this.type=0;this.nc=a;this.Ne=-1;this.Kd=e;this.Md=f;a.If(g,this,b)}function g(a,b,d){if(1==a)b.id=d.Ea();else if(2==a)for(a=d.Ea()+d.ca;d.ca<a;){var e=b.Kd[d.Ea()],f=b.Md[d.Ea()];b.properties[e]=f}else 3==a?b.type=d.Ea():4==a&&(b.Ne=d.ca)}var h=a("point-geometry");b.ja=
-f;f.b=["Unknown","Point","LineString","Polygon"];f.prototype.Ng=function(){var a=this.nc;a.ca=this.Ne;for(var b=a.Ea()+a.ca,d=1,e=0,f=0,g=0,u=[],y;a.ca<b;)if(e||(e=a.Ea(),d=e&7,e>>=3),e--,1===d||2===d)f+=a.zd(),g+=a.zd(),1===d&&(y&&u.push(y),y=[]),y.push(new h(f,g));else if(7===d)y&&y.push(y[0].clone());else throw Error("unknown command "+d);y&&u.push(y);return u};f.prototype.bbox=function(){var a=this.nc;a.ca=this.Ne;for(var b=a.Ea()+a.ca,d=1,e=0,f=0,g=0,h=Infinity,y=-Infinity,x=Infinity,C=-Infinity;a.ca<
-b;)if(e||(e=a.Ea(),d=e&7,e>>=3),e--,1===d||2===d)f+=a.zd(),g+=a.zd(),f<h&&(h=f),f>y&&(y=f),g<x&&(x=g),g>C&&(C=g);else if(7!==d)throw Error("unknown command "+d);return[h,x,y,C]}},{"point-geometry":1}],5:[function(a,b){function f(a,b){this.version=1;this.name=null;this.extent=4096;this.length=0;this.nc=a;this.Kd=[];this.Md=[];this.Jd=[];a.If(g,this,b);this.length=this.Jd.length}function g(a,b,d){15===a?b.version=d.Ea():1===a?b.name=d.Mf():5===a?b.extent=d.Ea():2===a?b.Jd.push(d.ca):3===a?b.Kd.push(d.Mf()):
-4===a&&b.Md.push(h(d))}function h(a){for(var b=null,d=a.Ea()+a.ca;a.ca<d;)b=a.Ea()>>3,b=1===b?a.Mf():2===b?a.qo():3===b?a.mo():4===b?a.Bo():5===b?a.Ea():6===b?a.zd():7===b?a.ko():null;return b}var l=a("./vectortilefeature.js");b.ja=f;f.prototype.feature=function(a){if(0>a||a>=this.Jd.length)throw Error("feature index out of bounds");this.nc.ca=this.Jd[a];a=this.nc.Ea()+this.nc.ca;return new l(this.nc,a,this.extent,this.Kd,this.Md)}},{"./vectortilefeature.js":4}]},{},[2])(2)});nr=b.ja})();function qr(a,b,c,d){this.g=a;this.b=b;this.c=c;this.f=d}k=qr.prototype;k.get=function(a){return this.f[a]};k.Eb=function(){return this.c};k.D=function(){this.a||(this.a="Point"===this.g?Lb(this.b):Mb(this.b,0,this.b.length,2));return this.a};k.Ob=function(){return this.b};k.ka=qr.prototype.Ob;k.V=function(){return this};k.Bm=function(){return this.f};k.pd=qr.prototype.V;k.sa=function(){return 2};k.zc=da;k.X=function(){return this.g};function rr(a){Qm.call(this);a=a?a:{};this.defaultDataProjection=new lc({code:"",units:"tile-pixels"});this.b=a.featureClass?a.featureClass:qr;this.g=a.geometryName?a.geometryName:"geometry";this.a=a.layerName?a.layerName:"layer";this.f=a.layers?a.layers:null}v(rr,Qm);rr.prototype.X=function(){return"arraybuffer"};
-rr.prototype.Ha=function(a,b){var c=this.f,d=new mr(a),d=new nr.Ui(d),e=[],f=this.b,g,h,l;for(l in d.layers)if(!c||-1!=c.indexOf(l)){g=d.layers[l];for(var m=0,n=g.length;m<n;++m){if(f===qr){var p=g.feature(m);h=l;var q=p.Ng(),t=[],u=[];sr(q,u,t);var y=p.type,x=void 0;1===y?x=1===q.length?"Point":"MultiPoint":2===y?x=1===q.length?"LineString":"MultiLineString":3===y&&(x="Polygon");p=p.properties;p[this.a]=h;h=new this.b(x,u,t,p)}else{q=g.feature(m);p=l;x=b;h=new this.b;t=q.id;u=q.properties;u[this.a]=
-p;p=q.type;if(0===p)p=null;else{var q=q.Ng(),y=[],C=[];sr(q,C,y);var z=void 0;1===p?z=1===q.length?new A(null):new Q(null):2===p?1===q.length?z=new O(null):z=new P(null):3===p&&(z=new B(null));z.aa("XY",C,y);p=z}(x=Tm(p,!1,Sm(this,x)))&&(u[this.g]=x);h.Wb(t);h.H(u);h.Dc(this.g)}e.push(h)}}return e};rr.prototype.Sa=function(){return this.defaultDataProjection};rr.prototype.c=function(a){this.f=a};
-function sr(a,b,c){for(var d=0,e=0,f=a.length;e<f;++e){var g=a[e],h,l;h=0;for(l=g.length;h<l;++h){var m=g[h];b.push(m.x,m.y)}d+=2*h;c.push(d)}};function tr(){Pn.call(this);this.defaultDataProjection=qc("EPSG:4326")}v(tr,Pn);function ur(a,b){b[b.length-1].Ed[a.getAttribute("k")]=a.getAttribute("v")}
-var vr=[null],wr=M(vr,{nd:function(a,b){b[b.length-1].Oc.push(a.getAttribute("ref"))},tag:ur}),yr=M(vr,{node:function(a,b){var c=b[0],d=b[b.length-1],e=a.getAttribute("id"),f=[parseFloat(a.getAttribute("lon")),parseFloat(a.getAttribute("lat"))];d.Rg[e]=f;var g=N({Ed:{}},xr,a,b);xa(g.Ed)||(f=new A(f),Tm(f,!1,c),c=new I(f),c.Wb(e),c.H(g.Ed),d.features.push(c))},way:function(a,b){for(var c=b[0],d=a.getAttribute("id"),e=N({Oc:[],Ed:{}},wr,a,b),f=b[b.length-1],g=[],h=0,l=e.Oc.length;h<l;h++)bb(g,f.Rg[e.Oc[h]]);
-e.Oc[0]==e.Oc[e.Oc.length-1]?(h=new B(null),h.aa("XY",g,[g.length])):(h=new O(null),h.aa("XY",g));Tm(h,!1,c);c=new I(h);c.Wb(d);c.H(e.Ed);f.features.push(c)}}),xr=M(vr,{tag:ur});tr.prototype.kc=function(a,b){var c=Rm(this,a,b);return"osm"==a.localName&&(c=N({Rg:{},features:[]},yr,a,[c]),c.features)?c.features:[]};function zr(a){return a.getAttributeNS("http://www.w3.org/1999/xlink","href")};function Ar(){}Ar.prototype.read=function(a){return zm(a)?this.a(a):Am(a)?this.b(a):"string"===typeof a?(a=Bm(a),this.a(a)):null};function Br(){}v(Br,Ar);Br.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};Br.prototype.b=function(a){return(a=N({},Cr,a,[]))?a:null};
-var Dr=[null,"http://www.opengis.net/ows/1.1"],Cr=M(Dr,{ServiceIdentification:J(function(a,b){return N({},Er,a,b)}),ServiceProvider:J(function(a,b){return N({},Fr,a,b)}),OperationsMetadata:J(function(a,b){return N({},Gr,a,b)})}),Hr=M(Dr,{DeliveryPoint:J(S),City:J(S),AdministrativeArea:J(S),PostalCode:J(S),Country:J(S),ElectronicMailAddress:J(S)}),Ir=M(Dr,{Value:Fm(function(a){return S(a)})}),Jr=M(Dr,{AllowedValues:J(function(a,b){return N({},Ir,a,b)})}),Lr=M(Dr,{Phone:J(function(a,b){return N({},
-Kr,a,b)}),Address:J(function(a,b){return N({},Hr,a,b)})}),Nr=M(Dr,{HTTP:J(function(a,b){return N({},Mr,a,b)})}),Mr=M(Dr,{Get:Fm(function(a,b){var c=zr(a);return c?N({href:c},Or,a,b):void 0}),Post:void 0}),Pr=M(Dr,{DCP:J(function(a,b){return N({},Nr,a,b)})}),Gr=M(Dr,{Operation:function(a,b){var c=a.getAttribute("name"),d=N({},Pr,a,b);d&&(b[b.length-1][c]=d)}}),Kr=M(Dr,{Voice:J(S),Facsimile:J(S)}),Or=M(Dr,{Constraint:Fm(function(a,b){var c=a.getAttribute("name");return c?N({name:c},Jr,a,b):void 0})}),
-Qr=M(Dr,{IndividualName:J(S),PositionName:J(S),ContactInfo:J(function(a,b){return N({},Lr,a,b)})}),Er=M(Dr,{Title:J(S),ServiceTypeVersion:J(S),ServiceType:J(S)}),Fr=M(Dr,{ProviderName:J(S),ProviderSite:J(zr),ServiceContact:J(function(a,b){return N({},Qr,a,b)})});function Rr(a,b,c,d){var e;void 0!==d?e=d:e=[];for(var f=d=0;f<b;){var g=a[f++];e[d++]=a[f++];e[d++]=g;for(g=2;g<c;++g)e[d++]=a[f++]}e.length=d};function Sr(a){a=a?a:{};Qm.call(this);this.defaultDataProjection=qc("EPSG:4326");this.b=a.factor?a.factor:1E5;this.a=a.geometryLayout?a.geometryLayout:"XY"}v(Sr,Yo);function Tr(a,b,c){var d,e=Array(b);for(d=0;d<b;++d)e[d]=0;var f,g;f=0;for(g=a.length;f<g;)for(d=0;d<b;++d,++f){var h=a[f],l=h-e[d];e[d]=h;a[f]=l}return Ur(a,c?c:1E5)}function Vr(a,b,c){var d,e=Array(b);for(d=0;d<b;++d)e[d]=0;a=Wr(a,c?c:1E5);var f;c=0;for(f=a.length;c<f;)for(d=0;d<b;++d,++c)e[d]+=a[c],a[c]=e[d];return a}
-function Ur(a,b){var c=b?b:1E5,d,e;d=0;for(e=a.length;d<e;++d)a[d]=Math.round(a[d]*c);c=0;for(d=a.length;c<d;++c)e=a[c],a[c]=0>e?~(e<<1):e<<1;c="";d=0;for(e=a.length;d<e;++d){for(var f=a[d],g,h="";32<=f;)g=(32|f&31)+63,h+=String.fromCharCode(g),f>>=5;h+=String.fromCharCode(f+63);c+=h}return c}
-function Wr(a,b){var c=b?b:1E5,d=[],e=0,f=0,g,h;g=0;for(h=a.length;g<h;++g){var l=a.charCodeAt(g)-63,e=e|(l&31)<<f;32>l?(d.push(e),f=e=0):f+=5}e=0;for(f=d.length;e<f;++e)g=d[e],d[e]=g&1?~(g>>1):g>>1;e=0;for(f=d.length;e<f;++e)d[e]/=c;return d}k=Sr.prototype;k.wd=function(a,b){var c=this.yd(a,b);return new I(c)};k.Hf=function(a,b){return[this.wd(a,b)]};k.yd=function(a,b){var c=Pc(this.a),d=Vr(a,c,this.b);Rr(d,d.length,c,d);c=cd(d,0,d.length,c);return Tm(new O(c,this.a),!1,Sm(this,b))};
-k.Fe=function(a,b){var c=a.V();if(c)return this.Gd(c,b);ha(!1,40);return""};k.ui=function(a,b){return this.Fe(a[0],b)};k.Gd=function(a,b){a=Tm(a,!0,Sm(this,b));var c=a.ka(),d=a.sa();Rr(c,c.length,d,c);return Tr(c,d,this.b)};function Xr(a){a=a?a:{};Qm.call(this);this.defaultDataProjection=qc(a.defaultDataProjection?a.defaultDataProjection:"EPSG:4326")}v(Xr,Um);function Yr(a,b){var c=[],d,e,f,g;f=0;for(g=a.length;f<g;++f)d=a[f],0<f&&c.pop(),0<=d?e=b[d]:e=b[~d].slice().reverse(),c.push.apply(c,e);d=0;for(e=c.length;d<e;++d)c[d]=c[d].slice();return c}function Zr(a,b,c,d,e){a=a.geometries;var f=[],g,h;g=0;for(h=a.length;g<h;++g)f[g]=$r(a[g],b,c,d,e);return f}
-function $r(a,b,c,d,e){var f=a.type,g=as[f];b="Point"===f||"MultiPoint"===f?g(a,c,d):g(a,b);c=new I;c.Oa(Tm(b,!1,e));void 0!==a.id&&c.Wb(a.id);a.properties&&c.H(a.properties);return c}
-Xr.prototype.Gf=function(a,b){if("Topology"==a.type){var c,d=null,e=null;a.transform&&(c=a.transform,d=c.scale,e=c.translate);var f=a.arcs;if(c){c=d;var g=e,h,l;h=0;for(l=f.length;h<l;++h){var m=f[h],n=c,p=g,q=0,t=0,u,y,x;y=0;for(x=m.length;y<x;++y)u=m[y],q+=u[0],t+=u[1],u[0]=q,u[1]=t,bs(u,n,p)}}c=[];g=wa(a.objects);h=0;for(l=g.length;h<l;++h)"GeometryCollection"===g[h].type?(m=g[h],c.push.apply(c,Zr(m,f,d,e,b))):(m=g[h],c.push($r(m,f,d,e,b)));return c}return[]};
-function bs(a,b,c){a[0]=a[0]*b[0]+c[0];a[1]=a[1]*b[1]+c[1]}Xr.prototype.Sa=function(){return this.defaultDataProjection};
-var as={Point:function(a,b,c){a=a.coordinates;b&&c&&bs(a,b,c);return new A(a)},LineString:function(a,b){var c=Yr(a.arcs,b);return new O(c)},Polygon:function(a,b){var c=[],d,e;d=0;for(e=a.arcs.length;d<e;++d)c[d]=Yr(a.arcs[d],b);return new B(c)},MultiPoint:function(a,b,c){a=a.coordinates;var d,e;if(b&&c)for(d=0,e=a.length;d<e;++d)bs(a[d],b,c);return new Q(a)},MultiLineString:function(a,b){var c=[],d,e;d=0;for(e=a.arcs.length;d<e;++d)c[d]=Yr(a.arcs[d],b);return new P(c)},MultiPolygon:function(a,b){var c=
-[],d,e,f,g,h,l;h=0;for(l=a.arcs.length;h<l;++h){d=a.arcs[h];e=[];f=0;for(g=d.length;f<g;++f)e[f]=Yr(d[f],b);c[h]=e}return new R(c)}};function cs(a){a=a?a:{};this.i=a.featureType;this.g=a.featureNS;this.b=a.gmlFormat?a.gmlFormat:new go;this.c=a.schemaLocation?a.schemaLocation:"http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd";Pn.call(this)}v(cs,Pn);cs.prototype.kc=function(a,b){var c={featureType:this.i,featureNS:this.g};ua(c,Rm(this,a,b?b:{}));c=[c];this.b.b["http://www.opengis.net/gml"].featureMember=Dm(Tn.prototype.xd);(c=N([],this.b.b,a,c,this.b))||(c=[]);return c};
-cs.prototype.o=function(a){if(zm(a))return ds(a);if(Am(a))return N({},es,a,[]);if("string"===typeof a)return a=Bm(a),ds(a)};cs.prototype.l=function(a){if(zm(a))return fs(this,a);if(Am(a))return gs(this,a);if("string"===typeof a)return a=Bm(a),fs(this,a)};function fs(a,b){for(var c=b.firstChild;c;c=c.nextSibling)if(c.nodeType==Node.ELEMENT_NODE)return gs(a,c)}var hs={"http://www.opengis.net/gml":{boundedBy:J(Tn.prototype.xe,"bounds")}};
-function gs(a,b){var c={},d=ao(b.getAttribute("numberOfFeatures"));c.numberOfFeatures=d;return N(c,hs,b,[],a.b)}
-var is={"http://www.opengis.net/wfs":{totalInserted:J($n),totalUpdated:J($n),totalDeleted:J($n)}},js={"http://www.opengis.net/ogc":{FeatureId:Dm(function(a){return a.getAttribute("fid")})}},ks={"http://www.opengis.net/wfs":{Feature:function(a,b){Lm(js,a,b)}}},es={"http://www.opengis.net/wfs":{TransactionSummary:J(function(a,b){return N({},is,a,b)},"transactionSummary"),InsertResults:J(function(a,b){return N([],ks,a,b)},"insertIds")}};
-function ds(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return N({},es,a,[])}var ls={"http://www.opengis.net/wfs":{PropertyName:L(co)}};function ms(a,b){var c=wm("http://www.opengis.net/ogc","Filter"),d=wm("http://www.opengis.net/ogc","FeatureId");c.appendChild(d);d.setAttribute("fid",b);a.appendChild(c)}
-var ns={"http://www.opengis.net/wfs":{Insert:L(function(a,b,c){var d=c[c.length-1],d=wm(d.featureNS,d.featureType);a.appendChild(d);go.prototype.ti(d,b,c)}),Update:L(function(a,b,c){var d=c[c.length-1];ha(void 0!==b.a,27);var e=d.featureType,f=d.featurePrefix,f=f?f:"feature",g=d.featureNS;a.setAttribute("typeName",f+":"+e);a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+f,g);e=b.a;if(void 0!==e){for(var f=b.O(),g=[],h=0,l=f.length;h<l;h++){var m=b.get(f[h]);void 0!==m&&g.push({name:f[h],
-value:m})}Mm({node:a,srsName:d.srsName},ns,Hm("Property"),g,c);ms(a,e)}}),Delete:L(function(a,b,c){var d=c[c.length-1];ha(void 0!==b.a,26);c=d.featureType;var e=d.featurePrefix,e=e?e:"feature",d=d.featureNS;a.setAttribute("typeName",e+":"+c);a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+e,d);b=b.a;void 0!==b&&ms(a,b)}),Property:L(function(a,b,c){var d=wm("http://www.opengis.net/wfs","Name");a.appendChild(d);co(d,b.name);void 0!==b.value&&null!==b.value&&(d=wm("http://www.opengis.net/wfs",
-"Value"),a.appendChild(d),b.value instanceof Mc?go.prototype.ad(d,b.value,c):co(d,b.value))}),Native:L(function(a,b){b.ip&&a.setAttribute("vendorId",b.ip);void 0!==b.No&&a.setAttribute("safeToIgnore",b.No);void 0!==b.value&&co(a,b.value)})}};function os(a,b,c){a={node:a};var d=b.b;Mm(a,ps,Hm(d.Hb),[d],c);b=b.a;Mm(a,ps,Hm(b.Hb),[b],c)}function qs(a,b){void 0!==b.a&&a.setAttribute("matchCase",b.a.toString());rs(a,b.b);ss(a,""+b.g)}
-function ts(a,b,c){a=wm("http://www.opengis.net/ogc",a);co(a,c);b.appendChild(a)}function rs(a,b){ts("PropertyName",a,b)}function ss(a,b){ts("Literal",a,b)}
-var ps={"http://www.opengis.net/wfs":{Query:L(function(a,b,c){var d=c[c.length-1],e=d.featurePrefix,f=d.featureNS,g=d.propertyNames,h=d.srsName;a.setAttribute("typeName",(e?e+":":"")+b);h&&a.setAttribute("srsName",h);f&&a.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:"+e,f);b=ua({},d);b.node=a;Mm(b,ls,Hm("PropertyName"),g,c);if(d=d.filter)g=wm("http://www.opengis.net/ogc","Filter"),a.appendChild(g),Mm({node:g},ps,Hm(d.Hb),[d],c)})},"http://www.opengis.net/ogc":{And:L(os),Or:L(os),Not:L(function(a,
-b,c){b=b.condition;Mm({node:a},ps,Hm(b.Hb),[b],c)}),BBOX:L(function(a,b,c){c[c.length-1].srsName=b.srsName;rs(a,b.geometryName);go.prototype.ad(a,b.extent,c)}),Intersects:L(function(a,b,c){c[c.length-1].srsName=b.srsName;rs(a,b.geometryName);go.prototype.ad(a,b.geometry,c)}),Within:L(function(a,b,c){c[c.length-1].srsName=b.srsName;rs(a,b.geometryName);go.prototype.ad(a,b.geometry,c)}),PropertyIsEqualTo:L(qs),PropertyIsNotEqualTo:L(qs),PropertyIsLessThan:L(qs),PropertyIsLessThanOrEqualTo:L(qs),PropertyIsGreaterThan:L(qs),
-PropertyIsGreaterThanOrEqualTo:L(qs),PropertyIsNull:L(function(a,b){rs(a,b.b)}),PropertyIsBetween:L(function(a,b){rs(a,b.b);var c=wm("http://www.opengis.net/ogc","LowerBoundary");a.appendChild(c);ss(c,""+b.a);c=wm("http://www.opengis.net/ogc","UpperBoundary");a.appendChild(c);ss(c,""+b.g)}),PropertyIsLike:L(function(a,b){a.setAttribute("wildCard",b.i);a.setAttribute("singleChar",b.c);a.setAttribute("escapeChar",b.g);void 0!==b.a&&a.setAttribute("matchCase",b.a.toString());rs(a,b.b);ss(a,""+b.f)})}};
-cs.prototype.s=function(a){var b=wm("http://www.opengis.net/wfs","GetFeature");b.setAttribute("service","WFS");b.setAttribute("version","1.1.0");var c;if(a&&(a.handle&&b.setAttribute("handle",a.handle),a.outputFormat&&b.setAttribute("outputFormat",a.outputFormat),void 0!==a.maxFeatures&&b.setAttribute("maxFeatures",a.maxFeatures),a.resultType&&b.setAttribute("resultType",a.resultType),void 0!==a.startIndex&&b.setAttribute("startIndex",a.startIndex),void 0!==a.count&&b.setAttribute("count",a.count),
-c=a.filter,a.bbox)){ha(a.geometryName,12);var d=Fn(a.geometryName,a.bbox,a.srsName);c?c=En(c,d):c=d}b.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.c);c={node:b,srsName:a.srsName,featureNS:a.featureNS?a.featureNS:this.g,featurePrefix:a.featurePrefix,geometryName:a.geometryName,filter:c,propertyNames:a.propertyNames?a.propertyNames:[]};ha(Array.isArray(a.featureTypes),11);a=a.featureTypes;c=[c];d=ua({},c[c.length-1]);d.node=b;Mm(d,ps,Hm("Query"),a,c);return b};
-cs.prototype.C=function(a,b,c,d){var e=[],f=wm("http://www.opengis.net/wfs","Transaction");f.setAttribute("service","WFS");f.setAttribute("version","1.1.0");var g,h;d&&(g=d.gmlOptions?d.gmlOptions:{},d.handle&&f.setAttribute("handle",d.handle));f.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance","xsi:schemaLocation",this.c);a&&(h={node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,srsName:d.srsName},ua(h,g),Mm(h,ns,Hm("Insert"),a,e));b&&(h={node:f,featureNS:d.featureNS,
-featureType:d.featureType,featurePrefix:d.featurePrefix,srsName:d.srsName},ua(h,g),Mm(h,ns,Hm("Update"),b,e));c&&Mm({node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,srsName:d.srsName},ns,Hm("Delete"),c,e);d.nativeElements&&Mm({node:f,featureNS:d.featureNS,featureType:d.featureType,featurePrefix:d.featurePrefix,srsName:d.srsName},ns,Hm("Native"),d.nativeElements,e);return f};
-cs.prototype.Lf=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.Ae(a);return null};cs.prototype.Ae=function(a){if(a.firstElementChild&&a.firstElementChild.firstElementChild)for(a=a.firstElementChild.firstElementChild,a=a.firstElementChild;a;a=a.nextElementSibling)if(0!==a.childNodes.length&&(1!==a.childNodes.length||3!==a.firstChild.nodeType)){var b=[{}];this.b.xe(a,b);return qc(b.pop().srsName)}return null};function us(a){a=a?a:{};Qm.call(this);this.b=void 0!==a.splitCollection?a.splitCollection:!1}v(us,Yo);function vs(a){a=a.Y();return 0===a.length?"":a[0]+" "+a[1]}function ws(a){a=a.Y();for(var b=[],c=0,d=a.length;c<d;++c)b.push(a[c][0]+" "+a[c][1]);return b.join(",")}function xs(a){var b=[];a=a.Vd();for(var c=0,d=a.length;c<d;++c)b.push("("+ws(a[c])+")");return b.join(",")}function ys(a){var b=a.X();a=(0,zs[b])(a);b=b.toUpperCase();return 0===a.length?b+" EMPTY":b+"("+a+")"}
-var zs={Point:vs,LineString:ws,Polygon:xs,MultiPoint:function(a){var b=[];a=a.je();for(var c=0,d=a.length;c<d;++c)b.push("("+vs(a[c])+")");return b.join(",")},MultiLineString:function(a){var b=[];a=a.od();for(var c=0,d=a.length;c<d;++c)b.push("("+ws(a[c])+")");return b.join(",")},MultiPolygon:function(a){var b=[];a=a.Wd();for(var c=0,d=a.length;c<d;++c)b.push("("+xs(a[c])+")");return b.join(",")},GeometryCollection:function(a){var b=[];a=a.cf();for(var c=0,d=a.length;c<d;++c)b.push(ys(a[c]));return b.join(",")}};
-k=us.prototype;k.wd=function(a,b){var c=this.yd(a,b);if(c){var d=new I;d.Oa(c);return d}return null};k.Hf=function(a,b){var c=[],d=this.yd(a,b);this.b&&"GeometryCollection"==d.X()?c=d.f:c=[d];for(var e=[],f=0,g=c.length;f<g;++f)d=new I,d.Oa(c[f]),e.push(d);return e};k.yd=function(a,b){var c;c=new As(new Bs(a));c.b=Cs(c.a);return(c=Ds(c))?Tm(c,!1,b):null};k.Fe=function(a,b){var c=a.V();return c?this.Gd(c,b):""};
-k.ui=function(a,b){if(1==a.length)return this.Fe(a[0],b);for(var c=[],d=0,e=a.length;d<e;++d)c.push(a[d].V());c=new Gn(c);return this.Gd(c,b)};k.Gd=function(a,b){return ys(Tm(a,!0,b))};function Bs(a){this.a=a;this.b=-1}
-function Cs(a){var b=a.a.charAt(++a.b),c={position:a.b,value:b};if("("==b)c.type=2;else if(","==b)c.type=5;else if(")"==b)c.type=3;else if("0"<=b&&"9">=b||"."==b||"-"==b){c.type=4;var d,b=a.b,e=!1,f=!1;do{if("."==d)e=!0;else if("e"==d||"E"==d)f=!0;d=a.a.charAt(++a.b)}while("0"<=d&&"9">=d||"."==d&&(void 0===e||!e)||!f&&("e"==d||"E"==d)||f&&("-"==d||"+"==d));a=parseFloat(a.a.substring(b,a.b--));c.value=a}else if("a"<=b&&"z">=b||"A"<=b&&"Z">=b){c.type=1;b=a.b;do d=a.a.charAt(++a.b);while("a"<=d&&"z">=
-d||"A"<=d&&"Z">=d);a=a.a.substring(b,a.b--).toUpperCase();c.value=a}else{if(" "==b||"\t"==b||"\r"==b||"\n"==b)return Cs(a);if(""===b)c.type=6;else throw Error("Unexpected character: "+b);}return c}function As(a){this.a=a}function Es(a,b){var c=a.b.type==b;c&&(a.b=Cs(a.a));return c}
-function Ds(a){var b=a.b;if(Es(a,1)){var c=b.value;if("GEOMETRYCOLLECTION"==c){a:{if(Es(a,2)){b=[];do b.push(Ds(a));while(Es(a,5));if(Es(a,3)){a=b;break a}}else if(Fs(a)){a=[];break a}throw Error(Gs(a));}return new Gn(a)}var d=Hs[c],b=Is[c];if(!d||!b)throw Error("Invalid geometry type: "+c);a=d.call(a);return new b(a)}throw Error(Gs(a));}k=As.prototype;k.Cf=function(){if(Es(this,2)){var a=Js(this);if(Es(this,3))return a}else if(Fs(this))return null;throw Error(Gs(this));};
-k.Bf=function(){if(Es(this,2)){var a=Ks(this);if(Es(this,3))return a}else if(Fs(this))return[];throw Error(Gs(this));};k.Df=function(){if(Es(this,2)){var a=Ls(this);if(Es(this,3))return a}else if(Fs(this))return[];throw Error(Gs(this));};k.Wn=function(){if(Es(this,2)){var a;if(2==this.b.type)for(a=[this.Cf()];Es(this,5);)a.push(this.Cf());else a=Ks(this);if(Es(this,3))return a}else if(Fs(this))return[];throw Error(Gs(this));};
-k.Vn=function(){if(Es(this,2)){var a=Ls(this);if(Es(this,3))return a}else if(Fs(this))return[];throw Error(Gs(this));};k.Xn=function(){if(Es(this,2)){for(var a=[this.Df()];Es(this,5);)a.push(this.Df());if(Es(this,3))return a}else if(Fs(this))return[];throw Error(Gs(this));};function Js(a){for(var b=[],c=0;2>c;++c){var d=a.b;if(Es(a,4))b.push(d.value);else break}if(2==b.length)return b;throw Error(Gs(a));}function Ks(a){for(var b=[Js(a)];Es(a,5);)b.push(Js(a));return b}
-function Ls(a){for(var b=[a.Bf()];Es(a,5);)b.push(a.Bf());return b}function Fs(a){var b=1==a.b.type&&"EMPTY"==a.b.value;b&&(a.b=Cs(a.a));return b}function Gs(a){return"Unexpected `"+a.b.value+"` at position "+a.b.position+" in `"+a.a.a+"`"}var Is={POINT:A,LINESTRING:O,POLYGON:B,MULTIPOINT:Q,MULTILINESTRING:P,MULTIPOLYGON:R},Hs={POINT:As.prototype.Cf,LINESTRING:As.prototype.Bf,POLYGON:As.prototype.Df,MULTIPOINT:As.prototype.Wn,MULTILINESTRING:As.prototype.Vn,MULTIPOLYGON:As.prototype.Xn};function Ms(){this.version=void 0}v(Ms,Ar);Ms.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};Ms.prototype.b=function(a){this.version=a.getAttribute("version").trim();return(a=N({version:this.version},Ns,a,[]))?a:null};function Os(a,b){return N({},Ps,a,b)}function Qs(a,b){return N({},Rs,a,b)}function Ss(a,b){var c=Os(a,b);if(c){var d=[ao(a.getAttribute("width")),ao(a.getAttribute("height"))];c.size=d;return c}}
-function Ts(a,b){return N([],Us,a,b)}
-var Vs=[null,"http://www.opengis.net/wms"],Ns=M(Vs,{Service:J(function(a,b){return N({},Ws,a,b)}),Capability:J(function(a,b){return N({},Xs,a,b)})}),Xs=M(Vs,{Request:J(function(a,b){return N({},Ys,a,b)}),Exception:J(function(a,b){return N([],Zs,a,b)}),Layer:J(function(a,b){return N({},$s,a,b)})}),Ws=M(Vs,{Name:J(S),Title:J(S),Abstract:J(S),KeywordList:J(Ts),OnlineResource:J(zr),ContactInformation:J(function(a,b){return N({},at,a,b)}),Fees:J(S),AccessConstraints:J(S),LayerLimit:J($n),MaxWidth:J($n),
-MaxHeight:J($n)}),at=M(Vs,{ContactPersonPrimary:J(function(a,b){return N({},bt,a,b)}),ContactPosition:J(S),ContactAddress:J(function(a,b){return N({},ct,a,b)}),ContactVoiceTelephone:J(S),ContactFacsimileTelephone:J(S),ContactElectronicMailAddress:J(S)}),bt=M(Vs,{ContactPerson:J(S),ContactOrganization:J(S)}),ct=M(Vs,{AddressType:J(S),Address:J(S),City:J(S),StateOrProvince:J(S),PostCode:J(S),Country:J(S)}),Zs=M(Vs,{Format:Dm(S)}),$s=M(Vs,{Name:J(S),Title:J(S),Abstract:J(S),KeywordList:J(Ts),CRS:Fm(S),
-EX_GeographicBoundingBox:J(function(a,b){var c=N({},dt,a,b);if(c){var d=c.westBoundLongitude,e=c.southBoundLatitude,f=c.eastBoundLongitude,c=c.northBoundLatitude;return void 0===d||void 0===e||void 0===f||void 0===c?void 0:[d,e,f,c]}}),BoundingBox:Fm(function(a){var b=[Zn(a.getAttribute("minx")),Zn(a.getAttribute("miny")),Zn(a.getAttribute("maxx")),Zn(a.getAttribute("maxy"))],c=[Zn(a.getAttribute("resx")),Zn(a.getAttribute("resy"))];return{crs:a.getAttribute("CRS"),extent:b,res:c}}),Dimension:Fm(function(a){return{name:a.getAttribute("name"),
-units:a.getAttribute("units"),unitSymbol:a.getAttribute("unitSymbol"),"default":a.getAttribute("default"),multipleValues:Wn(a.getAttribute("multipleValues")),nearestValue:Wn(a.getAttribute("nearestValue")),current:Wn(a.getAttribute("current")),values:S(a)}}),Attribution:J(function(a,b){return N({},et,a,b)}),AuthorityURL:Fm(function(a,b){var c=Os(a,b);if(c)return c.name=a.getAttribute("name"),c}),Identifier:Fm(S),MetadataURL:Fm(function(a,b){var c=Os(a,b);if(c)return c.type=a.getAttribute("type"),
-c}),DataURL:Fm(Os),FeatureListURL:Fm(Os),Style:Fm(function(a,b){return N({},ft,a,b)}),MinScaleDenominator:J(Yn),MaxScaleDenominator:J(Yn),Layer:Fm(function(a,b){var c=b[b.length-1],d=N({},$s,a,b);if(d){var e=Wn(a.getAttribute("queryable"));void 0===e&&(e=c.queryable);d.queryable=void 0!==e?e:!1;e=ao(a.getAttribute("cascaded"));void 0===e&&(e=c.cascaded);d.cascaded=e;e=Wn(a.getAttribute("opaque"));void 0===e&&(e=c.opaque);d.opaque=void 0!==e?e:!1;e=Wn(a.getAttribute("noSubsets"));void 0===e&&(e=c.noSubsets);
-d.noSubsets=void 0!==e?e:!1;(e=Zn(a.getAttribute("fixedWidth")))||(e=c.fixedWidth);d.fixedWidth=e;(e=Zn(a.getAttribute("fixedHeight")))||(e=c.fixedHeight);d.fixedHeight=e;["Style","CRS","AuthorityURL"].forEach(function(a){a in c&&(d[a]=(d[a]||[]).concat(c[a]))});"EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" ").forEach(function(a){a in d||(d[a]=c[a])});return d}})}),et=M(Vs,{Title:J(S),OnlineResource:J(zr),LogoURL:J(Ss)}),dt=M(Vs,{westBoundLongitude:J(Yn),
-eastBoundLongitude:J(Yn),southBoundLatitude:J(Yn),northBoundLatitude:J(Yn)}),Ys=M(Vs,{GetCapabilities:J(Qs),GetMap:J(Qs),GetFeatureInfo:J(Qs)}),Rs=M(Vs,{Format:Fm(S),DCPType:Fm(function(a,b){return N({},gt,a,b)})}),gt=M(Vs,{HTTP:J(function(a,b){return N({},ht,a,b)})}),ht=M(Vs,{Get:J(Os),Post:J(Os)}),ft=M(Vs,{Name:J(S),Title:J(S),Abstract:J(S),LegendURL:Fm(Ss),StyleSheetURL:J(Os),StyleURL:J(Os)}),Ps=M(Vs,{Format:J(S),OnlineResource:J(zr)}),Us=M(Vs,{Keyword:Dm(S)});function it(a){a=a?a:{};this.g="http://mapserver.gis.umn.edu/mapserver";this.b=new po;this.c=a.layers?a.layers:null;Pn.call(this)}v(it,Pn);
-it.prototype.kc=function(a,b){var c={};b&&ua(c,Rm(this,a,b));var d=[c];a.setAttribute("namespaceURI",this.g);var e=a.localName,c=[];if(0!==a.childNodes.length){if("msGMLOutput"==e)for(var f=0,g=a.childNodes.length;f<g;f++){var h=a.childNodes[f];if(h.nodeType===Node.ELEMENT_NODE){var l=d[0],m=h.localName.replace("_layer","");if(!this.c||Za(this.c,m)){m+="_feature";l.featureType=m;l.featureNS=this.g;var n={};n[m]=Dm(this.b.Ff,this.b);l=M([l.featureNS,null],n);h.setAttribute("namespaceURI",this.g);(h=
-N([],l,h,d,this.b))&&bb(c,h)}}}"FeatureCollection"==e&&(d=N([],this.b.b,a,[{}],this.b))&&(c=d)}return c};function jt(){this.g=new Br}v(jt,Ar);jt.prototype.a=function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType==Node.ELEMENT_NODE)return this.b(a);return null};jt.prototype.b=function(a){var b=a.getAttribute("version").trim(),c=this.g.b(a);if(!c)return null;c.version=b;return(c=N(c,kt,a,[]))?c:null};function lt(a){var b=S(a).split(" ");if(b&&2==b.length)return a=+b[0],b=+b[1],isNaN(a)||isNaN(b)?void 0:[a,b]}
-var mt=[null,"http://www.opengis.net/wmts/1.0"],nt=[null,"http://www.opengis.net/ows/1.1"],kt=M(mt,{Contents:J(function(a,b){return N({},ot,a,b)})}),ot=M(mt,{Layer:Fm(function(a,b){return N({},pt,a,b)}),TileMatrixSet:Fm(function(a,b){return N({},qt,a,b)})}),pt=M(mt,{Style:Fm(function(a,b){var c=N({},rt,a,b);if(c){var d="true"===a.getAttribute("isDefault");c.isDefault=d;return c}}),Format:Fm(S),TileMatrixSetLink:Fm(function(a,b){return N({},st,a,b)}),Dimension:Fm(function(a,b){return N({},tt,a,b)}),
-ResourceURL:Fm(function(a){var b=a.getAttribute("format"),c=a.getAttribute("template");a=a.getAttribute("resourceType");var d={};b&&(d.format=b);c&&(d.template=c);a&&(d.resourceType=a);return d})},M(nt,{Title:J(S),Abstract:J(S),WGS84BoundingBox:J(function(a,b){var c=N([],ut,a,b);return 2!=c.length?void 0:Ab(c)}),Identifier:J(S)})),rt=M(mt,{LegendURL:Fm(function(a){var b={};b.format=a.getAttribute("format");b.href=zr(a);return b})},M(nt,{Title:J(S),Identifier:J(S)})),st=M(mt,{TileMatrixSet:J(S)}),
-tt=M(mt,{Default:J(S),Value:Fm(S)},M(nt,{Identifier:J(S)})),ut=M(nt,{LowerCorner:Dm(lt),UpperCorner:Dm(lt)}),qt=M(mt,{WellKnownScaleSet:J(S),TileMatrix:Fm(function(a,b){return N({},vt,a,b)})},M(nt,{SupportedCRS:J(S),Identifier:J(S)})),vt=M(mt,{TopLeftCorner:J(lt),ScaleDenominator:J(Yn),TileWidth:J($n),TileHeight:J($n),MatrixWidth:J($n),MatrixHeight:J($n)},M(nt,{Identifier:J(S)}));function wt(a){Ua.call(this);a=a||{};this.a=null;this.c=Jc;this.f=void 0;w(this,Wa(xt),this.Al,this);w(this,Wa(yt),this.Bl,this);void 0!==a.projection&&this.Vg(qc(a.projection));void 0!==a.trackingOptions&&this.ji(a.trackingOptions);this.ge(void 0!==a.tracking?a.tracking:!1)}v(wt,Ua);k=wt.prototype;k.la=function(){this.ge(!1);Ua.prototype.la.call(this)};k.Al=function(){var a=this.Tg();a&&(this.c=tc(qc("EPSG:4326"),a),this.a&&this.set(zt,this.c(this.a)))};
-k.Bl=function(){if(lf){var a=this.Ug();a&&void 0===this.f?this.f=navigator.geolocation.watchPosition(this.eo.bind(this),this.fo.bind(this),this.Gg()):a||void 0===this.f||(navigator.geolocation.clearWatch(this.f),this.f=void 0)}};
-k.eo=function(a){a=a.coords;this.set(At,a.accuracy);this.set(Bt,null===a.altitude?void 0:a.altitude);this.set(Ct,null===a.altitudeAccuracy?void 0:a.altitudeAccuracy);this.set(Dt,null===a.heading?void 0:na(a.heading));this.a?(this.a[0]=a.longitude,this.a[1]=a.latitude):this.a=[a.longitude,a.latitude];var b=this.c(this.a);this.set(zt,b);this.set(Et,null===a.speed?void 0:a.speed);a=ud(Dh,this.a,a.accuracy);a.oc(this.c);this.set(Ft,a);this.v()};k.fo=function(a){a.type="error";this.ge(!1);this.b(a)};
-k.Aj=function(){return this.get(At)};k.Bj=function(){return this.get(Ft)||null};k.Dj=function(){return this.get(Bt)};k.Ej=function(){return this.get(Ct)};k.yl=function(){return this.get(Dt)};k.zl=function(){return this.get(zt)};k.Tg=function(){return this.get(xt)};k.jk=function(){return this.get(Et)};k.Ug=function(){return this.get(yt)};k.Gg=function(){return this.get(Gt)};k.Vg=function(a){this.set(xt,a)};k.ge=function(a){this.set(yt,a)};k.ji=function(a){this.set(Gt,a)};
-var At="accuracy",Ft="accuracyGeometry",Bt="altitude",Ct="altitudeAccuracy",Dt="heading",zt="position",xt="projection",Et="speed",yt="tracking",Gt="trackingOptions";function Ht(a,b,c){Oc.call(this);this.Sf(a,b?b:0,c)}v(Ht,Oc);k=Ht.prototype;k.clone=function(){var a=new Ht(null);Qc(a,this.ia,this.A.slice());a.v();return a};k.vb=function(a,b,c,d){var e=this.A;a-=e[0];var f=b-e[1];b=a*a+f*f;if(b<d){if(0===b)for(d=0;d<this.a;++d)c[d]=e[d];else for(d=this.vf()/Math.sqrt(b),c[0]=e[0]+d*a,c[1]=e[1]+d*f,d=2;d<this.a;++d)c[d]=e[d];c.length=this.a;return b}return d};k.Ac=function(a,b){var c=this.A,d=a-c[0],c=b-c[1];return d*d+c*c<=It(this)};
-k.td=function(){return this.A.slice(0,this.a)};k.Pd=function(a){var b=this.A,c=b[this.a]-b[0];return Kb(b[0]-c,b[1]-c,b[0]+c,b[1]+c,a)};k.vf=function(){return Math.sqrt(It(this))};function It(a){var b=a.A[a.a]-a.A[0];a=a.A[a.a+1]-a.A[1];return b*b+a*a}k.X=function(){return"Circle"};k.Na=function(a){var b=this.D();return dc(a,b)?(b=this.td(),a[0]<=b[0]&&a[2]>=b[0]||a[1]<=b[1]&&a[3]>=b[1]?!0:Rb(a,this.jb,this)):!1};
-k.Yl=function(a){var b=this.a,c=a.slice();c[b]=c[0]+(this.A[b]-this.A[0]);var d;for(d=1;d<b;++d)c[b+d]=a[d];Qc(this,this.ia,c);this.v()};k.Sf=function(a,b,c){if(a){Rc(this,c,a,0);this.A||(this.A=[]);c=this.A;a=Zc(c,a);c[a++]=c[0]+b;var d;b=1;for(d=this.a;b<d;++b)c[a++]=c[b];c.length=a}else Qc(this,"XY",null);this.v()};k.Zl=function(a){this.A[this.a]=this.A[0]+a;this.v()};function Jt(a,b,c){for(var d=[],e=a(0),f=a(1),g=b(e),h=b(f),l=[f,e],m=[h,g],n=[1,0],p={},q=1E5,t,u,y,x,C;0<--q&&0<n.length;)y=n.pop(),e=l.pop(),g=m.pop(),f=y.toString(),f in p||(d.push(g[0],g[1]),p[f]=!0),x=n.pop(),f=l.pop(),h=m.pop(),C=(y+x)/2,t=a(C),u=b(t),la(u[0],u[1],g[0],g[1],h[0],h[1])<c?(d.push(h[0],h[1]),f=x.toString(),p[f]=!0):(n.push(x,C,C,y),m.push(h,u,u,g),l.push(f,t,t,e));return d}function Kt(a,b,c,d,e){var f=qc("EPSG:4326");return Jt(function(d){return[a,b+(c-b)*d]},Ic(f,d),e)}
-function Lt(a,b,c,d,e){var f=qc("EPSG:4326");return Jt(function(d){return[b+(c-b)*d,a]},Ic(f,d),e)};function Mt(a){a=a||{};this.c=this.l=null;this.g=this.i=Infinity;this.f=this.j=-Infinity;this.C=this.u=Infinity;this.G=this.B=-Infinity;this.za=void 0!==a.targetSize?a.targetSize:100;this.S=void 0!==a.maxLines?a.maxLines:100;this.b=[];this.a=[];this.na=void 0!==a.strokeStyle?a.strokeStyle:Nt;this.T=this.o=void 0;this.s=null;this.setMap(void 0!==a.map?a.map:null)}var Nt=new xi({color:"rgba(0,0,0,0.2)"}),Ot=[90,45,30,20,10,5,2,1,.5,.2,.1,.05,.01,.005,.002,.001];
-function Pt(a,b,c,d,e,f,g){var h=g;b=Kt(b,c,d,a.c,e);h=void 0!==a.b[h]?a.b[h]:new O(null);h.aa("XY",b);dc(h.D(),f)&&(a.b[g++]=h);return g}function Qt(a,b,c,d,e){var f=e;b=Lt(b,a.f,a.g,a.c,c);f=void 0!==a.a[f]?a.a[f]:new O(null);f.aa("XY",b);dc(f.D(),d)&&(a.a[e++]=f);return e}k=Mt.prototype;k.Cl=function(){return this.l};k.Xj=function(){return this.b};k.dk=function(){return this.a};
-k.Lg=function(a){var b=a.vectorContext,c=a.frameState,d=c.extent;a=c.viewState;var e=a.center,f=a.projection,g=a.resolution;a=c.pixelRatio;a=g*g/(4*a*a);if(!this.c||!Hc(this.c,f)){var h=qc("EPSG:4326"),l=f.D(),m=f.i,n=Lc(m,h,f),p=m[2],q=m[1],t=m[0],u=n[3],y=n[2],x=n[1],n=n[0];this.i=m[3];this.g=p;this.j=q;this.f=t;this.u=u;this.C=y;this.B=x;this.G=n;this.o=Ic(h,f);this.T=Ic(f,h);this.s=this.T(ac(l));this.c=f}f.a&&(f=f.D(),h=Zb(f),c=c.focus[0],c<f[0]||c>f[2])&&(c=h*Math.ceil((f[0]-c)/h),d=[d[0]+c,
-d[1],d[2]+c,d[3]]);c=this.s[0];f=this.s[1];h=-1;m=Math.pow(this.za*g,2);p=[];q=[];g=0;for(l=Ot.length;g<l;++g){t=Ot[g]/2;p[0]=c-t;p[1]=f-t;q[0]=c+t;q[1]=f+t;this.o(p,p);this.o(q,q);t=Math.pow(q[0]-p[0],2)+Math.pow(q[1]-p[1],2);if(t<=m)break;h=Ot[g]}g=h;if(-1==g)this.b.length=this.a.length=0;else{c=this.T(e);e=c[0];c=c[1];f=this.S;h=[Math.max(d[0],this.G),Math.max(d[1],this.B),Math.min(d[2],this.C),Math.min(d[3],this.u)];h=Lc(h,this.c,"EPSG:4326");m=h[3];q=h[1];e=Math.floor(e/g)*g;p=ia(e,this.f,this.g);
-l=Pt(this,p,q,m,a,d,0);for(h=0;p!=this.f&&h++<f;)p=Math.max(p-g,this.f),l=Pt(this,p,q,m,a,d,l);p=ia(e,this.f,this.g);for(h=0;p!=this.g&&h++<f;)p=Math.min(p+g,this.g),l=Pt(this,p,q,m,a,d,l);this.b.length=l;c=Math.floor(c/g)*g;e=ia(c,this.j,this.i);l=Qt(this,e,a,d,0);for(h=0;e!=this.j&&h++<f;)e=Math.max(e-g,this.j),l=Qt(this,e,a,d,l);e=ia(c,this.j,this.i);for(h=0;e!=this.i&&h++<f;)e=Math.min(e+g,this.i),l=Qt(this,e,a,d,l);this.a.length=l}b.Vb(null,this.na);a=0;for(e=this.b.length;a<e;++a)g=this.b[a],
-b.kd(g,null);a=0;for(e=this.a.length;a<e;++a)g=this.a[a],b.kd(g,null)};k.setMap=function(a){this.l&&(this.l.J("postcompose",this.Lg,this),this.l.render());a&&(a.I("postcompose",this.Lg,this),a.render());this.l=a};function Rt(a,b,c,d,e){gg.call(this,a,b);this.o=c;this.g=new Image;null!==d&&(this.g.crossOrigin=d);this.j=null;this.s=e}v(Rt,gg);k=Rt.prototype;k.la=function(){1==this.state&&St(this);this.a&&Ja(this.a);this.state=5;hg(this);gg.prototype.la.call(this)};k.qb=function(){return this.g};k.Xa=function(){return this.o};k.Dl=function(){this.state=3;St(this);hg(this)};k.El=function(){this.state=this.g.naturalWidth&&this.g.naturalHeight?jg:4;St(this);hg(this)};
-k.load=function(){if(0==this.state||3==this.state)this.state=1,hg(this),this.j=[Ea(this.g,"error",this.Dl,this),Ea(this.g,"load",this.El,this)],this.s(this,this.o)};function St(a){a.j.forEach(za);a.j=null};function Tt(a){a=a?a:{};tg.call(this,{handleEvent:gc});this.i=a.formatConstructors?a.formatConstructors:[];this.l=a.projection?qc(a.projection):null;this.a=null;this.target=a.target?a.target:null}v(Tt,tg);function Ut(a){a=a.dataTransfer.files;var b,c,d;b=0;for(c=a.length;b<c;++b){d=a.item(b);var e=new FileReader;e.addEventListener("load",this.j.bind(this,d));e.readAsText(d)}}function Vt(a){a.stopPropagation();a.preventDefault();a.dataTransfer.dropEffect="copy"}
-Tt.prototype.j=function(a,b){var c=b.target.result,d=this.s,e=this.l;e||(e=d.$().l);var d=this.i,f=[],g,h;g=0;for(h=d.length;g<h;++g){var l=new d[g];var m={featureProjection:e};try{f=l.Ha(c,m)}catch(n){f=null}if(f&&0<f.length)break}this.b(new Wt(Xt,a,f,e))};Tt.prototype.setMap=function(a){this.a&&(this.a.forEach(za),this.a=null);tg.prototype.setMap.call(this,a);a&&(a=this.target?this.target:a.a,this.a=[w(a,"drop",Ut,this),w(a,"dragenter",Vt,this),w(a,"dragover",Vt,this),w(a,"drop",Vt,this)])};
-var Xt="addfeatures";function Wt(a,b,c,d){Ka.call(this,a);this.features=c;this.file=b;this.projection=d}v(Wt,Ka);function Yt(a){a=a?a:{};Jg.call(this,{handleDownEvent:Zt,handleDragEvent:$t,handleUpEvent:au});this.o=a.condition?a.condition:Fg;this.a=this.i=void 0;this.j=0;this.u=void 0!==a.duration?a.duration:400}v(Yt,Jg);function $t(a){if(Hg(a)){var b=a.map,c=b.kb(),d=a.pixel;a=d[0]-c[0]/2;d=c[1]/2-d[1];c=Math.atan2(d,a);a=Math.sqrt(a*a+d*d);d=b.$();if(void 0!==this.i){var e=c-this.i;vg(b,d,d.Pa()-e)}this.i=c;void 0!==this.a&&(c=this.a*(d.Ma()/a),xg(b,d,c));void 0!==this.a&&(this.j=this.a/a);this.a=a}}
-function au(a){if(!Hg(a))return!0;a=a.map;var b=a.$();Hd(b,-1);var c=this.j-1,d=b.Pa(),d=b.constrainRotation(d,0);vg(a,b,d,void 0,void 0);var d=b.Ma(),e=this.u,d=b.constrainResolution(d,0,c);xg(a,b,d,void 0,e);this.j=0;return!1}function Zt(a){return Hg(a)&&this.o(a)?(Hd(a.map.$(),1),this.a=this.i=void 0,!0):!1};function bu(){return[[-Infinity,-Infinity,Infinity,Infinity]]};(function(){var a={},b={ja:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.ja=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Dp=c()}})(function(){return function d(a,b,g){function h(m,p){if(!b[m]){if(!a[m]){var q="function"==typeof require&&require;if(!p&&q)return q(m,!0);if(l)return l(m,!0);q=Error("Cannot find module '"+m+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[m]={ja:{}};a[m][0].call(q.ja,function(b){var d=
-a[m][1][b];return h(d?d:b)},q,q.ja,d,a,b,g)}return b[m].ja}for(var l="function"==typeof require&&require,m=0;m<g.length;m++)h(g[m]);return h}({1:[function(a,b){function f(a,b,d,e,q){d=d||0;e=e||a.length-1;for(q=q||h;e>d;){if(600<e-d){var t=e-d+1,u=b-d+1,y=Math.log(t),x=.5*Math.exp(2*y/3),y=.5*Math.sqrt(y*x*(t-x)/t)*(0>u-t/2?-1:1);f(a,b,Math.max(d,Math.floor(b-u*x/t+y)),Math.min(e,Math.floor(b+(t-u)*x/t+y)),q)}t=a[b];u=d;x=e;g(a,d,b);for(0<q(a[e],t)&&g(a,d,e);u<x;){g(a,u,x);u++;for(x--;0>q(a[u],t);)u++;
-for(;0<q(a[x],t);)x--}0===q(a[d],t)?g(a,d,x):(x++,g(a,x,e));x<=b&&(d=x+1);b<=x&&(e=x-1)}}function g(a,b,d){var e=a[b];a[b]=a[d];a[d]=e}function h(a,b){return a<b?-1:a>b?1:0}b.ja=f},{}],2:[function(a,b){function f(a,b){if(!(this instanceof f))return new f(a,b);this.Qe=Math.max(4,a||9);this.dg=Math.max(2,Math.ceil(.4*this.Qe));b&&this.bj(b);this.clear()}function g(a,b){h(a,0,a.children.length,b,a)}function h(a,b,d,e,f){f||(f=y(null));f.ba=Infinity;f.ea=Infinity;f.da=-Infinity;f.ha=-Infinity;for(var g;b<
-d;b++)g=a.children[b],l(f,a.Wa?e(g):g);return f}function l(a,b){a.ba=Math.min(a.ba,b.ba);a.ea=Math.min(a.ea,b.ea);a.da=Math.max(a.da,b.da);a.ha=Math.max(a.ha,b.ha)}function m(a,b){return a.ba-b.ba}function n(a,b){return a.ea-b.ea}function p(a){return(a.da-a.ba)*(a.ha-a.ea)}function q(a){return a.da-a.ba+(a.ha-a.ea)}function t(a,b){return a.ba<=b.ba&&a.ea<=b.ea&&b.da<=a.da&&b.ha<=a.ha}function u(a,b){return b.ba<=a.da&&b.ea<=a.ha&&b.da>=a.ba&&b.ha>=a.ea}function y(a){return{children:a,height:1,Wa:!0,
-ba:Infinity,ea:Infinity,da:-Infinity,ha:-Infinity}}function x(a,b,d,e,f){for(var g=[b,d],h;g.length;)d=g.pop(),b=g.pop(),d-b<=e||(h=b+Math.ceil((d-b)/e/2)*e,C(a,h,b,d,f),g.push(b,h,h,d))}b.ja=f;var C=a("quickselect");f.prototype={all:function(){return this.Zf(this.data,[])},search:function(a){var b=this.data,d=[],e=this.ob;if(!u(a,b))return d;for(var f=[],g,h,l,m;b;){g=0;for(h=b.children.length;g<h;g++)l=b.children[g],m=b.Wa?e(l):l,u(a,m)&&(b.Wa?d.push(l):t(a,m)?this.Zf(l,d):f.push(l));b=f.pop()}return d},
-load:function(a){if(!a||!a.length)return this;if(a.length<this.dg){for(var b=0,d=a.length;b<d;b++)this.Da(a[b]);return this}a=this.ag(a.slice(),0,a.length-1,0);this.data.children.length?this.data.height===a.height?this.fg(this.data,a):(this.data.height<a.height&&(b=this.data,this.data=a,a=b),this.cg(a,this.data.height-a.height-1,!0)):this.data=a;return this},Da:function(a){a&&this.cg(a,this.data.height-1);return this},clear:function(){this.data=y([]);return this},remove:function(a,b){if(!a)return this;
-for(var d=this.data,e=this.ob(a),f=[],g=[],h,l,m,n;d||f.length;){d||(d=f.pop(),l=f[f.length-1],h=g.pop(),n=!0);if(d.Wa){a:{m=a;var q=d.children,p=b;if(p){for(var u=0;u<q.length;u++)if(p(m,q[u])){m=u;break a}m=-1}else m=q.indexOf(m)}if(-1!==m){d.children.splice(m,1);f.push(d);this.$i(f);break}}n||d.Wa||!t(d,e)?l?(h++,d=l.children[h],n=!1):d=null:(f.push(d),g.push(h),h=0,l=d,d=d.children[0])}return this},ob:function(a){return a},Se:m,Te:n,toJSON:function(){return this.data},Zf:function(a,b){for(var d=
-[];a;)a.Wa?b.push.apply(b,a.children):d.push.apply(d,a.children),a=d.pop();return b},ag:function(a,b,d,e){var f=d-b+1,h=this.Qe,l;if(f<=h)return l=y(a.slice(b,d+1)),g(l,this.ob),l;e||(e=Math.ceil(Math.log(f)/Math.log(h)),h=Math.ceil(f/Math.pow(h,e-1)));l=y([]);l.Wa=!1;l.height=e;var f=Math.ceil(f/h),h=f*Math.ceil(Math.sqrt(h)),m,n,q;for(x(a,b,d,h,this.Se);b<=d;b+=h)for(n=Math.min(b+h-1,d),x(a,b,n,f,this.Te),m=b;m<=n;m+=f)q=Math.min(m+f-1,n),l.children.push(this.ag(a,m,q,e-1));g(l,this.ob);return l},
-Zi:function(a,b,d,e){for(var f,g,h,l,m,n,q,t;;){e.push(b);if(b.Wa||e.length-1===d)break;q=t=Infinity;f=0;for(g=b.children.length;f<g;f++)h=b.children[f],m=p(h),n=(Math.max(h.da,a.da)-Math.min(h.ba,a.ba))*(Math.max(h.ha,a.ha)-Math.min(h.ea,a.ea))-m,n<t?(t=n,q=m<q?m:q,l=h):n===t&&m<q&&(q=m,l=h);b=l||b.children[0]}return b},cg:function(a,b,d){var e=this.ob;d=d?a:e(a);var e=[],f=this.Zi(d,this.data,b,e);f.children.push(a);for(l(f,d);0<=b;)if(e[b].children.length>this.Qe)this.gj(e,b),b--;else break;this.Wi(d,
-e,b)},gj:function(a,b){var d=a[b],e=d.children.length,f=this.dg;this.Xi(d,f,e);e=this.Yi(d,f,e);e=y(d.children.splice(e,d.children.length-e));e.height=d.height;e.Wa=d.Wa;g(d,this.ob);g(e,this.ob);b?a[b-1].children.push(e):this.fg(d,e)},fg:function(a,b){this.data=y([a,b]);this.data.height=a.height+1;this.data.Wa=!1;g(this.data,this.ob)},Yi:function(a,b,d){var e,f,g,l,m,n,q;m=n=Infinity;for(e=b;e<=d-b;e++)f=h(a,0,e,this.ob),g=h(a,e,d,this.ob),l=Math.max(0,Math.min(f.da,g.da)-Math.max(f.ba,g.ba))*Math.max(0,
-Math.min(f.ha,g.ha)-Math.max(f.ea,g.ea)),f=p(f)+p(g),l<m?(m=l,q=e,n=f<n?f:n):l===m&&f<n&&(n=f,q=e);return q},Xi:function(a,b,d){var e=a.Wa?this.Se:m,f=a.Wa?this.Te:n,g=this.$f(a,b,d,e);b=this.$f(a,b,d,f);g<b&&a.children.sort(e)},$f:function(a,b,d,e){a.children.sort(e);e=this.ob;var f=h(a,0,b,e),g=h(a,d-b,d,e),m=q(f)+q(g),n,p;for(n=b;n<d-b;n++)p=a.children[n],l(f,a.Wa?e(p):p),m+=q(f);for(n=d-b-1;n>=b;n--)p=a.children[n],l(g,a.Wa?e(p):p),m+=q(g);return m},Wi:function(a,b,d){for(;0<=d;d--)l(b[d],a)},
-$i:function(a){for(var b=a.length-1,d;0<=b;b--)0===a[b].children.length?0<b?(d=a[b-1].children,d.splice(d.indexOf(a[b]),1)):this.clear():g(a[b],this.ob)},bj:function(a){var b=["return a"," - b",";"];this.Se=new Function("a","b",b.join(a[0]));this.Te=new Function("a","b",b.join(a[1]));this.ob=new Function("a","return {minX: a"+a[0]+", minY: a"+a[1]+", maxX: a"+a[2]+", maxY: a"+a[3]+"};")}}},{quickselect:1}]},{},[2])(2)});or=b.ja})();function cu(a){this.b=or(a);this.a={}}k=cu.prototype;k.Da=function(a,b){var c={ba:a[0],ea:a[1],da:a[2],ha:a[3],value:b};this.b.Da(c);this.a[ea(b)]=c};k.load=function(a,b){for(var c=Array(b.length),d=0,e=b.length;d<e;d++){var f=a[d],g=b[d],f={ba:f[0],ea:f[1],da:f[2],ha:f[3],value:g};c[d]=f;this.a[ea(g)]=f}this.b.load(c)};k.remove=function(a){a=ea(a);var b=this.a[a];delete this.a[a];return null!==this.b.remove(b)};
-function du(a,b,c){var d=a.a[ea(c)];Pb([d.ba,d.ea,d.da,d.ha],b)||(a.remove(c),a.Da(b,c))}function eu(a){return a.b.all().map(function(a){return a.value})}function fu(a,b){return a.b.search({ba:b[0],ea:b[1],da:b[2],ha:b[3]}).map(function(a){return a.value})}k.forEach=function(a,b){return gu(eu(this),a,b)};function hu(a,b,c,d){return gu(fu(a,b),c,d)}function gu(a,b,c){for(var d,e=0,f=a.length;e<f&&!(d=b.call(c,a[e]));e++);return d}k.clear=function(){this.b.clear();this.a={}};
-k.D=function(){var a=this.b.data;return[a.ba,a.ea,a.da,a.ha]};function T(a){a=a||{};Tj.call(this,{attributions:a.attributions,logo:a.logo,projection:void 0,state:"ready",wrapX:void 0!==a.wrapX?a.wrapX:!0});this.W=da;this.P=a.format;this.Aa=void 0==a.overlaps?!0:a.overlaps;this.Z=a.url;void 0!==a.loader?this.W=a.loader:void 0!==this.Z&&(ha(this.P,7),this.W=Pm(this.Z,this.P));this.ac=void 0!==a.strategy?a.strategy:bu;var b=void 0!==a.useSpatialIndex?a.useSpatialIndex:!0;this.a=b?new cu:null;this.ra=new cu;this.i={};this.l={};this.o={};this.s={};this.c=null;var c,
-d;a.features instanceof me?(c=a.features,d=c.a):Array.isArray(a.features)&&(d=a.features);b||void 0!==c||(c=new me(d));void 0!==d&&iu(this,d);void 0!==c&&ju(this,c)}v(T,Tj);k=T.prototype;k.cb=function(a){var b=ea(a).toString();if(ku(this,b,a)){lu(this,b,a);var c=a.V();c?(b=c.D(),this.a&&this.a.Da(b,a)):this.i[b]=a;this.b(new mu(nu,a))}this.v()};function lu(a,b,c){a.s[b]=[w(c,"change",a.uh,a),w(c,"propertychange",a.uh,a)]}
-function ku(a,b,c){var d=!0,e=c.a;void 0!==e?e.toString()in a.l?d=!1:a.l[e.toString()]=c:(ha(!(b in a.o),30),a.o[b]=c);return d}k.Ic=function(a){iu(this,a);this.v()};function iu(a,b){var c,d,e,f,g=[],h=[],l=[];d=0;for(e=b.length;d<e;d++)f=b[d],c=ea(f).toString(),ku(a,c,f)&&h.push(f);d=0;for(e=h.length;d<e;d++){f=h[d];c=ea(f).toString();lu(a,c,f);var m=f.V();m?(c=m.D(),g.push(c),l.push(f)):a.i[c]=f}a.a&&a.a.load(g,l);d=0;for(e=h.length;d<e;d++)a.b(new mu(nu,h[d]))}
-function ju(a,b){var c=!1;w(a,nu,function(a){c||(c=!0,b.push(a.feature),c=!1)});w(a,ou,function(a){c||(c=!0,b.remove(a.feature),c=!1)});w(b,se,function(a){c||(c=!0,this.cb(a.element),c=!1)},a);w(b,te,function(a){c||(c=!0,this.mb(a.element),c=!1)},a);a.c=b}
-k.clear=function(a){if(a){for(var b in this.s)this.s[b].forEach(za);this.c||(this.s={},this.l={},this.o={})}else if(this.a){this.a.forEach(this.Of,this);for(var c in this.i)this.Of(this.i[c])}this.c&&this.c.clear();this.a&&this.a.clear();this.ra.clear();this.i={};this.b(new mu(pu));this.v()};k.qg=function(a,b){if(this.a)return this.a.forEach(a,b);if(this.c)return this.c.forEach(a,b)};function qu(a,b,c){a.Kb([b[0],b[1],b[0],b[1]],function(a){if(a.V().jb(b))return c.call(void 0,a)})}
-k.Kb=function(a,b,c){if(this.a)return hu(this.a,a,b,c);if(this.c)return this.c.forEach(b,c)};k.rg=function(a,b,c){return this.Kb(a,function(d){if(d.V().Na(a)&&(d=b.call(c,d)))return d})};k.zg=function(){return this.c};k.oe=function(){var a;this.c?a=this.c.a:this.a&&(a=eu(this.a),xa(this.i)||bb(a,wa(this.i)));return a};k.yg=function(a){var b=[];qu(this,a,function(a){b.push(a)});return b};k.bf=function(a){return fu(this.a,a)};
-k.ug=function(a,b){var c=a[0],d=a[1],e=null,f=[NaN,NaN],g=Infinity,h=[-Infinity,-Infinity,Infinity,Infinity],l=b?b:gc;hu(this.a,h,function(a){if(l(a)){var b=a.V(),p=g;g=b.vb(c,d,f,g);g<p&&(e=a,a=Math.sqrt(g),h[0]=c-a,h[1]=d-a,h[2]=c+a,h[3]=d+a)}});return e};k.D=function(){return this.a.D()};k.xg=function(a){a=this.l[a.toString()];return void 0!==a?a:null};k.sh=function(){return this.P};k.th=function(){return this.Z};
-k.uh=function(a){a=a.target;var b=ea(a).toString(),c=a.V();c?(c=c.D(),b in this.i?(delete this.i[b],this.a&&this.a.Da(c,a)):this.a&&du(this.a,c,a)):b in this.i||(this.a&&this.a.remove(a),this.i[b]=a);c=a.a;void 0!==c?(c=c.toString(),b in this.o?(delete this.o[b],this.l[c]=a):this.l[c]!==a&&(ru(this,a),this.l[c]=a)):b in this.o||(ru(this,a),this.o[b]=a);this.v();this.b(new mu(su,a))};
-k.rd=function(a,b,c){var d=this.ra;a=this.ac(a,b);var e,f;e=0;for(f=a.length;e<f;++e){var g=a[e];hu(d,g,function(a){return Ib(a.extent,g)})||(this.W.call(this,g,b,c),d.Da(g,{extent:g.slice()}))}};k.mb=function(a){var b=ea(a).toString();b in this.i?delete this.i[b]:this.a&&this.a.remove(a);this.Of(a);this.v()};k.Of=function(a){var b=ea(a).toString();this.s[b].forEach(za);delete this.s[b];var c=a.a;void 0!==c?delete this.l[c.toString()]:delete this.o[b];this.b(new mu(ou,a))};
-function ru(a,b){for(var c in a.l)if(a.l[c]===b){delete a.l[c];break}}function mu(a,b){Ka.call(this,a);this.feature=b}v(mu,Ka);var nu="addfeature",su="changefeature",pu="clear",ou="removefeature";function tu(a){Jg.call(this,{handleDownEvent:uu,handleEvent:vu,handleUpEvent:wu});this.fa=null;this.u=!1;this.ub=a.source?a.source:null;this.Aa=a.features?a.features:null;this.tj=a.snapTolerance?a.snapTolerance:12;this.W=a.type;this.i=xu(this.W);this.Ka=a.minPoints?a.minPoints:this.i===yu?3:2;this.oa=a.maxPoints?a.maxPoints:Infinity;this.ac=a.finishCondition?a.finishCondition:gc;var b=a.geometryFunction;if(!b)if("Circle"===this.W)b=function(a,b){var c=b?b:new Ht([NaN,NaN]);c.Sf(a[0],Math.sqrt(xb(a[0],
-a[1])));return c};else{var c,d=this.i;d===zu?c=A:d===Au?c=O:d===yu&&(c=B);b=function(a,b){var g=b;g?d===yu?g.ma([a[0].concat([a[0][0]])]):g.ma(a):g=new c(a);return g}}this.G=b;this.P=this.B=this.a=this.S=this.j=this.o=null;this.Jb=a.clickTolerance?a.clickTolerance*a.clickTolerance:36;this.ra=new E({source:new T({useSpatialIndex:!1,wrapX:a.wrapX?a.wrapX:!1}),style:a.style?a.style:Bu()});this.La=a.geometryName;this.qj=a.condition?a.condition:Eg;this.Le=a.freehand?gc:a.freehandCondition?a.freehandCondition:
-Fg;w(this,Wa(ug),this.ri,this)}v(tu,Jg);function Bu(){var a=Di();return function(b){return a[b.V().X()]}}k=tu.prototype;k.setMap=function(a){Jg.prototype.setMap.call(this,a);this.ri()};function vu(a){this.u=this.i!==zu&&this.Le(a);var b=!this.u;this.u&&a.type===eg&&null!==this.j?(Cu(this,a),b=!1):a.type===dg?b=Du(this,a):a.type===Yf&&(b=!1);return Kg.call(this,a)&&b}function uu(a){return this.u?(this.fa=a.pixel,this.o||Eu(this,a),!0):this.qj(a)?(this.fa=a.pixel,!0):!1}
-function wu(a){var b=this.fa,c=a.pixel,d=b[0]-c[0],b=b[1]-c[1],d=d*d+b*b,b=!0;if(this.u?d>this.Jb:d<=this.Jb)Du(this,a),this.o?this.u||this.i===Fu?this.ld():Gu(this,a)?this.ac(a)&&this.ld():Cu(this,a):(Eu(this,a),this.i===zu&&this.ld()),b=!1;return b}
-function Du(a,b){if(a.o){var c=b.coordinate,d=a.j.V(),e;a.i===zu?e=a.a:a.i===yu?(e=a.a[0],e=e[e.length-1],Gu(a,b)&&(c=a.o.slice())):(e=a.a,e=e[e.length-1]);e[0]=c[0];e[1]=c[1];a.G(a.a,d);a.S&&a.S.V().ma(c);d instanceof B&&a.i!==yu?(a.B||(a.B=new I(new O(null))),d=d.Bg(0),c=a.B.V(),c.aa(d.ia,d.ka())):a.P&&(c=a.B.V(),c.ma(a.P));Hu(a)}else c=b.coordinate.slice(),a.S?a.S.V().ma(c):(a.S=new I(new A(c)),Hu(a));return!0}
-function Gu(a,b){var c=!1;if(a.j){var d=!1,e=[a.o];a.i===Au?d=a.a.length>a.Ka:a.i===yu&&(d=a.a[0].length>a.Ka,e=[a.a[0][0],a.a[0][a.a[0].length-2]]);if(d)for(var d=b.map,f=0,g=e.length;f<g;f++){var h=e[f],l=d.Ca(h),m=b.pixel,c=m[0]-l[0],l=m[1]-l[1];if(c=Math.sqrt(c*c+l*l)<=(a.u?1:a.tj)){a.o=h;break}}}return c}
-function Eu(a,b){var c=b.coordinate;a.o=c;a.i===zu?a.a=c.slice():a.i===yu?(a.a=[[c.slice(),c.slice()]],a.P=a.a[0]):(a.a=[c.slice(),c.slice()],a.i===Fu&&(a.P=a.a));a.P&&(a.B=new I(new O(a.P)));c=a.G(a.a);a.j=new I;a.La&&a.j.Dc(a.La);a.j.Oa(c);Hu(a);a.b(new Iu(Ju,a.j))}
-function Cu(a,b){var c=b.coordinate,d=a.j.V(),e,f;a.i===Au?(a.o=c.slice(),f=a.a,f.length>=a.oa&&(a.u?f.pop():e=!0),f.push(c.slice()),a.G(f,d)):a.i===yu&&(f=a.a[0],f.length>=a.oa&&(a.u?f.pop():e=!0),f.push(c.slice()),e&&(a.o=f[0]),a.G(a.a,d));Hu(a);e&&a.ld()}k.Fo=function(){var a=this.j.V(),b,c;this.i===Au?(b=this.a,b.splice(-2,1),this.G(b,a)):this.i===yu&&(b=this.a[0],b.splice(-2,1),c=this.B.V(),c.ma(b),this.G(this.a,a));0===b.length&&(this.o=null);Hu(this)};
-k.ld=function(){var a=Ku(this),b=this.a,c=a.V();this.i===Au?(b.pop(),this.G(b,c)):this.i===yu&&(b[0].pop(),this.G(b,c),b=c.Y());"MultiPoint"===this.W?a.Oa(new Q([b])):"MultiLineString"===this.W?a.Oa(new P([b])):"MultiPolygon"===this.W&&a.Oa(new R([b]));this.b(new Iu(Lu,a));this.Aa&&this.Aa.push(a);this.ub&&this.ub.cb(a)};function Ku(a){a.o=null;var b=a.j;b&&(a.j=null,a.S=null,a.B=null,a.ra.ga().clear(!0));return b}
-k.fm=function(a){var b=a.V();this.j=a;this.a=b.Y();a=this.a[this.a.length-1];this.o=a.slice();this.a.push(a.slice());Hu(this);this.b(new Iu(Ju,this.j))};k.Fc=hc;function Hu(a){var b=[];a.j&&b.push(a.j);a.B&&b.push(a.B);a.S&&b.push(a.S);a=a.ra.ga();a.clear(!0);a.Ic(b)}k.ri=function(){var a=this.s,b=this.f();a&&b||Ku(this);this.ra.setMap(b?a:null)};
-function xu(a){var b;"Point"===a||"MultiPoint"===a?b=zu:"LineString"===a||"MultiLineString"===a?b=Au:"Polygon"===a||"MultiPolygon"===a?b=yu:"Circle"===a&&(b=Fu);return b}var zu="Point",Au="LineString",yu="Polygon",Fu="Circle";function Iu(a,b){Ka.call(this,a);this.feature=b}v(Iu,Ka);var Ju="drawstart",Lu="drawend";function Mu(a){this.a=this.j=null;this.B=!1;this.G=this.o=null;a||(a={});a.extent&&this.i(a.extent);Jg.call(this,{handleDownEvent:Nu,handleDragEvent:Ou,handleEvent:Pu,handleUpEvent:Qu});this.u=new E({source:new T({useSpatialIndex:!1,wrapX:!!a.wrapX}),style:a.boxStyle?a.boxStyle:Ru(),updateWhileAnimating:!0,updateWhileInteracting:!0});this.S=new E({source:new T({useSpatialIndex:!1,wrapX:!!a.wrapX}),style:a.pointerStyle?a.pointerStyle:Su(),updateWhileAnimating:!0,updateWhileInteracting:!0})}v(Mu,Jg);
-function Pu(a){if(!(a instanceof Uf))return!0;if(a.type==dg&&!this.C){var b=a.pixel,c=a.map,d=Tu(this,b,c);d||(d=c.Ja(b));Uu(this,d)}Kg.call(this,a);return!1}
-function Nu(a){function b(a){var b=null,c=null;a[0]==e[0]?b=e[2]:a[0]==e[2]&&(b=e[0]);a[1]==e[1]?c=e[3]:a[1]==e[3]&&(c=e[1]);return null!==b&&null!==c?[b,c]:null}var c=a.pixel,d=a.map,e=this.D();(a=Tu(this,c,d))&&e?(c=a[0]==e[0]||a[0]==e[2]?a[0]:null,d=a[1]==e[1]||a[1]==e[3]?a[1]:null,null!==c&&null!==d?this.a=Vu(b(a)):null!==c?this.a=Wu(b([c,e[1]]),b([c,e[3]])):null!==d&&(this.a=Wu(b([e[0],d]),b([e[2],d])))):(a=d.Ja(c),this.i([a[0],a[1],a[0],a[1]]),this.a=Vu(a));return!0}
-function Ou(a){this.a&&(a=a.coordinate,this.i(this.a(a)),Uu(this,a));return!0}function Qu(){this.a=null;var a=this.D();a&&0!==Xb(a)||this.i(null);return!1}function Ru(){var a=Di();return function(){return a.Polygon}}function Su(){var a=Di();return function(){return a.Point}}function Vu(a){return function(b){return Ab([a,b])}}function Wu(a,b){return a[0]==b[0]?function(c){return Ab([a,[c[0],b[1]]])}:a[1]==b[1]?function(c){return Ab([a,[b[0],c[1]]])}:null}
-function Tu(a,b,c){function d(a,b){return yb(e,a)-yb(e,b)}var e=c.Ja(b),f=a.D();if(f){f=[[[f[0],f[1]],[f[0],f[3]]],[[f[0],f[3]],[f[2],f[3]]],[[f[2],f[3]],[f[2],f[1]]],[[f[2],f[1]],[f[0],f[1]]]];f.sort(d);var f=f[0],g=sb(e,f),h=c.Ca(g);if(10>=Math.sqrt(xb(b,h)))return b=c.Ca(f[0]),c=c.Ca(f[1]),b=xb(h,b),c=xb(h,c),a.B=10>=Math.sqrt(Math.min(b,c)),a.B&&(g=b>c?f[1]:f[0]),g}return null}function Uu(a,b){var c=a.G;c?c.V().ma(b):(c=new I(new A(b)),a.G=c,a.S.ga().cb(c))}
-Mu.prototype.setMap=function(a){this.u.setMap(a);this.S.setMap(a);Jg.prototype.setMap.call(this,a)};Mu.prototype.D=function(){return this.j};Mu.prototype.i=function(a){this.j=a?a:null;var b=this.o;b?a?b.Oa(vd(a)):b.Oa(void 0):(this.o=b=a?new I(vd(a)):new I({}),this.u.ga().cb(b));this.b(new Xu(this.j))};function Xu(a){Ka.call(this,Yu);this.b=a}v(Xu,Ka);var Yu="extentchanged";function Zu(a){Jg.call(this,{handleDownEvent:$u,handleDragEvent:av,handleEvent:bv,handleUpEvent:cv});this.ub=a.condition?a.condition:Ig;this.Aa=function(a){return Eg(a)&&Dg(a)};this.La=a.deleteCondition?a.deleteCondition:this.Aa;this.Ka=this.a=null;this.ra=[0,0];this.B=this.P=!1;this.i=new cu;this.S=void 0!==a.pixelTolerance?a.pixelTolerance:10;this.o=this.oa=!1;this.j=[];this.G=new E({source:new T({useSpatialIndex:!1,wrapX:!!a.wrapX}),style:a.style?a.style:dv(),updateWhileAnimating:!0,updateWhileInteracting:!0});
-this.fa={Point:this.mm,LineString:this.bh,LinearRing:this.bh,Polygon:this.nm,MultiPoint:this.km,MultiLineString:this.jm,MultiPolygon:this.lm,GeometryCollection:this.im};this.u=a.features;this.u.forEach(this.wf,this);w(this.u,se,this.gm,this);w(this.u,te,this.hm,this);this.W=null}v(Zu,Jg);k=Zu.prototype;k.wf=function(a){var b=a.V();b&&b.X()in this.fa&&this.fa[b.X()].call(this,a,b);(b=this.s)&&ev(this,this.ra,b);w(a,"change",this.ah,this)};function fv(a,b){a.B||(a.B=!0,a.b(new gv(hv,a.u,b)))}
-function iv(a,b){jv(a,b);a.a&&0===a.u.yc()&&(a.G.ga().mb(a.a),a.a=null);Fa(b,"change",a.ah,a)}function jv(a,b){var c=a.i,d=[];c.forEach(function(a){b===a.feature&&d.push(a)});for(var e=d.length-1;0<=e;--e)c.remove(d[e])}k.Ba=function(a){this.a&&!a&&(this.G.ga().mb(this.a),this.a=null);Jg.prototype.Ba.call(this,a)};k.setMap=function(a){this.G.setMap(a);Jg.prototype.setMap.call(this,a)};k.gm=function(a){this.wf(a.element)};k.ah=function(a){this.o||(a=a.target,iv(this,a),this.wf(a))};
-k.hm=function(a){iv(this,a.element)};k.mm=function(a,b){var c=b.Y(),c={feature:a,geometry:b,pa:[c,c]};this.i.Da(b.D(),c)};k.km=function(a,b){var c=b.Y(),d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],d={feature:a,geometry:b,depth:[e],index:e,pa:[d,d]},this.i.Da(b.D(),d)};k.bh=function(a,b){var c=b.Y(),d,e,f,g;d=0;for(e=c.length-1;d<e;++d)f=c.slice(d,d+2),g={feature:a,geometry:b,index:d,pa:f},this.i.Da(Ab(f),g)};
-k.jm=function(a,b){var c=b.Y(),d,e,f,g,h,l,m;g=0;for(h=c.length;g<h;++g)for(d=c[g],e=0,f=d.length-1;e<f;++e)l=d.slice(e,e+2),m={feature:a,geometry:b,depth:[g],index:e,pa:l},this.i.Da(Ab(l),m)};k.nm=function(a,b){var c=b.Y(),d,e,f,g,h,l,m;g=0;for(h=c.length;g<h;++g)for(d=c[g],e=0,f=d.length-1;e<f;++e)l=d.slice(e,e+2),m={feature:a,geometry:b,depth:[g],index:e,pa:l},this.i.Da(Ab(l),m)};
-k.lm=function(a,b){var c=b.Y(),d,e,f,g,h,l,m,n,p,q;l=0;for(m=c.length;l<m;++l)for(n=c[l],g=0,h=n.length;g<h;++g)for(d=n[g],e=0,f=d.length-1;e<f;++e)p=d.slice(e,e+2),q={feature:a,geometry:b,depth:[g,l],index:e,pa:p},this.i.Da(Ab(p),q)};k.im=function(a,b){var c,d=b.f;for(c=0;c<d.length;++c)this.fa[d[c].X()].call(this,a,d[c])};function kv(a,b){var c=a.a;c?c.V().ma(b):(c=new I(new A(b)),a.a=c,a.G.ga().cb(c))}function lv(a,b){return a.index-b.index}
-function $u(a){if(!this.ub(a))return!1;ev(this,a.pixel,a.map);this.j.length=0;this.B=!1;var b=this.a;if(b){var c=[],b=b.V().Y(),d=Ab([b]),d=fu(this.i,d),e={};d.sort(lv);for(var f=0,g=d.length;f<g;++f){var h=d[f],l=h.pa,m=ea(h.feature),n=h.depth;n&&(m+="-"+n.join("-"));e[m]||(e[m]=Array(2));if(vb(l[0],b)&&!e[m][0])this.j.push([h,0]),e[m][0]=h;else if(vb(l[1],b)&&!e[m][1]){if("LineString"!==h.geometry.X()&&"MultiLineString"!==h.geometry.X()||!e[m][0]||0!==e[m][0].index)this.j.push([h,1]),e[m][1]=h}else ea(l)in
-this.Ka&&!e[m][0]&&!e[m][1]&&c.push([h,b])}c.length&&fv(this,a);for(a=c.length-1;0<=a;--a)this.$k.apply(this,c[a])}return!!this.a}
-function av(a){this.P=!1;fv(this,a);a=a.coordinate;for(var b=0,c=this.j.length;b<c;++b){for(var d=this.j[b],e=d[0],f=e.depth,g=e.geometry,h=g.Y(),l=e.pa,d=d[1];a.length<g.sa();)a.push(0);switch(g.X()){case "Point":h=a;l[0]=l[1]=a;break;case "MultiPoint":h[e.index]=a;l[0]=l[1]=a;break;case "LineString":h[e.index+d]=a;l[d]=a;break;case "MultiLineString":h[f[0]][e.index+d]=a;l[d]=a;break;case "Polygon":h[f[0]][e.index+d]=a;l[d]=a;break;case "MultiPolygon":h[f[1]][f[0]][e.index+d]=a,l[d]=a}e=g;this.o=
-!0;e.ma(h);this.o=!1}kv(this,a)}function cv(a){for(var b,c=this.j.length-1;0<=c;--c)b=this.j[c][0],du(this.i,Ab(b.pa),b);this.B&&(this.b(new gv(mv,this.u,a)),this.B=!1);return!1}function bv(a){if(!(a instanceof Uf))return!0;this.W=a;var b;Cd(a.map.$())[1]||a.type!=dg||this.C||(this.ra=a.pixel,ev(this,a.pixel,a.map));this.a&&this.La(a)&&(b=a.type==Zf&&this.P?!0:this.Qh());a.type==Zf&&(this.P=!1);return Kg.call(this,a)&&!b}
-function ev(a,b,c){function d(a,b){return yb(e,a.pa)-yb(e,b.pa)}var e=c.Ja(b),f=c.Ja([b[0]-a.S,b[1]+a.S]),g=c.Ja([b[0]+a.S,b[1]-a.S]),f=Ab([f,g]),f=fu(a.i,f);if(0<f.length){f.sort(d);var g=f[0].pa,h=sb(e,g),l=c.Ca(h);if(Math.sqrt(xb(b,l))<=a.S){b=c.Ca(g[0]);c=c.Ca(g[1]);b=xb(l,b);c=xb(l,c);a.oa=Math.sqrt(Math.min(b,c))<=a.S;a.oa&&(h=b>c?g[1]:g[0]);kv(a,h);c={};c[ea(g)]=!0;b=1;for(l=f.length;b<l;++b)if(h=f[b].pa,vb(g[0],h[0])&&vb(g[1],h[1])||vb(g[0],h[1])&&vb(g[1],h[0]))c[ea(h)]=!0;else break;a.Ka=
-c;return}}a.a&&(a.G.ga().mb(a.a),a.a=null)}
-k.$k=function(a,b){for(var c=a.pa,d=a.feature,e=a.geometry,f=a.depth,g=a.index,h;b.length<e.sa();)b.push(0);switch(e.X()){case "MultiLineString":h=e.Y();h[f[0]].splice(g+1,0,b);break;case "Polygon":h=e.Y();h[f[0]].splice(g+1,0,b);break;case "MultiPolygon":h=e.Y();h[f[1]][f[0]].splice(g+1,0,b);break;case "LineString":h=e.Y();h.splice(g+1,0,b);break;default:return}this.o=!0;e.ma(h);this.o=!1;h=this.i;h.remove(a);nv(this,e,g,f,1);var l={pa:[c[0],b],feature:d,geometry:e,depth:f,index:g};h.Da(Ab(l.pa),
-l);this.j.push([l,1]);c={pa:[b,c[1]],feature:d,geometry:e,depth:f,index:g+1};h.Da(Ab(c.pa),c);this.j.push([c,0]);this.P=!0};
-k.Qh=function(){var a=!1;if(this.W&&this.W.type!=eg){var b=this.W;fv(this,b);var c=this.j,a={},d=!1,e,f,g,h,l,m,n,p;for(h=c.length-1;0<=h;--h)g=c[h],n=g[0],p=ea(n.feature),n.depth&&(p+="-"+n.depth.join("-")),p in a||(a[p]={}),0===g[1]?(a[p].right=n,a[p].index=n.index):1==g[1]&&(a[p].left=n,a[p].index=n.index+1);for(p in a){m=a[p].right;h=a[p].left;g=a[p].index;l=g-1;n=void 0!==h?h:m;0>l&&(l=0);c=n.geometry;e=f=c.Y();d=!1;switch(c.X()){case "MultiLineString":2<f[n.depth[0]].length&&(f[n.depth[0]].splice(g,
-1),d=!0);break;case "LineString":2<f.length&&(f.splice(g,1),d=!0);break;case "MultiPolygon":e=e[n.depth[1]];case "Polygon":e=e[n.depth[0]],4<e.length&&(g==e.length-1&&(g=0),e.splice(g,1),d=!0,0===g&&(e.pop(),e.push(e[0]),l=e.length-1))}d&&(e=c,this.o=!0,e.ma(f),this.o=!1,f=[],void 0!==h&&(this.i.remove(h),f.push(h.pa[0])),void 0!==m&&(this.i.remove(m),f.push(m.pa[1])),void 0!==h&&void 0!==m&&(h={depth:n.depth,feature:n.feature,geometry:n.geometry,index:l,pa:f},this.i.Da(Ab(h.pa),h)),nv(this,c,g,n.depth,
--1),this.a&&(this.G.ga().mb(this.a),this.a=null))}a=d;this.b(new gv(mv,this.u,b));this.B=!1}return a};function nv(a,b,c,d,e){hu(a.i,b.D(),function(a){a.geometry===b&&(void 0===d||void 0===a.depth||eb(a.depth,d))&&a.index>c&&(a.index+=e)})}function dv(){var a=Di();return function(){return a.Point}}function gv(a,b,c){Ka.call(this,a);this.features=b;this.mapBrowserEvent=c}v(gv,Ka);var hv="modifystart",mv="modifyend";function ov(a){tg.call(this,{handleEvent:pv});a=a?a:{};this.C=a.condition?a.condition:Dg;this.u=a.addCondition?a.addCondition:hc;this.B=a.removeCondition?a.removeCondition:hc;this.G=a.toggleCondition?a.toggleCondition:Fg;this.l=a.multi?a.multi:!1;this.j=a.filter?a.filter:gc;this.i=new E({source:new T({useSpatialIndex:!1,features:a.features,wrapX:a.wrapX}),style:a.style?a.style:qv(),updateWhileAnimating:!0,updateWhileInteracting:!0});if(a.layers)if("function"===typeof a.layers)a=a.layers;else{var b=
-a.layers;a=function(a){return Za(b,a)}}else a=gc;this.o=a;this.a={};a=this.i.ga().c;w(a,se,this.om,this);w(a,te,this.rm,this)}v(ov,tg);k=ov.prototype;k.pm=function(){return this.i.ga().c};k.qm=function(a){a=ea(a);return this.a[a]};
-function pv(a){if(!this.C(a))return!0;var b=this.u(a),c=this.B(a),d=this.G(a),e=!b&&!c&&!d,f=a.map,g=this.i.ga().c,h=[],l=[];if(e){va(this.a);f.Sd(a.pixel,function(a,b){if(this.j(a,b)){l.push(a);var c=ea(a);this.a[c]=b;return!this.l}},this,this.o);for(e=g.yc()-1;0<=e;--e){var f=g.item(e),m=l.indexOf(f);-1<m?l.splice(m,1):(g.remove(f),h.push(f))}0!==l.length&&g.qf(l)}else{f.Sd(a.pixel,function(a,e){if(this.j(a,e)){if(!b&&!d||Za(g.a,a))(c||d)&&Za(g.a,a)&&(h.push(a),f=ea(a),delete this.a[f]);else{l.push(a);
-var f=ea(a);this.a[f]=e}return!this.l}},this,this.o);for(e=h.length-1;0<=e;--e)g.remove(h[e]);g.qf(l)}(0<l.length||0<h.length)&&this.b(new rv(sv,l,h,a));return Cg(a)}k.setMap=function(a){var b=this.s,c=this.i.ga().c;b&&c.forEach(b.oi,b);tg.prototype.setMap.call(this,a);this.i.setMap(a);a&&c.forEach(a.ki,a)};function qv(){var a=Di();bb(a.Polygon,a.LineString);bb(a.GeometryCollection,a.LineString);return function(b){return b.V()?a[b.V().X()]:null}}k.om=function(a){var b=this.s;b&&b.ki(a.element)};
-k.rm=function(a){var b=this.s;b&&b.oi(a.element)};function rv(a,b,c,d){Ka.call(this,a);this.selected=b;this.deselected=c;this.mapBrowserEvent=d}v(rv,Ka);var sv="select";function tv(a){Jg.call(this,{handleEvent:uv,handleDownEvent:gc,handleUpEvent:vv});a=a?a:{};this.o=a.source?a.source:null;this.ra=void 0!==a.vertex?a.vertex:!0;this.P=void 0!==a.edge?a.edge:!0;this.j=a.features?a.features:null;this.oa=[];this.B={};this.G={};this.W={};this.u={};this.S=null;this.i=void 0!==a.pixelTolerance?a.pixelTolerance:10;this.Ka=wv.bind(this);this.a=new cu;this.fa={Point:this.xm,LineString:this.fh,LinearRing:this.fh,Polygon:this.ym,MultiPoint:this.vm,MultiLineString:this.um,MultiPolygon:this.wm,
-GeometryCollection:this.tm}}v(tv,Jg);k=tv.prototype;k.cb=function(a,b){var c=void 0!==b?b:!0,d=ea(a),e=a.V();if(e){var f=this.fa[e.X()];f&&(this.W[d]=e.D(Bb()),f.call(this,a,e),c&&(this.G[d]=w(e,"change",this.yk.bind(this,a),this)))}c&&(this.B[d]=w(a,Wa(a.f),this.sm,this))};k.xj=function(a){this.cb(a)};k.yj=function(a){this.mb(a)};k.dh=function(a){var b;a instanceof mu?b=a.feature:a instanceof re&&(b=a.element);this.cb(b)};
-k.eh=function(a){var b;a instanceof mu?b=a.feature:a instanceof re&&(b=a.element);this.mb(b)};k.sm=function(a){a=a.target;this.mb(a,!0);this.cb(a,!0)};k.yk=function(a){if(this.C){var b=ea(a);b in this.u||(this.u[b]=a)}else this.pi(a)};k.mb=function(a,b){var c=void 0!==b?b:!0,d=ea(a),e=this.W[d];if(e){var f=this.a,g=[];hu(f,e,function(b){a===b.feature&&g.push(b)});for(e=g.length-1;0<=e;--e)f.remove(g[e]);c&&(Qa(this.G[d]),delete this.G[d])}c&&(Qa(this.B[d]),delete this.B[d])};
-k.setMap=function(a){var b=this.s,c=this.oa,d;this.j?d=this.j:this.o&&(d=this.o.oe());b&&(c.forEach(Qa),c.length=0,d.forEach(this.yj,this));Jg.prototype.setMap.call(this,a);a&&(this.j?c.push(w(this.j,se,this.dh,this),w(this.j,te,this.eh,this)):this.o&&c.push(w(this.o,nu,this.dh,this),w(this.o,ou,this.eh,this)),d.forEach(this.xj,this))};k.Fc=hc;k.pi=function(a){this.mb(a,!1);this.cb(a,!1)};k.tm=function(a,b){var c,d=b.f;for(c=0;c<d.length;++c)this.fa[d[c].X()].call(this,a,d[c])};
-k.fh=function(a,b){var c=b.Y(),d,e,f,g;d=0;for(e=c.length-1;d<e;++d)f=c.slice(d,d+2),g={feature:a,pa:f},this.a.Da(Ab(f),g)};k.um=function(a,b){var c=b.Y(),d,e,f,g,h,l,m;g=0;for(h=c.length;g<h;++g)for(d=c[g],e=0,f=d.length-1;e<f;++e)l=d.slice(e,e+2),m={feature:a,pa:l},this.a.Da(Ab(l),m)};k.vm=function(a,b){var c=b.Y(),d,e,f;e=0;for(f=c.length;e<f;++e)d=c[e],d={feature:a,pa:[d,d]},this.a.Da(b.D(),d)};
-k.wm=function(a,b){var c=b.Y(),d,e,f,g,h,l,m,n,p,q;l=0;for(m=c.length;l<m;++l)for(n=c[l],g=0,h=n.length;g<h;++g)for(d=n[g],e=0,f=d.length-1;e<f;++e)p=d.slice(e,e+2),q={feature:a,pa:p},this.a.Da(Ab(p),q)};k.xm=function(a,b){var c=b.Y(),c={feature:a,pa:[c,c]};this.a.Da(b.D(),c)};k.ym=function(a,b){var c=b.Y(),d,e,f,g,h,l,m;g=0;for(h=c.length;g<h;++g)for(d=c[g],e=0,f=d.length-1;e<f;++e)l=d.slice(e,e+2),m={feature:a,pa:l},this.a.Da(Ab(l),m)};
-function uv(a){var b,c,d=a.pixel,e=a.coordinate;b=a.map;var f=b.Ja([d[0]-this.i,d[1]+this.i]);c=b.Ja([d[0]+this.i,d[1]-this.i]);var f=Ab([f,c]),g=fu(this.a,f),h,f=!1,l=null;c=null;if(0<g.length){this.S=e;g.sort(this.Ka);g=g[0].pa;if(this.ra&&!this.P){if(e=b.Ca(g[0]),h=b.Ca(g[1]),e=xb(d,e),d=xb(d,h),h=Math.sqrt(Math.min(e,d)),h=h<=this.i)f=!0,l=e>d?g[1]:g[0],c=b.Ca(l)}else this.P&&(l=sb(e,g),c=b.Ca(l),Math.sqrt(xb(d,c))<=this.i&&(f=!0,this.ra&&(e=b.Ca(g[0]),h=b.Ca(g[1]),e=xb(c,e),d=xb(c,h),h=Math.sqrt(Math.min(e,
-d)),h=h<=this.i)))&&(l=e>d?g[1]:g[0],c=b.Ca(l));f&&(c=[Math.round(c[0]),Math.round(c[1])])}b=l;f&&(a.coordinate=b.slice(0,2),a.pixel=c);return Kg.call(this,a)}function vv(){var a=wa(this.u);a.length&&(a.forEach(this.pi,this),this.u={});return!1}function wv(a,b){return yb(this.S,a.pa)-yb(this.S,b.pa)};function xv(a){Jg.call(this,{handleDownEvent:yv,handleDragEvent:zv,handleMoveEvent:Av,handleUpEvent:Bv});this.o=void 0;this.a=null;this.i=void 0!==a.features?a.features:null;if(a.layers)if("function"===typeof a.layers)a=a.layers;else{var b=a.layers;a=function(a){return Za(b,a)}}else a=gc;this.u=a;this.j=null}v(xv,Jg);function yv(a){this.j=Cv(this,a.pixel,a.map);return!this.a&&this.j?(this.a=a.coordinate,Av.call(this,a),this.b(new Dv(Ev,this.i,a.coordinate)),!0):!1}
-function Bv(a){return this.a?(this.a=null,Av.call(this,a),this.b(new Dv(Fv,this.i,a.coordinate)),!0):!1}function zv(a){if(this.a){a=a.coordinate;var b=a[0]-this.a[0],c=a[1]-this.a[1];if(this.i)this.i.forEach(function(a){var d=a.V();d.Pc(b,c);a.Oa(d)});else if(this.j){var d=this.j.V();d.Pc(b,c);this.j.Oa(d)}this.a=a;this.b(new Dv(Gv,this.i,a))}}
-function Av(a){var b=a.map.uc();Cv(this,a.pixel,a.map)?(this.o=b.style.cursor,b.style.cursor=this.a?"-webkit-grabbing":"-webkit-grab",b.style.cursor=this.a?"grabbing":"grab"):(b.style.cursor=void 0!==this.o?this.o:"",this.o=void 0)}function Cv(a,b,c){var d=null;b=c.Sd(b,function(a){return a},a,a.u);a.i&&Za(a.i.a,b)&&(d=b);return d}function Dv(a,b,c){Ka.call(this,a);this.features=b;this.coordinate=c}v(Dv,Ka);var Ev="translatestart",Gv="translating",Fv="translateend";function U(a){a=a?a:{};var b=ua({},a);delete b.gradient;delete b.radius;delete b.blur;delete b.shadow;delete b.weight;E.call(this,b);this.f=null;this.W=void 0!==a.shadow?a.shadow:250;this.P=void 0;this.c=null;w(this,Wa(Hv),this.zk,this);this.$h(a.gradient?a.gradient:Iv);this.Th(void 0!==a.blur?a.blur:15);this.ih(void 0!==a.radius?a.radius:8);w(this,Wa(Jv),this.lf,this);w(this,Wa(Kv),this.lf,this);this.lf();var c=a.weight?a.weight:"weight",d;"string"===typeof c?d=function(a){return a.get(c)}:d=c;this.l(function(a){a=
-d(a);a=void 0!==a?ia(a,0,1):1;var b=255*a|0,c=this.c[b];c||(c=[new yi({image:new jp({opacity:a,src:this.P})})],this.c[b]=c);return c}.bind(this));this.set("renderOrder",null);w(this,"render",this.Qk,this)}v(U,E);var Iv=["#00f","#0ff","#0f0","#ff0","#f00"];k=U.prototype;k.tg=function(){return this.get(Jv)};k.Ag=function(){return this.get(Hv)};k.hh=function(){return this.get(Kv)};
-k.zk=function(){for(var a=this.Ag(),b=De(1,256),c=b.createLinearGradient(0,0,1,256),d=1/(a.length-1),e=0,f=a.length;e<f;++e)c.addColorStop(e*d,a[e]);b.fillStyle=c;b.fillRect(0,0,1,256);this.f=b.getImageData(0,0,1,256).data};k.lf=function(){var a=this.hh(),b=this.tg(),c=a+b+1,d=2*c,d=De(d,d);d.shadowOffsetX=d.shadowOffsetY=this.W;d.shadowBlur=b;d.shadowColor="#000";d.beginPath();b=c-this.W;d.arc(b,b,a,0,2*Math.PI,!0);d.fill();this.P=d.canvas.toDataURL();this.c=Array(256);this.v()};
-k.Qk=function(a){a=a.context;var b=a.canvas,b=a.getImageData(0,0,b.width,b.height),c=b.data,d,e,f;d=0;for(e=c.length;d<e;d+=4)if(f=4*c[d+3])c[d]=this.f[f],c[d+1]=this.f[f+1],c[d+2]=this.f[f+2];a.putImageData(b,0,0)};k.Th=function(a){this.set(Jv,a)};k.$h=function(a){this.set(Hv,a)};k.ih=function(a){this.set(Kv,a)};var Jv="blur",Hv="gradient",Kv="radius";function Lv(a,b,c,d){function e(){delete window[g];f.parentNode.removeChild(f)}var f=document.createElement("script"),g="olc_"+ea(b);f.async=!0;f.src=a+(-1==a.indexOf("?")?"?":"&")+(d||"callback")+"="+g;var h=setTimeout(function(){e();c&&c()},1E4);window[g]=function(a){clearTimeout(h);e();b(a)};document.getElementsByTagName("head")[0].appendChild(f)};function Mv(a,b,c,d,e,f,g,h,l,m,n){gg.call(this,e,0);this.G=void 0!==n?n:!1;this.B=g;this.C=h;this.u=null;this.c=b;this.o=d;this.s=f?f:e;this.g=[];this.Xc=null;this.j=0;f=d.Ia(this.s);h=this.o.D();e=this.c.D();f=h?cc(f,h):f;if(0===Xb(f))this.state=4;else if((h=a.D())&&(e?e=cc(e,h):e=h),d=d.Ga(this.s[0]),d=Mj(a,c,ac(f),d),!isFinite(d)||0>=d)this.state=4;else if(this.T=new Pj(a,c,f,e,d*(void 0!==m?m:.5)),0===this.T.f.length)this.state=4;else if(this.j=b.wc(d),c=Rj(this.T),e&&(a.a?(c[1]=ia(c[1],e[1],
-e[3]),c[3]=ia(c[3],e[1],e[3])):c=cc(c,e)),Xb(c)){a=be(b,c,this.j);for(b=a.ba;b<=a.da;b++)for(c=a.ea;c<=a.ha;c++)(m=l(this.j,b,c,g))&&this.g.push(m);0===this.g.length&&(this.state=4)}else this.state=4}v(Mv,gg);Mv.prototype.la=function(){1==this.state&&(this.Xc.forEach(za),this.Xc=null);gg.prototype.la.call(this)};Mv.prototype.qb=function(){return this.u};
-Mv.prototype.Bd=function(){var a=[];this.g.forEach(function(b){b&&b.U()==jg&&a.push({extent:this.c.Ia(b.ya),image:b.qb()})},this);this.g.length=0;if(0===a.length)this.state=3;else{var b=this.s[0],c=this.o.Va(b),d="number"===typeof c?c:c[0],c="number"===typeof c?c:c[1],b=this.o.Ga(b),e=this.c.Ga(this.j),f=this.o.Ia(this.s);this.u=Oj(d,c,this.B,e,this.c.D(),b,f,this.T,a,this.C,this.G);this.state=jg}hg(this)};
-Mv.prototype.load=function(){if(0==this.state){this.state=1;hg(this);var a=0;this.Xc=[];this.g.forEach(function(b){var c=b.U();if(0==c||1==c){a++;var d;d=w(b,"change",function(){var c=b.U();if(c==jg||3==c||4==c)za(d),a--,0===a&&(this.Xc.forEach(za),this.Xc=null,this.Bd())},this);this.Xc.push(d)}},this);this.g.forEach(function(a){0==a.U()&&a.load()});0===a&&setTimeout(this.Bd.bind(this),0)}};function Nv(a,b){var c=/\{z\}/g,d=/\{x\}/g,e=/\{y\}/g,f=/\{-y\}/g;return function(g){if(g)return a.replace(c,g[0].toString()).replace(d,g[1].toString()).replace(e,function(){return(-g[2]-1).toString()}).replace(f,function(){var a=b.a?b.a[g[0]]:null;ha(a,55);return(a.ha-a.ea+1+g[2]).toString()})}}function Ov(a,b){for(var c=a.length,d=Array(c),e=0;e<c;++e)d[e]=Nv(a[e],b);return Pv(d)}function Pv(a){return 1===a.length?a[0]:function(b,c,d){if(b)return a[oa((b[1]<<b[0])+b[2],a.length)](b,c,d)}}
-function Qv(){}function Rv(a){var b=[],c=/\{([a-z])-([a-z])\}/.exec(a);if(c){var d=c[2].charCodeAt(0),e;for(e=c[1].charCodeAt(0);e<=d;++e)b.push(a.replace(c[0],String.fromCharCode(e)));return b}if(c=c=/\{(\d+)-(\d+)\}/.exec(a)){d=parseInt(c[2],10);for(e=parseInt(c[1],10);e<=d;e++)b.push(a.replace(c[0],e.toString()));return b}b.push(a);return b};function Sv(a){sl.call(this);this.c=void 0!==a?a:2048}v(Sv,sl);function Tv(a){return a.f>a.c}Sv.prototype.Kc=function(a){for(var b,c;Tv(this);){b=this.a.Gc;c=b.ya[0].toString();var d;if(d=c in a)b=b.ya,d=Rd(a[c],b[1],b[2]);if(d)break;else Ja(this.pop())}};function Uv(a){Tj.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,state:a.state,wrapX:a.wrapX});this.fa=void 0!==a.opaque?a.opaque:!1;this.oa=void 0!==a.tilePixelRatio?a.tilePixelRatio:1;this.tileGrid=void 0!==a.tileGrid?a.tileGrid:null;this.a=new Sv(a.cacheSize);this.l=[0,0];this.ec=""}v(Uv,Tj);k=Uv.prototype;k.qh=function(){return Tv(this.a)};k.Kc=function(a,b){var c=this.qd(a);c&&c.Kc(b)};
-function Wi(a,b,c,d,e){b=a.qd(b);if(!b)return!1;for(var f=!0,g,h,l=d.ba;l<=d.da;++l)for(var m=d.ea;m<=d.ha;++m)g=a.Fb(c,l,m),h=!1,b.b.hasOwnProperty(g)&&(g=b.get(g),(h=g.U()===jg)&&(h=!1!==e(g))),h||(f=!1);return f}k.df=function(){return 0};function Vv(a,b){a.ec!==b&&(a.ec=b,a.v())}k.Fb=function(a,b,c){return a+"/"+b+"/"+c};k.gf=function(){return this.fa};k.Ra=function(){return this.tileGrid};k.pb=function(a){return this.tileGrid?this.tileGrid:he(a)};
-k.qd=function(a){var b=this.f;return b&&!Hc(b,a)?null:this.a};k.gb=function(){return this.oa};k.kf=function(a,b,c){c=this.pb(c);b=this.gb(b);a=Wd(c.Va(a),this.l);return 1==b?a:Vd(a,b,this.l)};function Wv(a,b,c){var d=void 0!==c?c:a.f;c=a.pb(d);if(a.G&&d.g){var e=b;b=e[0];a=ge(c,e);d=ie(d);Gb(d,a)?b=e:(e=Zb(d),a[0]+=e*Math.ceil((d[0]-a[0])/e),b=c.Zd(a,b))}e=b[0];d=b[1];a=b[2];if(c.minZoom>e||e>c.maxZoom)c=!1;else{var f=c.D();c=(c=f?be(c,f,e):c.a?c.a[e]:null)?Rd(c,d,a):!0}return c?b:null}
-k.ta=function(){this.a.clear();this.v()};k.Vf=da;function Xv(a,b){Ka.call(this,a);this.tile=b}v(Xv,Ka);function Yv(a){Uv.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tilePixelRatio:a.tilePixelRatio,wrapX:a.wrapX});this.tileLoadFunction=a.tileLoadFunction;this.tileUrlFunction=this.sc?this.sc.bind(this):Qv;this.urls=null;a.urls?this.Ua(a.urls):a.url&&this.Ya(a.url);a.tileUrlFunction&&this.Ta(a.tileUrlFunction)}v(Yv,Uv);k=Yv.prototype;k.fb=function(){return this.tileLoadFunction};
-k.hb=function(){return this.tileUrlFunction};k.ib=function(){return this.urls};k.rh=function(a){a=a.target;switch(a.U()){case 1:this.b(new Xv("tileloadstart",a));break;case jg:this.b(new Xv("tileloadend",a));break;case 3:this.b(new Xv("tileloaderror",a))}};k.nb=function(a){this.a.clear();this.tileLoadFunction=a;this.v()};k.Ta=function(a,b){this.tileUrlFunction=a;"undefined"!==typeof b?Vv(this,b):this.v()};
-k.Ya=function(a){var b=this.urls=Rv(a);this.Ta(this.sc?this.sc.bind(this):Ov(b,this.tileGrid),a)};k.Ua=function(a){this.urls=a;var b=a.join("\n");this.Ta(this.sc?this.sc.bind(this):Ov(a,this.tileGrid),b)};k.Vf=function(a,b,c){a=this.Fb(a,b,c);this.a.b.hasOwnProperty(a)&&this.a.get(a)};function W(a){Yv.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,extent:a.extent,logo:a.logo,opaque:a.opaque,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Zv,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,wrapX:a.wrapX});this.crossOrigin=void 0!==a.crossOrigin?a.crossOrigin:null;this.tileClass=void 0!==a.tileClass?a.tileClass:Rt;this.i={};this.s={};this.ra=a.reprojectionErrorThreshold;
-this.B=!1}v(W,Yv);k=W.prototype;k.qh=function(){if(Tv(this.a))return!0;for(var a in this.i)if(Tv(this.i[a]))return!0;return!1};k.Kc=function(a,b){var c=this.qd(a);this.a.Kc(this.a==c?b:{});for(var d in this.i){var e=this.i[d];e.Kc(e==c?b:{})}};k.df=function(a){return this.f&&a&&!Hc(this.f,a)?0:this.ef()};k.ef=function(){return 0};k.gf=function(a){return this.f&&a&&!Hc(this.f,a)?!1:Yv.prototype.gf.call(this,a)};
-k.pb=function(a){var b=this.f;return!this.tileGrid||b&&!Hc(b,a)?(b=ea(a).toString(),b in this.s||(this.s[b]=he(a)),this.s[b]):this.tileGrid};k.qd=function(a){var b=this.f;if(!b||Hc(b,a))return this.a;a=ea(a).toString();a in this.i||(this.i[a]=new Sv);return this.i[a]};function $v(a,b,c,d,e,f,g){b=[b,c,d];e=(c=Wv(a,b,f))?a.tileUrlFunction(c,e,f):void 0;e=new a.tileClass(b,void 0!==e?0:4,void 0!==e?e:"",a.crossOrigin,a.tileLoadFunction);e.key=g;w(e,"change",a.rh,a);return e}
-k.vc=function(a,b,c,d,e){if(this.f&&e&&!Hc(this.f,e)){var f=this.qd(e);c=[a,b,c];var g;a=this.Fb.apply(this,c);f.b.hasOwnProperty(a)&&(g=f.get(a));b=this.ec;if(g&&g.key==b)return g;var h=this.f,l=this.pb(h),m=this.pb(e),n=Wv(this,c,e);d=new Mv(h,l,e,m,c,n,this.gb(d),this.ef(),function(a,b,c,d){return aw(this,a,b,c,d,h)}.bind(this),this.ra,this.B);d.key=b;g?(d.a=g,f.replace(a,d)):f.set(a,d);return d}return aw(this,a,b,c,d,e)};
-function aw(a,b,c,d,e,f){var g,h=a.Fb(b,c,d),l=a.ec;if(a.a.b.hasOwnProperty(h)){if(g=a.a.get(h),g.key!=l){var m=g;g=$v(a,b,c,d,e,f,l);0==m.U()?g.a=m.a:g.a=m;if(g.a){b=g.a;c=g;do{if(b.U()==jg){b.a=null;break}else 1==b.U()?c=b:0==b.U()?c.a=b.a:c=b;b=c.a}while(b)}a.a.replace(h,g)}}else g=$v(a,b,c,d,e,f,l),a.a.set(h,g);return g}k.Bb=function(a){if(this.B!=a){this.B=a;for(var b in this.i)this.i[b].clear();this.v()}};k.Cb=function(a,b){var c=qc(a);c&&(c=ea(c).toString(),c in this.s||(this.s[c]=b))};
-function Zv(a,b){a.qb().src=b};function bw(a){W.call(this,{cacheSize:a.cacheSize,crossOrigin:"anonymous",opaque:!0,projection:qc("EPSG:3857"),reprojectionErrorThreshold:a.reprojectionErrorThreshold,state:"loading",tileLoadFunction:a.tileLoadFunction,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.C=void 0!==a.culture?a.culture:"en-us";this.u=void 0!==a.maxZoom?a.maxZoom:-1;this.c=a.key;this.o=a.imagerySet;Lv("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/"+this.o+"?uriScheme=https&include=ImageryProviders&key="+this.c,this.Z.bind(this),
-void 0,"jsonp")}v(bw,W);var cw=new le({html:'<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'});bw.prototype.P=function(){return this.c};bw.prototype.W=function(){return this.o};
-bw.prototype.Z=function(a){if(200!=a.statusCode||"OK"!=a.statusDescription||"ValidCredentials"!=a.authenticationResultCode||1!=a.resourceSets.length||1!=a.resourceSets[0].resources.length)Vj(this,"error");else{var b=a.brandLogoUri;-1==b.indexOf("https")&&(b=b.replace("http","https"));var c=a.resourceSets[0].resources[0],d=-1==this.u?c.zoomMax:this.u;a=ie(this.f);var e=ke({extent:a,minZoom:c.zoomMin,maxZoom:d,tileSize:c.imageWidth==c.imageHeight?c.imageWidth:[c.imageWidth,c.imageHeight]});this.tileGrid=
-e;var f=this.C;this.tileUrlFunction=Pv(c.imageUrlSubdomains.map(function(a){var b=[0,0,0],d=c.imageUrl.replace("{subdomain}",a).replace("{culture}",f);return function(a){if(a)return Xd(a[0],a[1],-a[2]-1,b),d.replace("{quadkey}",Yd(b))}}));if(c.imageryProviders){var g=tc(qc("EPSG:4326"),this.f);a=c.imageryProviders.map(function(a){var b=a.attribution,c={};a.coverageAreas.forEach(function(a){var b=a.zoomMin,f=Math.min(a.zoomMax,d);a=a.bbox;a=fc([a[1],a[0],a[3],a[2]],g);var h,l;for(h=b;h<=f;++h)l=h.toString(),
-b=be(e,a,h),l in c?c[l].push(b):c[l]=[b]});return new le({html:b,tileRanges:c})});a.push(cw);this.qa(a)}this.S=b;Vj(this,"ready")}};function dw(a){a=a||{};var b=void 0!==a.projection?a.projection:"EPSG:3857",c=void 0!==a.tileGrid?a.tileGrid:ke({extent:ie(b),maxZoom:a.maxZoom,minZoom:a.minZoom,tileSize:a.tileSize});W.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:a.opaque,projection:b,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:c,tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:a.tileUrlFunction,url:a.url,urls:a.urls,
-wrapX:void 0!==a.wrapX?a.wrapX:!0})}v(dw,W);function ew(a){this.u=a.account;this.C=a.map||"";this.c=a.config||{};this.o={};dw.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,maxZoom:void 0!==a.maxZoom?a.maxZoom:18,minZoom:a.minZoom,projection:a.projection,state:"loading",wrapX:a.wrapX});fw(this)}v(ew,dw);k=ew.prototype;k.Hj=function(){return this.c};k.gp=function(a){ua(this.c,a);fw(this)};k.Po=function(a){this.c=a||{};fw(this)};
-function fw(a){var b=JSON.stringify(a.c);if(a.o[b])gw(a,a.o[b]);else{var c="https://"+a.u+".cartodb.com/api/v1/map";a.C&&(c+="/named/"+a.C);var d=new XMLHttpRequest;d.addEventListener("load",a.Bk.bind(a,b));d.addEventListener("error",a.Ak.bind(a));d.open("POST",c);d.setRequestHeader("Content-type","application/json");d.send(JSON.stringify(a.c))}}
-k.Bk=function(a,b){var c=b.target;if(!c.status||200<=c.status&&300>c.status){var d;try{d=JSON.parse(c.responseText)}catch(e){Vj(this,"error");return}gw(this,d);this.o[a]=d;Vj(this,"ready")}else Vj(this,"error")};k.Ak=function(){Vj(this,"error")};function gw(a,b){a.Ya("https://"+b.cdn_url.https+"/"+a.u+"/api/v1/map/"+b.layergroupid+"/{z}/{x}/{y}.png")};function X(a){T.call(this,{attributions:a.attributions,extent:a.extent,logo:a.logo,projection:a.projection,wrapX:a.wrapX});this.B=void 0;this.fa=void 0!==a.distance?a.distance:20;this.C=[];this.oa=a.geometryFunction||function(a){a=a.V();ha(a instanceof A,10);return a};this.u=a.source;this.u.I("change",X.prototype.La,this)}v(X,T);X.prototype.ub=function(){return this.u};X.prototype.rd=function(a,b,c){this.u.rd(a,b,c);b!==this.B&&(this.clear(),this.B=b,hw(this),this.Ic(this.C))};
-X.prototype.Jb=function(a){this.fa=a;this.La()};X.prototype.La=function(){this.clear();hw(this);this.Ic(this.C);this.v()};function hw(a){if(void 0!==a.B){a.C.length=0;for(var b=Bb(),c=a.fa*a.B,d=a.u.oe(),e={},f=0,g=d.length;f<g;f++){var h=d[f];ea(h).toString()in e||!(h=a.oa(h))||(h=h.Y(),Lb(h,b),Db(b,c,b),h=a.u.bf(b),h=h.filter(function(a){a=ea(a).toString();return a in e?!1:e[a]=!0}),a.C.push(iw(a,h)))}}}
-function iw(a,b){for(var c=[0,0],d=b.length-1;0<=d;--d){var e=a.oa(b[d]);e?rb(c,e.Y()):b.splice(d,1)}d=1/b.length;c[0]*=d;c[1]*=d;c=new I(new A(c));c.set("features",b);return c};function jw(a,b){var c=[];Object.keys(b).forEach(function(a){null!==b[a]&&void 0!==b[a]&&c.push(a+"="+encodeURIComponent(b[a]))});var d=c.join("&");a=a.replace(/[?&]$/,"");a=-1===a.indexOf("?")?a+"?":a+"&";return a+d};function kw(a){a=a||{};Wj.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions});this.Z=void 0!==a.crossOrigin?a.crossOrigin:null;this.i=a.url;this.l=void 0!==a.imageLoadFunction?a.imageLoadFunction:ck;this.u=a.params||{};this.c=null;this.s=[0,0];this.P=0;this.B=void 0!==a.ratio?a.ratio:1.5}v(kw,Wj);k=kw.prototype;k.Gm=function(){return this.u};
-k.Lc=function(a,b,c,d){if(void 0===this.i)return null;b=Xj(this,b);var e=this.c;if(e&&this.P==this.g&&e.resolution==b&&e.f==c&&Ib(e.D(),a))return e;e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};ua(e,this.u);a=a.slice();var f=(a[0]+a[2])/2,g=(a[1]+a[3])/2;if(1!=this.B){var h=this.B*Zb(a)/2,l=this.B*$b(a)/2;a[0]=f-h;a[1]=g-l;a[2]=f+h;a[3]=g+l}var h=b/c,l=Math.ceil(Zb(a)/h),m=Math.ceil($b(a)/h);a[0]=f-h*l/2;a[2]=f+h*l/2;a[1]=g-h*m/2;a[3]=g+h*m/2;this.s[0]=l;this.s[1]=m;f=a;g=this.s;d=d.eb.split(":").pop();
-e.SIZE=g[0]+","+g[1];e.BBOX=f.join(",");e.BBOXSR=d;e.IMAGESR=d;e.DPI=90*c;d=this.i;f=d.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage");f==d&&ha(!1,50);e=jw(f,e);this.c=new ii(a,b,c,this.j,e,this.Z,this.l);this.P=this.g;w(this.c,"change",this.o,this);return this.c};k.Fm=function(){return this.l};k.Hm=function(){return this.i};k.Im=function(a){this.c=null;this.l=a;this.v()};k.Jm=function(a){a!=this.i&&(this.i=a,this.c=null,this.v())};
-k.Km=function(a){ua(this.u,a);this.c=null;this.v()};function lw(a){Wj.call(this,{projection:a.projection,resolutions:a.resolutions});this.Z=void 0!==a.crossOrigin?a.crossOrigin:null;this.s=void 0!==a.displayDpi?a.displayDpi:96;this.l=a.params||{};this.P=a.url;this.c=void 0!==a.imageLoadFunction?a.imageLoadFunction:ck;this.fa=void 0!==a.hidpi?a.hidpi:!0;this.oa=void 0!==a.metersPerUnit?a.metersPerUnit:1;this.u=void 0!==a.ratio?a.ratio:1;this.Aa=void 0!==a.useOverlay?a.useOverlay:!1;this.i=null;this.B=0}v(lw,Wj);k=lw.prototype;k.Mm=function(){return this.l};
-k.Lc=function(a,b,c){b=Xj(this,b);c=this.fa?c:1;var d=this.i;if(d&&this.B==this.g&&d.resolution==b&&d.f==c&&Ib(d.D(),a))return d;1!=this.u&&(a=a.slice(),ec(a,this.u));var e=[Zb(a)/b*c,$b(a)/b*c];if(void 0!==this.P){var d=this.P,f=ac(a),g=this.oa,h=Zb(a),l=$b(a),m=e[0],n=e[1],p=.0254/this.s,e={OPERATION:this.Aa?"GETDYNAMICMAPOVERLAYIMAGE":"GETMAPIMAGE",VERSION:"2.0.0",LOCALE:"en",CLIENTAGENT:"ol.source.ImageMapGuide source",CLIP:"1",SETDISPLAYDPI:this.s,SETDISPLAYWIDTH:Math.round(e[0]),SETDISPLAYHEIGHT:Math.round(e[1]),
-SETVIEWSCALE:n*h>m*l?h*g/(m*p):l*g/(n*p),SETVIEWCENTERX:f[0],SETVIEWCENTERY:f[1]};ua(e,this.l);d=jw(d,e);d=new ii(a,b,c,this.j,d,this.Z,this.c);w(d,"change",this.o,this)}else d=null;this.i=d;this.B=this.g;return d};k.Lm=function(){return this.c};k.Om=function(a){ua(this.l,a);this.v()};k.Nm=function(a){this.i=null;this.c=a;this.v()};function mw(a){var b=a.imageExtent,c=void 0!==a.crossOrigin?a.crossOrigin:null,d=void 0!==a.imageLoadFunction?a.imageLoadFunction:ck;Wj.call(this,{attributions:a.attributions,logo:a.logo,projection:qc(a.projection)});this.c=new ii(b,void 0,1,this.j,a.url,c,d);this.i=a.imageSize?a.imageSize:null;w(this.c,"change",this.o,this)}v(mw,Wj);mw.prototype.Lc=function(a){return dc(a,this.c.D())?this.c:null};
-mw.prototype.o=function(a){if(this.c.U()==li){var b=this.c.D(),c=this.c.a(),d,e;this.i?(d=this.i[0],e=this.i[1]):(d=c.width,e=c.height);b=Math.ceil(Zb(b)/($b(b)/e));if(b!=d){var b=De(b,e),f=b.canvas;b.drawImage(c,0,0,d,e,0,0,f.width,f.height);this.c.g=f}}Wj.prototype.o.call(this,a)};function nw(a){a=a||{};Wj.call(this,{attributions:a.attributions,logo:a.logo,projection:a.projection,resolutions:a.resolutions});this.oa=void 0!==a.crossOrigin?a.crossOrigin:null;this.l=a.url;this.B=void 0!==a.imageLoadFunction?a.imageLoadFunction:ck;this.i=a.params||{};this.u=!0;ow(this);this.fa=a.serverType;this.Aa=void 0!==a.hidpi?a.hidpi:!0;this.c=null;this.P=[0,0];this.Z=0;this.s=void 0!==a.ratio?a.ratio:1.5}v(nw,Wj);var pw=[101,101];k=nw.prototype;
-k.Um=function(a,b,c,d){if(void 0!==this.l){var e=bc(a,b,0,pw),f={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.i.LAYERS};ua(f,this.i,d);d=Math.floor((e[3]-a[1])/b);f[this.u?"I":"X"]=Math.floor((a[0]-e[0])/b);f[this.u?"J":"Y"]=d;return qw(this,e,pw,1,qc(c),f)}};k.Wm=function(){return this.i};
-k.Lc=function(a,b,c,d){if(void 0===this.l)return null;b=Xj(this,b);1==c||this.Aa&&void 0!==this.fa||(c=1);a=a.slice();var e=(a[0]+a[2])/2,f=(a[1]+a[3])/2,g=b/c,h=Zb(a)/g,g=$b(a)/g,l=this.c;if(l&&this.Z==this.g&&l.resolution==b&&l.f==c&&Ib(l.D(),a))return l;if(1!=this.s){var l=this.s*Zb(a)/2,m=this.s*$b(a)/2;a[0]=e-l;a[1]=f-m;a[2]=e+l;a[3]=f+m}e={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};ua(e,this.i);this.P[0]=Math.ceil(h*this.s);this.P[1]=Math.ceil(g*this.s);
-d=qw(this,a,this.P,c,d,e);this.c=new ii(a,b,c,this.j,d,this.oa,this.B);this.Z=this.g;w(this.c,"change",this.o,this);return this.c};k.Vm=function(){return this.B};
-function qw(a,b,c,d,e,f){ha(void 0!==a.l,9);f[a.u?"CRS":"SRS"]=e.eb;"STYLES"in a.i||(f.STYLES="");if(1!=d)switch(a.fa){case "geoserver":d=90*d+.5|0;f.FORMAT_OPTIONS="FORMAT_OPTIONS"in f?f.FORMAT_OPTIONS+(";dpi:"+d):"dpi:"+d;break;case "mapserver":f.MAP_RESOLUTION=90*d;break;case "carmentaserver":case "qgis":f.DPI=90*d;break;default:ha(!1,8)}f.WIDTH=c[0];f.HEIGHT=c[1];c=e.b;var g;a.u&&"ne"==c.substr(0,2)?g=[b[1],b[0],b[3],b[2]]:g=b;f.BBOX=g.join(",");return jw(a.l,f)}k.Xm=function(){return this.l};
-k.Ym=function(a){this.c=null;this.B=a;this.v()};k.Zm=function(a){a!=this.l&&(this.l=a,this.c=null,this.v())};k.$m=function(a){ua(this.i,a);ow(this);this.c=null;this.v()};function ow(a){a.u=0<=qb(a.i.VERSION||"1.3.0")};function rw(a){a=a||{};var b;void 0!==a.attributions?b=a.attributions:b=[sw];dw.call(this,{attributions:b,cacheSize:a.cacheSize,crossOrigin:void 0!==a.crossOrigin?a.crossOrigin:"anonymous",opaque:void 0!==a.opaque?a.opaque:!0,maxZoom:void 0!==a.maxZoom?a.maxZoom:19,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:a.wrapX})}v(rw,dw);var sw=new le({html:'&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'});(function(){var a={},b={ja:a};(function(c){if("object"===typeof a&&"undefined"!==typeof b)b.ja=c();else{var d;"undefined"!==typeof window?d=window:"undefined"!==typeof global?d=global:"undefined"!==typeof self?d=self:d=this;d.Cp=c()}})(function(){return function d(a,b,g){function h(m,p){if(!b[m]){if(!a[m]){var q="function"==typeof require&&require;if(!p&&q)return q(m,!0);if(l)return l(m,!0);q=Error("Cannot find module '"+m+"'");throw q.code="MODULE_NOT_FOUND",q;}q=b[m]={ja:{}};a[m][0].call(q.ja,function(b){var d=
-a[m][1][b];return h(d?d:b)},q,q.ja,d,a,b,g)}return b[m].ja}for(var l="function"==typeof require&&require,m=0;m<g.length;m++)h(g[m]);return h}({1:[function(a,b,f){a=a("./processor");f.Pi=a},{"./processor":2}],2:[function(a,b){function f(a){var b=!0;try{new ImageData(10,10)}catch(d){b=!1}return function(d){var e=d.buffers,f=d.meta,g=d.width,h=d.height,l=e.length,m=e[0].byteLength;if(d.imageOps){m=Array(l);for(d=0;d<l;++d){var K=m,V=d,Z;Z=new Uint8ClampedArray(e[d]);var Ra=g,F=h;Z=b?new ImageData(Z,
-Ra,F):{data:Z,width:Ra,height:F};K[V]=Z}g=a(m,f).data}else{g=new Uint8ClampedArray(m);h=Array(l);K=Array(l);for(d=0;d<l;++d)h[d]=new Uint8ClampedArray(e[d]),K[d]=[0,0,0,0];for(e=0;e<m;e+=4){for(d=0;d<l;++d)V=h[d],K[d][0]=V[e],K[d][1]=V[e+1],K[d][2]=V[e+2],K[d][3]=V[e+3];d=a(K,f);g[e]=d[0];g[e+1]=d[1];g[e+2]=d[2];g[e+3]=d[3]}}return g.buffer}}function g(a,b){var d=Object.keys(a.lib||{}).map(function(b){return"var "+b+" = "+a.lib[b].toString()+";"}).concat(["var __minion__ = ("+f.toString()+")(",a.operation.toString(),
-");",'self.addEventListener("message", function(event) {',"  var buffer = __minion__(event.data);","  self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);","});"]),d=URL.createObjectURL(new Blob(d,{type:"text/javascript"})),d=new Worker(d);d.addEventListener("message",b);return d}function h(a,b){var d=f(a.operation);return{postMessage:function(a){setTimeout(function(){b({data:{buffer:d(a),meta:a.meta}})},0)}}}function l(a){this.Oe=!!a.Yk;var b;0===a.threads?b=0:this.Oe?b=1:b=a.threads||
-1;var d=[];if(b)for(var e=0;e<b;++e)d[e]=g(a,this.eg.bind(this,e));else d[0]=h(a,this.eg.bind(this,0));this.Nd=d;this.bd=[];this.cj=a.jo||Infinity;this.Ld=0;this.Hc={};this.Pe=null}var m=a("./util").rl;l.prototype.ho=function(a,b,d){this.aj({xc:a,Pg:b,mg:d});this.bg()};l.prototype.aj=function(a){for(this.bd.push(a);this.bd.length>this.cj;)this.bd.shift().mg(null,null)};l.prototype.bg=function(){if(0===this.Ld&&0<this.bd.length){var a=this.Pe=this.bd.shift(),b=a.xc[0].width,d=a.xc[0].height,e=a.xc.map(function(a){return a.data.buffer}),
-f=this.Nd.length;this.Ld=f;if(1===f)this.Nd[0].postMessage({buffers:e,meta:a.Pg,imageOps:this.Oe,width:b,height:d},e);else for(var g=4*Math.ceil(a.xc[0].data.length/4/f),h=0;h<f;++h){for(var l=h*g,m=[],K=0,V=e.length;K<V;++K)m.push(e[h].slice(l,l+g));this.Nd[h].postMessage({buffers:m,meta:a.Pg,imageOps:this.Oe,width:b,height:d},m)}}};l.prototype.eg=function(a,b){this.Ap||(this.Hc[a]=b.data,--this.Ld,0===this.Ld&&this.dj())};l.prototype.dj=function(){var a=this.Pe,b=this.Nd.length,d,e;if(1===b)d=new Uint8ClampedArray(this.Hc[0].buffer),
-e=this.Hc[0].meta;else{var f=a.xc[0].data.length;d=new Uint8ClampedArray(f);e=Array(f);for(var f=4*Math.ceil(f/4/b),g=0;g<b;++g){var h=g*f;d.set(new Uint8ClampedArray(this.Hc[g].buffer),h);e[g]=this.Hc[g].meta}}this.Pe=null;this.Hc={};a.mg(null,m(d,a.xc[0].width,a.xc[0].height),e);this.bg()};b.ja=l},{"./util":3}],3:[function(a,b,f){var g=!0;try{new ImageData(10,10)}catch(l){g=!1}var h=document.createElement("canvas").getContext("2d");f.rl=function(a,b,d){if(g)return new ImageData(a,b,d);b=h.createImageData(b,
-d);b.data.set(a);return b}},{}]},{},[1])(1)});pr=b.ja})();function tw(a){this.B=null;this.Aa=void 0!==a.operationType?a.operationType:"pixel";this.La=void 0!==a.threads?a.threads:1;this.c=uw(a.sources);for(var b=0,c=this.c.length;b<c;++b)w(this.c[b],"change",this.v,this);this.i=De();this.fa=new pg(function(){return 1},this.v.bind(this));for(var b=vw(this.c),c={},d=0,e=b.length;d<e;++d)c[ea(b[d].layer)]=b[d];this.l=this.s=null;this.Z={animate:!1,attributions:{},coordinateToPixelTransform:Oh(),extent:null,focus:null,index:0,layerStates:c,layerStatesArray:b,
-logos:{},pixelRatio:1,pixelToCoordinateTransform:Oh(),postRenderFunctions:[],size:[0,0],skippedFeatureUids:{},tileQueue:this.fa,time:Date.now(),usedTiles:{},viewState:{rotation:0},viewHints:[],wantedTiles:{}};Wj.call(this,{});void 0!==a.operation&&this.u(a.operation,a.lib)}v(tw,Wj);tw.prototype.u=function(a,b){this.B=new pr.Pi({operation:a,Yk:"image"===this.Aa,jo:1,lib:b,threads:this.La});this.v()};function ww(a,b,c){var d=a.s;return!d||a.g!==d.Mo||c!==d.resolution||!Pb(b,d.extent)}
-tw.prototype.W=function(a,b,c,d){c=!0;for(var e,f=0,g=this.c.length;f<g;++f)if(e=this.c[f].a.ga(),"ready"!==e.U()){c=!1;break}if(!c)return null;a=a.slice();if(!ww(this,a,b))return this.l;c=this.i.canvas;e=Math.round(Zb(a)/b);f=Math.round($b(a)/b);if(e!==c.width||f!==c.height)c.width=e,c.height=f;e=ua({},this.Z);e.viewState=ua({},e.viewState);var f=ac(a),g=Math.round(Zb(a)/b),h=Math.round($b(a)/b);e.extent=a;e.focus=ac(a);e.size[0]=g;e.size[1]=h;g=e.viewState;g.center=f;g.projection=d;g.resolution=
-b;this.l=d=new Ij(a,b,1,this.j,c,this.P.bind(this,e));this.s={extent:a,resolution:b,Mo:this.g};return d};
-tw.prototype.P=function(a,b){for(var c=this.c.length,d=Array(c),e=0;e<c;++e){var f;f=this.c[e];var g=a,h=a.layerStatesArray[e];if(f.j(g,h)){var l=g.size[0],m=g.size[1];if(xw){var n=xw.canvas;n.width!==l||n.height!==m?xw=De(l,m):xw.clearRect(0,0,l,m)}else xw=De(l,m);f.i(g,h,xw);f=xw.getImageData(0,0,l,m)}else f=null;if(f)d[e]=f;else return}c={};this.b(new yw(zw,a,c));this.B.ho(d,c,this.oa.bind(this,a,b));qg(a.tileQueue,16,16)};
-tw.prototype.oa=function(a,b,c,d,e){c?b(c):d&&(this.b(new yw(Aw,a,e)),ww(this,a.extent,a.viewState.resolution/a.pixelRatio)||this.i.putImageData(d,0,0),b(null))};var xw=null;function vw(a){return a.map(function(a){return wh(a.a)})}function uw(a){for(var b=a.length,c=Array(b),d=0;d<b;++d){var e=d,f=a[d],g=null;f instanceof Uv?(f=new D({source:f}),g=new hk(f)):f instanceof Wj&&(f=new di({source:f}),g=new gk(f));c[e]=g}return c}
-function yw(a,b,c){Ka.call(this,a);this.extent=b.extent;this.resolution=b.viewState.resolution/b.pixelRatio;this.data=c}v(yw,Ka);var zw="beforeoperations",Aw="afteroperations";function Bw(a){var b=a.layer.indexOf("-"),b=Cw[-1==b?a.layer:a.layer.slice(0,b)],c=Dw[a.layer];dw.call(this,{attributions:Ew,cacheSize:a.cacheSize,crossOrigin:"anonymous",maxZoom:void 0!=a.maxZoom?a.maxZoom:b.maxZoom,minZoom:void 0!=a.minZoom?a.minZoom:b.minZoom,opaque:c.opaque,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileLoadFunction:a.tileLoadFunction,url:void 0!==a.url?a.url:"https://stamen-tiles-{a-d}.a.ssl.fastly.net/"+a.layer+"/{z}/{x}/{y}."+c.wb})}v(Bw,dw);
-var Ew=[new le({html:'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'}),sw],Dw={terrain:{wb:"jpg",opaque:!0},"terrain-background":{wb:"jpg",opaque:!0},"terrain-labels":{wb:"png",opaque:!1},"terrain-lines":{wb:"png",opaque:!1},"toner-background":{wb:"png",opaque:!0},toner:{wb:"png",opaque:!0},"toner-hybrid":{wb:"png",opaque:!1},"toner-labels":{wb:"png",opaque:!1},"toner-lines":{wb:"png",opaque:!1},"toner-lite":{wb:"png",
-opaque:!0},watercolor:{wb:"jpg",opaque:!0}},Cw={terrain:{minZoom:4,maxZoom:18},toner:{minZoom:0,maxZoom:20},watercolor:{minZoom:1,maxZoom:16}};function Fw(a){a=a||{};W.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.c=a.params||{};this.o=Bb();Vv(this,Gw(this))}v(Fw,W);function Gw(a){var b=0,c=[],d;for(d in a.c)c[b++]=d+"-"+a.c[d];return c.join("/")}Fw.prototype.u=function(){return this.c};
-Fw.prototype.gb=function(a){return a};
-Fw.prototype.sc=function(a,b,c){var d=this.tileGrid;d||(d=this.pb(c));if(!(d.b.length<=a[0])){var e=d.Ia(a,this.o),f=Wd(d.Va(a[0]),this.l);1!=b&&(f=Vd(f,b,this.l));d={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};ua(d,this.c);var g=this.urls;g?(c=c.eb.split(":").pop(),d.SIZE=f[0]+","+f[1],d.BBOX=e.join(","),d.BBOXSR=c,d.IMAGESR=c,d.DPI=Math.round(d.DPI?d.DPI*b:90*b),a=1==g.length?g[0]:g[oa((a[1]<<a[0])+a[2],g.length)],b=a.replace(/MapServer\/?$/,"MapServer/export").replace(/ImageServer\/?$/,"ImageServer/exportImage"),
-b==a&&ha(!1,50),d=jw(b,d)):d=void 0;return d}};Fw.prototype.C=function(a){ua(this.c,a);Vv(this,Gw(this))};function Hw(a){Uv.call(this,{opaque:!1,projection:a.projection,tileGrid:a.tileGrid,wrapX:void 0!==a.wrapX?a.wrapX:!0})}v(Hw,Uv);Hw.prototype.vc=function(a,b,c){var d=this.Fb(a,b,c);if(this.a.b.hasOwnProperty(d))return this.a.get(d);var e=Wd(this.tileGrid.Va(a));a=[a,b,c];b=(b=Wv(this,a))?Wv(this,b).toString():"";e=new Iw(a,e,b);this.a.set(d,e);return e};function Iw(a,b,c){gg.call(this,a,jg);this.j=b;this.c=c;this.g=null}v(Iw,gg);
-Iw.prototype.qb=function(){if(this.g)return this.g;var a=this.j,b=De(a[0],a[1]);b.strokeStyle="black";b.strokeRect(.5,.5,a[0]+.5,a[1]+.5);b.fillStyle="black";b.textAlign="center";b.textBaseline="middle";b.font="24px sans-serif";b.fillText(this.c,a[0]/2,a[1]/2);return this.g=b.canvas};function Jw(a){this.c=null;W.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,projection:qc("EPSG:3857"),reprojectionErrorThreshold:a.reprojectionErrorThreshold,state:"loading",tileLoadFunction:a.tileLoadFunction,wrapX:void 0!==a.wrapX?a.wrapX:!0});if(a.jsonp)Lv(a.url,this.oh.bind(this),this.me.bind(this));else{var b=new XMLHttpRequest;b.addEventListener("load",this.bn.bind(this));b.addEventListener("error",this.an.bind(this));b.open("GET",a.url);b.send()}}
-v(Jw,W);k=Jw.prototype;k.bn=function(a){a=a.target;if(!a.status||200<=a.status&&300>a.status){var b;try{b=JSON.parse(a.responseText)}catch(c){this.me();return}this.oh(b)}else this.me()};k.an=function(){this.me()};k.nk=function(){return this.c};
-k.oh=function(a){var b=qc("EPSG:4326"),c=this.f,d;if(void 0!==a.bounds){var e=tc(b,c);d=fc(a.bounds,e)}var f=a.minzoom||0,e=a.maxzoom||22;this.tileGrid=c=ke({extent:ie(c),maxZoom:e,minZoom:f});this.tileUrlFunction=Ov(a.tiles,c);if(void 0!==a.attribution&&!this.j){b=void 0!==d?d:b.D();d={};for(var g;f<=e;++f)g=f.toString(),d[g]=[be(c,b,f)];this.qa([new le({html:a.attribution,tileRanges:d})])}this.c=a;Vj(this,"ready")};k.me=function(){Vj(this,"error")};function Kw(a){Uv.call(this,{projection:qc("EPSG:3857"),state:"loading"});this.s=void 0!==a.preemptive?a.preemptive:!0;this.o=Qv;this.i=void 0;this.c=a.jsonp||!1;if(a.url)if(this.c)Lv(a.url,this.zf.bind(this),this.ne.bind(this));else{var b=new XMLHttpRequest;b.addEventListener("load",this.fn.bind(this));b.addEventListener("error",this.en.bind(this));b.open("GET",a.url);b.send()}else a.tileJSON?this.zf(a.tileJSON):ha(!1,51)}v(Kw,Uv);k=Kw.prototype;
-k.fn=function(a){a=a.target;if(!a.status||200<=a.status&&300>a.status){var b;try{b=JSON.parse(a.responseText)}catch(c){this.ne();return}this.zf(b)}else this.ne()};k.en=function(){this.ne()};k.kk=function(){return this.i};k.wj=function(a,b,c,d,e){this.tileGrid?(b=this.tileGrid.Yd(a,b),Lw(this.vc(b[0],b[1],b[2],1,this.f),a,c,d,e)):!0===e?setTimeout(function(){c.call(d,null)},0):c.call(d,null)};k.ne=function(){Vj(this,"error")};
-k.zf=function(a){var b=qc("EPSG:4326"),c=this.f,d;if(void 0!==a.bounds){var e=tc(b,c);d=fc(a.bounds,e)}var f=a.minzoom||0,e=a.maxzoom||22;this.tileGrid=c=ke({extent:ie(c),maxZoom:e,minZoom:f});this.i=a.template;var g=a.grids;if(g){this.o=Ov(g,c);if(void 0!==a.attribution){b=void 0!==d?d:b.D();for(d={};f<=e;++f)g=f.toString(),d[g]=[be(c,b,f)];this.qa([new le({html:a.attribution,tileRanges:d})])}Vj(this,"ready")}else Vj(this,"error")};
-k.vc=function(a,b,c,d,e){var f=this.Fb(a,b,c);if(this.a.b.hasOwnProperty(f))return this.a.get(f);a=[a,b,c];b=Wv(this,a,e);d=this.o(b,d,e);d=new Mw(a,void 0!==d?0:4,void 0!==d?d:"",this.tileGrid.Ia(a),this.s,this.c);this.a.set(f,d);return d};k.Vf=function(a,b,c){a=this.Fb(a,b,c);this.a.b.hasOwnProperty(a)&&this.a.get(a)};function Mw(a,b,c,d,e,f){gg.call(this,a,b);this.s=c;this.g=d;this.u=e;this.c=this.o=this.j=null;this.T=f}v(Mw,gg);k=Mw.prototype;k.qb=function(){return null};
-k.getData=function(a){if(!this.j||!this.o)return null;var b=this.j[Math.floor((1-(a[1]-this.g[1])/(this.g[3]-this.g[1]))*this.j.length)];if("string"!==typeof b)return null;b=b.charCodeAt(Math.floor((a[0]-this.g[0])/(this.g[2]-this.g[0])*b.length));93<=b&&b--;35<=b&&b--;b-=32;a=null;b in this.o&&(b=this.o[b],this.c&&b in this.c?a=this.c[b]:a=b);return a};
-function Lw(a,b,c,d,e){0==a.state&&!0===e?(Ea(a,"change",function(){c.call(d,this.getData(b))},a),Nw(a)):!0===e?setTimeout(function(){c.call(d,this.getData(b))}.bind(a),0):c.call(d,a.getData(b))}k.Xa=function(){return this.s};k.$d=function(){this.state=3;hg(this)};k.ph=function(a){this.j=a.grid;this.o=a.keys;this.c=a.data;this.state=4;hg(this)};
-function Nw(a){if(0==a.state)if(a.state=1,a.T)Lv(a.s,a.ph.bind(a),a.$d.bind(a));else{var b=new XMLHttpRequest;b.addEventListener("load",a.dn.bind(a));b.addEventListener("error",a.cn.bind(a));b.open("GET",a.s);b.send()}}k.dn=function(a){a=a.target;if(!a.status||200<=a.status&&300>a.status){var b;try{b=JSON.parse(a.responseText)}catch(c){this.$d();return}this.ph(b)}else this.$d()};k.cn=function(){this.$d()};k.load=function(){this.u&&Nw(this)};function Ow(a){a=a||{};var b=a.params||{};W.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,opaque:!("TRANSPARENT"in b?b.TRANSPARENT:1),projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction,url:a.url,urls:a.urls,wrapX:void 0!==a.wrapX?a.wrapX:!0});this.u=void 0!==a.gutter?a.gutter:0;this.c=b;this.o=!0;this.C=a.serverType;this.W=void 0!==a.hidpi?a.hidpi:!0;this.P="";
-Pw(this);this.Z=Bb();Qw(this);Vv(this,Rw(this))}v(Ow,W);k=Ow.prototype;
-k.gn=function(a,b,c,d){c=qc(c);var e=this.tileGrid;e||(e=this.pb(c));b=e.Yd(a,b);if(!(e.b.length<=b[0])){var f=e.Ga(b[0]),g=e.Ia(b,this.Z),e=Wd(e.Va(b[0]),this.l),h=this.u;0!==h&&(e=Ud(e,h,this.l),g=Db(g,f*h,g));h={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.c.LAYERS};ua(h,this.c,d);d=Math.floor((g[3]-a[1])/f);h[this.o?"I":"X"]=Math.floor((a[0]-g[0])/f);h[this.o?"J":"Y"]=d;return Sw(this,b,e,g,1,c,h)}};k.ef=function(){return this.u};
-k.Fb=function(a,b,c){return this.P+W.prototype.Fb.call(this,a,b,c)};k.hn=function(){return this.c};
-function Sw(a,b,c,d,e,f,g){var h=a.urls;if(h){g.WIDTH=c[0];g.HEIGHT=c[1];g[a.o?"CRS":"SRS"]=f.eb;"STYLES"in a.c||(g.STYLES="");if(1!=e)switch(a.C){case "geoserver":c=90*e+.5|0;g.FORMAT_OPTIONS="FORMAT_OPTIONS"in g?g.FORMAT_OPTIONS+(";dpi:"+c):"dpi:"+c;break;case "mapserver":g.MAP_RESOLUTION=90*e;break;case "carmentaserver":case "qgis":g.DPI=90*e;break;default:ha(!1,52)}f=f.b;a.o&&"ne"==f.substr(0,2)&&(a=d[0],d[0]=d[1],d[1]=a,a=d[2],d[2]=d[3],d[3]=a);g.BBOX=d.join(",");return jw(1==h.length?h[0]:h[oa((b[1]<<
-b[0])+b[2],h.length)],g)}}k.gb=function(a){return this.W&&void 0!==this.C?a:1};function Pw(a){var b=0,c=[];if(a.urls){var d,e;d=0;for(e=a.urls.length;d<e;++d)c[b++]=a.urls[d]}a.P=c.join("#")}function Rw(a){var b=0,c=[],d;for(d in a.c)c[b++]=d+"-"+a.c[d];return c.join("/")}
-k.sc=function(a,b,c){var d=this.tileGrid;d||(d=this.pb(c));if(!(d.b.length<=a[0])){1==b||this.W&&void 0!==this.C||(b=1);var e=d.Ga(a[0]),f=d.Ia(a,this.Z),d=Wd(d.Va(a[0]),this.l),g=this.u;0!==g&&(d=Ud(d,g,this.l),f=Db(f,e*g,f));1!=b&&(d=Vd(d,b,this.l));e={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};ua(e,this.c);return Sw(this,a,d,f,b,c,e)}};k.Ua=function(a){W.prototype.Ua.call(this,a);Pw(this)};k.jn=function(a){ua(this.c,a);Pw(this);Qw(this);Vv(this,Rw(this))};
-function Qw(a){a.o=0<=qb(a.c.VERSION||"1.3.0")};function Tw(a,b,c,d,e){gg.call(this,a,b);this.g=De();this.j=d;this.c=null;this.f={jd:!1,Qf:null,Rh:-1,Rf:-1,Ad:null,li:[]};this.T=e;this.o=c}v(Tw,gg);k=Tw.prototype;k.qb=function(){return-1==this.f.Rf?null:this.g.canvas};k.Il=function(){return this.j};k.Xa=function(){return this.o};k.load=function(){0==this.state&&(this.state=1,hg(this),this.T(this,this.o),this.s(null,NaN,null))};k.Wh=function(a){this.c=a;this.state=jg;hg(this)};k.uf=function(a){this.l=a};k.bi=function(a){this.s=a};function Uw(a){Yv.call(this,{attributions:a.attributions,cacheSize:void 0!==a.cacheSize?a.cacheSize:128,extent:a.extent,logo:a.logo,opaque:!1,projection:a.projection,state:a.state,tileGrid:a.tileGrid,tileLoadFunction:a.tileLoadFunction?a.tileLoadFunction:Vw,tileUrlFunction:a.tileUrlFunction,tilePixelRatio:a.tilePixelRatio,url:a.url,urls:a.urls,wrapX:void 0===a.wrapX?!0:a.wrapX});this.c=a.format?a.format:null;this.i=void 0==a.overlaps?!0:a.overlaps;this.tileClass=a.tileClass?a.tileClass:Tw}v(Uw,Yv);
-Uw.prototype.vc=function(a,b,c,d,e){var f=this.Fb(a,b,c);if(this.a.b.hasOwnProperty(f))return this.a.get(f);a=[a,b,c];d=(b=Wv(this,a,e))?this.tileUrlFunction(b,d,e):void 0;d=new this.tileClass(a,void 0!==d?0:4,void 0!==d?d:"",this.c,this.tileLoadFunction);w(d,"change",this.rh,this);this.a.set(f,d);return d};Uw.prototype.gb=function(a){return void 0==a?Yv.prototype.gb.call(this,a):a};Uw.prototype.kf=function(a,b){var c=Wd(this.tileGrid.Va(a));return[Math.round(c[0]*b),Math.round(c[1]*b)]};
-function Vw(a,b){a.bi(Om(b,a.j))};function Ww(a){this.l=a.matrixIds;Zd.call(this,{extent:a.extent,origin:a.origin,origins:a.origins,resolutions:a.resolutions,tileSize:a.tileSize,tileSizes:a.tileSizes,sizes:a.sizes})}v(Ww,Zd);Ww.prototype.o=function(){return this.l};
-function Xw(a,b){var c=[],d=[],e=[],f=[],g=[],h;h=qc(a.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var l=h.dc(),m="ne"==h.b.substr(0,2);a.TileMatrix.sort(function(a,b){return b.ScaleDenominator-a.ScaleDenominator});a.TileMatrix.forEach(function(a){d.push(a.Identifier);var b=2.8E-4*a.ScaleDenominator/l,h=a.TileWidth,t=a.TileHeight;m?e.push([a.TopLeftCorner[1],a.TopLeftCorner[0]]):e.push(a.TopLeftCorner);c.push(b);f.push(h==t?h:[h,t]);g.push([a.MatrixWidth,-a.MatrixHeight])});
-return new Ww({extent:b,origins:e,resolutions:c,matrixIds:d,tileSizes:f,sizes:g})};function Y(a){function b(a){a=d==Yw?jw(a,f):a.replace(/\{(\w+?)\}/g,function(a,b){return b.toLowerCase()in f?f[b.toLowerCase()]:a});return function(b){if(b){var c={TileMatrix:e.l[b[0]],TileCol:b[1],TileRow:-b[2]-1};ua(c,g);b=a;return b=d==Yw?jw(b,c):b.replace(/\{(\w+?)\}/g,function(a,b){return c[b]})}}}this.Z=void 0!==a.version?a.version:"1.0.0";this.u=void 0!==a.format?a.format:"image/jpeg";this.c=void 0!==a.dimensions?a.dimensions:{};this.C=a.layer;this.o=a.matrixSet;this.P=a.style;var c=a.urls;
-void 0===c&&void 0!==a.url&&(c=Rv(a.url));var d=this.W=void 0!==a.requestEncoding?a.requestEncoding:Yw,e=a.tileGrid,f={layer:this.C,style:this.P,tilematrixset:this.o};d==Yw&&ua(f,{Service:"WMTS",Request:"GetTile",Version:this.Z,Format:this.u});var g=this.c,h=c&&0<c.length?Pv(c.map(b)):Qv;W.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,projection:a.projection,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileClass:a.tileClass,tileGrid:e,
-tileLoadFunction:a.tileLoadFunction,tilePixelRatio:a.tilePixelRatio,tileUrlFunction:h,urls:c,wrapX:void 0!==a.wrapX?a.wrapX:!1});Vv(this,Zw(this))}v(Y,W);k=Y.prototype;k.Jj=function(){return this.c};k.kn=function(){return this.u};k.ln=function(){return this.C};k.Wj=function(){return this.o};k.ik=function(){return this.W};k.mn=function(){return this.P};k.qk=function(){return this.Z};function Zw(a){var b=0,c=[],d;for(d in a.c)c[b++]=d+"-"+a.c[d];return c.join("/")}
-k.hp=function(a){ua(this.c,a);Vv(this,Zw(this))};var Yw="KVP";function $w(a){a=a||{};var b=a.size,c=b[0],d=b[1],e=[],f=256;switch(void 0!==a.tierSizeCalculation?a.tierSizeCalculation:ax){case ax:for(;c>f||d>f;)e.push([Math.ceil(c/f),Math.ceil(d/f)]),f+=f;break;case bx:for(;c>f||d>f;)e.push([Math.ceil(c/f),Math.ceil(d/f)]),c>>=1,d>>=1;break;default:ha(!1,53)}e.push([1,1]);e.reverse();for(var f=[1],g=[0],d=1,c=e.length;d<c;d++)f.push(1<<d),g.push(e[d-1][0]*e[d-1][1]+g[d-1]);f.reverse();var b=[0,-b[1],b[0],0],b=new Zd({extent:b,origin:Wb(b),resolutions:f}),h=a.url;
-W.call(this,{attributions:a.attributions,cacheSize:a.cacheSize,crossOrigin:a.crossOrigin,logo:a.logo,reprojectionErrorThreshold:a.reprojectionErrorThreshold,tileClass:cx,tileGrid:b,tileUrlFunction:function(a){if(a){var b=a[0],c=a[1];a=-a[2]-1;return h+"TileGroup"+((c+a*e[b][0]+g[b])/256|0)+"/"+b+"-"+c+"-"+a+".jpg"}}})}v($w,W);function cx(a,b,c,d,e){Rt.call(this,a,b,c,d,e);this.c=null}v(cx,Rt);
-cx.prototype.qb=function(){if(this.c)return this.c;var a=Rt.prototype.qb.call(this);if(this.state==jg){if(256==a.width&&256==a.height)return this.c=a;var b=De(256,256);b.drawImage(a,0,0);return this.c=b.canvas}return a};var ax="default",bx="truncated";function dx(a,b){this.b=b;this.a=[{x:0,y:0,width:a,height:a}];this.f={};this.g=De(a,a);this.c=this.g.canvas}dx.prototype.get=function(a){return this.f[a]||null};
-dx.prototype.add=function(a,b,c,d,e){var f,g,h;g=0;for(h=this.a.length;g<h;++g)if(f=this.a[g],f.width>=b+this.b&&f.height>=c+this.b)return h={offsetX:f.x+this.b,offsetY:f.y+this.b,image:this.c},this.f[a]=h,d.call(e,this.g,f.x+this.b,f.y+this.b),a=g,b+=this.b,d=c+this.b,f.width-b>f.height-d?(c={x:f.x+b,y:f.y,width:f.width-b,height:f.height},b={x:f.x,y:f.y+d,width:b,height:f.height-d},ex(this,a,c,b)):(c={x:f.x+b,y:f.y,width:f.width-b,height:d},b={x:f.x,y:f.y+d,width:f.width,height:f.height-d},ex(this,
-a,c,b)),h;return null};function ex(a,b,c,d){b=[b,1];0<c.width&&0<c.height&&b.push(c);0<d.width&&0<d.height&&b.push(d);a.a.splice.apply(a.a,b)};function fx(a){a=a||{};this.a=void 0!==a.initialSize?a.initialSize:256;this.g=void 0!==a.maxSize?a.maxSize:void 0!==ba?ba:2048;this.b=void 0!==a.space?a.space:1;this.c=[new dx(this.a,this.b)];this.f=this.a;this.i=[new dx(this.f,this.b)]}fx.prototype.add=function(a,b,c,d,e,f){if(b+this.b>this.g||c+this.b>this.g)return null;d=gx(this,!1,a,b,c,d,f);if(!d)return null;a=gx(this,!0,a,b,c,void 0!==e?e:da,f);return{offsetX:d.offsetX,offsetY:d.offsetY,image:d.image,de:a.image}};
-function gx(a,b,c,d,e,f,g){var h=b?a.i:a.c,l,m,n;m=0;for(n=h.length;m<n;++m){l=h[m];if(l=l.add(c,d,e,f,g))return l;l||m!==n-1||(b?(l=Math.min(2*a.f,a.g),a.f=l):(l=Math.min(2*a.a,a.g),a.a=l),l=new dx(l,a.b),h.push(l),++n)}return null};function hx(a){this.B=this.C=this.i=null;this.j=void 0!==a.fill?a.fill:null;this.za=[0,0];this.b=a.points;this.g=void 0!==a.radius?a.radius:a.radius1;this.f=void 0!==a.radius2?a.radius2:this.g;this.s=void 0!==a.angle?a.angle:0;this.a=void 0!==a.stroke?a.stroke:null;this.na=this.P=this.G=null;var b=this.S=a.atlasManager,c="",d="",e=0,f=null,g,h=0;this.a&&(g=Ce(this.a.a),h=this.a.f,void 0===h&&(h=1),f=this.a.g,hf||(f=null),d=this.a.i,void 0===d&&(d="round"),c=this.a.c,void 0===c&&(c="round"),e=this.a.j,
-void 0===e&&(e=10));var l=2*(this.g+h)+1,c={strokeStyle:g,Dd:h,size:l,lineCap:c,lineDash:f,lineJoin:d,miterLimit:e};if(void 0===b){var m=De(l,l);this.C=m.canvas;b=l=this.C.width;this.yh(c,m,0,0);this.j?this.B=this.C:(m=De(c.size,c.size),this.B=m.canvas,this.xh(c,m,0,0))}else l=Math.round(l),(d=!this.j)&&(m=this.xh.bind(this,c)),e=this.a?ui(this.a):"-",f=this.j?vi(this.j):"-",this.i&&e==this.i[1]&&f==this.i[2]&&this.g==this.i[3]&&this.f==this.i[4]&&this.s==this.i[5]&&this.b==this.i[6]||(this.i=["r"+
-e+f+(void 0!==this.g?this.g.toString():"-")+(void 0!==this.f?this.f.toString():"-")+(void 0!==this.s?this.s.toString():"-")+(void 0!==this.b?this.b.toString():"-"),e,f,this.g,this.f,this.s,this.b]),m=b.add(this.i[0],l,l,this.yh.bind(this,c),m),this.C=m.image,this.za=[m.offsetX,m.offsetY],b=m.image.width,this.B=d?m.de:this.C;this.G=[l/2,l/2];this.P=[l,l];this.na=[b,b];ri.call(this,{opacity:1,rotateWithView:void 0!==a.rotateWithView?a.rotateWithView:!1,rotation:void 0!==a.rotation?a.rotation:0,scale:1,
-snapToPixel:void 0!==a.snapToPixel?a.snapToPixel:!0})}v(hx,ri);k=hx.prototype;k.clone=function(){var a=new hx({fill:this.j?this.j.clone():void 0,points:this.f!==this.g?this.b/2:this.b,radius:this.g,radius2:this.f,angle:this.s,snapToPixel:this.u,stroke:this.a?this.a.clone():void 0,rotation:this.o,rotateWithView:this.T,atlasManager:this.S});a.Rc(this.l);a.Sc(this.c);return a};k.cc=function(){return this.G};k.tn=function(){return this.s};k.vn=function(){return this.j};k.pe=function(){return this.B};
-k.Tb=function(){return this.C};k.md=function(){return this.na};k.vd=function(){return li};k.jc=function(){return this.za};k.wn=function(){return this.b};k.xn=function(){return this.g};k.hk=function(){return this.f};k.Gb=function(){return this.P};k.yn=function(){return this.a};k.pf=da;k.load=da;k.Uf=da;
-k.yh=function(a,b,c,d){var e;b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.f!==this.g&&(this.b*=2);for(c=0;c<=this.b;c++)d=2*c*Math.PI/this.b-Math.PI/2+this.s,e=0===c%2?this.g:this.f,b.lineTo(a.size/2+e*Math.cos(d),a.size/2+e*Math.sin(d));this.j&&(b.fillStyle=Ce(this.j.b),b.fill());this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.Dd,a.lineDash&&b.setLineDash(a.lineDash),b.lineCap=a.lineCap,b.lineJoin=a.lineJoin,b.miterLimit=a.miterLimit,b.stroke());b.closePath()};
-k.xh=function(a,b,c,d){b.setTransform(1,0,0,1,0,0);b.translate(c,d);b.beginPath();this.f!==this.g&&(this.b*=2);var e;for(c=0;c<=this.b;c++)e=2*c*Math.PI/this.b-Math.PI/2+this.s,d=0===c%2?this.g:this.f,b.lineTo(a.size/2+d*Math.cos(e),a.size/2+d*Math.sin(e));b.fillStyle=ni;b.fill();this.a&&(b.strokeStyle=a.strokeStyle,b.lineWidth=a.Dd,a.lineDash&&b.setLineDash(a.lineDash),b.stroke());b.closePath()};r("ol.animation.bounce",function(a){var b=a.resolution,c=a.start?a.start:Date.now(),d=void 0!==a.duration?a.duration:1E3,e=a.easing?a.easing:Md;return function(a,g){if(g.time<c)return g.animate=!0,g.viewHints[0]+=1,!0;if(g.time<c+d){var h=e((g.time-c)/d),l=b-g.viewState.resolution;g.animate=!0;g.viewState.resolution+=h*l;g.viewHints[0]+=1;return!0}return!1}});r("ol.animation.pan",Nd);r("ol.animation.rotate",Od);r("ol.animation.zoom",Pd);ga.prototype.code=ga.prototype.code;r("ol.Attribution",le);
-le.prototype.getHTML=le.prototype.g;r("ol.Collection",me);me.prototype.clear=me.prototype.clear;me.prototype.extend=me.prototype.qf;me.prototype.forEach=me.prototype.forEach;me.prototype.getArray=me.prototype.sl;me.prototype.item=me.prototype.item;me.prototype.getLength=me.prototype.yc;me.prototype.insertAt=me.prototype.ee;me.prototype.pop=me.prototype.pop;me.prototype.push=me.prototype.push;me.prototype.remove=me.prototype.remove;me.prototype.removeAt=me.prototype.Nf;me.prototype.setAt=me.prototype.Oo;
-re.prototype.element=re.prototype.element;r("ol.color.asArray",ye);r("ol.color.asString",Ae);r("ol.colorlike.asColorLike",Ce);r("ol.coordinate.add",rb);r("ol.coordinate.createStringXY",function(a){return function(b){return zb(b,a)}});r("ol.coordinate.format",ub);r("ol.coordinate.rotate",wb);r("ol.coordinate.toStringHDMS",function(a,b){return a?tb(a[1],"NS",b)+" "+tb(a[0],"EW",b):""});r("ol.coordinate.toStringXY",zb);r("ol.DeviceOrientation",om);om.prototype.getAlpha=om.prototype.Cj;
-om.prototype.getBeta=om.prototype.Fj;om.prototype.getGamma=om.prototype.Mj;om.prototype.getHeading=om.prototype.tl;om.prototype.getTracking=om.prototype.Sg;om.prototype.setTracking=om.prototype.rf;r("ol.easing.easeIn",Id);r("ol.easing.easeOut",Jd);r("ol.easing.inAndOut",Kd);r("ol.easing.linear",Ld);r("ol.easing.upAndDown",Md);r("ol.extent.boundingExtent",Ab);r("ol.extent.buffer",Db);r("ol.extent.containsCoordinate",Gb);r("ol.extent.containsExtent",Ib);r("ol.extent.containsXY",Hb);
-r("ol.extent.createEmpty",Bb);r("ol.extent.equals",Pb);r("ol.extent.extend",Qb);r("ol.extent.getBottomLeft",Sb);r("ol.extent.getBottomRight",Tb);r("ol.extent.getCenter",ac);r("ol.extent.getHeight",$b);r("ol.extent.getIntersection",cc);r("ol.extent.getSize",function(a){return[a[2]-a[0],a[3]-a[1]]});r("ol.extent.getTopLeft",Wb);r("ol.extent.getTopRight",Vb);r("ol.extent.getWidth",Zb);r("ol.extent.intersects",dc);r("ol.extent.isEmpty",Yb);r("ol.extent.applyTransform",fc);r("ol.Feature",I);
-I.prototype.clone=I.prototype.clone;I.prototype.getGeometry=I.prototype.V;I.prototype.getId=I.prototype.vl;I.prototype.getGeometryName=I.prototype.Oj;I.prototype.getStyle=I.prototype.wl;I.prototype.getStyleFunction=I.prototype.zc;I.prototype.setGeometry=I.prototype.Oa;I.prototype.setStyle=I.prototype.sf;I.prototype.setId=I.prototype.Wb;I.prototype.setGeometryName=I.prototype.Dc;r("ol.featureloader.tile",Om);r("ol.featureloader.xhr",Pm);r("ol.Geolocation",wt);wt.prototype.getAccuracy=wt.prototype.Aj;
-wt.prototype.getAccuracyGeometry=wt.prototype.Bj;wt.prototype.getAltitude=wt.prototype.Dj;wt.prototype.getAltitudeAccuracy=wt.prototype.Ej;wt.prototype.getHeading=wt.prototype.yl;wt.prototype.getPosition=wt.prototype.zl;wt.prototype.getProjection=wt.prototype.Tg;wt.prototype.getSpeed=wt.prototype.jk;wt.prototype.getTracking=wt.prototype.Ug;wt.prototype.getTrackingOptions=wt.prototype.Gg;wt.prototype.setProjection=wt.prototype.Vg;wt.prototype.setTracking=wt.prototype.ge;
-wt.prototype.setTrackingOptions=wt.prototype.ji;r("ol.Graticule",Mt);Mt.prototype.getMap=Mt.prototype.Cl;Mt.prototype.getMeridians=Mt.prototype.Xj;Mt.prototype.getParallels=Mt.prototype.dk;Mt.prototype.setMap=Mt.prototype.setMap;r("ol.has.DEVICE_PIXEL_RATIO",gf);r("ol.has.CANVAS",jf);r("ol.has.DEVICE_ORIENTATION",kf);r("ol.has.GEOLOCATION",lf);r("ol.has.TOUCH",mf);r("ol.has.WEBGL",af);ii.prototype.getImage=ii.prototype.a;ii.prototype.load=ii.prototype.load;Rt.prototype.getImage=Rt.prototype.qb;
-Rt.prototype.load=Rt.prototype.load;r("ol.inherits",v);r("ol.Kinetic",rg);r("ol.loadingstrategy.all",bu);r("ol.loadingstrategy.bbox",function(a){return[a]});r("ol.loadingstrategy.tile",function(a){return function(b,c){var d=a.wc(c),e=be(a,b,d),f=[],d=[d,0,0];for(d[1]=e.ba;d[1]<=e.da;++d[1])for(d[2]=e.ea;d[2]<=e.ha;++d[2])f.push(a.Ia(d));return f}});r("ol.Map",H);H.prototype.addControl=H.prototype.ij;H.prototype.addInteraction=H.prototype.jj;H.prototype.addLayer=H.prototype.gg;
-H.prototype.addOverlay=H.prototype.hg;H.prototype.beforeRender=H.prototype.ab;H.prototype.forEachFeatureAtPixel=H.prototype.Sd;H.prototype.forEachLayerAtPixel=H.prototype.Gl;H.prototype.hasFeatureAtPixel=H.prototype.Xk;H.prototype.getEventCoordinate=H.prototype.Kj;H.prototype.getEventPixel=H.prototype.Ud;H.prototype.getTarget=H.prototype.jf;H.prototype.getTargetElement=H.prototype.uc;H.prototype.getCoordinateFromPixel=H.prototype.Ja;H.prototype.getControls=H.prototype.Ij;H.prototype.getOverlays=H.prototype.bk;
-H.prototype.getOverlayById=H.prototype.ak;H.prototype.getInteractions=H.prototype.Pj;H.prototype.getLayerGroup=H.prototype.tc;H.prototype.getLayers=H.prototype.Wg;H.prototype.getPixelFromCoordinate=H.prototype.Ca;H.prototype.getSize=H.prototype.kb;H.prototype.getView=H.prototype.$;H.prototype.getViewport=H.prototype.rk;H.prototype.renderSync=H.prototype.Ko;H.prototype.render=H.prototype.render;H.prototype.removeControl=H.prototype.Do;H.prototype.removeInteraction=H.prototype.Eo;
-H.prototype.removeLayer=H.prototype.Go;H.prototype.removeOverlay=H.prototype.Ho;H.prototype.setLayerGroup=H.prototype.ai;H.prototype.setSize=H.prototype.Tf;H.prototype.setTarget=H.prototype.Xg;H.prototype.setView=H.prototype.Wo;H.prototype.updateSize=H.prototype.Yc;Tf.prototype.originalEvent=Tf.prototype.originalEvent;Tf.prototype.pixel=Tf.prototype.pixel;Tf.prototype.coordinate=Tf.prototype.coordinate;Tf.prototype.dragging=Tf.prototype.dragging;Ge.prototype.map=Ge.prototype.map;
-Ge.prototype.frameState=Ge.prototype.frameState;Ta.prototype.key=Ta.prototype.key;Ta.prototype.oldValue=Ta.prototype.oldValue;r("ol.Object",Ua);Ua.prototype.get=Ua.prototype.get;Ua.prototype.getKeys=Ua.prototype.O;Ua.prototype.getProperties=Ua.prototype.N;Ua.prototype.set=Ua.prototype.set;Ua.prototype.setProperties=Ua.prototype.H;Ua.prototype.unset=Ua.prototype.R;r("ol.Observable",Pa);r("ol.Observable.unByKey",Qa);Pa.prototype.changed=Pa.prototype.v;Pa.prototype.dispatchEvent=Pa.prototype.b;
-Pa.prototype.getRevision=Pa.prototype.K;Pa.prototype.on=Pa.prototype.I;Pa.prototype.once=Pa.prototype.L;Pa.prototype.un=Pa.prototype.J;Pa.prototype.unByKey=Pa.prototype.M;r("ol.Overlay",Cl);Cl.prototype.getElement=Cl.prototype.Td;Cl.prototype.getId=Cl.prototype.Hl;Cl.prototype.getMap=Cl.prototype.he;Cl.prototype.getOffset=Cl.prototype.Eg;Cl.prototype.getPosition=Cl.prototype.Yg;Cl.prototype.getPositioning=Cl.prototype.Fg;Cl.prototype.setElement=Cl.prototype.Vh;Cl.prototype.setMap=Cl.prototype.setMap;
-Cl.prototype.setOffset=Cl.prototype.ci;Cl.prototype.setPosition=Cl.prototype.tf;Cl.prototype.setPositioning=Cl.prototype.fi;r("ol.render.toContext",function(a,b){var c=a.canvas,d=b?b:{},e=d.pixelRatio||gf;if(d=d.size)c.width=d[0]*e,c.height=d[1]*e,c.style.width=d[0]+"px",c.style.height=d[1]+"px";c=[0,0,c.width,c.height];d=Vh(Oh(),e,e);return new Ki(a,e,c,d,0)});r("ol.size.toSize",Wd);gg.prototype.getTileCoord=gg.prototype.i;gg.prototype.load=gg.prototype.load;Tw.prototype.getFormat=Tw.prototype.Il;
-Tw.prototype.setFeatures=Tw.prototype.Wh;Tw.prototype.setProjection=Tw.prototype.uf;Tw.prototype.setLoader=Tw.prototype.bi;r("ol.View",yd);yd.prototype.constrainCenter=yd.prototype.Qd;yd.prototype.constrainResolution=yd.prototype.constrainResolution;yd.prototype.constrainRotation=yd.prototype.constrainRotation;yd.prototype.getCenter=yd.prototype.bb;yd.prototype.calculateExtent=yd.prototype.Jc;yd.prototype.getMaxResolution=yd.prototype.Jl;yd.prototype.getMinResolution=yd.prototype.Kl;
-yd.prototype.getProjection=yd.prototype.Ll;yd.prototype.getResolution=yd.prototype.Ma;yd.prototype.getResolutions=yd.prototype.Ml;yd.prototype.getRotation=yd.prototype.Pa;yd.prototype.getZoom=yd.prototype.tk;yd.prototype.fit=yd.prototype.$e;yd.prototype.centerOn=yd.prototype.sj;yd.prototype.rotate=yd.prototype.rotate;yd.prototype.setCenter=yd.prototype.rb;yd.prototype.setResolution=yd.prototype.Yb;yd.prototype.setRotation=yd.prototype.ie;yd.prototype.setZoom=yd.prototype.Zo;
-r("ol.xml.getAllTextContent",xm);r("ol.xml.parse",Bm);Ck.prototype.getGL=Ck.prototype.Pn;Ck.prototype.useProgram=Ck.prototype.ve;r("ol.tilegrid.createXYZ",ke);r("ol.tilegrid.TileGrid",Zd);Zd.prototype.forEachTileCoord=Zd.prototype.sg;Zd.prototype.getMaxZoom=Zd.prototype.Cg;Zd.prototype.getMinZoom=Zd.prototype.Dg;Zd.prototype.getOrigin=Zd.prototype.Tc;Zd.prototype.getResolution=Zd.prototype.Ga;Zd.prototype.getResolutions=Zd.prototype.Bh;Zd.prototype.getTileCoordExtent=Zd.prototype.Ia;
-Zd.prototype.getTileCoordForCoordAndResolution=Zd.prototype.Yd;Zd.prototype.getTileCoordForCoordAndZ=Zd.prototype.Zd;Zd.prototype.getTileSize=Zd.prototype.Va;Zd.prototype.getZForResolution=Zd.prototype.wc;r("ol.tilegrid.WMTS",Ww);Ww.prototype.getMatrixIds=Ww.prototype.o;r("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet",Xw);r("ol.style.AtlasManager",fx);r("ol.style.Circle",si);si.prototype.clone=si.prototype.clone;si.prototype.getFill=si.prototype.nn;si.prototype.getImage=si.prototype.Tb;
-si.prototype.getRadius=si.prototype.pn;si.prototype.getStroke=si.prototype.qn;si.prototype.setRadius=si.prototype.rn;r("ol.style.Fill",wi);wi.prototype.clone=wi.prototype.clone;wi.prototype.getColor=wi.prototype.g;wi.prototype.setColor=wi.prototype.f;r("ol.style.Icon",jp);jp.prototype.clone=jp.prototype.clone;jp.prototype.getAnchor=jp.prototype.cc;jp.prototype.getImage=jp.prototype.Tb;jp.prototype.getOrigin=jp.prototype.jc;jp.prototype.getSrc=jp.prototype.sn;jp.prototype.getSize=jp.prototype.Gb;
-jp.prototype.load=jp.prototype.load;r("ol.style.Image",ri);ri.prototype.getOpacity=ri.prototype.qe;ri.prototype.getRotateWithView=ri.prototype.re;ri.prototype.getRotation=ri.prototype.se;ri.prototype.getScale=ri.prototype.te;ri.prototype.getSnapToPixel=ri.prototype.Xd;ri.prototype.setOpacity=ri.prototype.Rc;ri.prototype.setRotation=ri.prototype.ue;ri.prototype.setScale=ri.prototype.Sc;r("ol.style.RegularShape",hx);hx.prototype.clone=hx.prototype.clone;hx.prototype.getAnchor=hx.prototype.cc;
-hx.prototype.getAngle=hx.prototype.tn;hx.prototype.getFill=hx.prototype.vn;hx.prototype.getImage=hx.prototype.Tb;hx.prototype.getOrigin=hx.prototype.jc;hx.prototype.getPoints=hx.prototype.wn;hx.prototype.getRadius=hx.prototype.xn;hx.prototype.getRadius2=hx.prototype.hk;hx.prototype.getSize=hx.prototype.Gb;hx.prototype.getStroke=hx.prototype.yn;r("ol.style.Stroke",xi);xi.prototype.clone=xi.prototype.clone;xi.prototype.getColor=xi.prototype.zn;xi.prototype.getLineCap=xi.prototype.Sj;
-xi.prototype.getLineDash=xi.prototype.An;xi.prototype.getLineJoin=xi.prototype.Tj;xi.prototype.getMiterLimit=xi.prototype.Yj;xi.prototype.getWidth=xi.prototype.Bn;xi.prototype.setColor=xi.prototype.Cn;xi.prototype.setLineCap=xi.prototype.So;xi.prototype.setLineDash=xi.prototype.setLineDash;xi.prototype.setLineJoin=xi.prototype.To;xi.prototype.setMiterLimit=xi.prototype.Uo;xi.prototype.setWidth=xi.prototype.Xo;r("ol.style.Style",yi);yi.prototype.clone=yi.prototype.clone;yi.prototype.getGeometry=yi.prototype.V;
-yi.prototype.getGeometryFunction=yi.prototype.Nj;yi.prototype.getFill=yi.prototype.Dn;yi.prototype.getImage=yi.prototype.En;yi.prototype.getStroke=yi.prototype.Fn;yi.prototype.getText=yi.prototype.Fa;yi.prototype.getZIndex=yi.prototype.Gn;yi.prototype.setGeometry=yi.prototype.zh;yi.prototype.setZIndex=yi.prototype.Hn;r("ol.style.Text",pp);pp.prototype.clone=pp.prototype.clone;pp.prototype.getFont=pp.prototype.Lj;pp.prototype.getOffsetX=pp.prototype.Zj;pp.prototype.getOffsetY=pp.prototype.$j;
-pp.prototype.getFill=pp.prototype.In;pp.prototype.getRotateWithView=pp.prototype.Jn;pp.prototype.getRotation=pp.prototype.Kn;pp.prototype.getScale=pp.prototype.Ln;pp.prototype.getStroke=pp.prototype.Mn;pp.prototype.getText=pp.prototype.Fa;pp.prototype.getTextAlign=pp.prototype.lk;pp.prototype.getTextBaseline=pp.prototype.mk;pp.prototype.setFont=pp.prototype.Yh;pp.prototype.setOffsetX=pp.prototype.di;pp.prototype.setOffsetY=pp.prototype.ei;pp.prototype.setFill=pp.prototype.Xh;
-pp.prototype.setRotation=pp.prototype.Nn;pp.prototype.setScale=pp.prototype.Ah;pp.prototype.setStroke=pp.prototype.gi;pp.prototype.setText=pp.prototype.hi;pp.prototype.setTextAlign=pp.prototype.ii;pp.prototype.setTextBaseline=pp.prototype.Vo;r("ol.Sphere",ic);ic.prototype.geodesicArea=ic.prototype.a;ic.prototype.haversineDistance=ic.prototype.b;r("ol.source.BingMaps",bw);r("ol.source.BingMaps.TOS_ATTRIBUTION",cw);bw.prototype.getApiKey=bw.prototype.P;bw.prototype.getImagerySet=bw.prototype.W;
-r("ol.source.CartoDB",ew);ew.prototype.getConfig=ew.prototype.Hj;ew.prototype.updateConfig=ew.prototype.gp;ew.prototype.setConfig=ew.prototype.Po;r("ol.source.Cluster",X);X.prototype.getSource=X.prototype.ub;X.prototype.setDistance=X.prototype.Jb;r("ol.source.Image",Wj);Yj.prototype.image=Yj.prototype.image;r("ol.source.ImageArcGISRest",kw);kw.prototype.getParams=kw.prototype.Gm;kw.prototype.getImageLoadFunction=kw.prototype.Fm;kw.prototype.getUrl=kw.prototype.Hm;
-kw.prototype.setImageLoadFunction=kw.prototype.Im;kw.prototype.setUrl=kw.prototype.Jm;kw.prototype.updateParams=kw.prototype.Km;r("ol.source.ImageCanvas",dk);r("ol.source.ImageMapGuide",lw);lw.prototype.getParams=lw.prototype.Mm;lw.prototype.getImageLoadFunction=lw.prototype.Lm;lw.prototype.updateParams=lw.prototype.Om;lw.prototype.setImageLoadFunction=lw.prototype.Nm;r("ol.source.ImageStatic",mw);r("ol.source.ImageVector",ek);ek.prototype.getSource=ek.prototype.Pm;ek.prototype.getStyle=ek.prototype.Qm;
-ek.prototype.getStyleFunction=ek.prototype.Rm;ek.prototype.setStyle=ek.prototype.nh;r("ol.source.ImageWMS",nw);nw.prototype.getGetFeatureInfoUrl=nw.prototype.Um;nw.prototype.getParams=nw.prototype.Wm;nw.prototype.getImageLoadFunction=nw.prototype.Vm;nw.prototype.getUrl=nw.prototype.Xm;nw.prototype.setImageLoadFunction=nw.prototype.Ym;nw.prototype.setUrl=nw.prototype.Zm;nw.prototype.updateParams=nw.prototype.$m;r("ol.source.OSM",rw);r("ol.source.OSM.ATTRIBUTION",sw);r("ol.source.Raster",tw);
-tw.prototype.setOperation=tw.prototype.u;yw.prototype.extent=yw.prototype.extent;yw.prototype.resolution=yw.prototype.resolution;yw.prototype.data=yw.prototype.data;r("ol.source.Source",Tj);Tj.prototype.getAttributions=Tj.prototype.va;Tj.prototype.getLogo=Tj.prototype.ua;Tj.prototype.getProjection=Tj.prototype.wa;Tj.prototype.getState=Tj.prototype.U;Tj.prototype.refresh=Tj.prototype.ta;Tj.prototype.setAttributions=Tj.prototype.qa;r("ol.source.Stamen",Bw);r("ol.source.Tile",Uv);
-Uv.prototype.getTileGrid=Uv.prototype.Ra;Xv.prototype.tile=Xv.prototype.tile;r("ol.source.TileArcGISRest",Fw);Fw.prototype.getParams=Fw.prototype.u;Fw.prototype.updateParams=Fw.prototype.C;r("ol.source.TileDebug",Hw);r("ol.source.TileImage",W);W.prototype.setRenderReprojectionEdges=W.prototype.Bb;W.prototype.setTileGridForProjection=W.prototype.Cb;r("ol.source.TileJSON",Jw);Jw.prototype.getTileJSON=Jw.prototype.nk;r("ol.source.TileUTFGrid",Kw);Kw.prototype.getTemplate=Kw.prototype.kk;
-Kw.prototype.forDataAtCoordinateAndResolution=Kw.prototype.wj;r("ol.source.TileWMS",Ow);Ow.prototype.getGetFeatureInfoUrl=Ow.prototype.gn;Ow.prototype.getParams=Ow.prototype.hn;Ow.prototype.updateParams=Ow.prototype.jn;Yv.prototype.getTileLoadFunction=Yv.prototype.fb;Yv.prototype.getTileUrlFunction=Yv.prototype.hb;Yv.prototype.getUrls=Yv.prototype.ib;Yv.prototype.setTileLoadFunction=Yv.prototype.nb;Yv.prototype.setTileUrlFunction=Yv.prototype.Ta;Yv.prototype.setUrl=Yv.prototype.Ya;
-Yv.prototype.setUrls=Yv.prototype.Ua;r("ol.source.Vector",T);T.prototype.addFeature=T.prototype.cb;T.prototype.addFeatures=T.prototype.Ic;T.prototype.clear=T.prototype.clear;T.prototype.forEachFeature=T.prototype.qg;T.prototype.forEachFeatureInExtent=T.prototype.Kb;T.prototype.forEachFeatureIntersectingExtent=T.prototype.rg;T.prototype.getFeaturesCollection=T.prototype.zg;T.prototype.getFeatures=T.prototype.oe;T.prototype.getFeaturesAtCoordinate=T.prototype.yg;T.prototype.getFeaturesInExtent=T.prototype.bf;
-T.prototype.getClosestFeatureToCoordinate=T.prototype.ug;T.prototype.getExtent=T.prototype.D;T.prototype.getFeatureById=T.prototype.xg;T.prototype.getFormat=T.prototype.sh;T.prototype.getUrl=T.prototype.th;T.prototype.removeFeature=T.prototype.mb;mu.prototype.feature=mu.prototype.feature;r("ol.source.VectorTile",Uw);r("ol.source.WMTS",Y);Y.prototype.getDimensions=Y.prototype.Jj;Y.prototype.getFormat=Y.prototype.kn;Y.prototype.getLayer=Y.prototype.ln;Y.prototype.getMatrixSet=Y.prototype.Wj;
-Y.prototype.getRequestEncoding=Y.prototype.ik;Y.prototype.getStyle=Y.prototype.mn;Y.prototype.getVersion=Y.prototype.qk;Y.prototype.updateDimensions=Y.prototype.hp;
-r("ol.source.WMTS.optionsFromCapabilities",function(a,b){var c=db(a.Contents.Layer,function(a){return a.Identifier==b.layer}),d=a.Contents.TileMatrixSet,e,f;e=1<c.TileMatrixSetLink.length?"projection"in b?hb(c.TileMatrixSetLink,function(a){return db(d,function(b){return b.Identifier==a.TileMatrixSet}).SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3")==b.projection}):hb(c.TileMatrixSetLink,function(a){return a.TileMatrixSet==b.matrixSet}):0;0>e&&(e=0);f=c.TileMatrixSetLink[e].TileMatrixSet;
-var g=c.Format[0];"format"in b&&(g=b.format);e=hb(c.Style,function(a){return"style"in b?a.Title==b.style:a.isDefault});0>e&&(e=0);e=c.Style[e].Identifier;var h={};"Dimension"in c&&c.Dimension.forEach(function(a){var b=a.Identifier,c=a.Default;void 0===c&&(c=a.Value[0]);h[b]=c});var l=db(a.Contents.TileMatrixSet,function(a){return a.Identifier==f}),m;m="projection"in b?qc(b.projection):qc(l.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var n=c.WGS84BoundingBox,p,q;void 0!==n&&
-(q=qc("EPSG:4326").D(),q=n[0]==q[0]&&n[2]==q[2],p=Lc(n,"EPSG:4326",m),(n=m.D())&&(Ib(n,p)||(p=void 0)));var l=Xw(l,p),t=[];p=b.requestEncoding;p=void 0!==p?p:"";if("OperationsMetadata"in a&&"GetTile"in a.OperationsMetadata)for(var n=a.OperationsMetadata.GetTile.DCP.HTTP.Get,u=0,y=n.length;u<y;++u){var x=db(n[u].Constraint,function(a){return"GetEncoding"==a.name}).AllowedValues.Value;""===p&&(p=x[0]);if(p===Yw)Za(x,Yw)&&t.push(n[u].href);else break}0===t.length&&(p="REST",c.ResourceURL.forEach(function(a){"tile"===
-a.resourceType&&(g=a.format,t.push(a.template))}));return{urls:t,layer:b.layer,matrixSet:f,format:g,projection:m,requestEncoding:p,tileGrid:l,style:e,dimensions:h,wrapX:q}});r("ol.source.XYZ",dw);r("ol.source.Zoomify",$w);Ih.prototype.vectorContext=Ih.prototype.vectorContext;Ih.prototype.frameState=Ih.prototype.frameState;Ih.prototype.context=Ih.prototype.context;Ih.prototype.glContext=Ih.prototype.glContext;qr.prototype.get=qr.prototype.get;qr.prototype.getExtent=qr.prototype.D;
-qr.prototype.getGeometry=qr.prototype.V;qr.prototype.getProperties=qr.prototype.Bm;qr.prototype.getType=qr.prototype.X;r("ol.render.VectorContext",Ji);Yk.prototype.setStyle=Yk.prototype.ud;Yk.prototype.drawGeometry=Yk.prototype.pc;Yk.prototype.drawFeature=Yk.prototype.Ve;Ki.prototype.drawCircle=Ki.prototype.Rd;Ki.prototype.setStyle=Ki.prototype.ud;Ki.prototype.drawGeometry=Ki.prototype.pc;Ki.prototype.drawFeature=Ki.prototype.Ve;r("ol.proj.common.add",Hh);r("ol.proj.METERS_PER_UNIT",kc);
-r("ol.proj.Projection",lc);lc.prototype.getCode=lc.prototype.Gj;lc.prototype.getExtent=lc.prototype.D;lc.prototype.getUnits=lc.prototype.yb;lc.prototype.getMetersPerUnit=lc.prototype.dc;lc.prototype.getWorldExtent=lc.prototype.sk;lc.prototype.isGlobal=lc.prototype.bl;lc.prototype.setGlobal=lc.prototype.Ro;lc.prototype.setExtent=lc.prototype.Am;lc.prototype.setWorldExtent=lc.prototype.Yo;lc.prototype.setGetPointResolution=lc.prototype.Qo;lc.prototype.getPointResolution=lc.prototype.getPointResolution;
-r("ol.proj.setProj4",function(a){nc=a});r("ol.proj.addEquivalentProjections",rc);r("ol.proj.addProjection",Dc);r("ol.proj.addCoordinateTransforms",sc);r("ol.proj.fromLonLat",function(a,b){return Kc(a,"EPSG:4326",void 0!==b?b:"EPSG:3857")});r("ol.proj.toLonLat",function(a,b){return Kc(a,void 0!==b?b:"EPSG:3857","EPSG:4326")});r("ol.proj.get",qc);r("ol.proj.equivalent",Hc);r("ol.proj.getTransform",Ic);r("ol.proj.transform",Kc);r("ol.proj.transformExtent",Lc);r("ol.layer.Base",vh);
-vh.prototype.getExtent=vh.prototype.D;vh.prototype.getMaxResolution=vh.prototype.Pb;vh.prototype.getMinResolution=vh.prototype.Qb;vh.prototype.getOpacity=vh.prototype.Rb;vh.prototype.getVisible=vh.prototype.zb;vh.prototype.getZIndex=vh.prototype.Sb;vh.prototype.setExtent=vh.prototype.fc;vh.prototype.setMaxResolution=vh.prototype.lc;vh.prototype.setMinResolution=vh.prototype.mc;vh.prototype.setOpacity=vh.prototype.gc;vh.prototype.setVisible=vh.prototype.hc;vh.prototype.setZIndex=vh.prototype.ic;
-r("ol.layer.Group",xh);xh.prototype.getLayers=xh.prototype.Qc;xh.prototype.setLayers=xh.prototype.gh;r("ol.layer.Heatmap",U);U.prototype.getBlur=U.prototype.tg;U.prototype.getGradient=U.prototype.Ag;U.prototype.getRadius=U.prototype.hh;U.prototype.setBlur=U.prototype.Th;U.prototype.setGradient=U.prototype.$h;U.prototype.setRadius=U.prototype.ih;r("ol.layer.Image",di);di.prototype.getSource=di.prototype.ga;r("ol.layer.Layer",Jh);Jh.prototype.getSource=Jh.prototype.ga;Jh.prototype.setMap=Jh.prototype.setMap;
-Jh.prototype.setSource=Jh.prototype.Ec;r("ol.layer.Tile",D);D.prototype.getPreload=D.prototype.f;D.prototype.getSource=D.prototype.ga;D.prototype.setPreload=D.prototype.l;D.prototype.getUseInterimTilesOnError=D.prototype.c;D.prototype.setUseInterimTilesOnError=D.prototype.B;r("ol.layer.Vector",E);E.prototype.getSource=E.prototype.ga;E.prototype.getStyle=E.prototype.G;E.prototype.getStyleFunction=E.prototype.S;E.prototype.setStyle=E.prototype.l;r("ol.layer.VectorTile",G);G.prototype.getPreload=G.prototype.f;
-G.prototype.getUseInterimTilesOnError=G.prototype.c;G.prototype.setPreload=G.prototype.P;G.prototype.setUseInterimTilesOnError=G.prototype.W;r("ol.interaction.DoubleClickZoom",yg);r("ol.interaction.DoubleClickZoom.handleEvent",zg);r("ol.interaction.DragAndDrop",Tt);r("ol.interaction.DragAndDrop.handleEvent",gc);Wt.prototype.features=Wt.prototype.features;Wt.prototype.file=Wt.prototype.file;Wt.prototype.projection=Wt.prototype.projection;r("ol.interaction.DragBox",Xg);Xg.prototype.getGeometry=Xg.prototype.V;
-bh.prototype.coordinate=bh.prototype.coordinate;bh.prototype.mapBrowserEvent=bh.prototype.mapBrowserEvent;r("ol.interaction.DragPan",Mg);r("ol.interaction.DragRotate",Qg);r("ol.interaction.DragRotateAndZoom",Yt);r("ol.interaction.DragZoom",fh);r("ol.interaction.Draw",tu);r("ol.interaction.Draw.handleEvent",vu);tu.prototype.removeLastPoint=tu.prototype.Fo;tu.prototype.finishDrawing=tu.prototype.ld;tu.prototype.extend=tu.prototype.fm;
-r("ol.interaction.Draw.createRegularPolygon",function(a,b){return function(c,d){var e=c[0],f=c[1],g=Math.sqrt(xb(e,f)),h=d?d:wd(new Ht(e),a);xd(h,e,g,b?b:Math.atan((f[1]-e[1])/(f[0]-e[0])));return h}});r("ol.interaction.Draw.createBox",function(){return function(a,b){var c=Ab(a),d=b||new B(null);d.ma([[Sb(c),Tb(c),Vb(c),Wb(c),Sb(c)]]);return d}});Iu.prototype.feature=Iu.prototype.feature;r("ol.interaction.Extent",Mu);Mu.prototype.getExtent=Mu.prototype.D;Mu.prototype.setExtent=Mu.prototype.i;
-Xu.prototype.extent_=Xu.prototype.b;r("ol.interaction.defaults",uh);r("ol.interaction.Interaction",tg);tg.prototype.getActive=tg.prototype.f;tg.prototype.getMap=tg.prototype.c;tg.prototype.setActive=tg.prototype.Ba;r("ol.interaction.KeyboardPan",gh);r("ol.interaction.KeyboardPan.handleEvent",hh);r("ol.interaction.KeyboardZoom",ih);r("ol.interaction.KeyboardZoom.handleEvent",jh);r("ol.interaction.Modify",Zu);r("ol.interaction.Modify.handleEvent",bv);Zu.prototype.removePoint=Zu.prototype.Qh;
-gv.prototype.features=gv.prototype.features;gv.prototype.mapBrowserEvent=gv.prototype.mapBrowserEvent;r("ol.interaction.MouseWheelZoom",kh);r("ol.interaction.MouseWheelZoom.handleEvent",lh);kh.prototype.setMouseAnchor=kh.prototype.B;r("ol.interaction.PinchRotate",mh);r("ol.interaction.PinchZoom",qh);r("ol.interaction.Pointer",Jg);r("ol.interaction.Pointer.handleEvent",Kg);r("ol.interaction.Select",ov);ov.prototype.getFeatures=ov.prototype.pm;ov.prototype.getLayer=ov.prototype.qm;
-r("ol.interaction.Select.handleEvent",pv);ov.prototype.setMap=ov.prototype.setMap;rv.prototype.selected=rv.prototype.selected;rv.prototype.deselected=rv.prototype.deselected;rv.prototype.mapBrowserEvent=rv.prototype.mapBrowserEvent;r("ol.interaction.Snap",tv);tv.prototype.addFeature=tv.prototype.cb;tv.prototype.removeFeature=tv.prototype.mb;r("ol.interaction.Translate",xv);Dv.prototype.features=Dv.prototype.features;Dv.prototype.coordinate=Dv.prototype.coordinate;r("ol.geom.Circle",Ht);
-Ht.prototype.clone=Ht.prototype.clone;Ht.prototype.getCenter=Ht.prototype.td;Ht.prototype.getRadius=Ht.prototype.vf;Ht.prototype.getType=Ht.prototype.X;Ht.prototype.intersectsExtent=Ht.prototype.Na;Ht.prototype.setCenter=Ht.prototype.Yl;Ht.prototype.setCenterAndRadius=Ht.prototype.Sf;Ht.prototype.setRadius=Ht.prototype.Zl;Ht.prototype.transform=Ht.prototype.lb;r("ol.geom.Geometry",Mc);Mc.prototype.getClosestPoint=Mc.prototype.xb;Mc.prototype.intersectsCoordinate=Mc.prototype.jb;
-Mc.prototype.getExtent=Mc.prototype.D;Mc.prototype.rotate=Mc.prototype.rotate;Mc.prototype.scale=Mc.prototype.scale;Mc.prototype.simplify=Mc.prototype.Db;Mc.prototype.transform=Mc.prototype.lb;r("ol.geom.GeometryCollection",Gn);Gn.prototype.clone=Gn.prototype.clone;Gn.prototype.getGeometries=Gn.prototype.cf;Gn.prototype.getType=Gn.prototype.X;Gn.prototype.intersectsExtent=Gn.prototype.Na;Gn.prototype.setGeometries=Gn.prototype.Zh;Gn.prototype.applyTransform=Gn.prototype.oc;
-Gn.prototype.translate=Gn.prototype.Pc;r("ol.geom.LinearRing",gd);gd.prototype.clone=gd.prototype.clone;gd.prototype.getArea=gd.prototype.bm;gd.prototype.getCoordinates=gd.prototype.Y;gd.prototype.getType=gd.prototype.X;gd.prototype.setCoordinates=gd.prototype.ma;r("ol.geom.LineString",O);O.prototype.appendCoordinate=O.prototype.kj;O.prototype.clone=O.prototype.clone;O.prototype.forEachSegment=O.prototype.zj;O.prototype.getCoordinateAtM=O.prototype.$l;O.prototype.getCoordinates=O.prototype.Y;
-O.prototype.getCoordinateAt=O.prototype.vg;O.prototype.getLength=O.prototype.am;O.prototype.getType=O.prototype.X;O.prototype.intersectsExtent=O.prototype.Na;O.prototype.setCoordinates=O.prototype.ma;r("ol.geom.MultiLineString",P);P.prototype.appendLineString=P.prototype.lj;P.prototype.clone=P.prototype.clone;P.prototype.getCoordinateAtM=P.prototype.cm;P.prototype.getCoordinates=P.prototype.Y;P.prototype.getLineString=P.prototype.Uj;P.prototype.getLineStrings=P.prototype.od;P.prototype.getType=P.prototype.X;
-P.prototype.intersectsExtent=P.prototype.Na;P.prototype.setCoordinates=P.prototype.ma;r("ol.geom.MultiPoint",Q);Q.prototype.appendPoint=Q.prototype.nj;Q.prototype.clone=Q.prototype.clone;Q.prototype.getCoordinates=Q.prototype.Y;Q.prototype.getPoint=Q.prototype.ek;Q.prototype.getPoints=Q.prototype.je;Q.prototype.getType=Q.prototype.X;Q.prototype.intersectsExtent=Q.prototype.Na;Q.prototype.setCoordinates=Q.prototype.ma;r("ol.geom.MultiPolygon",R);R.prototype.appendPolygon=R.prototype.oj;
-R.prototype.clone=R.prototype.clone;R.prototype.getArea=R.prototype.dm;R.prototype.getCoordinates=R.prototype.Y;R.prototype.getInteriorPoints=R.prototype.Rj;R.prototype.getPolygon=R.prototype.gk;R.prototype.getPolygons=R.prototype.Wd;R.prototype.getType=R.prototype.X;R.prototype.intersectsExtent=R.prototype.Na;R.prototype.setCoordinates=R.prototype.ma;r("ol.geom.Point",A);A.prototype.clone=A.prototype.clone;A.prototype.getCoordinates=A.prototype.Y;A.prototype.getType=A.prototype.X;
-A.prototype.intersectsExtent=A.prototype.Na;A.prototype.setCoordinates=A.prototype.ma;r("ol.geom.Polygon",B);B.prototype.appendLinearRing=B.prototype.mj;B.prototype.clone=B.prototype.clone;B.prototype.getArea=B.prototype.em;B.prototype.getCoordinates=B.prototype.Y;B.prototype.getInteriorPoint=B.prototype.Qj;B.prototype.getLinearRingCount=B.prototype.Vj;B.prototype.getLinearRing=B.prototype.Bg;B.prototype.getLinearRings=B.prototype.Vd;B.prototype.getType=B.prototype.X;
-B.prototype.intersectsExtent=B.prototype.Na;B.prototype.setCoordinates=B.prototype.ma;r("ol.geom.Polygon.circular",ud);r("ol.geom.Polygon.fromExtent",vd);r("ol.geom.Polygon.fromCircle",wd);r("ol.geom.SimpleGeometry",Oc);Oc.prototype.getFirstCoordinate=Oc.prototype.Lb;Oc.prototype.getLastCoordinate=Oc.prototype.Mb;Oc.prototype.getLayout=Oc.prototype.Nb;Oc.prototype.applyTransform=Oc.prototype.oc;Oc.prototype.translate=Oc.prototype.Pc;r("ol.format.EsriJSON",bn);bn.prototype.readFeature=bn.prototype.Ub;
-bn.prototype.readFeatures=bn.prototype.Ha;bn.prototype.readGeometry=bn.prototype.Wc;bn.prototype.readProjection=bn.prototype.Sa;bn.prototype.writeGeometry=bn.prototype.$c;bn.prototype.writeGeometryObject=bn.prototype.He;bn.prototype.writeFeature=bn.prototype.Fd;bn.prototype.writeFeatureObject=bn.prototype.Zc;bn.prototype.writeFeatures=bn.prototype.$b;bn.prototype.writeFeaturesObject=bn.prototype.Ge;r("ol.format.Feature",Qm);r("ol.format.GeoJSON",Kn);Kn.prototype.readFeature=Kn.prototype.Ub;
-Kn.prototype.readFeatures=Kn.prototype.Ha;Kn.prototype.readGeometry=Kn.prototype.Wc;Kn.prototype.readProjection=Kn.prototype.Sa;Kn.prototype.writeFeature=Kn.prototype.Fd;Kn.prototype.writeFeatureObject=Kn.prototype.Zc;Kn.prototype.writeFeatures=Kn.prototype.$b;Kn.prototype.writeFeaturesObject=Kn.prototype.Ge;Kn.prototype.writeGeometry=Kn.prototype.$c;Kn.prototype.writeGeometryObject=Kn.prototype.He;r("ol.format.GML",go);go.prototype.writeFeatures=go.prototype.$b;go.prototype.writeFeaturesNode=go.prototype.a;
-r("ol.format.GML2",po);r("ol.format.GML3",go);go.prototype.writeGeometryNode=go.prototype.T;go.prototype.writeFeatures=go.prototype.$b;go.prototype.writeFeaturesNode=go.prototype.a;Tn.prototype.readFeatures=Tn.prototype.Ha;r("ol.format.GPX",qo);qo.prototype.readFeature=qo.prototype.Ub;qo.prototype.readFeatures=qo.prototype.Ha;qo.prototype.readProjection=qo.prototype.Sa;qo.prototype.writeFeatures=qo.prototype.$b;qo.prototype.writeFeaturesNode=qo.prototype.a;r("ol.format.IGC",$o);
-$o.prototype.readFeature=$o.prototype.Ub;$o.prototype.readFeatures=$o.prototype.Ha;$o.prototype.readProjection=$o.prototype.Sa;r("ol.format.KML",qp);qp.prototype.readFeature=qp.prototype.Ub;qp.prototype.readFeatures=qp.prototype.Ha;qp.prototype.readName=qp.prototype.uo;qp.prototype.readNetworkLinks=qp.prototype.vo;qp.prototype.readProjection=qp.prototype.Sa;qp.prototype.writeFeatures=qp.prototype.$b;qp.prototype.writeFeaturesNode=qp.prototype.a;r("ol.format.MVT",rr);rr.prototype.readFeatures=rr.prototype.Ha;
-rr.prototype.readProjection=rr.prototype.Sa;rr.prototype.setLayers=rr.prototype.c;r("ol.format.OSMXML",tr);tr.prototype.readFeatures=tr.prototype.Ha;tr.prototype.readProjection=tr.prototype.Sa;r("ol.format.Polyline",Sr);r("ol.format.Polyline.encodeDeltas",Tr);r("ol.format.Polyline.decodeDeltas",Vr);r("ol.format.Polyline.encodeFloats",Ur);r("ol.format.Polyline.decodeFloats",Wr);Sr.prototype.readFeature=Sr.prototype.Ub;Sr.prototype.readFeatures=Sr.prototype.Ha;Sr.prototype.readGeometry=Sr.prototype.Wc;
-Sr.prototype.readProjection=Sr.prototype.Sa;Sr.prototype.writeGeometry=Sr.prototype.$c;r("ol.format.TopoJSON",Xr);Xr.prototype.readFeatures=Xr.prototype.Ha;Xr.prototype.readProjection=Xr.prototype.Sa;r("ol.format.WFS",cs);cs.prototype.readFeatures=cs.prototype.Ha;cs.prototype.readTransactionResponse=cs.prototype.o;cs.prototype.readFeatureCollectionMetadata=cs.prototype.l;cs.prototype.writeGetFeature=cs.prototype.s;cs.prototype.writeTransaction=cs.prototype.C;cs.prototype.readProjection=cs.prototype.Sa;
-r("ol.format.WKT",us);us.prototype.readFeature=us.prototype.Ub;us.prototype.readFeatures=us.prototype.Ha;us.prototype.readGeometry=us.prototype.Wc;us.prototype.writeFeature=us.prototype.Fd;us.prototype.writeFeatures=us.prototype.$b;us.prototype.writeGeometry=us.prototype.$c;r("ol.format.WMSCapabilities",Ms);Ms.prototype.read=Ms.prototype.read;r("ol.format.WMSGetFeatureInfo",it);it.prototype.readFeatures=it.prototype.Ha;r("ol.format.WMTSCapabilities",jt);jt.prototype.read=jt.prototype.read;
-r("ol.format.filter.And",mn);r("ol.format.filter.Bbox",nn);r("ol.format.filter.Comparison",on);r("ol.format.filter.ComparisonBinary",pn);r("ol.format.filter.EqualTo",qn);r("ol.format.filter.Filter",jn);r("ol.format.filter.GreaterThan",rn);r("ol.format.filter.GreaterThanOrEqualTo",sn);r("ol.format.filter.and",En);r("ol.format.filter.or",function(a,b){return new Cn(a,b)});r("ol.format.filter.not",function(a){return new An(a)});r("ol.format.filter.bbox",Fn);
-r("ol.format.filter.intersects",function(a,b,c){return new un(a,b,c)});r("ol.format.filter.within",function(a,b,c){return new Dn(a,b,c)});r("ol.format.filter.equalTo",function(a,b,c){return new qn(a,b,c)});r("ol.format.filter.notEqualTo",function(a,b,c){return new Bn(a,b,c)});r("ol.format.filter.lessThan",function(a,b){return new yn(a,b)});r("ol.format.filter.lessThanOrEqualTo",function(a,b){return new zn(a,b)});r("ol.format.filter.greaterThan",function(a,b){return new rn(a,b)});
-r("ol.format.filter.greaterThanOrEqualTo",function(a,b){return new sn(a,b)});r("ol.format.filter.isNull",function(a){return new xn(a)});r("ol.format.filter.between",function(a,b,c){return new vn(a,b,c)});r("ol.format.filter.like",function(a,b,c,d,e,f){return new wn(a,b,c,d,e,f)});r("ol.format.filter.Intersects",un);r("ol.format.filter.IsBetween",vn);r("ol.format.filter.IsLike",wn);r("ol.format.filter.IsNull",xn);r("ol.format.filter.LessThan",yn);r("ol.format.filter.LessThanOrEqualTo",zn);
-r("ol.format.filter.Not",An);r("ol.format.filter.NotEqualTo",Bn);r("ol.format.filter.Or",Cn);r("ol.format.filter.Spatial",tn);r("ol.format.filter.Within",Dn);r("ol.events.condition.altKeyOnly",function(a){a=a.originalEvent;return a.altKey&&!(a.metaKey||a.ctrlKey)&&!a.shiftKey});r("ol.events.condition.altShiftKeysOnly",Ag);r("ol.events.condition.always",gc);r("ol.events.condition.click",function(a){return a.type==Xf});r("ol.events.condition.never",hc);r("ol.events.condition.pointerMove",Cg);
-r("ol.events.condition.singleClick",Dg);r("ol.events.condition.doubleClick",function(a){return a.type==Yf});r("ol.events.condition.noModifierKeys",Eg);r("ol.events.condition.platformModifierKeyOnly",function(a){a=a.originalEvent;return!a.altKey&&(ff?a.metaKey:a.ctrlKey)&&!a.shiftKey});r("ol.events.condition.shiftKeyOnly",Fg);r("ol.events.condition.targetNotEditable",Gg);r("ol.events.condition.mouseOnly",Hg);r("ol.events.condition.primaryAction",Ig);Ka.prototype.type=Ka.prototype.type;
-Ka.prototype.target=Ka.prototype.target;Ka.prototype.preventDefault=Ka.prototype.preventDefault;Ka.prototype.stopPropagation=Ka.prototype.stopPropagation;r("ol.control.Attribution",Ie);r("ol.control.Attribution.render",Je);Ie.prototype.getCollapsible=Ie.prototype.Ol;Ie.prototype.setCollapsible=Ie.prototype.Rl;Ie.prototype.setCollapsed=Ie.prototype.Ql;Ie.prototype.getCollapsed=Ie.prototype.Nl;r("ol.control.Control",He);He.prototype.getMap=He.prototype.i;He.prototype.setMap=He.prototype.setMap;
-He.prototype.setTarget=He.prototype.c;r("ol.control.FullScreen",Le);r("ol.control.defaults",Te);r("ol.control.MousePosition",Ue);r("ol.control.MousePosition.render",Ve);Ue.prototype.getCoordinateFormat=Ue.prototype.wg;Ue.prototype.getProjection=Ue.prototype.Zg;Ue.prototype.setCoordinateFormat=Ue.prototype.Uh;Ue.prototype.setProjection=Ue.prototype.$g;r("ol.control.OverviewMap",Ul);r("ol.control.OverviewMap.render",Vl);Ul.prototype.getCollapsible=Ul.prototype.Ul;Ul.prototype.setCollapsible=Ul.prototype.Xl;
-Ul.prototype.setCollapsed=Ul.prototype.Wl;Ul.prototype.getCollapsed=Ul.prototype.Tl;Ul.prototype.getOverviewMap=Ul.prototype.ck;r("ol.control.Rotate",Qe);r("ol.control.Rotate.render",Re);r("ol.control.ScaleLine",Zl);Zl.prototype.getUnits=Zl.prototype.yb;r("ol.control.ScaleLine.render",$l);Zl.prototype.setUnits=Zl.prototype.G;r("ol.control.Zoom",Se);r("ol.control.ZoomSlider",im);r("ol.control.ZoomSlider.render",km);r("ol.control.ZoomToExtent",nm);Ua.prototype.changed=Ua.prototype.v;
-Ua.prototype.dispatchEvent=Ua.prototype.b;Ua.prototype.getRevision=Ua.prototype.K;Ua.prototype.on=Ua.prototype.I;Ua.prototype.once=Ua.prototype.L;Ua.prototype.un=Ua.prototype.J;Ua.prototype.unByKey=Ua.prototype.M;me.prototype.get=me.prototype.get;me.prototype.getKeys=me.prototype.O;me.prototype.getProperties=me.prototype.N;me.prototype.set=me.prototype.set;me.prototype.setProperties=me.prototype.H;me.prototype.unset=me.prototype.R;me.prototype.changed=me.prototype.v;me.prototype.dispatchEvent=me.prototype.b;
-me.prototype.getRevision=me.prototype.K;me.prototype.on=me.prototype.I;me.prototype.once=me.prototype.L;me.prototype.un=me.prototype.J;me.prototype.unByKey=me.prototype.M;re.prototype.type=re.prototype.type;re.prototype.target=re.prototype.target;re.prototype.preventDefault=re.prototype.preventDefault;re.prototype.stopPropagation=re.prototype.stopPropagation;om.prototype.get=om.prototype.get;om.prototype.getKeys=om.prototype.O;om.prototype.getProperties=om.prototype.N;om.prototype.set=om.prototype.set;
-om.prototype.setProperties=om.prototype.H;om.prototype.unset=om.prototype.R;om.prototype.changed=om.prototype.v;om.prototype.dispatchEvent=om.prototype.b;om.prototype.getRevision=om.prototype.K;om.prototype.on=om.prototype.I;om.prototype.once=om.prototype.L;om.prototype.un=om.prototype.J;om.prototype.unByKey=om.prototype.M;I.prototype.get=I.prototype.get;I.prototype.getKeys=I.prototype.O;I.prototype.getProperties=I.prototype.N;I.prototype.set=I.prototype.set;I.prototype.setProperties=I.prototype.H;
-I.prototype.unset=I.prototype.R;I.prototype.changed=I.prototype.v;I.prototype.dispatchEvent=I.prototype.b;I.prototype.getRevision=I.prototype.K;I.prototype.on=I.prototype.I;I.prototype.once=I.prototype.L;I.prototype.un=I.prototype.J;I.prototype.unByKey=I.prototype.M;wt.prototype.get=wt.prototype.get;wt.prototype.getKeys=wt.prototype.O;wt.prototype.getProperties=wt.prototype.N;wt.prototype.set=wt.prototype.set;wt.prototype.setProperties=wt.prototype.H;wt.prototype.unset=wt.prototype.R;
-wt.prototype.changed=wt.prototype.v;wt.prototype.dispatchEvent=wt.prototype.b;wt.prototype.getRevision=wt.prototype.K;wt.prototype.on=wt.prototype.I;wt.prototype.once=wt.prototype.L;wt.prototype.un=wt.prototype.J;wt.prototype.unByKey=wt.prototype.M;Rt.prototype.getTileCoord=Rt.prototype.i;H.prototype.get=H.prototype.get;H.prototype.getKeys=H.prototype.O;H.prototype.getProperties=H.prototype.N;H.prototype.set=H.prototype.set;H.prototype.setProperties=H.prototype.H;H.prototype.unset=H.prototype.R;
-H.prototype.changed=H.prototype.v;H.prototype.dispatchEvent=H.prototype.b;H.prototype.getRevision=H.prototype.K;H.prototype.on=H.prototype.I;H.prototype.once=H.prototype.L;H.prototype.un=H.prototype.J;H.prototype.unByKey=H.prototype.M;Ge.prototype.type=Ge.prototype.type;Ge.prototype.target=Ge.prototype.target;Ge.prototype.preventDefault=Ge.prototype.preventDefault;Ge.prototype.stopPropagation=Ge.prototype.stopPropagation;Tf.prototype.map=Tf.prototype.map;Tf.prototype.frameState=Tf.prototype.frameState;
-Tf.prototype.type=Tf.prototype.type;Tf.prototype.target=Tf.prototype.target;Tf.prototype.preventDefault=Tf.prototype.preventDefault;Tf.prototype.stopPropagation=Tf.prototype.stopPropagation;Uf.prototype.originalEvent=Uf.prototype.originalEvent;Uf.prototype.pixel=Uf.prototype.pixel;Uf.prototype.coordinate=Uf.prototype.coordinate;Uf.prototype.dragging=Uf.prototype.dragging;Uf.prototype.preventDefault=Uf.prototype.preventDefault;Uf.prototype.stopPropagation=Uf.prototype.stopPropagation;
-Uf.prototype.map=Uf.prototype.map;Uf.prototype.frameState=Uf.prototype.frameState;Uf.prototype.type=Uf.prototype.type;Uf.prototype.target=Uf.prototype.target;Ta.prototype.type=Ta.prototype.type;Ta.prototype.target=Ta.prototype.target;Ta.prototype.preventDefault=Ta.prototype.preventDefault;Ta.prototype.stopPropagation=Ta.prototype.stopPropagation;Cl.prototype.get=Cl.prototype.get;Cl.prototype.getKeys=Cl.prototype.O;Cl.prototype.getProperties=Cl.prototype.N;Cl.prototype.set=Cl.prototype.set;
-Cl.prototype.setProperties=Cl.prototype.H;Cl.prototype.unset=Cl.prototype.R;Cl.prototype.changed=Cl.prototype.v;Cl.prototype.dispatchEvent=Cl.prototype.b;Cl.prototype.getRevision=Cl.prototype.K;Cl.prototype.on=Cl.prototype.I;Cl.prototype.once=Cl.prototype.L;Cl.prototype.un=Cl.prototype.J;Cl.prototype.unByKey=Cl.prototype.M;Tw.prototype.getTileCoord=Tw.prototype.i;yd.prototype.get=yd.prototype.get;yd.prototype.getKeys=yd.prototype.O;yd.prototype.getProperties=yd.prototype.N;yd.prototype.set=yd.prototype.set;
-yd.prototype.setProperties=yd.prototype.H;yd.prototype.unset=yd.prototype.R;yd.prototype.changed=yd.prototype.v;yd.prototype.dispatchEvent=yd.prototype.b;yd.prototype.getRevision=yd.prototype.K;yd.prototype.on=yd.prototype.I;yd.prototype.once=yd.prototype.L;yd.prototype.un=yd.prototype.J;yd.prototype.unByKey=yd.prototype.M;Ww.prototype.forEachTileCoord=Ww.prototype.sg;Ww.prototype.getMaxZoom=Ww.prototype.Cg;Ww.prototype.getMinZoom=Ww.prototype.Dg;Ww.prototype.getOrigin=Ww.prototype.Tc;
-Ww.prototype.getResolution=Ww.prototype.Ga;Ww.prototype.getResolutions=Ww.prototype.Bh;Ww.prototype.getTileCoordExtent=Ww.prototype.Ia;Ww.prototype.getTileCoordForCoordAndResolution=Ww.prototype.Yd;Ww.prototype.getTileCoordForCoordAndZ=Ww.prototype.Zd;Ww.prototype.getTileSize=Ww.prototype.Va;Ww.prototype.getZForResolution=Ww.prototype.wc;si.prototype.getOpacity=si.prototype.qe;si.prototype.getRotateWithView=si.prototype.re;si.prototype.getRotation=si.prototype.se;si.prototype.getScale=si.prototype.te;
-si.prototype.getSnapToPixel=si.prototype.Xd;si.prototype.setOpacity=si.prototype.Rc;si.prototype.setRotation=si.prototype.ue;si.prototype.setScale=si.prototype.Sc;jp.prototype.getOpacity=jp.prototype.qe;jp.prototype.getRotateWithView=jp.prototype.re;jp.prototype.getRotation=jp.prototype.se;jp.prototype.getScale=jp.prototype.te;jp.prototype.getSnapToPixel=jp.prototype.Xd;jp.prototype.setOpacity=jp.prototype.Rc;jp.prototype.setRotation=jp.prototype.ue;jp.prototype.setScale=jp.prototype.Sc;
-hx.prototype.getOpacity=hx.prototype.qe;hx.prototype.getRotateWithView=hx.prototype.re;hx.prototype.getRotation=hx.prototype.se;hx.prototype.getScale=hx.prototype.te;hx.prototype.getSnapToPixel=hx.prototype.Xd;hx.prototype.setOpacity=hx.prototype.Rc;hx.prototype.setRotation=hx.prototype.ue;hx.prototype.setScale=hx.prototype.Sc;Tj.prototype.get=Tj.prototype.get;Tj.prototype.getKeys=Tj.prototype.O;Tj.prototype.getProperties=Tj.prototype.N;Tj.prototype.set=Tj.prototype.set;
-Tj.prototype.setProperties=Tj.prototype.H;Tj.prototype.unset=Tj.prototype.R;Tj.prototype.changed=Tj.prototype.v;Tj.prototype.dispatchEvent=Tj.prototype.b;Tj.prototype.getRevision=Tj.prototype.K;Tj.prototype.on=Tj.prototype.I;Tj.prototype.once=Tj.prototype.L;Tj.prototype.un=Tj.prototype.J;Tj.prototype.unByKey=Tj.prototype.M;Uv.prototype.getAttributions=Uv.prototype.va;Uv.prototype.getLogo=Uv.prototype.ua;Uv.prototype.getProjection=Uv.prototype.wa;Uv.prototype.getState=Uv.prototype.U;
-Uv.prototype.refresh=Uv.prototype.ta;Uv.prototype.setAttributions=Uv.prototype.qa;Uv.prototype.get=Uv.prototype.get;Uv.prototype.getKeys=Uv.prototype.O;Uv.prototype.getProperties=Uv.prototype.N;Uv.prototype.set=Uv.prototype.set;Uv.prototype.setProperties=Uv.prototype.H;Uv.prototype.unset=Uv.prototype.R;Uv.prototype.changed=Uv.prototype.v;Uv.prototype.dispatchEvent=Uv.prototype.b;Uv.prototype.getRevision=Uv.prototype.K;Uv.prototype.on=Uv.prototype.I;Uv.prototype.once=Uv.prototype.L;
-Uv.prototype.un=Uv.prototype.J;Uv.prototype.unByKey=Uv.prototype.M;Yv.prototype.getTileGrid=Yv.prototype.Ra;Yv.prototype.refresh=Yv.prototype.ta;Yv.prototype.getAttributions=Yv.prototype.va;Yv.prototype.getLogo=Yv.prototype.ua;Yv.prototype.getProjection=Yv.prototype.wa;Yv.prototype.getState=Yv.prototype.U;Yv.prototype.setAttributions=Yv.prototype.qa;Yv.prototype.get=Yv.prototype.get;Yv.prototype.getKeys=Yv.prototype.O;Yv.prototype.getProperties=Yv.prototype.N;Yv.prototype.set=Yv.prototype.set;
-Yv.prototype.setProperties=Yv.prototype.H;Yv.prototype.unset=Yv.prototype.R;Yv.prototype.changed=Yv.prototype.v;Yv.prototype.dispatchEvent=Yv.prototype.b;Yv.prototype.getRevision=Yv.prototype.K;Yv.prototype.on=Yv.prototype.I;Yv.prototype.once=Yv.prototype.L;Yv.prototype.un=Yv.prototype.J;Yv.prototype.unByKey=Yv.prototype.M;W.prototype.getTileLoadFunction=W.prototype.fb;W.prototype.getTileUrlFunction=W.prototype.hb;W.prototype.getUrls=W.prototype.ib;W.prototype.setTileLoadFunction=W.prototype.nb;
-W.prototype.setTileUrlFunction=W.prototype.Ta;W.prototype.setUrl=W.prototype.Ya;W.prototype.setUrls=W.prototype.Ua;W.prototype.getTileGrid=W.prototype.Ra;W.prototype.refresh=W.prototype.ta;W.prototype.getAttributions=W.prototype.va;W.prototype.getLogo=W.prototype.ua;W.prototype.getProjection=W.prototype.wa;W.prototype.getState=W.prototype.U;W.prototype.setAttributions=W.prototype.qa;W.prototype.get=W.prototype.get;W.prototype.getKeys=W.prototype.O;W.prototype.getProperties=W.prototype.N;
-W.prototype.set=W.prototype.set;W.prototype.setProperties=W.prototype.H;W.prototype.unset=W.prototype.R;W.prototype.changed=W.prototype.v;W.prototype.dispatchEvent=W.prototype.b;W.prototype.getRevision=W.prototype.K;W.prototype.on=W.prototype.I;W.prototype.once=W.prototype.L;W.prototype.un=W.prototype.J;W.prototype.unByKey=W.prototype.M;bw.prototype.setRenderReprojectionEdges=bw.prototype.Bb;bw.prototype.setTileGridForProjection=bw.prototype.Cb;bw.prototype.getTileLoadFunction=bw.prototype.fb;
-bw.prototype.getTileUrlFunction=bw.prototype.hb;bw.prototype.getUrls=bw.prototype.ib;bw.prototype.setTileLoadFunction=bw.prototype.nb;bw.prototype.setTileUrlFunction=bw.prototype.Ta;bw.prototype.setUrl=bw.prototype.Ya;bw.prototype.setUrls=bw.prototype.Ua;bw.prototype.getTileGrid=bw.prototype.Ra;bw.prototype.refresh=bw.prototype.ta;bw.prototype.getAttributions=bw.prototype.va;bw.prototype.getLogo=bw.prototype.ua;bw.prototype.getProjection=bw.prototype.wa;bw.prototype.getState=bw.prototype.U;
-bw.prototype.setAttributions=bw.prototype.qa;bw.prototype.get=bw.prototype.get;bw.prototype.getKeys=bw.prototype.O;bw.prototype.getProperties=bw.prototype.N;bw.prototype.set=bw.prototype.set;bw.prototype.setProperties=bw.prototype.H;bw.prototype.unset=bw.prototype.R;bw.prototype.changed=bw.prototype.v;bw.prototype.dispatchEvent=bw.prototype.b;bw.prototype.getRevision=bw.prototype.K;bw.prototype.on=bw.prototype.I;bw.prototype.once=bw.prototype.L;bw.prototype.un=bw.prototype.J;
-bw.prototype.unByKey=bw.prototype.M;dw.prototype.setRenderReprojectionEdges=dw.prototype.Bb;dw.prototype.setTileGridForProjection=dw.prototype.Cb;dw.prototype.getTileLoadFunction=dw.prototype.fb;dw.prototype.getTileUrlFunction=dw.prototype.hb;dw.prototype.getUrls=dw.prototype.ib;dw.prototype.setTileLoadFunction=dw.prototype.nb;dw.prototype.setTileUrlFunction=dw.prototype.Ta;dw.prototype.setUrl=dw.prototype.Ya;dw.prototype.setUrls=dw.prototype.Ua;dw.prototype.getTileGrid=dw.prototype.Ra;
-dw.prototype.refresh=dw.prototype.ta;dw.prototype.getAttributions=dw.prototype.va;dw.prototype.getLogo=dw.prototype.ua;dw.prototype.getProjection=dw.prototype.wa;dw.prototype.getState=dw.prototype.U;dw.prototype.setAttributions=dw.prototype.qa;dw.prototype.get=dw.prototype.get;dw.prototype.getKeys=dw.prototype.O;dw.prototype.getProperties=dw.prototype.N;dw.prototype.set=dw.prototype.set;dw.prototype.setProperties=dw.prototype.H;dw.prototype.unset=dw.prototype.R;dw.prototype.changed=dw.prototype.v;
-dw.prototype.dispatchEvent=dw.prototype.b;dw.prototype.getRevision=dw.prototype.K;dw.prototype.on=dw.prototype.I;dw.prototype.once=dw.prototype.L;dw.prototype.un=dw.prototype.J;dw.prototype.unByKey=dw.prototype.M;ew.prototype.setRenderReprojectionEdges=ew.prototype.Bb;ew.prototype.setTileGridForProjection=ew.prototype.Cb;ew.prototype.getTileLoadFunction=ew.prototype.fb;ew.prototype.getTileUrlFunction=ew.prototype.hb;ew.prototype.getUrls=ew.prototype.ib;ew.prototype.setTileLoadFunction=ew.prototype.nb;
-ew.prototype.setTileUrlFunction=ew.prototype.Ta;ew.prototype.setUrl=ew.prototype.Ya;ew.prototype.setUrls=ew.prototype.Ua;ew.prototype.getTileGrid=ew.prototype.Ra;ew.prototype.refresh=ew.prototype.ta;ew.prototype.getAttributions=ew.prototype.va;ew.prototype.getLogo=ew.prototype.ua;ew.prototype.getProjection=ew.prototype.wa;ew.prototype.getState=ew.prototype.U;ew.prototype.setAttributions=ew.prototype.qa;ew.prototype.get=ew.prototype.get;ew.prototype.getKeys=ew.prototype.O;
-ew.prototype.getProperties=ew.prototype.N;ew.prototype.set=ew.prototype.set;ew.prototype.setProperties=ew.prototype.H;ew.prototype.unset=ew.prototype.R;ew.prototype.changed=ew.prototype.v;ew.prototype.dispatchEvent=ew.prototype.b;ew.prototype.getRevision=ew.prototype.K;ew.prototype.on=ew.prototype.I;ew.prototype.once=ew.prototype.L;ew.prototype.un=ew.prototype.J;ew.prototype.unByKey=ew.prototype.M;T.prototype.getAttributions=T.prototype.va;T.prototype.getLogo=T.prototype.ua;
-T.prototype.getProjection=T.prototype.wa;T.prototype.getState=T.prototype.U;T.prototype.refresh=T.prototype.ta;T.prototype.setAttributions=T.prototype.qa;T.prototype.get=T.prototype.get;T.prototype.getKeys=T.prototype.O;T.prototype.getProperties=T.prototype.N;T.prototype.set=T.prototype.set;T.prototype.setProperties=T.prototype.H;T.prototype.unset=T.prototype.R;T.prototype.changed=T.prototype.v;T.prototype.dispatchEvent=T.prototype.b;T.prototype.getRevision=T.prototype.K;T.prototype.on=T.prototype.I;
-T.prototype.once=T.prototype.L;T.prototype.un=T.prototype.J;T.prototype.unByKey=T.prototype.M;X.prototype.addFeature=X.prototype.cb;X.prototype.addFeatures=X.prototype.Ic;X.prototype.clear=X.prototype.clear;X.prototype.forEachFeature=X.prototype.qg;X.prototype.forEachFeatureInExtent=X.prototype.Kb;X.prototype.forEachFeatureIntersectingExtent=X.prototype.rg;X.prototype.getFeaturesCollection=X.prototype.zg;X.prototype.getFeatures=X.prototype.oe;X.prototype.getFeaturesAtCoordinate=X.prototype.yg;
-X.prototype.getFeaturesInExtent=X.prototype.bf;X.prototype.getClosestFeatureToCoordinate=X.prototype.ug;X.prototype.getExtent=X.prototype.D;X.prototype.getFeatureById=X.prototype.xg;X.prototype.getFormat=X.prototype.sh;X.prototype.getUrl=X.prototype.th;X.prototype.removeFeature=X.prototype.mb;X.prototype.getAttributions=X.prototype.va;X.prototype.getLogo=X.prototype.ua;X.prototype.getProjection=X.prototype.wa;X.prototype.getState=X.prototype.U;X.prototype.refresh=X.prototype.ta;
-X.prototype.setAttributions=X.prototype.qa;X.prototype.get=X.prototype.get;X.prototype.getKeys=X.prototype.O;X.prototype.getProperties=X.prototype.N;X.prototype.set=X.prototype.set;X.prototype.setProperties=X.prototype.H;X.prototype.unset=X.prototype.R;X.prototype.changed=X.prototype.v;X.prototype.dispatchEvent=X.prototype.b;X.prototype.getRevision=X.prototype.K;X.prototype.on=X.prototype.I;X.prototype.once=X.prototype.L;X.prototype.un=X.prototype.J;X.prototype.unByKey=X.prototype.M;
-Wj.prototype.getAttributions=Wj.prototype.va;Wj.prototype.getLogo=Wj.prototype.ua;Wj.prototype.getProjection=Wj.prototype.wa;Wj.prototype.getState=Wj.prototype.U;Wj.prototype.refresh=Wj.prototype.ta;Wj.prototype.setAttributions=Wj.prototype.qa;Wj.prototype.get=Wj.prototype.get;Wj.prototype.getKeys=Wj.prototype.O;Wj.prototype.getProperties=Wj.prototype.N;Wj.prototype.set=Wj.prototype.set;Wj.prototype.setProperties=Wj.prototype.H;Wj.prototype.unset=Wj.prototype.R;Wj.prototype.changed=Wj.prototype.v;
-Wj.prototype.dispatchEvent=Wj.prototype.b;Wj.prototype.getRevision=Wj.prototype.K;Wj.prototype.on=Wj.prototype.I;Wj.prototype.once=Wj.prototype.L;Wj.prototype.un=Wj.prototype.J;Wj.prototype.unByKey=Wj.prototype.M;Yj.prototype.type=Yj.prototype.type;Yj.prototype.target=Yj.prototype.target;Yj.prototype.preventDefault=Yj.prototype.preventDefault;Yj.prototype.stopPropagation=Yj.prototype.stopPropagation;kw.prototype.getAttributions=kw.prototype.va;kw.prototype.getLogo=kw.prototype.ua;
-kw.prototype.getProjection=kw.prototype.wa;kw.prototype.getState=kw.prototype.U;kw.prototype.refresh=kw.prototype.ta;kw.prototype.setAttributions=kw.prototype.qa;kw.prototype.get=kw.prototype.get;kw.prototype.getKeys=kw.prototype.O;kw.prototype.getProperties=kw.prototype.N;kw.prototype.set=kw.prototype.set;kw.prototype.setProperties=kw.prototype.H;kw.prototype.unset=kw.prototype.R;kw.prototype.changed=kw.prototype.v;kw.prototype.dispatchEvent=kw.prototype.b;kw.prototype.getRevision=kw.prototype.K;
-kw.prototype.on=kw.prototype.I;kw.prototype.once=kw.prototype.L;kw.prototype.un=kw.prototype.J;kw.prototype.unByKey=kw.prototype.M;dk.prototype.getAttributions=dk.prototype.va;dk.prototype.getLogo=dk.prototype.ua;dk.prototype.getProjection=dk.prototype.wa;dk.prototype.getState=dk.prototype.U;dk.prototype.refresh=dk.prototype.ta;dk.prototype.setAttributions=dk.prototype.qa;dk.prototype.get=dk.prototype.get;dk.prototype.getKeys=dk.prototype.O;dk.prototype.getProperties=dk.prototype.N;
-dk.prototype.set=dk.prototype.set;dk.prototype.setProperties=dk.prototype.H;dk.prototype.unset=dk.prototype.R;dk.prototype.changed=dk.prototype.v;dk.prototype.dispatchEvent=dk.prototype.b;dk.prototype.getRevision=dk.prototype.K;dk.prototype.on=dk.prototype.I;dk.prototype.once=dk.prototype.L;dk.prototype.un=dk.prototype.J;dk.prototype.unByKey=dk.prototype.M;lw.prototype.getAttributions=lw.prototype.va;lw.prototype.getLogo=lw.prototype.ua;lw.prototype.getProjection=lw.prototype.wa;
-lw.prototype.getState=lw.prototype.U;lw.prototype.refresh=lw.prototype.ta;lw.prototype.setAttributions=lw.prototype.qa;lw.prototype.get=lw.prototype.get;lw.prototype.getKeys=lw.prototype.O;lw.prototype.getProperties=lw.prototype.N;lw.prototype.set=lw.prototype.set;lw.prototype.setProperties=lw.prototype.H;lw.prototype.unset=lw.prototype.R;lw.prototype.changed=lw.prototype.v;lw.prototype.dispatchEvent=lw.prototype.b;lw.prototype.getRevision=lw.prototype.K;lw.prototype.on=lw.prototype.I;
-lw.prototype.once=lw.prototype.L;lw.prototype.un=lw.prototype.J;lw.prototype.unByKey=lw.prototype.M;mw.prototype.getAttributions=mw.prototype.va;mw.prototype.getLogo=mw.prototype.ua;mw.prototype.getProjection=mw.prototype.wa;mw.prototype.getState=mw.prototype.U;mw.prototype.refresh=mw.prototype.ta;mw.prototype.setAttributions=mw.prototype.qa;mw.prototype.get=mw.prototype.get;mw.prototype.getKeys=mw.prototype.O;mw.prototype.getProperties=mw.prototype.N;mw.prototype.set=mw.prototype.set;
-mw.prototype.setProperties=mw.prototype.H;mw.prototype.unset=mw.prototype.R;mw.prototype.changed=mw.prototype.v;mw.prototype.dispatchEvent=mw.prototype.b;mw.prototype.getRevision=mw.prototype.K;mw.prototype.on=mw.prototype.I;mw.prototype.once=mw.prototype.L;mw.prototype.un=mw.prototype.J;mw.prototype.unByKey=mw.prototype.M;ek.prototype.getAttributions=ek.prototype.va;ek.prototype.getLogo=ek.prototype.ua;ek.prototype.getProjection=ek.prototype.wa;ek.prototype.getState=ek.prototype.U;
-ek.prototype.refresh=ek.prototype.ta;ek.prototype.setAttributions=ek.prototype.qa;ek.prototype.get=ek.prototype.get;ek.prototype.getKeys=ek.prototype.O;ek.prototype.getProperties=ek.prototype.N;ek.prototype.set=ek.prototype.set;ek.prototype.setProperties=ek.prototype.H;ek.prototype.unset=ek.prototype.R;ek.prototype.changed=ek.prototype.v;ek.prototype.dispatchEvent=ek.prototype.b;ek.prototype.getRevision=ek.prototype.K;ek.prototype.on=ek.prototype.I;ek.prototype.once=ek.prototype.L;
-ek.prototype.un=ek.prototype.J;ek.prototype.unByKey=ek.prototype.M;nw.prototype.getAttributions=nw.prototype.va;nw.prototype.getLogo=nw.prototype.ua;nw.prototype.getProjection=nw.prototype.wa;nw.prototype.getState=nw.prototype.U;nw.prototype.refresh=nw.prototype.ta;nw.prototype.setAttributions=nw.prototype.qa;nw.prototype.get=nw.prototype.get;nw.prototype.getKeys=nw.prototype.O;nw.prototype.getProperties=nw.prototype.N;nw.prototype.set=nw.prototype.set;nw.prototype.setProperties=nw.prototype.H;
-nw.prototype.unset=nw.prototype.R;nw.prototype.changed=nw.prototype.v;nw.prototype.dispatchEvent=nw.prototype.b;nw.prototype.getRevision=nw.prototype.K;nw.prototype.on=nw.prototype.I;nw.prototype.once=nw.prototype.L;nw.prototype.un=nw.prototype.J;nw.prototype.unByKey=nw.prototype.M;rw.prototype.setRenderReprojectionEdges=rw.prototype.Bb;rw.prototype.setTileGridForProjection=rw.prototype.Cb;rw.prototype.getTileLoadFunction=rw.prototype.fb;rw.prototype.getTileUrlFunction=rw.prototype.hb;
-rw.prototype.getUrls=rw.prototype.ib;rw.prototype.setTileLoadFunction=rw.prototype.nb;rw.prototype.setTileUrlFunction=rw.prototype.Ta;rw.prototype.setUrl=rw.prototype.Ya;rw.prototype.setUrls=rw.prototype.Ua;rw.prototype.getTileGrid=rw.prototype.Ra;rw.prototype.refresh=rw.prototype.ta;rw.prototype.getAttributions=rw.prototype.va;rw.prototype.getLogo=rw.prototype.ua;rw.prototype.getProjection=rw.prototype.wa;rw.prototype.getState=rw.prototype.U;rw.prototype.setAttributions=rw.prototype.qa;
-rw.prototype.get=rw.prototype.get;rw.prototype.getKeys=rw.prototype.O;rw.prototype.getProperties=rw.prototype.N;rw.prototype.set=rw.prototype.set;rw.prototype.setProperties=rw.prototype.H;rw.prototype.unset=rw.prototype.R;rw.prototype.changed=rw.prototype.v;rw.prototype.dispatchEvent=rw.prototype.b;rw.prototype.getRevision=rw.prototype.K;rw.prototype.on=rw.prototype.I;rw.prototype.once=rw.prototype.L;rw.prototype.un=rw.prototype.J;rw.prototype.unByKey=rw.prototype.M;tw.prototype.getAttributions=tw.prototype.va;
-tw.prototype.getLogo=tw.prototype.ua;tw.prototype.getProjection=tw.prototype.wa;tw.prototype.getState=tw.prototype.U;tw.prototype.refresh=tw.prototype.ta;tw.prototype.setAttributions=tw.prototype.qa;tw.prototype.get=tw.prototype.get;tw.prototype.getKeys=tw.prototype.O;tw.prototype.getProperties=tw.prototype.N;tw.prototype.set=tw.prototype.set;tw.prototype.setProperties=tw.prototype.H;tw.prototype.unset=tw.prototype.R;tw.prototype.changed=tw.prototype.v;tw.prototype.dispatchEvent=tw.prototype.b;
-tw.prototype.getRevision=tw.prototype.K;tw.prototype.on=tw.prototype.I;tw.prototype.once=tw.prototype.L;tw.prototype.un=tw.prototype.J;tw.prototype.unByKey=tw.prototype.M;yw.prototype.type=yw.prototype.type;yw.prototype.target=yw.prototype.target;yw.prototype.preventDefault=yw.prototype.preventDefault;yw.prototype.stopPropagation=yw.prototype.stopPropagation;Bw.prototype.setRenderReprojectionEdges=Bw.prototype.Bb;Bw.prototype.setTileGridForProjection=Bw.prototype.Cb;
-Bw.prototype.getTileLoadFunction=Bw.prototype.fb;Bw.prototype.getTileUrlFunction=Bw.prototype.hb;Bw.prototype.getUrls=Bw.prototype.ib;Bw.prototype.setTileLoadFunction=Bw.prototype.nb;Bw.prototype.setTileUrlFunction=Bw.prototype.Ta;Bw.prototype.setUrl=Bw.prototype.Ya;Bw.prototype.setUrls=Bw.prototype.Ua;Bw.prototype.getTileGrid=Bw.prototype.Ra;Bw.prototype.refresh=Bw.prototype.ta;Bw.prototype.getAttributions=Bw.prototype.va;Bw.prototype.getLogo=Bw.prototype.ua;Bw.prototype.getProjection=Bw.prototype.wa;
-Bw.prototype.getState=Bw.prototype.U;Bw.prototype.setAttributions=Bw.prototype.qa;Bw.prototype.get=Bw.prototype.get;Bw.prototype.getKeys=Bw.prototype.O;Bw.prototype.getProperties=Bw.prototype.N;Bw.prototype.set=Bw.prototype.set;Bw.prototype.setProperties=Bw.prototype.H;Bw.prototype.unset=Bw.prototype.R;Bw.prototype.changed=Bw.prototype.v;Bw.prototype.dispatchEvent=Bw.prototype.b;Bw.prototype.getRevision=Bw.prototype.K;Bw.prototype.on=Bw.prototype.I;Bw.prototype.once=Bw.prototype.L;
-Bw.prototype.un=Bw.prototype.J;Bw.prototype.unByKey=Bw.prototype.M;Xv.prototype.type=Xv.prototype.type;Xv.prototype.target=Xv.prototype.target;Xv.prototype.preventDefault=Xv.prototype.preventDefault;Xv.prototype.stopPropagation=Xv.prototype.stopPropagation;Fw.prototype.setRenderReprojectionEdges=Fw.prototype.Bb;Fw.prototype.setTileGridForProjection=Fw.prototype.Cb;Fw.prototype.getTileLoadFunction=Fw.prototype.fb;Fw.prototype.getTileUrlFunction=Fw.prototype.hb;Fw.prototype.getUrls=Fw.prototype.ib;
-Fw.prototype.setTileLoadFunction=Fw.prototype.nb;Fw.prototype.setTileUrlFunction=Fw.prototype.Ta;Fw.prototype.setUrl=Fw.prototype.Ya;Fw.prototype.setUrls=Fw.prototype.Ua;Fw.prototype.getTileGrid=Fw.prototype.Ra;Fw.prototype.refresh=Fw.prototype.ta;Fw.prototype.getAttributions=Fw.prototype.va;Fw.prototype.getLogo=Fw.prototype.ua;Fw.prototype.getProjection=Fw.prototype.wa;Fw.prototype.getState=Fw.prototype.U;Fw.prototype.setAttributions=Fw.prototype.qa;Fw.prototype.get=Fw.prototype.get;
-Fw.prototype.getKeys=Fw.prototype.O;Fw.prototype.getProperties=Fw.prototype.N;Fw.prototype.set=Fw.prototype.set;Fw.prototype.setProperties=Fw.prototype.H;Fw.prototype.unset=Fw.prototype.R;Fw.prototype.changed=Fw.prototype.v;Fw.prototype.dispatchEvent=Fw.prototype.b;Fw.prototype.getRevision=Fw.prototype.K;Fw.prototype.on=Fw.prototype.I;Fw.prototype.once=Fw.prototype.L;Fw.prototype.un=Fw.prototype.J;Fw.prototype.unByKey=Fw.prototype.M;Hw.prototype.getTileGrid=Hw.prototype.Ra;Hw.prototype.refresh=Hw.prototype.ta;
-Hw.prototype.getAttributions=Hw.prototype.va;Hw.prototype.getLogo=Hw.prototype.ua;Hw.prototype.getProjection=Hw.prototype.wa;Hw.prototype.getState=Hw.prototype.U;Hw.prototype.setAttributions=Hw.prototype.qa;Hw.prototype.get=Hw.prototype.get;Hw.prototype.getKeys=Hw.prototype.O;Hw.prototype.getProperties=Hw.prototype.N;Hw.prototype.set=Hw.prototype.set;Hw.prototype.setProperties=Hw.prototype.H;Hw.prototype.unset=Hw.prototype.R;Hw.prototype.changed=Hw.prototype.v;Hw.prototype.dispatchEvent=Hw.prototype.b;
-Hw.prototype.getRevision=Hw.prototype.K;Hw.prototype.on=Hw.prototype.I;Hw.prototype.once=Hw.prototype.L;Hw.prototype.un=Hw.prototype.J;Hw.prototype.unByKey=Hw.prototype.M;Jw.prototype.setRenderReprojectionEdges=Jw.prototype.Bb;Jw.prototype.setTileGridForProjection=Jw.prototype.Cb;Jw.prototype.getTileLoadFunction=Jw.prototype.fb;Jw.prototype.getTileUrlFunction=Jw.prototype.hb;Jw.prototype.getUrls=Jw.prototype.ib;Jw.prototype.setTileLoadFunction=Jw.prototype.nb;Jw.prototype.setTileUrlFunction=Jw.prototype.Ta;
-Jw.prototype.setUrl=Jw.prototype.Ya;Jw.prototype.setUrls=Jw.prototype.Ua;Jw.prototype.getTileGrid=Jw.prototype.Ra;Jw.prototype.refresh=Jw.prototype.ta;Jw.prototype.getAttributions=Jw.prototype.va;Jw.prototype.getLogo=Jw.prototype.ua;Jw.prototype.getProjection=Jw.prototype.wa;Jw.prototype.getState=Jw.prototype.U;Jw.prototype.setAttributions=Jw.prototype.qa;Jw.prototype.get=Jw.prototype.get;Jw.prototype.getKeys=Jw.prototype.O;Jw.prototype.getProperties=Jw.prototype.N;Jw.prototype.set=Jw.prototype.set;
-Jw.prototype.setProperties=Jw.prototype.H;Jw.prototype.unset=Jw.prototype.R;Jw.prototype.changed=Jw.prototype.v;Jw.prototype.dispatchEvent=Jw.prototype.b;Jw.prototype.getRevision=Jw.prototype.K;Jw.prototype.on=Jw.prototype.I;Jw.prototype.once=Jw.prototype.L;Jw.prototype.un=Jw.prototype.J;Jw.prototype.unByKey=Jw.prototype.M;Kw.prototype.getTileGrid=Kw.prototype.Ra;Kw.prototype.refresh=Kw.prototype.ta;Kw.prototype.getAttributions=Kw.prototype.va;Kw.prototype.getLogo=Kw.prototype.ua;
-Kw.prototype.getProjection=Kw.prototype.wa;Kw.prototype.getState=Kw.prototype.U;Kw.prototype.setAttributions=Kw.prototype.qa;Kw.prototype.get=Kw.prototype.get;Kw.prototype.getKeys=Kw.prototype.O;Kw.prototype.getProperties=Kw.prototype.N;Kw.prototype.set=Kw.prototype.set;Kw.prototype.setProperties=Kw.prototype.H;Kw.prototype.unset=Kw.prototype.R;Kw.prototype.changed=Kw.prototype.v;Kw.prototype.dispatchEvent=Kw.prototype.b;Kw.prototype.getRevision=Kw.prototype.K;Kw.prototype.on=Kw.prototype.I;
-Kw.prototype.once=Kw.prototype.L;Kw.prototype.un=Kw.prototype.J;Kw.prototype.unByKey=Kw.prototype.M;Ow.prototype.setRenderReprojectionEdges=Ow.prototype.Bb;Ow.prototype.setTileGridForProjection=Ow.prototype.Cb;Ow.prototype.getTileLoadFunction=Ow.prototype.fb;Ow.prototype.getTileUrlFunction=Ow.prototype.hb;Ow.prototype.getUrls=Ow.prototype.ib;Ow.prototype.setTileLoadFunction=Ow.prototype.nb;Ow.prototype.setTileUrlFunction=Ow.prototype.Ta;Ow.prototype.setUrl=Ow.prototype.Ya;Ow.prototype.setUrls=Ow.prototype.Ua;
-Ow.prototype.getTileGrid=Ow.prototype.Ra;Ow.prototype.refresh=Ow.prototype.ta;Ow.prototype.getAttributions=Ow.prototype.va;Ow.prototype.getLogo=Ow.prototype.ua;Ow.prototype.getProjection=Ow.prototype.wa;Ow.prototype.getState=Ow.prototype.U;Ow.prototype.setAttributions=Ow.prototype.qa;Ow.prototype.get=Ow.prototype.get;Ow.prototype.getKeys=Ow.prototype.O;Ow.prototype.getProperties=Ow.prototype.N;Ow.prototype.set=Ow.prototype.set;Ow.prototype.setProperties=Ow.prototype.H;Ow.prototype.unset=Ow.prototype.R;
-Ow.prototype.changed=Ow.prototype.v;Ow.prototype.dispatchEvent=Ow.prototype.b;Ow.prototype.getRevision=Ow.prototype.K;Ow.prototype.on=Ow.prototype.I;Ow.prototype.once=Ow.prototype.L;Ow.prototype.un=Ow.prototype.J;Ow.prototype.unByKey=Ow.prototype.M;mu.prototype.type=mu.prototype.type;mu.prototype.target=mu.prototype.target;mu.prototype.preventDefault=mu.prototype.preventDefault;mu.prototype.stopPropagation=mu.prototype.stopPropagation;Uw.prototype.getTileLoadFunction=Uw.prototype.fb;
-Uw.prototype.getTileUrlFunction=Uw.prototype.hb;Uw.prototype.getUrls=Uw.prototype.ib;Uw.prototype.setTileLoadFunction=Uw.prototype.nb;Uw.prototype.setTileUrlFunction=Uw.prototype.Ta;Uw.prototype.setUrl=Uw.prototype.Ya;Uw.prototype.setUrls=Uw.prototype.Ua;Uw.prototype.getTileGrid=Uw.prototype.Ra;Uw.prototype.refresh=Uw.prototype.ta;Uw.prototype.getAttributions=Uw.prototype.va;Uw.prototype.getLogo=Uw.prototype.ua;Uw.prototype.getProjection=Uw.prototype.wa;Uw.prototype.getState=Uw.prototype.U;
-Uw.prototype.setAttributions=Uw.prototype.qa;Uw.prototype.get=Uw.prototype.get;Uw.prototype.getKeys=Uw.prototype.O;Uw.prototype.getProperties=Uw.prototype.N;Uw.prototype.set=Uw.prototype.set;Uw.prototype.setProperties=Uw.prototype.H;Uw.prototype.unset=Uw.prototype.R;Uw.prototype.changed=Uw.prototype.v;Uw.prototype.dispatchEvent=Uw.prototype.b;Uw.prototype.getRevision=Uw.prototype.K;Uw.prototype.on=Uw.prototype.I;Uw.prototype.once=Uw.prototype.L;Uw.prototype.un=Uw.prototype.J;
-Uw.prototype.unByKey=Uw.prototype.M;Y.prototype.setRenderReprojectionEdges=Y.prototype.Bb;Y.prototype.setTileGridForProjection=Y.prototype.Cb;Y.prototype.getTileLoadFunction=Y.prototype.fb;Y.prototype.getTileUrlFunction=Y.prototype.hb;Y.prototype.getUrls=Y.prototype.ib;Y.prototype.setTileLoadFunction=Y.prototype.nb;Y.prototype.setTileUrlFunction=Y.prototype.Ta;Y.prototype.setUrl=Y.prototype.Ya;Y.prototype.setUrls=Y.prototype.Ua;Y.prototype.getTileGrid=Y.prototype.Ra;Y.prototype.refresh=Y.prototype.ta;
-Y.prototype.getAttributions=Y.prototype.va;Y.prototype.getLogo=Y.prototype.ua;Y.prototype.getProjection=Y.prototype.wa;Y.prototype.getState=Y.prototype.U;Y.prototype.setAttributions=Y.prototype.qa;Y.prototype.get=Y.prototype.get;Y.prototype.getKeys=Y.prototype.O;Y.prototype.getProperties=Y.prototype.N;Y.prototype.set=Y.prototype.set;Y.prototype.setProperties=Y.prototype.H;Y.prototype.unset=Y.prototype.R;Y.prototype.changed=Y.prototype.v;Y.prototype.dispatchEvent=Y.prototype.b;
-Y.prototype.getRevision=Y.prototype.K;Y.prototype.on=Y.prototype.I;Y.prototype.once=Y.prototype.L;Y.prototype.un=Y.prototype.J;Y.prototype.unByKey=Y.prototype.M;$w.prototype.setRenderReprojectionEdges=$w.prototype.Bb;$w.prototype.setTileGridForProjection=$w.prototype.Cb;$w.prototype.getTileLoadFunction=$w.prototype.fb;$w.prototype.getTileUrlFunction=$w.prototype.hb;$w.prototype.getUrls=$w.prototype.ib;$w.prototype.setTileLoadFunction=$w.prototype.nb;$w.prototype.setTileUrlFunction=$w.prototype.Ta;
-$w.prototype.setUrl=$w.prototype.Ya;$w.prototype.setUrls=$w.prototype.Ua;$w.prototype.getTileGrid=$w.prototype.Ra;$w.prototype.refresh=$w.prototype.ta;$w.prototype.getAttributions=$w.prototype.va;$w.prototype.getLogo=$w.prototype.ua;$w.prototype.getProjection=$w.prototype.wa;$w.prototype.getState=$w.prototype.U;$w.prototype.setAttributions=$w.prototype.qa;$w.prototype.get=$w.prototype.get;$w.prototype.getKeys=$w.prototype.O;$w.prototype.getProperties=$w.prototype.N;$w.prototype.set=$w.prototype.set;
-$w.prototype.setProperties=$w.prototype.H;$w.prototype.unset=$w.prototype.R;$w.prototype.changed=$w.prototype.v;$w.prototype.dispatchEvent=$w.prototype.b;$w.prototype.getRevision=$w.prototype.K;$w.prototype.on=$w.prototype.I;$w.prototype.once=$w.prototype.L;$w.prototype.un=$w.prototype.J;$w.prototype.unByKey=$w.prototype.M;Mv.prototype.getTileCoord=Mv.prototype.i;Mv.prototype.load=Mv.prototype.load;Vi.prototype.changed=Vi.prototype.v;Vi.prototype.dispatchEvent=Vi.prototype.b;
-Vi.prototype.getRevision=Vi.prototype.K;Vi.prototype.on=Vi.prototype.I;Vi.prototype.once=Vi.prototype.L;Vi.prototype.un=Vi.prototype.J;Vi.prototype.unByKey=Vi.prototype.M;dl.prototype.changed=dl.prototype.v;dl.prototype.dispatchEvent=dl.prototype.b;dl.prototype.getRevision=dl.prototype.K;dl.prototype.on=dl.prototype.I;dl.prototype.once=dl.prototype.L;dl.prototype.un=dl.prototype.J;dl.prototype.unByKey=dl.prototype.M;gl.prototype.changed=gl.prototype.v;gl.prototype.dispatchEvent=gl.prototype.b;
-gl.prototype.getRevision=gl.prototype.K;gl.prototype.on=gl.prototype.I;gl.prototype.once=gl.prototype.L;gl.prototype.un=gl.prototype.J;gl.prototype.unByKey=gl.prototype.M;pl.prototype.changed=pl.prototype.v;pl.prototype.dispatchEvent=pl.prototype.b;pl.prototype.getRevision=pl.prototype.K;pl.prototype.on=pl.prototype.I;pl.prototype.once=pl.prototype.L;pl.prototype.un=pl.prototype.J;pl.prototype.unByKey=pl.prototype.M;rl.prototype.changed=rl.prototype.v;rl.prototype.dispatchEvent=rl.prototype.b;
-rl.prototype.getRevision=rl.prototype.K;rl.prototype.on=rl.prototype.I;rl.prototype.once=rl.prototype.L;rl.prototype.un=rl.prototype.J;rl.prototype.unByKey=rl.prototype.M;dj.prototype.changed=dj.prototype.v;dj.prototype.dispatchEvent=dj.prototype.b;dj.prototype.getRevision=dj.prototype.K;dj.prototype.on=dj.prototype.I;dj.prototype.once=dj.prototype.L;dj.prototype.un=dj.prototype.J;dj.prototype.unByKey=dj.prototype.M;gk.prototype.changed=gk.prototype.v;gk.prototype.dispatchEvent=gk.prototype.b;
-gk.prototype.getRevision=gk.prototype.K;gk.prototype.on=gk.prototype.I;gk.prototype.once=gk.prototype.L;gk.prototype.un=gk.prototype.J;gk.prototype.unByKey=gk.prototype.M;hk.prototype.changed=hk.prototype.v;hk.prototype.dispatchEvent=hk.prototype.b;hk.prototype.getRevision=hk.prototype.K;hk.prototype.on=hk.prototype.I;hk.prototype.once=hk.prototype.L;hk.prototype.un=hk.prototype.J;hk.prototype.unByKey=hk.prototype.M;jk.prototype.changed=jk.prototype.v;jk.prototype.dispatchEvent=jk.prototype.b;
-jk.prototype.getRevision=jk.prototype.K;jk.prototype.on=jk.prototype.I;jk.prototype.once=jk.prototype.L;jk.prototype.un=jk.prototype.J;jk.prototype.unByKey=jk.prototype.M;kk.prototype.changed=kk.prototype.v;kk.prototype.dispatchEvent=kk.prototype.b;kk.prototype.getRevision=kk.prototype.K;kk.prototype.on=kk.prototype.I;kk.prototype.once=kk.prototype.L;kk.prototype.un=kk.prototype.J;kk.prototype.unByKey=kk.prototype.M;Ih.prototype.type=Ih.prototype.type;Ih.prototype.target=Ih.prototype.target;
-Ih.prototype.preventDefault=Ih.prototype.preventDefault;Ih.prototype.stopPropagation=Ih.prototype.stopPropagation;Df.prototype.type=Df.prototype.type;Df.prototype.target=Df.prototype.target;Df.prototype.preventDefault=Df.prototype.preventDefault;Df.prototype.stopPropagation=Df.prototype.stopPropagation;vh.prototype.get=vh.prototype.get;vh.prototype.getKeys=vh.prototype.O;vh.prototype.getProperties=vh.prototype.N;vh.prototype.set=vh.prototype.set;vh.prototype.setProperties=vh.prototype.H;
-vh.prototype.unset=vh.prototype.R;vh.prototype.changed=vh.prototype.v;vh.prototype.dispatchEvent=vh.prototype.b;vh.prototype.getRevision=vh.prototype.K;vh.prototype.on=vh.prototype.I;vh.prototype.once=vh.prototype.L;vh.prototype.un=vh.prototype.J;vh.prototype.unByKey=vh.prototype.M;xh.prototype.getExtent=xh.prototype.D;xh.prototype.getMaxResolution=xh.prototype.Pb;xh.prototype.getMinResolution=xh.prototype.Qb;xh.prototype.getOpacity=xh.prototype.Rb;xh.prototype.getVisible=xh.prototype.zb;
-xh.prototype.getZIndex=xh.prototype.Sb;xh.prototype.setExtent=xh.prototype.fc;xh.prototype.setMaxResolution=xh.prototype.lc;xh.prototype.setMinResolution=xh.prototype.mc;xh.prototype.setOpacity=xh.prototype.gc;xh.prototype.setVisible=xh.prototype.hc;xh.prototype.setZIndex=xh.prototype.ic;xh.prototype.get=xh.prototype.get;xh.prototype.getKeys=xh.prototype.O;xh.prototype.getProperties=xh.prototype.N;xh.prototype.set=xh.prototype.set;xh.prototype.setProperties=xh.prototype.H;xh.prototype.unset=xh.prototype.R;
-xh.prototype.changed=xh.prototype.v;xh.prototype.dispatchEvent=xh.prototype.b;xh.prototype.getRevision=xh.prototype.K;xh.prototype.on=xh.prototype.I;xh.prototype.once=xh.prototype.L;xh.prototype.un=xh.prototype.J;xh.prototype.unByKey=xh.prototype.M;Jh.prototype.getExtent=Jh.prototype.D;Jh.prototype.getMaxResolution=Jh.prototype.Pb;Jh.prototype.getMinResolution=Jh.prototype.Qb;Jh.prototype.getOpacity=Jh.prototype.Rb;Jh.prototype.getVisible=Jh.prototype.zb;Jh.prototype.getZIndex=Jh.prototype.Sb;
-Jh.prototype.setExtent=Jh.prototype.fc;Jh.prototype.setMaxResolution=Jh.prototype.lc;Jh.prototype.setMinResolution=Jh.prototype.mc;Jh.prototype.setOpacity=Jh.prototype.gc;Jh.prototype.setVisible=Jh.prototype.hc;Jh.prototype.setZIndex=Jh.prototype.ic;Jh.prototype.get=Jh.prototype.get;Jh.prototype.getKeys=Jh.prototype.O;Jh.prototype.getProperties=Jh.prototype.N;Jh.prototype.set=Jh.prototype.set;Jh.prototype.setProperties=Jh.prototype.H;Jh.prototype.unset=Jh.prototype.R;Jh.prototype.changed=Jh.prototype.v;
-Jh.prototype.dispatchEvent=Jh.prototype.b;Jh.prototype.getRevision=Jh.prototype.K;Jh.prototype.on=Jh.prototype.I;Jh.prototype.once=Jh.prototype.L;Jh.prototype.un=Jh.prototype.J;Jh.prototype.unByKey=Jh.prototype.M;E.prototype.setMap=E.prototype.setMap;E.prototype.setSource=E.prototype.Ec;E.prototype.getExtent=E.prototype.D;E.prototype.getMaxResolution=E.prototype.Pb;E.prototype.getMinResolution=E.prototype.Qb;E.prototype.getOpacity=E.prototype.Rb;E.prototype.getVisible=E.prototype.zb;
-E.prototype.getZIndex=E.prototype.Sb;E.prototype.setExtent=E.prototype.fc;E.prototype.setMaxResolution=E.prototype.lc;E.prototype.setMinResolution=E.prototype.mc;E.prototype.setOpacity=E.prototype.gc;E.prototype.setVisible=E.prototype.hc;E.prototype.setZIndex=E.prototype.ic;E.prototype.get=E.prototype.get;E.prototype.getKeys=E.prototype.O;E.prototype.getProperties=E.prototype.N;E.prototype.set=E.prototype.set;E.prototype.setProperties=E.prototype.H;E.prototype.unset=E.prototype.R;
-E.prototype.changed=E.prototype.v;E.prototype.dispatchEvent=E.prototype.b;E.prototype.getRevision=E.prototype.K;E.prototype.on=E.prototype.I;E.prototype.once=E.prototype.L;E.prototype.un=E.prototype.J;E.prototype.unByKey=E.prototype.M;U.prototype.getSource=U.prototype.ga;U.prototype.getStyle=U.prototype.G;U.prototype.getStyleFunction=U.prototype.S;U.prototype.setStyle=U.prototype.l;U.prototype.setMap=U.prototype.setMap;U.prototype.setSource=U.prototype.Ec;U.prototype.getExtent=U.prototype.D;
-U.prototype.getMaxResolution=U.prototype.Pb;U.prototype.getMinResolution=U.prototype.Qb;U.prototype.getOpacity=U.prototype.Rb;U.prototype.getVisible=U.prototype.zb;U.prototype.getZIndex=U.prototype.Sb;U.prototype.setExtent=U.prototype.fc;U.prototype.setMaxResolution=U.prototype.lc;U.prototype.setMinResolution=U.prototype.mc;U.prototype.setOpacity=U.prototype.gc;U.prototype.setVisible=U.prototype.hc;U.prototype.setZIndex=U.prototype.ic;U.prototype.get=U.prototype.get;U.prototype.getKeys=U.prototype.O;
-U.prototype.getProperties=U.prototype.N;U.prototype.set=U.prototype.set;U.prototype.setProperties=U.prototype.H;U.prototype.unset=U.prototype.R;U.prototype.changed=U.prototype.v;U.prototype.dispatchEvent=U.prototype.b;U.prototype.getRevision=U.prototype.K;U.prototype.on=U.prototype.I;U.prototype.once=U.prototype.L;U.prototype.un=U.prototype.J;U.prototype.unByKey=U.prototype.M;di.prototype.setMap=di.prototype.setMap;di.prototype.setSource=di.prototype.Ec;di.prototype.getExtent=di.prototype.D;
-di.prototype.getMaxResolution=di.prototype.Pb;di.prototype.getMinResolution=di.prototype.Qb;di.prototype.getOpacity=di.prototype.Rb;di.prototype.getVisible=di.prototype.zb;di.prototype.getZIndex=di.prototype.Sb;di.prototype.setExtent=di.prototype.fc;di.prototype.setMaxResolution=di.prototype.lc;di.prototype.setMinResolution=di.prototype.mc;di.prototype.setOpacity=di.prototype.gc;di.prototype.setVisible=di.prototype.hc;di.prototype.setZIndex=di.prototype.ic;di.prototype.get=di.prototype.get;
-di.prototype.getKeys=di.prototype.O;di.prototype.getProperties=di.prototype.N;di.prototype.set=di.prototype.set;di.prototype.setProperties=di.prototype.H;di.prototype.unset=di.prototype.R;di.prototype.changed=di.prototype.v;di.prototype.dispatchEvent=di.prototype.b;di.prototype.getRevision=di.prototype.K;di.prototype.on=di.prototype.I;di.prototype.once=di.prototype.L;di.prototype.un=di.prototype.J;di.prototype.unByKey=di.prototype.M;D.prototype.setMap=D.prototype.setMap;D.prototype.setSource=D.prototype.Ec;
-D.prototype.getExtent=D.prototype.D;D.prototype.getMaxResolution=D.prototype.Pb;D.prototype.getMinResolution=D.prototype.Qb;D.prototype.getOpacity=D.prototype.Rb;D.prototype.getVisible=D.prototype.zb;D.prototype.getZIndex=D.prototype.Sb;D.prototype.setExtent=D.prototype.fc;D.prototype.setMaxResolution=D.prototype.lc;D.prototype.setMinResolution=D.prototype.mc;D.prototype.setOpacity=D.prototype.gc;D.prototype.setVisible=D.prototype.hc;D.prototype.setZIndex=D.prototype.ic;D.prototype.get=D.prototype.get;
-D.prototype.getKeys=D.prototype.O;D.prototype.getProperties=D.prototype.N;D.prototype.set=D.prototype.set;D.prototype.setProperties=D.prototype.H;D.prototype.unset=D.prototype.R;D.prototype.changed=D.prototype.v;D.prototype.dispatchEvent=D.prototype.b;D.prototype.getRevision=D.prototype.K;D.prototype.on=D.prototype.I;D.prototype.once=D.prototype.L;D.prototype.un=D.prototype.J;D.prototype.unByKey=D.prototype.M;G.prototype.getSource=G.prototype.ga;G.prototype.getStyle=G.prototype.G;
-G.prototype.getStyleFunction=G.prototype.S;G.prototype.setStyle=G.prototype.l;G.prototype.setMap=G.prototype.setMap;G.prototype.setSource=G.prototype.Ec;G.prototype.getExtent=G.prototype.D;G.prototype.getMaxResolution=G.prototype.Pb;G.prototype.getMinResolution=G.prototype.Qb;G.prototype.getOpacity=G.prototype.Rb;G.prototype.getVisible=G.prototype.zb;G.prototype.getZIndex=G.prototype.Sb;G.prototype.setExtent=G.prototype.fc;G.prototype.setMaxResolution=G.prototype.lc;G.prototype.setMinResolution=G.prototype.mc;
-G.prototype.setOpacity=G.prototype.gc;G.prototype.setVisible=G.prototype.hc;G.prototype.setZIndex=G.prototype.ic;G.prototype.get=G.prototype.get;G.prototype.getKeys=G.prototype.O;G.prototype.getProperties=G.prototype.N;G.prototype.set=G.prototype.set;G.prototype.setProperties=G.prototype.H;G.prototype.unset=G.prototype.R;G.prototype.changed=G.prototype.v;G.prototype.dispatchEvent=G.prototype.b;G.prototype.getRevision=G.prototype.K;G.prototype.on=G.prototype.I;G.prototype.once=G.prototype.L;
-G.prototype.un=G.prototype.J;G.prototype.unByKey=G.prototype.M;tg.prototype.get=tg.prototype.get;tg.prototype.getKeys=tg.prototype.O;tg.prototype.getProperties=tg.prototype.N;tg.prototype.set=tg.prototype.set;tg.prototype.setProperties=tg.prototype.H;tg.prototype.unset=tg.prototype.R;tg.prototype.changed=tg.prototype.v;tg.prototype.dispatchEvent=tg.prototype.b;tg.prototype.getRevision=tg.prototype.K;tg.prototype.on=tg.prototype.I;tg.prototype.once=tg.prototype.L;tg.prototype.un=tg.prototype.J;
-tg.prototype.unByKey=tg.prototype.M;yg.prototype.getActive=yg.prototype.f;yg.prototype.getMap=yg.prototype.c;yg.prototype.setActive=yg.prototype.Ba;yg.prototype.get=yg.prototype.get;yg.prototype.getKeys=yg.prototype.O;yg.prototype.getProperties=yg.prototype.N;yg.prototype.set=yg.prototype.set;yg.prototype.setProperties=yg.prototype.H;yg.prototype.unset=yg.prototype.R;yg.prototype.changed=yg.prototype.v;yg.prototype.dispatchEvent=yg.prototype.b;yg.prototype.getRevision=yg.prototype.K;
-yg.prototype.on=yg.prototype.I;yg.prototype.once=yg.prototype.L;yg.prototype.un=yg.prototype.J;yg.prototype.unByKey=yg.prototype.M;Tt.prototype.getActive=Tt.prototype.f;Tt.prototype.getMap=Tt.prototype.c;Tt.prototype.setActive=Tt.prototype.Ba;Tt.prototype.get=Tt.prototype.get;Tt.prototype.getKeys=Tt.prototype.O;Tt.prototype.getProperties=Tt.prototype.N;Tt.prototype.set=Tt.prototype.set;Tt.prototype.setProperties=Tt.prototype.H;Tt.prototype.unset=Tt.prototype.R;Tt.prototype.changed=Tt.prototype.v;
-Tt.prototype.dispatchEvent=Tt.prototype.b;Tt.prototype.getRevision=Tt.prototype.K;Tt.prototype.on=Tt.prototype.I;Tt.prototype.once=Tt.prototype.L;Tt.prototype.un=Tt.prototype.J;Tt.prototype.unByKey=Tt.prototype.M;Wt.prototype.type=Wt.prototype.type;Wt.prototype.target=Wt.prototype.target;Wt.prototype.preventDefault=Wt.prototype.preventDefault;Wt.prototype.stopPropagation=Wt.prototype.stopPropagation;Jg.prototype.getActive=Jg.prototype.f;Jg.prototype.getMap=Jg.prototype.c;Jg.prototype.setActive=Jg.prototype.Ba;
-Jg.prototype.get=Jg.prototype.get;Jg.prototype.getKeys=Jg.prototype.O;Jg.prototype.getProperties=Jg.prototype.N;Jg.prototype.set=Jg.prototype.set;Jg.prototype.setProperties=Jg.prototype.H;Jg.prototype.unset=Jg.prototype.R;Jg.prototype.changed=Jg.prototype.v;Jg.prototype.dispatchEvent=Jg.prototype.b;Jg.prototype.getRevision=Jg.prototype.K;Jg.prototype.on=Jg.prototype.I;Jg.prototype.once=Jg.prototype.L;Jg.prototype.un=Jg.prototype.J;Jg.prototype.unByKey=Jg.prototype.M;Xg.prototype.getActive=Xg.prototype.f;
-Xg.prototype.getMap=Xg.prototype.c;Xg.prototype.setActive=Xg.prototype.Ba;Xg.prototype.get=Xg.prototype.get;Xg.prototype.getKeys=Xg.prototype.O;Xg.prototype.getProperties=Xg.prototype.N;Xg.prototype.set=Xg.prototype.set;Xg.prototype.setProperties=Xg.prototype.H;Xg.prototype.unset=Xg.prototype.R;Xg.prototype.changed=Xg.prototype.v;Xg.prototype.dispatchEvent=Xg.prototype.b;Xg.prototype.getRevision=Xg.prototype.K;Xg.prototype.on=Xg.prototype.I;Xg.prototype.once=Xg.prototype.L;Xg.prototype.un=Xg.prototype.J;
-Xg.prototype.unByKey=Xg.prototype.M;bh.prototype.type=bh.prototype.type;bh.prototype.target=bh.prototype.target;bh.prototype.preventDefault=bh.prototype.preventDefault;bh.prototype.stopPropagation=bh.prototype.stopPropagation;Mg.prototype.getActive=Mg.prototype.f;Mg.prototype.getMap=Mg.prototype.c;Mg.prototype.setActive=Mg.prototype.Ba;Mg.prototype.get=Mg.prototype.get;Mg.prototype.getKeys=Mg.prototype.O;Mg.prototype.getProperties=Mg.prototype.N;Mg.prototype.set=Mg.prototype.set;
-Mg.prototype.setProperties=Mg.prototype.H;Mg.prototype.unset=Mg.prototype.R;Mg.prototype.changed=Mg.prototype.v;Mg.prototype.dispatchEvent=Mg.prototype.b;Mg.prototype.getRevision=Mg.prototype.K;Mg.prototype.on=Mg.prototype.I;Mg.prototype.once=Mg.prototype.L;Mg.prototype.un=Mg.prototype.J;Mg.prototype.unByKey=Mg.prototype.M;Qg.prototype.getActive=Qg.prototype.f;Qg.prototype.getMap=Qg.prototype.c;Qg.prototype.setActive=Qg.prototype.Ba;Qg.prototype.get=Qg.prototype.get;Qg.prototype.getKeys=Qg.prototype.O;
-Qg.prototype.getProperties=Qg.prototype.N;Qg.prototype.set=Qg.prototype.set;Qg.prototype.setProperties=Qg.prototype.H;Qg.prototype.unset=Qg.prototype.R;Qg.prototype.changed=Qg.prototype.v;Qg.prototype.dispatchEvent=Qg.prototype.b;Qg.prototype.getRevision=Qg.prototype.K;Qg.prototype.on=Qg.prototype.I;Qg.prototype.once=Qg.prototype.L;Qg.prototype.un=Qg.prototype.J;Qg.prototype.unByKey=Qg.prototype.M;Yt.prototype.getActive=Yt.prototype.f;Yt.prototype.getMap=Yt.prototype.c;Yt.prototype.setActive=Yt.prototype.Ba;
-Yt.prototype.get=Yt.prototype.get;Yt.prototype.getKeys=Yt.prototype.O;Yt.prototype.getProperties=Yt.prototype.N;Yt.prototype.set=Yt.prototype.set;Yt.prototype.setProperties=Yt.prototype.H;Yt.prototype.unset=Yt.prototype.R;Yt.prototype.changed=Yt.prototype.v;Yt.prototype.dispatchEvent=Yt.prototype.b;Yt.prototype.getRevision=Yt.prototype.K;Yt.prototype.on=Yt.prototype.I;Yt.prototype.once=Yt.prototype.L;Yt.prototype.un=Yt.prototype.J;Yt.prototype.unByKey=Yt.prototype.M;fh.prototype.getGeometry=fh.prototype.V;
-fh.prototype.getActive=fh.prototype.f;fh.prototype.getMap=fh.prototype.c;fh.prototype.setActive=fh.prototype.Ba;fh.prototype.get=fh.prototype.get;fh.prototype.getKeys=fh.prototype.O;fh.prototype.getProperties=fh.prototype.N;fh.prototype.set=fh.prototype.set;fh.prototype.setProperties=fh.prototype.H;fh.prototype.unset=fh.prototype.R;fh.prototype.changed=fh.prototype.v;fh.prototype.dispatchEvent=fh.prototype.b;fh.prototype.getRevision=fh.prototype.K;fh.prototype.on=fh.prototype.I;
-fh.prototype.once=fh.prototype.L;fh.prototype.un=fh.prototype.J;fh.prototype.unByKey=fh.prototype.M;tu.prototype.getActive=tu.prototype.f;tu.prototype.getMap=tu.prototype.c;tu.prototype.setActive=tu.prototype.Ba;tu.prototype.get=tu.prototype.get;tu.prototype.getKeys=tu.prototype.O;tu.prototype.getProperties=tu.prototype.N;tu.prototype.set=tu.prototype.set;tu.prototype.setProperties=tu.prototype.H;tu.prototype.unset=tu.prototype.R;tu.prototype.changed=tu.prototype.v;tu.prototype.dispatchEvent=tu.prototype.b;
-tu.prototype.getRevision=tu.prototype.K;tu.prototype.on=tu.prototype.I;tu.prototype.once=tu.prototype.L;tu.prototype.un=tu.prototype.J;tu.prototype.unByKey=tu.prototype.M;Iu.prototype.type=Iu.prototype.type;Iu.prototype.target=Iu.prototype.target;Iu.prototype.preventDefault=Iu.prototype.preventDefault;Iu.prototype.stopPropagation=Iu.prototype.stopPropagation;Mu.prototype.getActive=Mu.prototype.f;Mu.prototype.getMap=Mu.prototype.c;Mu.prototype.setActive=Mu.prototype.Ba;Mu.prototype.get=Mu.prototype.get;
-Mu.prototype.getKeys=Mu.prototype.O;Mu.prototype.getProperties=Mu.prototype.N;Mu.prototype.set=Mu.prototype.set;Mu.prototype.setProperties=Mu.prototype.H;Mu.prototype.unset=Mu.prototype.R;Mu.prototype.changed=Mu.prototype.v;Mu.prototype.dispatchEvent=Mu.prototype.b;Mu.prototype.getRevision=Mu.prototype.K;Mu.prototype.on=Mu.prototype.I;Mu.prototype.once=Mu.prototype.L;Mu.prototype.un=Mu.prototype.J;Mu.prototype.unByKey=Mu.prototype.M;Xu.prototype.type=Xu.prototype.type;Xu.prototype.target=Xu.prototype.target;
-Xu.prototype.preventDefault=Xu.prototype.preventDefault;Xu.prototype.stopPropagation=Xu.prototype.stopPropagation;gh.prototype.getActive=gh.prototype.f;gh.prototype.getMap=gh.prototype.c;gh.prototype.setActive=gh.prototype.Ba;gh.prototype.get=gh.prototype.get;gh.prototype.getKeys=gh.prototype.O;gh.prototype.getProperties=gh.prototype.N;gh.prototype.set=gh.prototype.set;gh.prototype.setProperties=gh.prototype.H;gh.prototype.unset=gh.prototype.R;gh.prototype.changed=gh.prototype.v;
-gh.prototype.dispatchEvent=gh.prototype.b;gh.prototype.getRevision=gh.prototype.K;gh.prototype.on=gh.prototype.I;gh.prototype.once=gh.prototype.L;gh.prototype.un=gh.prototype.J;gh.prototype.unByKey=gh.prototype.M;ih.prototype.getActive=ih.prototype.f;ih.prototype.getMap=ih.prototype.c;ih.prototype.setActive=ih.prototype.Ba;ih.prototype.get=ih.prototype.get;ih.prototype.getKeys=ih.prototype.O;ih.prototype.getProperties=ih.prototype.N;ih.prototype.set=ih.prototype.set;ih.prototype.setProperties=ih.prototype.H;
-ih.prototype.unset=ih.prototype.R;ih.prototype.changed=ih.prototype.v;ih.prototype.dispatchEvent=ih.prototype.b;ih.prototype.getRevision=ih.prototype.K;ih.prototype.on=ih.prototype.I;ih.prototype.once=ih.prototype.L;ih.prototype.un=ih.prototype.J;ih.prototype.unByKey=ih.prototype.M;Zu.prototype.getActive=Zu.prototype.f;Zu.prototype.getMap=Zu.prototype.c;Zu.prototype.setActive=Zu.prototype.Ba;Zu.prototype.get=Zu.prototype.get;Zu.prototype.getKeys=Zu.prototype.O;Zu.prototype.getProperties=Zu.prototype.N;
-Zu.prototype.set=Zu.prototype.set;Zu.prototype.setProperties=Zu.prototype.H;Zu.prototype.unset=Zu.prototype.R;Zu.prototype.changed=Zu.prototype.v;Zu.prototype.dispatchEvent=Zu.prototype.b;Zu.prototype.getRevision=Zu.prototype.K;Zu.prototype.on=Zu.prototype.I;Zu.prototype.once=Zu.prototype.L;Zu.prototype.un=Zu.prototype.J;Zu.prototype.unByKey=Zu.prototype.M;gv.prototype.type=gv.prototype.type;gv.prototype.target=gv.prototype.target;gv.prototype.preventDefault=gv.prototype.preventDefault;
-gv.prototype.stopPropagation=gv.prototype.stopPropagation;kh.prototype.getActive=kh.prototype.f;kh.prototype.getMap=kh.prototype.c;kh.prototype.setActive=kh.prototype.Ba;kh.prototype.get=kh.prototype.get;kh.prototype.getKeys=kh.prototype.O;kh.prototype.getProperties=kh.prototype.N;kh.prototype.set=kh.prototype.set;kh.prototype.setProperties=kh.prototype.H;kh.prototype.unset=kh.prototype.R;kh.prototype.changed=kh.prototype.v;kh.prototype.dispatchEvent=kh.prototype.b;kh.prototype.getRevision=kh.prototype.K;
-kh.prototype.on=kh.prototype.I;kh.prototype.once=kh.prototype.L;kh.prototype.un=kh.prototype.J;kh.prototype.unByKey=kh.prototype.M;mh.prototype.getActive=mh.prototype.f;mh.prototype.getMap=mh.prototype.c;mh.prototype.setActive=mh.prototype.Ba;mh.prototype.get=mh.prototype.get;mh.prototype.getKeys=mh.prototype.O;mh.prototype.getProperties=mh.prototype.N;mh.prototype.set=mh.prototype.set;mh.prototype.setProperties=mh.prototype.H;mh.prototype.unset=mh.prototype.R;mh.prototype.changed=mh.prototype.v;
-mh.prototype.dispatchEvent=mh.prototype.b;mh.prototype.getRevision=mh.prototype.K;mh.prototype.on=mh.prototype.I;mh.prototype.once=mh.prototype.L;mh.prototype.un=mh.prototype.J;mh.prototype.unByKey=mh.prototype.M;qh.prototype.getActive=qh.prototype.f;qh.prototype.getMap=qh.prototype.c;qh.prototype.setActive=qh.prototype.Ba;qh.prototype.get=qh.prototype.get;qh.prototype.getKeys=qh.prototype.O;qh.prototype.getProperties=qh.prototype.N;qh.prototype.set=qh.prototype.set;qh.prototype.setProperties=qh.prototype.H;
-qh.prototype.unset=qh.prototype.R;qh.prototype.changed=qh.prototype.v;qh.prototype.dispatchEvent=qh.prototype.b;qh.prototype.getRevision=qh.prototype.K;qh.prototype.on=qh.prototype.I;qh.prototype.once=qh.prototype.L;qh.prototype.un=qh.prototype.J;qh.prototype.unByKey=qh.prototype.M;ov.prototype.getActive=ov.prototype.f;ov.prototype.getMap=ov.prototype.c;ov.prototype.setActive=ov.prototype.Ba;ov.prototype.get=ov.prototype.get;ov.prototype.getKeys=ov.prototype.O;ov.prototype.getProperties=ov.prototype.N;
-ov.prototype.set=ov.prototype.set;ov.prototype.setProperties=ov.prototype.H;ov.prototype.unset=ov.prototype.R;ov.prototype.changed=ov.prototype.v;ov.prototype.dispatchEvent=ov.prototype.b;ov.prototype.getRevision=ov.prototype.K;ov.prototype.on=ov.prototype.I;ov.prototype.once=ov.prototype.L;ov.prototype.un=ov.prototype.J;ov.prototype.unByKey=ov.prototype.M;rv.prototype.type=rv.prototype.type;rv.prototype.target=rv.prototype.target;rv.prototype.preventDefault=rv.prototype.preventDefault;
-rv.prototype.stopPropagation=rv.prototype.stopPropagation;tv.prototype.getActive=tv.prototype.f;tv.prototype.getMap=tv.prototype.c;tv.prototype.setActive=tv.prototype.Ba;tv.prototype.get=tv.prototype.get;tv.prototype.getKeys=tv.prototype.O;tv.prototype.getProperties=tv.prototype.N;tv.prototype.set=tv.prototype.set;tv.prototype.setProperties=tv.prototype.H;tv.prototype.unset=tv.prototype.R;tv.prototype.changed=tv.prototype.v;tv.prototype.dispatchEvent=tv.prototype.b;tv.prototype.getRevision=tv.prototype.K;
-tv.prototype.on=tv.prototype.I;tv.prototype.once=tv.prototype.L;tv.prototype.un=tv.prototype.J;tv.prototype.unByKey=tv.prototype.M;xv.prototype.getActive=xv.prototype.f;xv.prototype.getMap=xv.prototype.c;xv.prototype.setActive=xv.prototype.Ba;xv.prototype.get=xv.prototype.get;xv.prototype.getKeys=xv.prototype.O;xv.prototype.getProperties=xv.prototype.N;xv.prototype.set=xv.prototype.set;xv.prototype.setProperties=xv.prototype.H;xv.prototype.unset=xv.prototype.R;xv.prototype.changed=xv.prototype.v;
-xv.prototype.dispatchEvent=xv.prototype.b;xv.prototype.getRevision=xv.prototype.K;xv.prototype.on=xv.prototype.I;xv.prototype.once=xv.prototype.L;xv.prototype.un=xv.prototype.J;xv.prototype.unByKey=xv.prototype.M;Dv.prototype.type=Dv.prototype.type;Dv.prototype.target=Dv.prototype.target;Dv.prototype.preventDefault=Dv.prototype.preventDefault;Dv.prototype.stopPropagation=Dv.prototype.stopPropagation;Mc.prototype.get=Mc.prototype.get;Mc.prototype.getKeys=Mc.prototype.O;Mc.prototype.getProperties=Mc.prototype.N;
-Mc.prototype.set=Mc.prototype.set;Mc.prototype.setProperties=Mc.prototype.H;Mc.prototype.unset=Mc.prototype.R;Mc.prototype.changed=Mc.prototype.v;Mc.prototype.dispatchEvent=Mc.prototype.b;Mc.prototype.getRevision=Mc.prototype.K;Mc.prototype.on=Mc.prototype.I;Mc.prototype.once=Mc.prototype.L;Mc.prototype.un=Mc.prototype.J;Mc.prototype.unByKey=Mc.prototype.M;Oc.prototype.getClosestPoint=Oc.prototype.xb;Oc.prototype.intersectsCoordinate=Oc.prototype.jb;Oc.prototype.getExtent=Oc.prototype.D;
-Oc.prototype.rotate=Oc.prototype.rotate;Oc.prototype.scale=Oc.prototype.scale;Oc.prototype.simplify=Oc.prototype.Db;Oc.prototype.transform=Oc.prototype.lb;Oc.prototype.get=Oc.prototype.get;Oc.prototype.getKeys=Oc.prototype.O;Oc.prototype.getProperties=Oc.prototype.N;Oc.prototype.set=Oc.prototype.set;Oc.prototype.setProperties=Oc.prototype.H;Oc.prototype.unset=Oc.prototype.R;Oc.prototype.changed=Oc.prototype.v;Oc.prototype.dispatchEvent=Oc.prototype.b;Oc.prototype.getRevision=Oc.prototype.K;
-Oc.prototype.on=Oc.prototype.I;Oc.prototype.once=Oc.prototype.L;Oc.prototype.un=Oc.prototype.J;Oc.prototype.unByKey=Oc.prototype.M;Ht.prototype.getFirstCoordinate=Ht.prototype.Lb;Ht.prototype.getLastCoordinate=Ht.prototype.Mb;Ht.prototype.getLayout=Ht.prototype.Nb;Ht.prototype.rotate=Ht.prototype.rotate;Ht.prototype.scale=Ht.prototype.scale;Ht.prototype.getClosestPoint=Ht.prototype.xb;Ht.prototype.intersectsCoordinate=Ht.prototype.jb;Ht.prototype.getExtent=Ht.prototype.D;Ht.prototype.simplify=Ht.prototype.Db;
-Ht.prototype.get=Ht.prototype.get;Ht.prototype.getKeys=Ht.prototype.O;Ht.prototype.getProperties=Ht.prototype.N;Ht.prototype.set=Ht.prototype.set;Ht.prototype.setProperties=Ht.prototype.H;Ht.prototype.unset=Ht.prototype.R;Ht.prototype.changed=Ht.prototype.v;Ht.prototype.dispatchEvent=Ht.prototype.b;Ht.prototype.getRevision=Ht.prototype.K;Ht.prototype.on=Ht.prototype.I;Ht.prototype.once=Ht.prototype.L;Ht.prototype.un=Ht.prototype.J;Ht.prototype.unByKey=Ht.prototype.M;Gn.prototype.getClosestPoint=Gn.prototype.xb;
-Gn.prototype.intersectsCoordinate=Gn.prototype.jb;Gn.prototype.getExtent=Gn.prototype.D;Gn.prototype.rotate=Gn.prototype.rotate;Gn.prototype.scale=Gn.prototype.scale;Gn.prototype.simplify=Gn.prototype.Db;Gn.prototype.transform=Gn.prototype.lb;Gn.prototype.get=Gn.prototype.get;Gn.prototype.getKeys=Gn.prototype.O;Gn.prototype.getProperties=Gn.prototype.N;Gn.prototype.set=Gn.prototype.set;Gn.prototype.setProperties=Gn.prototype.H;Gn.prototype.unset=Gn.prototype.R;Gn.prototype.changed=Gn.prototype.v;
-Gn.prototype.dispatchEvent=Gn.prototype.b;Gn.prototype.getRevision=Gn.prototype.K;Gn.prototype.on=Gn.prototype.I;Gn.prototype.once=Gn.prototype.L;Gn.prototype.un=Gn.prototype.J;Gn.prototype.unByKey=Gn.prototype.M;gd.prototype.getFirstCoordinate=gd.prototype.Lb;gd.prototype.getLastCoordinate=gd.prototype.Mb;gd.prototype.getLayout=gd.prototype.Nb;gd.prototype.rotate=gd.prototype.rotate;gd.prototype.scale=gd.prototype.scale;gd.prototype.getClosestPoint=gd.prototype.xb;
-gd.prototype.intersectsCoordinate=gd.prototype.jb;gd.prototype.getExtent=gd.prototype.D;gd.prototype.simplify=gd.prototype.Db;gd.prototype.transform=gd.prototype.lb;gd.prototype.get=gd.prototype.get;gd.prototype.getKeys=gd.prototype.O;gd.prototype.getProperties=gd.prototype.N;gd.prototype.set=gd.prototype.set;gd.prototype.setProperties=gd.prototype.H;gd.prototype.unset=gd.prototype.R;gd.prototype.changed=gd.prototype.v;gd.prototype.dispatchEvent=gd.prototype.b;gd.prototype.getRevision=gd.prototype.K;
-gd.prototype.on=gd.prototype.I;gd.prototype.once=gd.prototype.L;gd.prototype.un=gd.prototype.J;gd.prototype.unByKey=gd.prototype.M;O.prototype.getFirstCoordinate=O.prototype.Lb;O.prototype.getLastCoordinate=O.prototype.Mb;O.prototype.getLayout=O.prototype.Nb;O.prototype.rotate=O.prototype.rotate;O.prototype.scale=O.prototype.scale;O.prototype.getClosestPoint=O.prototype.xb;O.prototype.intersectsCoordinate=O.prototype.jb;O.prototype.getExtent=O.prototype.D;O.prototype.simplify=O.prototype.Db;
-O.prototype.transform=O.prototype.lb;O.prototype.get=O.prototype.get;O.prototype.getKeys=O.prototype.O;O.prototype.getProperties=O.prototype.N;O.prototype.set=O.prototype.set;O.prototype.setProperties=O.prototype.H;O.prototype.unset=O.prototype.R;O.prototype.changed=O.prototype.v;O.prototype.dispatchEvent=O.prototype.b;O.prototype.getRevision=O.prototype.K;O.prototype.on=O.prototype.I;O.prototype.once=O.prototype.L;O.prototype.un=O.prototype.J;O.prototype.unByKey=O.prototype.M;
-P.prototype.getFirstCoordinate=P.prototype.Lb;P.prototype.getLastCoordinate=P.prototype.Mb;P.prototype.getLayout=P.prototype.Nb;P.prototype.rotate=P.prototype.rotate;P.prototype.scale=P.prototype.scale;P.prototype.getClosestPoint=P.prototype.xb;P.prototype.intersectsCoordinate=P.prototype.jb;P.prototype.getExtent=P.prototype.D;P.prototype.simplify=P.prototype.Db;P.prototype.transform=P.prototype.lb;P.prototype.get=P.prototype.get;P.prototype.getKeys=P.prototype.O;P.prototype.getProperties=P.prototype.N;
-P.prototype.set=P.prototype.set;P.prototype.setProperties=P.prototype.H;P.prototype.unset=P.prototype.R;P.prototype.changed=P.prototype.v;P.prototype.dispatchEvent=P.prototype.b;P.prototype.getRevision=P.prototype.K;P.prototype.on=P.prototype.I;P.prototype.once=P.prototype.L;P.prototype.un=P.prototype.J;P.prototype.unByKey=P.prototype.M;Q.prototype.getFirstCoordinate=Q.prototype.Lb;Q.prototype.getLastCoordinate=Q.prototype.Mb;Q.prototype.getLayout=Q.prototype.Nb;Q.prototype.rotate=Q.prototype.rotate;
-Q.prototype.scale=Q.prototype.scale;Q.prototype.getClosestPoint=Q.prototype.xb;Q.prototype.intersectsCoordinate=Q.prototype.jb;Q.prototype.getExtent=Q.prototype.D;Q.prototype.simplify=Q.prototype.Db;Q.prototype.transform=Q.prototype.lb;Q.prototype.get=Q.prototype.get;Q.prototype.getKeys=Q.prototype.O;Q.prototype.getProperties=Q.prototype.N;Q.prototype.set=Q.prototype.set;Q.prototype.setProperties=Q.prototype.H;Q.prototype.unset=Q.prototype.R;Q.prototype.changed=Q.prototype.v;
-Q.prototype.dispatchEvent=Q.prototype.b;Q.prototype.getRevision=Q.prototype.K;Q.prototype.on=Q.prototype.I;Q.prototype.once=Q.prototype.L;Q.prototype.un=Q.prototype.J;Q.prototype.unByKey=Q.prototype.M;R.prototype.getFirstCoordinate=R.prototype.Lb;R.prototype.getLastCoordinate=R.prototype.Mb;R.prototype.getLayout=R.prototype.Nb;R.prototype.rotate=R.prototype.rotate;R.prototype.scale=R.prototype.scale;R.prototype.getClosestPoint=R.prototype.xb;R.prototype.intersectsCoordinate=R.prototype.jb;
-R.prototype.getExtent=R.prototype.D;R.prototype.simplify=R.prototype.Db;R.prototype.transform=R.prototype.lb;R.prototype.get=R.prototype.get;R.prototype.getKeys=R.prototype.O;R.prototype.getProperties=R.prototype.N;R.prototype.set=R.prototype.set;R.prototype.setProperties=R.prototype.H;R.prototype.unset=R.prototype.R;R.prototype.changed=R.prototype.v;R.prototype.dispatchEvent=R.prototype.b;R.prototype.getRevision=R.prototype.K;R.prototype.on=R.prototype.I;R.prototype.once=R.prototype.L;
-R.prototype.un=R.prototype.J;R.prototype.unByKey=R.prototype.M;A.prototype.getFirstCoordinate=A.prototype.Lb;A.prototype.getLastCoordinate=A.prototype.Mb;A.prototype.getLayout=A.prototype.Nb;A.prototype.rotate=A.prototype.rotate;A.prototype.scale=A.prototype.scale;A.prototype.getClosestPoint=A.prototype.xb;A.prototype.intersectsCoordinate=A.prototype.jb;A.prototype.getExtent=A.prototype.D;A.prototype.simplify=A.prototype.Db;A.prototype.transform=A.prototype.lb;A.prototype.get=A.prototype.get;
-A.prototype.getKeys=A.prototype.O;A.prototype.getProperties=A.prototype.N;A.prototype.set=A.prototype.set;A.prototype.setProperties=A.prototype.H;A.prototype.unset=A.prototype.R;A.prototype.changed=A.prototype.v;A.prototype.dispatchEvent=A.prototype.b;A.prototype.getRevision=A.prototype.K;A.prototype.on=A.prototype.I;A.prototype.once=A.prototype.L;A.prototype.un=A.prototype.J;A.prototype.unByKey=A.prototype.M;B.prototype.getFirstCoordinate=B.prototype.Lb;B.prototype.getLastCoordinate=B.prototype.Mb;
-B.prototype.getLayout=B.prototype.Nb;B.prototype.rotate=B.prototype.rotate;B.prototype.scale=B.prototype.scale;B.prototype.getClosestPoint=B.prototype.xb;B.prototype.intersectsCoordinate=B.prototype.jb;B.prototype.getExtent=B.prototype.D;B.prototype.simplify=B.prototype.Db;B.prototype.transform=B.prototype.lb;B.prototype.get=B.prototype.get;B.prototype.getKeys=B.prototype.O;B.prototype.getProperties=B.prototype.N;B.prototype.set=B.prototype.set;B.prototype.setProperties=B.prototype.H;
-B.prototype.unset=B.prototype.R;B.prototype.changed=B.prototype.v;B.prototype.dispatchEvent=B.prototype.b;B.prototype.getRevision=B.prototype.K;B.prototype.on=B.prototype.I;B.prototype.once=B.prototype.L;B.prototype.un=B.prototype.J;B.prototype.unByKey=B.prototype.M;go.prototype.readFeatures=go.prototype.Ha;po.prototype.readFeatures=po.prototype.Ha;go.prototype.readFeatures=go.prototype.Ha;He.prototype.get=He.prototype.get;He.prototype.getKeys=He.prototype.O;He.prototype.getProperties=He.prototype.N;
-He.prototype.set=He.prototype.set;He.prototype.setProperties=He.prototype.H;He.prototype.unset=He.prototype.R;He.prototype.changed=He.prototype.v;He.prototype.dispatchEvent=He.prototype.b;He.prototype.getRevision=He.prototype.K;He.prototype.on=He.prototype.I;He.prototype.once=He.prototype.L;He.prototype.un=He.prototype.J;He.prototype.unByKey=He.prototype.M;Ie.prototype.getMap=Ie.prototype.i;Ie.prototype.setMap=Ie.prototype.setMap;Ie.prototype.setTarget=Ie.prototype.c;Ie.prototype.get=Ie.prototype.get;
-Ie.prototype.getKeys=Ie.prototype.O;Ie.prototype.getProperties=Ie.prototype.N;Ie.prototype.set=Ie.prototype.set;Ie.prototype.setProperties=Ie.prototype.H;Ie.prototype.unset=Ie.prototype.R;Ie.prototype.changed=Ie.prototype.v;Ie.prototype.dispatchEvent=Ie.prototype.b;Ie.prototype.getRevision=Ie.prototype.K;Ie.prototype.on=Ie.prototype.I;Ie.prototype.once=Ie.prototype.L;Ie.prototype.un=Ie.prototype.J;Ie.prototype.unByKey=Ie.prototype.M;Le.prototype.getMap=Le.prototype.i;Le.prototype.setMap=Le.prototype.setMap;
-Le.prototype.setTarget=Le.prototype.c;Le.prototype.get=Le.prototype.get;Le.prototype.getKeys=Le.prototype.O;Le.prototype.getProperties=Le.prototype.N;Le.prototype.set=Le.prototype.set;Le.prototype.setProperties=Le.prototype.H;Le.prototype.unset=Le.prototype.R;Le.prototype.changed=Le.prototype.v;Le.prototype.dispatchEvent=Le.prototype.b;Le.prototype.getRevision=Le.prototype.K;Le.prototype.on=Le.prototype.I;Le.prototype.once=Le.prototype.L;Le.prototype.un=Le.prototype.J;Le.prototype.unByKey=Le.prototype.M;
-Ue.prototype.getMap=Ue.prototype.i;Ue.prototype.setMap=Ue.prototype.setMap;Ue.prototype.setTarget=Ue.prototype.c;Ue.prototype.get=Ue.prototype.get;Ue.prototype.getKeys=Ue.prototype.O;Ue.prototype.getProperties=Ue.prototype.N;Ue.prototype.set=Ue.prototype.set;Ue.prototype.setProperties=Ue.prototype.H;Ue.prototype.unset=Ue.prototype.R;Ue.prototype.changed=Ue.prototype.v;Ue.prototype.dispatchEvent=Ue.prototype.b;Ue.prototype.getRevision=Ue.prototype.K;Ue.prototype.on=Ue.prototype.I;
-Ue.prototype.once=Ue.prototype.L;Ue.prototype.un=Ue.prototype.J;Ue.prototype.unByKey=Ue.prototype.M;Ul.prototype.getMap=Ul.prototype.i;Ul.prototype.setMap=Ul.prototype.setMap;Ul.prototype.setTarget=Ul.prototype.c;Ul.prototype.get=Ul.prototype.get;Ul.prototype.getKeys=Ul.prototype.O;Ul.prototype.getProperties=Ul.prototype.N;Ul.prototype.set=Ul.prototype.set;Ul.prototype.setProperties=Ul.prototype.H;Ul.prototype.unset=Ul.prototype.R;Ul.prototype.changed=Ul.prototype.v;Ul.prototype.dispatchEvent=Ul.prototype.b;
-Ul.prototype.getRevision=Ul.prototype.K;Ul.prototype.on=Ul.prototype.I;Ul.prototype.once=Ul.prototype.L;Ul.prototype.un=Ul.prototype.J;Ul.prototype.unByKey=Ul.prototype.M;Qe.prototype.getMap=Qe.prototype.i;Qe.prototype.setMap=Qe.prototype.setMap;Qe.prototype.setTarget=Qe.prototype.c;Qe.prototype.get=Qe.prototype.get;Qe.prototype.getKeys=Qe.prototype.O;Qe.prototype.getProperties=Qe.prototype.N;Qe.prototype.set=Qe.prototype.set;Qe.prototype.setProperties=Qe.prototype.H;Qe.prototype.unset=Qe.prototype.R;
-Qe.prototype.changed=Qe.prototype.v;Qe.prototype.dispatchEvent=Qe.prototype.b;Qe.prototype.getRevision=Qe.prototype.K;Qe.prototype.on=Qe.prototype.I;Qe.prototype.once=Qe.prototype.L;Qe.prototype.un=Qe.prototype.J;Qe.prototype.unByKey=Qe.prototype.M;Zl.prototype.getMap=Zl.prototype.i;Zl.prototype.setMap=Zl.prototype.setMap;Zl.prototype.setTarget=Zl.prototype.c;Zl.prototype.get=Zl.prototype.get;Zl.prototype.getKeys=Zl.prototype.O;Zl.prototype.getProperties=Zl.prototype.N;Zl.prototype.set=Zl.prototype.set;
-Zl.prototype.setProperties=Zl.prototype.H;Zl.prototype.unset=Zl.prototype.R;Zl.prototype.changed=Zl.prototype.v;Zl.prototype.dispatchEvent=Zl.prototype.b;Zl.prototype.getRevision=Zl.prototype.K;Zl.prototype.on=Zl.prototype.I;Zl.prototype.once=Zl.prototype.L;Zl.prototype.un=Zl.prototype.J;Zl.prototype.unByKey=Zl.prototype.M;Se.prototype.getMap=Se.prototype.i;Se.prototype.setMap=Se.prototype.setMap;Se.prototype.setTarget=Se.prototype.c;Se.prototype.get=Se.prototype.get;Se.prototype.getKeys=Se.prototype.O;
-Se.prototype.getProperties=Se.prototype.N;Se.prototype.set=Se.prototype.set;Se.prototype.setProperties=Se.prototype.H;Se.prototype.unset=Se.prototype.R;Se.prototype.changed=Se.prototype.v;Se.prototype.dispatchEvent=Se.prototype.b;Se.prototype.getRevision=Se.prototype.K;Se.prototype.on=Se.prototype.I;Se.prototype.once=Se.prototype.L;Se.prototype.un=Se.prototype.J;Se.prototype.unByKey=Se.prototype.M;im.prototype.getMap=im.prototype.i;im.prototype.setMap=im.prototype.setMap;im.prototype.setTarget=im.prototype.c;
-im.prototype.get=im.prototype.get;im.prototype.getKeys=im.prototype.O;im.prototype.getProperties=im.prototype.N;im.prototype.set=im.prototype.set;im.prototype.setProperties=im.prototype.H;im.prototype.unset=im.prototype.R;im.prototype.changed=im.prototype.v;im.prototype.dispatchEvent=im.prototype.b;im.prototype.getRevision=im.prototype.K;im.prototype.on=im.prototype.I;im.prototype.once=im.prototype.L;im.prototype.un=im.prototype.J;im.prototype.unByKey=im.prototype.M;nm.prototype.getMap=nm.prototype.i;
-nm.prototype.setMap=nm.prototype.setMap;nm.prototype.setTarget=nm.prototype.c;nm.prototype.get=nm.prototype.get;nm.prototype.getKeys=nm.prototype.O;nm.prototype.getProperties=nm.prototype.N;nm.prototype.set=nm.prototype.set;nm.prototype.setProperties=nm.prototype.H;nm.prototype.unset=nm.prototype.R;nm.prototype.changed=nm.prototype.v;nm.prototype.dispatchEvent=nm.prototype.b;nm.prototype.getRevision=nm.prototype.K;nm.prototype.on=nm.prototype.I;nm.prototype.once=nm.prototype.L;nm.prototype.un=nm.prototype.J;
-nm.prototype.unByKey=nm.prototype.M;
-  return OPENLAYERS.ol;
-}));
+// Version: v3.5.0
+(function(root, factory) {
+    if (typeof define === "function" && define.amd) {
+        define([], factory);
+    } else if (typeof exports === "object") {
+        module.exports = factory();
+    } else {
+        root.ol = factory();
+    }
+}(this, function() {
+    var OPENLAYERS = {};
+    var l, aa = aa || {},
+        ba = this;
 
+    function m(a) {
+        return void 0 !== a
+    }
+
+    function v(a, c, d) {
+        a = a.split(".");
+        d = d || ba;
+        a[0] in d || !d.execScript || d.execScript("var " + a[0]);
+        for (var e; a.length && (e = a.shift());) !a.length && m(c) ? d[e] = c : d[e] ? d = d[e] : d = d[e] = {}
+    }
+
+    function ca() {}
+
+    function da(a) {
+        a.Ia = function() {
+            return a.jg ? a.jg : a.jg = new a
+        }
+    }
+
+    function ea(a) {
+        var c = typeof a;
+        if ("object" == c)
+            if (a) {
+                if (a instanceof Array) return "array";
+                if (a instanceof Object) return c;
+                var d = Object.prototype.toString.call(a);
+                if ("[object Window]" == d) return "object";
+                if ("[object Array]" == d || "number" == typeof a.length && "undefined" != typeof a.splice && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("splice")) return "array";
+                if ("[object Function]" == d || "undefined" != typeof a.call && "undefined" != typeof a.propertyIsEnumerable && !a.propertyIsEnumerable("call")) return "function"
+            } else return "null";
+        else if ("function" == c && "undefined" == typeof a.call) return "object";
+        return c
+    }
+
+    function fa(a) {
+        return null === a
+    }
+
+    function ga(a) {
+        return "array" == ea(a)
+    }
+
+    function ha(a) {
+        var c = ea(a);
+        return "array" == c || "object" == c && "number" == typeof a.length
+    }
+
+    function ia(a) {
+        return "string" == typeof a
+    }
+
+    function ja(a) {
+        return "number" == typeof a
+    }
+
+    function ka(a) {
+        return "function" == ea(a)
+    }
+
+    function la(a) {
+        var c = typeof a;
+        return "object" == c && null != a || "function" == c
+    }
+
+    function ma(a) {
+        return a[na] || (a[na] = ++oa)
+    }
+    var na = "closure_uid_" + (1E9 * Math.random() >>> 0),
+        oa = 0;
+
+    function pa(a, c, d) {
+        return a.call.apply(a.bind, arguments)
+    }
+
+    function qa(a, c, d) {
+        if (!a) throw Error();
+        if (2 < arguments.length) {
+            var e = Array.prototype.slice.call(arguments, 2);
+            return function() {
+                var d = Array.prototype.slice.call(arguments);
+                Array.prototype.unshift.apply(d, e);
+                return a.apply(c, d)
+            }
+        }
+        return function() {
+            return a.apply(c, arguments)
+        }
+    }
+
+    function ra(a, c, d) {
+        ra = Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? pa : qa;
+        return ra.apply(null, arguments)
+    }
+
+    function ta(a, c) {
+        var d = Array.prototype.slice.call(arguments, 1);
+        return function() {
+            var c = d.slice();
+            c.push.apply(c, arguments);
+            return a.apply(this, c)
+        }
+    }
+    var ua = Date.now || function() {
+        return +new Date
+    };
+
+    function w(a, c) {
+        function d() {}
+        d.prototype = c.prototype;
+        a.S = c.prototype;
+        a.prototype = new d;
+        a.prototype.constructor = a;
+        a.Mo = function(a, d, g) {
+            for (var h = Array(arguments.length - 2), k = 2; k < arguments.length; k++) h[k - 2] = arguments[k];
+            return c.prototype[d].apply(a, h)
+        }
+    };
+    var va, wa;
+
+    function xa(a) {
+        if (Error.captureStackTrace) Error.captureStackTrace(this, xa);
+        else {
+            var c = Error().stack;
+            c && (this.stack = c)
+        }
+        a && (this.message = String(a))
+    }
+    w(xa, Error);
+    xa.prototype.name = "CustomError";
+    var ya;
+
+    function Aa(a, c) {
+        var d = a.length - c.length;
+        return 0 <= d && a.indexOf(c, d) == d
+    }
+
+    function Ba(a, c) {
+        for (var d = a.split("%s"), e = "", f = Array.prototype.slice.call(arguments, 1); f.length && 1 < d.length;) e += d.shift() + f.shift();
+        return e + d.join("%s")
+    }
+    var Ca = String.prototype.trim ? function(a) {
+        return a.trim()
+    } : function(a) {
+        return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "")
+    };
+
+    function Da(a) {
+        if (!Ea.test(a)) return a; - 1 != a.indexOf("&") && (a = a.replace(Fa, "&amp;")); - 1 != a.indexOf("<") && (a = a.replace(Ha, "&lt;")); - 1 != a.indexOf(">") && (a = a.replace(Ia, "&gt;")); - 1 != a.indexOf('"') && (a = a.replace(Ja, "&quot;")); - 1 != a.indexOf("'") && (a = a.replace(Ka, "&#39;")); - 1 != a.indexOf("\x00") && (a = a.replace(La, "&#0;"));
+        return a
+    }
+    var Fa = /&/g,
+        Ha = /</g,
+        Ia = />/g,
+        Ja = /"/g,
+        Ka = /'/g,
+        La = /\x00/g,
+        Ea = /[\x00&<>"']/;
+
+    function Ma(a) {
+        a = m(void 0) ? a.toFixed(void 0) : String(a);
+        var c = a.indexOf("."); - 1 == c && (c = a.length);
+        c = Math.max(0, 2 - c);
+        return Array(c + 1).join("0") + a
+    }
+
+    function Na(a, c) {
+        for (var d = 0, e = Ca(String(a)).split("."), f = Ca(String(c)).split("."), g = Math.max(e.length, f.length), h = 0; 0 == d && h < g; h++) {
+            var k = e[h] || "",
+                n = f[h] || "",
+                p = RegExp("(\\d*)(\\D*)", "g"),
+                q = RegExp("(\\d*)(\\D*)", "g");
+            do {
+                var r = p.exec(k) || ["", "", ""],
+                    t = q.exec(n) || ["", "", ""];
+                if (0 == r[0].length && 0 == t[0].length) break;
+                d = Pa(0 == r[1].length ? 0 : parseInt(r[1], 10), 0 == t[1].length ? 0 : parseInt(t[1], 10)) || Pa(0 == r[2].length, 0 == t[2].length) || Pa(r[2], t[2])
+            } while (0 == d)
+        }
+        return d
+    }
+
+    function Pa(a, c) {
+        return a < c ? -1 : a > c ? 1 : 0
+    };
+    var Qa = Array.prototype;
+
+    function Ra(a, c) {
+        return Qa.indexOf.call(a, c, void 0)
+    }
+
+    function Sa(a, c, d) {
+        Qa.forEach.call(a, c, d)
+    }
+
+    function Ta(a, c) {
+        return Qa.filter.call(a, c, void 0)
+    }
+
+    function Ua(a, c, d) {
+        return Qa.map.call(a, c, d)
+    }
+
+    function Va(a, c) {
+        return Qa.some.call(a, c, void 0)
+    }
+
+    function Wa(a, c) {
+        var d = Xa(a, c, void 0);
+        return 0 > d ? null : ia(a) ? a.charAt(d) : a[d]
+    }
+
+    function Xa(a, c, d) {
+        for (var e = a.length, f = ia(a) ? a.split("") : a, g = 0; g < e; g++)
+            if (g in f && c.call(d, f[g], g, a)) return g;
+        return -1
+    }
+
+    function Ya(a, c) {
+        return 0 <= Ra(a, c)
+    }
+
+    function Za(a, c) {
+        var d = Ra(a, c),
+            e;
+        (e = 0 <= d) && Qa.splice.call(a, d, 1);
+        return e
+    }
+
+    function ab(a) {
+        return Qa.concat.apply(Qa, arguments)
+    }
+
+    function bb(a) {
+        var c = a.length;
+        if (0 < c) {
+            for (var d = Array(c), e = 0; e < c; e++) d[e] = a[e];
+            return d
+        }
+        return []
+    }
+
+    function db(a, c) {
+        for (var d = 1; d < arguments.length; d++) {
+            var e = arguments[d];
+            if (ha(e)) {
+                var f = a.length || 0,
+                    g = e.length || 0;
+                a.length = f + g;
+                for (var h = 0; h < g; h++) a[f + h] = e[h]
+            } else a.push(e)
+        }
+    }
+
+    function eb(a, c, d, e) {
+        Qa.splice.apply(a, fb(arguments, 1))
+    }
+
+    function fb(a, c, d) {
+        return 2 >= arguments.length ? Qa.slice.call(a, c) : Qa.slice.call(a, c, d)
+    }
+
+    function gb(a, c) {
+        a.sort(c || hb)
+    }
+
+    function ib(a, c) {
+        if (!ha(a) || !ha(c) || a.length != c.length) return !1;
+        for (var d = a.length, e = jb, f = 0; f < d; f++)
+            if (!e(a[f], c[f])) return !1;
+        return !0
+    }
+
+    function hb(a, c) {
+        return a > c ? 1 : a < c ? -1 : 0
+    }
+
+    function jb(a, c) {
+        return a === c
+    }
+
+    function kb(a) {
+        for (var c = [], d = 0; d < arguments.length; d++) {
+            var e = arguments[d];
+            if (ga(e))
+                for (var f = 0; f < e.length; f += 8192)
+                    for (var g = kb.apply(null, fb(e, f, f + 8192)), h = 0; h < g.length; h++) c.push(g[h]);
+            else c.push(e)
+        }
+        return c
+    };
+    var lb;
+    a: {
+        var mb = ba.navigator;
+        if (mb) {
+            var nb = mb.userAgent;
+            if (nb) {
+                lb = nb;
+                break a
+            }
+        }
+        lb = ""
+    }
+
+    function ob(a) {
+        return -1 != lb.indexOf(a)
+    };
+
+    function pb(a, c, d) {
+        for (var e in a) c.call(d, a[e], e, a)
+    }
+
+    function qb(a, c) {
+        for (var d in a)
+            if (c.call(void 0, a[d], d, a)) return !0;
+        return !1
+    }
+
+    function rb(a) {
+        var c = 0,
+            d;
+        for (d in a) c++;
+        return c
+    }
+
+    function sb(a) {
+        var c = [],
+            d = 0,
+            e;
+        for (e in a) c[d++] = a[e];
+        return c
+    }
+
+    function tb(a) {
+        var c = [],
+            d = 0,
+            e;
+        for (e in a) c[d++] = e;
+        return c
+    }
+
+    function ub(a, c) {
+        return c in a
+    }
+
+    function vb(a, c) {
+        for (var d in a)
+            if (a[d] == c) return !0;
+        return !1
+    }
+
+    function wb(a, c) {
+        for (var d in a)
+            if (c.call(void 0, a[d], d, a)) return d
+    }
+
+    function xb(a) {
+        for (var c in a) return !1;
+        return !0
+    }
+
+    function yb(a) {
+        for (var c in a) delete a[c]
+    }
+
+    function zb(a, c) {
+        c in a && delete a[c]
+    }
+
+    function Ab(a, c, d) {
+        return c in a ? a[c] : d
+    }
+
+    function Cb(a, c) {
+        var d = [];
+        return c in a ? a[c] : a[c] = d
+    }
+
+    function Db(a) {
+        var c = {},
+            d;
+        for (d in a) c[d] = a[d];
+        return c
+    }
+    var Eb = "constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
+
+    function Fb(a, c) {
+        for (var d, e, f = 1; f < arguments.length; f++) {
+            e = arguments[f];
+            for (d in e) a[d] = e[d];
+            for (var g = 0; g < Eb.length; g++) d = Eb[g], Object.prototype.hasOwnProperty.call(e, d) && (a[d] = e[d])
+        }
+    }
+
+    function Gb(a) {
+        var c = arguments.length;
+        if (1 == c && ga(arguments[0])) return Gb.apply(null, arguments[0]);
+        for (var d = {}, e = 0; e < c; e++) d[arguments[e]] = !0;
+        return d
+    };
+    var Hb = ob("Opera") || ob("OPR"),
+        Ib = ob("Trident") || ob("MSIE"),
+        Jb = ob("Gecko") && -1 == lb.toLowerCase().indexOf("webkit") && !(ob("Trident") || ob("MSIE")),
+        Kb = -1 != lb.toLowerCase().indexOf("webkit"),
+        Lb = ob("Macintosh"),
+        Mb = ob("Windows"),
+        Nb = ob("Linux") || ob("CrOS");
+
+    function Ob() {
+        var a = ba.document;
+        return a ? a.documentMode : void 0
+    }
+    var Pb = function() {
+            var a = "",
+                c;
+            if (Hb && ba.opera) return a = ba.opera.version, ka(a) ? a() : a;
+            Jb ? c = /rv\:([^\);]+)(\)|;)/ : Ib ? c = /\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/ : Kb && (c = /WebKit\/(\S+)/);
+            c && (a = (a = c.exec(lb)) ? a[1] : "");
+            return Ib && (c = Ob(), c > parseFloat(a)) ? String(c) : a
+        }(),
+        Qb = {};
+
+    function Rb(a) {
+        return Qb[a] || (Qb[a] = 0 <= Na(Pb, a))
+    }
+    var Sb = ba.document,
+        Tb = Sb && Ib ? Ob() || ("CSS1Compat" == Sb.compatMode ? parseInt(Pb, 10) : 5) : void 0;
+    var Ub = Ib && !Rb("9.0") && "" !== Pb;
+
+    function Vb(a, c, d) {
+        return Math.min(Math.max(a, c), d)
+    }
+
+    function Wb(a, c) {
+        var d = a % c;
+        return 0 > d * c ? d + c : d
+    }
+
+    function Xb(a, c, d) {
+        return a + d * (c - a)
+    }
+
+    function Yb(a) {
+        return a * Math.PI / 180
+    };
+
+    function Zb(a) {
+        return function(c) {
+            if (m(c)) return [Vb(c[0], a[0], a[2]), Vb(c[1], a[1], a[3])]
+        }
+    }
+
+    function $b(a) {
+        return a
+    };
+
+    function ac(a, c, d) {
+        var e = a.length;
+        if (a[0] <= c) return 0;
+        if (!(c <= a[e - 1]))
+            if (0 < d)
+                for (d = 1; d < e; ++d) {
+                    if (a[d] < c) return d - 1
+                } else if (0 > d)
+                    for (d = 1; d < e; ++d) {
+                        if (a[d] <= c) return d
+                    } else
+                        for (d = 1; d < e; ++d) {
+                            if (a[d] == c) return d;
+                            if (a[d] < c) return a[d - 1] - c < c - a[d] ? d - 1 : d
+                        }
+        return e - 1
+    };
+
+    function bc(a) {
+        return function(c, d, e) {
+            if (m(c)) return c = ac(a, c, e), c = Vb(c + d, 0, a.length - 1), a[c]
+        }
+    }
+
+    function cc(a, c, d) {
+        return function(e, f, g) {
+            if (m(e)) return g = 0 < g ? 0 : 0 > g ? 1 : .5, e = Math.floor(Math.log(c / e) / Math.log(a) + g), f = Math.max(e + f, 0), m(d) && (f = Math.min(f, d)), c / Math.pow(a, f)
+        }
+    };
+
+    function dc(a) {
+        if (m(a)) return 0
+    }
+
+    function ec(a, c) {
+        if (m(a)) return a + c
+    }
+
+    function fc(a) {
+        var c = 2 * Math.PI / a;
+        return function(a, e) {
+            if (m(a)) return a = Math.floor((a + e) / c + .5) * c
+        }
+    }
+
+    function gc() {
+        var a = Yb(5);
+        return function(c, d) {
+            if (m(c)) return Math.abs(c + d) <= a ? 0 : c + d
+        }
+    };
+
+    function hc(a, c, d) {
+        this.center = a;
+        this.resolution = c;
+        this.rotation = d
+    };
+    var ic = !Ib || Ib && 9 <= Tb,
+        jc = !Ib || Ib && 9 <= Tb,
+        kc = Ib && !Rb("9");
+    !Kb || Rb("528");
+    Jb && Rb("1.9b") || Ib && Rb("8") || Hb && Rb("9.5") || Kb && Rb("528");
+    Jb && !Rb("8") || Ib && Rb("9");
+
+    function mc() {
+        0 != nc && (oc[ma(this)] = this);
+        this.U = this.U;
+        this.V = this.V
+    }
+    var nc = 0,
+        oc = {};
+    mc.prototype.U = !1;
+    mc.prototype.Yc = function() {
+        if (!this.U && (this.U = !0, this.O(), 0 != nc)) {
+            var a = ma(this);
+            delete oc[a]
+        }
+    };
+
+    function pc(a, c) {
+        var d = ta(qc, c);
+        a.U ? d.call(void 0) : (a.V || (a.V = []), a.V.push(m(void 0) ? ra(d, void 0) : d))
+    }
+    mc.prototype.O = function() {
+        if (this.V)
+            for (; this.V.length;) this.V.shift()()
+    };
+
+    function qc(a) {
+        a && "function" == typeof a.Yc && a.Yc()
+    };
+
+    function rc(a, c) {
+        this.type = a;
+        this.c = this.target = c;
+        this.f = !1;
+        this.rh = !0
+    }
+    rc.prototype.fb = function() {
+        this.f = !0
+    };
+    rc.prototype.preventDefault = function() {
+        this.rh = !1
+    };
+
+    function sc(a) {
+        a.fb()
+    }
+
+    function tc(a) {
+        a.preventDefault()
+    };
+    var uc = Ib ? "focusout" : "DOMFocusOut";
+
+    function vc(a) {
+        vc[" "](a);
+        return a
+    }
+    vc[" "] = ca;
+
+    function wc(a, c) {
+        rc.call(this, a ? a.type : "");
+        this.relatedTarget = this.c = this.target = null;
+        this.q = this.e = this.button = this.screenY = this.screenX = this.clientY = this.clientX = this.offsetY = this.offsetX = 0;
+        this.l = this.d = this.a = this.i = !1;
+        this.state = null;
+        this.g = !1;
+        this.b = null;
+        a && xc(this, a, c)
+    }
+    w(wc, rc);
+    var yc = [1, 4, 2];
+
+    function xc(a, c, d) {
+        a.b = c;
+        var e = a.type = c.type;
+        a.target = c.target || c.srcElement;
+        a.c = d;
+        if (d = c.relatedTarget) {
+            if (Jb) {
+                var f;
+                a: {
+                    try {
+                        vc(d.nodeName);
+                        f = !0;
+                        break a
+                    } catch (g) {}
+                    f = !1
+                }
+                f || (d = null)
+            }
+        } else "mouseover" == e ? d = c.fromElement : "mouseout" == e && (d = c.toElement);
+        a.relatedTarget = d;
+        Object.defineProperties ? Object.defineProperties(a, {
+            offsetX: {
+                configurable: !0,
+                enumerable: !0,
+                get: a.Zf,
+                set: a.bo
+            },
+            offsetY: {
+                configurable: !0,
+                enumerable: !0,
+                get: a.$f,
+                set: a.co
+            }
+        }) : (a.offsetX = a.Zf(), a.offsetY = a.$f());
+        a.clientX = void 0 !== c.clientX ? c.clientX : c.pageX;
+        a.clientY = void 0 !== c.clientY ? c.clientY : c.pageY;
+        a.screenX = c.screenX || 0;
+        a.screenY = c.screenY || 0;
+        a.button = c.button;
+        a.e = c.keyCode || 0;
+        a.q = c.charCode || ("keypress" == e ? c.keyCode : 0);
+        a.i = c.ctrlKey;
+        a.a = c.altKey;
+        a.d = c.shiftKey;
+        a.l = c.metaKey;
+        a.g = Lb ? c.metaKey : c.ctrlKey;
+        a.state = c.state;
+        c.defaultPrevented && a.preventDefault()
+    }
+
+    function zc(a) {
+        return (ic ? 0 == a.b.button : "click" == a.type ? !0 : !!(a.b.button & yc[0])) && !(Kb && Lb && a.i)
+    }
+    l = wc.prototype;
+    l.fb = function() {
+        wc.S.fb.call(this);
+        this.b.stopPropagation ? this.b.stopPropagation() : this.b.cancelBubble = !0
+    };
+    l.preventDefault = function() {
+        wc.S.preventDefault.call(this);
+        var a = this.b;
+        if (a.preventDefault) {} //a.preventDefault();
+        else if (a.returnValue = !1, kc) try {
+            if (a.ctrlKey || 112 <= a.keyCode && 123 >= a.keyCode) a.keyCode = -1
+        } catch (c) {}
+    };
+    l.Qi = function() {
+        return this.b
+    };
+    l.Zf = function() {
+        return Kb || void 0 !== this.b.offsetX ? this.b.offsetX : this.b.layerX
+    };
+    l.bo = function(a) {
+        Object.defineProperties(this, {
+            offsetX: {
+                writable: !0,
+                enumerable: !0,
+                configurable: !0,
+                value: a
+            }
+        })
+    };
+    l.$f = function() {
+        return Kb || void 0 !== this.b.offsetY ? this.b.offsetY : this.b.layerY
+    };
+    l.co = function(a) {
+        Object.defineProperties(this, {
+            offsetY: {
+                writable: !0,
+                enumerable: !0,
+                configurable: !0,
+                value: a
+            }
+        })
+    };
+    var Ac = "closure_listenable_" + (1E6 * Math.random() | 0);
+
+    function Bc(a) {
+        return !(!a || !a[Ac])
+    }
+    var Cc = 0;
+
+    function Dc(a, c, d, e, f) {
+        this.$b = a;
+        this.b = null;
+        this.src = c;
+        this.type = d;
+        this.Qc = !!e;
+        this.Sd = f;
+        this.key = ++Cc;
+        this.Hc = this.vd = !1
+    }
+
+    function Ec(a) {
+        a.Hc = !0;
+        a.$b = null;
+        a.b = null;
+        a.src = null;
+        a.Sd = null
+    };
+
+    function Fc(a) {
+        this.src = a;
+        this.b = {};
+        this.a = 0
+    }
+    Fc.prototype.add = function(a, c, d, e, f) {
+        var g = a.toString();
+        a = this.b[g];
+        a || (a = this.b[g] = [], this.a++);
+        var h = Gc(a, c, e, f); - 1 < h ? (c = a[h], d || (c.vd = !1)) : (c = new Dc(c, this.src, g, !!e, f), c.vd = d, a.push(c));
+        return c
+    };
+    Fc.prototype.remove = function(a, c, d, e) {
+        a = a.toString();
+        if (!(a in this.b)) return !1;
+        var f = this.b[a];
+        c = Gc(f, c, d, e);
+        return -1 < c ? (Ec(f[c]), Qa.splice.call(f, c, 1), 0 == f.length && (delete this.b[a], this.a--), !0) : !1
+    };
+
+    function Hc(a, c) {
+        var d = c.type;
+        if (!(d in a.b)) return !1;
+        var e = Za(a.b[d], c);
+        e && (Ec(c), 0 == a.b[d].length && (delete a.b[d], a.a--));
+        return e
+    }
+
+    function Jc(a, c, d, e, f) {
+        a = a.b[c.toString()];
+        c = -1;
+        a && (c = Gc(a, d, e, f));
+        return -1 < c ? a[c] : null
+    }
+
+    function Kc(a, c, d) {
+        var e = m(c),
+            f = e ? c.toString() : "",
+            g = m(d);
+        return qb(a.b, function(a) {
+            for (var c = 0; c < a.length; ++c)
+                if (!(e && a[c].type != f || g && a[c].Qc != d)) return !0;
+            return !1
+        })
+    }
+
+    function Gc(a, c, d, e) {
+        for (var f = 0; f < a.length; ++f) {
+            var g = a[f];
+            if (!g.Hc && g.$b == c && g.Qc == !!d && g.Sd == e) return f
+        }
+        return -1
+    };
+    var Lc = "closure_lm_" + (1E6 * Math.random() | 0),
+        Mc = {},
+        Nc = 0;
+
+    function x(a, c, d, e, f) {
+        if (ga(c)) {
+            for (var g = 0; g < c.length; g++) x(a, c[g], d, e, f);
+            return null
+        }
+        d = Oc(d);
+        return Bc(a) ? a.Ka(c, d, e, f) : Pc(a, c, d, !1, e, f)
+    }
+
+    function Pc(a, c, d, e, f, g) {
+        if (!c) throw Error("Invalid event type");
+        var h = !!f,
+            k = Qc(a);
+        k || (a[Lc] = k = new Fc(a));
+        d = k.add(c, d, e, f, g);
+        if (d.b) return d;
+        e = Rc();
+        d.b = e;
+        e.src = a;
+        e.$b = d;
+        a.addEventListener ? a.addEventListener(c.toString(), e, h) : a.attachEvent(Sc(c.toString()), e);
+        Nc++;
+        return d
+    }
+
+    function Rc() {
+        var a = Tc,
+            c = jc ? function(d) {
+                return a.call(c.src, c.$b, d)
+            } : function(d) {
+                d = a.call(c.src, c.$b, d);
+                if (!d) return d
+            };
+        return c
+    }
+
+    function Uc(a, c, d, e, f) {
+        if (ga(c)) {
+            for (var g = 0; g < c.length; g++) Uc(a, c[g], d, e, f);
+            return null
+        }
+        d = Oc(d);
+        return Bc(a) ? a.ab.add(String(c), d, !0, e, f) : Pc(a, c, d, !0, e, f)
+    }
+
+    function Vc(a, c, d, e, f) {
+        if (ga(c))
+            for (var g = 0; g < c.length; g++) Vc(a, c[g], d, e, f);
+        else d = Oc(d), Bc(a) ? a.wf(c, d, e, f) : a && (a = Qc(a)) && (c = Jc(a, c, d, !!e, f)) && Wc(c)
+    }
+
+    function Wc(a) {
+        if (ja(a) || !a || a.Hc) return !1;
+        var c = a.src;
+        if (Bc(c)) return Hc(c.ab, a);
+        var d = a.type,
+            e = a.b;
+        c.removeEventListener ? c.removeEventListener(d, e, a.Qc) : c.detachEvent && c.detachEvent(Sc(d), e);
+        Nc--;
+        (d = Qc(c)) ? (Hc(d, a), 0 == d.a && (d.src = null, c[Lc] = null)) : Ec(a);
+        return !0
+    }
+
+    function Sc(a) {
+        return a in Mc ? Mc[a] : Mc[a] = "on" + a
+    }
+
+    function Xc(a, c, d, e) {
+        var f = !0;
+        if (a = Qc(a))
+            if (c = a.b[c.toString()])
+                for (c = c.concat(), a = 0; a < c.length; a++) {
+                    var g = c[a];
+                    g && g.Qc == d && !g.Hc && (g = Yc(g, e), f = f && !1 !== g)
+                }
+        return f
+    }
+
+    function Yc(a, c) {
+        var d = a.$b,
+            e = a.Sd || a.src;
+        a.vd && Wc(a);
+        return d.call(e, c)
+    }
+
+    function Tc(a, c) {
+        if (a.Hc) return !0;
+        if (!jc) {
+            var d;
+            if (!(d = c)) a: {
+                d = ["window", "event"];
+                for (var e = ba, f; f = d.shift();)
+                    if (null != e[f]) e = e[f];
+                    else {
+                        d = null;
+                        break a
+                    }
+                d = e
+            }
+            f = d;
+            d = new wc(f, this);
+            e = !0;
+            if (!(0 > f.keyCode || void 0 != f.returnValue)) {
+                a: {
+                    var g = !1;
+                    if (0 == f.keyCode) try {
+                        f.keyCode = -1;
+                        break a
+                    } catch (h) {
+                        g = !0
+                    }
+                    if (g || void 0 == f.returnValue) f.returnValue = !0
+                }
+                f = [];
+                for (g = d.c; g; g = g.parentNode) f.push(g);
+                for (var g = a.type, k = f.length - 1; !d.f && 0 <= k; k--) {
+                    d.c = f[k];
+                    var n = Xc(f[k], g, !0, d),
+                        e = e && n
+                }
+                for (k = 0; !d.f && k < f.length; k++) d.c = f[k],
+                n = Xc(f[k], g, !1, d),
+                e = e && n
+            }
+            return e
+        }
+        return Yc(a, new wc(c, this))
+    }
+
+    function Qc(a) {
+        a = a[Lc];
+        return a instanceof Fc ? a : null
+    }
+    var Zc = "__closure_events_fn_" + (1E9 * Math.random() >>> 0);
+
+    function Oc(a) {
+        if (ka(a)) return a;
+        a[Zc] || (a[Zc] = function(c) {
+            return a.handleEvent(c)
+        });
+        return a[Zc]
+    };
+
+    function $c() {
+        mc.call(this);
+        this.ab = new Fc(this);
+        this.rc = this;
+        this.sa = null
+    }
+    w($c, mc);
+    $c.prototype[Ac] = !0;
+    l = $c.prototype;
+    l.addEventListener = function(a, c, d, e) {
+        x(this, a, c, d, e)
+    };
+    l.removeEventListener = function(a, c, d, e) {
+        Vc(this, a, c, d, e)
+    };
+    l.dispatchEvent = function(a) {
+        var c, d = this.sa;
+        if (d)
+            for (c = []; d; d = d.sa) c.push(d);
+        var d = this.rc,
+            e = a.type || a;
+        if (ia(a)) a = new rc(a, d);
+        else if (a instanceof rc) a.target = a.target || d;
+        else {
+            var f = a;
+            a = new rc(e, d);
+            Fb(a, f)
+        }
+        var f = !0,
+            g;
+        if (c)
+            for (var h = c.length - 1; !a.f && 0 <= h; h--) g = a.c = c[h], f = ad(g, e, !0, a) && f;
+        a.f || (g = a.c = d, f = ad(g, e, !0, a) && f, a.f || (f = ad(g, e, !1, a) && f));
+        if (c)
+            for (h = 0; !a.f && h < c.length; h++) g = a.c = c[h], f = ad(g, e, !1, a) && f;
+        return f
+    };
+    l.O = function() {
+        $c.S.O.call(this);
+        if (this.ab) {
+            var a = this.ab,
+                c = 0,
+                d;
+            for (d in a.b) {
+                for (var e = a.b[d], f = 0; f < e.length; f++) ++c, Ec(e[f]);
+                delete a.b[d];
+                a.a--
+            }
+        }
+        this.sa = null
+    };
+    l.Ka = function(a, c, d, e) {
+        return this.ab.add(String(a), c, !1, d, e)
+    };
+    l.wf = function(a, c, d, e) {
+        return this.ab.remove(String(a), c, d, e)
+    };
+
+    function ad(a, c, d, e) {
+        c = a.ab.b[String(c)];
+        if (!c) return !0;
+        c = c.concat();
+        for (var f = !0, g = 0; g < c.length; ++g) {
+            var h = c[g];
+            if (h && !h.Hc && h.Qc == d) {
+                var k = h.$b,
+                    n = h.Sd || h.src;
+                h.vd && Hc(a.ab, h);
+                f = !1 !== k.call(n, e) && f
+            }
+        }
+        return f && 0 != e.rh
+    }
+
+    function bd(a, c, d) {
+        return Kc(a.ab, m(c) ? String(c) : void 0, d)
+    };
+
+    function cd() {
+        $c.call(this);
+        this.b = 0
+    }
+    w(cd, $c);
+
+    function dd(a) {
+        Wc(a)
+    }
+    l = cd.prototype;
+    l.k = function() {
+        ++this.b;
+        this.dispatchEvent("change")
+    };
+    l.v = function() {
+        return this.b
+    };
+    l.r = function(a, c, d) {
+        return x(this, a, c, !1, d)
+    };
+    l.A = function(a, c, d) {
+        return Uc(this, a, c, !1, d)
+    };
+    l.u = function(a, c, d) {
+        Vc(this, a, c, !1, d)
+    };
+    l.B = dd;
+
+    function ed(a, c, d) {
+        rc.call(this, a);
+        this.key = c;
+        this.oldValue = d
+    }
+    w(ed, rc);
+
+    function fd(a) {
+        cd.call(this);
+        ma(this);
+        this.q = {};
+        m(a) && this.t(a)
+    }
+    w(fd, cd);
+    var gd = {};
+
+    function hd(a) {
+        return gd.hasOwnProperty(a) ? gd[a] : gd[a] = "change:" + a
+    }
+    l = fd.prototype;
+    l.get = function(a) {
+        var c;
+        this.q.hasOwnProperty(a) && (c = this.q[a]);
+        return c
+    };
+    l.C = function() {
+        return tb(this.q)
+    };
+    l.D = function() {
+        var a = {},
+            c;
+        for (c in this.q) a[c] = this.q[c];
+        return a
+    };
+
+    function id(a, c, d) {
+        var e;
+        e = hd(c);
+        a.dispatchEvent(new ed(e, c, d));
+        a.dispatchEvent(new ed("propertychange", c, d))
+    }
+    l.set = function(a, c) {
+        var d = this.q[a];
+        this.q[a] = c;
+        id(this, a, d)
+    };
+    l.t = function(a) {
+        for (var c in a) this.set(c, a[c])
+    };
+    l.I = function(a) {
+        if (a in this.q) {
+            var c = this.q[a];
+            delete this.q[a];
+            id(this, a, c)
+        }
+    };
+
+    function jd(a, c, d) {
+        m(d) || (d = [0, 0]);
+        d[0] = a[0] + 2 * c;
+        d[1] = a[1] + 2 * c;
+        return d
+    }
+
+    function kd(a, c, d) {
+        m(d) || (d = [0, 0]);
+        d[0] = a[0] * c + .5 | 0;
+        d[1] = a[1] * c + .5 | 0;
+        return d
+    }
+
+    function ld(a, c) {
+        if (ga(a)) return a;
+        m(c) ? (c[0] = a, c[1] = a) : c = [a, a];
+        return c
+    };
+
+    function md(a, c) {
+        a[0] += c[0];
+        a[1] += c[1];
+        return a
+    }
+
+    function nd(a, c) {
+        var d = a[0],
+            e = a[1],
+            f = c[0],
+            g = c[1],
+            h = f[0],
+            f = f[1],
+            k = g[0],
+            g = g[1],
+            n = k - h,
+            p = g - f,
+            d = 0 === n && 0 === p ? 0 : (n * (d - h) + p * (e - f)) / (n * n + p * p || 0);
+        0 >= d || (1 <= d ? (h = k, f = g) : (h += d * n, f += d * p));
+        return [h, f]
+    }
+
+    function od(a, c) {
+        var d = Wb(a + 180, 360) - 180,
+            e = Math.abs(Math.round(3600 * d));
+        return Math.floor(e / 3600) + "\u00b0 " + Math.floor(e / 60 % 60) + "\u2032 " + Math.floor(e % 60) + "\u2033 " + c.charAt(0 > d ? 1 : 0)
+    }
+
+    function pd(a, c, d) {
+        return m(a) ? c.replace("{x}", a[0].toFixed(d)).replace("{y}", a[1].toFixed(d)) : ""
+    }
+
+    function qd(a, c) {
+        for (var d = !0, e = a.length - 1; 0 <= e; --e)
+            if (a[e] != c[e]) {
+                d = !1;
+                break
+            }
+        return d
+    }
+
+    function rd(a, c) {
+        var d = Math.cos(c),
+            e = Math.sin(c),
+            f = a[1] * d + a[0] * e;
+        a[0] = a[0] * d - a[1] * e;
+        a[1] = f;
+        return a
+    }
+
+    function sd(a, c) {
+        var d = a[0] - c[0],
+            e = a[1] - c[1];
+        return d * d + e * e
+    }
+
+    function td(a, c) {
+        return sd(a, nd(a, c))
+    }
+
+    function ud(a, c) {
+        return pd(a, "{x}, {y}", c)
+    };
+
+    function vd(a) {
+        this.length = a.length || a;
+        for (var c = 0; c < this.length; c++) this[c] = a[c] || 0
+    }
+    vd.prototype.b = 4;
+    vd.prototype.set = function(a, c) {
+        c = c || 0;
+        for (var d = 0; d < a.length && c + d < this.length; d++) this[c + d] = a[d]
+    };
+    vd.prototype.toString = Array.prototype.join;
+    "undefined" == typeof Float32Array && (vd.BYTES_PER_ELEMENT = 4, vd.prototype.BYTES_PER_ELEMENT = vd.prototype.b, vd.prototype.set = vd.prototype.set, vd.prototype.toString = vd.prototype.toString, v("Float32Array", vd, void 0));
+
+    function wd(a) {
+        this.length = a.length || a;
+        for (var c = 0; c < this.length; c++) this[c] = a[c] || 0
+    }
+    wd.prototype.b = 8;
+    wd.prototype.set = function(a, c) {
+        c = c || 0;
+        for (var d = 0; d < a.length && c + d < this.length; d++) this[c + d] = a[d]
+    };
+    wd.prototype.toString = Array.prototype.join;
+    if ("undefined" == typeof Float64Array) {
+        try {
+            wd.BYTES_PER_ELEMENT = 8
+        } catch (xd) {}
+        wd.prototype.BYTES_PER_ELEMENT = wd.prototype.b;
+        wd.prototype.set = wd.prototype.set;
+        wd.prototype.toString = wd.prototype.toString;
+        v("Float64Array", wd, void 0)
+    };
+
+    function yd(a, c, d, e, f) {
+        a[0] = c;
+        a[1] = d;
+        a[2] = e;
+        a[3] = f
+    };
+
+    function zd() {
+        var a = Array(16);
+        Ad(a, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+        return a
+    }
+
+    function Bd() {
+        var a = Array(16);
+        Ad(a, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
+        return a
+    }
+
+    function Ad(a, c, d, e, f, g, h, k, n, p, q, r, t, u, A, z, D) {
+        a[0] = c;
+        a[1] = d;
+        a[2] = e;
+        a[3] = f;
+        a[4] = g;
+        a[5] = h;
+        a[6] = k;
+        a[7] = n;
+        a[8] = p;
+        a[9] = q;
+        a[10] = r;
+        a[11] = t;
+        a[12] = u;
+        a[13] = A;
+        a[14] = z;
+        a[15] = D
+    }
+
+    function Cd(a, c) {
+        a[0] = c[0];
+        a[1] = c[1];
+        a[2] = c[2];
+        a[3] = c[3];
+        a[4] = c[4];
+        a[5] = c[5];
+        a[6] = c[6];
+        a[7] = c[7];
+        a[8] = c[8];
+        a[9] = c[9];
+        a[10] = c[10];
+        a[11] = c[11];
+        a[12] = c[12];
+        a[13] = c[13];
+        a[14] = c[14];
+        a[15] = c[15]
+    }
+
+    function Dd(a) {
+        a[0] = 1;
+        a[1] = 0;
+        a[2] = 0;
+        a[3] = 0;
+        a[4] = 0;
+        a[5] = 1;
+        a[6] = 0;
+        a[7] = 0;
+        a[8] = 0;
+        a[9] = 0;
+        a[10] = 1;
+        a[11] = 0;
+        a[12] = 0;
+        a[13] = 0;
+        a[14] = 0;
+        a[15] = 1
+    }
+
+    function Ed(a, c, d) {
+        var e = a[0],
+            f = a[1],
+            g = a[2],
+            h = a[3],
+            k = a[4],
+            n = a[5],
+            p = a[6],
+            q = a[7],
+            r = a[8],
+            t = a[9],
+            u = a[10],
+            A = a[11],
+            z = a[12],
+            D = a[13],
+            B = a[14];
+        a = a[15];
+        var y = c[0],
+            K = c[1],
+            J = c[2],
+            H = c[3],
+            P = c[4],
+            sa = c[5],
+            Oa = c[6],
+            N = c[7],
+            za = c[8],
+            cb = c[9],
+            Ga = c[10],
+            Bb = c[11],
+            $a = c[12],
+            Ic = c[13],
+            lc = c[14];
+        c = c[15];
+        d[0] = e * y + k * K + r * J + z * H;
+        d[1] = f * y + n * K + t * J + D * H;
+        d[2] = g * y + p * K + u * J + B * H;
+        d[3] = h * y + q * K + A * J + a * H;
+        d[4] = e * P + k * sa + r * Oa + z * N;
+        d[5] = f * P + n * sa + t * Oa + D * N;
+        d[6] = g * P + p * sa + u * Oa + B * N;
+        d[7] = h * P + q * sa + A * Oa + a * N;
+        d[8] = e * za + k * cb + r * Ga + z * Bb;
+        d[9] = f * za + n * cb + t * Ga + D * Bb;
+        d[10] = g * za + p * cb + u * Ga + B * Bb;
+        d[11] = h * za + q * cb + A * Ga + a * Bb;
+        d[12] = e * $a + k * Ic + r * lc + z * c;
+        d[13] = f * $a + n * Ic + t * lc + D * c;
+        d[14] = g * $a + p * Ic + u * lc + B * c;
+        d[15] = h * $a + q * Ic + A * lc + a * c
+    }
+
+    function Fd(a, c) {
+        var d = a[0],
+            e = a[1],
+            f = a[2],
+            g = a[3],
+            h = a[4],
+            k = a[5],
+            n = a[6],
+            p = a[7],
+            q = a[8],
+            r = a[9],
+            t = a[10],
+            u = a[11],
+            A = a[12],
+            z = a[13],
+            D = a[14],
+            B = a[15],
+            y = d * k - e * h,
+            K = d * n - f * h,
+            J = d * p - g * h,
+            H = e * n - f * k,
+            P = e * p - g * k,
+            sa = f * p - g * n,
+            Oa = q * z - r * A,
+            N = q * D - t * A,
+            za = q * B - u * A,
+            cb = r * D - t * z,
+            Ga = r * B - u * z,
+            Bb = t * B - u * D,
+            $a = y * Bb - K * Ga + J * cb + H * za - P * N + sa * Oa;
+        0 != $a && ($a = 1 / $a, c[0] = (k * Bb - n * Ga + p * cb) * $a, c[1] = (-e * Bb + f * Ga - g * cb) * $a, c[2] = (z * sa - D * P + B * H) * $a, c[3] = (-r * sa + t * P - u * H) * $a, c[4] = (-h * Bb + n * za - p * N) * $a, c[5] = (d * Bb - f * za + g * N) * $a, c[6] = (-A * sa + D * J - B * K) * $a, c[7] = (q * sa - t * J + u * K) * $a, c[8] = (h * Ga - k * za + p * Oa) * $a, c[9] = (-d * Ga + e * za - g * Oa) * $a, c[10] = (A * P - z * J + B * y) * $a, c[11] = (-q * P + r * J - u * y) * $a, c[12] = (-h * cb + k * N - n * Oa) * $a, c[13] = (d * cb - e * N + f * Oa) * $a, c[14] = (-A * H + z * K - D * y) * $a, c[15] = (q * H - r * K + t * y) * $a)
+    }
+
+    function Gd(a, c, d) {
+        var e = a[1] * c + a[5] * d + 0 * a[9] + a[13],
+            f = a[2] * c + a[6] * d + 0 * a[10] + a[14],
+            g = a[3] * c + a[7] * d + 0 * a[11] + a[15];
+        a[12] = a[0] * c + a[4] * d + 0 * a[8] + a[12];
+        a[13] = e;
+        a[14] = f;
+        a[15] = g
+    }
+
+    function Hd(a, c, d) {
+        Ad(a, a[0] * c, a[1] * c, a[2] * c, a[3] * c, a[4] * d, a[5] * d, a[6] * d, a[7] * d, 1 * a[8], 1 * a[9], 1 * a[10], 1 * a[11], a[12], a[13], a[14], a[15])
+    }
+
+    function Id(a, c) {
+        var d = a[0],
+            e = a[1],
+            f = a[2],
+            g = a[3],
+            h = a[4],
+            k = a[5],
+            n = a[6],
+            p = a[7],
+            q = Math.cos(c),
+            r = Math.sin(c);
+        a[0] = d * q + h * r;
+        a[1] = e * q + k * r;
+        a[2] = f * q + n * r;
+        a[3] = g * q + p * r;
+        a[4] = d * -r + h * q;
+        a[5] = e * -r + k * q;
+        a[6] = f * -r + n * q;
+        a[7] = g * -r + p * q
+    }
+    new Float64Array(3);
+    new Float64Array(3);
+    new Float64Array(4);
+    new Float64Array(4);
+    new Float64Array(4);
+    new Float64Array(16);
+
+    function Jd(a) {
+        for (var c = Kd(), d = 0, e = a.length; d < e; ++d) Ld(c, a[d]);
+        return c
+    }
+
+    function Md(a, c, d) {
+        var e = Math.min.apply(null, a),
+            f = Math.min.apply(null, c);
+        a = Math.max.apply(null, a);
+        c = Math.max.apply(null, c);
+        return Nd(e, f, a, c, d)
+    }
+
+    function Od(a, c, d) {
+        return m(d) ? (d[0] = a[0] - c, d[1] = a[1] - c, d[2] = a[2] + c, d[3] = a[3] + c, d) : [a[0] - c, a[1] - c, a[2] + c, a[3] + c]
+    }
+
+    function Pd(a, c) {
+        return m(c) ? (c[0] = a[0], c[1] = a[1], c[2] = a[2], c[3] = a[3], c) : a.slice()
+    }
+
+    function Qd(a, c, d) {
+        c = c < a[0] ? a[0] - c : a[2] < c ? c - a[2] : 0;
+        a = d < a[1] ? a[1] - d : a[3] < d ? d - a[3] : 0;
+        return c * c + a * a
+    }
+
+    function Rd(a, c) {
+        return a[0] <= c[0] && c[2] <= a[2] && a[1] <= c[1] && c[3] <= a[3]
+    }
+
+    function Sd(a, c, d) {
+        return a[0] <= c && c <= a[2] && a[1] <= d && d <= a[3]
+    }
+
+    function Td(a, c) {
+        var d = a[1],
+            e = a[2],
+            f = a[3],
+            g = c[0],
+            h = c[1],
+            k = 0;
+        g < a[0] ? k = k | 16 : g > e && (k = k | 4);
+        h < d ? k |= 8 : h > f && (k |= 2);
+        0 === k && (k = 1);
+        return k
+    }
+
+    function Kd() {
+        return [Infinity, Infinity, -Infinity, -Infinity]
+    }
+
+    function Nd(a, c, d, e, f) {
+        return m(f) ? (f[0] = a, f[1] = c, f[2] = d, f[3] = e, f) : [a, c, d, e]
+    }
+
+    function Ud(a, c) {
+        var d = a[0],
+            e = a[1];
+        return Nd(d, e, d, e, c)
+    }
+
+    function Vd(a, c) {
+        return a[0] == c[0] && a[2] == c[2] && a[1] == c[1] && a[3] == c[3]
+    }
+
+    function Wd(a, c) {
+        c[0] < a[0] && (a[0] = c[0]);
+        c[2] > a[2] && (a[2] = c[2]);
+        c[1] < a[1] && (a[1] = c[1]);
+        c[3] > a[3] && (a[3] = c[3]);
+        return a
+    }
+
+    function Ld(a, c) {
+        c[0] < a[0] && (a[0] = c[0]);
+        c[0] > a[2] && (a[2] = c[0]);
+        c[1] < a[1] && (a[1] = c[1]);
+        c[1] > a[3] && (a[3] = c[1])
+    }
+
+    function Xd(a, c, d, e, f) {
+        for (; d < e; d += f) {
+            var g = a,
+                h = c[d],
+                k = c[d + 1];
+            g[0] = Math.min(g[0], h);
+            g[1] = Math.min(g[1], k);
+            g[2] = Math.max(g[2], h);
+            g[3] = Math.max(g[3], k)
+        }
+        return a
+    }
+
+    function Yd(a, c) {
+        var d;
+        return (d = c.call(void 0, Zd(a))) || (d = c.call(void 0, $d(a))) || (d = c.call(void 0, ae(a))) ? d : (d = c.call(void 0, be(a))) ? d : !1
+    }
+
+    function Zd(a) {
+        return [a[0], a[1]]
+    }
+
+    function $d(a) {
+        return [a[2], a[1]]
+    }
+
+    function ce(a) {
+        return [(a[0] + a[2]) / 2, (a[1] + a[3]) / 2]
+    }
+
+    function de(a, c) {
+        var d;
+        "bottom-left" === c ? d = Zd(a) : "bottom-right" === c ? d = $d(a) : "top-left" === c ? d = be(a) : "top-right" === c && (d = ae(a));
+        return d
+    }
+
+    function ee(a, c, d, e) {
+        var f = c * e[0] / 2;
+        e = c * e[1] / 2;
+        c = Math.cos(d);
+        d = Math.sin(d);
+        f = [-f, -f, f, f];
+        e = [-e, e, -e, e];
+        var g, h, k;
+        for (g = 0; 4 > g; ++g) h = f[g], k = e[g], f[g] = a[0] + h * c - k * d, e[g] = a[1] + h * d + k * c;
+        return Md(f, e, void 0)
+    }
+
+    function fe(a) {
+        return a[3] - a[1]
+    }
+
+    function ge(a, c, d) {
+        d = m(d) ? d : Kd();
+        he(a, c) && (d[0] = a[0] > c[0] ? a[0] : c[0], d[1] = a[1] > c[1] ? a[1] : c[1], d[2] = a[2] < c[2] ? a[2] : c[2], d[3] = a[3] < c[3] ? a[3] : c[3]);
+        return d
+    }
+
+    function be(a) {
+        return [a[0], a[3]]
+    }
+
+    function ae(a) {
+        return [a[2], a[3]]
+    }
+
+    function ie(a) {
+        return a[2] - a[0]
+    }
+
+    function he(a, c) {
+        return a[0] <= c[2] && a[2] >= c[0] && a[1] <= c[3] && a[3] >= c[1]
+    }
+
+    function je(a) {
+        return a[2] < a[0] || a[3] < a[1]
+    }
+
+    function ke(a, c) {
+        var d = (a[2] - a[0]) / 2 * (c - 1),
+            e = (a[3] - a[1]) / 2 * (c - 1);
+        a[0] -= d;
+        a[2] += d;
+        a[1] -= e;
+        a[3] += e
+    }
+
+    function le(a, c, d) {
+        a = [a[0], a[1], a[0], a[3], a[2], a[1], a[2], a[3]];
+        c(a, a, 2);
+        return Md([a[0], a[2], a[4], a[6]], [a[1], a[3], a[5], a[7]], d)
+    };
+    /*
+
+     Latitude/longitude spherical geodesy formulae taken from
+     http://www.movable-type.co.uk/scripts/latlong.html
+     Licensed under CC-BY-3.0.
+    */
+    function me(a) {
+        this.radius = a
+    }
+    me.prototype.a = function(a) {
+        for (var c = 0, d = a.length, e = a[d - 1][0], f = a[d - 1][1], g = 0; g < d; g++) var h = a[g][0],
+            k = a[g][1],
+            c = c + Yb(h - e) * (2 + Math.sin(Yb(f)) + Math.sin(Yb(k))),
+            e = h,
+            f = k;
+        return c * this.radius * this.radius / 2
+    };
+    me.prototype.b = function(a, c) {
+        var d = Yb(a[1]),
+            e = Yb(c[1]),
+            f = (e - d) / 2,
+            g = Yb(c[0] - a[0]) / 2,
+            d = Math.sin(f) * Math.sin(f) + Math.sin(g) * Math.sin(g) * Math.cos(d) * Math.cos(e);
+        return 2 * this.radius * Math.atan2(Math.sqrt(d), Math.sqrt(1 - d))
+    };
+    me.prototype.offset = function(a, c, d) {
+        var e = Yb(a[1]);
+        c /= this.radius;
+        var f = Math.asin(Math.sin(e) * Math.cos(c) + Math.cos(e) * Math.sin(c) * Math.cos(d));
+        return [180 * (Yb(a[0]) + Math.atan2(Math.sin(d) * Math.sin(c) * Math.cos(e), Math.cos(c) - Math.sin(e) * Math.sin(f))) / Math.PI, 180 * f / Math.PI]
+    };
+    var ne = new me(6370997);
+    var oe = {};
+    oe.degrees = 2 * Math.PI * ne.radius / 360;
+    oe.ft = .3048;
+    oe.m = 1;
+    oe["us-ft"] = 1200 / 3937;
+
+    function pe(a) {
+        this.b = a.code;
+        this.a = a.units;
+        this.f = m(a.extent) ? a.extent : null;
+        this.g = m(a.worldExtent) ? a.worldExtent : null;
+        this.d = m(a.axisOrientation) ? a.axisOrientation : "enu";
+        this.c = (this.e = m(a.global) ? a.global : !1) && null !== this.f;
+        this.q = m(a.getPointResolution) ? a.getPointResolution : this.rj;
+        this.i = null;
+        if ("function" == typeof proj4) {
+            var c = a.code,
+                d = proj4.defs(c);
+            if (m(d)) {
+                m(d.axis) && !m(a.axisOrientation) && (this.d = d.axis);
+                m(a.units) || (a = d.units, !m(a) && m(d.to_meter) && (a = d.to_meter.toString(), oe[a] = d.to_meter), this.a = a);
+                a = qe;
+                var e, f;
+                for (e in a) f = proj4.defs(e), m(f) && (a = re(e), f === d ? se([a, this]) : (f = proj4(e, c), te(a, this, f.forward, f.inverse)))
+            }
+        }
+    }
+    l = pe.prototype;
+    l.Ri = function() {
+        return this.b
+    };
+    l.G = function() {
+        return this.f
+    };
+    l.Ll = function() {
+        return this.a
+    };
+    l.Gd = function() {
+        return oe[this.a]
+    };
+    l.Cj = function() {
+        return this.g
+    };
+
+    function ue(a) {
+        return a.d
+    }
+    l.Ml = function() {
+        return this.e
+    };
+    l.Yn = function(a) {
+        this.c = (this.e = a) && null !== this.f
+    };
+    l.Nl = function(a) {
+        this.f = a;
+        this.c = this.e && null !== a
+    };
+    l.lo = function(a) {
+        this.g = a
+    };
+    l.Xn = function(a) {
+        this.q = a
+    };
+    l.rj = function(a, c) {
+        if ("degrees" == this.a) return a;
+        var d = ve(this, re("EPSG:4326")),
+            e = [c[0] - a / 2, c[1], c[0] + a / 2, c[1], c[0], c[1] - a / 2, c[0], c[1] + a / 2],
+            e = d(e, e, 2),
+            d = (ne.b(e.slice(0, 2), e.slice(2, 4)) + ne.b(e.slice(4, 6), e.slice(6, 8))) / 2,
+            e = this.Gd();
+        m(e) && (d /= e);
+        return d
+    };
+    l.getPointResolution = function(a, c) {
+        return this.q(a, c)
+    };
+    var qe = {},
+        we = {};
+
+    function se(a) {
+        xe(a);
+        Sa(a, function(c) {
+            Sa(a, function(a) {
+                c !== a && ye(c, a, ze)
+            })
+        })
+    }
+
+    function Ae() {
+        var a = Be,
+            c = Ce,
+            d = De;
+        Sa(Ee, function(e) {
+            Sa(a, function(a) {
+                ye(e, a, c);
+                ye(a, e, d)
+            })
+        })
+    }
+
+    function Fe(a) {
+        qe[a.b] = a;
+        ye(a, a, ze)
+    }
+
+    function xe(a) {
+        var c = [];
+        Sa(a, function(a) {
+            c.push(Fe(a))
+        })
+    }
+
+    function Ge(a) {
+        return null != a ? ia(a) ? re(a) : a : re("EPSG:3857")
+    }
+
+    function ye(a, c, d) {
+        a = a.b;
+        c = c.b;
+        a in we || (we[a] = {});
+        we[a][c] = d
+    }
+
+    function te(a, c, d, e) {
+        a = re(a);
+        c = re(c);
+        ye(a, c, He(d));
+        ye(c, a, He(e))
+    }
+
+    function He(a) {
+        return function(c, d, e) {
+            var f = c.length;
+            e = m(e) ? e : 2;
+            d = m(d) ? d : Array(f);
+            var g, h;
+            for (h = 0; h < f; h += e)
+                for (g = a([c[h], c[h + 1]]), d[h] = g[0], d[h + 1] = g[1], g = e - 1; 2 <= g; --g) d[h + g] = c[h + g];
+            return d
+        }
+    }
+
+    function re(a) {
+        var c;
+        a instanceof pe ? c = a : ia(a) ? (c = qe[a], !m(c) && "function" == typeof proj4 && m(proj4.defs(a)) && (c = new pe({
+            code: a
+        }), Fe(c))) : c = null;
+        return c
+    }
+
+    function Ie(a, c) {
+        return a === c ? !0 : a.b === c.b ? !0 : a.a != c.a ? !1 : ve(a, c) === ze
+    }
+
+    function Je(a, c) {
+        var d = re(a),
+            e = re(c);
+        return ve(d, e)
+    }
+
+    function ve(a, c) {
+        var d = a.b,
+            e = c.b,
+            f;
+        d in we && e in we[d] && (f = we[d][e]);
+        m(f) || (f = Ke);
+        return f
+    }
+
+    function Ke(a, c) {
+        if (m(c) && a !== c) {
+            for (var d = 0, e = a.length; d < e; ++d) c[d] = a[d];
+            a = c
+        }
+        return a
+    }
+
+    function ze(a, c) {
+        var d;
+        if (m(c)) {
+            d = 0;
+            for (var e = a.length; d < e; ++d) c[d] = a[d];
+            d = c
+        } else d = a.slice();
+        return d
+    }
+
+    function Le(a, c, d) {
+        return Je(c, d)(a, void 0, a.length)
+    }
+
+    function Me(a, c, d) {
+        c = Je(c, d);
+        return le(a, c)
+    };
+
+    function Ne(a) {
+        fd.call(this);
+        a = m(a) ? a : {};
+        this.c = [0, 0];
+        var c = {};
+        c.center = m(a.center) ? a.center : null;
+        this.e = Ge(a.projection);
+        var d, e, f, g = m(a.minZoom) ? a.minZoom : 0;
+        d = m(a.maxZoom) ? a.maxZoom : 28;
+        var h = m(a.zoomFactor) ? a.zoomFactor : 2;
+        if (m(a.resolutions)) d = a.resolutions, e = d[0], f = d[d.length - 1], d = bc(d);
+        else {
+            e = Ge(a.projection);
+            f = e.G();
+            var k = (null === f ? 360 * oe.degrees / oe[e.a] : Math.max(ie(f), fe(f))) / 256 / Math.pow(2, 0),
+                n = k / Math.pow(2, 28);
+            e = a.maxResolution;
+            m(e) ? g = 0 : e = k / Math.pow(h, g);
+            f = a.minResolution;
+            m(f) || (f = m(a.maxZoom) ? m(a.maxResolution) ? e / Math.pow(h, d) : k / Math.pow(h, d) : n);
+            d = g + Math.floor(Math.log(e / f) / Math.log(h));
+            f = e / Math.pow(h, d - g);
+            d = cc(h, e, d - g)
+        }
+        this.a = e;
+        this.g = f;
+        this.d = g;
+        g = m(a.extent) ? Zb(a.extent) : $b;
+        (m(a.enableRotation) ? a.enableRotation : 1) ? (e = a.constrainRotation, e = m(e) && !0 !== e ? !1 === e ? ec : ja(e) ? fc(e) : ec : gc()) : e = dc;
+        this.f = new hc(g, d, e);
+        m(a.resolution) ? c.resolution = a.resolution : m(a.zoom) && (c.resolution = this.constrainResolution(this.a, a.zoom - this.d));
+        c.rotation = m(a.rotation) ? a.rotation : 0;
+        this.t(c)
+    }
+    w(Ne, fd);
+    l = Ne.prototype;
+    l.xd = function(a) {
+        return this.f.center(a)
+    };
+    l.constrainResolution = function(a, c, d) {
+        return this.f.resolution(a, c || 0, d || 0)
+    };
+    l.constrainRotation = function(a, c) {
+        return this.f.rotation(a, c || 0)
+    };
+    l.Ca = function() {
+        return this.get("center")
+    };
+    l.Pc = function(a) {
+        var c = this.Ca(),
+            d = this.ya();
+        return [c[0] - d * a[0] / 2, c[1] - d * a[1] / 2, c[0] + d * a[0] / 2, c[1] + d * a[1] / 2]
+    };
+    l.dl = function() {
+        return this.e
+    };
+    l.ya = function() {
+        return this.get("resolution")
+    };
+
+    function Oe(a, c) {
+        return Math.max(ie(a) / c[0], fe(a) / c[1])
+    }
+
+    function Qe(a) {
+        var c = a.a,
+            d = Math.log(c / a.g) / Math.log(2);
+        return function(a) {
+            return c / Math.pow(2, a * d)
+        }
+    }
+    l.Da = function() {
+        return this.get("rotation")
+    };
+
+    function Re(a) {
+        var c = a.a,
+            d = Math.log(c / a.g) / Math.log(2);
+        return function(a) {
+            return Math.log(c / a) / Math.log(2) / d
+        }
+    }
+
+    function Se(a) {
+        var c = a.Ca(),
+            d = a.e,
+            e = a.ya();
+        a = a.Da();
+        return {
+            center: c.slice(),
+            projection: m(d) ? d : null,
+            resolution: e,
+            rotation: a
+        }
+    }
+    l.Ej = function() {
+        var a, c = this.ya();
+        if (m(c)) {
+            var d, e = 0;
+            do {
+                d = this.constrainResolution(this.a, e);
+                if (d == c) {
+                    a = e;
+                    break
+                }++e
+            } while (d > this.g)
+        }
+        return m(a) ? this.d + a : a
+    };
+    l.Me = function(a, c) {
+        if (!je(a)) {
+            this.Na(ce(a));
+            var d = Oe(a, c),
+                e = this.constrainResolution(d, 0, 0);
+            e < d && (e = this.constrainResolution(e, -1, 0));
+            this.tb(e)
+        }
+    };
+    l.Fi = function(a, c, d) {
+        var e = m(d) ? d : {};
+        d = m(e.padding) ? e.padding : [0, 0, 0, 0];
+        var f = m(e.constrainResolution) ? e.constrainResolution : !0,
+            g = m(e.nearest) ? e.nearest : !1,
+            h;
+        m(e.minResolution) ? h = e.minResolution : m(e.maxZoom) ? h = this.constrainResolution(this.a, e.maxZoom - this.d, 0) : h = 0;
+        var k = a.j,
+            n = this.Da(),
+            e = Math.cos(-n),
+            n = Math.sin(-n),
+            p = Infinity,
+            q = Infinity,
+            r = -Infinity,
+            t = -Infinity;
+        a = a.s;
+        for (var u = 0, A = k.length; u < A; u += a) var z = k[u] * e - k[u + 1] * n,
+            D = k[u] * n + k[u + 1] * e,
+            p = Math.min(p, z),
+            q = Math.min(q, D),
+            r = Math.max(r, z),
+            t = Math.max(t, D);
+        c = Oe([p, q, r, t], [c[0] - d[1] - d[3], c[1] - d[0] - d[2]]);
+        c = isNaN(c) ? h : Math.max(c, h);
+        f && (h = this.constrainResolution(c, 0, 0), !g && h < c && (h = this.constrainResolution(h, -1, 0)), c = h);
+        this.tb(c);
+        n = -n;
+        g = (p + r) / 2 + (d[1] - d[3]) / 2 * c;
+        d = (q + t) / 2 + (d[0] - d[2]) / 2 * c;
+        this.Na([g * e - d * n, d * e + g * n])
+    };
+    l.Ai = function(a, c, d) {
+        var e = this.Da(),
+            f = Math.cos(-e),
+            e = Math.sin(-e),
+            g = a[0] * f - a[1] * e;
+        a = a[1] * f + a[0] * e;
+        var h = this.ya(),
+            g = g + (c[0] / 2 - d[0]) * h;
+        a += (d[1] - c[1] / 2) * h;
+        e = -e;
+        this.Na([g * f - a * e, a * f + g * e])
+    };
+
+    function Te(a) {
+        return null != a.Ca() && m(a.ya())
+    }
+    l.rotate = function(a, c) {
+        if (m(c)) {
+            var d, e = this.Ca();
+            m(e) && (d = [e[0] - c[0], e[1] - c[1]], rd(d, a - this.Da()), md(d, c));
+            this.Na(d)
+        }
+        this.be(a)
+    };
+    l.Na = function(a) {
+        this.set("center", a)
+    };
+
+    function Ue(a, c) {
+        a.c[1] += c
+    }
+    l.tb = function(a) {
+        this.set("resolution", a)
+    };
+    l.be = function(a) {
+        this.set("rotation", a)
+    };
+    l.no = function(a) {
+        a = this.constrainResolution(this.a, a - this.d, 0);
+        this.tb(a)
+    };
+
+    function Ve(a) {
+        return 1 - Math.pow(1 - a, 3)
+    };
+
+    function We(a) {
+        return 3 * a * a - 2 * a * a * a
+    }
+
+    function Xe(a) {
+        return a
+    }
+
+    function Ye(a) {
+        return .5 > a ? We(2 * a) : 1 - We(2 * (a - .5))
+    };
+
+    function Ze(a) {
+        var c = a.source,
+            d = m(a.start) ? a.start : ua(),
+            e = c[0],
+            f = c[1],
+            g = m(a.duration) ? a.duration : 1E3,
+            h = m(a.easing) ? a.easing : We;
+        return function(a, c) {
+            if (c.time < d) return c.animate = !0, c.viewHints[0] += 1, !0;
+            if (c.time < d + g) {
+                var p = 1 - h((c.time - d) / g),
+                    q = e - c.viewState.center[0],
+                    r = f - c.viewState.center[1];
+                c.animate = !0;
+                c.viewState.center[0] += p * q;
+                c.viewState.center[1] += p * r;
+                c.viewHints[0] += 1;
+                return !0
+            }
+            return !1
+        }
+    }
+
+    function $e(a) {
+        var c = m(a.rotation) ? a.rotation : 0,
+            d = m(a.start) ? a.start : ua(),
+            e = m(a.duration) ? a.duration : 1E3,
+            f = m(a.easing) ? a.easing : We,
+            g = m(a.anchor) ? a.anchor : null;
+        return function(a, k) {
+            if (k.time < d) return k.animate = !0, k.viewHints[0] += 1, !0;
+            if (k.time < d + e) {
+                var n = 1 - f((k.time - d) / e),
+                    n = (c - k.viewState.rotation) * n;
+                k.animate = !0;
+                k.viewState.rotation += n;
+                if (null !== g) {
+                    var p = k.viewState.center;
+                    p[0] -= g[0];
+                    p[1] -= g[1];
+                    rd(p, n);
+                    md(p, g)
+                }
+                k.viewHints[0] += 1;
+                return !0
+            }
+            return !1
+        }
+    }
+
+    function af(a) {
+        var c = a.resolution,
+            d = m(a.start) ? a.start : ua(),
+            e = m(a.duration) ? a.duration : 1E3,
+            f = m(a.easing) ? a.easing : We;
+        return function(a, h) {
+            if (h.time < d) return h.animate = !0, h.viewHints[0] += 1, !0;
+            if (h.time < d + e) {
+                var k = 1 - f((h.time - d) / e),
+                    n = c - h.viewState.resolution;
+                h.animate = !0;
+                h.viewState.resolution += k * n;
+                h.viewHints[0] += 1;
+                return !0
+            }
+            return !1
+        }
+    };
+
+    function bf(a, c, d, e) {
+        return m(e) ? (e[0] = a, e[1] = c, e[2] = d, e) : [a, c, d]
+    }
+
+    function cf(a, c, d) {
+        return a + "/" + c + "/" + d
+    }
+
+    function df(a) {
+        var c = a[0],
+            d = Array(c),
+            e = 1 << c - 1,
+            f, g;
+        for (f = 0; f < c; ++f) g = 48, a[1] & e && (g += 1), a[2] & e && (g += 2), d[f] = String.fromCharCode(g), e >>= 1;
+        return d.join("")
+    }
+
+    function ef(a) {
+        return cf(a[0], a[1], a[2])
+    };
+
+    function ff(a, c, d, e) {
+        this.b = a;
+        this.d = c;
+        this.c = d;
+        this.a = e
+    }
+
+    function gf(a, c, d, e, f) {
+        return m(f) ? (f.b = a, f.d = c, f.c = d, f.a = e, f) : new ff(a, c, d, e)
+    }
+    ff.prototype.contains = function(a) {
+        return hf(this, a[1], a[2])
+    };
+
+    function hf(a, c, d) {
+        return a.b <= c && c <= a.d && a.c <= d && d <= a.a
+    }
+
+    function jf(a, c) {
+        return a.b == c.b && a.c == c.c && a.d == c.d && a.a == c.a
+    }
+
+    function kf(a) {
+        return a.d - a.b + 1
+    }
+
+    function lf(a, c) {
+        return a.b <= c.d && a.d >= c.b && a.c <= c.a && a.a >= c.c
+    };
+
+    function mf(a) {
+        this.a = a.html;
+        this.b = m(a.tileRanges) ? a.tileRanges : null
+    }
+    mf.prototype.c = function() {
+        return this.a
+    };
+
+    function nf(a, c, d) {
+        rc.call(this, a, d);
+        this.element = c
+    }
+    w(nf, rc);
+
+    function of(a) {
+        fd.call(this);
+        this.a = m(a) ? a : [];
+        pf(this)
+    }
+    w(of, fd);
+    l = of.prototype;
+    l.clear = function() {
+        for (; 0 < this.Ib();) this.pop()
+    };
+    l.af = function(a) {
+        var c, d;
+        c = 0;
+        for (d = a.length; c < d; ++c) this.push(a[c]);
+        return this
+    };
+    l.forEach = function(a, c) {
+        Sa(this.a, a, c)
+    };
+    l.Hk = function() {
+        return this.a
+    };
+    l.item = function(a) {
+        return this.a[a]
+    };
+    l.Ib = function() {
+        return this.get("length")
+    };
+    l.Td = function(a, c) {
+        eb(this.a, a, 0, c);
+        pf(this);
+        this.dispatchEvent(new nf("add", c, this))
+    };
+    l.pop = function() {
+        return this.tf(this.Ib() - 1)
+    };
+    l.push = function(a) {
+        var c = this.a.length;
+        this.Td(c, a);
+        return c
+    };
+    l.remove = function(a) {
+        var c = this.a,
+            d, e;
+        d = 0;
+        for (e = c.length; d < e; ++d)
+            if (c[d] === a) return this.tf(d)
+    };
+    l.tf = function(a) {
+        var c = this.a[a];
+        Qa.splice.call(this.a, a, 1);
+        pf(this);
+        this.dispatchEvent(new nf("remove", c, this));
+        return c
+    };
+    l.Un = function(a, c) {
+        var d = this.Ib();
+        if (a < d) d = this.a[a], this.a[a] = c, this.dispatchEvent(new nf("remove", d, this)), this.dispatchEvent(new nf("add", c, this));
+        else {
+            for (; d < a; ++d) this.Td(d, void 0);
+            this.Td(a, c)
+        }
+    };
+
+    function pf(a) {
+        a.set("length", a.a.length)
+    };
+    var qf = /^#(?:[0-9a-f]{3}){1,2}$/i,
+        rf = /^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i,
+        sf = /^(?:rgba)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|1|0\.\d{0,10})\)$/i;
+
+    function tf(a) {
+        return ga(a) ? a : uf(a)
+    }
+
+    function vf(a) {
+        if (!ia(a)) {
+            var c = a[0];
+            c != (c | 0) && (c = c + .5 | 0);
+            var d = a[1];
+            d != (d | 0) && (d = d + .5 | 0);
+            var e = a[2];
+            e != (e | 0) && (e = e + .5 | 0);
+            a = "rgba(" + c + "," + d + "," + e + "," + a[3] + ")"
+        }
+        return a
+    }
+    var uf = function() {
+        var a = {},
+            c = 0;
+        return function(d) {
+            var e;
+            if (a.hasOwnProperty(d)) e = a[d];
+            else {
+                if (1024 <= c) {
+                    e = 0;
+                    for (var f in a) 0 === (e++ & 3) && (delete a[f], --c)
+                }
+                var g, h;
+                qf.exec(d) ? (h = 3 == d.length - 1 ? 1 : 2, e = parseInt(d.substr(1 + 0 * h, h), 16), f = parseInt(d.substr(1 + 1 * h, h), 16), g = parseInt(d.substr(1 + 2 * h, h), 16), 1 == h && (e = (e << 4) + e, f = (f << 4) + f, g = (g << 4) + g), e = [e, f, g, 1]) : (h = sf.exec(d)) ? (e = Number(h[1]), f = Number(h[2]), g = Number(h[3]), h = Number(h[4]), e = [e, f, g, h], e = wf(e, e)) : (h = rf.exec(d)) ? (e = Number(h[1]), f = Number(h[2]), g = Number(h[3]), e = [e, f, g, 1], e = wf(e, e)) : e = void 0;
+                a[d] = e;
+                ++c
+            }
+            return e
+        }
+    }();
+
+    function wf(a, c) {
+        var d = m(c) ? c : [];
+        d[0] = Vb(a[0] + .5 | 0, 0, 255);
+        d[1] = Vb(a[1] + .5 | 0, 0, 255);
+        d[2] = Vb(a[2] + .5 | 0, 0, 255);
+        d[3] = Vb(a[3], 0, 1);
+        return d
+    };
+
+    function xf() {
+        this.g = zd();
+        this.a = void 0;
+        this.b = zd();
+        this.d = void 0;
+        this.c = zd();
+        this.f = void 0;
+        this.e = zd();
+        this.q = void 0;
+        this.i = zd()
+    }
+
+    function yf(a, c, d, e, f) {
+        var g = !1;
+        m(c) && c !== a.a && (g = a.b, Dd(g), g[12] = c, g[13] = c, g[14] = c, g[15] = 1, a.a = c, g = !0);
+        if (m(d) && d !== a.d) {
+            g = a.c;
+            Dd(g);
+            g[0] = d;
+            g[5] = d;
+            g[10] = d;
+            g[15] = 1;
+            var h = -.5 * d + .5;
+            g[12] = h;
+            g[13] = h;
+            g[14] = h;
+            g[15] = 1;
+            a.d = d;
+            g = !0
+        }
+        m(e) && e !== a.f && (g = Math.cos(e), h = Math.sin(e), Ad(a.e, .213 + .787 * g - .213 * h, .213 - .213 * g + .143 * h, .213 - .213 * g - .787 * h, 0, .715 - .715 * g - .715 * h, .715 + .285 * g + .14 * h, .715 - .715 * g + .715 * h, 0, .072 - .072 * g + .928 * h, .072 - .072 * g - .283 * h, .072 + .928 * g + .072 * h, 0, 0, 0, 0, 1), a.f = e, g = !0);
+        m(f) && f !== a.q && (Ad(a.i, .213 + .787 * f, .213 - .213 * f, .213 - .213 * f, 0, .715 - .715 * f, .715 + .285 * f, .715 - .715 * f, 0, .072 - .072 * f, .072 - .072 * f, .072 + .928 * f, 0, 0, 0, 0, 1), a.q = f, g = !0);
+        g && (g = a.g, Dd(g), m(d) && Ed(g, a.c, g), m(c) && Ed(g, a.b, g), m(f) && Ed(g, a.i, g), m(e) && Ed(g, a.e, g));
+        return a.g
+    };
+    var zf = !Ib || Ib && 9 <= Tb;
+    !Jb && !Ib || Ib && Ib && 9 <= Tb || Jb && Rb("1.9.1");
+    Ib && Rb("9");
+    Gb("area base br col command embed hr img input keygen link meta param source track wbr".split(" "));
+
+    function Af(a, c) {
+        this.x = m(a) ? a : 0;
+        this.y = m(c) ? c : 0
+    }
+    l = Af.prototype;
+    l.clone = function() {
+        return new Af(this.x, this.y)
+    };
+    l.ceil = function() {
+        this.x = Math.ceil(this.x);
+        this.y = Math.ceil(this.y);
+        return this
+    };
+    l.floor = function() {
+        this.x = Math.floor(this.x);
+        this.y = Math.floor(this.y);
+        return this
+    };
+    l.round = function() {
+        this.x = Math.round(this.x);
+        this.y = Math.round(this.y);
+        return this
+    };
+    l.scale = function(a, c) {
+        var d = ja(c) ? c : a;
+        this.x *= a;
+        this.y *= d;
+        return this
+    };
+
+    function Bf(a, c) {
+        this.width = a;
+        this.height = c
+    }
+    l = Bf.prototype;
+    l.clone = function() {
+        return new Bf(this.width, this.height)
+    };
+    l.la = function() {
+        return !(this.width * this.height)
+    };
+    l.ceil = function() {
+        this.width = Math.ceil(this.width);
+        this.height = Math.ceil(this.height);
+        return this
+    };
+    l.floor = function() {
+        this.width = Math.floor(this.width);
+        this.height = Math.floor(this.height);
+        return this
+    };
+    l.round = function() {
+        this.width = Math.round(this.width);
+        this.height = Math.round(this.height);
+        return this
+    };
+    l.scale = function(a, c) {
+        var d = ja(c) ? c : a;
+        this.width *= a;
+        this.height *= d;
+        return this
+    };
+
+    function Cf(a) {
+        return a ? new Df(Ef(a)) : ya || (ya = new Df)
+    }
+
+    function Ff(a) {
+        var c = document;
+        return ia(a) ? c.getElementById(a) : a
+    }
+
+    function Gf(a, c) {
+        pb(c, function(c, e) {
+            "style" == e ? a.style.cssText = c : "class" == e ? a.className = c : "for" == e ? a.htmlFor = c : e in Hf ? a.setAttribute(Hf[e], c) : 0 == e.lastIndexOf("aria-", 0) || 0 == e.lastIndexOf("data-", 0) ? a.setAttribute(e, c) : a[e] = c
+        })
+    }
+    var Hf = {
+        cellpadding: "cellPadding",
+        cellspacing: "cellSpacing",
+        colspan: "colSpan",
+        frameborder: "frameBorder",
+        height: "height",
+        maxlength: "maxLength",
+        role: "role",
+        rowspan: "rowSpan",
+        type: "type",
+        usemap: "useMap",
+        valign: "vAlign",
+        width: "width"
+    };
+
+    function If(a) {
+        a = a.document.documentElement;
+        return new Bf(a.clientWidth, a.clientHeight)
+    }
+
+    function Jf(a, c, d) {
+        var e = arguments,
+            f = document,
+            g = e[0],
+            h = e[1];
+        if (!zf && h && (h.name || h.type)) {
+            g = ["<", g];
+            h.name && g.push(' name="', Da(h.name), '"');
+            if (h.type) {
+                g.push(' type="', Da(h.type), '"');
+                var k = {};
+                Fb(k, h);
+                delete k.type;
+                h = k
+            }
+            g.push(">");
+            g = g.join("")
+        }
+        g = f.createElement(g);
+        h && (ia(h) ? g.className = h : ga(h) ? g.className = h.join(" ") : Gf(g, h));
+        2 < e.length && Kf(f, g, e, 2);
+        return g
+    }
+
+    function Kf(a, c, d, e) {
+        function f(d) {
+            d && c.appendChild(ia(d) ? a.createTextNode(d) : d)
+        }
+        for (; e < d.length; e++) {
+            var g = d[e];
+            !ha(g) || la(g) && 0 < g.nodeType ? f(g) : Sa(Lf(g) ? bb(g) : g, f)
+        }
+    }
+
+    function Mf(a) {
+        return document.createElement(a)
+    }
+
+    function Nf(a, c) {
+        Kf(Ef(a), a, arguments, 1)
+    }
+
+    function Of(a) {
+        for (var c; c = a.firstChild;) a.removeChild(c)
+    }
+
+    function Pf(a, c, d) {
+        a.insertBefore(c, a.childNodes[d] || null)
+    }
+
+    function Qf(a) {
+        a && a.parentNode && a.parentNode.removeChild(a)
+    }
+
+    function Rf(a, c) {
+        var d = c.parentNode;
+        d && d.replaceChild(a, c)
+    }
+
+    function Sf(a) {
+        if (void 0 != a.firstElementChild) a = a.firstElementChild;
+        else
+            for (a = a.firstChild; a && 1 != a.nodeType;) a = a.nextSibling;
+        return a
+    }
+
+    function Tf(a, c) {
+        if (a.contains && 1 == c.nodeType) return a == c || a.contains(c);
+        if ("undefined" != typeof a.compareDocumentPosition) return a == c || Boolean(a.compareDocumentPosition(c) & 16);
+        for (; c && a != c;) c = c.parentNode;
+        return c == a
+    }
+
+    function Ef(a) {
+        return 9 == a.nodeType ? a : a.ownerDocument || a.document
+    }
+
+    function Lf(a) {
+        if (a && "number" == typeof a.length) {
+            if (la(a)) return "function" == typeof a.item || "string" == typeof a.item;
+            if (ka(a)) return "function" == typeof a.item
+        }
+        return !1
+    }
+
+    function Df(a) {
+        this.b = a || ba.document || document
+    }
+
+    function Uf() {
+        return !0
+    }
+
+    function Wf(a) {
+        var c = a.b;
+        a = Kb ? c.body || c.documentElement : c.documentElement;
+        c = c.parentWindow || c.defaultView;
+        return Ib && Rb("10") && c.pageYOffset != a.scrollTop ? new Af(a.scrollLeft, a.scrollTop) : new Af(c.pageXOffset || a.scrollLeft, c.pageYOffset || a.scrollTop)
+    }
+    Df.prototype.appendChild = function(a, c) {
+        a.appendChild(c)
+    };
+    Df.prototype.contains = Tf;
+
+    function Xf(a) {
+        if (a.classList) return a.classList;
+        a = a.className;
+        return ia(a) && a.match(/\S+/g) || []
+    }
+
+    function Yf(a, c) {
+        return a.classList ? a.classList.contains(c) : Ya(Xf(a), c)
+    }
+
+    function Zf(a, c) {
+        a.classList ? a.classList.add(c) : Yf(a, c) || (a.className += 0 < a.className.length ? " " + c : c)
+    }
+
+    function $f(a, c) {
+        a.classList ? a.classList.remove(c) : Yf(a, c) && (a.className = Ta(Xf(a), function(a) {
+            return a != c
+        }).join(" "))
+    }
+
+    function ag(a, c) {
+        Yf(a, c) ? $f(a, c) : Zf(a, c)
+    };
+
+    function bg(a, c, d, e) {
+        this.top = a;
+        this.right = c;
+        this.bottom = d;
+        this.left = e
+    }
+    l = bg.prototype;
+    l.clone = function() {
+        return new bg(this.top, this.right, this.bottom, this.left)
+    };
+    l.contains = function(a) {
+        return this && a ? a instanceof bg ? a.left >= this.left && a.right <= this.right && a.top >= this.top && a.bottom <= this.bottom : a.x >= this.left && a.x <= this.right && a.y >= this.top && a.y <= this.bottom : !1
+    };
+    l.ceil = function() {
+        this.top = Math.ceil(this.top);
+        this.right = Math.ceil(this.right);
+        this.bottom = Math.ceil(this.bottom);
+        this.left = Math.ceil(this.left);
+        return this
+    };
+    l.floor = function() {
+        this.top = Math.floor(this.top);
+        this.right = Math.floor(this.right);
+        this.bottom = Math.floor(this.bottom);
+        this.left = Math.floor(this.left);
+        return this
+    };
+    l.round = function() {
+        this.top = Math.round(this.top);
+        this.right = Math.round(this.right);
+        this.bottom = Math.round(this.bottom);
+        this.left = Math.round(this.left);
+        return this
+    };
+    l.scale = function(a, c) {
+        var d = ja(c) ? c : a;
+        this.left *= a;
+        this.right *= a;
+        this.top *= d;
+        this.bottom *= d;
+        return this
+    };
+
+    function cg(a, c, d, e) {
+        this.left = a;
+        this.top = c;
+        this.width = d;
+        this.height = e
+    }
+    l = cg.prototype;
+    l.clone = function() {
+        return new cg(this.left, this.top, this.width, this.height)
+    };
+    l.contains = function(a) {
+        return a instanceof cg ? this.left <= a.left && this.left + this.width >= a.left + a.width && this.top <= a.top && this.top + this.height >= a.top + a.height : a.x >= this.left && a.x <= this.left + this.width && a.y >= this.top && a.y <= this.top + this.height
+    };
+
+    function dg(a, c) {
+        var d = c.x < a.left ? a.left - c.x : Math.max(c.x - (a.left + a.width), 0),
+            e = c.y < a.top ? a.top - c.y : Math.max(c.y - (a.top + a.height), 0);
+        return d * d + e * e
+    }
+    l.distance = function(a) {
+        return Math.sqrt(dg(this, a))
+    };
+    l.ceil = function() {
+        this.left = Math.ceil(this.left);
+        this.top = Math.ceil(this.top);
+        this.width = Math.ceil(this.width);
+        this.height = Math.ceil(this.height);
+        return this
+    };
+    l.floor = function() {
+        this.left = Math.floor(this.left);
+        this.top = Math.floor(this.top);
+        this.width = Math.floor(this.width);
+        this.height = Math.floor(this.height);
+        return this
+    };
+    l.round = function() {
+        this.left = Math.round(this.left);
+        this.top = Math.round(this.top);
+        this.width = Math.round(this.width);
+        this.height = Math.round(this.height);
+        return this
+    };
+    l.scale = function(a, c) {
+        var d = ja(c) ? c : a;
+        this.left *= a;
+        this.width *= a;
+        this.top *= d;
+        this.height *= d;
+        return this
+    };
+
+    function eg(a, c) {
+        var d = Ef(a);
+        return d.defaultView && d.defaultView.getComputedStyle && (d = d.defaultView.getComputedStyle(a, null)) ? d[c] || d.getPropertyValue(c) || "" : ""
+    }
+
+    function fg(a, c) {
+        return eg(a, c) || (a.currentStyle ? a.currentStyle[c] : null) || a.style && a.style[c]
+    }
+
+    function gg(a, c, d) {
+        var e;
+        c instanceof Af ? (e = c.x, c = c.y) : (e = c, c = d);
+        a.style.left = hg(e);
+        a.style.top = hg(c)
+    }
+
+    function ig(a) {
+        var c;
+        try {
+            c = a.getBoundingClientRect()
+        } catch (d) {
+            return {
+                left: 0,
+                top: 0,
+                right: 0,
+                bottom: 0
+            }
+        }
+        Ib && a.ownerDocument.body && (a = a.ownerDocument, c.left -= a.documentElement.clientLeft + a.body.clientLeft, c.top -= a.documentElement.clientTop + a.body.clientTop);
+        return c
+    }
+
+    function jg(a) {
+        if (1 == a.nodeType) return a = ig(a), new Af(a.left, a.top);
+        var c = ka(a.Qi),
+            d = a;
+        a.targetTouches && a.targetTouches.length ? d = a.targetTouches[0] : c && a.b.targetTouches && a.b.targetTouches.length && (d = a.b.targetTouches[0]);
+        return new Af(d.clientX, d.clientY)
+    }
+
+    function hg(a) {
+        "number" == typeof a && (a = a + "px");
+        return a
+    }
+
+    function kg(a) {
+        var c = lg;
+        if ("none" != fg(a, "display")) return c(a);
+        var d = a.style,
+            e = d.display,
+            f = d.visibility,
+            g = d.position;
+        d.visibility = "hidden";
+        d.position = "absolute";
+        d.display = "inline";
+        a = c(a);
+        d.display = e;
+        d.position = g;
+        d.visibility = f;
+        return a
+    }
+
+    function lg(a) {
+        var c = a.offsetWidth,
+            d = a.offsetHeight,
+            e = Kb && !c && !d;
+        return m(c) && !e || !a.getBoundingClientRect ? new Bf(c, d) : (a = ig(a), new Bf(a.right - a.left, a.bottom - a.top))
+    }
+
+    function mg(a, c) {
+        a.style.display = c ? "" : "none"
+    }
+
+    function ng(a, c, d, e) {
+        if (/^\d+px?$/.test(c)) return parseInt(c, 10);
+        var f = a.style[d],
+            g = a.runtimeStyle[d];
+        a.runtimeStyle[d] = a.currentStyle[d];
+        a.style[d] = c;
+        c = a.style[e];
+        a.style[d] = f;
+        a.runtimeStyle[d] = g;
+        return c
+    }
+
+    function og(a, c) {
+        var d = a.currentStyle ? a.currentStyle[c] : null;
+        return d ? ng(a, d, "left", "pixelLeft") : 0
+    }
+
+    function pg(a, c) {
+        if (Ib) {
+            var d = og(a, c + "Left"),
+                e = og(a, c + "Right"),
+                f = og(a, c + "Top"),
+                g = og(a, c + "Bottom");
+            return new bg(f, e, g, d)
+        }
+        d = eg(a, c + "Left");
+        e = eg(a, c + "Right");
+        f = eg(a, c + "Top");
+        g = eg(a, c + "Bottom");
+        return new bg(parseFloat(f), parseFloat(e), parseFloat(g), parseFloat(d))
+    }
+    var qg = {
+        thin: 2,
+        medium: 4,
+        thick: 6
+    };
+
+    function rg(a, c) {
+        if ("none" == (a.currentStyle ? a.currentStyle[c + "Style"] : null)) return 0;
+        var d = a.currentStyle ? a.currentStyle[c + "Width"] : null;
+        return d in qg ? qg[d] : ng(a, d, "left", "pixelLeft")
+    }
+
+    function sg(a) {
+        if (Ib && !(Ib && 9 <= Tb)) {
+            var c = rg(a, "borderLeft"),
+                d = rg(a, "borderRight"),
+                e = rg(a, "borderTop");
+            a = rg(a, "borderBottom");
+            return new bg(e, d, a, c)
+        }
+        c = eg(a, "borderLeftWidth");
+        d = eg(a, "borderRightWidth");
+        e = eg(a, "borderTopWidth");
+        a = eg(a, "borderBottomWidth");
+        return new bg(parseFloat(e), parseFloat(d), parseFloat(a), parseFloat(c))
+    };
+
+    function tg(a, c, d) {
+        rc.call(this, a);
+        this.map = c;
+        this.frameState = m(d) ? d : null
+    }
+    w(tg, rc);
+
+    function ug(a) {
+        fd.call(this);
+        this.element = m(a.element) ? a.element : null;
+        this.a = this.L = null;
+        this.l = [];
+        this.render = m(a.render) ? a.render : ca;
+        m(a.target) && this.c(a.target)
+    }
+    w(ug, fd);
+    ug.prototype.O = function() {
+        Qf(this.element);
+        ug.S.O.call(this)
+    };
+    ug.prototype.e = function() {
+        return this.a
+    };
+    ug.prototype.setMap = function(a) {
+        null === this.a || Qf(this.element);
+        0 != this.l.length && (Sa(this.l, Wc), this.l.length = 0);
+        this.a = a;
+        null !== this.a && ((null === this.L ? a.p : this.L).appendChild(this.element), this.render !== ca && this.l.push(x(a, "postrender", this.render, !1, this)), a.render())
+    };
+    ug.prototype.c = function(a) {
+        this.L = Ff(a)
+    };
+
+    function vg() {
+        this.c = 0;
+        this.d = {};
+        this.a = this.b = null
+    }
+    l = vg.prototype;
+    l.clear = function() {
+        this.c = 0;
+        this.d = {};
+        this.a = this.b = null
+    };
+
+    function wg(a, c) {
+        return a.d.hasOwnProperty(c)
+    }
+    l.forEach = function(a, c) {
+        for (var d = this.b; null !== d;) a.call(c, d.qc, d.Wd, this), d = d.Wa
+    };
+    l.get = function(a) {
+        a = this.d[a];
+        if (a === this.a) return a.qc;
+        a === this.b ? (this.b = this.b.Wa, this.b.Nb = null) : (a.Wa.Nb = a.Nb, a.Nb.Wa = a.Wa);
+        a.Wa = null;
+        a.Nb = this.a;
+        this.a = this.a.Wa = a;
+        return a.qc
+    };
+    l.Tb = function() {
+        return this.c
+    };
+    l.C = function() {
+        var a = Array(this.c),
+            c = 0,
+            d;
+        for (d = this.a; null !== d; d = d.Nb) a[c++] = d.Wd;
+        return a
+    };
+    l.cb = function() {
+        var a = Array(this.c),
+            c = 0,
+            d;
+        for (d = this.a; null !== d; d = d.Nb) a[c++] = d.qc;
+        return a
+    };
+    l.pop = function() {
+        var a = this.b;
+        delete this.d[a.Wd];
+        null !== a.Wa && (a.Wa.Nb = null);
+        this.b = a.Wa;
+        null === this.b && (this.a = null);
+        --this.c;
+        return a.qc
+    };
+    l.set = function(a, c) {
+        var d = {
+            Wd: a,
+            Wa: null,
+            Nb: this.a,
+            qc: c
+        };
+        null === this.a ? this.b = d : this.a.Wa = d;
+        this.a = d;
+        this.d[a] = d;
+        ++this.c
+    };
+
+    function xg(a) {
+        vg.call(this);
+        this.e = m(a) ? a : 2048
+    }
+    w(xg, vg);
+
+    function yg(a) {
+        return a.Tb() > a.e
+    };
+
+    function zg(a, c) {
+        $c.call(this);
+        this.b = a;
+        this.state = c
+    }
+    w(zg, $c);
+
+    function Ag(a) {
+        a.dispatchEvent("change")
+    }
+    zg.prototype.gb = function() {
+        return ma(this).toString()
+    };
+    zg.prototype.f = function() {
+        return this.b
+    };
+
+    function Bg(a) {
+        fd.call(this);
+        this.f = re(a.projection);
+        this.d = m(a.attributions) ? a.attributions : null;
+        this.L = a.logo;
+        this.o = m(a.state) ? a.state : "ready";
+        this.H = a.wrapX
+    }
+    w(Bg, fd);
+    l = Bg.prototype;
+    l.ge = ca;
+    l.ea = function() {
+        return this.d
+    };
+    l.ca = function() {
+        return this.L
+    };
+    l.fa = function() {
+        return this.f
+    };
+    l.ga = function() {
+        return this.o
+    };
+
+    function Cg(a) {
+        return a.H
+    }
+
+    function Dg(a, c) {
+        a.o = c;
+        a.k()
+    };
+
+    function Eg(a) {
+        return function() {
+            return a
+        }
+    }
+    var Fg = Eg(!1),
+        Gg = Eg(!0),
+        Hg = Eg(null);
+
+    function Ig(a) {
+        return a
+    }
+
+    function Jg(a) {
+        var c;
+        c = c || 0;
+        return function() {
+            return a.apply(this, Array.prototype.slice.call(arguments, 0, c))
+        }
+    }
+
+    function Kg(a) {
+        var c = arguments,
+            d = c.length;
+        return function() {
+            for (var a, f = 0; f < d; f++) a = c[f].apply(this, arguments);
+            return a
+        }
+    }
+
+    function Lg(a) {
+        var c = arguments,
+            d = c.length;
+        return function() {
+            for (var a = 0; a < d; a++)
+                if (!c[a].apply(this, arguments)) return !1;
+            return !0
+        }
+    };
+
+    function Mg(a) {
+        this.minZoom = m(a.minZoom) ? a.minZoom : 0;
+        this.b = a.resolutions;
+        this.maxZoom = this.b.length - 1;
+        this.f = m(a.origin) ? a.origin : null;
+        this.i = null;
+        m(a.origins) && (this.i = a.origins);
+        this.c = null;
+        m(a.tileSizes) && (this.c = a.tileSizes);
+        this.g = m(a.tileSize) ? a.tileSize : null === this.c ? 256 : null;
+        this.a = [0, 0];
+        this.d = null;
+        m(a.widths) && (this.d = a.widths)
+    }
+    var Ng = [0, 0, 0];
+    l = Mg.prototype;
+    l.yb = function() {
+        return Ig
+    };
+    l.Ad = function(a, c, d, e, f) {
+        f = Og(this, a, f);
+        for (a = a[0] - 1; a >= this.minZoom;) {
+            if (c.call(d, a, Pg(this, f, a, e))) return !0;
+            --a
+        }
+        return !1
+    };
+    l.Fd = function() {
+        return this.maxZoom
+    };
+    l.Hd = function() {
+        return this.minZoom
+    };
+    l.Mb = function(a) {
+        return null === this.f ? this.i[a] : this.f
+    };
+    l.ma = function(a) {
+        return this.b[a]
+    };
+    l.ne = function() {
+        return this.b
+    };
+    l.Ld = function(a, c, d) {
+        return a[0] < this.maxZoom ? (d = Og(this, a, d), Pg(this, d, a[0] + 1, c)) : null
+    };
+
+    function Qg(a, c, d, e) {
+        Rg(a, c[0], c[1], d, !1, Ng);
+        var f = Ng[1],
+            g = Ng[2];
+        Rg(a, c[2], c[3], d, !0, Ng);
+        return gf(f, Ng[1], g, Ng[2], e)
+    }
+
+    function Pg(a, c, d, e) {
+        return Qg(a, c, a.ma(d), e)
+    }
+
+    function Sg(a, c) {
+        var d = a.Mb(c[0]),
+            e = a.ma(c[0]),
+            f = ld(a.na(c[0]), a.a);
+        return [d[0] + (c[1] + .5) * f[0] * e, d[1] + (c[2] + .5) * f[1] * e]
+    }
+
+    function Og(a, c, d) {
+        var e = a.Mb(c[0]),
+            f = a.ma(c[0]);
+        a = ld(a.na(c[0]), a.a);
+        var g = e[0] + c[1] * a[0] * f;
+        c = e[1] + c[2] * a[1] * f;
+        return Nd(g, c, g + a[0] * f, c + a[1] * f, d)
+    }
+    l.Wb = function(a, c, d) {
+        return Rg(this, a[0], a[1], c, !1, d)
+    };
+
+    function Rg(a, c, d, e, f, g) {
+        var h = Tg(a, e),
+            k = e / a.ma(h),
+            n = a.Mb(h);
+        a = ld(a.na(h), a.a);
+        c = k * (c - n[0]) / (e * a[0]);
+        d = k * (d - n[1]) / (e * a[1]);
+        f ? (c = Math.ceil(c) - 1, d = Math.ceil(d) - 1) : (c = Math.floor(c), d = Math.floor(d));
+        return bf(h, c, d, g)
+    }
+    l.cd = function(a, c, d) {
+        return Rg(this, a[0], a[1], this.ma(c), !1, d)
+    };
+
+    function Ug(a, c, d) {
+        d = Pg(a, Vg(d), c);
+        a = Wg(a, c);
+        m(a) || (a = kf(d));
+        return gf(0, a - 1, 0, d.a - d.c + 1, void 0)
+    }
+    l.na = function(a) {
+        return null === this.g ? this.c[a] : this.g
+    };
+
+    function Wg(a, c) {
+        if (null !== a.d) return a.d[c]
+    }
+
+    function Tg(a, c) {
+        var d = ac(a.b, c, 0);
+        return Vb(d, a.minZoom, a.maxZoom)
+    }
+
+    function Xg(a) {
+        var c = a.i;
+        if (null === c) {
+            for (var c = Vg(a), d = m(void 0) ? ld(void 0) : ld(256), e = m(void 0) ? void 0 : "bottom-left", f = Yg(c, void 0, ld(d)), g = Array(f.length), h = ie(c), k = f.length - 1; 0 <= k; --k) g[k] = h / d[0] / f[k];
+            c = new Mg({
+                origin: de(c, e),
+                resolutions: f,
+                tileSize: m(void 0) ? void 0 : 256,
+                widths: g
+            });
+            a.i = c
+        }
+        return c
+    }
+
+    function Yg(a, c, d) {
+        c = m(c) ? c : 42;
+        var e = fe(a);
+        a = ie(a);
+        d = m(d) ? d : ld(256);
+        d = Math.max(a / d[0], e / d[1]);
+        c += 1;
+        e = Array(c);
+        for (a = 0; a < c; ++a) e[a] = d / Math.pow(2, a);
+        return e
+    }
+
+    function Vg(a) {
+        a = re(a);
+        var c = a.G();
+        null === c && (a = 180 * oe.degrees / a.Gd(), c = Nd(-a, -a, a, a));
+        return c
+    };
+
+    function Zg(a) {
+        Bg.call(this, {
+            attributions: a.attributions,
+            extent: a.extent,
+            logo: a.logo,
+            projection: a.projection,
+            state: a.state,
+            wrapX: a.wrapX
+        });
+        this.X = m(a.opaque) ? a.opaque : !1;
+        this.ba = m(a.tilePixelRatio) ? a.tilePixelRatio : 1;
+        this.tileGrid = m(a.tileGrid) ? a.tileGrid : null;
+        this.a = new xg;
+        this.c = [0, 0]
+    }
+    w(Zg, Bg);
+
+    function $g(a, c, d, e) {
+        for (var f = !0, g, h, k = d.b; k <= d.d; ++k)
+            for (var n = d.c; n <= d.a; ++n) g = a.bb(c, k, n), h = !1, wg(a.a, g) && (g = a.a.get(g), (h = 2 === g.state) && (h = !1 !== e(g))), h || (f = !1);
+        return f
+    }
+    l = Zg.prototype;
+    l.Cd = function() {
+        return 0
+    };
+    l.bb = cf;
+    l.ua = function() {
+        return this.tileGrid
+    };
+
+    function ah(a, c) {
+        return null === a.tileGrid ? Xg(c) : a.tileGrid
+    }
+    l.Xb = function(a, c, d) {
+        c = ah(this, d);
+        return kd(ld(c.na(a), this.c), this.ba, this.c)
+    };
+    l.yf = ca;
+
+    function bh(a, c) {
+        rc.call(this, a);
+        this.tile = c
+    }
+    w(bh, rc);
+
+    function ch(a) {
+        a = m(a) ? a : {};
+        this.p = Mf("UL");
+        this.o = Mf("LI");
+        this.p.appendChild(this.o);
+        mg(this.o, !1);
+        this.d = m(a.collapsed) ? a.collapsed : !0;
+        this.g = m(a.collapsible) ? a.collapsible : !0;
+        this.g || (this.d = !1);
+        var c = m(a.className) ? a.className : "ol-attribution",
+            d = m(a.tipLabel) ? a.tipLabel : "Attributions",
+            e = m(a.collapseLabel) ? a.collapseLabel : "\u00bb";
+        this.H = ia(e) ? Jf("SPAN", {}, e) : e;
+        e = m(a.label) ? a.label : "i";
+        this.J = ia(e) ? Jf("SPAN", {}, e) : e;
+        d = Jf("BUTTON", {
+            type: "button",
+            title: d
+        }, this.g && !this.d ? this.H : this.J);
+        x(d, "click", this.gl, !1, this);
+        x(d, ["mouseout", uc], function() {
+            this.blur()
+        }, !1);
+        c = Jf("DIV", c + " ol-unselectable ol-control" + (this.d && this.g ? " ol-collapsed" : "") + (this.g ? "" : " ol-uncollapsible"), this.p, d);
+        ug.call(this, {
+            element: c,
+            render: m(a.render) ? a.render : dh,
+            target: a.target
+        });
+        this.n = !0;
+        this.i = {};
+        this.f = {};
+        this.N = {}
+    }
+    w(ch, ug);
+
+    function dh(a) {
+        a = a.frameState;
+        if (null === a) this.n && (mg(this.element, !1), this.n = !1);
+        else {
+            var c, d, e, f, g, h, k, n, p, q, r, t = a.layerStatesArray,
+                u = Db(a.attributions),
+                A = {},
+                z = a.viewState.projection;
+            d = 0;
+            for (c = t.length; d < c; d++)
+                if (h = t[d].layer.da(), null !== h && (q = ma(h).toString(), p = h.d, null !== p))
+                    for (e = 0, f = p.length; e < f; e++)
+                        if (k = p[e], n = ma(k).toString(), !(n in u)) {
+                            g = a.usedTiles[q];
+                            if (m(g)) {
+                                var D = ah(h, z);
+                                a: {
+                                    r = k;
+                                    var B = z;
+                                    if (null === r.b) r = !0;
+                                    else {
+                                        var y = void 0,
+                                            K = void 0,
+                                            J = void 0,
+                                            H = void 0;
+                                        for (H in g)
+                                            if (H in r.b)
+                                                for (var J = g[H],
+                                                        P, y = 0, K = r.b[H].length; y < K; ++y) {
+                                                    P = r.b[H][y];
+                                                    if (lf(P, J)) {
+                                                        r = !0;
+                                                        break a
+                                                    }
+                                                    var sa = Ug(D, parseInt(H, 10), B),
+                                                        Oa = kf(sa);
+                                                    if (J.b < sa.b || J.d > sa.d)
+                                                        if (lf(P, new ff(Wb(J.b, Oa), Wb(J.d, Oa), J.c, J.a)) || kf(J) > Oa && lf(P, sa)) {
+                                                            r = !0;
+                                                            break a
+                                                        }
+                                                }
+                                        r = !1
+                                    }
+                                }
+                            } else r = !1;
+                            r ? (n in A && delete A[n], u[n] = k) : A[n] = k
+                        }
+            c = [u, A];
+            d = c[0];
+            c = c[1];
+            for (var N in this.i) N in d ? (this.f[N] || (mg(this.i[N], !0), this.f[N] = !0), delete d[N]) : N in c ? (this.f[N] && (mg(this.i[N], !1), delete this.f[N]), delete c[N]) : (Qf(this.i[N]), delete this.i[N], delete this.f[N]);
+            for (N in d) e = Mf("LI"), e.innerHTML = d[N].a, this.p.appendChild(e), this.i[N] = e, this.f[N] = !0;
+            for (N in c) e = Mf("LI"), e.innerHTML = c[N].a, mg(e, !1), this.p.appendChild(e), this.i[N] = e;
+            N = !xb(this.f) || !xb(a.logos);
+            this.n != N && (mg(this.element, N), this.n = N);
+            N && xb(this.f) ? Zf(this.element, "ol-logo-only") : $f(this.element, "ol-logo-only");
+            var za;
+            a = a.logos;
+            N = this.N;
+            for (za in N) za in a || (Qf(N[za]), delete N[za]);
+            for (var cb in a) cb in N || (za = new Image, za.src = cb, d = a[cb], "" === d ? d = za : (d = Jf("A", {
+                href: d
+            }), d.appendChild(za)), this.o.appendChild(d), N[cb] = d);
+            mg(this.o, !xb(a))
+        }
+    }
+    l = ch.prototype;
+    l.gl = function(a) {
+        a.preventDefault();
+        eh(this)
+    };
+
+    function eh(a) {
+        ag(a.element, "ol-collapsed");
+        a.d ? Rf(a.H, a.J) : Rf(a.J, a.H);
+        a.d = !a.d
+    }
+    l.fl = function() {
+        return this.g
+    };
+    l.il = function(a) {
+        this.g !== a && (this.g = a, ag(this.element, "ol-uncollapsible"), !a && this.d && eh(this))
+    };
+    l.hl = function(a) {
+        this.g && this.d !== a && eh(this)
+    };
+    l.el = function() {
+        return this.d
+    };
+
+    function fh(a) {
+        a = m(a) ? a : {};
+        var c = m(a.className) ? a.className : "ol-rotate",
+            d = m(a.label) ? a.label : "\u21e7";
+        this.d = null;
+        ia(d) ? this.d = Jf("SPAN", "ol-compass", d) : (this.d = d, Zf(this.d, "ol-compass"));
+        d = Jf("BUTTON", {
+            "class": c + "-reset",
+            type: "button",
+            title: m(a.tipLabel) ? a.tipLabel : "Reset rotation"
+        }, this.d);
+        x(d, "click", fh.prototype.o, !1, this);
+        x(d, ["mouseout", uc], function() {
+            this.blur()
+        }, !1);
+        c = Jf("DIV", c + " ol-unselectable ol-control", d);
+        ug.call(this, {
+            element: c,
+            render: m(a.render) ? a.render : gh,
+            target: a.target
+        });
+        this.g = m(a.duration) ? a.duration : 250;
+        this.f = m(a.autoHide) ? a.autoHide : !0;
+        this.i = void 0;
+        this.f && Zf(this.element, "ol-hidden")
+    }
+    w(fh, ug);
+    fh.prototype.o = function(a) {
+        a.preventDefault();
+        a = this.a;
+        var c = a.R();
+        if (null !== c) {
+            for (var d = c.Da(); d < -Math.PI;) d += 2 * Math.PI;
+            for (; d > Math.PI;) d -= 2 * Math.PI;
+            m(d) && (0 < this.g && a.Ha($e({
+                rotation: d,
+                duration: this.g,
+                easing: Ve
+            })), c.be(0))
+        }
+    };
+
+    function gh(a) {
+        a = a.frameState;
+        if (null !== a) {
+            a = a.viewState.rotation;
+            if (a != this.i) {
+                var c = "rotate(" + 180 * a / Math.PI + "deg)";
+                if (this.f) {
+                    var d = this.element;
+                    0 === a ? Zf(d, "ol-hidden") : $f(d, "ol-hidden")
+                }
+                this.d.style.msTransform = c;
+                this.d.style.webkitTransform = c;
+                this.d.style.transform = c
+            }
+            this.i = a
+        }
+    };
+
+    function hh(a) {
+        a = m(a) ? a : {};
+        var c = m(a.className) ? a.className : "ol-zoom",
+            d = m(a.delta) ? a.delta : 1,
+            e = m(a.zoomOutLabel) ? a.zoomOutLabel : "\u2212",
+            f = m(a.zoomOutTipLabel) ? a.zoomOutTipLabel : "Zoom out",
+            g = Jf("BUTTON", {
+                "class": c + "-in",
+                type: "button",
+                title: m(a.zoomInTipLabel) ? a.zoomInTipLabel : "Zoom in"
+            }, m(a.zoomInLabel) ? a.zoomInLabel : "+");
+        x(g, "click", ta(hh.prototype.f, d), !1, this);
+        x(g, ["mouseout", uc], function() {
+            this.blur()
+        }, !1);
+        e = Jf("BUTTON", {
+            "class": c + "-out",
+            type: "button",
+            title: f
+        }, e);
+        x(e, "click", ta(hh.prototype.f, -d), !1, this);
+        x(e, ["mouseout", uc], function() {
+            this.blur()
+        }, !1);
+        c = Jf("DIV", c + " ol-unselectable ol-control", g, e);
+        ug.call(this, {
+            element: c,
+            target: a.target
+        });
+        this.d = m(a.duration) ? a.duration : 250
+    }
+    w(hh, ug);
+    hh.prototype.f = function(a, c) {
+        c.preventDefault();
+        var d = this.a,
+            e = d.R();
+        if (null !== e) {
+            var f = e.ya();
+            m(f) && (0 < this.d && d.Ha(af({
+                resolution: f,
+                duration: this.d,
+                easing: Ve
+            })), d = e.constrainResolution(f, a), e.tb(d))
+        }
+    };
+
+    function ih(a) {
+        a = m(a) ? a : {};
+        var c = new of;
+        (m(a.zoom) ? a.zoom : 1) && c.push(new hh(a.zoomOptions));
+        (m(a.rotate) ? a.rotate : 1) && c.push(new fh(a.rotateOptions));
+        (m(a.attribution) ? a.attribution : 1) && c.push(new ch(a.attributionOptions));
+        return c
+    };
+    var jh = Kb ? "webkitfullscreenchange" : Jb ? "mozfullscreenchange" : Ib ? "MSFullscreenChange" : "fullscreenchange";
+
+    function kh() {
+        var a = Cf().b,
+            c = a.body;
+        return !!(c.webkitRequestFullscreen || c.mozRequestFullScreen && a.mozFullScreenEnabled || c.msRequestFullscreen && a.msFullscreenEnabled || c.requestFullscreen && a.fullscreenEnabled)
+    }
+
+    function lh(a) {
+        a.webkitRequestFullscreen ? a.webkitRequestFullscreen() : a.mozRequestFullScreen ? a.mozRequestFullScreen() : a.msRequestFullscreen ? a.msRequestFullscreen() : a.requestFullscreen && a.requestFullscreen()
+    }
+
+    function mh() {
+        var a = Cf().b;
+        return !!(a.webkitIsFullScreen || a.mozFullScreen || a.msFullscreenElement || a.fullscreenElement)
+    };
+
+    function nh(a) {
+        a = m(a) ? a : {};
+        this.d = m(a.className) ? a.className : "ol-full-screen";
+        var c = m(a.label) ? a.label : "\u2194";
+        this.f = ia(c) ? document.createTextNode(String(c)) : c;
+        c = m(a.labelActive) ? a.labelActive : "\u00d7";
+        this.g = ia(c) ? document.createTextNode(String(c)) : c;
+        c = m(a.tipLabel) ? a.tipLabel : "Toggle full-screen";
+        c = Jf("BUTTON", {
+            "class": this.d + "-" + mh(),
+            type: "button",
+            title: c
+        }, this.f);
+        x(c, "click", this.n, !1, this);
+        x(c, ["mouseout", uc], function() {
+            this.blur()
+        }, !1);
+        x(ba.document, jh, this.i, !1, this);
+        var d = this.d + " ol-unselectable ol-control " + (kh() ? "" : "ol-unsupported"),
+            c = Jf("DIV", d, c);
+        ug.call(this, {
+            element: c,
+            target: a.target
+        });
+        this.o = m(a.keys) ? a.keys : !1
+    }
+    w(nh, ug);
+    nh.prototype.n = function(a) {
+        a.preventDefault();
+        kh() && (a = this.a, null !== a && (mh() ? (a = Cf().b, a.webkitCancelFullScreen ? a.webkitCancelFullScreen() : a.mozCancelFullScreen ? a.mozCancelFullScreen() : a.msExitFullscreen ? a.msExitFullscreen() : a.exitFullscreen && a.exitFullscreen()) : (a = a.df(), a = Ff(a), this.o ? a.mozRequestFullScreenWithKeys ? a.mozRequestFullScreenWithKeys() : a.webkitRequestFullscreen ? a.webkitRequestFullscreen() : lh(a) : lh(a))))
+    };
+    nh.prototype.i = function() {
+        var a = this.d + "-true",
+            c = this.d + "-false",
+            d = Sf(this.element),
+            e = this.a;
+        mh() ? (Yf(d, c) && ($f(d, c), Zf(d, a)), Rf(this.g, this.f)) : (Yf(d, a) && ($f(d, a), Zf(d, c)), Rf(this.f, this.g));
+        null === e || e.Kc()
+    };
+
+    function oh(a) {
+        a = m(a) ? a : {};
+        var c = Jf("DIV", m(a.className) ? a.className : "ol-mouse-position");
+        ug.call(this, {
+            element: c,
+            render: m(a.render) ? a.render : ph,
+            target: a.target
+        });
+        x(this, hd("projection"), this.jl, !1, this);
+        m(a.coordinateFormat) && this.vh(a.coordinateFormat);
+        m(a.projection) && this.yg(re(a.projection));
+        this.o = m(a.undefinedHTML) ? a.undefinedHTML : "";
+        this.i = c.innerHTML;
+        this.g = this.f = this.d = null
+    }
+    w(oh, ug);
+
+    function ph(a) {
+        a = a.frameState;
+        null === a ? this.d = null : this.d != a.viewState.projection && (this.d = a.viewState.projection, this.f = null);
+        qh(this, this.g)
+    }
+    l = oh.prototype;
+    l.jl = function() {
+        this.f = null
+    };
+    l.Uf = function() {
+        return this.get("coordinateFormat")
+    };
+    l.xg = function() {
+        return this.get("projection")
+    };
+    l.$j = function(a) {
+        this.g = this.a.Bd(a.b);
+        qh(this, this.g)
+    };
+    l.ak = function() {
+        qh(this, null);
+        this.g = null
+    };
+    l.setMap = function(a) {
+        oh.S.setMap.call(this, a);
+        null !== a && (a = a.a, this.l.push(x(a, "mousemove", this.$j, !1, this), x(a, "mouseout", this.ak, !1, this)))
+    };
+    l.vh = function(a) {
+        this.set("coordinateFormat", a)
+    };
+    l.yg = function(a) {
+        this.set("projection", a)
+    };
+
+    function qh(a, c) {
+        var d = a.o;
+        if (null !== c && null !== a.d) {
+            if (null === a.f) {
+                var e = a.xg();
+                a.f = m(e) ? ve(a.d, e) : Ke
+            }
+            e = a.a.ka(c);
+            null !== e && (a.f(e, e), d = a.Uf(), d = m(d) ? d(e) : e.toString())
+        }
+        m(a.i) && d == a.i || (a.element.innerHTML = d, a.i = d)
+    };
+
+    function rh(a, c, d) {
+        mc.call(this);
+        this.d = a;
+        this.c = d;
+        this.b = c || window;
+        this.a = ra(this.Pf, this)
+    }
+    w(rh, mc);
+    l = rh.prototype;
+    l.$ = null;
+    l.zf = !1;
+    l.start = function() {
+        sh(this);
+        this.zf = !1;
+        var a = th(this),
+            c = uh(this);
+        a && !c && this.b.mozRequestAnimationFrame ? (this.$ = x(this.b, "MozBeforePaint", this.a), this.b.mozRequestAnimationFrame(null), this.zf = !0) : this.$ = a && c ? a.call(this.b, this.a) : this.b.setTimeout(Jg(this.a), 20)
+    };
+
+    function sh(a) {
+        if (null != a.$) {
+            var c = th(a),
+                d = uh(a);
+            c && !d && a.b.mozRequestAnimationFrame ? Wc(a.$) : c && d ? d.call(a.b, a.$) : a.b.clearTimeout(a.$)
+        }
+        a.$ = null
+    }
+    l.Pf = function() {
+        this.zf && this.$ && Wc(this.$);
+        this.$ = null;
+        this.d.call(this.c, ua())
+    };
+    l.O = function() {
+        sh(this);
+        rh.S.O.call(this)
+    };
+
+    function th(a) {
+        a = a.b;
+        return a.requestAnimationFrame || a.webkitRequestAnimationFrame || a.mozRequestAnimationFrame || a.oRequestAnimationFrame || a.msRequestAnimationFrame || null
+    }
+
+    function uh(a) {
+        a = a.b;
+        return a.cancelAnimationFrame || a.cancelRequestAnimationFrame || a.webkitCancelRequestAnimationFrame || a.mozCancelRequestAnimationFrame || a.oCancelRequestAnimationFrame || a.msCancelRequestAnimationFrame || null
+    };
+
+    function vh(a) {
+        ba.setTimeout(function() {
+            throw a;
+        }, 0)
+    }
+
+    function wh(a, c) {
+        var d = a;
+        c && (d = ra(a, c));
+        d = xh(d);
+        !ka(ba.setImmediate) || ba.Window && ba.Window.prototype.setImmediate == ba.setImmediate ? (yh || (yh = zh()), yh(d)) : ba.setImmediate(d)
+    }
+    var yh;
+
+    function zh() {
+        var a = ba.MessageChannel;
+        "undefined" === typeof a && "undefined" !== typeof window && window.postMessage && window.addEventListener && (a = function() {
+            var a = document.createElement("iframe");
+            a.style.display = "none";
+            a.src = "";
+            document.documentElement.appendChild(a);
+            var c = a.contentWindow,
+                a = c.document;
+            a.open();
+            a.write("");
+            a.close();
+            var d = "callImmediate" + Math.random(),
+                e = "file:" == c.location.protocol ? "*" : c.location.protocol + "//" + c.location.host,
+                a = ra(function(a) {
+                    if (("*" == e || a.origin == e) && a.data == d) this.port1.onmessage()
+                }, this);
+            c.addEventListener("message", a, !1);
+            this.port1 = {};
+            this.port2 = {
+                postMessage: function() {
+                    c.postMessage(d, e)
+                }
+            }
+        });
+        if ("undefined" !== typeof a && !ob("Trident") && !ob("MSIE")) {
+            var c = new a,
+                d = {},
+                e = d;
+            c.port1.onmessage = function() {
+                if (m(d.next)) {
+                    d = d.next;
+                    var a = d.Lf;
+                    d.Lf = null;
+                    a()
+                }
+            };
+            return function(a) {
+                e.next = {
+                    Lf: a
+                };
+                e = e.next;
+                c.port2.postMessage(0)
+            }
+        }
+        return "undefined" !== typeof document && "onreadystatechange" in document.createElement("script") ? function(a) {
+            var c = document.createElement("script");
+            c.onreadystatechange = function() {
+                c.onreadystatechange = null;
+                c.parentNode.removeChild(c);
+                c = null;
+                a();
+                a = null
+            };
+            document.documentElement.appendChild(c)
+        } : function(a) {
+            ba.setTimeout(a, 0)
+        }
+    }
+    var xh = Ig;
+
+    function Ah(a) {
+        if ("function" == typeof a.cb) return a.cb();
+        if (ia(a)) return a.split("");
+        if (ha(a)) {
+            for (var c = [], d = a.length, e = 0; e < d; e++) c.push(a[e]);
+            return c
+        }
+        return sb(a)
+    }
+
+    function Bh(a, c) {
+        if ("function" == typeof a.forEach) a.forEach(c, void 0);
+        else if (ha(a) || ia(a)) Sa(a, c, void 0);
+        else {
+            var d;
+            if ("function" == typeof a.C) d = a.C();
+            else if ("function" != typeof a.cb)
+                if (ha(a) || ia(a)) {
+                    d = [];
+                    for (var e = a.length, f = 0; f < e; f++) d.push(f)
+                } else d = tb(a);
+            else d = void 0;
+            for (var e = Ah(a), f = e.length, g = 0; g < f; g++) c.call(void 0, e[g], d && d[g], a)
+        }
+    };
+
+    function Ch(a, c) {
+        this.a = {};
+        this.b = [];
+        this.c = 0;
+        var d = arguments.length;
+        if (1 < d) {
+            if (d % 2) throw Error("Uneven number of arguments");
+            for (var e = 0; e < d; e += 2) this.set(arguments[e], arguments[e + 1])
+        } else if (a) {
+            a instanceof Ch ? (d = a.C(), e = a.cb()) : (d = tb(a), e = sb(a));
+            for (var f = 0; f < d.length; f++) this.set(d[f], e[f])
+        }
+    }
+    l = Ch.prototype;
+    l.Tb = function() {
+        return this.c
+    };
+    l.cb = function() {
+        Dh(this);
+        for (var a = [], c = 0; c < this.b.length; c++) a.push(this.a[this.b[c]]);
+        return a
+    };
+    l.C = function() {
+        Dh(this);
+        return this.b.concat()
+    };
+    l.la = function() {
+        return 0 == this.c
+    };
+    l.clear = function() {
+        this.a = {};
+        this.c = this.b.length = 0
+    };
+    l.remove = function(a) {
+        return Eh(this.a, a) ? (delete this.a[a], this.c--, this.b.length > 2 * this.c && Dh(this), !0) : !1
+    };
+
+    function Dh(a) {
+        if (a.c != a.b.length) {
+            for (var c = 0, d = 0; c < a.b.length;) {
+                var e = a.b[c];
+                Eh(a.a, e) && (a.b[d++] = e);
+                c++
+            }
+            a.b.length = d
+        }
+        if (a.c != a.b.length) {
+            for (var f = {}, d = c = 0; c < a.b.length;) e = a.b[c], Eh(f, e) || (a.b[d++] = e, f[e] = 1), c++;
+            a.b.length = d
+        }
+    }
+    l.get = function(a, c) {
+        return Eh(this.a, a) ? this.a[a] : c
+    };
+    l.set = function(a, c) {
+        Eh(this.a, a) || (this.c++, this.b.push(a));
+        this.a[a] = c
+    };
+    l.forEach = function(a, c) {
+        for (var d = this.C(), e = 0; e < d.length; e++) {
+            var f = d[e],
+                g = this.get(f);
+            a.call(c, g, f, this)
+        }
+    };
+    l.clone = function() {
+        return new Ch(this)
+    };
+
+    function Eh(a, c) {
+        return Object.prototype.hasOwnProperty.call(a, c)
+    };
+
+    function Fh() {
+        this.b = ua()
+    }
+    new Fh;
+    Fh.prototype.set = function(a) {
+        this.b = a
+    };
+    Fh.prototype.get = function() {
+        return this.b
+    };
+
+    function Gh(a) {
+        $c.call(this);
+        this.pd = a || window;
+        this.Md = x(this.pd, "resize", this.ik, !1, this);
+        this.Nd = If(this.pd || window)
+    }
+    w(Gh, $c);
+    l = Gh.prototype;
+    l.Md = null;
+    l.pd = null;
+    l.Nd = null;
+    l.O = function() {
+        Gh.S.O.call(this);
+        this.Md && (Wc(this.Md), this.Md = null);
+        this.Nd = this.pd = null
+    };
+    l.ik = function() {
+        var a = If(this.pd || window),
+            c = this.Nd;
+        a == c || a && c && a.width == c.width && a.height == c.height || (this.Nd = a, this.dispatchEvent("resize"))
+    };
+
+    function Hh(a, c, d, e, f) {
+        if (!(Ib || Kb && Rb("525"))) return !0;
+        if (Lb && f) return Ih(a);
+        if (f && !e) return !1;
+        ja(c) && (c = Jh(c));
+        if (!d && (17 == c || 18 == c || Lb && 91 == c)) return !1;
+        if (Kb && e && d) switch (a) {
+            case 220:
+            case 219:
+            case 221:
+            case 192:
+            case 186:
+            case 189:
+            case 187:
+            case 188:
+            case 190:
+            case 191:
+            case 192:
+            case 222:
+                return !1
+        }
+        if (Ib && e && c == a) return !1;
+        switch (a) {
+            case 13:
+                return !0;
+            case 27:
+                return !Kb
+        }
+        return Ih(a)
+    }
+
+    function Ih(a) {
+        if (48 <= a && 57 >= a || 96 <= a && 106 >= a || 65 <= a && 90 >= a || Kb && 0 == a) return !0;
+        switch (a) {
+            case 32:
+            case 63:
+            case 107:
+            case 109:
+            case 110:
+            case 111:
+            case 186:
+            case 59:
+            case 189:
+            case 187:
+            case 61:
+            case 188:
+            case 190:
+            case 191:
+            case 192:
+            case 222:
+            case 219:
+            case 220:
+            case 221:
+                return !0;
+            default:
+                return !1
+        }
+    }
+
+    function Jh(a) {
+        if (Jb) a = Kh(a);
+        else if (Lb && Kb) a: switch (a) {
+            case 93:
+                a = 91;
+                break a
+        }
+        return a
+    }
+
+    function Kh(a) {
+        switch (a) {
+            case 61:
+                return 187;
+            case 59:
+                return 186;
+            case 173:
+                return 189;
+            case 224:
+                return 91;
+            case 0:
+                return 224;
+            default:
+                return a
+        }
+    };
+
+    function Lh(a, c) {
+        $c.call(this);
+        a && Mh(this, a, c)
+    }
+    w(Lh, $c);
+    l = Lh.prototype;
+    l.Z = null;
+    l.Ud = null;
+    l.Ye = null;
+    l.Vd = null;
+    l.Ja = -1;
+    l.Hb = -1;
+    l.Ge = !1;
+    var Nh = {
+            3: 13,
+            12: 144,
+            63232: 38,
+            63233: 40,
+            63234: 37,
+            63235: 39,
+            63236: 112,
+            63237: 113,
+            63238: 114,
+            63239: 115,
+            63240: 116,
+            63241: 117,
+            63242: 118,
+            63243: 119,
+            63244: 120,
+            63245: 121,
+            63246: 122,
+            63247: 123,
+            63248: 44,
+            63272: 46,
+            63273: 36,
+            63275: 35,
+            63276: 33,
+            63277: 34,
+            63289: 144,
+            63302: 45
+        },
+        Oh = {
+            Up: 38,
+            Down: 40,
+            Left: 37,
+            Right: 39,
+            Enter: 13,
+            F1: 112,
+            F2: 113,
+            F3: 114,
+            F4: 115,
+            F5: 116,
+            F6: 117,
+            F7: 118,
+            F8: 119,
+            F9: 120,
+            F10: 121,
+            F11: 122,
+            F12: 123,
+            "U+007F": 46,
+            Home: 36,
+            End: 35,
+            PageUp: 33,
+            PageDown: 34,
+            Insert: 45
+        },
+        Ph = Ib || Kb && Rb("525"),
+        Qh = Lb && Jb;
+    Lh.prototype.b = function(a) {
+        Kb && (17 == this.Ja && !a.i || 18 == this.Ja && !a.a || Lb && 91 == this.Ja && !a.l) && (this.Hb = this.Ja = -1); - 1 == this.Ja && (a.i && 17 != a.e ? this.Ja = 17 : a.a && 18 != a.e ? this.Ja = 18 : a.l && 91 != a.e && (this.Ja = 91));
+        Ph && !Hh(a.e, this.Ja, a.d, a.i, a.a) ? this.handleEvent(a) : (this.Hb = Jh(a.e), Qh && (this.Ge = a.a))
+    };
+    Lh.prototype.a = function(a) {
+        this.Hb = this.Ja = -1;
+        this.Ge = a.a
+    };
+    Lh.prototype.handleEvent = function(a) {
+        var c = a.b,
+            d, e, f = c.altKey;
+        Ib && "keypress" == a.type ? (d = this.Hb, e = 13 != d && 27 != d ? c.keyCode : 0) : Kb && "keypress" == a.type ? (d = this.Hb, e = 0 <= c.charCode && 63232 > c.charCode && Ih(d) ? c.charCode : 0) : Hb ? (d = this.Hb, e = Ih(d) ? c.keyCode : 0) : (d = c.keyCode || this.Hb, e = c.charCode || 0, Qh && (f = this.Ge), Lb && 63 == e && 224 == d && (d = 191));
+        var g = d = Jh(d),
+            h = c.keyIdentifier;
+        d ? 63232 <= d && d in Nh ? g = Nh[d] : 25 == d && a.d && (g = 9) : h && h in Oh && (g = Oh[h]);
+        this.Ja = g;
+        a = new Rh(g, e, 0, c);
+        a.a = f;
+        this.dispatchEvent(a)
+    };
+
+    function Mh(a, c, d) {
+        a.Vd && Sh(a);
+        a.Z = c;
+        a.Ud = x(a.Z, "keypress", a, d);
+        a.Ye = x(a.Z, "keydown", a.b, d, a);
+        a.Vd = x(a.Z, "keyup", a.a, d, a)
+    }
+
+    function Sh(a) {
+        a.Ud && (Wc(a.Ud), Wc(a.Ye), Wc(a.Vd), a.Ud = null, a.Ye = null, a.Vd = null);
+        a.Z = null;
+        a.Ja = -1;
+        a.Hb = -1
+    }
+    Lh.prototype.O = function() {
+        Lh.S.O.call(this);
+        Sh(this)
+    };
+
+    function Rh(a, c, d, e) {
+        wc.call(this, e);
+        this.type = "key";
+        this.e = a;
+        this.q = c
+    }
+    w(Rh, wc);
+
+    function Th(a, c) {
+        $c.call(this);
+        var d = this.Z = a;
+        (d = la(d) && 1 == d.nodeType ? this.Z : this.Z ? this.Z.body : null) && fg(d, "direction");
+        this.b = x(this.Z, Jb ? "DOMMouseScroll" : "mousewheel", this, c)
+    }
+    w(Th, $c);
+    Th.prototype.handleEvent = function(a) {
+        var c = 0,
+            d = 0,
+            e = 0;
+        a = a.b;
+        if ("mousewheel" == a.type) {
+            d = 1;
+            if (Ib || Kb && (Mb || Rb("532.0"))) d = 40;
+            e = Uh(-a.wheelDelta, d);
+            m(a.wheelDeltaX) ? (c = Uh(-a.wheelDeltaX, d), d = Uh(-a.wheelDeltaY, d)) : d = e
+        } else e = a.detail, 100 < e ? e = 3 : -100 > e && (e = -3), m(a.axis) && a.axis === a.HORIZONTAL_AXIS ? c = e : d = e;
+        ja(this.a) && Vb(c, -this.a, this.a);
+        ja(this.c) && (d = Vb(d, -this.c, this.c));
+        c = new Vh(e, a, 0, d);
+        this.dispatchEvent(c)
+    };
+
+    function Uh(a, c) {
+        return Kb && (Lb || Nb) && 0 != a % c ? a : a / c
+    }
+    Th.prototype.O = function() {
+        Th.S.O.call(this);
+        Wc(this.b);
+        this.b = null
+    };
+
+    function Vh(a, c, d, e) {
+        wc.call(this, c);
+        this.type = "mousewheel";
+        this.detail = a;
+        this.o = e
+    }
+    w(Vh, wc);
+
+    function Wh(a, c, d) {
+        rc.call(this, a);
+        this.b = c;
+        a = m(d) ? d : {};
+        this.buttons = Xh(a);
+        this.pressure = Yh(a, this.buttons);
+        this.bubbles = Ab(a, "bubbles", !1);
+        this.cancelable = Ab(a, "cancelable", !1);
+        this.view = Ab(a, "view", null);
+        this.detail = Ab(a, "detail", null);
+        this.screenX = Ab(a, "screenX", 0);
+        this.screenY = Ab(a, "screenY", 0);
+        this.clientX = Ab(a, "clientX", 0);
+        this.clientY = Ab(a, "clientY", 0);
+        this.button = Ab(a, "button", 0);
+        this.relatedTarget = Ab(a, "relatedTarget", null);
+        this.pointerId = Ab(a, "pointerId", 0);
+        this.width = Ab(a, "width", 0);
+        this.height = Ab(a, "height", 0);
+        this.pointerType = Ab(a, "pointerType", "");
+        this.isPrimary = Ab(a, "isPrimary", !1);
+        c.preventDefault && (this.preventDefault = function() {
+            c.preventDefault()
+        })
+    }
+    w(Wh, rc);
+
+    function Xh(a) {
+        if (a.buttons || Zh) a = a.buttons;
+        else switch (a.which) {
+            case 1:
+                a = 1;
+                break;
+            case 2:
+                a = 4;
+                break;
+            case 3:
+                a = 2;
+                break;
+            default:
+                a = 0
+        }
+        return a
+    }
+
+    function Yh(a, c) {
+        var d = 0;
+        a.pressure ? d = a.pressure : d = c ? .5 : 0;
+        return d
+    }
+    var Zh = !1;
+    try {
+        Zh = 1 === (new MouseEvent("click", {
+            buttons: 1
+        })).buttons
+    } catch ($h) {};
+
+    function ai(a, c) {
+        var d = Mf("CANVAS");
+        m(a) && (d.width = a);
+        m(c) && (d.height = c);
+        return d.getContext("2d")
+    }
+    var ci = function() {
+            var a;
+            return function() {
+                if (!m(a))
+                    if (ba.getComputedStyle) {
+                        var c = Mf("P"),
+                            d, e = {
+                                webkitTransform: "-webkit-transform",
+                                OTransform: "-o-transform",
+                                msTransform: "-ms-transform",
+                                MozTransform: "-moz-transform",
+                                transform: "transform"
+                            };
+                        document.body.appendChild(c);
+                        for (var f in e) f in c.style && (c.style[f] = "translate(1px,1px)", d = ba.getComputedStyle(c).getPropertyValue(e[f]));
+                        Qf(c);
+                        a = d && "none" !== d
+                    } else a = !1;
+                return a
+            }
+        }(),
+        di = function() {
+            var a;
+            return function() {
+                if (!m(a))
+                    if (ba.getComputedStyle) {
+                        var c = Mf("P"),
+                            d, e = {
+                                webkitTransform: "-webkit-transform",
+                                OTransform: "-o-transform",
+                                msTransform: "-ms-transform",
+                                MozTransform: "-moz-transform",
+                                transform: "transform"
+                            };
+                        document.body.appendChild(c);
+                        for (var f in e) f in c.style && (c.style[f] = "translate3d(1px,1px,1px)", d = ba.getComputedStyle(c).getPropertyValue(e[f]));
+                        Qf(c);
+                        a = d && "none" !== d
+                    } else a = !1;
+                return a
+            }
+        }();
+
+    function ei(a, c) {
+        var d = a.style;
+        d.WebkitTransform = c;
+        d.MozTransform = c;
+        d.b = c;
+        d.msTransform = c;
+        d.transform = c;
+        Ib && !Ub && (a.style.transformOrigin = "0 0")
+    }
+
+    function fi(a, c) {
+        var d;
+        if (di()) {
+            if (m(6)) {
+                var e = Array(16);
+                for (d = 0; 16 > d; ++d) e[d] = c[d].toFixed(6);
+                d = e.join(",")
+            } else d = c.join(",");
+            ei(a, "matrix3d(" + d + ")")
+        } else if (ci()) {
+            e = [c[0], c[1], c[4], c[5], c[12], c[13]];
+            if (m(6)) {
+                var f = Array(6);
+                for (d = 0; 6 > d; ++d) f[d] = e[d].toFixed(6);
+                d = f.join(",")
+            } else d = e.join(",");
+            ei(a, "matrix(" + d + ")")
+        } else a.style.left = Math.round(c[12]) + "px", a.style.top = Math.round(c[13]) + "px"
+    };
+    var gi = ["experimental-webgl", "webgl", "webkit-3d", "moz-webgl"];
+
+    function hi(a, c) {
+        var d, e, f = gi.length;
+        for (e = 0; e < f; ++e) try {
+            if (d = a.getContext(gi[e], c), null !== d) return d
+        } catch (g) {}
+        return null
+    };
+    var ii, ji = ba.devicePixelRatio || 1,
+        ki = !1,
+        li = function() {
+            if (!("HTMLCanvasElement" in ba)) return !1;
+            try {
+                var a = ai();
+                if (null === a) return !1;
+                m(a.setLineDash) && (ki = !0);
+                return !0
+            } catch (c) {
+                return !1
+            }
+        }(),
+        mi = "DeviceOrientationEvent" in ba,
+        ni = "geolocation" in ba.navigator,
+        oi = "ontouchstart" in ba,
+        pi = "PointerEvent" in ba,
+        qi = !!ba.navigator.msPointerEnabled,
+        ri = !1,
+        si, ti = [];
+    if ("WebGLRenderingContext" in ba) try {
+        var ui = hi(Mf("CANVAS"), {
+            Ei: !0
+        });
+        null !== ui && (ri = !0, si = ui.getParameter(ui.MAX_TEXTURE_SIZE), ti = ui.getSupportedExtensions())
+    } catch (vi) {}
+    ii = ri;
+    wa = ti;
+    va = si;
+
+    function wi(a, c) {
+        this.b = a;
+        this.e = c
+    };
+
+    function xi(a) {
+        wi.call(this, a, {
+            mousedown: this.tk,
+            mousemove: this.uk,
+            mouseup: this.xk,
+            mouseover: this.wk,
+            mouseout: this.vk
+        });
+        this.a = a.a;
+        this.c = []
+    }
+    w(xi, wi);
+
+    function yi(a, c) {
+        for (var d = a.c, e = c.clientX, f = c.clientY, g = 0, h = d.length, k; g < h && (k = d[g]); g++) {
+            var n = Math.abs(f - k[1]);
+            if (25 >= Math.abs(e - k[0]) && 25 >= n) return !0
+        }
+        return !1
+    }
+
+    function zi(a) {
+        var c = Ai(a, a.b),
+            d = c.preventDefault;
+        c.preventDefault = function() {
+            a.preventDefault();
+            d()
+        };
+        c.pointerId = 1;
+        c.isPrimary = !0;
+        c.pointerType = "mouse";
+        return c
+    }
+    l = xi.prototype;
+    l.tk = function(a) {
+        if (!yi(this, a)) {
+            (1).toString() in this.a && this.cancel(a);
+            var c = zi(a);
+            this.a[(1).toString()] = a;
+            Bi(this.b, Ci, c, a)
+        }
+    };
+    l.uk = function(a) {
+        if (!yi(this, a)) {
+            var c = zi(a);
+            Bi(this.b, Di, c, a)
+        }
+    };
+    l.xk = function(a) {
+        if (!yi(this, a)) {
+            var c = this.a[(1).toString()];
+            c && c.button === a.button && (c = zi(a), Bi(this.b, Ei, c, a), zb(this.a, (1).toString()))
+        }
+    };
+    l.wk = function(a) {
+        if (!yi(this, a)) {
+            var c = zi(a);
+            Fi(this.b, c, a)
+        }
+    };
+    l.vk = function(a) {
+        if (!yi(this, a)) {
+            var c = zi(a);
+            Gi(this.b, c, a)
+        }
+    };
+    l.cancel = function(a) {
+        var c = zi(a);
+        this.b.cancel(c, a);
+        zb(this.a, (1).toString())
+    };
+
+    function Hi(a) {
+        wi.call(this, a, {
+            MSPointerDown: this.Ck,
+            MSPointerMove: this.Dk,
+            MSPointerUp: this.Gk,
+            MSPointerOut: this.Ek,
+            MSPointerOver: this.Fk,
+            MSPointerCancel: this.Bk,
+            MSGotPointerCapture: this.zk,
+            MSLostPointerCapture: this.Ak
+        });
+        this.a = a.a;
+        this.c = ["", "unavailable", "touch", "pen", "mouse"]
+    }
+    w(Hi, wi);
+
+    function Ii(a, c) {
+        var d = c;
+        ja(c.b.pointerType) && (d = Ai(c, c.b), d.pointerType = a.c[c.b.pointerType]);
+        return d
+    }
+    l = Hi.prototype;
+    l.Ck = function(a) {
+        this.a[a.b.pointerId] = a;
+        var c = Ii(this, a);
+        Bi(this.b, Ci, c, a)
+    };
+    l.Dk = function(a) {
+        var c = Ii(this, a);
+        Bi(this.b, Di, c, a)
+    };
+    l.Gk = function(a) {
+        var c = Ii(this, a);
+        Bi(this.b, Ei, c, a);
+        zb(this.a, a.b.pointerId)
+    };
+    l.Ek = function(a) {
+        var c = Ii(this, a);
+        Gi(this.b, c, a)
+    };
+    l.Fk = function(a) {
+        var c = Ii(this, a);
+        Fi(this.b, c, a)
+    };
+    l.Bk = function(a) {
+        var c = Ii(this, a);
+        this.b.cancel(c, a);
+        zb(this.a, a.b.pointerId)
+    };
+    l.Ak = function(a) {
+        this.b.dispatchEvent(new Wh("lostpointercapture", a, a.b))
+    };
+    l.zk = function(a) {
+        this.b.dispatchEvent(new Wh("gotpointercapture", a, a.b))
+    };
+
+    function Ji(a) {
+        wi.call(this, a, {
+            pointerdown: this.nn,
+            pointermove: this.pn,
+            pointerup: this.sn,
+            pointerout: this.qn,
+            pointerover: this.rn,
+            pointercancel: this.mn,
+            gotpointercapture: this.Fj,
+            lostpointercapture: this.sk
+        })
+    }
+    w(Ji, wi);
+    l = Ji.prototype;
+    l.nn = function(a) {
+        Ki(this.b, a)
+    };
+    l.pn = function(a) {
+        Ki(this.b, a)
+    };
+    l.sn = function(a) {
+        Ki(this.b, a)
+    };
+    l.qn = function(a) {
+        Ki(this.b, a)
+    };
+    l.rn = function(a) {
+        Ki(this.b, a)
+    };
+    l.mn = function(a) {
+        Ki(this.b, a)
+    };
+    l.sk = function(a) {
+        Ki(this.b, a)
+    };
+    l.Fj = function(a) {
+        Ki(this.b, a)
+    };
+
+    function Li(a, c) {
+        wi.call(this, a, {
+            touchstart: this.so,
+            touchmove: this.ro,
+            touchend: this.qo,
+            touchcancel: this.po
+        });
+        this.a = a.a;
+        this.g = c;
+        this.c = void 0;
+        this.f = 0;
+        this.d = void 0
+    }
+    w(Li, wi);
+    l = Li.prototype;
+    l.qh = function() {
+        this.f = 0;
+        this.d = void 0
+    };
+
+    function Mi(a, c, d) {
+        c = Ai(c, d);
+        c.pointerId = d.identifier + 2;
+        c.bubbles = !0;
+        c.cancelable = !0;
+        c.detail = a.f;
+        c.button = 0;
+        c.buttons = 1;
+        c.width = d.webkitRadiusX || d.radiusX || 0;
+        c.height = d.webkitRadiusY || d.radiusY || 0;
+        c.pressure = d.webkitForce || d.force || .5;
+        c.isPrimary = a.c === d.identifier;
+        c.pointerType = "touch";
+        c.clientX = d.clientX;
+        c.clientY = d.clientY;
+        c.screenX = d.screenX;
+        c.screenY = d.screenY;
+        return c
+    }
+
+    function Ni(a, c, d) {
+        function e() {
+            c.preventDefault()
+        }
+        var f = Array.prototype.slice.call(c.b.changedTouches),
+            g = f.length,
+            h, k;
+        for (h = 0; h < g; ++h) k = Mi(a, c, f[h]), k.preventDefault = e, d.call(a, c, k)
+    }
+    l.so = function(a) {
+        var c = a.b.touches,
+            d = tb(this.a),
+            e = d.length;
+        if (e >= c.length) {
+            var f = [],
+                g, h, k;
+            for (g = 0; g < e; ++g) {
+                h = d[g];
+                k = this.a[h];
+                var n;
+                if (!(n = 1 == h)) a: {
+                    n = c.length;
+                    for (var p = void 0, q = 0; q < n; q++)
+                        if (p = c[q], p.identifier === h - 2) {
+                            n = !0;
+                            break a
+                        }
+                    n = !1
+                }
+                n || f.push(k.ec)
+            }
+            for (g = 0; g < f.length; ++g) this.He(a, f[g])
+        }
+        c = rb(this.a);
+        if (0 === c || 1 === c && (1).toString() in this.a) this.c = a.b.changedTouches[0].identifier, m(this.d) && ba.clearTimeout(this.d);
+        Oi(this, a);
+        this.f++;
+        Ni(this, a, this.hn)
+    };
+    l.hn = function(a, c) {
+        this.a[c.pointerId] = {
+            target: c.target,
+            ec: c,
+            Zg: c.target
+        };
+        var d = this.b;
+        c.bubbles = !0;
+        Bi(d, Pi, c, a);
+        d = this.b;
+        c.bubbles = !1;
+        Bi(d, Qi, c, a);
+        Bi(this.b, Ci, c, a)
+    };
+    l.ro = function(a) {
+        a.preventDefault();
+        Ni(this, a, this.yk)
+    };
+    l.yk = function(a, c) {
+        var d = this.a[c.pointerId];
+        if (d) {
+            var e = d.ec,
+                f = d.Zg;
+            Bi(this.b, Di, c, a);
+            e && f !== c.target && (e.relatedTarget = c.target, c.relatedTarget = f, e.target = f, c.target ? (Gi(this.b, e, a), Fi(this.b, c, a)) : (c.target = f, c.relatedTarget = null, this.He(a, c)));
+            d.ec = c;
+            d.Zg = c.target
+        }
+    };
+    l.qo = function(a) {
+        Oi(this, a);
+        Ni(this, a, this.to)
+    };
+    l.to = function(a, c) {
+        Bi(this.b, Ei, c, a);
+        this.b.ec(c, a);
+        var d = this.b;
+        c.bubbles = !1;
+        Bi(d, Ri, c, a);
+        zb(this.a, c.pointerId);
+        c.isPrimary && (this.c = void 0, this.d = ba.setTimeout(ra(this.qh, this), 200))
+    };
+    l.po = function(a) {
+        Ni(this, a, this.He)
+    };
+    l.He = function(a, c) {
+        this.b.cancel(c, a);
+        this.b.ec(c, a);
+        var d = this.b;
+        c.bubbles = !1;
+        Bi(d, Ri, c, a);
+        zb(this.a, c.pointerId);
+        c.isPrimary && (this.c = void 0, this.d = ba.setTimeout(ra(this.qh, this), 200))
+    };
+
+    function Oi(a, c) {
+        var d = a.g.c,
+            e = c.b.changedTouches[0];
+        if (a.c === e.identifier) {
+            var f = [e.clientX, e.clientY];
+            d.push(f);
+            ba.setTimeout(function() {
+                Za(d, f)
+            }, 2500)
+        }
+    };
+
+    function Si(a) {
+        $c.call(this);
+        this.Z = a;
+        this.a = {};
+        this.c = {};
+        this.b = [];
+        pi ? Ti(this, new Ji(this)) : qi ? Ti(this, new Hi(this)) : (a = new xi(this), Ti(this, a), oi && Ti(this, new Li(this, a)));
+        a = this.b.length;
+        for (var c, d = 0; d < a; d++) c = this.b[d], Ui(this, tb(c.e))
+    }
+    w(Si, $c);
+
+    function Ti(a, c) {
+        var d = tb(c.e);
+        d && (Sa(d, function(a) {
+            var d = c.e[a];
+            d && (this.c[a] = ra(d, c))
+        }, a), a.b.push(c))
+    }
+    Si.prototype.d = function(a) {
+        var c = this.c[a.type];
+        c && c(a)
+    };
+
+    function Ui(a, c) {
+        Sa(c, function(a) {
+            x(this.Z, a, this.d, !1, this)
+        }, a)
+    }
+
+    function Vi(a, c) {
+        Sa(c, function(a) {
+            Vc(this.Z, a, this.d, !1, this)
+        }, a)
+    }
+
+    function Ai(a, c) {
+        for (var d = {}, e, f = 0, g = Wi.length; f < g; f++) e = Wi[f][0], d[e] = a[e] || c[e] || Wi[f][1];
+        return d
+    }
+    Si.prototype.ec = function(a, c) {
+        a.bubbles = !0;
+        Bi(this, Xi, a, c)
+    };
+    Si.prototype.cancel = function(a, c) {
+        Bi(this, Yi, a, c)
+    };
+
+    function Gi(a, c, d) {
+        a.ec(c, d);
+        var e = c.relatedTarget;
+        null !== e && Tf(c.target, e) || (c.bubbles = !1, Bi(a, Ri, c, d))
+    }
+
+    function Fi(a, c, d) {
+        c.bubbles = !0;
+        Bi(a, Pi, c, d);
+        var e = c.relatedTarget;
+        null !== e && Tf(c.target, e) || (c.bubbles = !1, Bi(a, Qi, c, d))
+    }
+
+    function Bi(a, c, d, e) {
+        a.dispatchEvent(new Wh(c, e, d))
+    }
+
+    function Ki(a, c) {
+        a.dispatchEvent(new Wh(c.type, c, c.b))
+    }
+    Si.prototype.O = function() {
+        for (var a = this.b.length, c, d = 0; d < a; d++) c = this.b[d], Vi(this, tb(c.e));
+        Si.S.O.call(this)
+    };
+    var Di = "pointermove",
+        Ci = "pointerdown",
+        Ei = "pointerup",
+        Pi = "pointerover",
+        Xi = "pointerout",
+        Qi = "pointerenter",
+        Ri = "pointerleave",
+        Yi = "pointercancel",
+        Wi = [
+            ["bubbles", !1],
+            ["cancelable", !1],
+            ["view", null],
+            ["detail", null],
+            ["screenX", 0],
+            ["screenY", 0],
+            ["clientX", 0],
+            ["clientY", 0],
+            ["ctrlKey", !1],
+            ["altKey", !1],
+            ["shiftKey", !1],
+            ["metaKey", !1],
+            ["button", 0],
+            ["relatedTarget", null],
+            ["buttons", 0],
+            ["pointerId", 0],
+            ["width", 0],
+            ["height", 0],
+            ["pressure", 0],
+            ["tiltX", 0],
+            ["tiltY", 0],
+            ["pointerType", ""],
+            ["hwTimestamp", 0],
+            ["isPrimary", !1],
+            ["type", ""],
+            ["target", null],
+            ["currentTarget", null],
+            ["which", 0]
+        ];
+
+    function Zi(a, c, d, e, f) {
+        tg.call(this, a, c, f);
+        this.b = d;
+        this.originalEvent = d.b;
+        this.pixel = c.Bd(this.originalEvent);
+        this.coordinate = c.ka(this.pixel);
+        this.dragging = m(e) ? e : !1
+    }
+    w(Zi, tg);
+    Zi.prototype.preventDefault = function() {
+        Zi.S.preventDefault.call(this);
+        this.b.preventDefault()
+    };
+    Zi.prototype.fb = function() {
+        Zi.S.fb.call(this);
+        this.b.fb()
+    };
+
+    function $i(a, c, d, e, f) {
+        Zi.call(this, a, c, d.b, e, f);
+        this.a = d
+    }
+    w($i, Zi);
+
+    function aj(a) {
+        $c.call(this);
+        this.c = a;
+        this.f = 0;
+        this.g = !1;
+        this.a = this.i = this.d = null;
+        a = this.c.a;
+        this.o = 0;
+        this.l = {};
+        this.e = new Si(a);
+        this.b = null;
+        this.i = x(this.e, Ci, this.dk, !1, this);
+        this.q = x(this.e, Di, this.Kn, !1, this)
+    }
+    w(aj, $c);
+
+    function bj(a, c) {
+        var d;
+        d = new $i(cj, a.c, c);
+        a.dispatchEvent(d);
+        0 !== a.f ? (ba.clearTimeout(a.f), a.f = 0, d = new $i(dj, a.c, c), a.dispatchEvent(d)) : a.f = ba.setTimeout(ra(function() {
+            this.f = 0;
+            var a = new $i(ej, this.c, c);
+            this.dispatchEvent(a)
+        }, a), 250)
+    }
+
+    function fj(a, c) {
+        c.type == gj || c.type == hj ? delete a.l[c.pointerId] : c.type == ij && (a.l[c.pointerId] = !0);
+        a.o = rb(a.l)
+    }
+    l = aj.prototype;
+    l.fg = function(a) {
+        fj(this, a);
+        var c = new $i(gj, this.c, a);
+        this.dispatchEvent(c);
+        !this.g && 0 === a.button && bj(this, this.a);
+        0 === this.o && (Sa(this.d, Wc), this.d = null, this.g = !1, this.a = null, qc(this.b), this.b = null)
+    };
+    l.dk = function(a) {
+        fj(this, a);
+        var c = new $i(ij, this.c, a);
+        this.dispatchEvent(c);
+        this.a = a;
+        null === this.d && (this.b = new Si(document), this.d = [x(this.b, jj, this.$k, !1, this), x(this.b, gj, this.fg, !1, this), x(this.e, hj, this.fg, !1, this)])
+    };
+    l.$k = function(a) {
+        if (a.clientX != this.a.clientX || a.clientY != this.a.clientY) {
+            this.g = !0;
+            var c = new $i(kj, this.c, a, this.g);
+            this.dispatchEvent(c)
+        }
+        a.preventDefault()
+    };
+    l.Kn = function(a) {
+        this.dispatchEvent(new $i(a.type, this.c, a, null !== this.a && (a.clientX != this.a.clientX || a.clientY != this.a.clientY)))
+    };
+    l.O = function() {
+        null !== this.q && (Wc(this.q), this.q = null);
+        null !== this.i && (Wc(this.i), this.i = null);
+        null !== this.d && (Sa(this.d, Wc), this.d = null);
+        null !== this.b && (qc(this.b), this.b = null);
+        null !== this.e && (qc(this.e), this.e = null);
+        aj.S.O.call(this)
+    };
+    var ej = "singleclick",
+        cj = "click",
+        dj = "dblclick",
+        kj = "pointerdrag",
+        jj = "pointermove",
+        ij = "pointerdown",
+        gj = "pointerup",
+        hj = "pointercancel",
+        lj = {
+            Ko: ej,
+            zo: cj,
+            Ao: dj,
+            Do: kj,
+            Go: jj,
+            Co: ij,
+            Jo: gj,
+            Io: "pointerover",
+            Ho: "pointerout",
+            Eo: "pointerenter",
+            Fo: "pointerleave",
+            Bo: hj
+        };
+
+    function mj(a) {
+        fd.call(this);
+        var c = Db(a);
+        c.brightness = m(a.brightness) ? a.brightness : 0;
+        c.contrast = m(a.contrast) ? a.contrast : 1;
+        c.hue = m(a.hue) ? a.hue : 0;
+        c.opacity = m(a.opacity) ? a.opacity : 1;
+        c.saturation = m(a.saturation) ? a.saturation : 1;
+        c.visible = m(a.visible) ? a.visible : !0;
+        c.maxResolution = m(a.maxResolution) ? a.maxResolution : Infinity;
+        c.minResolution = m(a.minResolution) ? a.minResolution : 0;
+        this.t(c)
+    }
+    w(mj, fd);
+    l = mj.prototype;
+    l.Bb = function() {
+        return this.get("brightness")
+    };
+    l.Cb = function() {
+        return this.get("contrast")
+    };
+    l.Db = function() {
+        return this.get("hue")
+    };
+
+    function nj(a) {
+        var c = a.Bb(),
+            d = a.Cb(),
+            e = a.Db(),
+            f = a.Kb(),
+            g = a.Gb(),
+            h = a.We(),
+            k = a.eb(),
+            n = a.G(),
+            p = a.Eb(),
+            q = a.Fb();
+        return {
+            layer: a,
+            brightness: Vb(c, -1, 1),
+            contrast: Math.max(d, 0),
+            hue: e,
+            opacity: Vb(f, 0, 1),
+            saturation: Math.max(g, 0),
+            i: h,
+            visible: k,
+            extent: n,
+            maxResolution: p,
+            minResolution: Math.max(q, 0)
+        }
+    }
+    l.G = function() {
+        return this.get("extent")
+    };
+    l.Eb = function() {
+        return this.get("maxResolution")
+    };
+    l.Fb = function() {
+        return this.get("minResolution")
+    };
+    l.Kb = function() {
+        return this.get("opacity")
+    };
+    l.Gb = function() {
+        return this.get("saturation")
+    };
+    l.eb = function() {
+        return this.get("visible")
+    };
+    l.gc = function(a) {
+        this.set("brightness", a)
+    };
+    l.hc = function(a) {
+        this.set("contrast", a)
+    };
+    l.ic = function(a) {
+        this.set("hue", a)
+    };
+    l.bc = function(a) {
+        this.set("extent", a)
+    };
+    l.jc = function(a) {
+        this.set("maxResolution", a)
+    };
+    l.kc = function(a) {
+        this.set("minResolution", a)
+    };
+    l.cc = function(a) {
+        this.set("opacity", a)
+    };
+    l.lc = function(a) {
+        this.set("saturation", a)
+    };
+    l.mc = function(a) {
+        this.set("visible", a)
+    };
+
+    function C(a) {
+        var c = Db(a);
+        delete c.source;
+        mj.call(this, c);
+        this.f = null;
+        x(this, hd("source"), this.kk, !1, this);
+        this.Jc(m(a.source) ? a.source : null)
+    }
+    w(C, mj);
+
+    function oj(a, c) {
+        return a.visible && c >= a.minResolution && c < a.maxResolution
+    }
+    l = C.prototype;
+    l.Ue = function(a) {
+        a = m(a) ? a : [];
+        a.push(nj(this));
+        return a
+    };
+    l.da = function() {
+        var a = this.get("source");
+        return m(a) ? a : null
+    };
+    l.We = function() {
+        var a = this.da();
+        return null === a ? "undefined" : a.o
+    };
+    l.Kl = function() {
+        this.k()
+    };
+    l.kk = function() {
+        null !== this.f && (Wc(this.f), this.f = null);
+        var a = this.da();
+        null !== a && (this.f = x(a, "change", this.Kl, !1, this));
+        this.k()
+    };
+    l.Jc = function(a) {
+        this.set("source", a)
+    };
+
+    function pj(a, c, d, e, f) {
+        $c.call(this);
+        this.f = f;
+        this.extent = a;
+        this.e = d;
+        this.resolution = c;
+        this.state = e
+    }
+    w(pj, $c);
+    pj.prototype.G = function() {
+        return this.extent
+    };
+
+    function qj(a, c, d, e, f, g, h, k) {
+        Dd(a);
+        0 === c && 0 === d || Gd(a, c, d);
+        1 == e && 1 == f || Hd(a, e, f);
+        0 !== g && Id(a, g);
+        0 === h && 0 === k || Gd(a, h, k);
+        return a
+    }
+
+    function rj(a, c) {
+        return a[0] == c[0] && a[1] == c[1] && a[4] == c[4] && a[5] == c[5] && a[12] == c[12] && a[13] == c[13]
+    }
+
+    function sj(a, c, d) {
+        var e = a[1],
+            f = a[5],
+            g = a[13],
+            h = c[0];
+        c = c[1];
+        d[0] = a[0] * h + a[4] * c + a[12];
+        d[1] = e * h + f * c + g;
+        return d
+    };
+
+    function uj(a) {
+        cd.call(this);
+        this.a = a
+    }
+    w(uj, cd);
+    l = uj.prototype;
+    l.Pa = ca;
+    l.dc = function(a, c, d, e) {
+        a = a.slice();
+        sj(c.pixelToCoordinateMatrix, a, a);
+        if (this.Pa(a, c, Gg, this)) return d.call(e, this.a)
+    };
+    l.ee = Fg;
+    l.yd = function(a, c) {
+        return function(d, e) {
+            return $g(a, d, e, function(a) {
+                c[d] || (c[d] = {});
+                c[d][a.b.toString()] = a
+            })
+        }
+    };
+    l.Ol = function(a) {
+        2 === a.target.state && vj(this)
+    };
+
+    function wj(a, c) {
+        var d = c.state;
+        2 != d && 3 != d && x(c, "change", a.Ol, !1, a);
+        0 == d && (c.load(), d = c.state);
+        return 2 == d
+    }
+
+    function vj(a) {
+        var c = a.a;
+        c.eb() && "ready" == c.We() && a.k()
+    }
+
+    function xj(a, c) {
+        yg(c.a) && a.postRenderFunctions.push(ta(function(a, c, f) {
+            c = ma(a).toString();
+            a = a.a;
+            f = f.usedTiles[c];
+            for (var g; yg(a) && !(c = a.b.qc, g = c.b[0].toString(), g in f && f[g].contains(c.b));) a.pop().Yc()
+        }, c))
+    }
+
+    function yj(a, c) {
+        if (null != c) {
+            var d, e, f;
+            e = 0;
+            for (f = c.length; e < f; ++e) d = c[e], a[ma(d).toString()] = d
+        }
+    }
+
+    function zj(a, c) {
+        var d = c.L;
+        m(d) && (ia(d) ? a.logos[d] = "" : la(d) && (a.logos[d.src] = d.href))
+    }
+
+    function Aj(a, c, d, e) {
+        c = ma(c).toString();
+        d = d.toString();
+        c in a ? d in a[c] ? (a = a[c][d], e.b < a.b && (a.b = e.b), e.d > a.d && (a.d = e.d), e.c < a.c && (a.c = e.c), e.a > a.a && (a.a = e.a)) : a[c][d] = e : (a[c] = {}, a[c][d] = e)
+    }
+
+    function Bj(a, c, d) {
+        return [c * (Math.round(a[0] / c) + d[0] % 2 / 2), c * (Math.round(a[1] / c) + d[1] % 2 / 2)]
+    }
+
+    function Cj(a, c, d, e, f, g, h, k, n, p) {
+        var q = ma(c).toString();
+        q in a.wantedTiles || (a.wantedTiles[q] = {});
+        var r = a.wantedTiles[q];
+        a = a.tileQueue;
+        var t = d.minZoom,
+            u, A, z, D, B, y;
+        for (y = h; y >= t; --y)
+            for (A = Pg(d, g, y, A), z = d.ma(y), D = A.b; D <= A.d; ++D)
+                for (B = A.c; B <= A.a; ++B) h - y <= k ? (u = c.Vb(y, D, B, e, f), 0 == u.state && (r[ef(u.b)] = !0, u.gb() in a.c || Dj(a, [u, q, Sg(d, u.b), z])), m(n) && n.call(p, u)) : c.yf(y, D, B)
+    };
+
+    function Ej(a) {
+        this.U = a.opacity;
+        this.V = a.rotateWithView;
+        this.q = a.rotation;
+        this.l = a.scale;
+        this.n = a.snapToPixel
+    }
+    l = Ej.prototype;
+    l.ie = function() {
+        return this.U
+    };
+    l.Jd = function() {
+        return this.V
+    };
+    l.je = function() {
+        return this.q
+    };
+    l.ke = function() {
+        return this.l
+    };
+    l.Kd = function() {
+        return this.n
+    };
+    l.le = function(a) {
+        this.q = a
+    };
+    l.me = function(a) {
+        this.l = a
+    };
+
+    function Fj(a) {
+        a = m(a) ? a : {};
+        this.e = m(a.anchor) ? a.anchor : [.5, .5];
+        this.d = null;
+        this.a = m(a.anchorOrigin) ? a.anchorOrigin : "top-left";
+        this.g = m(a.anchorXUnits) ? a.anchorXUnits : "fraction";
+        this.i = m(a.anchorYUnits) ? a.anchorYUnits : "fraction";
+        var c = m(a.crossOrigin) ? a.crossOrigin : null,
+            d = m(a.img) ? a.img : null,
+            e = m(a.imgSize) ? a.imgSize : null,
+            f = a.src;
+        m(f) && 0 !== f.length || null === d || (f = d.src);
+        var g = m(a.src) ? 0 : 2,
+            h = Gj.Ia(),
+            k = h.get(f, c);
+        null === k && (k = new Hj(d, f, e, c, g), h.set(f, c, k));
+        this.b = k;
+        this.p = m(a.offset) ? a.offset : [0, 0];
+        this.c = m(a.offsetOrigin) ? a.offsetOrigin : "top-left";
+        this.f = null;
+        this.o = m(a.size) ? a.size : null;
+        Ej.call(this, {
+            opacity: m(a.opacity) ? a.opacity : 1,
+            rotation: m(a.rotation) ? a.rotation : 0,
+            scale: m(a.scale) ? a.scale : 1,
+            snapToPixel: m(a.snapToPixel) ? a.snapToPixel : !0,
+            rotateWithView: m(a.rotateWithView) ? a.rotateWithView : !1
+        })
+    }
+    w(Fj, Ej);
+    l = Fj.prototype;
+    l.mb = function() {
+        if (null !== this.d) return this.d;
+        var a = this.e,
+            c = this.Xa();
+        if ("fraction" == this.g || "fraction" == this.i) {
+            if (null === c) return null;
+            a = this.e.slice();
+            "fraction" == this.g && (a[0] *= c[0]);
+            "fraction" == this.i && (a[1] *= c[1])
+        }
+        if ("top-left" != this.a) {
+            if (null === c) return null;
+            a === this.e && (a = this.e.slice());
+            if ("top-right" == this.a || "bottom-right" == this.a) a[0] = -a[0] + c[0];
+            if ("bottom-left" == this.a || "bottom-right" == this.a) a[1] = -a[1] + c[1]
+        }
+        return this.d = a
+    };
+    l.Lb = function() {
+        return this.b.b
+    };
+    l.Dd = function() {
+        return this.b.a
+    };
+    l.gd = function() {
+        return this.b.c
+    };
+    l.he = function() {
+        var a = this.b;
+        if (null === a.e)
+            if (a.i) {
+                var c = a.a[0],
+                    d = a.a[1],
+                    e = ai(c, d);
+                e.fillRect(0, 0, c, d);
+                a.e = e.canvas
+            } else a.e = a.b;
+        return a.e
+    };
+    l.rb = function() {
+        if (null !== this.f) return this.f;
+        var a = this.p;
+        if ("top-left" != this.c) {
+            var c = this.Xa(),
+                d = this.b.a;
+            if (null === c || null === d) return null;
+            a = a.slice();
+            if ("top-right" == this.c || "bottom-right" == this.c) a[0] = d[0] - c[0] - a[0];
+            if ("bottom-left" == this.c || "bottom-right" == this.c) a[1] = d[1] - c[1] - a[1]
+        }
+        return this.f = a
+    };
+    l.Bm = function() {
+        return this.b.f
+    };
+    l.Xa = function() {
+        return null === this.o ? this.b.a : this.o
+    };
+    l.$e = function(a, c) {
+        return x(this.b, "change", a, !1, c)
+    };
+    l.load = function() {
+        this.b.load()
+    };
+    l.xf = function(a, c) {
+        Vc(this.b, "change", a, !1, c)
+    };
+
+    function Hj(a, c, d, e, f) {
+        $c.call(this);
+        this.e = null;
+        this.b = null === a ? new Image : a;
+        null !== e && (this.b.crossOrigin = e);
+        this.d = null;
+        this.c = f;
+        this.a = d;
+        this.f = c;
+        this.i = !1
+    }
+    w(Hj, $c);
+    Hj.prototype.g = function() {
+        this.c = 3;
+        Sa(this.d, Wc);
+        this.d = null;
+        this.dispatchEvent("change")
+    };
+    Hj.prototype.q = function() {
+        this.c = 2;
+        this.a = [this.b.width, this.b.height];
+        Sa(this.d, Wc);
+        this.d = null;
+        var a = ai(1, 1);
+        a.drawImage(this.b, 0, 0);
+        try {
+            a.getImageData(0, 0, 1, 1)
+        } catch (c) {
+            this.i = !0
+        }
+        this.dispatchEvent("change")
+    };
+    Hj.prototype.load = function() {
+        if (0 == this.c) {
+            this.c = 1;
+            this.d = [Uc(this.b, "error", this.g, !1, this), Uc(this.b, "load", this.q, !1, this)];
+            try {
+                this.b.src = this.f
+            } catch (a) {
+                this.g()
+            }
+        }
+    };
+
+    function Gj() {
+        this.b = {};
+        this.a = 0
+    }
+    da(Gj);
+    Gj.prototype.clear = function() {
+        this.b = {};
+        this.a = 0
+    };
+    Gj.prototype.get = function(a, c) {
+        var d = c + ":" + a;
+        return d in this.b ? this.b[d] : null
+    };
+    Gj.prototype.set = function(a, c, d) {
+        this.b[c + ":" + a] = d;
+        ++this.a
+    };
+
+    function Ij(a, c) {
+        mc.call(this);
+        this.g = c;
+        this.c = null;
+        this.f = {};
+        this.o = {}
+    }
+    w(Ij, mc);
+
+    function Jj(a) {
+        var c = a.viewState,
+            d = a.coordinateToPixelMatrix;
+        qj(d, a.size[0] / 2, a.size[1] / 2, 1 / c.resolution, -1 / c.resolution, -c.rotation, -c.center[0], -c.center[1]);
+        Fd(d, a.pixelToCoordinateMatrix)
+    }
+    l = Ij.prototype;
+    l.O = function() {
+        pb(this.f, qc);
+        Ij.S.O.call(this)
+    };
+
+    function Kj() {
+        var a = Gj.Ia();
+        if (32 < a.a) {
+            var c = 0,
+                d, e;
+            for (d in a.b) {
+                e = a.b[d];
+                var f;
+                if (f = 0 === (c++ & 3)) Bc(e) ? e = bd(e, void 0, void 0) : (e = Qc(e), e = !!e && Kc(e, void 0, void 0)), f = !e;
+                f && (delete a.b[d], --a.a)
+            }
+        }
+    }
+    l.ef = function(a, c, d, e, f, g) {
+        function h(a) {
+            var c = ma(a).toString();
+            if (!(c in r)) return r[c] = !0, d.call(e, a, null)
+        }
+        var k, n = c.viewState,
+            p = n.resolution,
+            q = n.rotation,
+            r = {},
+            t = n.projection,
+            n = a;
+        if (t.c) {
+            var u = t.G(),
+                t = ie(u);
+            k = a[0];
+            if (k < u[0] || k > u[2]) n = Math.ceil((u[0] - k) / t), n = [k + t * n, a[1]]
+        }
+        if (null !== this.c && (k = this.c.c(n, p, q, {}, h))) return k;
+        q = c.layerStatesArray;
+        for (t = q.length - 1; 0 <= t; --t)
+            if (k = q[t], u = k.layer, oj(k, p) && f.call(g, u) && (k = Lj(this, u).Pa(Cg(u.da()) ? n : a, c, d, e))) return k
+    };
+    l.Jg = function(a, c, d, e, f, g) {
+        var h, k = c.viewState,
+            n = k.resolution,
+            k = k.rotation;
+        if (null !== this.c) {
+            var p = this.g.ka(a);
+            if (this.c.c(p, n, k, {}, Gg) && (h = d.call(e, null))) return h
+        }
+        k = c.layerStatesArray;
+        for (p = k.length - 1; 0 <= p; --p) {
+            h = k[p];
+            var q = h.layer;
+            if (oj(h, n) && f.call(g, q) && (h = Lj(this, q).dc(a, c, d, e))) return h
+        }
+    };
+    l.Kg = function(a, c, d, e) {
+        a = this.ef(a, c, Gg, this, d, e);
+        return m(a)
+    };
+
+    function Lj(a, c) {
+        var d = ma(c).toString();
+        if (d in a.f) return a.f[d];
+        var e = a.Ke(c);
+        a.f[d] = e;
+        a.o[d] = x(e, "change", a.Tj, !1, a);
+        return e
+    }
+    l.Tj = function() {
+        this.g.render()
+    };
+    l.ue = ca;
+    l.Pn = function(a, c) {
+        for (var d in this.f)
+            if (!(null !== c && d in c.layerStates)) {
+                var e = d,
+                    f = this.f[e];
+                delete this.f[e];
+                Wc(this.o[e]);
+                delete this.o[e];
+                qc(f)
+            }
+    };
+
+    function Mj(a, c) {
+        for (var d in a.f)
+            if (!(d in c.layerStates)) {
+                c.postRenderFunctions.push(ra(a.Pn, a));
+                break
+            }
+    };
+
+    function Nj(a, c) {
+        this.g = a;
+        this.e = c;
+        this.b = [];
+        this.a = [];
+        this.c = {}
+    }
+    Nj.prototype.clear = function() {
+        this.b.length = 0;
+        this.a.length = 0;
+        yb(this.c)
+    };
+
+    function Oj(a) {
+        var c = a.b,
+            d = a.a,
+            e = c[0];
+        1 == c.length ? (c.length = 0, d.length = 0) : (c[0] = c.pop(), d[0] = d.pop(), Pj(a, 0));
+        c = a.e(e);
+        delete a.c[c];
+        return e
+    }
+
+    function Dj(a, c) {
+        var d = a.g(c);
+        Infinity != d && (a.b.push(c), a.a.push(d), a.c[a.e(c)] = !0, Qj(a, 0, a.b.length - 1))
+    }
+    Nj.prototype.Tb = function() {
+        return this.b.length
+    };
+    Nj.prototype.la = function() {
+        return 0 === this.b.length
+    };
+
+    function Pj(a, c) {
+        for (var d = a.b, e = a.a, f = d.length, g = d[c], h = e[c], k = c; c < f >> 1;) {
+            var n = 2 * c + 1,
+                p = 2 * c + 2,
+                n = p < f && e[p] < e[n] ? p : n;
+            d[c] = d[n];
+            e[c] = e[n];
+            c = n
+        }
+        d[c] = g;
+        e[c] = h;
+        Qj(a, k, c)
+    }
+
+    function Qj(a, c, d) {
+        var e = a.b;
+        a = a.a;
+        for (var f = e[d], g = a[d]; d > c;) {
+            var h = d - 1 >> 1;
+            if (a[h] > g) e[d] = e[h], a[d] = a[h], d = h;
+            else break
+        }
+        e[d] = f;
+        a[d] = g
+    }
+
+    function Rj(a) {
+        var c = a.g,
+            d = a.b,
+            e = a.a,
+            f = 0,
+            g = d.length,
+            h, k, n;
+        for (k = 0; k < g; ++k) h = d[k], n = c(h), Infinity == n ? delete a.c[a.e(h)] : (e[f] = n, d[f++] = h);
+        d.length = f;
+        e.length = f;
+        for (c = (a.b.length >> 1) - 1; 0 <= c; c--) Pj(a, c)
+    };
+
+    function Sj(a, c) {
+        Nj.call(this, function(c) {
+            return a.apply(null, c)
+        }, function(a) {
+            return a[0].gb()
+        });
+        this.i = c;
+        this.d = 0
+    }
+    w(Sj, Nj);
+    Sj.prototype.f = function(a) {
+        a = a.target;
+        var c = a.state;
+        if (2 === c || 3 === c || 4 === c) Vc(a, "change", this.f, !1, this), --this.d, this.i()
+    };
+
+    function Tj(a, c, d) {
+        this.d = a;
+        this.c = c;
+        this.f = d;
+        this.b = [];
+        this.a = this.e = 0
+    }
+    Tj.prototype.update = function(a, c) {
+        this.b.push(a, c, ua())
+    };
+
+    function Uj(a, c) {
+        var d = a.d,
+            e = a.a,
+            f = a.c - e,
+            g = Vj(a);
+        return Ze({
+            source: c,
+            duration: g,
+            easing: function(a) {
+                return e * (Math.exp(d * a * g) - 1) / f
+            }
+        })
+    }
+
+    function Vj(a) {
+        return Math.log(a.c / a.a) / a.d
+    };
+
+    function Wj(a) {
+        fd.call(this);
+        this.l = null;
+        this.d(!0);
+        this.handleEvent = a.handleEvent
+    }
+    w(Wj, fd);
+    Wj.prototype.c = function() {
+        return this.get("active")
+    };
+    Wj.prototype.d = function(a) {
+        this.set("active", a)
+    };
+    Wj.prototype.setMap = function(a) {
+        this.l = a
+    };
+
+    function Xj(a, c, d, e, f) {
+        if (null != d) {
+            var g = c.Da(),
+                h = c.Ca();
+            m(g) && m(h) && m(f) && 0 < f && (a.Ha($e({
+                rotation: g,
+                duration: f,
+                easing: Ve
+            })), m(e) && a.Ha(Ze({
+                source: h,
+                duration: f,
+                easing: Ve
+            })));
+            c.rotate(d, e)
+        }
+    }
+
+    function Yj(a, c, d, e, f) {
+        var g = c.ya();
+        d = c.constrainResolution(g, d, 0);
+        Zj(a, c, d, e, f)
+    }
+
+    function Zj(a, c, d, e, f) {
+        if (null != d) {
+            var g = c.ya(),
+                h = c.Ca();
+            m(g) && m(h) && m(f) && 0 < f && (a.Ha(af({
+                resolution: g,
+                duration: f,
+                easing: Ve
+            })), m(e) && a.Ha(Ze({
+                source: h,
+                duration: f,
+                easing: Ve
+            })));
+            if (null != e) {
+                var k;
+                a = c.Ca();
+                f = c.ya();
+                m(a) && m(f) && (k = [e[0] - d * (e[0] - a[0]) / f, e[1] - d * (e[1] - a[1]) / f]);
+                c.Na(k)
+            }
+            c.tb(d)
+        }
+    };
+
+    function ak(a) {
+        a = m(a) ? a : {};
+        this.a = m(a.delta) ? a.delta : 1;
+        Wj.call(this, {
+            handleEvent: bk
+        });
+        this.e = m(a.duration) ? a.duration : 250
+    }
+    w(ak, Wj);
+
+    function bk(a) {
+        var c = !1,
+            d = a.b;
+        if (a.type == dj) {
+            var c = a.map,
+                e = a.coordinate,
+                d = d.d ? -this.a : this.a,
+                f = c.R();
+            Yj(c, f, d, e, this.e);
+            a.preventDefault();
+            c = !0
+        }
+        return !c
+    };
+
+    function ck(a) {
+        a = a.b;
+        return a.a && !a.g && a.d
+    }
+
+    function dk(a) {
+        return "pointermove" == a.type
+    }
+
+    function ek(a) {
+        return a.type == ej
+    }
+
+    function fk(a) {
+        a = a.b;
+        return !a.a && !a.g && !a.d
+    }
+
+    function gk(a) {
+        a = a.b;
+        return !a.a && !a.g && a.d
+    }
+
+    function hk(a) {
+        a = a.b.target.tagName;
+        return "INPUT" !== a && "SELECT" !== a && "TEXTAREA" !== a
+    }
+
+    function ik(a) {
+        return 1 == a.a.pointerId
+    };
+
+    function jk(a) {
+        a = m(a) ? a : {};
+        Wj.call(this, {
+            handleEvent: m(a.handleEvent) ? a.handleEvent : kk
+        });
+        this.vb = m(a.handleDownEvent) ? a.handleDownEvent : Fg;
+        this.wb = m(a.handleDragEvent) ? a.handleDragEvent : ca;
+        this.xb = m(a.handleMoveEvent) ? a.handleMoveEvent : ca;
+        this.sc = m(a.handleUpEvent) ? a.handleUpEvent : Fg;
+        this.o = !1;
+        this.J = {};
+        this.e = []
+    }
+    w(jk, Wj);
+
+    function lk(a) {
+        for (var c = a.length, d = 0, e = 0, f = 0; f < c; f++) d += a[f].clientX, e += a[f].clientY;
+        return [d / c, e / c]
+    }
+
+    function kk(a) {
+        if (!(a instanceof $i)) return !0;
+        var c = !1,
+            d = a.type;
+        if (d === ij || d === kj || d === gj) d = a.a, a.type == gj ? delete this.J[d.pointerId] : a.type == ij ? this.J[d.pointerId] = d : d.pointerId in this.J && (this.J[d.pointerId] = d), this.e = sb(this.J);
+        this.o && (a.type == kj ? this.wb(a) : a.type == gj && (this.o = this.sc(a)));
+        a.type == ij ? (this.o = a = this.vb(a), c = this.nc(a)) : a.type == jj && this.xb(a);
+        return !c
+    }
+    jk.prototype.nc = Ig;
+
+    function mk(a) {
+        jk.call(this, {
+            handleDownEvent: nk,
+            handleDragEvent: ok,
+            handleUpEvent: pk
+        });
+        a = m(a) ? a : {};
+        this.a = a.kinetic;
+        this.f = this.g = null;
+        this.n = m(a.condition) ? a.condition : fk;
+        this.i = !1
+    }
+    w(mk, jk);
+
+    function ok(a) {
+        var c = lk(this.e);
+        this.a && this.a.update(c[0], c[1]);
+        if (null !== this.f) {
+            var d = this.f[0] - c[0],
+                e = c[1] - this.f[1];
+            a = a.map;
+            var f = a.R(),
+                g = Se(f),
+                e = d = [d, e],
+                h = g.resolution;
+            e[0] *= h;
+            e[1] *= h;
+            rd(d, g.rotation);
+            md(d, g.center);
+            d = f.xd(d);
+            a.render();
+            f.Na(d)
+        }
+        this.f = c
+    }
+
+    function pk(a) {
+        a = a.map;
+        var c = a.R();
+        if (0 === this.e.length) {
+            var d;
+            if (d = !this.i && this.a)
+                if (d = this.a, 6 > d.b.length) d = !1;
+                else {
+                    var e = ua() - d.f,
+                        f = d.b.length - 3;
+                    if (d.b[f + 2] < e) d = !1;
+                    else {
+                        for (var g = f - 3; 0 < g && d.b[g + 2] > e;) g -= 3;
+                        var e = d.b[f + 2] - d.b[g + 2],
+                            h = d.b[f] - d.b[g],
+                            f = d.b[f + 1] - d.b[g + 1];
+                        d.e = Math.atan2(f, h);
+                        d.a = Math.sqrt(h * h + f * f) / e;
+                        d = d.a > d.c
+                    }
+                }
+            d && (d = this.a, d = (d.c - d.a) / d.d, f = this.a.e, g = c.Ca(), this.g = Uj(this.a, g), a.Ha(this.g), g = a.ta(g), d = a.ka([g[0] - d * Math.cos(f), g[1] - d * Math.sin(f)]), d = c.xd(d), c.Na(d));
+            Ue(c, -1);
+            a.render();
+            return !1
+        }
+        this.f = null;
+        return !0
+    }
+
+    function nk(a) {
+        if (0 < this.e.length && this.n(a)) {
+            var c = a.map,
+                d = c.R();
+            this.f = null;
+            this.o || Ue(d, 1);
+            c.render();
+            null !== this.g && Za(c.H, this.g) && (d.Na(a.frameState.viewState.center), this.g = null);
+            this.a && (a = this.a, a.b.length = 0, a.e = 0, a.a = 0);
+            this.i = 1 < this.e.length;
+            return !0
+        }
+        return !1
+    }
+    mk.prototype.nc = Fg;
+
+    function qk(a) {
+        a = m(a) ? a : {};
+        jk.call(this, {
+            handleDownEvent: rk,
+            handleDragEvent: sk,
+            handleUpEvent: tk
+        });
+        this.f = m(a.condition) ? a.condition : ck;
+        this.a = void 0;
+        this.g = m(a.duration) ? a.duration : 250
+    }
+    w(qk, jk);
+
+    function sk(a) {
+        if (ik(a)) {
+            var c = a.map,
+                d = c.xa();
+            a = a.pixel;
+            d = Math.atan2(d[1] / 2 - a[1], a[0] - d[0] / 2);
+            if (m(this.a)) {
+                a = d - this.a;
+                var e = c.R(),
+                    f = e.Da();
+                c.render();
+                Xj(c, e, f - a)
+            }
+            this.a = d
+        }
+    }
+
+    function tk(a) {
+        if (!ik(a)) return !0;
+        a = a.map;
+        var c = a.R();
+        Ue(c, -1);
+        var d = c.Da(),
+            e = this.g,
+            d = c.constrainRotation(d, 0);
+        Xj(a, c, d, void 0, e);
+        return !1
+    }
+
+    function rk(a) {
+        return ik(a) && zc(a.b) && this.f(a) ? (a = a.map, Ue(a.R(), 1), a.render(), this.a = void 0, !0) : !1
+    }
+    qk.prototype.nc = Fg;
+
+    function uk() {
+        fd.call(this);
+        this.o = Kd();
+        this.n = -1;
+        this.f = {};
+        this.l = this.g = 0
+    }
+    w(uk, fd);
+    uk.prototype.e = function(a, c) {
+        var d = m(c) ? c : [NaN, NaN];
+        this.Sa(a[0], a[1], d, Infinity);
+        return d
+    };
+    uk.prototype.Jb = Fg;
+    uk.prototype.G = function(a) {
+        this.n != this.b && (this.o = this.wd(this.o), this.n = this.b);
+        var c = this.o;
+        m(a) ? (a[0] = c[0], a[1] = c[1], a[2] = c[2], a[3] = c[3]) : a = c;
+        return a
+    };
+    uk.prototype.transform = function(a, c) {
+        this.qa(Je(a, c));
+        return this
+    };
+
+    function vk(a, c, d, e, f, g) {
+        var h = f[0],
+            k = f[1],
+            n = f[4],
+            p = f[5],
+            q = f[12];
+        f = f[13];
+        for (var r = m(g) ? g : [], t = 0; c < d; c += e) {
+            var u = a[c],
+                A = a[c + 1];
+            r[t++] = h * u + n * A + q;
+            r[t++] = k * u + p * A + f
+        }
+        m(g) && r.length != t && (r.length = t);
+        return r
+    };
+
+    function wk() {
+        uk.call(this);
+        this.a = "XY";
+        this.s = 2;
+        this.j = null
+    }
+    w(wk, uk);
+
+    function xk(a) {
+        if ("XY" == a) return 2;
+        if ("XYZ" == a || "XYM" == a) return 3;
+        if ("XYZM" == a) return 4
+    }
+    l = wk.prototype;
+    l.Jb = Fg;
+    l.wd = function(a) {
+        var c = this.j,
+            d = this.j.length,
+            e = this.s;
+        a = Nd(Infinity, Infinity, -Infinity, -Infinity, a);
+        return Xd(a, c, 0, d, e)
+    };
+    l.ob = function() {
+        return this.j.slice(0, this.s)
+    };
+    l.pb = function() {
+        return this.j.slice(this.j.length - this.s)
+    };
+    l.qb = function() {
+        return this.a
+    };
+    l.Ve = function(a) {
+        this.l != this.b && (yb(this.f), this.g = 0, this.l = this.b);
+        if (0 > a || 0 !== this.g && a <= this.g) return this;
+        var c = a.toString();
+        if (this.f.hasOwnProperty(c)) return this.f[c];
+        var d = this.xc(a);
+        if (d.j.length < this.j.length) return this.f[c] = d;
+        this.g = a;
+        return this
+    };
+    l.xc = function() {
+        return this
+    };
+
+    function yk(a, c, d) {
+        a.s = xk(c);
+        a.a = c;
+        a.j = d
+    }
+
+    function zk(a, c, d, e) {
+        if (m(c)) d = xk(c);
+        else {
+            for (c = 0; c < e; ++c) {
+                if (0 === d.length) {
+                    a.a = "XY";
+                    a.s = 2;
+                    return
+                }
+                d = d[0]
+            }
+            d = d.length;
+            c = 2 == d ? "XY" : 3 == d ? "XYZ" : 4 == d ? "XYZM" : void 0
+        }
+        a.a = c;
+        a.s = d
+    }
+    l.qa = function(a) {
+        null !== this.j && (a(this.j, this.j, this.s), this.k())
+    };
+    l.Oa = function(a, c) {
+        var d = this.j;
+        if (null !== d) {
+            var e = d.length,
+                f = this.s,
+                g = m(d) ? d : [],
+                h = 0,
+                k, n;
+            for (k = 0; k < e; k += f)
+                for (g[h++] = d[k] + a, g[h++] = d[k + 1] + c, n = k + 2; n < k + f; ++n) g[h++] = d[n];
+            m(d) && g.length != h && (g.length = h);
+            this.k()
+        }
+    };
+
+    function Ak(a, c, d, e) {
+        for (var f = 0, g = a[d - e], h = a[d - e + 1]; c < d; c += e) var k = a[c],
+            n = a[c + 1],
+            f = f + (h * k - g * n),
+            g = k,
+            h = n;
+        return f / 2
+    }
+
+    function Bk(a, c, d, e) {
+        var f = 0,
+            g, h;
+        g = 0;
+        for (h = d.length; g < h; ++g) {
+            var k = d[g],
+                f = f + Ak(a, c, k, e);
+            c = k
+        }
+        return f
+    };
+
+    function Ck(a, c, d, e, f, g) {
+        var h = f - d,
+            k = g - e;
+        if (0 !== h || 0 !== k) {
+            var n = ((a - d) * h + (c - e) * k) / (h * h + k * k);
+            1 < n ? (d = f, e = g) : 0 < n && (d += h * n, e += k * n)
+        }
+        return Dk(a, c, d, e)
+    }
+
+    function Dk(a, c, d, e) {
+        a = d - a;
+        c = e - c;
+        return a * a + c * c
+    };
+
+    function Ek(a, c, d, e, f, g, h) {
+        var k = a[c],
+            n = a[c + 1],
+            p = a[d] - k,
+            q = a[d + 1] - n;
+        if (0 !== p || 0 !== q)
+            if (g = ((f - k) * p + (g - n) * q) / (p * p + q * q), 1 < g) c = d;
+            else if (0 < g) {
+            for (f = 0; f < e; ++f) h[f] = Xb(a[c + f], a[d + f], g);
+            h.length = e;
+            return
+        }
+        for (f = 0; f < e; ++f) h[f] = a[c + f];
+        h.length = e
+    }
+
+    function Fk(a, c, d, e, f) {
+        var g = a[c],
+            h = a[c + 1];
+        for (c += e; c < d; c += e) {
+            var k = a[c],
+                n = a[c + 1],
+                g = Dk(g, h, k, n);
+            g > f && (f = g);
+            g = k;
+            h = n
+        }
+        return f
+    }
+
+    function Gk(a, c, d, e, f) {
+        var g, h;
+        g = 0;
+        for (h = d.length; g < h; ++g) {
+            var k = d[g];
+            f = Fk(a, c, k, e, f);
+            c = k
+        }
+        return f
+    }
+
+    function Hk(a, c, d, e, f, g, h, k, n, p, q) {
+        if (c == d) return p;
+        var r;
+        if (0 === f) {
+            r = Dk(h, k, a[c], a[c + 1]);
+            if (r < p) {
+                for (q = 0; q < e; ++q) n[q] = a[c + q];
+                n.length = e;
+                return r
+            }
+            return p
+        }
+        for (var t = m(q) ? q : [NaN, NaN], u = c + e; u < d;)
+            if (Ek(a, u - e, u, e, h, k, t), r = Dk(h, k, t[0], t[1]), r < p) {
+                p = r;
+                for (q = 0; q < e; ++q) n[q] = t[q];
+                n.length = e;
+                u += e
+            } else u += e * Math.max((Math.sqrt(r) - Math.sqrt(p)) / f | 0, 1);
+        if (g && (Ek(a, d - e, c, e, h, k, t), r = Dk(h, k, t[0], t[1]), r < p)) {
+            p = r;
+            for (q = 0; q < e; ++q) n[q] = t[q];
+            n.length = e
+        }
+        return p
+    }
+
+    function Ik(a, c, d, e, f, g, h, k, n, p, q) {
+        q = m(q) ? q : [NaN, NaN];
+        var r, t;
+        r = 0;
+        for (t = d.length; r < t; ++r) {
+            var u = d[r];
+            p = Hk(a, c, u, e, f, g, h, k, n, p, q);
+            c = u
+        }
+        return p
+    };
+
+    function Jk(a, c) {
+        var d = 0,
+            e, f;
+        e = 0;
+        for (f = c.length; e < f; ++e) a[d++] = c[e];
+        return d
+    }
+
+    function Kk(a, c, d, e) {
+        var f, g;
+        f = 0;
+        for (g = d.length; f < g; ++f) {
+            var h = d[f],
+                k;
+            for (k = 0; k < e; ++k) a[c++] = h[k]
+        }
+        return c
+    }
+
+    function Lk(a, c, d, e, f) {
+        f = m(f) ? f : [];
+        var g = 0,
+            h, k;
+        h = 0;
+        for (k = d.length; h < k; ++h) c = Kk(a, c, d[h], e), f[g++] = c;
+        f.length = g;
+        return f
+    };
+
+    function Mk(a, c, d, e, f) {
+        f = m(f) ? f : [];
+        for (var g = 0; c < d; c += e) f[g++] = a.slice(c, c + e);
+        f.length = g;
+        return f
+    }
+
+    function Nk(a, c, d, e, f) {
+        f = m(f) ? f : [];
+        var g = 0,
+            h, k;
+        h = 0;
+        for (k = d.length; h < k; ++h) {
+            var n = d[h];
+            f[g++] = Mk(a, c, n, e, f[g]);
+            c = n
+        }
+        f.length = g;
+        return f
+    };
+
+    function Ok(a, c, d, e, f, g, h) {
+        var k = (d - c) / e;
+        if (3 > k) {
+            for (; c < d; c += e) g[h++] = a[c], g[h++] = a[c + 1];
+            return h
+        }
+        var n = Array(k);
+        n[0] = 1;
+        n[k - 1] = 1;
+        d = [c, d - e];
+        for (var p = 0, q; 0 < d.length;) {
+            var r = d.pop(),
+                t = d.pop(),
+                u = 0,
+                A = a[t],
+                z = a[t + 1],
+                D = a[r],
+                B = a[r + 1];
+            for (q = t + e; q < r; q += e) {
+                var y = Ck(a[q], a[q + 1], A, z, D, B);
+                y > u && (p = q, u = y)
+            }
+            u > f && (n[(p - c) / e] = 1, t + e < p && d.push(t, p), p + e < r && d.push(p, r))
+        }
+        for (q = 0; q < k; ++q) n[q] && (g[h++] = a[c + q * e], g[h++] = a[c + q * e + 1]);
+        return h
+    }
+
+    function Pk(a, c, d, e, f, g, h, k) {
+        var n, p;
+        n = 0;
+        for (p = d.length; n < p; ++n) {
+            var q = d[n];
+            a: {
+                var r = a,
+                    t = q,
+                    u = e,
+                    A = f,
+                    z = g;
+                if (c != t) {
+                    var D = A * Math.round(r[c] / A),
+                        B = A * Math.round(r[c + 1] / A);
+                    c += u;
+                    z[h++] = D;
+                    z[h++] = B;
+                    var y = void 0,
+                        K = void 0;
+                    do
+                        if (y = A * Math.round(r[c] / A), K = A * Math.round(r[c + 1] / A), c += u, c == t) {
+                            z[h++] = y;
+                            z[h++] = K;
+                            break a
+                        }
+                    while (y == D && K == B);
+                    for (; c < t;) {
+                        var J, H;
+                        J = A * Math.round(r[c] / A);
+                        H = A * Math.round(r[c + 1] / A);
+                        c += u;
+                        if (J != y || H != K) {
+                            var P = y - D,
+                                sa = K - B,
+                                Oa = J - D,
+                                N = H - B;
+                            P * N == sa * Oa && (0 > P && Oa < P || P == Oa || 0 < P && Oa > P) && (0 > sa && N < sa || sa == N || 0 < sa && N > sa) || (z[h++] = y, z[h++] = K, D = y, B = K);
+                            y = J;
+                            K = H
+                        }
+                    }
+                    z[h++] = y;
+                    z[h++] = K
+                }
+            }
+            k.push(h);
+            c = q
+        }
+        return h
+    };
+
+    function Qk(a, c) {
+        wk.call(this);
+        this.c = this.i = -1;
+        this.W(a, c)
+    }
+    w(Qk, wk);
+    l = Qk.prototype;
+    l.clone = function() {
+        var a = new Qk(null);
+        Rk(a, this.a, this.j.slice());
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        if (e < Qd(this.G(), a, c)) return e;
+        this.c != this.b && (this.i = Math.sqrt(Fk(this.j, 0, this.j.length, this.s, 0)), this.c = this.b);
+        return Hk(this.j, 0, this.j.length, this.s, this.i, !0, a, c, d, e)
+    };
+    l.rl = function() {
+        return Ak(this.j, 0, this.j.length, this.s)
+    };
+    l.K = function() {
+        return Mk(this.j, 0, this.j.length, this.s)
+    };
+    l.xc = function(a) {
+        var c = [];
+        c.length = Ok(this.j, 0, this.j.length, this.s, a, c, 0);
+        a = new Qk(null);
+        Rk(a, "XY", c);
+        return a
+    };
+    l.M = function() {
+        return "LinearRing"
+    };
+    l.W = function(a, c) {
+        null === a ? Rk(this, "XY", null) : (zk(this, c, a, 1), null === this.j && (this.j = []), this.j.length = Kk(this.j, 0, a, this.s), this.k())
+    };
+
+    function Rk(a, c, d) {
+        yk(a, c, d);
+        a.k()
+    };
+
+    function E(a, c) {
+        wk.call(this);
+        this.W(a, c)
+    }
+    w(E, wk);
+    l = E.prototype;
+    l.clone = function() {
+        var a = new E(null);
+        Sk(a, this.a, this.j.slice());
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        var f = this.j;
+        a = Dk(a, c, f[0], f[1]);
+        if (a < e) {
+            e = this.s;
+            for (c = 0; c < e; ++c) d[c] = f[c];
+            d.length = e;
+            return a
+        }
+        return e
+    };
+    l.K = function() {
+        return null === this.j ? [] : this.j.slice()
+    };
+    l.wd = function(a) {
+        return Ud(this.j, a)
+    };
+    l.M = function() {
+        return "Point"
+    };
+    l.ra = function(a) {
+        return Sd(a, this.j[0], this.j[1])
+    };
+    l.W = function(a, c) {
+        null === a ? Sk(this, "XY", null) : (zk(this, c, a, 0), null === this.j && (this.j = []), this.j.length = Jk(this.j, a), this.k())
+    };
+
+    function Sk(a, c, d) {
+        yk(a, c, d);
+        a.k()
+    };
+
+    function Tk(a, c, d, e, f) {
+        return !Yd(f, function(f) {
+            return !Uk(a, c, d, e, f[0], f[1])
+        })
+    }
+
+    function Uk(a, c, d, e, f, g) {
+        for (var h = !1, k = a[d - e], n = a[d - e + 1]; c < d; c += e) {
+            var p = a[c],
+                q = a[c + 1];
+            n > g != q > g && f < (p - k) * (g - n) / (q - n) + k && (h = !h);
+            k = p;
+            n = q
+        }
+        return h
+    }
+
+    function Vk(a, c, d, e, f, g) {
+        if (0 === d.length || !Uk(a, c, d[0], e, f, g)) return !1;
+        var h;
+        c = 1;
+        for (h = d.length; c < h; ++c)
+            if (Uk(a, d[c - 1], d[c], e, f, g)) return !1;
+        return !0
+    };
+
+    function Wk(a, c, d, e, f, g, h) {
+        var k, n, p, q, r, t = f[g + 1],
+            u = [],
+            A = d[0];
+        p = a[A - e];
+        r = a[A - e + 1];
+        for (k = c; k < A; k += e) {
+            q = a[k];
+            n = a[k + 1];
+            if (t <= r && n <= t || r <= t && t <= n) p = (t - r) / (n - r) * (q - p) + p, u.push(p);
+            p = q;
+            r = n
+        }
+        A = NaN;
+        r = -Infinity;
+        u.sort();
+        p = u[0];
+        k = 1;
+        for (n = u.length; k < n; ++k) {
+            q = u[k];
+            var z = Math.abs(q - p);
+            z > r && (p = (p + q) / 2, Vk(a, c, d, e, p, t) && (A = p, r = z));
+            p = q
+        }
+        isNaN(A) && (A = f[g]);
+        return m(h) ? (h.push(A, t), h) : [A, t]
+    };
+
+    function Xk(a, c, d, e, f, g) {
+        for (var h = [a[c], a[c + 1]], k = [], n; c + e < d; c += e) {
+            k[0] = a[c + e];
+            k[1] = a[c + e + 1];
+            if (n = f.call(g, h, k)) return n;
+            h[0] = k[0];
+            h[1] = k[1]
+        }
+        return !1
+    };
+
+    function Yk(a, c, d, e, f) {
+        var g = Xd(Kd(), a, c, d, e);
+        return he(f, g) ? Rd(f, g) || g[0] >= f[0] && g[2] <= f[2] || g[1] >= f[1] && g[3] <= f[3] ? !0 : Xk(a, c, d, e, function(a, c) {
+            var d = !1,
+                e = Td(f, a),
+                g = Td(f, c);
+            if (1 === e || 1 === g) d = !0;
+            else {
+                var r = f[0],
+                    t = f[1],
+                    u = f[2],
+                    A = f[3],
+                    z = c[0],
+                    D = c[1],
+                    B = (D - a[1]) / (z - a[0]);
+                g & 2 && !(e & 2) && (d = z - (D - A) / B, d = d >= r && d <= u);
+                d || !(g & 4) || e & 4 || (d = D - (z - u) * B, d = d >= t && d <= A);
+                d || !(g & 8) || e & 8 || (d = z - (D - t) / B, d = d >= r && d <= u);
+                d || !(g & 16) || e & 16 || (d = D - (z - r) * B, d = d >= t && d <= A)
+            }
+            return d
+        }) : !1
+    }
+
+    function Zk(a, c, d, e, f) {
+        var g = d[0];
+        if (!(Yk(a, c, g, e, f) || Uk(a, c, g, e, f[0], f[1]) || Uk(a, c, g, e, f[0], f[3]) || Uk(a, c, g, e, f[2], f[1]) || Uk(a, c, g, e, f[2], f[3]))) return !1;
+        if (1 === d.length) return !0;
+        c = 1;
+        for (g = d.length; c < g; ++c)
+            if (Tk(a, d[c - 1], d[c], e, f)) return !1;
+        return !0
+    };
+
+    function $k(a, c, d, e) {
+        for (var f = 0, g = a[d - e], h = a[d - e + 1]; c < d; c += e) var k = a[c],
+            n = a[c + 1],
+            f = f + (k - g) * (n + h),
+            g = k,
+            h = n;
+        return 0 < f
+    }
+
+    function al(a, c, d, e) {
+        var f = 0;
+        e = m(e) ? e : !1;
+        var g, h;
+        g = 0;
+        for (h = c.length; g < h; ++g) {
+            var k = c[g],
+                f = $k(a, f, k, d);
+            if (0 === g) {
+                if (e && f || !e && !f) return !1
+            } else if (e && !f || !e && f) return !1;
+            f = k
+        }
+        return !0
+    }
+
+    function bl(a, c, d, e, f) {
+        f = m(f) ? f : !1;
+        var g, h;
+        g = 0;
+        for (h = d.length; g < h; ++g) {
+            var k = d[g],
+                n = $k(a, c, k, e);
+            if (0 === g ? f && n || !f && !n : f && !n || !f && n)
+                for (var n = a, p = k, q = e; c < p - q;) {
+                    var r;
+                    for (r = 0; r < q; ++r) {
+                        var t = n[c + r];
+                        n[c + r] = n[p - q + r];
+                        n[p - q + r] = t
+                    }
+                    c += q;
+                    p -= q
+                }
+            c = k
+        }
+        return c
+    }
+
+    function cl(a, c, d, e) {
+        var f = 0,
+            g, h;
+        g = 0;
+        for (h = c.length; g < h; ++g) f = bl(a, f, c[g], d, e);
+        return f
+    };
+
+    function F(a, c) {
+        wk.call(this);
+        this.c = [];
+        this.p = -1;
+        this.H = null;
+        this.N = this.J = this.L = -1;
+        this.i = null;
+        this.W(a, c)
+    }
+    w(F, wk);
+    l = F.prototype;
+    l.wi = function(a) {
+        null === this.j ? this.j = a.j.slice() : db(this.j, a.j);
+        this.c.push(this.j.length);
+        this.k()
+    };
+    l.clone = function() {
+        var a = new F(null);
+        dl(a, this.a, this.j.slice(), this.c.slice());
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        if (e < Qd(this.G(), a, c)) return e;
+        this.J != this.b && (this.L = Math.sqrt(Gk(this.j, 0, this.c, this.s, 0)), this.J = this.b);
+        return Ik(this.j, 0, this.c, this.s, this.L, !0, a, c, d, e)
+    };
+    l.Jb = function(a, c) {
+        return Vk(el(this), 0, this.c, this.s, a, c)
+    };
+    l.ul = function() {
+        return Bk(el(this), 0, this.c, this.s)
+    };
+    l.K = function(a) {
+        var c;
+        m(a) ? (c = el(this).slice(), bl(c, 0, this.c, this.s, a)) : c = this.j;
+        return Nk(c, 0, this.c, this.s)
+    };
+
+    function fl(a) {
+        if (a.p != a.b) {
+            var c = ce(a.G());
+            a.H = Wk(el(a), 0, a.c, a.s, c, 0);
+            a.p = a.b
+        }
+        return a.H
+    }
+    l.cj = function() {
+        return new E(fl(this))
+    };
+    l.ij = function() {
+        return this.c.length
+    };
+    l.hj = function(a) {
+        if (0 > a || this.c.length <= a) return null;
+        var c = new Qk(null);
+        Rk(c, this.a, this.j.slice(0 === a ? 0 : this.c[a - 1], this.c[a]));
+        return c
+    };
+    l.Ed = function() {
+        var a = this.a,
+            c = this.j,
+            d = this.c,
+            e = [],
+            f = 0,
+            g, h;
+        g = 0;
+        for (h = d.length; g < h; ++g) {
+            var k = d[g],
+                n = new Qk(null);
+            Rk(n, a, c.slice(f, k));
+            e.push(n);
+            f = k
+        }
+        return e
+    };
+
+    function el(a) {
+        if (a.N != a.b) {
+            var c = a.j;
+            al(c, a.c, a.s) ? a.i = c : (a.i = c.slice(), a.i.length = bl(a.i, 0, a.c, a.s));
+            a.N = a.b
+        }
+        return a.i
+    }
+    l.xc = function(a) {
+        var c = [],
+            d = [];
+        c.length = Pk(this.j, 0, this.c, this.s, Math.sqrt(a), c, 0, d);
+        a = new F(null);
+        dl(a, "XY", c, d);
+        return a
+    };
+    l.M = function() {
+        return "Polygon"
+    };
+    l.ra = function(a) {
+        return Zk(el(this), 0, this.c, this.s, a)
+    };
+    l.W = function(a, c) {
+        if (null === a) dl(this, "XY", null, this.c);
+        else {
+            zk(this, c, a, 2);
+            null === this.j && (this.j = []);
+            var d = Lk(this.j, 0, a, this.s, this.c);
+            this.j.length = 0 === d.length ? 0 : d[d.length - 1];
+            this.k()
+        }
+    };
+
+    function dl(a, c, d, e) {
+        yk(a, c, d);
+        a.c = e;
+        a.k()
+    }
+
+    function gl(a, c, d, e) {
+        var f = m(e) ? e : 32;
+        e = [];
+        var g;
+        for (g = 0; g < f; ++g) db(e, a.offset(c, d, 2 * Math.PI * g / f));
+        e.push(e[0], e[1]);
+        a = new F(null);
+        dl(a, "XY", e, [e.length]);
+        return a
+    };
+
+    function hl() {};
+
+    function il(a, c, d, e, f, g, h) {
+        rc.call(this, a, c);
+        this.vectorContext = d;
+        this.b = e;
+        this.frameState = f;
+        this.context = g;
+        this.glContext = h
+    }
+    w(il, rc);
+
+    function jl(a) {
+        this.c = this.a = this.e = this.d = this.b = null;
+        this.f = a
+    }
+    w(jl, mc);
+
+    function kl(a) {
+        var c = a.e,
+            d = a.a;
+        a = Ua([c, [c[0], d[1]], d, [d[0], c[1]]], a.b.ka, a.b);
+        a[4] = a[0].slice();
+        return new F([a])
+    }
+    jl.prototype.O = function() {
+        this.setMap(null)
+    };
+    jl.prototype.g = function(a) {
+        var c = this.c,
+            d = this.f;
+        a.vectorContext.tc(Infinity, function(a) {
+            a.Aa(d.e, d.c);
+            a.Ba(d.a);
+            a.Rb(c, null)
+        })
+    };
+    jl.prototype.Q = function() {
+        return this.c
+    };
+
+    function ll(a) {
+        null === a.b || null === a.e || null === a.a || a.b.render()
+    }
+    jl.prototype.setMap = function(a) {
+        null !== this.d && (Wc(this.d), this.d = null, this.b.render(), this.b = null);
+        this.b = a;
+        null !== this.b && (this.d = x(a, "postcompose", this.g, !1, this), ll(this))
+    };
+
+    function ml(a, c) {
+        rc.call(this, a);
+        this.coordinate = c
+    }
+    w(ml, rc);
+
+    function nl(a) {
+        jk.call(this, {
+            handleDownEvent: pl,
+            handleDragEvent: ql,
+            handleUpEvent: rl
+        });
+        a = m(a) ? a : {};
+        this.f = new jl(m(a.style) ? a.style : null);
+        this.a = null;
+        this.i = m(a.condition) ? a.condition : Gg
+    }
+    w(nl, jk);
+
+    function ql(a) {
+        if (ik(a)) {
+            var c = this.f;
+            a = a.pixel;
+            c.e = this.a;
+            c.a = a;
+            c.c = kl(c);
+            ll(c)
+        }
+    }
+    nl.prototype.Q = function() {
+        return this.f.Q()
+    };
+    nl.prototype.g = ca;
+
+    function rl(a) {
+        if (!ik(a)) return !0;
+        this.f.setMap(null);
+        var c = a.pixel[0] - this.a[0],
+            d = a.pixel[1] - this.a[1];
+        64 <= c * c + d * d && (this.g(a), this.dispatchEvent(new ml("boxend", a.coordinate)));
+        return !1
+    }
+
+    function pl(a) {
+        if (ik(a) && zc(a.b) && this.i(a)) {
+            this.a = a.pixel;
+            this.f.setMap(a.map);
+            var c = this.f,
+                d = this.a;
+            c.e = this.a;
+            c.a = d;
+            c.c = kl(c);
+            ll(c);
+            this.dispatchEvent(new ml("boxstart", a.coordinate));
+            return !0
+        }
+        return !1
+    };
+
+    function sl() {
+        this.a = -1
+    };
+
+    function tl() {
+        this.a = -1;
+        this.a = 64;
+        this.b = Array(4);
+        this.e = Array(this.a);
+        this.d = this.c = 0;
+        this.b[0] = 1732584193;
+        this.b[1] = 4023233417;
+        this.b[2] = 2562383102;
+        this.b[3] = 271733878;
+        this.d = this.c = 0
+    }
+    w(tl, sl);
+
+    function ul(a, c, d) {
+        d || (d = 0);
+        var e = Array(16);
+        if (ia(c))
+            for (var f = 0; 16 > f; ++f) e[f] = c.charCodeAt(d++) | c.charCodeAt(d++) << 8 | c.charCodeAt(d++) << 16 | c.charCodeAt(d++) << 24;
+        else
+            for (f = 0; 16 > f; ++f) e[f] = c[d++] | c[d++] << 8 | c[d++] << 16 | c[d++] << 24;
+        c = a.b[0];
+        d = a.b[1];
+        var f = a.b[2],
+            g = a.b[3],
+            h = 0,
+            h = c + (g ^ d & (f ^ g)) + e[0] + 3614090360 & 4294967295;
+        c = d + (h << 7 & 4294967295 | h >>> 25);
+        h = g + (f ^ c & (d ^ f)) + e[1] + 3905402710 & 4294967295;
+        g = c + (h << 12 & 4294967295 | h >>> 20);
+        h = f + (d ^ g & (c ^ d)) + e[2] + 606105819 & 4294967295;
+        f = g + (h << 17 & 4294967295 | h >>> 15);
+        h = d + (c ^ f & (g ^ c)) + e[3] + 3250441966 & 4294967295;
+        d = f + (h << 22 & 4294967295 | h >>> 10);
+        h = c + (g ^ d & (f ^ g)) + e[4] + 4118548399 & 4294967295;
+        c = d + (h << 7 & 4294967295 | h >>> 25);
+        h = g + (f ^ c & (d ^ f)) + e[5] + 1200080426 & 4294967295;
+        g = c + (h << 12 & 4294967295 | h >>> 20);
+        h = f + (d ^ g & (c ^ d)) + e[6] + 2821735955 & 4294967295;
+        f = g + (h << 17 & 4294967295 | h >>> 15);
+        h = d + (c ^ f & (g ^ c)) + e[7] + 4249261313 & 4294967295;
+        d = f + (h << 22 & 4294967295 | h >>> 10);
+        h = c + (g ^ d & (f ^ g)) + e[8] + 1770035416 & 4294967295;
+        c = d + (h << 7 & 4294967295 | h >>> 25);
+        h = g + (f ^ c & (d ^ f)) + e[9] + 2336552879 & 4294967295;
+        g = c + (h << 12 & 4294967295 | h >>> 20);
+        h = f + (d ^ g & (c ^ d)) + e[10] + 4294925233 & 4294967295;
+        f = g + (h << 17 & 4294967295 | h >>> 15);
+        h = d + (c ^ f & (g ^ c)) + e[11] + 2304563134 & 4294967295;
+        d = f + (h << 22 & 4294967295 | h >>> 10);
+        h = c + (g ^ d & (f ^ g)) + e[12] + 1804603682 & 4294967295;
+        c = d + (h << 7 & 4294967295 | h >>> 25);
+        h = g + (f ^ c & (d ^ f)) + e[13] + 4254626195 & 4294967295;
+        g = c + (h << 12 & 4294967295 | h >>> 20);
+        h = f + (d ^ g & (c ^ d)) + e[14] + 2792965006 & 4294967295;
+        f = g + (h << 17 & 4294967295 | h >>> 15);
+        h = d + (c ^ f & (g ^ c)) + e[15] + 1236535329 & 4294967295;
+        d = f + (h << 22 & 4294967295 | h >>> 10);
+        h = c + (f ^ g & (d ^ f)) + e[1] + 4129170786 & 4294967295;
+        c = d + (h << 5 & 4294967295 | h >>> 27);
+        h = g + (d ^ f & (c ^ d)) + e[6] + 3225465664 & 4294967295;
+        g = c + (h << 9 & 4294967295 | h >>> 23);
+        h = f + (c ^ d & (g ^ c)) + e[11] + 643717713 & 4294967295;
+        f = g + (h << 14 & 4294967295 | h >>> 18);
+        h = d + (g ^ c & (f ^ g)) + e[0] + 3921069994 & 4294967295;
+        d = f + (h << 20 & 4294967295 | h >>> 12);
+        h = c + (f ^ g & (d ^ f)) + e[5] + 3593408605 & 4294967295;
+        c = d + (h << 5 & 4294967295 | h >>> 27);
+        h = g + (d ^ f & (c ^ d)) + e[10] + 38016083 & 4294967295;
+        g = c + (h << 9 & 4294967295 | h >>> 23);
+        h = f + (c ^ d & (g ^ c)) + e[15] + 3634488961 & 4294967295;
+        f = g + (h << 14 & 4294967295 | h >>> 18);
+        h = d + (g ^ c & (f ^ g)) + e[4] + 3889429448 & 4294967295;
+        d = f + (h << 20 & 4294967295 | h >>> 12);
+        h = c + (f ^ g & (d ^ f)) + e[9] + 568446438 & 4294967295;
+        c = d + (h << 5 & 4294967295 | h >>> 27);
+        h = g + (d ^ f & (c ^ d)) + e[14] + 3275163606 & 4294967295;
+        g = c + (h << 9 & 4294967295 | h >>> 23);
+        h = f + (c ^ d & (g ^ c)) + e[3] + 4107603335 & 4294967295;
+        f = g + (h << 14 & 4294967295 | h >>> 18);
+        h = d + (g ^ c & (f ^ g)) + e[8] + 1163531501 & 4294967295;
+        d = f + (h << 20 & 4294967295 | h >>> 12);
+        h = c + (f ^ g & (d ^ f)) + e[13] + 2850285829 & 4294967295;
+        c = d + (h << 5 & 4294967295 | h >>> 27);
+        h = g + (d ^ f & (c ^ d)) + e[2] + 4243563512 & 4294967295;
+        g = c + (h << 9 & 4294967295 | h >>> 23);
+        h = f + (c ^ d & (g ^ c)) + e[7] + 1735328473 & 4294967295;
+        f = g + (h << 14 & 4294967295 | h >>> 18);
+        h = d + (g ^ c & (f ^ g)) + e[12] + 2368359562 & 4294967295;
+        d = f + (h << 20 & 4294967295 | h >>> 12);
+        h = c + (d ^ f ^ g) + e[5] + 4294588738 & 4294967295;
+        c = d + (h << 4 & 4294967295 | h >>> 28);
+        h = g + (c ^ d ^ f) + e[8] + 2272392833 & 4294967295;
+        g = c + (h << 11 & 4294967295 | h >>> 21);
+        h = f + (g ^ c ^ d) + e[11] + 1839030562 & 4294967295;
+        f = g + (h << 16 & 4294967295 | h >>> 16);
+        h = d + (f ^ g ^ c) + e[14] + 4259657740 & 4294967295;
+        d = f + (h << 23 & 4294967295 | h >>> 9);
+        h = c + (d ^ f ^ g) + e[1] + 2763975236 & 4294967295;
+        c = d + (h << 4 & 4294967295 | h >>> 28);
+        h = g + (c ^ d ^ f) + e[4] + 1272893353 & 4294967295;
+        g = c + (h << 11 & 4294967295 | h >>> 21);
+        h = f + (g ^ c ^ d) + e[7] + 4139469664 & 4294967295;
+        f = g + (h << 16 & 4294967295 | h >>> 16);
+        h = d + (f ^ g ^ c) + e[10] + 3200236656 & 4294967295;
+        d = f + (h << 23 & 4294967295 | h >>> 9);
+        h = c + (d ^ f ^ g) + e[13] + 681279174 & 4294967295;
+        c = d + (h << 4 & 4294967295 | h >>> 28);
+        h = g + (c ^ d ^ f) + e[0] + 3936430074 & 4294967295;
+        g = c + (h << 11 & 4294967295 | h >>> 21);
+        h = f + (g ^ c ^ d) + e[3] + 3572445317 & 4294967295;
+        f = g + (h << 16 & 4294967295 | h >>> 16);
+        h = d + (f ^ g ^ c) + e[6] + 76029189 & 4294967295;
+        d = f + (h << 23 & 4294967295 | h >>> 9);
+        h = c + (d ^ f ^ g) + e[9] + 3654602809 & 4294967295;
+        c = d + (h << 4 & 4294967295 | h >>> 28);
+        h = g + (c ^ d ^ f) + e[12] + 3873151461 & 4294967295;
+        g = c + (h << 11 & 4294967295 | h >>> 21);
+        h = f + (g ^ c ^ d) + e[15] + 530742520 & 4294967295;
+        f = g + (h << 16 & 4294967295 | h >>> 16);
+        h = d + (f ^ g ^ c) + e[2] + 3299628645 & 4294967295;
+        d = f + (h << 23 & 4294967295 | h >>> 9);
+        h = c + (f ^ (d | ~g)) + e[0] + 4096336452 & 4294967295;
+        c = d + (h << 6 & 4294967295 | h >>> 26);
+        h = g + (d ^ (c | ~f)) + e[7] + 1126891415 & 4294967295;
+        g = c + (h << 10 & 4294967295 | h >>> 22);
+        h = f + (c ^ (g | ~d)) + e[14] + 2878612391 & 4294967295;
+        f = g + (h << 15 & 4294967295 | h >>> 17);
+        h = d + (g ^ (f | ~c)) + e[5] + 4237533241 & 4294967295;
+        d = f + (h << 21 & 4294967295 | h >>> 11);
+        h = c + (f ^ (d | ~g)) + e[12] + 1700485571 & 4294967295;
+        c = d + (h << 6 & 4294967295 | h >>> 26);
+        h = g + (d ^ (c | ~f)) + e[3] + 2399980690 & 4294967295;
+        g = c + (h << 10 & 4294967295 | h >>> 22);
+        h = f + (c ^ (g | ~d)) + e[10] + 4293915773 & 4294967295;
+        f = g + (h << 15 & 4294967295 | h >>> 17);
+        h = d + (g ^ (f | ~c)) + e[1] + 2240044497 & 4294967295;
+        d = f + (h << 21 & 4294967295 | h >>> 11);
+        h = c + (f ^ (d | ~g)) + e[8] + 1873313359 & 4294967295;
+        c = d + (h << 6 & 4294967295 | h >>> 26);
+        h = g + (d ^ (c | ~f)) + e[15] + 4264355552 & 4294967295;
+        g = c + (h << 10 & 4294967295 | h >>> 22);
+        h = f + (c ^ (g | ~d)) + e[6] + 2734768916 & 4294967295;
+        f = g + (h << 15 & 4294967295 | h >>> 17);
+        h = d + (g ^ (f | ~c)) + e[13] + 1309151649 & 4294967295;
+        d = f + (h << 21 & 4294967295 | h >>> 11);
+        h = c + (f ^ (d | ~g)) + e[4] + 4149444226 & 4294967295;
+        c = d + (h << 6 & 4294967295 | h >>> 26);
+        h = g + (d ^ (c | ~f)) + e[11] + 3174756917 & 4294967295;
+        g = c + (h << 10 & 4294967295 | h >>> 22);
+        h = f + (c ^ (g | ~d)) + e[2] + 718787259 & 4294967295;
+        f = g + (h << 15 & 4294967295 | h >>> 17);
+        h = d + (g ^ (f | ~c)) + e[9] + 3951481745 & 4294967295;
+        a.b[0] = a.b[0] + c & 4294967295;
+        a.b[1] = a.b[1] + (f + (h << 21 & 4294967295 | h >>> 11)) & 4294967295;
+        a.b[2] = a.b[2] + f & 4294967295;
+        a.b[3] = a.b[3] + g & 4294967295
+    }
+    tl.prototype.update = function(a, c) {
+        m(c) || (c = a.length);
+        for (var d = c - this.a, e = this.e, f = this.c, g = 0; g < c;) {
+            if (0 == f)
+                for (; g <= d;) ul(this, a, g), g += this.a;
+            if (ia(a))
+                for (; g < c;) {
+                    if (e[f++] = a.charCodeAt(g++), f == this.a) {
+                        ul(this, e);
+                        f = 0;
+                        break
+                    }
+                } else
+                    for (; g < c;)
+                        if (e[f++] = a[g++], f == this.a) {
+                            ul(this, e);
+                            f = 0;
+                            break
+                        }
+        }
+        this.c = f;
+        this.d += c
+    };
+
+    function vl(a) {
+        a = m(a) ? a : {};
+        this.b = m(a.color) ? a.color : null;
+        this.d = a.lineCap;
+        this.c = m(a.lineDash) ? a.lineDash : null;
+        this.e = a.lineJoin;
+        this.f = a.miterLimit;
+        this.a = a.width;
+        this.g = void 0
+    }
+    l = vl.prototype;
+    l.Hm = function() {
+        return this.b
+    };
+    l.ej = function() {
+        return this.d
+    };
+    l.Im = function() {
+        return this.c
+    };
+    l.fj = function() {
+        return this.e
+    };
+    l.lj = function() {
+        return this.f
+    };
+    l.Jm = function() {
+        return this.a
+    };
+    l.Km = function(a) {
+        this.b = a;
+        this.g = void 0
+    };
+    l.Zn = function(a) {
+        this.d = a;
+        this.g = void 0
+    };
+    l.Lm = function(a) {
+        this.c = a;
+        this.g = void 0
+    };
+    l.$n = function(a) {
+        this.e = a;
+        this.g = void 0
+    };
+    l.ao = function(a) {
+        this.f = a;
+        this.g = void 0
+    };
+    l.ko = function(a) {
+        this.a = a;
+        this.g = void 0
+    };
+    l.nb = function() {
+        if (!m(this.g)) {
+            var a = "s" + (null === this.b ? "-" : vf(this.b)) + "," + (m(this.d) ? this.d.toString() : "-") + "," + (null === this.c ? "-" : this.c.toString()) + "," + (m(this.e) ? this.e : "-") + "," + (m(this.f) ? this.f.toString() : "-") + "," + (m(this.a) ? this.a.toString() : "-"),
+                c = new tl;
+            c.update(a);
+            var d = Array((56 > c.c ? c.a : 2 * c.a) - c.c);
+            d[0] = 128;
+            for (a = 1; a < d.length - 8; ++a) d[a] = 0;
+            for (var e = 8 * c.d, a = d.length - 8; a < d.length; ++a) d[a] = e & 255, e /= 256;
+            c.update(d);
+            d = Array(16);
+            for (a = e = 0; 4 > a; ++a)
+                for (var f = 0; 32 > f; f += 8) d[e++] = c.b[a] >>> f & 255;
+            if (8192 > d.length) c = String.fromCharCode.apply(null, d);
+            else
+                for (c = "", a = 0; a < d.length; a += 8192) c += String.fromCharCode.apply(null, fb(d, a, a + 8192));
+            this.g = c
+        }
+        return this.g
+    };
+    var wl = [0, 0, 0, 1],
+        xl = [],
+        yl = [0, 0, 0, 1];
+
+    function zl(a) {
+        a = m(a) ? a : {};
+        this.b = m(a.color) ? a.color : null;
+        this.a = void 0
+    }
+    zl.prototype.c = function() {
+        return this.b
+    };
+    zl.prototype.d = function(a) {
+        this.b = a;
+        this.a = void 0
+    };
+    zl.prototype.nb = function() {
+        m(this.a) || (this.a = "f" + (null === this.b ? "-" : vf(this.b)));
+        return this.a
+    };
+
+    function Al(a) {
+        a = m(a) ? a : {};
+        this.f = this.b = this.e = null;
+        this.d = m(a.fill) ? a.fill : null;
+        this.a = m(a.stroke) ? a.stroke : null;
+        this.c = a.radius;
+        this.o = [0, 0];
+        this.i = this.p = this.g = null;
+        var c = a.atlasManager,
+            d, e = null,
+            f, g = 0;
+        null !== this.a && (f = vf(this.a.b), g = this.a.a, m(g) || (g = 1), e = this.a.c, ki || (e = null));
+        var h = 2 * (this.c + g) + 1;
+        f = {
+            strokeStyle: f,
+            md: g,
+            size: h,
+            lineDash: e
+        };
+        m(c) ? (h = Math.round(h), (e = null === this.d) && (d = ra(this.Rg, this, f)), g = this.nb(), f = c.add(g, h, h, ra(this.Sg, this, f), d), this.b = f.image, this.o = [f.offsetX, f.offsetY], d = f.image.width, this.f = e ? f.ig : this.b) : (this.b = Mf("CANVAS"), this.b.height = h, this.b.width = h, d = h = this.b.width, c = this.b.getContext("2d"), this.Sg(f, c, 0, 0), null === this.d ? (c = this.f = Mf("CANVAS"), c.height = f.size, c.width = f.size, c = c.getContext("2d"), this.Rg(f, c, 0, 0)) : this.f = this.b);
+        this.g = [h / 2, h / 2];
+        this.p = [h, h];
+        this.i = [d, d];
+        Ej.call(this, {
+            opacity: 1,
+            rotateWithView: !1,
+            rotation: 0,
+            scale: 1,
+            snapToPixel: m(a.snapToPixel) ? a.snapToPixel : !0
+        })
+    }
+    w(Al, Ej);
+    l = Al.prototype;
+    l.mb = function() {
+        return this.g
+    };
+    l.ym = function() {
+        return this.d
+    };
+    l.he = function() {
+        return this.f
+    };
+    l.Lb = function() {
+        return this.b
+    };
+    l.gd = function() {
+        return 2
+    };
+    l.Dd = function() {
+        return this.i
+    };
+    l.rb = function() {
+        return this.o
+    };
+    l.zm = function() {
+        return this.c
+    };
+    l.Xa = function() {
+        return this.p
+    };
+    l.Am = function() {
+        return this.a
+    };
+    l.$e = ca;
+    l.load = ca;
+    l.xf = ca;
+    l.Sg = function(a, c, d, e) {
+        c.setTransform(1, 0, 0, 1, 0, 0);
+        c.translate(d, e);
+        c.beginPath();
+        c.arc(a.size / 2, a.size / 2, this.c, 0, 2 * Math.PI, !0);
+        null !== this.d && (c.fillStyle = vf(this.d.b), c.fill());
+        null !== this.a && (c.strokeStyle = a.strokeStyle, c.lineWidth = a.md, null === a.lineDash || c.setLineDash(a.lineDash), c.stroke());
+        c.closePath()
+    };
+    l.Rg = function(a, c, d, e) {
+        c.setTransform(1, 0, 0, 1, 0, 0);
+        c.translate(d, e);
+        c.beginPath();
+        c.arc(a.size / 2, a.size / 2, this.c, 0, 2 * Math.PI, !0);
+        c.fillStyle = wl;
+        c.fill();
+        null !== this.a && (c.strokeStyle = a.strokeStyle, c.lineWidth = a.md, null === a.lineDash || c.setLineDash(a.lineDash), c.stroke());
+        c.closePath()
+    };
+    l.nb = function() {
+        var a = null === this.a ? "-" : this.a.nb(),
+            c = null === this.d ? "-" : this.d.nb();
+        if (null === this.e || a != this.e[1] || c != this.e[2] || this.c != this.e[3]) this.e = ["c" + a + c + (m(this.c) ? this.c.toString() : "-"), a, c, this.c];
+        return this.e[0]
+    };
+
+    function Bl(a) {
+        a = m(a) ? a : {};
+        this.g = null;
+        this.d = Cl;
+        m(a.geometry) && this.Vg(a.geometry);
+        this.e = m(a.fill) ? a.fill : null;
+        this.f = m(a.image) ? a.image : null;
+        this.c = m(a.stroke) ? a.stroke : null;
+        this.a = m(a.text) ? a.text : null;
+        this.b = a.zIndex
+    }
+    l = Bl.prototype;
+    l.Q = function() {
+        return this.g
+    };
+    l.Zi = function() {
+        return this.d
+    };
+    l.Mm = function() {
+        return this.e
+    };
+    l.Nm = function() {
+        return this.f
+    };
+    l.Om = function() {
+        return this.c
+    };
+    l.Pm = function() {
+        return this.a
+    };
+    l.Dj = function() {
+        return this.b
+    };
+    l.Vg = function(a) {
+        ka(a) ? this.d = a : ia(a) ? this.d = function(c) {
+            return c.get(a)
+        } : null === a ? this.d = Cl : m(a) && (this.d = function() {
+            return a
+        });
+        this.g = a
+    };
+    l.mo = function(a) {
+        this.b = a
+    };
+
+    function Dl(a) {
+        ka(a) || (a = ga(a) ? a : [a], a = Eg(a));
+        return a
+    }
+
+    function El() {
+        var a = new zl({
+                color: "rgba(255,255,255,0.4)"
+            }),
+            c = new vl({
+                color: "#3399CC",
+                width: 1.25
+            }),
+            d = [new Bl({
+                image: new Al({
+                    fill: a,
+                    stroke: c,
+                    radius: 5
+                }),
+                fill: a,
+                stroke: c
+            })];
+        El = function() {
+            return d
+        };
+        return d
+    }
+
+    function Fl() {
+        var a = {},
+            c = [255, 255, 255, 1],
+            d = [0, 153, 255, 1];
+        a.Polygon = [new Bl({
+            fill: new zl({
+                color: [255, 255, 255, .5]
+            })
+        })];
+        a.MultiPolygon = a.Polygon;
+        a.LineString = [new Bl({
+            stroke: new vl({
+                color: c,
+                width: 5
+            })
+        }), new Bl({
+            stroke: new vl({
+                color: d,
+                width: 3
+            })
+        })];
+        a.MultiLineString = a.LineString;
+        a.Circle = a.Polygon.concat(a.LineString);
+        a.Point = [new Bl({
+            image: new Al({
+                radius: 6,
+                fill: new zl({
+                    color: d
+                }),
+                stroke: new vl({
+                    color: c,
+                    width: 1.5
+                })
+            }),
+            zIndex: Infinity
+        })];
+        a.MultiPoint = a.Point;
+        a.GeometryCollection = a.Polygon.concat(a.Point);
+        return a
+    }
+
+    function Cl(a) {
+        return a.Q()
+    };
+
+    function Gl(a) {
+        var c = m(a) ? a : {};
+        a = m(c.condition) ? c.condition : gk;
+        this.n = m(c.duration) ? c.duration : 200;
+        c = m(c.style) ? c.style : new Bl({
+            stroke: new vl({
+                color: [0, 0, 255, 1]
+            })
+        });
+        nl.call(this, {
+            condition: a,
+            style: c
+        })
+    }
+    w(Gl, nl);
+    Gl.prototype.g = function() {
+        var a = this.l,
+            c = a.R(),
+            d = this.Q().G(),
+            e = ce(d),
+            f = a.xa(),
+            d = Oe(d, f),
+            f = this.n,
+            d = c.constrainResolution(d, 0, void 0);
+        Zj(a, c, d, e, f)
+    };
+
+    function Hl(a) {
+        Wj.call(this, {
+            handleEvent: Il
+        });
+        a = m(a) ? a : {};
+        this.a = m(a.condition) ? a.condition : Lg(fk, hk);
+        this.e = m(a.duration) ? a.duration : 100;
+        this.f = m(a.pixelDelta) ? a.pixelDelta : 128
+    }
+    w(Hl, Wj);
+
+    function Il(a) {
+        var c = !1;
+        if ("key" == a.type) {
+            var d = a.b.e;
+            if (this.a(a) && (40 == d || 37 == d || 39 == d || 38 == d)) {
+                var e = a.map,
+                    c = e.R(),
+                    f = Se(c),
+                    g = f.resolution * this.f,
+                    h = 0,
+                    k = 0;
+                40 == d ? k = -g : 37 == d ? h = -g : 39 == d ? h = g : k = g;
+                d = [h, k];
+                rd(d, f.rotation);
+                f = this.e;
+                g = c.Ca();
+                m(g) && (m(f) && 0 < f && e.Ha(Ze({
+                    source: g,
+                    duration: f,
+                    easing: Xe
+                })), e = c.xd([g[0] + d[0], g[1] + d[1]]), c.Na(e));
+                a.preventDefault();
+                c = !0
+            }
+        }
+        return !c
+    };
+
+    function Jl(a) {
+        Wj.call(this, {
+            handleEvent: Kl
+        });
+        a = m(a) ? a : {};
+        this.e = m(a.condition) ? a.condition : hk;
+        this.a = m(a.delta) ? a.delta : 1;
+        this.f = m(a.duration) ? a.duration : 100
+    }
+    w(Jl, Wj);
+
+    function Kl(a) {
+        var c = !1;
+        if ("key" == a.type) {
+            var d = a.b.q;
+            if (this.e(a) && (43 == d || 45 == d)) {
+                c = a.map;
+                d = 43 == d ? this.a : -this.a;
+                c.render();
+                var e = c.R();
+                Yj(c, e, d, void 0, this.f);
+                a.preventDefault();
+                c = !0
+            }
+        }
+        return !c
+    };
+
+    function Ll(a) {
+        Wj.call(this, {
+            handleEvent: Ml
+        });
+        a = m(a) ? a : {};
+        this.a = 0;
+        this.o = m(a.duration) ? a.duration : 250;
+        this.f = null;
+        this.g = this.e = void 0
+    }
+    w(Ll, Wj);
+
+    function Ml(a) {
+        var c = !1;
+        if ("mousewheel" == a.type) {
+            var c = a.map,
+                d = a.b;
+            this.f = a.coordinate;
+            this.a += d.o;
+            m(this.e) || (this.e = ua());
+            d = Math.max(80 - (ua() - this.e), 0);
+            ba.clearTimeout(this.g);
+            this.g = ba.setTimeout(ra(this.i, this, c), d);
+            a.preventDefault();
+            c = !0
+        }
+        return !c
+    }
+    Ll.prototype.i = function(a) {
+        var c = Vb(this.a, -1, 1),
+            d = a.R();
+        a.render();
+        Yj(a, d, -c, this.f, this.o);
+        this.a = 0;
+        this.f = null;
+        this.g = this.e = void 0
+    };
+
+    function Nl(a) {
+        jk.call(this, {
+            handleDownEvent: Ol,
+            handleDragEvent: Pl,
+            handleUpEvent: Ql
+        });
+        a = m(a) ? a : {};
+        this.f = null;
+        this.g = void 0;
+        this.a = !1;
+        this.i = 0;
+        this.p = m(a.threshold) ? a.threshold : .3;
+        this.n = m(a.duration) ? a.duration : 250
+    }
+    w(Nl, jk);
+
+    function Pl(a) {
+        var c = 0,
+            d = this.e[0],
+            e = this.e[1],
+            d = Math.atan2(e.clientY - d.clientY, e.clientX - d.clientX);
+        m(this.g) && (c = d - this.g, this.i += c, !this.a && Math.abs(this.i) > this.p && (this.a = !0));
+        this.g = d;
+        a = a.map;
+        d = jg(a.a);
+        e = lk(this.e);
+        e[0] -= d.x;
+        e[1] -= d.y;
+        this.f = a.ka(e);
+        this.a && (d = a.R(), e = d.Da(), a.render(), Xj(a, d, e + c, this.f))
+    }
+
+    function Ql(a) {
+        if (2 > this.e.length) {
+            a = a.map;
+            var c = a.R();
+            Ue(c, -1);
+            if (this.a) {
+                var d = c.Da(),
+                    e = this.f,
+                    f = this.n,
+                    d = c.constrainRotation(d, 0);
+                Xj(a, c, d, e, f)
+            }
+            return !1
+        }
+        return !0
+    }
+
+    function Ol(a) {
+        return 2 <= this.e.length ? (a = a.map, this.f = null, this.g = void 0, this.a = !1, this.i = 0, this.o || Ue(a.R(), 1), a.render(), !0) : !1
+    }
+    Nl.prototype.nc = Fg;
+
+    function Rl(a) {
+        jk.call(this, {
+            handleDownEvent: Sl,
+            handleDragEvent: Tl,
+            handleUpEvent: Ul
+        });
+        a = m(a) ? a : {};
+        this.f = null;
+        this.i = m(a.duration) ? a.duration : 400;
+        this.a = void 0;
+        this.g = 1
+    }
+    w(Rl, jk);
+
+    function Tl(a) {
+        var c = 1,
+            d = this.e[0],
+            e = this.e[1],
+            f = d.clientX - e.clientX,
+            d = d.clientY - e.clientY,
+            f = Math.sqrt(f * f + d * d);
+        m(this.a) && (c = this.a / f);
+        this.a = f;
+        1 != c && (this.g = c);
+        a = a.map;
+        var f = a.R(),
+            d = f.ya(),
+            e = jg(a.a),
+            g = lk(this.e);
+        g[0] -= e.x;
+        g[1] -= e.y;
+        this.f = a.ka(g);
+        a.render();
+        Zj(a, f, d * c, this.f)
+    }
+
+    function Ul(a) {
+        if (2 > this.e.length) {
+            a = a.map;
+            var c = a.R();
+            Ue(c, -1);
+            var d = c.ya(),
+                e = this.f,
+                f = this.i,
+                d = c.constrainResolution(d, 0, this.g - 1);
+            Zj(a, c, d, e, f);
+            return !1
+        }
+        return !0
+    }
+
+    function Sl(a) {
+        return 2 <= this.e.length ? (a = a.map, this.f = null, this.a = void 0, this.g = 1, this.o || Ue(a.R(), 1), a.render(), !0) : !1
+    }
+    Rl.prototype.nc = Fg;
+
+    function Vl(a) {
+        a = m(a) ? a : {};
+        var c = new of,
+            d = new Tj(-.005, .05, 100);
+        (m(a.altShiftDragRotate) ? a.altShiftDragRotate : 1) && c.push(new qk);
+        (m(a.doubleClickZoom) ? a.doubleClickZoom : 1) && c.push(new ak({
+            delta: a.zoomDelta,
+            duration: a.zoomDuration
+        }));
+        (m(a.dragPan) ? a.dragPan : 1) && c.push(new mk({
+            kinetic: d
+        }));
+        (m(a.pinchRotate) ? a.pinchRotate : 1) && c.push(new Nl);
+        (m(a.pinchZoom) ? a.pinchZoom : 1) && c.push(new Rl({
+            duration: a.zoomDuration
+        }));
+        if (m(a.keyboard) ? a.keyboard : 1) c.push(new Hl), c.push(new Jl({
+            delta: a.zoomDelta,
+            duration: a.zoomDuration
+        }));
+        (m(a.mouseWheelZoom) ? a.mouseWheelZoom : 1) && c.push(new Ll({
+            duration: a.zoomDuration
+        }));
+        (m(a.shiftDragZoom) ? a.shiftDragZoom : 1) && c.push(new Gl);
+        return c
+    };
+
+    function G(a) {
+        var c = m(a) ? a : {};
+        a = Db(c);
+        delete a.layers;
+        c = c.layers;
+        mj.call(this, a);
+        this.c = [];
+        this.a = {};
+        x(this, hd("layers"), this.Vj, !1, this);
+        null != c ? ga(c) && (c = new of(c.slice())) : c = new of;
+        this.Ah(c)
+    }
+    w(G, mj);
+    l = G.prototype;
+    l.Qd = function() {
+        this.eb() && this.k()
+    };
+    l.Vj = function() {
+        Sa(this.c, Wc);
+        this.c.length = 0;
+        var a = this.Bc();
+        this.c.push(x(a, "add", this.Uj, !1, this), x(a, "remove", this.Wj, !1, this));
+        pb(this.a, function(a) {
+            Sa(a, Wc)
+        });
+        yb(this.a);
+        var a = a.a,
+            c, d, e;
+        c = 0;
+        for (d = a.length; c < d; c++) e = a[c], this.a[ma(e).toString()] = [x(e, "propertychange", this.Qd, !1, this), x(e, "change", this.Qd, !1, this)];
+        this.k()
+    };
+    l.Uj = function(a) {
+        a = a.element;
+        var c = ma(a).toString();
+        this.a[c] = [x(a, "propertychange", this.Qd, !1, this), x(a, "change", this.Qd, !1, this)];
+        this.k()
+    };
+    l.Wj = function(a) {
+        a = ma(a.element).toString();
+        Sa(this.a[a], Wc);
+        delete this.a[a];
+        this.k()
+    };
+    l.Bc = function() {
+        return this.get("layers")
+    };
+    l.Ah = function(a) {
+        this.set("layers", a)
+    };
+    l.Ue = function(a) {
+        var c = m(a) ? a : [],
+            d = c.length;
+        this.Bc().forEach(function(a) {
+            a.Ue(c)
+        });
+        a = nj(this);
+        var e, f;
+        for (e = c.length; d < e; d++) f = c[d], f.brightness = Vb(f.brightness + a.brightness, -1, 1), f.contrast *= a.contrast, f.hue += a.hue, f.opacity *= a.opacity, f.saturation *= a.saturation, f.visible = f.visible && a.visible, f.maxResolution = Math.min(f.maxResolution, a.maxResolution), f.minResolution = Math.max(f.minResolution, a.minResolution), m(a.extent) && (f.extent = m(f.extent) ? ge(f.extent, a.extent) : a.extent);
+        return c
+    };
+    l.We = function() {
+        return "ready"
+    };
+
+    function Wl(a) {
+        pe.call(this, {
+            code: a,
+            units: "m",
+            extent: Xl,
+            global: !0,
+            worldExtent: Yl
+        })
+    }
+    w(Wl, pe);
+    Wl.prototype.getPointResolution = function(a, c) {
+        var d = c[1] / 6378137;
+        return a / ((Math.exp(d) + Math.exp(-d)) / 2)
+    };
+    var Zl = 6378137 * Math.PI,
+        Xl = [-Zl, -Zl, Zl, Zl],
+        Yl = [-180, -85, 180, 85],
+        Be = Ua("EPSG:3857 EPSG:102100 EPSG:102113 EPSG:900913 urn:ogc:def:crs:EPSG:6.18:3:3857 urn:ogc:def:crs:EPSG::3857 http://www.opengis.net/gml/srs/epsg.xml#3857".split(" "), function(a) {
+            return new Wl(a)
+        });
+
+    function Ce(a, c, d) {
+        var e = a.length;
+        d = 1 < d ? d : 2;
+        m(c) || (2 < d ? c = a.slice() : c = Array(e));
+        for (var f = 0; f < e; f += d) c[f] = 6378137 * Math.PI * a[f] / 180, c[f + 1] = 6378137 * Math.log(Math.tan(Math.PI * (a[f + 1] + 90) / 360));
+        return c
+    }
+
+    function De(a, c, d) {
+        var e = a.length;
+        d = 1 < d ? d : 2;
+        m(c) || (2 < d ? c = a.slice() : c = Array(e));
+        for (var f = 0; f < e; f += d) c[f] = 180 * a[f] / (6378137 * Math.PI), c[f + 1] = 360 * Math.atan(Math.exp(a[f + 1] / 6378137)) / Math.PI - 90;
+        return c
+    };
+
+    function $l(a, c) {
+        pe.call(this, {
+            code: a,
+            units: "degrees",
+            extent: am,
+            axisOrientation: c,
+            global: !0,
+            worldExtent: am
+        })
+    }
+    w($l, pe);
+    $l.prototype.getPointResolution = function(a) {
+        return a
+    };
+    var am = [-180, -90, 180, 90],
+        Ee = [new $l("CRS:84"), new $l("EPSG:4326", "neu"), new $l("urn:ogc:def:crs:EPSG::4326", "neu"), new $l("urn:ogc:def:crs:EPSG:6.6:4326", "neu"), new $l("urn:ogc:def:crs:OGC:1.3:CRS84"), new $l("urn:ogc:def:crs:OGC:2:84"), new $l("http://www.opengis.net/gml/srs/epsg.xml#4326", "neu"), new $l("urn:x-ogc:def:crs:EPSG:4326", "neu")];
+
+    function bm() {
+        se(Be);
+        se(Ee);
+        Ae()
+    };
+
+    function I(a) {
+        C.call(this, m(a) ? a : {})
+    }
+    w(I, C);
+
+    function L(a) {
+        a = m(a) ? a : {};
+        var c = Db(a);
+        delete c.preload;
+        delete c.useInterimTilesOnError;
+        C.call(this, c);
+        this.d(m(a.preload) ? a.preload : 0);
+        this.e(m(a.useInterimTilesOnError) ? a.useInterimTilesOnError : !0)
+    }
+    w(L, C);
+    L.prototype.a = function() {
+        return this.get("preload")
+    };
+    L.prototype.d = function(a) {
+        this.set("preload", a)
+    };
+    L.prototype.c = function() {
+        return this.get("useInterimTilesOnError")
+    };
+    L.prototype.e = function(a) {
+        this.set("useInterimTilesOnError", a)
+    };
+
+    function M(a) {
+        a = m(a) ? a : {};
+        var c = Db(a);
+        delete c.style;
+        delete c.renderBuffer;
+        delete c.updateWhileAnimating;
+        delete c.updateWhileInteracting;
+        C.call(this, c);
+        this.c = m(a.renderBuffer) ? a.renderBuffer : 100;
+        this.g = null;
+        this.a = void 0;
+        this.e(a.style);
+        this.o = m(a.updateWhileAnimating) ? a.updateWhileAnimating : !1;
+        this.n = m(a.updateWhileInteracting) ? a.updateWhileInteracting : !1
+    }
+    w(M, C);
+    M.prototype.H = function() {
+        return this.g
+    };
+    M.prototype.J = function() {
+        return this.a
+    };
+    M.prototype.e = function(a) {
+        this.g = m(a) ? a : El;
+        this.a = null === a ? void 0 : Dl(this.g);
+        this.k()
+    };
+
+    function cm(a, c, d, e, f) {
+        this.U = {};
+        this.c = a;
+        this.n = c;
+        this.e = d;
+        this.H = e;
+        this.Nc = f;
+        this.f = this.b = this.a = this.oa = this.ba = this.X = null;
+        this.Ga = this.Fa = this.o = this.N = this.L = this.J = 0;
+        this.Ra = !1;
+        this.g = this.rc = 0;
+        this.vb = !1;
+        this.T = 0;
+        this.d = "";
+        this.q = this.p = this.xb = this.wb = 0;
+        this.sa = this.l = this.i = null;
+        this.V = [];
+        this.sc = zd()
+    }
+
+    function dm(a, c, d) {
+        if (null !== a.f) {
+            c = vk(c, 0, d, 2, a.H, a.V);
+            d = a.c;
+            var e = a.sc,
+                f = d.globalAlpha;
+            1 != a.o && (d.globalAlpha = f * a.o);
+            var g = a.rc;
+            a.Ra && (g += a.Nc);
+            var h, k;
+            h = 0;
+            for (k = c.length; h < k; h += 2) {
+                var n = c[h] - a.J,
+                    p = c[h + 1] - a.L;
+                a.vb && (n = n + .5 | 0, p = p + .5 | 0);
+                if (0 !== g || 1 != a.g) {
+                    var q = n + a.J,
+                        r = p + a.L;
+                    qj(e, q, r, a.g, a.g, g, -q, -r);
+                    d.setTransform(e[0], e[1], e[4], e[5], e[12], e[13])
+                }
+                d.drawImage(a.f, a.Fa, a.Ga, a.T, a.N, n, p, a.T, a.N)
+            }
+            0 === g && 1 == a.g || d.setTransform(1, 0, 0, 1, 0, 0);
+            1 != a.o && (d.globalAlpha = f)
+        }
+    }
+
+    function em(a, c, d, e) {
+        var f = 0;
+        if (null !== a.sa && "" !== a.d) {
+            null === a.i || fm(a, a.i);
+            null === a.l || gm(a, a.l);
+            var g = a.sa,
+                h = a.c,
+                k = a.oa;
+            null === k ? (h.font = g.font, h.textAlign = g.textAlign, h.textBaseline = g.textBaseline, a.oa = {
+                font: g.font,
+                textAlign: g.textAlign,
+                textBaseline: g.textBaseline
+            }) : (k.font != g.font && (k.font = h.font = g.font), k.textAlign != g.textAlign && (k.textAlign = h.textAlign = g.textAlign), k.textBaseline != g.textBaseline && (k.textBaseline = h.textBaseline = g.textBaseline));
+            c = vk(c, f, d, e, a.H, a.V);
+            for (g = a.c; f < d; f += e) {
+                h = c[f] + a.wb;
+                k = c[f + 1] + a.xb;
+                if (0 !== a.p || 1 != a.q) {
+                    var n = qj(a.sc, h, k, a.q, a.q, a.p, -h, -k);
+                    g.setTransform(n[0], n[1], n[4], n[5], n[12], n[13])
+                }
+                null === a.l || g.strokeText(a.d, h, k);
+                null === a.i || g.fillText(a.d, h, k)
+            }
+            0 === a.p && 1 == a.q || g.setTransform(1, 0, 0, 1, 0, 0)
+        }
+    }
+
+    function hm(a, c, d, e, f, g) {
+        var h = a.c;
+        a = vk(c, d, e, f, a.H, a.V);
+        h.moveTo(a[0], a[1]);
+        for (c = 2; c < a.length; c += 2) h.lineTo(a[c], a[c + 1]);
+        g && h.lineTo(a[0], a[1]);
+        return e
+    }
+
+    function im(a, c, d, e, f) {
+        var g = a.c,
+            h, k;
+        h = 0;
+        for (k = e.length; h < k; ++h) d = hm(a, c, d, e[h], f, !0), g.closePath();
+        return d
+    }
+    l = cm.prototype;
+    l.tc = function(a, c) {
+        var d = a.toString(),
+            e = this.U[d];
+        m(e) ? e.push(c) : this.U[d] = [c]
+    };
+    l.uc = function(a) {
+        if (he(this.e, a.G())) {
+            if (null !== this.a || null !== this.b) {
+                null === this.a || fm(this, this.a);
+                null === this.b || gm(this, this.b);
+                var c;
+                c = a.j;
+                c = null === c ? null : vk(c, 0, c.length, a.s, this.H, this.V);
+                var d = c[2] - c[0],
+                    e = c[3] - c[1],
+                    d = Math.sqrt(d * d + e * e),
+                    e = this.c;
+                e.beginPath();
+                e.arc(c[0], c[1], d, 0, 2 * Math.PI);
+                null === this.a || e.fill();
+                null === this.b || e.stroke()
+            }
+            "" !== this.d && em(this, a.dd(), 2, 2)
+        }
+    };
+    l.Le = function(a, c) {
+        var d = (0, c.d)(a);
+        if (null != d && he(this.e, d.G())) {
+            var e = c.b;
+            m(e) || (e = 0);
+            this.tc(e, function(a) {
+                a.Aa(c.e, c.c);
+                a.Za(c.f);
+                a.Ba(c.a);
+                jm[d.M()].call(a, d, null)
+            })
+        }
+    };
+    l.zd = function(a, c) {
+        var d = a.d,
+            e, f;
+        e = 0;
+        for (f = d.length; e < f; ++e) {
+            var g = d[e];
+            jm[g.M()].call(this, g, c)
+        }
+    };
+    l.kb = function(a) {
+        var c = a.j;
+        a = a.s;
+        null === this.f || dm(this, c, c.length);
+        "" !== this.d && em(this, c, c.length, a)
+    };
+    l.jb = function(a) {
+        var c = a.j;
+        a = a.s;
+        null === this.f || dm(this, c, c.length);
+        "" !== this.d && em(this, c, c.length, a)
+    };
+    l.zb = function(a) {
+        if (he(this.e, a.G())) {
+            if (null !== this.b) {
+                gm(this, this.b);
+                var c = this.c,
+                    d = a.j;
+                c.beginPath();
+                hm(this, d, 0, d.length, a.s, !1);
+                c.stroke()
+            }
+            "" !== this.d && (a = km(a), em(this, a, 2, 2))
+        }
+    };
+    l.vc = function(a) {
+        var c = a.G();
+        if (he(this.e, c)) {
+            if (null !== this.b) {
+                gm(this, this.b);
+                var c = this.c,
+                    d = a.j,
+                    e = 0,
+                    f = a.c,
+                    g = a.s;
+                c.beginPath();
+                var h, k;
+                h = 0;
+                for (k = f.length; h < k; ++h) e = hm(this, d, e, f[h], g, !1);
+                c.stroke()
+            }
+            "" !== this.d && (a = lm(a), em(this, a, a.length, 2))
+        }
+    };
+    l.Rb = function(a) {
+        if (he(this.e, a.G())) {
+            if (null !== this.b || null !== this.a) {
+                null === this.a || fm(this, this.a);
+                null === this.b || gm(this, this.b);
+                var c = this.c;
+                c.beginPath();
+                im(this, el(a), 0, a.c, a.s);
+                null === this.a || c.fill();
+                null === this.b || c.stroke()
+            }
+            "" !== this.d && (a = fl(a), em(this, a, 2, 2))
+        }
+    };
+    l.wc = function(a) {
+        if (he(this.e, a.G())) {
+            if (null !== this.b || null !== this.a) {
+                null === this.a || fm(this, this.a);
+                null === this.b || gm(this, this.b);
+                var c = this.c,
+                    d = mm(a),
+                    e = 0,
+                    f = a.c,
+                    g = a.s,
+                    h, k;
+                h = 0;
+                for (k = f.length; h < k; ++h) {
+                    var n = f[h];
+                    c.beginPath();
+                    e = im(this, d, e, n, g);
+                    null === this.a || c.fill();
+                    null === this.b || c.stroke()
+                }
+            }
+            "" !== this.d && (a = nm(a), em(this, a, a.length, 2))
+        }
+    };
+
+    function om(a) {
+        var c = Ua(tb(a.U), Number);
+        gb(c);
+        var d, e, f, g, h;
+        d = 0;
+        for (e = c.length; d < e; ++d)
+            for (f = a.U[c[d].toString()], g = 0, h = f.length; g < h; ++g) f[g](a)
+    }
+
+    function fm(a, c) {
+        var d = a.c,
+            e = a.X;
+        null === e ? (d.fillStyle = c.fillStyle, a.X = {
+            fillStyle: c.fillStyle
+        }) : e.fillStyle != c.fillStyle && (e.fillStyle = d.fillStyle = c.fillStyle)
+    }
+
+    function gm(a, c) {
+        var d = a.c,
+            e = a.ba;
+        null === e ? (d.lineCap = c.lineCap, ki && d.setLineDash(c.lineDash), d.lineJoin = c.lineJoin, d.lineWidth = c.lineWidth, d.miterLimit = c.miterLimit, d.strokeStyle = c.strokeStyle, a.ba = {
+            lineCap: c.lineCap,
+            lineDash: c.lineDash,
+            lineJoin: c.lineJoin,
+            lineWidth: c.lineWidth,
+            miterLimit: c.miterLimit,
+            strokeStyle: c.strokeStyle
+        }) : (e.lineCap != c.lineCap && (e.lineCap = d.lineCap = c.lineCap), ki && !ib(e.lineDash, c.lineDash) && d.setLineDash(e.lineDash = c.lineDash), e.lineJoin != c.lineJoin && (e.lineJoin = d.lineJoin = c.lineJoin), e.lineWidth != c.lineWidth && (e.lineWidth = d.lineWidth = c.lineWidth), e.miterLimit != c.miterLimit && (e.miterLimit = d.miterLimit = c.miterLimit), e.strokeStyle != c.strokeStyle && (e.strokeStyle = d.strokeStyle = c.strokeStyle))
+    }
+    l.Aa = function(a, c) {
+        if (null === a) this.a = null;
+        else {
+            var d = a.b;
+            this.a = {
+                fillStyle: vf(null === d ? wl : d)
+            }
+        }
+        if (null === c) this.b = null;
+        else {
+            var d = c.b,
+                e = c.d,
+                f = c.c,
+                g = c.e,
+                h = c.a,
+                k = c.f;
+            this.b = {
+                lineCap: m(e) ? e : "round",
+                lineDash: null != f ? f : xl,
+                lineJoin: m(g) ? g : "round",
+                lineWidth: this.n * (m(h) ? h : 1),
+                miterLimit: m(k) ? k : 10,
+                strokeStyle: vf(null === d ? yl : d)
+            }
+        }
+    };
+    l.Za = function(a) {
+        if (null === a) this.f = null;
+        else {
+            var c = a.mb(),
+                d = a.Lb(1),
+                e = a.rb(),
+                f = a.Xa();
+            this.J = c[0];
+            this.L = c[1];
+            this.N = f[1];
+            this.f = d;
+            this.o = a.U;
+            this.Fa = e[0];
+            this.Ga = e[1];
+            this.Ra = a.V;
+            this.rc = a.q;
+            this.g = a.l;
+            this.vb = a.n;
+            this.T = f[0]
+        }
+    };
+    l.Ba = function(a) {
+        if (null === a) this.d = "";
+        else {
+            var c = a.b;
+            null === c ? this.i = null : (c = c.b, this.i = {
+                fillStyle: vf(null === c ? wl : c)
+            });
+            var d = a.f;
+            if (null === d) this.l = null;
+            else {
+                var c = d.b,
+                    e = d.d,
+                    f = d.c,
+                    g = d.e,
+                    h = d.a,
+                    d = d.f;
+                this.l = {
+                    lineCap: m(e) ? e : "round",
+                    lineDash: null != f ? f : xl,
+                    lineJoin: m(g) ? g : "round",
+                    lineWidth: m(h) ? h : 1,
+                    miterLimit: m(d) ? d : 10,
+                    strokeStyle: vf(null === c ? yl : c)
+                }
+            }
+            var c = a.d,
+                e = a.q,
+                f = a.l,
+                g = a.e,
+                h = a.a,
+                d = a.c,
+                k = a.g;
+            a = a.i;
+            this.sa = {
+                font: m(c) ? c : "10px sans-serif",
+                textAlign: m(k) ? k : "center",
+                textBaseline: m(a) ? a : "middle"
+            };
+            this.d = m(d) ? d : "";
+            this.wb = m(e) ? this.n * e : 0;
+            this.xb = m(f) ? this.n * f : 0;
+            this.p = m(g) ? g : 0;
+            this.q = this.n * (m(h) ? h : 1)
+        }
+    };
+    var jm = {
+        Point: cm.prototype.kb,
+        LineString: cm.prototype.zb,
+        Polygon: cm.prototype.Rb,
+        MultiPoint: cm.prototype.jb,
+        MultiLineString: cm.prototype.vc,
+        MultiPolygon: cm.prototype.wc,
+        GeometryCollection: cm.prototype.zd,
+        Circle: cm.prototype.uc
+    };
+    var pm = ["Polygon", "LineString", "Image", "Text"];
+
+    function qm(a, c, d) {
+        this.oa = a;
+        this.T = c;
+        this.d = null;
+        this.e = 0;
+        this.resolution = d;
+        this.L = this.J = null;
+        this.a = [];
+        this.coordinates = [];
+        this.X = zd();
+        this.b = [];
+        this.sa = [];
+        this.ba = zd()
+    }
+    w(qm, hl);
+
+    function rm(a, c, d, e, f, g) {
+        var h = a.coordinates.length,
+            k = a.Pe(),
+            n = [c[d], c[d + 1]],
+            p = [NaN, NaN],
+            q = !0,
+            r, t, u;
+        for (r = d + f; r < e; r += f) p[0] = c[r], p[1] = c[r + 1], u = Td(k, p), u !== t ? (q && (a.coordinates[h++] = n[0], a.coordinates[h++] = n[1]), a.coordinates[h++] = p[0], a.coordinates[h++] = p[1], q = !1) : 1 === u ? (a.coordinates[h++] = p[0], a.coordinates[h++] = p[1], q = !1) : q = !0, n[0] = p[0], n[1] = p[1], t = u;
+        r === d + f && (a.coordinates[h++] = n[0], a.coordinates[h++] = n[1]);
+        g && (a.coordinates[h++] = c[d], a.coordinates[h++] = c[d + 1]);
+        return h
+    }
+
+    function sm(a, c) {
+        a.J = [0, c, 0];
+        a.a.push(a.J);
+        a.L = [0, c, 0];
+        a.b.push(a.L)
+    }
+
+    function tm(a, c, d, e, f, g, h, k, n) {
+        var p;
+        rj(e, a.X) ? p = a.sa : (p = vk(a.coordinates, 0, a.coordinates.length, 2, e, a.sa), Cd(a.X, e));
+        e = 0;
+        var q = h.length,
+            r = 0,
+            t;
+        for (a = a.ba; e < q;) {
+            var u = h[e],
+                A, z, D, B;
+            switch (u[0]) {
+                case 0:
+                    r = u[1];
+                    t = ma(r).toString();
+                    m(g[t]) ? e = u[2] : m(n) && !he(n, r.Q().G()) ? e = u[2] : ++e;
+                    break;
+                case 1:
+                    c.beginPath();
+                    ++e;
+                    break;
+                case 2:
+                    r = u[1];
+                    t = p[r];
+                    var y = p[r + 1],
+                        K = p[r + 2] - t,
+                        r = p[r + 3] - y;
+                    c.arc(t, y, Math.sqrt(K * K + r * r), 0, 2 * Math.PI, !0);
+                    ++e;
+                    break;
+                case 3:
+                    c.closePath();
+                    ++e;
+                    break;
+                case 4:
+                    r = u[1];
+                    t = u[2];
+                    A = u[3];
+                    D = u[4] * d;
+                    var J = u[5] * d,
+                        H = u[6];
+                    z = u[7];
+                    var P = u[8],
+                        sa = u[9],
+                        y = u[11],
+                        K = u[12],
+                        Oa = u[13],
+                        N = u[14];
+                    for (u[10] && (y += f); r < t; r += 2) {
+                        u = p[r] - D;
+                        B = p[r + 1] - J;
+                        Oa && (u = u + .5 | 0, B = B + .5 | 0);
+                        if (1 != K || 0 !== y) {
+                            var za = u + D,
+                                cb = B + J;
+                            qj(a, za, cb, K, K, y, -za, -cb);
+                            c.setTransform(a[0], a[1], a[4], a[5], a[12], a[13])
+                        }
+                        za = c.globalAlpha;
+                        1 != z && (c.globalAlpha = za * z);
+                        c.drawImage(A, P, sa, N, H, u, B, N * d, H * d);
+                        1 != z && (c.globalAlpha = za);
+                        1 == K && 0 === y || c.setTransform(1, 0, 0, 1, 0, 0)
+                    }++e;
+                    break;
+                case 5:
+                    r = u[1];
+                    t = u[2];
+                    D = u[3];
+                    J = u[4] * d;
+                    H = u[5] * d;
+                    y = u[6];
+                    K = u[7] * d;
+                    A = u[8];
+                    for (z = u[9]; r < t; r += 2) {
+                        u = p[r] + J;
+                        B = p[r + 1] + H;
+                        if (1 != K || 0 !== y) qj(a, u, B, K, K, y, -u, -B), c.setTransform(a[0], a[1], a[4], a[5], a[12], a[13]);
+                        z && c.strokeText(D, u, B);
+                        A && c.fillText(D, u, B);
+                        1 == K && 0 === y || c.setTransform(1, 0, 0, 1, 0, 0)
+                    }++e;
+                    break;
+                case 6:
+                    if (m(k) && (r = u[1], r = k(r))) return r;
+                    ++e;
+                    break;
+                case 7:
+                    c.fill();
+                    ++e;
+                    break;
+                case 8:
+                    r = u[1];
+                    t = u[2];
+                    c.moveTo(p[r], p[r + 1]);
+                    for (r += 2; r < t; r += 2) c.lineTo(p[r], p[r + 1]);
+                    ++e;
+                    break;
+                case 9:
+                    c.fillStyle = u[1];
+                    ++e;
+                    break;
+                case 10:
+                    r = m(u[7]) ? u[7] : !0;
+                    t = u[2];
+                    c.strokeStyle = u[1];
+                    c.lineWidth = r ? t * d : t;
+                    c.lineCap = u[3];
+                    c.lineJoin = u[4];
+                    c.miterLimit = u[5];
+                    ki && c.setLineDash(u[6]);
+                    ++e;
+                    break;
+                case 11:
+                    c.font = u[1];
+                    c.textAlign = u[2];
+                    c.textBaseline = u[3];
+                    ++e;
+                    break;
+                case 12:
+                    c.stroke();
+                    ++e;
+                    break;
+                default:
+                    ++e
+            }
+        }
+    }
+
+    function vm(a) {
+        var c = a.b;
+        c.reverse();
+        var d, e = c.length,
+            f, g, h = -1;
+        for (d = 0; d < e; ++d)
+            if (f = c[d], g = f[0], 6 == g) h = d;
+            else if (0 == g) {
+            f[2] = d;
+            f = a.b;
+            for (g = d; h < g;) {
+                var k = f[h];
+                f[h] = f[g];
+                f[g] = k;
+                ++h;
+                --g
+            }
+            h = -1
+        }
+    }
+
+    function wm(a, c) {
+        a.J[2] = a.a.length;
+        a.J = null;
+        a.L[2] = a.b.length;
+        a.L = null;
+        var d = [6, c];
+        a.a.push(d);
+        a.b.push(d)
+    }
+    qm.prototype.de = ca;
+    qm.prototype.Pe = function() {
+        return this.T
+    };
+
+    function xm(a, c, d) {
+        qm.call(this, a, c, d);
+        this.i = this.N = null;
+        this.H = this.p = this.n = this.V = this.U = this.o = this.l = this.q = this.g = this.f = this.c = void 0
+    }
+    w(xm, qm);
+    xm.prototype.kb = function(a, c) {
+        if (null !== this.i) {
+            sm(this, c);
+            var d = a.j,
+                e = this.coordinates.length,
+                d = rm(this, d, 0, d.length, a.s, !1);
+            this.a.push([4, e, d, this.i, this.c, this.f, this.g, this.q, this.l, this.o, this.U, this.V, this.n, this.p, this.H]);
+            this.b.push([4, e, d, this.N, this.c, this.f, this.g, this.q, this.l, this.o, this.U, this.V, this.n, this.p, this.H]);
+            wm(this, c)
+        }
+    };
+    xm.prototype.jb = function(a, c) {
+        if (null !== this.i) {
+            sm(this, c);
+            var d = a.j,
+                e = this.coordinates.length,
+                d = rm(this, d, 0, d.length, a.s, !1);
+            this.a.push([4, e, d, this.i, this.c, this.f, this.g, this.q, this.l, this.o, this.U, this.V, this.n, this.p, this.H]);
+            this.b.push([4, e, d, this.N, this.c, this.f, this.g, this.q, this.l, this.o, this.U, this.V, this.n, this.p, this.H]);
+            wm(this, c)
+        }
+    };
+    xm.prototype.de = function() {
+        vm(this);
+        this.f = this.c = void 0;
+        this.i = this.N = null;
+        this.H = this.p = this.V = this.U = this.o = this.l = this.q = this.n = this.g = void 0
+    };
+    xm.prototype.Za = function(a) {
+        var c = a.mb(),
+            d = a.Xa(),
+            e = a.he(1),
+            f = a.Lb(1),
+            g = a.rb();
+        this.c = c[0];
+        this.f = c[1];
+        this.N = e;
+        this.i = f;
+        this.g = d[1];
+        this.q = a.U;
+        this.l = g[0];
+        this.o = g[1];
+        this.U = a.V;
+        this.V = a.q;
+        this.n = a.l;
+        this.p = a.n;
+        this.H = d[0]
+    };
+
+    function ym(a, c, d) {
+        qm.call(this, a, c, d);
+        this.c = {
+            Xc: void 0,
+            Sc: void 0,
+            Tc: null,
+            Uc: void 0,
+            Vc: void 0,
+            Wc: void 0,
+            Ze: 0,
+            strokeStyle: void 0,
+            lineCap: void 0,
+            lineDash: null,
+            lineJoin: void 0,
+            lineWidth: void 0,
+            miterLimit: void 0
+        }
+    }
+    w(ym, qm);
+
+    function zm(a, c, d, e, f) {
+        var g = a.coordinates.length;
+        c = rm(a, c, d, e, f, !1);
+        g = [8, g, c];
+        a.a.push(g);
+        a.b.push(g);
+        return e
+    }
+    l = ym.prototype;
+    l.Pe = function() {
+        null === this.d && (this.d = Pd(this.T), 0 < this.e && Od(this.d, this.resolution * (this.e + 1) / 2, this.d));
+        return this.d
+    };
+
+    function Am(a) {
+        var c = a.c,
+            d = c.strokeStyle,
+            e = c.lineCap,
+            f = c.lineDash,
+            g = c.lineJoin,
+            h = c.lineWidth,
+            k = c.miterLimit;
+        c.Xc == d && c.Sc == e && ib(c.Tc, f) && c.Uc == g && c.Vc == h && c.Wc == k || (c.Ze != a.coordinates.length && (a.a.push([12]), c.Ze = a.coordinates.length), a.a.push([10, d, h, e, g, k, f], [1]), c.Xc = d, c.Sc = e, c.Tc = f, c.Uc = g, c.Vc = h, c.Wc = k)
+    }
+    l.zb = function(a, c) {
+        var d = this.c,
+            e = d.lineWidth;
+        m(d.strokeStyle) && m(e) && (Am(this), sm(this, c), this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash], [1]), d = a.j, zm(this, d, 0, d.length, a.s), this.b.push([12]), wm(this, c))
+    };
+    l.vc = function(a, c) {
+        var d = this.c,
+            e = d.lineWidth;
+        if (m(d.strokeStyle) && m(e)) {
+            Am(this);
+            sm(this, c);
+            this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash], [1]);
+            var d = a.c,
+                e = a.j,
+                f = a.s,
+                g = 0,
+                h, k;
+            h = 0;
+            for (k = d.length; h < k; ++h) g = zm(this, e, g, d[h], f);
+            this.b.push([12]);
+            wm(this, c)
+        }
+    };
+    l.de = function() {
+        this.c.Ze != this.coordinates.length && this.a.push([12]);
+        vm(this);
+        this.c = null
+    };
+    l.Aa = function(a, c) {
+        var d = c.b;
+        this.c.strokeStyle = vf(null === d ? yl : d);
+        d = c.d;
+        this.c.lineCap = m(d) ? d : "round";
+        d = c.c;
+        this.c.lineDash = null === d ? xl : d;
+        d = c.e;
+        this.c.lineJoin = m(d) ? d : "round";
+        d = c.a;
+        this.c.lineWidth = m(d) ? d : 1;
+        d = c.f;
+        this.c.miterLimit = m(d) ? d : 10;
+        this.c.lineWidth > this.e && (this.e = this.c.lineWidth, this.d = null)
+    };
+
+    function Bm(a, c, d) {
+        qm.call(this, a, c, d);
+        this.c = {
+            Mf: void 0,
+            Xc: void 0,
+            Sc: void 0,
+            Tc: null,
+            Uc: void 0,
+            Vc: void 0,
+            Wc: void 0,
+            fillStyle: void 0,
+            strokeStyle: void 0,
+            lineCap: void 0,
+            lineDash: null,
+            lineJoin: void 0,
+            lineWidth: void 0,
+            miterLimit: void 0
+        }
+    }
+    w(Bm, qm);
+
+    function Cm(a, c, d, e, f) {
+        var g = a.c,
+            h = [1];
+        a.a.push(h);
+        a.b.push(h);
+        var k, h = 0;
+        for (k = e.length; h < k; ++h) {
+            var n = e[h],
+                p = a.coordinates.length;
+            d = rm(a, c, d, n, f, !0);
+            d = [8, p, d];
+            p = [3];
+            a.a.push(d, p);
+            a.b.push(d, p);
+            d = n
+        }
+        c = [7];
+        a.b.push(c);
+        m(g.fillStyle) && a.a.push(c);
+        m(g.strokeStyle) && (g = [12], a.a.push(g), a.b.push(g));
+        return d
+    }
+    l = Bm.prototype;
+    l.uc = function(a, c) {
+        var d = this.c,
+            e = d.strokeStyle;
+        if (m(d.fillStyle) || m(e)) {
+            Dm(this);
+            sm(this, c);
+            this.b.push([9, vf(wl)]);
+            m(d.strokeStyle) && this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash]);
+            var f = a.j,
+                e = this.coordinates.length;
+            rm(this, f, 0, f.length, a.s, !1);
+            f = [1];
+            e = [2, e];
+            this.a.push(f, e);
+            this.b.push(f, e);
+            e = [7];
+            this.b.push(e);
+            m(d.fillStyle) && this.a.push(e);
+            m(d.strokeStyle) && (d = [12], this.a.push(d), this.b.push(d));
+            wm(this, c)
+        }
+    };
+    l.Rb = function(a, c) {
+        var d = this.c,
+            e = d.strokeStyle;
+        if (m(d.fillStyle) || m(e)) Dm(this), sm(this, c), this.b.push([9, vf(wl)]), m(d.strokeStyle) && this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash]), d = a.c, e = el(a), Cm(this, e, 0, d, a.s), wm(this, c)
+    };
+    l.wc = function(a, c) {
+        var d = this.c,
+            e = d.strokeStyle;
+        if (m(d.fillStyle) || m(e)) {
+            Dm(this);
+            sm(this, c);
+            this.b.push([9, vf(wl)]);
+            m(d.strokeStyle) && this.b.push([10, d.strokeStyle, d.lineWidth, d.lineCap, d.lineJoin, d.miterLimit, d.lineDash]);
+            var d = a.c,
+                e = mm(a),
+                f = a.s,
+                g = 0,
+                h, k;
+            h = 0;
+            for (k = d.length; h < k; ++h) g = Cm(this, e, g, d[h], f);
+            wm(this, c)
+        }
+    };
+    l.de = function() {
+        vm(this);
+        this.c = null;
+        var a = this.oa;
+        if (0 !== a) {
+            var c = this.coordinates,
+                d, e;
+            d = 0;
+            for (e = c.length; d < e; ++d) c[d] = a * Math.round(c[d] / a)
+        }
+    };
+    l.Pe = function() {
+        null === this.d && (this.d = Pd(this.T), 0 < this.e && Od(this.d, this.resolution * (this.e + 1) / 2, this.d));
+        return this.d
+    };
+    l.Aa = function(a, c) {
+        var d = this.c;
+        if (null === a) d.fillStyle = void 0;
+        else {
+            var e = a.b;
+            d.fillStyle = vf(null === e ? wl : e)
+        }
+        null === c ? (d.strokeStyle = void 0, d.lineCap = void 0, d.lineDash = null, d.lineJoin = void 0, d.lineWidth = void 0, d.miterLimit = void 0) : (e = c.b, d.strokeStyle = vf(null === e ? yl : e), e = c.d, d.lineCap = m(e) ? e : "round", e = c.c, d.lineDash = null === e ? xl : e.slice(), e = c.e, d.lineJoin = m(e) ? e : "round", e = c.a, d.lineWidth = m(e) ? e : 1, e = c.f, d.miterLimit = m(e) ? e : 10, d.lineWidth > this.e && (this.e = d.lineWidth, this.d = null))
+    };
+
+    function Dm(a) {
+        var c = a.c,
+            d = c.fillStyle,
+            e = c.strokeStyle,
+            f = c.lineCap,
+            g = c.lineDash,
+            h = c.lineJoin,
+            k = c.lineWidth,
+            n = c.miterLimit;
+        m(d) && c.Mf != d && (a.a.push([9, d]), c.Mf = c.fillStyle);
+        !m(e) || c.Xc == e && c.Sc == f && c.Tc == g && c.Uc == h && c.Vc == k && c.Wc == n || (a.a.push([10, e, k, f, h, n, g]), c.Xc = e, c.Sc = f, c.Tc = g, c.Uc = h, c.Vc = k, c.Wc = n)
+    }
+
+    function Em(a, c, d) {
+        qm.call(this, a, c, d);
+        this.p = this.n = this.V = null;
+        this.i = "";
+        this.U = this.o = this.l = this.q = 0;
+        this.g = this.f = this.c = null
+    }
+    w(Em, qm);
+    Em.prototype.lb = function(a, c, d, e, f, g) {
+        if ("" !== this.i && null !== this.g && (null !== this.c || null !== this.f)) {
+            if (null !== this.c) {
+                f = this.c;
+                var h = this.V;
+                if (null === h || h.fillStyle != f.fillStyle) {
+                    var k = [9, f.fillStyle];
+                    this.a.push(k);
+                    this.b.push(k);
+                    null === h ? this.V = {
+                        fillStyle: f.fillStyle
+                    } : h.fillStyle = f.fillStyle
+                }
+            }
+            null !== this.f && (f = this.f, h = this.n, null === h || h.lineCap != f.lineCap || h.lineDash != f.lineDash || h.lineJoin != f.lineJoin || h.lineWidth != f.lineWidth || h.miterLimit != f.miterLimit || h.strokeStyle != f.strokeStyle) && (k = [10,
+                f.strokeStyle, f.lineWidth, f.lineCap, f.lineJoin, f.miterLimit, f.lineDash, !1
+            ], this.a.push(k), this.b.push(k), null === h ? this.n = {
+                lineCap: f.lineCap,
+                lineDash: f.lineDash,
+                lineJoin: f.lineJoin,
+                lineWidth: f.lineWidth,
+                miterLimit: f.miterLimit,
+                strokeStyle: f.strokeStyle
+            } : (h.lineCap = f.lineCap, h.lineDash = f.lineDash, h.lineJoin = f.lineJoin, h.lineWidth = f.lineWidth, h.miterLimit = f.miterLimit, h.strokeStyle = f.strokeStyle));
+            f = this.g;
+            h = this.p;
+            if (null === h || h.font != f.font || h.textAlign != f.textAlign || h.textBaseline != f.textBaseline) k = [11, f.font, f.textAlign, f.textBaseline], this.a.push(k), this.b.push(k), null === h ? this.p = {
+                font: f.font,
+                textAlign: f.textAlign,
+                textBaseline: f.textBaseline
+            } : (h.font = f.font, h.textAlign = f.textAlign, h.textBaseline = f.textBaseline);
+            sm(this, g);
+            f = this.coordinates.length;
+            a = rm(this, a, c, d, e, !1);
+            a = [5, f, a, this.i, this.q, this.l, this.o, this.U, null !== this.c, null !== this.f];
+            this.a.push(a);
+            this.b.push(a);
+            wm(this, g)
+        }
+    };
+    Em.prototype.Ba = function(a) {
+        if (null === a) this.i = "";
+        else {
+            var c = a.b;
+            null === c ? this.c = null : (c = c.b, c = vf(null === c ? wl : c), null === this.c ? this.c = {
+                fillStyle: c
+            } : this.c.fillStyle = c);
+            var d = a.f;
+            if (null === d) this.f = null;
+            else {
+                var c = d.b,
+                    e = d.d,
+                    f = d.c,
+                    g = d.e,
+                    h = d.a,
+                    d = d.f,
+                    e = m(e) ? e : "round",
+                    f = null != f ? f.slice() : xl,
+                    g = m(g) ? g : "round",
+                    h = m(h) ? h : 1,
+                    d = m(d) ? d : 10,
+                    c = vf(null === c ? yl : c);
+                if (null === this.f) this.f = {
+                    lineCap: e,
+                    lineDash: f,
+                    lineJoin: g,
+                    lineWidth: h,
+                    miterLimit: d,
+                    strokeStyle: c
+                };
+                else {
+                    var k = this.f;
+                    k.lineCap = e;
+                    k.lineDash = f;
+                    k.lineJoin = g;
+                    k.lineWidth = h;
+                    k.miterLimit = d;
+                    k.strokeStyle = c
+                }
+            }
+            var n = a.d,
+                c = a.q,
+                e = a.l,
+                f = a.e,
+                h = a.a,
+                d = a.c,
+                g = a.g,
+                k = a.i;
+            a = m(n) ? n : "10px sans-serif";
+            g = m(g) ? g : "center";
+            k = m(k) ? k : "middle";
+            null === this.g ? this.g = {
+                font: a,
+                textAlign: g,
+                textBaseline: k
+            } : (n = this.g, n.font = a, n.textAlign = g, n.textBaseline = k);
+            this.i = m(d) ? d : "";
+            this.q = m(c) ? c : 0;
+            this.l = m(e) ? e : 0;
+            this.o = m(f) ? f : 0;
+            this.U = m(h) ? h : 1
+        }
+    };
+
+    function Fm(a, c, d, e) {
+        this.q = a;
+        this.d = c;
+        this.i = d;
+        this.e = e;
+        this.a = {};
+        this.f = ai(1, 1);
+        this.g = zd()
+    }
+
+    function Gm(a) {
+        for (var c in a.a) {
+            var d = a.a[c],
+                e;
+            for (e in d) d[e].de()
+        }
+    }
+    Fm.prototype.c = function(a, c, d, e, f) {
+        var g = this.g;
+        qj(g, .5, .5, 1 / c, -1 / c, -d, -a[0], -a[1]);
+        var h = this.f;
+        h.clearRect(0, 0, 1, 1);
+        var k;
+        m(this.e) && (k = Kd(), Ld(k, a), Od(k, c * this.e, k));
+        return Hm(this, h, g, d, e, function(a) {
+            if (0 < h.getImageData(0, 0, 1, 1).data[3]) {
+                if (a = f(a)) return a;
+                h.clearRect(0, 0, 1, 1)
+            }
+        }, k)
+    };
+    Fm.prototype.b = function(a, c) {
+        var d = m(a) ? a.toString() : "0",
+            e = this.a[d];
+        m(e) || (e = {}, this.a[d] = e);
+        d = e[c];
+        m(d) || (d = new Im[c](this.q, this.d, this.i), e[c] = d);
+        return d
+    };
+    Fm.prototype.la = function() {
+        return xb(this.a)
+    };
+
+    function Jm(a, c, d, e, f, g) {
+        var h = Ua(tb(a.a), Number);
+        gb(h);
+        var k = a.d,
+            n = k[0],
+            p = k[1],
+            q = k[2],
+            k = k[3],
+            n = [n, p, n, k, q, k, q, p];
+        vk(n, 0, 8, 2, e, n);
+        c.save();
+        c.beginPath();
+        c.moveTo(n[0], n[1]);
+        c.lineTo(n[2], n[3]);
+        c.lineTo(n[4], n[5]);
+        c.lineTo(n[6], n[7]);
+        c.closePath();
+        c.clip();
+        for (var r, t, n = 0, p = h.length; n < p; ++n)
+            for (r = a.a[h[n].toString()], q = 0, k = pm.length; q < k; ++q) t = r[pm[q]], m(t) && tm(t, c, d, e, f, g, t.a, void 0);
+        c.restore()
+    }
+
+    function Hm(a, c, d, e, f, g, h) {
+        var k = Ua(tb(a.a), Number);
+        gb(k, function(a, c) {
+            return c - a
+        });
+        var n, p, q, r, t;
+        n = 0;
+        for (p = k.length; n < p; ++n)
+            for (r = a.a[k[n].toString()], q = pm.length - 1; 0 <= q; --q)
+                if (t = r[pm[q]], m(t) && (t = tm(t, c, 1, d, e, f, t.b, g, h))) return t
+    }
+    var Im = {
+        Image: xm,
+        LineString: ym,
+        Polygon: Bm,
+        Text: Em
+    };
+
+    function Km(a) {
+        uj.call(this, a);
+        this.J = zd()
+    }
+    w(Km, uj);
+    Km.prototype.o = function(a, c, d) {
+        Lm(this, "precompose", d, a, void 0);
+        var e = this.fe();
+        if (null !== e) {
+            var f = c.extent,
+                g = m(f);
+            if (g) {
+                var h = a.pixelRatio,
+                    k = be(f),
+                    n = ae(f),
+                    p = $d(f),
+                    f = Zd(f);
+                sj(a.coordinateToPixelMatrix, k, k);
+                sj(a.coordinateToPixelMatrix, n, n);
+                sj(a.coordinateToPixelMatrix, p, p);
+                sj(a.coordinateToPixelMatrix, f, f);
+                d.save();
+                d.beginPath();
+                d.moveTo(k[0] * h, k[1] * h);
+                d.lineTo(n[0] * h, n[1] * h);
+                d.lineTo(p[0] * h, p[1] * h);
+                d.lineTo(f[0] * h, f[1] * h);
+                d.clip()
+            }
+            h = this.Xf();
+            k = d.globalAlpha;
+            d.globalAlpha = c.opacity;
+            0 === a.viewState.rotation ? (c = h[13], n = e.width * h[0], p = e.height * h[5], d.drawImage(e, 0, 0, +e.width, +e.height, Math.round(h[12]), Math.round(c), Math.round(n), Math.round(p))) : (d.setTransform(h[0], h[1], h[4], h[5], h[12], h[13]), d.drawImage(e, 0, 0), d.setTransform(1, 0, 0, 1, 0, 0));
+            d.globalAlpha = k;
+            g && d.restore()
+        }
+        Lm(this, "postcompose", d, a, void 0)
+    };
+
+    function Lm(a, c, d, e, f) {
+        var g = a.a;
+        bd(g, c) && (a = m(f) ? f : Mm(a, e, 0), a = new cm(d, e.pixelRatio, e.extent, a, e.viewState.rotation), g.dispatchEvent(new il(c, g, a, null, e, d, null)), om(a))
+    }
+
+    function Mm(a, c, d) {
+        var e = c.viewState,
+            f = c.pixelRatio;
+        return qj(a.J, f * c.size[0] / 2, f * c.size[1] / 2, f / e.resolution, -f / e.resolution, -e.rotation, -e.center[0] + d, -e.center[1])
+    }
+
+    function Nm(a, c) {
+        var d = [0, 0];
+        sj(c, a, d);
+        return d
+    }
+    var Om = function() {
+        var a = null,
+            c = null;
+        return function(d) {
+            if (null === a) {
+                a = ai(1, 1);
+                c = a.createImageData(1, 1);
+                var e = c.data;
+                e[0] = 42;
+                e[1] = 84;
+                e[2] = 126;
+                e[3] = 255
+            }
+            var e = a.canvas,
+                f = d[0] <= e.width && d[1] <= e.height;
+            f || (e.width = d[0], e.height = d[1], e = d[0] - 1, d = d[1] - 1, a.putImageData(c, e, d), d = a.getImageData(e, d, 1, 1), f = ib(c.data, d.data));
+            return f
+        }
+    }();
+
+    function Pm(a, c, d) {
+        wk.call(this);
+        this.uh(a, m(c) ? c : 0, d)
+    }
+    w(Pm, wk);
+    l = Pm.prototype;
+    l.clone = function() {
+        var a = new Pm(null);
+        yk(a, this.a, this.j.slice());
+        a.k();
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        var f = this.j;
+        a -= f[0];
+        var g = c - f[1];
+        c = a * a + g * g;
+        if (c < e) {
+            if (0 === c)
+                for (e = 0; e < this.s; ++e) d[e] = f[e];
+            else
+                for (e = this.zg() / Math.sqrt(c), d[0] = f[0] + e * a, d[1] = f[1] + e * g, e = 2; e < this.s; ++e) d[e] = f[e];
+            d.length = this.s;
+            return c
+        }
+        return e
+    };
+    l.Jb = function(a, c) {
+        var d = this.j,
+            e = a - d[0],
+            d = c - d[1];
+        return e * e + d * d <= Qm(this)
+    };
+    l.dd = function() {
+        return this.j.slice(0, this.s)
+    };
+    l.wd = function(a) {
+        var c = this.j,
+            d = c[this.s] - c[0];
+        return Nd(c[0] - d, c[1] - d, c[0] + d, c[1] + d, a)
+    };
+    l.zg = function() {
+        return Math.sqrt(Qm(this))
+    };
+
+    function Qm(a) {
+        var c = a.j[a.s] - a.j[0];
+        a = a.j[a.s + 1] - a.j[1];
+        return c * c + a * a
+    }
+    l.M = function() {
+        return "Circle"
+    };
+    l.pl = function(a) {
+        var c = this.s,
+            d = a.slice();
+        d[c] = d[0] + (this.j[c] - this.j[0]);
+        var e;
+        for (e = 1; e < c; ++e) d[c + e] = a[e];
+        yk(this, this.a, d);
+        this.k()
+    };
+    l.uh = function(a, c, d) {
+        if (null === a) yk(this, "XY", null);
+        else {
+            zk(this, d, a, 0);
+            null === this.j && (this.j = []);
+            d = this.j;
+            a = Jk(d, a);
+            d[a++] = d[0] + c;
+            var e;
+            c = 1;
+            for (e = this.s; c < e; ++c) d[a++] = d[c];
+            d.length = a
+        }
+        this.k()
+    };
+    l.Ag = function(a) {
+        this.j[this.s] = this.j[0] + a;
+        this.k()
+    };
+
+    function Rm(a) {
+        uk.call(this);
+        this.d = m(a) ? a : null;
+        Sm(this)
+    }
+    w(Rm, uk);
+
+    function Tm(a) {
+        var c = [],
+            d, e;
+        d = 0;
+        for (e = a.length; d < e; ++d) c.push(a[d].clone());
+        return c
+    }
+
+    function Um(a) {
+        var c, d;
+        if (null !== a.d)
+            for (c = 0, d = a.d.length; c < d; ++c) Vc(a.d[c], "change", a.k, !1, a)
+    }
+
+    function Sm(a) {
+        var c, d;
+        if (null !== a.d)
+            for (c = 0, d = a.d.length; c < d; ++c) x(a.d[c], "change", a.k, !1, a)
+    }
+    l = Rm.prototype;
+    l.clone = function() {
+        var a = new Rm(null);
+        a.xh(this.d);
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        if (e < Qd(this.G(), a, c)) return e;
+        var f = this.d,
+            g, h;
+        g = 0;
+        for (h = f.length; g < h; ++g) e = f[g].Sa(a, c, d, e);
+        return e
+    };
+    l.Jb = function(a, c) {
+        var d = this.d,
+            e, f;
+        e = 0;
+        for (f = d.length; e < f; ++e)
+            if (d[e].Jb(a, c)) return !0;
+        return !1
+    };
+    l.wd = function(a) {
+        Nd(Infinity, Infinity, -Infinity, -Infinity, a);
+        for (var c = this.d, d = 0, e = c.length; d < e; ++d) Wd(a, c[d].G());
+        return a
+    };
+    l.Vf = function() {
+        return Tm(this.d)
+    };
+    l.Ve = function(a) {
+        this.l != this.b && (yb(this.f), this.g = 0, this.l = this.b);
+        if (0 > a || 0 !== this.g && a < this.g) return this;
+        var c = a.toString();
+        if (this.f.hasOwnProperty(c)) return this.f[c];
+        var d = [],
+            e = this.d,
+            f = !1,
+            g, h;
+        g = 0;
+        for (h = e.length; g < h; ++g) {
+            var k = e[g],
+                n = k.Ve(a);
+            d.push(n);
+            n !== k && (f = !0)
+        }
+        if (f) return a = new Rm(null), Um(a), a.d = d, Sm(a), a.k(), this.f[c] = a;
+        this.g = a;
+        return this
+    };
+    l.M = function() {
+        return "GeometryCollection"
+    };
+    l.ra = function(a) {
+        var c = this.d,
+            d, e;
+        d = 0;
+        for (e = c.length; d < e; ++d)
+            if (c[d].ra(a)) return !0;
+        return !1
+    };
+    l.la = function() {
+        return 0 == this.d.length
+    };
+    l.xh = function(a) {
+        a = Tm(a);
+        Um(this);
+        this.d = a;
+        Sm(this);
+        this.k()
+    };
+    l.qa = function(a) {
+        var c = this.d,
+            d, e;
+        d = 0;
+        for (e = c.length; d < e; ++d) c[d].qa(a);
+        this.k()
+    };
+    l.Oa = function(a, c) {
+        var d = this.d,
+            e, f;
+        e = 0;
+        for (f = d.length; e < f; ++e) d[e].Oa(a, c);
+        this.k()
+    };
+    l.O = function() {
+        Um(this);
+        Rm.S.O.call(this)
+    };
+
+    function Vm(a, c, d, e, f) {
+        var g = NaN,
+            h = NaN,
+            k = (d - c) / e;
+        if (0 !== k)
+            if (1 == k) g = a[c], h = a[c + 1];
+            else if (2 == k) g = .5 * a[c] + .5 * a[c + e], h = .5 * a[c + 1] + .5 * a[c + e + 1];
+        else {
+            var h = a[c],
+                k = a[c + 1],
+                n = 0,
+                g = [0],
+                p;
+            for (p = c + e; p < d; p += e) {
+                var q = a[p],
+                    r = a[p + 1],
+                    n = n + Math.sqrt((q - h) * (q - h) + (r - k) * (r - k));
+                g.push(n);
+                h = q;
+                k = r
+            }
+            d = .5 * n;
+            for (var t, h = hb, k = 0, n = g.length; k < n;) p = k + n >> 1, q = h(d, g[p]), 0 < q ? k = p + 1 : (n = p, t = !q);
+            t = t ? k : ~k;
+            0 > t ? (d = (d - g[-t - 2]) / (g[-t - 1] - g[-t - 2]), c += (-t - 2) * e, g = Xb(a[c], a[c + e], d), h = Xb(a[c + 1], a[c + e + 1], d)) : (g = a[c + t * e], h = a[c + t * e + 1])
+        }
+        return null != f ? (f[0] = g, f[1] = h, f) : [g, h]
+    }
+
+    function Wm(a, c, d, e, f, g) {
+        if (d == c) return null;
+        if (f < a[c + e - 1]) return g ? (d = a.slice(c, c + e), d[e - 1] = f, d) : null;
+        if (a[d - 1] < f) return g ? (d = a.slice(d - e, d), d[e - 1] = f, d) : null;
+        if (f == a[c + e - 1]) return a.slice(c, c + e);
+        c /= e;
+        for (d /= e; c < d;) g = c + d >> 1, f < a[(g + 1) * e - 1] ? d = g : c = g + 1;
+        d = a[c * e - 1];
+        if (f == d) return a.slice((c - 1) * e, (c - 1) * e + e);
+        g = (f - d) / (a[(c + 1) * e - 1] - d);
+        d = [];
+        var h;
+        for (h = 0; h < e - 1; ++h) d.push(Xb(a[(c - 1) * e + h], a[c * e + h], g));
+        d.push(f);
+        return d
+    }
+
+    function Xm(a, c, d, e, f, g) {
+        var h = 0;
+        if (g) return Wm(a, h, c[c.length - 1], d, e, f);
+        if (e < a[d - 1]) return f ? (a = a.slice(0, d), a[d - 1] = e, a) : null;
+        if (a[a.length - 1] < e) return f ? (a = a.slice(a.length - d), a[d - 1] = e, a) : null;
+        f = 0;
+        for (g = c.length; f < g; ++f) {
+            var k = c[f];
+            if (h != k) {
+                if (e < a[h + d - 1]) break;
+                if (e <= a[k - 1]) return Wm(a, h, k, d, e, !1);
+                h = k
+            }
+        }
+        return null
+    };
+
+    function O(a, c) {
+        wk.call(this);
+        this.c = null;
+        this.p = this.H = this.i = -1;
+        this.W(a, c)
+    }
+    w(O, wk);
+    l = O.prototype;
+    l.ui = function(a) {
+        null === this.j ? this.j = a.slice() : db(this.j, a);
+        this.k()
+    };
+    l.clone = function() {
+        var a = new O(null);
+        Ym(a, this.a, this.j.slice());
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        if (e < Qd(this.G(), a, c)) return e;
+        this.p != this.b && (this.H = Math.sqrt(Fk(this.j, 0, this.j.length, this.s, 0)), this.p = this.b);
+        return Hk(this.j, 0, this.j.length, this.s, this.H, !1, a, c, d, e)
+    };
+    l.Ji = function(a, c) {
+        return Xk(this.j, 0, this.j.length, this.s, a, c)
+    };
+    l.ql = function(a, c) {
+        return "XYM" != this.a && "XYZM" != this.a ? null : Wm(this.j, 0, this.j.length, this.s, a, m(c) ? c : !1)
+    };
+    l.K = function() {
+        return Mk(this.j, 0, this.j.length, this.s)
+    };
+    l.Bg = function() {
+        var a = this.j,
+            c = this.s,
+            d = a[0],
+            e = a[1],
+            f = 0,
+            g;
+        for (g = 0 + c; g < this.j.length; g += c) var h = a[g],
+            k = a[g + 1],
+            f = f + Math.sqrt((h - d) * (h - d) + (k - e) * (k - e)),
+            d = h,
+            e = k;
+        return f
+    };
+
+    function km(a) {
+        a.i != a.b && (a.c = Vm(a.j, 0, a.j.length, a.s, a.c), a.i = a.b);
+        return a.c
+    }
+    l.xc = function(a) {
+        var c = [];
+        c.length = Ok(this.j, 0, this.j.length, this.s, a, c, 0);
+        a = new O(null);
+        Ym(a, "XY", c);
+        return a
+    };
+    l.M = function() {
+        return "LineString"
+    };
+    l.ra = function(a) {
+        return Yk(this.j, 0, this.j.length, this.s, a)
+    };
+    l.W = function(a, c) {
+        null === a ? Ym(this, "XY", null) : (zk(this, c, a, 1), null === this.j && (this.j = []), this.j.length = Kk(this.j, 0, a, this.s), this.k())
+    };
+
+    function Ym(a, c, d) {
+        yk(a, c, d);
+        a.k()
+    };
+
+    function Q(a, c) {
+        wk.call(this);
+        this.c = [];
+        this.i = this.p = -1;
+        this.W(a, c)
+    }
+    w(Q, wk);
+    l = Q.prototype;
+    l.vi = function(a) {
+        null === this.j ? this.j = a.j.slice() : db(this.j, a.j.slice());
+        this.c.push(this.j.length);
+        this.k()
+    };
+    l.clone = function() {
+        var a = new Q(null);
+        Zm(a, this.a, this.j.slice(), this.c.slice());
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        if (e < Qd(this.G(), a, c)) return e;
+        this.i != this.b && (this.p = Math.sqrt(Gk(this.j, 0, this.c, this.s, 0)), this.i = this.b);
+        return Ik(this.j, 0, this.c, this.s, this.p, !1, a, c, d, e)
+    };
+    l.sl = function(a, c, d) {
+        return "XYM" != this.a && "XYZM" != this.a || 0 === this.j.length ? null : Xm(this.j, this.c, this.s, a, m(c) ? c : !1, m(d) ? d : !1)
+    };
+    l.K = function() {
+        return Nk(this.j, 0, this.c, this.s)
+    };
+    l.gj = function(a) {
+        if (0 > a || this.c.length <= a) return null;
+        var c = new O(null);
+        Ym(c, this.a, this.j.slice(0 === a ? 0 : this.c[a - 1], this.c[a]));
+        return c
+    };
+    l.ad = function() {
+        var a = this.j,
+            c = this.c,
+            d = this.a,
+            e = [],
+            f = 0,
+            g, h;
+        g = 0;
+        for (h = c.length; g < h; ++g) {
+            var k = c[g],
+                n = new O(null);
+            Ym(n, d, a.slice(f, k));
+            e.push(n);
+            f = k
+        }
+        return e
+    };
+
+    function lm(a) {
+        var c = [],
+            d = a.j,
+            e = 0,
+            f = a.c;
+        a = a.s;
+        var g, h;
+        g = 0;
+        for (h = f.length; g < h; ++g) {
+            var k = f[g],
+                e = Vm(d, e, k, a);
+            db(c, e);
+            e = k
+        }
+        return c
+    }
+    l.xc = function(a) {
+        var c = [],
+            d = [],
+            e = this.j,
+            f = this.c,
+            g = this.s,
+            h = 0,
+            k = 0,
+            n, p;
+        n = 0;
+        for (p = f.length; n < p; ++n) {
+            var q = f[n],
+                k = Ok(e, h, q, g, a, c, k);
+            d.push(k);
+            h = q
+        }
+        c.length = k;
+        a = new Q(null);
+        Zm(a, "XY", c, d);
+        return a
+    };
+    l.M = function() {
+        return "MultiLineString"
+    };
+    l.ra = function(a) {
+        a: {
+            var c = this.j,
+                d = this.c,
+                e = this.s,
+                f = 0,
+                g, h;g = 0;
+            for (h = d.length; g < h; ++g) {
+                if (Yk(c, f, d[g], e, a)) {
+                    a = !0;
+                    break a
+                }
+                f = d[g]
+            }
+            a = !1
+        }
+        return a
+    };
+    l.W = function(a, c) {
+        if (null === a) Zm(this, "XY", null, this.c);
+        else {
+            zk(this, c, a, 2);
+            null === this.j && (this.j = []);
+            var d = Lk(this.j, 0, a, this.s, this.c);
+            this.j.length = 0 === d.length ? 0 : d[d.length - 1];
+            this.k()
+        }
+    };
+
+    function Zm(a, c, d, e) {
+        yk(a, c, d);
+        a.c = e;
+        a.k()
+    }
+
+    function $m(a, c) {
+        var d = "XY",
+            e = [],
+            f = [],
+            g, h;
+        g = 0;
+        for (h = c.length; g < h; ++g) {
+            var k = c[g];
+            0 === g && (d = k.a);
+            db(e, k.j);
+            f.push(e.length)
+        }
+        Zm(a, d, e, f)
+    };
+
+    function an(a, c) {
+        wk.call(this);
+        this.W(a, c)
+    }
+    w(an, wk);
+    l = an.prototype;
+    l.xi = function(a) {
+        null === this.j ? this.j = a.j.slice() : db(this.j, a.j);
+        this.k()
+    };
+    l.clone = function() {
+        var a = new an(null);
+        yk(a, this.a, this.j.slice());
+        a.k();
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        if (e < Qd(this.G(), a, c)) return e;
+        var f = this.j,
+            g = this.s,
+            h, k, n;
+        h = 0;
+        for (k = f.length; h < k; h += g)
+            if (n = Dk(a, c, f[h], f[h + 1]), n < e) {
+                e = n;
+                for (n = 0; n < g; ++n) d[n] = f[h + n];
+                d.length = g
+            }
+        return e
+    };
+    l.K = function() {
+        return Mk(this.j, 0, this.j.length, this.s)
+    };
+    l.qj = function(a) {
+        var c = null === this.j ? 0 : this.j.length / this.s;
+        if (0 > a || c <= a) return null;
+        c = new E(null);
+        Sk(c, this.a, this.j.slice(a * this.s, (a + 1) * this.s));
+        return c
+    };
+    l.ce = function() {
+        var a = this.j,
+            c = this.a,
+            d = this.s,
+            e = [],
+            f, g;
+        f = 0;
+        for (g = a.length; f < g; f += d) {
+            var h = new E(null);
+            Sk(h, c, a.slice(f, f + d));
+            e.push(h)
+        }
+        return e
+    };
+    l.M = function() {
+        return "MultiPoint"
+    };
+    l.ra = function(a) {
+        var c = this.j,
+            d = this.s,
+            e, f, g, h;
+        e = 0;
+        for (f = c.length; e < f; e += d)
+            if (g = c[e], h = c[e + 1], Sd(a, g, h)) return !0;
+        return !1
+    };
+    l.W = function(a, c) {
+        null === a ? yk(this, "XY", null) : (zk(this, c, a, 1), null === this.j && (this.j = []), this.j.length = Kk(this.j, 0, a, this.s));
+        this.k()
+    };
+
+    function R(a, c) {
+        wk.call(this);
+        this.c = [];
+        this.p = -1;
+        this.H = null;
+        this.N = this.J = this.L = -1;
+        this.i = null;
+        this.W(a, c)
+    }
+    w(R, wk);
+    l = R.prototype;
+    l.yi = function(a) {
+        if (null === this.j) this.j = a.j.slice(), a = a.c.slice(), this.c.push();
+        else {
+            var c = this.j.length;
+            db(this.j, a.j);
+            a = a.c.slice();
+            var d, e;
+            d = 0;
+            for (e = a.length; d < e; ++d) a[d] += c
+        }
+        this.c.push(a);
+        this.k()
+    };
+    l.clone = function() {
+        var a = new R(null);
+        bn(a, this.a, this.j.slice(), this.c.slice());
+        return a
+    };
+    l.Sa = function(a, c, d, e) {
+        if (e < Qd(this.G(), a, c)) return e;
+        if (this.J != this.b) {
+            var f = this.c,
+                g = 0,
+                h = 0,
+                k, n;
+            k = 0;
+            for (n = f.length; k < n; ++k) var p = f[k],
+                h = Gk(this.j, g, p, this.s, h),
+                g = p[p.length - 1];
+            this.L = Math.sqrt(h);
+            this.J = this.b
+        }
+        f = mm(this);
+        g = this.c;
+        h = this.s;
+        k = this.L;
+        n = 0;
+        var p = m(void 0) ? void 0 : [NaN, NaN],
+            q, r;
+        q = 0;
+        for (r = g.length; q < r; ++q) {
+            var t = g[q];
+            e = Ik(f, n, t, h, k, !0, a, c, d, e, p);
+            n = t[t.length - 1]
+        }
+        return e
+    };
+    l.Jb = function(a, c) {
+        var d;
+        a: {
+            d = mm(this);
+            var e = this.c,
+                f = 0;
+            if (0 !== e.length) {
+                var g, h;
+                g = 0;
+                for (h = e.length; g < h; ++g) {
+                    var k = e[g];
+                    if (Vk(d, f, k, this.s, a, c)) {
+                        d = !0;
+                        break a
+                    }
+                    f = k[k.length - 1]
+                }
+            }
+            d = !1
+        }
+        return d
+    };
+    l.tl = function() {
+        var a = mm(this),
+            c = this.c,
+            d = 0,
+            e = 0,
+            f, g;
+        f = 0;
+        for (g = c.length; f < g; ++f) var h = c[f],
+            e = e + Bk(a, d, h, this.s),
+            d = h[h.length - 1];
+        return e
+    };
+    l.K = function(a) {
+        var c;
+        m(a) ? (c = mm(this).slice(), cl(c, this.c, this.s, a)) : c = this.j;
+        a = c;
+        c = this.c;
+        var d = this.s,
+            e = 0,
+            f = m(void 0) ? void 0 : [],
+            g = 0,
+            h, k;
+        h = 0;
+        for (k = c.length; h < k; ++h) {
+            var n = c[h];
+            f[g++] = Nk(a, e, n, d, f[g]);
+            e = n[n.length - 1]
+        }
+        f.length = g;
+        return f
+    };
+
+    function nm(a) {
+        if (a.p != a.b) {
+            var c = a.j,
+                d = a.c,
+                e = a.s,
+                f = 0,
+                g = [],
+                h, k, n = Kd();
+            h = 0;
+            for (k = d.length; h < k; ++h) {
+                var p = d[h],
+                    n = Xd(Nd(Infinity, Infinity, -Infinity, -Infinity, void 0), c, f, p[0], e);
+                g.push((n[0] + n[2]) / 2, (n[1] + n[3]) / 2);
+                f = p[p.length - 1]
+            }
+            c = mm(a);
+            d = a.c;
+            e = a.s;
+            f = 0;
+            h = [];
+            k = 0;
+            for (n = d.length; k < n; ++k) p = d[k], h = Wk(c, f, p, e, g, 2 * k, h), f = p[p.length - 1];
+            a.H = h;
+            a.p = a.b
+        }
+        return a.H
+    }
+    l.dj = function() {
+        var a = new an(null),
+            c = nm(this).slice();
+        yk(a, "XY", c);
+        a.k();
+        return a
+    };
+
+    function mm(a) {
+        if (a.N != a.b) {
+            var c = a.j,
+                d;
+            a: {
+                d = a.c;
+                var e, f;e = 0;
+                for (f = d.length; e < f; ++e)
+                    if (!al(c, d[e], a.s, void 0)) {
+                        d = !1;
+                        break a
+                    }
+                d = !0
+            }
+            d ? a.i = c : (a.i = c.slice(), a.i.length = cl(a.i, a.c, a.s));
+            a.N = a.b
+        }
+        return a.i
+    }
+    l.xc = function(a) {
+        var c = [],
+            d = [],
+            e = this.j,
+            f = this.c,
+            g = this.s;
+        a = Math.sqrt(a);
+        var h = 0,
+            k = 0,
+            n, p;
+        n = 0;
+        for (p = f.length; n < p; ++n) {
+            var q = f[n],
+                r = [],
+                k = Pk(e, h, q, g, a, c, k, r);
+            d.push(r);
+            h = q[q.length - 1]
+        }
+        c.length = k;
+        e = new R(null);
+        bn(e, "XY", c, d);
+        return e
+    };
+    l.sj = function(a) {
+        if (0 > a || this.c.length <= a) return null;
+        var c;
+        0 === a ? c = 0 : (c = this.c[a - 1], c = c[c.length - 1]);
+        a = this.c[a].slice();
+        var d = a[a.length - 1];
+        if (0 !== c) {
+            var e, f;
+            e = 0;
+            for (f = a.length; e < f; ++e) a[e] -= c
+        }
+        e = new F(null);
+        dl(e, this.a, this.j.slice(c, d), a);
+        return e
+    };
+    l.Id = function() {
+        var a = this.a,
+            c = this.j,
+            d = this.c,
+            e = [],
+            f = 0,
+            g, h, k, n;
+        g = 0;
+        for (h = d.length; g < h; ++g) {
+            var p = d[g].slice(),
+                q = p[p.length - 1];
+            if (0 !== f)
+                for (k = 0, n = p.length; k < n; ++k) p[k] -= f;
+            k = new F(null);
+            dl(k, a, c.slice(f, q), p);
+            e.push(k);
+            f = q
+        }
+        return e
+    };
+    l.M = function() {
+        return "MultiPolygon"
+    };
+    l.ra = function(a) {
+        a: {
+            var c = mm(this),
+                d = this.c,
+                e = this.s,
+                f = 0,
+                g, h;g = 0;
+            for (h = d.length; g < h; ++g) {
+                var k = d[g];
+                if (Zk(c, f, k, e, a)) {
+                    a = !0;
+                    break a
+                }
+                f = k[k.length - 1]
+            }
+            a = !1
+        }
+        return a
+    };
+    l.W = function(a, c) {
+        if (null === a) bn(this, "XY", null, this.c);
+        else {
+            zk(this, c, a, 3);
+            null === this.j && (this.j = []);
+            var d = this.j,
+                e = this.s,
+                f = this.c,
+                g = 0,
+                f = m(f) ? f : [],
+                h = 0,
+                k, n;
+            k = 0;
+            for (n = a.length; k < n; ++k) g = Lk(d, g, a[k], e, f[h]), f[h++] = g, g = g[g.length - 1];
+            f.length = h;
+            0 === f.length ? this.j.length = 0 : (d = f[f.length - 1], this.j.length = 0 === d.length ? 0 : d[d.length - 1]);
+            this.k()
+        }
+    };
+
+    function bn(a, c, d, e) {
+        yk(a, c, d);
+        a.c = e;
+        a.k()
+    }
+
+    function cn(a, c) {
+        var d = "XY",
+            e = [],
+            f = [],
+            g, h, k;
+        g = 0;
+        for (h = c.length; g < h; ++g) {
+            var n = c[g];
+            0 === g && (d = n.a);
+            var p = e.length;
+            k = n.c;
+            var q, r;
+            q = 0;
+            for (r = k.length; q < r; ++q) k[q] += p;
+            db(e, n.j);
+            f.push(k)
+        }
+        bn(a, d, e, f)
+    };
+
+    function dn(a, c) {
+        return ma(a) - ma(c)
+    }
+
+    function en(a, c) {
+        var d = .5 * a / c;
+        return d * d
+    }
+
+    function fn(a, c, d, e, f, g) {
+        var h = !1,
+            k, n;
+        k = d.f;
+        null !== k && (n = k.gd(), 2 == n || 3 == n ? k.xf(f, g) : (0 == n && k.load(), k.$e(f, g), h = !0));
+        f = (0, d.d)(c);
+        null != f && (e = f.Ve(e), (0, gn[e.M()])(a, e, d, c));
+        return h
+    }
+    var gn = {
+        Point: function(a, c, d, e) {
+            var f = d.f;
+            if (null !== f) {
+                if (2 != f.gd()) return;
+                var g = a.b(d.b, "Image");
+                g.Za(f);
+                g.kb(c, e)
+            }
+            f = d.a;
+            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), a.lb(c.K(), 0, 2, 2, c, e))
+        },
+        LineString: function(a, c, d, e) {
+            var f = d.c;
+            if (null !== f) {
+                var g = a.b(d.b, "LineString");
+                g.Aa(null, f);
+                g.zb(c, e)
+            }
+            f = d.a;
+            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), a.lb(km(c), 0, 2, 2, c, e))
+        },
+        Polygon: function(a, c, d, e) {
+            var f = d.e,
+                g = d.c;
+            if (null !== f || null !== g) {
+                var h = a.b(d.b, "Polygon");
+                h.Aa(f, g);
+                h.Rb(c, e)
+            }
+            f = d.a;
+            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), a.lb(fl(c), 0, 2, 2, c, e))
+        },
+        MultiPoint: function(a, c, d, e) {
+            var f = d.f;
+            if (null !== f) {
+                if (2 != f.gd()) return;
+                var g = a.b(d.b, "Image");
+                g.Za(f);
+                g.jb(c, e)
+            }
+            f = d.a;
+            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), d = c.j, a.lb(d, 0, d.length, c.s, c, e))
+        },
+        MultiLineString: function(a, c, d, e) {
+            var f = d.c;
+            if (null !== f) {
+                var g = a.b(d.b, "LineString");
+                g.Aa(null, f);
+                g.vc(c, e)
+            }
+            f = d.a;
+            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), d = lm(c), a.lb(d, 0, d.length, 2, c, e))
+        },
+        MultiPolygon: function(a, c, d, e) {
+            var f = d.e,
+                g = d.c;
+            if (null !== g || null !== f) {
+                var h = a.b(d.b, "Polygon");
+                h.Aa(f, g);
+                h.wc(c, e)
+            }
+            f = d.a;
+            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), d = nm(c), a.lb(d, 0, d.length, 2, c, e))
+        },
+        GeometryCollection: function(a, c, d, e) {
+            c = c.d;
+            var f, g;
+            f = 0;
+            for (g = c.length; f < g; ++f)(0, gn[c[f].M()])(a, c[f], d, e)
+        },
+        Circle: function(a, c, d, e) {
+            var f = d.e,
+                g = d.c;
+            if (null !== f || null !== g) {
+                var h = a.b(d.b, "Polygon");
+                h.Aa(f, g);
+                h.uc(c, e)
+            }
+            f = d.a;
+            null !== f && (a = a.b(d.b, "Text"), a.Ba(f), a.lb(c.dd(), 0, 2, 2, c, e))
+        }
+    };
+
+    function hn(a, c, d, e, f) {
+        pj.call(this, a, c, d, 2, e);
+        this.a = f
+    }
+    w(hn, pj);
+    hn.prototype.b = function() {
+        return this.a
+    };
+
+    function jn(a) {
+        Bg.call(this, {
+            attributions: a.attributions,
+            extent: a.extent,
+            logo: a.logo,
+            projection: a.projection,
+            state: a.state
+        });
+        this.l = m(a.resolutions) ? a.resolutions : null
+    }
+    w(jn, Bg);
+
+    function kn(a, c) {
+        if (null !== a.l) {
+            var d = ac(a.l, c, 0);
+            c = a.l[d]
+        }
+        return c
+    }
+    jn.prototype.i = function(a) {
+        a = a.target;
+        switch (a.state) {
+            case 1:
+                this.dispatchEvent(new ln(mn, a));
+                break;
+            case 2:
+                this.dispatchEvent(new ln(nn, a));
+                break;
+            case 3:
+                this.dispatchEvent(new ln(on, a))
+        }
+    };
+
+    function pn(a, c) {
+        a.b().src = c
+    }
+
+    function ln(a, c) {
+        rc.call(this, a);
+        this.image = c
+    }
+    w(ln, rc);
+    var mn = "imageloadstart",
+        nn = "imageloadend",
+        on = "imageloaderror";
+
+    function qn(a) {
+        jn.call(this, {
+            attributions: a.attributions,
+            logo: a.logo,
+            projection: a.projection,
+            resolutions: a.resolutions,
+            state: m(a.state) ? a.state : void 0
+        });
+        this.T = a.canvasFunction;
+        this.J = null;
+        this.N = 0;
+        this.X = m(a.ratio) ? a.ratio : 1.5
+    }
+    w(qn, jn);
+    qn.prototype.Cc = function(a, c, d, e) {
+        c = kn(this, c);
+        var f = this.J;
+        if (null !== f && this.N == this.b && f.resolution == c && f.e == d && Rd(f.G(), a)) return f;
+        a = a.slice();
+        ke(a, this.X);
+        e = this.T(a, c, d, [ie(a) / c * d, fe(a) / c * d], e);
+        null === e || (f = new hn(a, c, d, this.d, e));
+        this.J = f;
+        this.N = this.b;
+        return f
+    };
+
+    function rn(a) {
+        a.prototype.then = a.prototype.then;
+        a.prototype.$goog_Thenable = !0
+    }
+
+    function sn(a) {
+        if (!a) return !1;
+        try {
+            return !!a.$goog_Thenable
+        } catch (c) {
+            return !1
+        }
+    };
+
+    function tn(a, c) {
+        un || vn();
+        wn || (un(), wn = !0);
+        xn.push(new yn(a, c))
+    }
+    var un;
+
+    function vn() {
+        if (ba.Promise && ba.Promise.resolve) {
+            var a = ba.Promise.resolve();
+            un = function() {
+                a.then(zn)
+            }
+        } else un = function() {
+            wh(zn)
+        }
+    }
+    var wn = !1,
+        xn = [];
+
+    function zn() {
+        for (; xn.length;) {
+            var a = xn;
+            xn = [];
+            for (var c = 0; c < a.length; c++) {
+                var d = a[c];
+                try {
+                    d.b.call(d.a)
+                } catch (e) {
+                    vh(e)
+                }
+            }
+        }
+        wn = !1
+    }
+
+    function yn(a, c) {
+        this.b = a;
+        this.a = c
+    };
+
+    function An(a, c) {
+        this.a = Bn;
+        this.f = void 0;
+        this.b = this.c = null;
+        this.d = this.e = !1;
+        try {
+            var d = this;
+            a.call(c, function(a) {
+                Cn(d, Dn, a)
+            }, function(a) {
+                Cn(d, En, a)
+            })
+        } catch (e) {
+            Cn(this, En, e)
+        }
+    }
+    var Bn = 0,
+        Dn = 2,
+        En = 3;
+    An.prototype.then = function(a, c, d) {
+        return Fn(this, ka(a) ? a : null, ka(c) ? c : null, d)
+    };
+    rn(An);
+    An.prototype.cancel = function(a) {
+        this.a == Bn && tn(function() {
+            var c = new Gn(a);
+            Hn(this, c)
+        }, this)
+    };
+
+    function Hn(a, c) {
+        if (a.a == Bn)
+            if (a.c) {
+                var d = a.c;
+                if (d.b) {
+                    for (var e = 0, f = -1, g = 0, h; h = d.b[g]; g++)
+                        if (h = h.Rc)
+                            if (e++, h == a && (f = g), 0 <= f && 1 < e) break;
+                    0 <= f && (d.a == Bn && 1 == e ? Hn(d, c) : (e = d.b.splice(f, 1)[0], In(d, e, En, c)))
+                }
+            } else Cn(a, En, c)
+    }
+
+    function Jn(a, c) {
+        a.b && a.b.length || a.a != Dn && a.a != En || Kn(a);
+        a.b || (a.b = []);
+        a.b.push(c)
+    }
+
+    function Fn(a, c, d, e) {
+        var f = {
+            Rc: null,
+            Wg: null,
+            Yg: null
+        };
+        f.Rc = new An(function(a, h) {
+            f.Wg = c ? function(d) {
+                try {
+                    var f = c.call(e, d);
+                    a(f)
+                } catch (p) {
+                    h(p)
+                }
+            } : a;
+            f.Yg = d ? function(c) {
+                try {
+                    var f = d.call(e, c);
+                    !m(f) && c instanceof Gn ? h(c) : a(f)
+                } catch (p) {
+                    h(p)
+                }
+            } : h
+        });
+        f.Rc.c = a;
+        Jn(a, f);
+        return f.Rc
+    }
+    An.prototype.g = function(a) {
+        this.a = Bn;
+        Cn(this, Dn, a)
+    };
+    An.prototype.i = function(a) {
+        this.a = Bn;
+        Cn(this, En, a)
+    };
+
+    function Cn(a, c, d) {
+        if (a.a == Bn) {
+            if (a == d) c = En, d = new TypeError("Promise cannot resolve to itself");
+            else {
+                if (sn(d)) {
+                    a.a = 1;
+                    d.then(a.g, a.i, a);
+                    return
+                }
+                if (la(d)) try {
+                    var e = d.then;
+                    if (ka(e)) {
+                        Ln(a, d, e);
+                        return
+                    }
+                } catch (f) {
+                    c = En, d = f
+                }
+            }
+            a.f = d;
+            a.a = c;
+            Kn(a);
+            c != En || d instanceof Gn || Mn(a, d)
+        }
+    }
+
+    function Ln(a, c, d) {
+        function e(c) {
+            g || (g = !0, a.i(c))
+        }
+
+        function f(c) {
+            g || (g = !0, a.g(c))
+        }
+        a.a = 1;
+        var g = !1;
+        try {
+            d.call(c, f, e)
+        } catch (h) {
+            e(h)
+        }
+    }
+
+    function Kn(a) {
+        a.e || (a.e = !0, tn(a.q, a))
+    }
+    An.prototype.q = function() {
+        for (; this.b && this.b.length;) {
+            var a = this.b;
+            this.b = [];
+            for (var c = 0; c < a.length; c++) In(this, a[c], this.a, this.f)
+        }
+        this.e = !1
+    };
+
+    function In(a, c, d, e) {
+        if (d == Dn) c.Wg(e);
+        else {
+            if (c.Rc)
+                for (; a && a.d; a = a.c) a.d = !1;
+            c.Yg(e)
+        }
+    }
+
+    function Mn(a, c) {
+        a.d = !0;
+        tn(function() {
+            a.d && Nn.call(null, c)
+        })
+    }
+    var Nn = vh;
+
+    function Gn(a) {
+        xa.call(this, a)
+    }
+    w(Gn, xa);
+    Gn.prototype.name = "cancel";
+
+    function On(a, c, d) {
+        if (ka(a)) d && (a = ra(a, d));
+        else if (a && "function" == typeof a.handleEvent) a = ra(a.handleEvent, a);
+        else throw Error("Invalid listener argument");
+        return 2147483647 < c ? -1 : ba.setTimeout(a, c || 0)
+    };
+    var Pn = ba.JSON.parse,
+        Qn = ba.JSON.stringify;
+
+    function Rn() {}
+    Rn.prototype.b = null;
+
+    function Sn(a) {
+        var c;
+        (c = a.b) || (c = {}, Tn(a) && (c[0] = !0, c[1] = !0), c = a.b = c);
+        return c
+    };
+    var Un;
+
+    function Vn() {}
+    w(Vn, Rn);
+
+    function Wn(a) {
+        return (a = Tn(a)) ? new ActiveXObject(a) : new XMLHttpRequest
+    }
+
+    function Tn(a) {
+        if (!a.a && "undefined" == typeof XMLHttpRequest && "undefined" != typeof ActiveXObject) {
+            for (var c = ["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"], d = 0; d < c.length; d++) {
+                var e = c[d];
+                try {
+                    return new ActiveXObject(e), a.a = e
+                } catch (f) {}
+            }
+            throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed");
+        }
+        return a.a
+    }
+    Un = new Vn;
+    var Xn = /^(?:([^:/?#.]+):)?(?:\/\/(?:([^/?#]*)@)?([^/#?]*?)(?::([0-9]+))?(?=[/#?]|$))?([^?#]+)?(?:\?([^#]*))?(?:#(.*))?$/;
+
+    function Yn(a) {
+        if (Zn) {
+            Zn = !1;
+            var c = ba.location;
+            if (c) {
+                var d = c.href;
+                if (d && (d = (d = Yn(d)[3] || null) ? decodeURI(d) : d) && d != c.hostname) throw Zn = !0, Error();
+            }
+        }
+        return a.match(Xn)
+    }
+    var Zn = Kb;
+
+    function $n(a, c) {
+        for (var d = a.split("&"), e = 0; e < d.length; e++) {
+            var f = d[e].indexOf("="),
+                g = null,
+                h = null;
+            0 <= f ? (g = d[e].substring(0, f), h = d[e].substring(f + 1)) : g = d[e];
+            c(g, h ? decodeURIComponent(h.replace(/\+/g, " ")) : "")
+        }
+    }
+
+    function ao(a) {
+        if (a[1]) {
+            var c = a[0],
+                d = c.indexOf("#");
+            0 <= d && (a.push(c.substr(d)), a[0] = c = c.substr(0, d));
+            d = c.indexOf("?");
+            0 > d ? a[1] = "?" : d == c.length - 1 && (a[1] = void 0)
+        }
+        return a.join("")
+    }
+
+    function bo(a, c, d) {
+        if (ga(c))
+            for (var e = 0; e < c.length; e++) bo(a, String(c[e]), d);
+        else null != c && d.push("&", a, "" === c ? "" : "=", encodeURIComponent(String(c)))
+    }
+
+    function co(a, c) {
+        for (var d in c) bo(d, c[d], a);
+        return a
+    };
+
+    function eo(a) {
+        $c.call(this);
+        this.H = new Ch;
+        this.i = a || null;
+        this.b = !1;
+        this.g = this.Y = null;
+        this.e = this.o = "";
+        this.a = this.l = this.d = this.q = !1;
+        this.f = 0;
+        this.c = null;
+        this.n = fo;
+        this.p = this.J = !1
+    }
+    w(eo, $c);
+    var fo = "",
+        go = /^https?$/i,
+        ho = ["POST", "PUT"];
+    l = eo.prototype;
+    l.send = function(a, c, d, e) {
+        if (this.Y) throw Error("[goog.net.XhrIo] Object is active with another request=" + this.o + "; newUri=" + a);
+        c = c ? c.toUpperCase() : "GET";
+        this.o = a;
+        this.e = "";
+        this.q = !1;
+        this.b = !0;
+        this.Y = this.i ? Wn(this.i) : Wn(Un);
+        this.g = this.i ? Sn(this.i) : Sn(Un);
+        this.Y.onreadystatechange = ra(this.Xg, this);
+        try {
+            this.l = !0, this.Y.open(c, String(a), !0), this.l = !1
+        } catch (f) {
+            io(this, f);
+            return
+        }
+        a = d || "";
+        var g = this.H.clone();
+        e && Bh(e, function(a, c) {
+            g.set(c, a)
+        });
+        e = Wa(g.C(), jo);
+        d = ba.FormData && a instanceof ba.FormData;
+        !Ya(ho, c) || e || d || g.set("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
+        g.forEach(function(a, c) {
+            this.Y.setRequestHeader(c, a)
+        }, this);
+        this.n && (this.Y.responseType = this.n);
+        "withCredentials" in this.Y && (this.Y.withCredentials = this.J);
+        try {
+            ko(this), 0 < this.f && ((this.p = lo(this.Y)) ? (this.Y.timeout = this.f, this.Y.ontimeout = ra(this.oc, this)) : this.c = On(this.oc, this.f, this)), this.d = !0, this.Y.send(a), this.d = !1
+        } catch (h) {
+            io(this, h)
+        }
+    };
+
+    function lo(a) {
+        return Ib && Rb(9) && ja(a.timeout) && m(a.ontimeout)
+    }
+
+    function jo(a) {
+        return "content-type" == a.toLowerCase()
+    }
+    l.oc = function() {
+        "undefined" != typeof aa && this.Y && (this.e = "Timed out after " + this.f + "ms, aborting", this.dispatchEvent("timeout"), this.Y && this.b && (this.b = !1, this.a = !0, this.Y.abort(), this.a = !1, this.dispatchEvent("complete"), this.dispatchEvent("abort"), mo(this)))
+    };
+
+    function io(a, c) {
+        a.b = !1;
+        a.Y && (a.a = !0, a.Y.abort(), a.a = !1);
+        a.e = c;
+        no(a);
+        mo(a)
+    }
+
+    function no(a) {
+        a.q || (a.q = !0, a.dispatchEvent("complete"), a.dispatchEvent("error"))
+    }
+    l.O = function() {
+        this.Y && (this.b && (this.b = !1, this.a = !0, this.Y.abort(), this.a = !1), mo(this, !0));
+        eo.S.O.call(this)
+    };
+    l.Xg = function() {
+        this.U || (this.l || this.d || this.a ? oo(this) : this.dn())
+    };
+    l.dn = function() {
+        oo(this)
+    };
+
+    function oo(a) {
+        if (a.b && "undefined" != typeof aa && (!a.g[1] || 4 != po(a) || 2 != qo(a)))
+            if (a.d && 4 == po(a)) On(a.Xg, 0, a);
+            else if (a.dispatchEvent("readystatechange"), 4 == po(a)) {
+            a.b = !1;
+            try {
+                if (ro(a)) a.dispatchEvent("complete"), a.dispatchEvent("success");
+                else {
+                    var c;
+                    try {
+                        c = 2 < po(a) ? a.Y.statusText : ""
+                    } catch (d) {
+                        c = ""
+                    }
+                    a.e = c + " [" + qo(a) + "]";
+                    no(a)
+                }
+            } finally {
+                mo(a)
+            }
+        }
+    }
+
+    function mo(a, c) {
+        if (a.Y) {
+            ko(a);
+            var d = a.Y,
+                e = a.g[0] ? ca : null;
+            a.Y = null;
+            a.g = null;
+            c || a.dispatchEvent("ready");
+            try {
+                d.onreadystatechange = e
+            } catch (f) {}
+        }
+    }
+
+    function ko(a) {
+        a.Y && a.p && (a.Y.ontimeout = null);
+        ja(a.c) && (ba.clearTimeout(a.c), a.c = null)
+    }
+
+    function ro(a) {
+        var c = qo(a),
+            d;
+        a: switch (c) {
+            case 200:
+            case 201:
+            case 202:
+            case 204:
+            case 206:
+            case 304:
+            case 1223:
+                d = !0;
+                break a;
+            default:
+                d = !1
+        }
+        if (!d) {
+            if (c = 0 === c) a = Yn(String(a.o))[1] || null, !a && self.location && (a = self.location.protocol, a = a.substr(0, a.length - 1)), c = !go.test(a ? a.toLowerCase() : "");
+            d = c
+        }
+        return d
+    }
+
+    function po(a) {
+        return a.Y ? a.Y.readyState : 0
+    }
+
+    function qo(a) {
+        try {
+            return 2 < po(a) ? a.Y.status : -1
+        } catch (c) {
+            return -1
+        }
+    }
+
+    function so(a) {
+        try {
+            return a.Y ? a.Y.responseText : ""
+        } catch (c) {
+            return ""
+        }
+    };
+
+    function to(a) {
+        if ("undefined" != typeof XMLSerializer) return (new XMLSerializer).serializeToString(a);
+        if (a = a.xml) return a;
+        throw Error("Your browser does not support serializing XML documents");
+    };
+    var uo;
+    a: if (document.implementation && document.implementation.createDocument) uo = document.implementation.createDocument("", "", null);
+        else {
+            if ("undefined" != typeof ActiveXObject) {
+                var vo = new ActiveXObject("MSXML2.DOMDocument");
+                if (vo) {
+                    vo.resolveExternals = !1;
+                    vo.validateOnParse = !1;
+                    try {
+                        vo.setProperty("ProhibitDTD", !0), vo.setProperty("MaxXMLSize", 2048), vo.setProperty("MaxElementDepth", 256)
+                    } catch (wo) {}
+                }
+                if (vo) {
+                    uo = vo;
+                    break a
+                }
+            }
+            throw Error("Your browser does not support creating new documents");
+        }
+    var xo = uo;
+
+    function yo(a, c) {
+        return xo.createElementNS(a, c)
+    }
+
+    function zo(a, c) {
+        null === a && (a = "");
+        return xo.createNode(1, c, a)
+    }
+    var Ao = document.implementation && document.implementation.createDocument ? yo : zo;
+
+    function Bo(a, c) {
+        return Co(a, c, []).join("")
+    }
+
+    function Co(a, c, d) {
+        if (4 == a.nodeType || 3 == a.nodeType) c ? d.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g, "")) : d.push(a.nodeValue);
+        else
+            for (a = a.firstChild; null !== a; a = a.nextSibling) Co(a, c, d);
+        return d
+    }
+
+    function Do(a) {
+        return a.localName
+    }
+
+    function Eo(a) {
+        var c = a.localName;
+        return m(c) ? c : a.baseName
+    }
+    var Fo = Ib ? Eo : Do;
+
+    function Go(a) {
+        return a instanceof Document
+    }
+
+    function Ho(a) {
+        return la(a) && 9 == a.nodeType
+    }
+    var Io = Ib ? Ho : Go;
+
+    function Jo(a) {
+        return a instanceof Node
+    }
+
+    function Ko(a) {
+        return la(a) && m(a.nodeType)
+    }
+    var Lo = Ib ? Ko : Jo;
+
+    function Mo(a, c, d) {
+        return a.getAttributeNS(c, d) || ""
+    }
+
+    function No(a, c, d) {
+        var e = "";
+        a = Oo(a, c, d);
+        m(a) && (e = a.nodeValue);
+        return e
+    }
+    var Po = document.implementation && document.implementation.createDocument ? Mo : No;
+
+    function Qo(a, c, d) {
+        return a.getAttributeNodeNS(c, d)
+    }
+
+    function Ro(a, c, d) {
+        var e = null;
+        a = a.attributes;
+        for (var f, g, h = 0, k = a.length; h < k; ++h)
+            if (f = a[h], f.namespaceURI == c && (g = f.prefix ? f.prefix + ":" + d : d, g == f.nodeName)) {
+                e = f;
+                break
+            }
+        return e
+    }
+    var Oo = document.implementation && document.implementation.createDocument ? Qo : Ro;
+
+    function So(a, c, d, e) {
+        a.setAttributeNS(c, d, e)
+    }
+
+    function To(a, c, d, e) {
+        null === c ? a.setAttribute(d, e) : (c = a.ownerDocument.createNode(2, d, c), c.nodeValue = e, a.setAttributeNode(c))
+    }
+    var Uo = document.implementation && document.implementation.createDocument ? So : To;
+
+    function Vo(a) {
+        return (new DOMParser).parseFromString(a, "application/xml")
+    }
+
+    function Wo(a, c) {
+        return function(d, e) {
+            var f = a.call(c, d, e);
+            m(f) && db(e[e.length - 1], f)
+        }
+    }
+
+    function Xo(a, c) {
+        return function(d, e) {
+            var f = a.call(m(c) ? c : this, d, e);
+            m(f) && e[e.length - 1].push(f)
+        }
+    }
+
+    function Yo(a, c) {
+        return function(d, e) {
+            var f = a.call(m(c) ? c : this, d, e);
+            m(f) && (e[e.length - 1] = f)
+        }
+    }
+
+    function Zo(a) {
+        return function(c, d) {
+            var e = a.call(m(void 0) ? void 0 : this, c, d);
+            m(e) && Cb(d[d.length - 1], m(void 0) ? void 0 : c.localName).push(e)
+        }
+    }
+
+    function S(a, c) {
+        return function(d, e) {
+            var f = a.call(m(void 0) ? void 0 : this, d, e);
+            m(f) && (e[e.length - 1][m(c) ? c : d.localName] = f)
+        }
+    }
+
+    function T(a, c, d) {
+        return $o(a, c, d)
+    }
+
+    function U(a, c) {
+        return function(d, e, f) {
+            a.call(m(c) ? c : this, d, e, f);
+            f[f.length - 1].P.appendChild(d)
+        }
+    }
+
+    function ap(a) {
+        var c, d;
+        return function(e, f, g) {
+            if (!m(c)) {
+                c = {};
+                var h = {};
+                h[e.localName] = a;
+                c[e.namespaceURI] = h;
+                d = bp(e.localName)
+            }
+            cp(c, d, f, g)
+        }
+    }
+
+    function bp(a, c) {
+        return function(d, e, f) {
+            d = e[e.length - 1].P;
+            e = a;
+            m(e) || (e = f);
+            f = c;
+            m(c) || (f = d.namespaceURI);
+            return Ao(f, e)
+        }
+    }
+    var dp = bp();
+
+    function ep(a, c) {
+        for (var d = c.length, e = Array(d), f = 0; f < d; ++f) e[f] = a[c[f]];
+        return e
+    }
+
+    function $o(a, c, d) {
+        d = m(d) ? d : {};
+        var e, f;
+        e = 0;
+        for (f = a.length; e < f; ++e) d[a[e]] = c;
+        return d
+    }
+
+    function fp(a, c, d, e) {
+        for (c = c.firstElementChild; null !== c; c = c.nextElementSibling) {
+            var f = a[c.namespaceURI];
+            m(f) && (f = f[c.localName], m(f) && f.call(e, c, d))
+        }
+    }
+
+    function V(a, c, d, e, f) {
+        e.push(a);
+        fp(c, d, e, f);
+        return e.pop()
+    }
+
+    function cp(a, c, d, e, f, g) {
+        for (var h = (m(f) ? f : d).length, k, n, p = 0; p < h; ++p) k = d[p], m(k) && (n = c.call(g, k, e, m(f) ? f[p] : void 0), m(n) && a[n.namespaceURI][n.localName].call(g, n, k, e))
+    }
+
+    function gp(a, c, d, e, f, g, h) {
+        f.push(a);
+        cp(c, d, e, f, g, h);
+        f.pop()
+    };
+
+    function hp(a, c, d) {
+        return function(e, f, g) {
+            e = new eo;
+            e.n = "text";
+            x(e, "complete", function(a) {
+                a = a.target;
+                if (ro(a)) {
+                    var e = c.M(),
+                        f;
+                    if ("json" == e) f = so(a);
+                    else if ("text" == e) f = so(a);
+                    else if ("xml" == e) {
+                        if (!Ib) try {
+                            f = a.Y ? a.Y.responseXML : null
+                        } catch (p) {
+                            f = null
+                        }
+                        null != f || (f = Vo(so(a)))
+                    }
+                    null != f && (f = c.ja(f, {
+                        featureProjection: g
+                    }), d.call(this, f))
+                }
+                qc(a)
+            }, !1, this);
+            e.send(a)
+        }
+    }
+
+    function ip(a, c) {
+        return hp(a, c, function(a) {
+            this.Oc(a)
+        })
+    };
+
+    function jp() {
+        return [
+            [-Infinity, -Infinity, Infinity, Infinity]
+        ]
+    };
+    var kp;
+    (function() {
+        var a = {
+            Qf: {}
+        };
+        (function() {
+            function c(a, d) {
+                if (!(this instanceof c)) return new c(a, d);
+                this.Fe = Math.max(4, a || 9);
+                this.Hf = Math.max(2, Math.ceil(.4 * this.Fe));
+                d && this.qi(d);
+                this.clear()
+            }
+
+            function d(a, c) {
+                a.bbox = e(a, 0, a.children.length, c)
+            }
+
+            function e(a, c, d, e) {
+                for (var g = [Infinity, Infinity, -Infinity, -Infinity], h; c < d; c++) h = a.children[c], f(g, a.wa ? e(h) : h.bbox);
+                return g
+            }
+
+            function f(a, c) {
+                a[0] = Math.min(a[0], c[0]);
+                a[1] = Math.min(a[1], c[1]);
+                a[2] = Math.max(a[2], c[2]);
+                a[3] = Math.max(a[3], c[3])
+            }
+
+            function g(a, c) {
+                return a.bbox[0] - c.bbox[0]
+            }
+
+            function h(a, c) {
+                return a.bbox[1] - c.bbox[1]
+            }
+
+            function k(a) {
+                return (a[2] - a[0]) * (a[3] - a[1])
+            }
+
+            function n(a) {
+                return a[2] - a[0] + (a[3] - a[1])
+            }
+
+            function p(a, c) {
+                return a[0] <= c[0] && a[1] <= c[1] && c[2] <= a[2] && c[3] <= a[3]
+            }
+
+            function q(a, c) {
+                return c[0] <= a[2] && c[1] <= a[3] && c[2] >= a[0] && c[3] >= a[1]
+            }
+
+            function r(a, c, d, e, f) {
+                for (var g = [c, d], h; g.length;) d = g.pop(), c = g.pop(), d - c <= e || (h = c + Math.ceil((d - c) / e / 2) * e, t(a, c, d, h, f), g.push(c, h, h, d))
+            }
+
+            function t(a, c, d, e, f) {
+                for (var g, h, k, n, p; d > c;) {
+                    600 < d - c && (g = d - c + 1, h = e - c + 1, k = Math.log(g), n = .5 * Math.exp(2 * k / 3), p = .5 * Math.sqrt(k * n * (g - n) / g) * (0 > h - g / 2 ? -1 : 1), k = Math.max(c, Math.floor(e - h * n / g + p)), h = Math.min(d, Math.floor(e + (g - h) * n / g + p)), t(a, k, h, e, f));
+                    g = a[e];
+                    h = c;
+                    n = d;
+                    u(a, c, e);
+                    for (0 < f(a[d], g) && u(a, c, d); h < n;) {
+                        u(a, h, n);
+                        h++;
+                        for (n--; 0 > f(a[h], g);) h++;
+                        for (; 0 < f(a[n], g);) n--
+                    }
+                    0 === f(a[c], g) ? u(a, c, n) : (n++, u(a, n, d));
+                    n <= e && (c = n + 1);
+                    e <= n && (d = n - 1)
+                }
+            }
+
+            function u(a, c, d) {
+                var e = a[c];
+                a[c] = a[d];
+                a[d] = e
+            }
+            c.prototype = {
+                all: function() {
+                    return this.Df(this.data, [])
+                },
+                search: function(a) {
+                    var c = this.data,
+                        d = [],
+                        e = this.Ea;
+                    if (!q(a, c.bbox)) return d;
+                    for (var f = [], g, h, k, n; c;) {
+                        g = 0;
+                        for (h = c.children.length; g < h; g++) k = c.children[g], n = c.wa ? e(k) : k.bbox, q(a, n) && (c.wa ? d.push(k) : p(a, n) ? this.Df(k, d) : f.push(k));
+                        c = f.pop()
+                    }
+                    return d
+                },
+                load: function(a) {
+                    if (!a || !a.length) return this;
+                    if (a.length < this.Hf) {
+                        for (var c = 0, d = a.length; c < d; c++) this.ha(a[c]);
+                        return this
+                    }
+                    a = this.Ff(a.slice(), 0, a.length - 1, 0);
+                    this.data.children.length ? this.data.height === a.height ? this.If(this.data, a) : (this.data.height < a.height && (c = this.data, this.data = a, a = c), this.Gf(a, this.data.height - a.height - 1, !0)) : this.data = a;
+                    return this
+                },
+                ha: function(a) {
+                    a && this.Gf(a, this.data.height - 1);
+                    return this
+                },
+                clear: function() {
+                    this.data = {
+                        children: [],
+                        height: 1,
+                        bbox: [Infinity, Infinity, -Infinity, -Infinity],
+                        wa: !0
+                    };
+                    return this
+                },
+                remove: function(a) {
+                    if (!a) return this;
+                    for (var c = this.data, d = this.Ea(a), e = [], f = [], g, h, k, n; c || e.length;) {
+                        c || (c = e.pop(), h = e[e.length - 1], g = f.pop(), n = !0);
+                        if (c.wa && (k = c.children.indexOf(a), -1 !== k)) {
+                            c.children.splice(k, 1);
+                            e.push(c);
+                            this.pi(e);
+                            break
+                        }
+                        n || c.wa || !p(c.bbox, d) ? h ? (g++, c = h.children[g], n = !1) : c = null : (e.push(c), f.push(g), g = 0, h = c, c = c.children[0])
+                    }
+                    return this
+                },
+                Ea: function(a) {
+                    return a
+                },
+                Ie: function(a, c) {
+                    return a[0] - c[0]
+                },
+                Je: function(a, c) {
+                    return a[1] - c[1]
+                },
+                toJSON: function() {
+                    return this.data
+                },
+                Df: function(a, c) {
+                    for (var d = []; a;) a.wa ? c.push.apply(c, a.children) : d.push.apply(d, a.children), a = d.pop();
+                    return c
+                },
+                Ff: function(a, c, e, f) {
+                    var g = e - c + 1,
+                        h = this.Fe,
+                        k;
+                    if (g <= h) return k = {
+                        children: a.slice(c, e + 1),
+                        height: 1,
+                        bbox: null,
+                        wa: !0
+                    }, d(k, this.Ea), k;
+                    f || (f = Math.ceil(Math.log(g) / Math.log(h)), h = Math.ceil(g / Math.pow(h, f - 1)));
+                    k = {
+                        children: [],
+                        height: f,
+                        bbox: null
+                    };
+                    var g = Math.ceil(g / h),
+                        h = g * Math.ceil(Math.sqrt(h)),
+                        n, p, q;
+                    for (r(a, c, e, h, this.Ie); c <= e; c += h)
+                        for (p = Math.min(c + h - 1, e), r(a, c, p, g, this.Je), n = c; n <= p; n += g) q = Math.min(n + g - 1, p), k.children.push(this.Ff(a, n, q, f - 1));
+                    d(k, this.Ea);
+                    return k
+                },
+                oi: function(a, c, d, e) {
+                    for (var f, g, h, n, p, q, r, t;;) {
+                        e.push(c);
+                        if (c.wa || e.length - 1 === d) break;
+                        r = t = Infinity;
+                        f = 0;
+                        for (g = c.children.length; f < g; f++) {
+                            h = c.children[f];
+                            p = k(h.bbox);
+                            q = a;
+                            var u = h.bbox;
+                            q = (Math.max(u[2], q[2]) - Math.min(u[0], q[0])) * (Math.max(u[3], q[3]) - Math.min(u[1], q[1])) - p;
+                            q < t ? (t = q, r = p < r ? p : r, n = h) : q === t && p < r && (r = p, n = h)
+                        }
+                        c = n
+                    }
+                    return c
+                },
+                Gf: function(a, c, d) {
+                    var e = this.Ea;
+                    d = d ? a.bbox : e(a);
+                    var e = [],
+                        g = this.oi(d, this.data, c, e);
+                    g.children.push(a);
+                    for (f(g.bbox, d); 0 <= c;)
+                        if (e[c].children.length > this.Fe) this.ri(e, c), c--;
+                        else break;
+                    this.li(d, e, c)
+                },
+                ri: function(a, c) {
+                    var e = a[c],
+                        f = e.children.length,
+                        g = this.Hf;
+                    this.mi(e, g, f);
+                    f = {
+                        children: e.children.splice(this.ni(e, g, f)),
+                        height: e.height
+                    };
+                    e.wa && (f.wa = !0);
+                    d(e, this.Ea);
+                    d(f, this.Ea);
+                    c ? a[c - 1].children.push(f) : this.If(e, f)
+                },
+                If: function(a, c) {
+                    this.data = {
+                        children: [a, c],
+                        height: a.height + 1
+                    };
+                    d(this.data, this.Ea)
+                },
+                ni: function(a, c, d) {
+                    var f, g, h, n, p, q, r;
+                    p = q = Infinity;
+                    for (f = c; f <= d - c; f++) {
+                        g = e(a, 0, f, this.Ea);
+                        h = e(a, f, d, this.Ea);
+                        var t = g,
+                            u = h;
+                        n = Math.max(t[0], u[0]);
+                        var za = Math.max(t[1], u[1]),
+                            cb = Math.min(t[2], u[2]),
+                            t = Math.min(t[3], u[3]);
+                        n = Math.max(0, cb - n) * Math.max(0, t - za);
+                        g = k(g) + k(h);
+                        n < p ? (p = n, r = f, q = g < q ? g : q) : n === p && g < q && (q = g, r = f)
+                    }
+                    return r
+                },
+                mi: function(a, c, d) {
+                    var e = a.wa ? this.Ie : g,
+                        f = a.wa ? this.Je : h,
+                        k = this.Ef(a, c, d, e);
+                    c = this.Ef(a, c, d, f);
+                    k < c && a.children.sort(e)
+                },
+                Ef: function(a, c, d, g) {
+                    a.children.sort(g);
+                    g = this.Ea;
+                    var h = e(a, 0, c, g),
+                        k = e(a, d - c, d, g),
+                        p = n(h) + n(k),
+                        q, r;
+                    for (q = c; q < d - c; q++) r = a.children[q], f(h, a.wa ? g(r) : r.bbox), p += n(h);
+                    for (q = d - c - 1; q >= c; q--) r = a.children[q], f(k, a.wa ? g(r) : r.bbox), p += n(k);
+                    return p
+                },
+                li: function(a, c, d) {
+                    for (; 0 <= d; d--) f(c[d].bbox, a)
+                },
+                pi: function(a) {
+                    for (var c = a.length - 1, e; 0 <= c; c--) 0 === a[c].children.length ? 0 < c ? (e = a[c - 1].children, e.splice(e.indexOf(a[c]), 1)) : this.clear() : d(a[c], this.Ea)
+                },
+                qi: function(a) {
+                    var c = ["return a", " - b", ";"];
+                    this.Ie = new Function("a", "b", c.join(a[0]));
+                    this.Je = new Function("a", "b", c.join(a[1]));
+                    this.Ea = new Function("a", "return [a" + a.join(", a") + "];")
+                }
+            };
+            "function" === typeof define && define.Lo ? define("rbush", function() {
+                return c
+            }) : "undefined" !== typeof a ? a.Qf = c : "undefined" !== typeof self ? self.b = c : window.b = c
+        })();
+        kp = a.Qf
+    })();
+
+    function lp(a) {
+        this.a = kp(a);
+        this.b = {}
+    }
+    l = lp.prototype;
+    l.ha = function(a, c) {
+        var d = [a[0], a[1], a[2], a[3], c];
+        this.a.ha(d);
+        this.b[ma(c)] = d
+    };
+    l.load = function(a, c) {
+        for (var d = Array(c.length), e = 0, f = c.length; e < f; e++) {
+            var g = a[e],
+                h = c[e],
+                g = [g[0], g[1], g[2], g[3], h];
+            d[e] = g;
+            this.b[ma(h)] = g
+        }
+        this.a.load(d)
+    };
+    l.remove = function(a) {
+        a = ma(a);
+        var c = this.b[a];
+        zb(this.b, a);
+        return null !== this.a.remove(c)
+    };
+    l.update = function(a, c) {
+        var d = ma(c);
+        Vd(this.b[d].slice(0, 4), a) || (this.remove(c), this.ha(a, c))
+    };
+
+    function mp(a) {
+        a = a.a.all();
+        return Ua(a, function(a) {
+            return a[4]
+        })
+    }
+
+    function np(a, c) {
+        var d = a.a.search(c);
+        return Ua(d, function(a) {
+            return a[4]
+        })
+    }
+    l.forEach = function(a, c) {
+        return op(mp(this), a, c)
+    };
+
+    function pp(a, c, d, e) {
+        return op(np(a, c), d, e)
+    }
+
+    function op(a, c, d) {
+        for (var e, f = 0, g = a.length; f < g && !(e = c.call(d, a[f])); f++);
+        return e
+    }
+    l.la = function() {
+        return xb(this.b)
+    };
+    l.clear = function() {
+        this.a.clear();
+        this.b = {}
+    };
+    l.G = function() {
+        return this.a.data.bbox
+    };
+
+    function qp(a) {
+        a = m(a) ? a : {};
+        Bg.call(this, {
+            attributions: a.attributions,
+            logo: a.logo,
+            projection: void 0,
+            state: "ready",
+            wrapX: m(a.wrapX) ? a.wrapX : !0
+        });
+        this.J = ca;
+        m(a.loader) ? this.J = a.loader : m(a.url) && (this.J = ip(a.url, a.format));
+        this.oa = m(a.strategy) ? a.strategy : jp;
+        this.a = new lp;
+        this.N = new lp;
+        this.c = {};
+        this.e = {};
+        this.g = {};
+        this.i = {};
+        m(a.features) && rp(this, a.features)
+    }
+    w(qp, Bg);
+    l = qp.prototype;
+    l.jf = function(a) {
+        var c = ma(a).toString();
+        if (sp(this, c, a)) {
+            tp(this, c, a);
+            var d = a.Q();
+            null != d ? (c = d.G(), this.a.ha(c, a)) : this.c[c] = a;
+            this.dispatchEvent(new up("addfeature", a))
+        }
+        this.k()
+    };
+
+    function tp(a, c, d) {
+        a.i[c] = [x(d, "change", a.Pg, !1, a), x(d, "propertychange", a.Pg, !1, a)]
+    }
+
+    function sp(a, c, d) {
+        var e = !0,
+            f = d.$;
+        m(f) ? f.toString() in a.e ? e = !1 : a.e[f.toString()] = d : a.g[c] = d;
+        return e
+    }
+    l.Oc = function(a) {
+        rp(this, a);
+        this.k()
+    };
+
+    function rp(a, c) {
+        var d, e, f, g, h = [],
+            k = [],
+            n = [];
+        e = 0;
+        for (f = c.length; e < f; e++) g = c[e], d = ma(g).toString(), sp(a, d, g) && k.push(g);
+        e = 0;
+        for (f = k.length; e < f; e++) {
+            g = k[e];
+            d = ma(g).toString();
+            tp(a, d, g);
+            var p = g.Q();
+            null != p ? (d = p.G(), h.push(d), n.push(g)) : a.c[d] = g
+        }
+        a.a.load(h, n);
+        e = 0;
+        for (f = k.length; e < f; e++) a.dispatchEvent(new up("addfeature", k[e]))
+    }
+    l.clear = function(a) {
+        if (a) {
+            for (var c in this.i) Sa(this.i[c], Wc);
+            this.i = {};
+            this.e = {};
+            this.g = {}
+        } else a = this.ph, this.a.forEach(a, this), pb(this.c, a, this);
+        this.a.clear();
+        this.N.clear();
+        this.c = {};
+        this.dispatchEvent(new up("clear"));
+        this.k()
+    };
+    l.Rf = function(a, c) {
+        return this.a.forEach(a, c)
+    };
+
+    function vp(a, c, d) {
+        a.$c([c[0], c[1], c[0], c[1]], function(a) {
+            if (a.Q().Jb(c[0], c[1])) return d.call(void 0, a)
+        })
+    }
+    l.$c = function(a, c, d) {
+        return pp(this.a, a, c, d)
+    };
+    l.Ab = function(a, c, d, e) {
+        return this.$c(a, d, e)
+    };
+    l.Oe = function(a, c, d) {
+        return this.$c(a, function(e) {
+            if (e.Q().ra(a) && (e = c.call(d, e))) return e
+        })
+    };
+    l.Dc = function() {
+        var a = mp(this.a);
+        xb(this.c) || db(a, sb(this.c));
+        return a
+    };
+    l.Re = function(a) {
+        var c = [];
+        vp(this, a, function(a) {
+            c.push(a)
+        });
+        return c
+    };
+    l.Se = function(a) {
+        return np(this.a, a)
+    };
+    l.Tf = function(a) {
+        var c = a[0],
+            d = a[1],
+            e = null,
+            f = [NaN, NaN],
+            g = Infinity,
+            h = [-Infinity, -Infinity, Infinity, Infinity];
+        pp(this.a, h, function(a) {
+            var n = a.Q(),
+                p = g;
+            g = n.Sa(c, d, f, g);
+            g < p && (e = a, a = Math.sqrt(g), h[0] = c - a, h[1] = d - a, h[2] = c + a, h[3] = d + a)
+        });
+        return e
+    };
+    l.G = function() {
+        return this.a.G()
+    };
+    l.Qe = function(a) {
+        a = this.e[a.toString()];
+        return m(a) ? a : null
+    };
+    l.Pg = function(a) {
+        a = a.target;
+        var c = ma(a).toString(),
+            d = a.Q();
+        null != d ? (d = d.G(), c in this.c ? (delete this.c[c], this.a.ha(d, a)) : this.a.update(d, a)) : c in this.c || (this.a.remove(a), this.c[c] = a);
+        d = a.$;
+        m(d) ? (d = d.toString(), c in this.g ? (delete this.g[c], this.e[d] = a) : this.e[d] !== a && (wp(this, a), this.e[d] = a)) : c in this.g || (wp(this, a), this.g[c] = a);
+        this.k();
+        this.dispatchEvent(new up("changefeature", a))
+    };
+    l.la = function() {
+        return this.a.la() && xb(this.c)
+    };
+    l.ac = function(a, c, d) {
+        var e = this.N;
+        a = this.oa(a, c);
+        var f, g;
+        f = 0;
+        for (g = a.length; f < g; ++f) {
+            var h = a[f];
+            pp(e, h, function(a) {
+                return Rd(a.extent, h)
+            }) || (this.J.call(this, h, c, d), e.ha(h, {
+                extent: h.slice()
+            }))
+        }
+    };
+    l.Qg = function(a) {
+        var c = ma(a).toString();
+        c in this.c ? delete this.c[c] : this.a.remove(a);
+        this.ph(a);
+        this.k()
+    };
+    l.ph = function(a) {
+        var c = ma(a).toString();
+        Sa(this.i[c], Wc);
+        delete this.i[c];
+        var d = a.$;
+        m(d) ? delete this.e[d.toString()] : delete this.g[c];
+        this.dispatchEvent(new up("removefeature", a))
+    };
+
+    function wp(a, c) {
+        for (var d in a.e)
+            if (a.e[d] === c) {
+                delete a.e[d];
+                break
+            }
+    }
+
+    function up(a, c) {
+        rc.call(this, a);
+        this.feature = c
+    }
+    w(up, rc);
+
+    function xp(a) {
+        this.a = a.source;
+        this.ba = zd();
+        this.c = ai();
+        this.e = [0, 0];
+        this.n = null;
+        qn.call(this, {
+            attributions: a.attributions,
+            canvasFunction: ra(this.zi, this),
+            logo: a.logo,
+            projection: a.projection,
+            ratio: a.ratio,
+            resolutions: a.resolutions,
+            state: this.a.o
+        });
+        this.p = null;
+        this.g = void 0;
+        this.Mg(a.style);
+        x(this.a, "change", this.am, void 0, this)
+    }
+    w(xp, qn);
+    l = xp.prototype;
+    l.zi = function(a, c, d, e, f) {
+        var g = new Fm(.5 * c / d, a, c);
+        this.a.ac(a, c, f);
+        var h = !1;
+        this.a.Ab(a, c, function(a) {
+            var e;
+            if (!(e = h)) {
+                var f;
+                m(a.c) ? f = a.c.call(a, c) : m(this.g) && (f = this.g(a, c));
+                if (null != f) {
+                    var q, r = !1;
+                    e = 0;
+                    for (q = f.length; e < q; ++e) r = fn(g, a, f[e], en(c, d), this.$l, this) || r;
+                    e = r
+                } else e = !1
+            }
+            h = e
+        }, this);
+        Gm(g);
+        if (h) return null;
+        this.e[0] != e[0] || this.e[1] != e[1] ? (this.c.canvas.width = e[0], this.c.canvas.height = e[1], this.e[0] = e[0], this.e[1] = e[1]) : this.c.clearRect(0, 0, e[0], e[1]);
+        a = yp(this, ce(a), c, d, e);
+        Jm(g, this.c, d, a, 0, {});
+        this.n = g;
+        return this.c.canvas
+    };
+    l.ge = function(a, c, d, e, f) {
+        if (null !== this.n) {
+            var g = {};
+            return this.n.c(a, c, 0, e, function(a) {
+                var c = ma(a).toString();
+                if (!(c in g)) return g[c] = !0, f(a)
+            })
+        }
+    };
+    l.Xl = function() {
+        return this.a
+    };
+    l.Yl = function() {
+        return this.p
+    };
+    l.Zl = function() {
+        return this.g
+    };
+
+    function yp(a, c, d, e, f) {
+        return qj(a.ba, f[0] / 2, f[1] / 2, e / d, -e / d, 0, -c[0], -c[1])
+    }
+    l.$l = function() {
+        this.k()
+    };
+    l.am = function() {
+        Dg(this, this.a.o)
+    };
+    l.Mg = function(a) {
+        this.p = m(a) ? a : El;
+        this.g = null === a ? void 0 : Dl(this.p);
+        this.k()
+    };
+
+    function zp(a) {
+        Km.call(this, a);
+        this.e = null;
+        this.f = zd();
+        this.c = this.d = null
+    }
+    w(zp, Km);
+    l = zp.prototype;
+    l.Pa = function(a, c, d, e) {
+        var f = this.a;
+        return f.da().ge(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
+            return d.call(e, a, f)
+        })
+    };
+    l.dc = function(a, c, d, e) {
+        if (!fa(this.fe()))
+            if (this.a.da() instanceof xp) {
+                if (a = a.slice(), sj(c.pixelToCoordinateMatrix, a, a), this.Pa(a, c, Gg, this)) return d.call(e, this.a)
+            } else if (null === this.d && (this.d = zd(), Fd(this.f, this.d)), c = Nm(a, this.d), null === this.c && (this.c = ai(1, 1)), this.c.clearRect(0, 0, 1, 1), this.c.drawImage(this.fe(), c[0], c[1], 1, 1, 0, 0, 1, 1), 0 < this.c.getImageData(0, 0, 1, 1).data[3]) return d.call(e, this.a)
+    };
+    l.fe = function() {
+        return null === this.e ? null : this.e.b()
+    };
+    l.Xf = function() {
+        return this.f
+    };
+    l.ff = function(a, c) {
+        var d = a.pixelRatio,
+            e = a.viewState,
+            f = e.center,
+            g = e.resolution,
+            h = e.rotation,
+            k, n = this.a.da(),
+            p = a.viewHints;
+        k = a.extent;
+        m(c.extent) && (k = ge(k, c.extent));
+        p[0] || p[1] || je(k) || (e = e.projection, p = n.f, null === p || (e = p), k = n.Cc(k, g, d, e), null !== k && wj(this, k) && (this.e = k));
+        if (null !== this.e) {
+            k = this.e;
+            var e = k.G(),
+                p = k.resolution,
+                q = k.e,
+                g = d * p / (g * q);
+            qj(this.f, d * a.size[0] / 2, d * a.size[1] / 2, g, g, h, q * (e[0] - f[0]) / p, q * (f[1] - e[3]) / p);
+            this.d = null;
+            yj(a.attributions, k.f);
+            zj(a, n)
+        }
+        return !0
+    };
+
+    function Ap(a) {
+        Km.call(this, a);
+        this.c = this.f = null;
+        this.q = !1;
+        this.g = null;
+        this.l = zd();
+        this.e = null;
+        this.p = this.H = this.n = NaN;
+        this.i = this.d = null;
+        this.L = [0, 0]
+    }
+    w(Ap, Km);
+    Ap.prototype.fe = function() {
+        return this.f
+    };
+    Ap.prototype.Xf = function() {
+        return this.l
+    };
+    Ap.prototype.ff = function(a, c) {
+        var d = a.pixelRatio,
+            e = a.viewState,
+            f = e.projection,
+            g = this.a,
+            h = g.da(),
+            k = ah(h, f),
+            n = h.Cd(),
+            p = Tg(k, e.resolution),
+            q = h.Xb(p, a.pixelRatio, f),
+            r = q[0] / ld(k.na(p), this.L)[0],
+            t = k.ma(p),
+            r = t / r,
+            u = e.center,
+            A;
+        t == e.resolution ? (u = Bj(u, t, a.size), A = ee(u, t, e.rotation, a.size)) : A = a.extent;
+        m(c.extent) && (A = ge(A, c.extent));
+        if (je(A)) return !1;
+        var z = Qg(k, A, t),
+            D = q[0] * kf(z),
+            B = q[1] * (z.a - z.c + 1),
+            y, K;
+        null === this.f ? (K = ai(D, B), this.f = K.canvas, this.c = [D, B], this.g = K, this.q = !Om(this.c)) : (y = this.f, K = this.g, this.c[0] < D || this.c[1] < B || this.H !== q[0] || this.p !== q[1] || this.q && (this.c[0] > D || this.c[1] > B) ? (y.width = D, y.height = B, this.c = [D, B], this.q = !Om(this.c), this.d = null) : (D = this.c[0], B = this.c[1], (y = p != this.n) || (y = this.d, y = !(y.b <= z.b && z.d <= y.d && y.c <= z.c && z.a <= y.a)), y && (this.d = null)));
+        var J, H;
+        null === this.d ? (D /= q[0], B /= q[1], J = z.b - Math.floor((D - kf(z)) / 2), H = z.c - Math.floor((B - (z.a - z.c + 1)) / 2), this.n = p, this.H = q[0], this.p = q[1], this.d = new ff(J, J + D - 1, H, H + B - 1), this.i = Array(D * B), B = this.d) : (B = this.d, D = kf(B));
+        y = {};
+        y[p] = {};
+        var P = [],
+            sa = this.yd(h, y),
+            Oa = g.c(),
+            N = Kd(),
+            za = new ff(0, 0, 0, 0),
+            cb, Ga, Bb;
+        for (H = z.b; H <= z.d; ++H)
+            for (Bb = z.c; Bb <= z.a; ++Bb) Ga = h.Vb(p, H, Bb, d, f), J = Ga.state, 2 == J || 4 == J || 3 == J && !Oa ? y[p][ef(Ga.b)] = Ga : (cb = k.Ad(Ga.b, sa, null, za, N), cb || (P.push(Ga), cb = k.Ld(Ga.b, za, N), null === cb || sa(p + 1, cb)));
+        sa = 0;
+        for (cb = P.length; sa < cb; ++sa) Ga = P[sa], H = q[0] * (Ga.b[1] - B.b), Bb = q[1] * (B.a - Ga.b[2]), K.clearRect(H, Bb, q[0], q[1]);
+        P = Ua(tb(y), Number);
+        gb(P);
+        var $a = h.X,
+            Ic = be(Og(k, [p, B.b, B.a], N)),
+            lc, Pe, tj, bi, Vf, um, sa = 0;
+        for (cb = P.length; sa < cb; ++sa)
+            if (lc = P[sa], q = h.Xb(lc, d, f), bi = y[lc], lc == p)
+                for (tj in bi) Ga = bi[tj], Pe = (Ga.b[2] - B.c) * D + (Ga.b[1] - B.b), this.i[Pe] != Ga && (H = q[0] * (Ga.b[1] - B.b), Bb = q[1] * (B.a - Ga.b[2]), J = Ga.state, 4 != J && (3 != J || Oa) && $a || K.clearRect(H, Bb, q[0], q[1]), 2 == J && K.drawImage(Ga.Ma(), n, n, q[0], q[1], H, Bb, q[0], q[1]), this.i[Pe] = Ga);
+            else
+                for (tj in lc = k.ma(lc) / t, bi)
+                    for (Ga = bi[tj], Pe = Og(k, Ga.b, N), H = (Pe[0] - Ic[0]) / r, Bb = (Ic[1] - Pe[3]) / r, um = lc * q[0], Vf = lc * q[1], J = Ga.state, 4 != J && $a || K.clearRect(H, Bb, um, Vf), 2 == J && K.drawImage(Ga.Ma(), n, n, q[0], q[1], H, Bb, um, Vf), Ga = Pg(k, Pe, p, za), J = Math.max(Ga.b, B.b), Bb = Math.min(Ga.d, B.d), H = Math.max(Ga.c, B.c), Ga = Math.min(Ga.a, B.a); J <= Bb; ++J)
+                        for (Vf = H; Vf <= Ga; ++Vf) Pe = (Vf - B.c) * D + (J - B.b), this.i[Pe] = void 0;
+        Aj(a.usedTiles, h, p, z);
+        Cj(a, h, k, d, f, A, p, g.a());
+        xj(a, h);
+        zj(a, h);
+        qj(this.l, d * a.size[0] / 2, d * a.size[1] / 2, d * r / e.resolution, d * r / e.resolution, e.rotation, (Ic[0] - u[0]) / r, (u[1] - Ic[1]) / r);
+        this.e = null;
+        return !0
+    };
+    Ap.prototype.dc = function(a, c, d, e) {
+        if (null !== this.g && (null === this.e && (this.e = zd(), Fd(this.l, this.e)), a = Nm(a, this.e), 0 < this.g.getImageData(a[0], a[1], 1, 1).data[3])) return d.call(e, this.a)
+    };
+
+    function Bp(a) {
+        Km.call(this, a);
+        this.d = !1;
+        this.q = -1;
+        this.i = NaN;
+        this.f = Kd();
+        this.c = this.g = null;
+        this.e = ai()
+    }
+    w(Bp, Km);
+    Bp.prototype.o = function(a, c, d) {
+        var e = a.extent,
+            f = a.focus,
+            g = a.pixelRatio,
+            h = a.skippedFeatureUids,
+            k = a.viewState,
+            n = k.projection,
+            k = k.rotation,
+            p = n.G(),
+            q = this.a.da(),
+            r = Mm(this, a, 0);
+        Lm(this, "precompose", d, a, r);
+        var t = this.c;
+        if (null !== t && !t.la()) {
+            var u;
+            bd(this.a, "render") ? (this.e.canvas.width = d.canvas.width, this.e.canvas.height = d.canvas.height, u = this.e) : u = d;
+            var A = u.globalAlpha;
+            u.globalAlpha = c.opacity;
+            c = {};
+            f = f[0];
+            if (q.H && n.c && !Rd(p, e)) {
+                n = p[0];
+                q = p[2];
+                Jm(t, u, g, r, k, n <= f && f <= q ? h : c);
+                for (var z = e[0], D = ie(p), B = 0, y; z < p[0];) --B, y = D * B, r = Mm(this, a, y), Jm(t, u, g, r, k, n + y <= f && f <= q + y ? h : c), z += D;
+                B = 0;
+                for (z = e[2]; z > p[2];) ++B, y = D * B, r = Mm(this, a, y), Jm(t, u, g, r, k, n + y <= f && f <= q + y ? h : c), z -= D
+            } else Jm(t, u, g, r, k, h);
+            u != d && (Lm(this, "render", u, a, r), d.drawImage(u.canvas, 0, 0));
+            u.globalAlpha = A
+        }
+        Lm(this, "postcompose", d, a, r)
+    };
+    Bp.prototype.Pa = function(a, c, d, e) {
+        if (null !== this.c) {
+            var f = this.a,
+                g = {};
+            return this.c.c(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
+                var c = ma(a).toString();
+                if (!(c in g)) return g[c] = !0, d.call(e, a, f)
+            })
+        }
+    };
+    Bp.prototype.l = function() {
+        vj(this)
+    };
+    Bp.prototype.ff = function(a) {
+        function c(a) {
+            var c;
+            m(a.c) ? c = a.c.call(a, p) : m(d.a) && (c = (0, d.a)(a, p));
+            if (null != c) {
+                if (null != c) {
+                    var e, f, g = !1;
+                    e = 0;
+                    for (f = c.length; e < f; ++e) g = fn(t, a, c[e], en(p, q), this.l, this) || g;
+                    a = g
+                } else a = !1;
+                this.d = this.d || a
+            }
+        }
+        var d = this.a,
+            e = d.da();
+        yj(a.attributions, e.d);
+        zj(a, e);
+        var f = a.viewHints[0],
+            g = a.viewHints[1],
+            h = d.o,
+            k = d.n;
+        if (!this.d && !h && f || !k && g) return !0;
+        var n = a.extent,
+            f = a.viewState,
+            g = f.projection,
+            p = f.resolution,
+            q = a.pixelRatio,
+            h = d.b,
+            r = d.c,
+            k = d.get("renderOrder");
+        m(k) || (k = dn);
+        n = Od(n, r * p);
+        r = f.projection.G();
+        e.H && f.projection.c && !Rd(r, a.extent) && (n[0] = r[0], n[2] = r[2]);
+        if (!this.d && this.i == p && this.q == h && this.g == k && Rd(this.f, n)) return !0;
+        qc(this.c);
+        this.c = null;
+        this.d = !1;
+        var t = new Fm(.5 * p / q, n, p, d.c);
+        e.ac(n, p, g);
+        if (null === k) e.Ab(n, p, c, this);
+        else {
+            var u = [];
+            e.Ab(n, p, function(a) {
+                u.push(a)
+            }, this);
+            gb(u, k);
+            Sa(u, c, this)
+        }
+        Gm(t);
+        this.i = p;
+        this.q = h;
+        this.g = k;
+        this.f = n;
+        this.c = t;
+        return !0
+    };
+
+    function Cp(a, c) {
+        Ij.call(this, 0, c);
+        this.d = ai();
+        this.b = this.d.canvas;
+        this.b.style.width = "100%";
+        this.b.style.height = "100%";
+        this.b.className = "ol-unselectable";
+        Pf(a, this.b, 0);
+        this.a = !0;
+        this.e = zd()
+    }
+    w(Cp, Ij);
+    Cp.prototype.Ke = function(a) {
+        return a instanceof I ? new zp(a) : a instanceof L ? new Ap(a) : a instanceof M ? new Bp(a) : null
+    };
+
+    function Dp(a, c, d) {
+        var e = a.g,
+            f = a.d;
+        if (bd(e, c)) {
+            var g = d.extent,
+                h = d.pixelRatio,
+                k = d.viewState,
+                n = k.projection,
+                p = k.resolution,
+                k = k.rotation,
+                q = 0;
+            if (n.c) {
+                var r = n.G(),
+                    n = ie(r),
+                    t = d.focus[0];
+                if (t < r[0] || t > r[2]) q = Math.ceil((r[0] - t) / n), q *= n, g = [g[0] + q, g[1], g[2] + q, g[3]]
+            }
+            n = d.pixelRatio;
+            r = d.viewState;
+            t = r.resolution;
+            q = qj(a.e, a.b.width / 2, a.b.height / 2, n / t, -n / t, -r.rotation, -r.center[0] - q, -r.center[1]);
+            p = new Fm(.5 * p / h, g, p);
+            g = new cm(f, h, g, q, k);
+            e.dispatchEvent(new il(c, e, g, p, d, f, null));
+            Gm(p);
+            p.la() || Jm(p, f, h, q, k, {});
+            om(g);
+            a.c = p
+        }
+    }
+    Cp.prototype.M = function() {
+        return "canvas"
+    };
+    Cp.prototype.ue = function(a) {
+        if (null === a) this.a && (mg(this.b, !1), this.a = !1);
+        else {
+            var c = this.d,
+                d = a.size[0] * a.pixelRatio,
+                e = a.size[1] * a.pixelRatio;
+            this.b.width != d || this.b.height != e ? (this.b.width = d, this.b.height = e) : c.clearRect(0, 0, this.b.width, this.b.height);
+            Jj(a);
+            Dp(this, "precompose", a);
+            var d = a.layerStatesArray,
+                e = a.viewState.resolution,
+                f, g, h, k;
+            f = 0;
+            for (g = d.length; f < g; ++f) k = d[f], h = k.layer, h = Lj(this, h), oj(k, e) && "ready" == k.i && h.ff(a, k) && h.o(a, k, c);
+            Dp(this, "postcompose", a);
+            this.a || (mg(this.b, !0), this.a = !0);
+            Mj(this, a);
+            a.postRenderFunctions.push(Kj)
+        }
+    };
+
+    function Ep(a, c) {
+        uj.call(this, a);
+        this.target = c
+    }
+    w(Ep, uj);
+    Ep.prototype.e = ca;
+    Ep.prototype.i = ca;
+
+    function Fp(a) {
+        var c = Mf("DIV");
+        c.style.position = "absolute";
+        Ep.call(this, a, c);
+        this.c = null;
+        this.d = Bd()
+    }
+    w(Fp, Ep);
+    Fp.prototype.Pa = function(a, c, d, e) {
+        var f = this.a;
+        return f.da().ge(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
+            return d.call(e, a, f)
+        })
+    };
+    Fp.prototype.e = function() {
+        Of(this.target);
+        this.c = null
+    };
+    Fp.prototype.f = function(a, c) {
+        var d = a.viewState,
+            e = d.center,
+            f = d.resolution,
+            g = d.rotation,
+            h = this.c,
+            k = this.a.da(),
+            n = a.viewHints,
+            p = a.extent;
+        m(c.extent) && (p = ge(p, c.extent));
+        n[0] || n[1] || je(p) || (d = d.projection, n = k.f, null === n || (d = n), p = k.Cc(p, f, a.pixelRatio, d), null === p || wj(this, p) && (h = p));
+        null !== h && (d = h.G(), n = h.resolution, p = zd(), qj(p, a.size[0] / 2, a.size[1] / 2, n / f, n / f, g, (d[0] - e[0]) / n, (e[1] - d[3]) / n), h != this.c && (e = h.b(this), e.style.maxWidth = "none", e.style.position = "absolute", Of(this.target), this.target.appendChild(e), this.c = h), rj(p, this.d) || (fi(this.target, p), Cd(this.d, p)), yj(a.attributions, h.f), zj(a, k));
+        return !0
+    };
+
+    function Gp(a) {
+        var c = Mf("DIV");
+        c.style.position = "absolute";
+        Ep.call(this, a, c);
+        this.d = !0;
+        this.q = 1;
+        this.g = 0;
+        this.c = {}
+    }
+    w(Gp, Ep);
+    Gp.prototype.e = function() {
+        Of(this.target);
+        this.g = 0
+    };
+    Gp.prototype.f = function(a, c) {
+        if (!c.visible) return this.d && (mg(this.target, !1), this.d = !1), !0;
+        var d = a.pixelRatio,
+            e = a.viewState,
+            f = e.projection,
+            g = this.a,
+            h = g.da(),
+            k = ah(h, f),
+            n = h.Cd(),
+            p = Tg(k, e.resolution),
+            q = k.ma(p),
+            r = e.center,
+            t;
+        q == e.resolution ? (r = Bj(r, q, a.size), t = ee(r, q, e.rotation, a.size)) : t = a.extent;
+        m(c.extent) && (t = ge(t, c.extent));
+        var q = Qg(k, t, q),
+            u = {};
+        u[p] = {};
+        var A = this.yd(h, u),
+            z = g.c(),
+            D = Kd(),
+            B = new ff(0, 0, 0, 0),
+            y, K, J, H;
+        for (J = q.b; J <= q.d; ++J)
+            for (H = q.c; H <= q.a; ++H) y = h.Vb(p, J, H, d, f), K = y.state, 2 == K ? u[p][ef(y.b)] = y : 4 == K || 3 == K && !z || (K = k.Ad(y.b, A, null, B, D), K || (y = k.Ld(y.b, B, D), null === y || A(p + 1, y)));
+        var P;
+        if (this.g != h.b) {
+            for (P in this.c) z = this.c[+P], Qf(z.target);
+            this.c = {};
+            this.g = h.b
+        }
+        D = Ua(tb(u), Number);
+        gb(D);
+        var A = {},
+            sa;
+        J = 0;
+        for (H = D.length; J < H; ++J) {
+            P = D[J];
+            P in this.c ? z = this.c[P] : (z = k.cd(r, P), z = new Hp(k, z), A[P] = !0, this.c[P] = z);
+            P = u[P];
+            for (sa in P) {
+                y = z;
+                K = P[sa];
+                var Oa = n,
+                    N = K.b,
+                    za = N[0],
+                    cb = N[1],
+                    Ga = N[2],
+                    N = ef(N);
+                if (!(N in y.a)) {
+                    var za = ld(y.d.na(za), y.i),
+                        Bb = K.Ma(y),
+                        $a = Bb.style;
+                    $a.maxWidth = "none";
+                    var Ic = void 0,
+                        lc = void 0;
+                    0 < Oa ? (Ic = Mf("DIV"), lc = Ic.style, lc.overflow = "hidden", lc.width = za[0] + "px", lc.height = za[1] + "px", $a.position = "absolute", $a.left = -Oa + "px", $a.top = -Oa + "px", $a.width = za[0] + 2 * Oa + "px", $a.height = za[1] + 2 * Oa + "px", Ic.appendChild(Bb)) : ($a.width = za[0] + "px", $a.height = za[1] + "px", Ic = Bb, lc = $a);
+                    lc.position = "absolute";
+                    lc.left = (cb - y.c[1]) * za[0] + "px";
+                    lc.top = (y.c[2] - Ga) * za[1] + "px";
+                    null === y.b && (y.b = document.createDocumentFragment());
+                    y.b.appendChild(Ic);
+                    y.a[N] = K
+                }
+            }
+            null !== z.b && (z.target.appendChild(z.b), z.b = null)
+        }
+        n = Ua(tb(this.c), Number);
+        gb(n);
+        J = zd();
+        sa = 0;
+        for (D = n.length; sa < D; ++sa)
+            if (P = n[sa], z = this.c[P], P in u)
+                if (y = z.g, H = z.f, qj(J, a.size[0] / 2, a.size[1] / 2, y / e.resolution, y / e.resolution, e.rotation, (H[0] - r[0]) / y, (r[1] - H[1]) / y), H = z, y = J, rj(y, H.e) || (fi(H.target, y), Cd(H.e, y)), P in A) {
+                    for (--P; 0 <= P; --P)
+                        if (P in this.c) {
+                            H = this.c[P].target;
+                            H.parentNode && H.parentNode.insertBefore(z.target, H.nextSibling);
+                            break
+                        }
+                    0 > P && Pf(this.target, z.target, 0)
+                } else {
+                    if (!a.viewHints[0] && !a.viewHints[1]) {
+                        K = Pg(z.d, t, z.c[0], B);
+                        P = [];
+                        y = H = void 0;
+                        for (y in z.a) H = z.a[y],
+                            K.contains(H.b) || P.push(H);
+                        Oa = K = void 0;
+                        K = 0;
+                        for (Oa = P.length; K < Oa; ++K) H = P[K], y = ef(H.b), Qf(H.Ma(z)), delete z.a[y]
+                    }
+                }
+        else Qf(z.target), delete this.c[P];
+        c.opacity != this.q && (this.q = this.target.style.opacity = c.opacity);
+        c.visible && !this.d && (mg(this.target, !0), this.d = !0);
+        Aj(a.usedTiles, h, p, q);
+        Cj(a, h, k, d, f, t, p, g.a());
+        xj(a, h);
+        zj(a, h);
+        return !0
+    };
+
+    function Hp(a, c) {
+        this.target = Mf("DIV");
+        this.target.style.position = "absolute";
+        this.target.style.width = "100%";
+        this.target.style.height = "100%";
+        this.d = a;
+        this.c = c;
+        this.f = be(Og(a, c));
+        this.g = a.ma(c[0]);
+        this.a = {};
+        this.b = null;
+        this.e = Bd();
+        this.i = [0, 0]
+    };
+
+    function Ip(a) {
+        this.g = ai();
+        var c = this.g.canvas;
+        c.style.maxWidth = "none";
+        c.style.position = "absolute";
+        Ep.call(this, a, c);
+        this.d = !1;
+        this.n = -1;
+        this.o = NaN;
+        this.q = Kd();
+        this.c = this.l = null;
+        this.H = zd();
+        this.p = zd()
+    }
+    w(Ip, Ep);
+    Ip.prototype.i = function(a, c) {
+        var d = a.viewState,
+            e = d.center,
+            f = d.rotation,
+            g = d.resolution,
+            d = a.pixelRatio,
+            h = a.size[0],
+            k = a.size[1],
+            n = h * d,
+            p = k * d,
+            e = qj(this.H, d * h / 2, d * k / 2, d / g, -d / g, -f, -e[0], -e[1]),
+            g = this.g;
+        g.canvas.width = n;
+        g.canvas.height = p;
+        h = qj(this.p, 0, 0, 1 / d, 1 / d, 0, -(n - h) / 2 * d, -(p - k) / 2 * d);
+        fi(g.canvas, h);
+        Jp(this, "precompose", a, e);
+        h = this.c;
+        null === h || h.la() || (g.globalAlpha = c.opacity, Jm(h, g, d, e, f, a.skippedFeatureUids), Jp(this, "render", a, e));
+        Jp(this, "postcompose", a, e)
+    };
+
+    function Jp(a, c, d, e) {
+        var f = a.g;
+        a = a.a;
+        bd(a, c) && (e = new cm(f, d.pixelRatio, d.extent, e, d.viewState.rotation), a.dispatchEvent(new il(c, a, e, null, d, f, null)), om(e))
+    }
+    Ip.prototype.Pa = function(a, c, d, e) {
+        if (null !== this.c) {
+            var f = this.a,
+                g = {};
+            return this.c.c(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
+                var c = ma(a).toString();
+                if (!(c in g)) return g[c] = !0, d.call(e, a, f)
+            })
+        }
+    };
+    Ip.prototype.J = function() {
+        vj(this)
+    };
+    Ip.prototype.f = function(a) {
+        function c(a) {
+            var c;
+            m(a.c) ? c = a.c.call(a, n) : m(d.a) && (c = (0, d.a)(a, n));
+            if (null != c) {
+                if (null != c) {
+                    var e, f, g = !1;
+                    e = 0;
+                    for (f = c.length; e < f; ++e) g = fn(q, a, c[e], en(n, p), this.J, this) || g;
+                    a = g
+                } else a = !1;
+                this.d = this.d || a
+            }
+        }
+        var d = this.a,
+            e = d.da();
+        yj(a.attributions, e.d);
+        zj(a, e);
+        var f = a.viewHints[0],
+            g = a.viewHints[1],
+            h = d.o,
+            k = d.n;
+        if (!this.d && !h && f || !k && g) return !0;
+        var g = a.extent,
+            h = a.viewState,
+            f = h.projection,
+            n = h.resolution,
+            p = a.pixelRatio;
+        a = d.b;
+        k = d.c;
+        h = d.get("renderOrder");
+        m(h) || (h = dn);
+        g = Od(g, k * n);
+        if (!this.d && this.o == n && this.n == a && this.l == h && Rd(this.q, g)) return !0;
+        qc(this.c);
+        this.c = null;
+        this.d = !1;
+        var q = new Fm(.5 * n / p, g, n, d.c);
+        e.ac(g, n, f);
+        if (null === h) e.Ab(g, n, c, this);
+        else {
+            var r = [];
+            e.Ab(g, n, function(a) {
+                r.push(a)
+            }, this);
+            gb(r, h);
+            Sa(r, c, this)
+        }
+        Gm(q);
+        this.o = n;
+        this.n = a;
+        this.l = h;
+        this.q = g;
+        this.c = q;
+        return !0
+    };
+
+    function Kp(a, c) {
+        Ij.call(this, 0, c);
+        this.a = null;
+        this.a = ai();
+        var d = this.a.canvas;
+        d.style.position = "absolute";
+        d.style.width = "100%";
+        d.style.height = "100%";
+        d.className = "ol-unselectable";
+        Pf(a, d, 0);
+        this.e = zd();
+        this.b = Mf("DIV");
+        this.b.className = "ol-unselectable";
+        d = this.b.style;
+        d.position = "absolute";
+        d.width = "100%";
+        d.height = "100%";
+        x(this.b, "touchstart", tc);
+        Pf(a, this.b, 0);
+        this.d = !0
+    }
+    w(Kp, Ij);
+    Kp.prototype.O = function() {
+        Qf(this.b);
+        Kp.S.O.call(this)
+    };
+    Kp.prototype.Ke = function(a) {
+        if (a instanceof I) a = new Fp(a);
+        else if (a instanceof L) a = new Gp(a);
+        else if (a instanceof M) a = new Ip(a);
+        else return null;
+        return a
+    };
+
+    function Lp(a, c, d) {
+        var e = a.g;
+        if (bd(e, c)) {
+            var f = d.extent,
+                g = d.pixelRatio,
+                h = d.viewState,
+                k = h.resolution,
+                n = h.rotation,
+                p = a.a,
+                q = p.canvas;
+            qj(a.e, q.width / 2, q.height / 2, g / h.resolution, -g / h.resolution, -h.rotation, -h.center[0], -h.center[1]);
+            h = new cm(p, g, f, a.e, n);
+            f = new Fm(.5 * k / g, f, k);
+            e.dispatchEvent(new il(c, e, h, f, d, p, null));
+            Gm(f);
+            f.la() || Jm(f, p, g, a.e, n, {});
+            om(h);
+            a.c = f
+        }
+    }
+    Kp.prototype.M = function() {
+        return "dom"
+    };
+    Kp.prototype.ue = function(a) {
+        if (null === a) this.d && (mg(this.b, !1), this.d = !1);
+        else {
+            var c;
+            c = function(a, c) {
+                Pf(this.b, a, c)
+            };
+            var d = this.g;
+            if (bd(d, "precompose") || bd(d, "postcompose")) {
+                var d = this.a.canvas,
+                    e = a.pixelRatio;
+                d.width = a.size[0] * e;
+                d.height = a.size[1] * e
+            }
+            Lp(this, "precompose", a);
+            var d = a.layerStatesArray,
+                e = a.viewState.resolution,
+                f, g, h, k;
+            f = 0;
+            for (g = d.length; f < g; ++f) k = d[f], h = k.layer, h = Lj(this, h), c.call(this, h.target, f), oj(k, e) && "ready" == k.i ? h.f(a, k) && h.i(a, k) : h.e();
+            c = a.layerStates;
+            for (var n in this.f) n in c || (h = this.f[n], Qf(h.target));
+            this.d || (mg(this.b, !0), this.d = !0);
+            Jj(a);
+            Mj(this, a);
+            a.postRenderFunctions.push(Kj);
+            Lp(this, "postcompose", a)
+        }
+    };
+
+    function Mp(a) {
+        this.b = a
+    }
+
+    function Np(a) {
+        this.b = a
+    }
+    w(Np, Mp);
+    Np.prototype.M = function() {
+        return 35632
+    };
+
+    function Op(a) {
+        this.b = a
+    }
+    w(Op, Mp);
+    Op.prototype.M = function() {
+        return 35633
+    };
+
+    function Pp() {
+        this.b = "precision mediump float;varying vec2 a;varying float b;uniform mat4 k;uniform float l;uniform sampler2D m;void main(void){vec4 texColor=texture2D(m,a);float alpha=texColor.a*b*l;if(alpha==0.0){discard;}gl_FragColor.a=alpha;gl_FragColor.rgb=(k*vec4(texColor.rgb,1.)).rgb;}"
+    }
+    w(Pp, Np);
+    da(Pp);
+
+    function Qp() {
+        this.b = "varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"
+    }
+    w(Qp, Op);
+    da(Qp);
+
+    function Rp(a, c) {
+        this.l = a.getUniformLocation(c, "k");
+        this.i = a.getUniformLocation(c, "j");
+        this.q = a.getUniformLocation(c, "i");
+        this.f = a.getUniformLocation(c, "l");
+        this.g = a.getUniformLocation(c, "h");
+        this.b = a.getAttribLocation(c, "e");
+        this.a = a.getAttribLocation(c, "f");
+        this.d = a.getAttribLocation(c, "c");
+        this.c = a.getAttribLocation(c, "g");
+        this.e = a.getAttribLocation(c, "d")
+    };
+
+    function Sp() {
+        this.b = "precision mediump float;varying vec2 a;varying float b;uniform float k;uniform sampler2D l;void main(void){vec4 texColor=texture2D(l,a);gl_FragColor.rgb=texColor.rgb;float alpha=texColor.a*b*k;if(alpha==0.0){discard;}gl_FragColor.a=alpha;}"
+    }
+    w(Sp, Np);
+    da(Sp);
+
+    function Tp() {
+        this.b = "varying vec2 a;varying float b;attribute vec2 c;attribute vec2 d;attribute vec2 e;attribute float f;attribute float g;uniform mat4 h;uniform mat4 i;uniform mat4 j;void main(void){mat4 offsetMatrix=i;if(g==1.0){offsetMatrix=i*j;}vec4 offsets=offsetMatrix*vec4(e,0.,0.);gl_Position=h*vec4(c,0.,1.)+offsets;a=d;b=f;}"
+    }
+    w(Tp, Op);
+    da(Tp);
+
+    function Up(a, c) {
+        this.i = a.getUniformLocation(c, "j");
+        this.q = a.getUniformLocation(c, "i");
+        this.f = a.getUniformLocation(c, "k");
+        this.g = a.getUniformLocation(c, "h");
+        this.b = a.getAttribLocation(c, "e");
+        this.a = a.getAttribLocation(c, "f");
+        this.d = a.getAttribLocation(c, "c");
+        this.c = a.getAttribLocation(c, "g");
+        this.e = a.getAttribLocation(c, "d")
+    };
+
+    function Vp(a) {
+        this.b = m(a) ? a : [];
+        this.a = m(void 0) ? void 0 : 35044
+    };
+
+    function Wp(a, c) {
+        this.l = a;
+        this.b = c;
+        this.a = {};
+        this.f = {};
+        this.e = {};
+        this.i = this.q = this.d = this.g = null;
+        (this.c = Ya(wa, "OES_element_index_uint")) && c.getExtension("OES_element_index_uint");
+        x(this.l, "webglcontextlost", this.Ym, !1, this);
+        x(this.l, "webglcontextrestored", this.Zm, !1, this)
+    }
+
+    function Xp(a, c, d) {
+        var e = a.b,
+            f = d.b,
+            g = ma(d);
+        if (g in a.a) e.bindBuffer(c, a.a[g].buffer);
+        else {
+            var h = e.createBuffer();
+            e.bindBuffer(c, h);
+            var k;
+            34962 == c ? k = new Float32Array(f) : 34963 == c && (k = a.c ? new Uint32Array(f) : new Uint16Array(f));
+            e.bufferData(c, k, d.a);
+            a.a[g] = {
+                c: d,
+                buffer: h
+            }
+        }
+    }
+
+    function Yp(a, c) {
+        var d = a.b,
+            e = ma(c),
+            f = a.a[e];
+        d.isContextLost() || d.deleteBuffer(f.buffer);
+        delete a.a[e]
+    }
+    l = Wp.prototype;
+    l.O = function() {
+        var a = this.b;
+        a.isContextLost() || (pb(this.a, function(c) {
+            a.deleteBuffer(c.buffer)
+        }), pb(this.e, function(c) {
+            a.deleteProgram(c)
+        }), pb(this.f, function(c) {
+            a.deleteShader(c)
+        }), a.deleteFramebuffer(this.d), a.deleteRenderbuffer(this.i), a.deleteTexture(this.q))
+    };
+    l.Xm = function() {
+        return this.b
+    };
+    l.Te = function() {
+        if (null === this.d) {
+            var a = this.b,
+                c = a.createFramebuffer();
+            a.bindFramebuffer(a.FRAMEBUFFER, c);
+            var d = Zp(a, 1, 1),
+                e = a.createRenderbuffer();
+            a.bindRenderbuffer(a.RENDERBUFFER, e);
+            a.renderbufferStorage(a.RENDERBUFFER, a.DEPTH_COMPONENT16, 1, 1);
+            a.framebufferTexture2D(a.FRAMEBUFFER, a.COLOR_ATTACHMENT0, a.TEXTURE_2D, d, 0);
+            a.framebufferRenderbuffer(a.FRAMEBUFFER, a.DEPTH_ATTACHMENT, a.RENDERBUFFER, e);
+            a.bindTexture(a.TEXTURE_2D, null);
+            a.bindRenderbuffer(a.RENDERBUFFER, null);
+            a.bindFramebuffer(a.FRAMEBUFFER, null);
+            this.d = c;
+            this.q = d;
+            this.i = e
+        }
+        return this.d
+    };
+
+    function $p(a, c) {
+        var d = ma(c);
+        if (d in a.f) return a.f[d];
+        var e = a.b,
+            f = e.createShader(c.M());
+        e.shaderSource(f, c.b);
+        e.compileShader(f);
+        return a.f[d] = f
+    }
+
+    function aq(a, c, d) {
+        var e = ma(c) + "/" + ma(d);
+        if (e in a.e) return a.e[e];
+        var f = a.b,
+            g = f.createProgram();
+        f.attachShader(g, $p(a, c));
+        f.attachShader(g, $p(a, d));
+        f.linkProgram(g);
+        return a.e[e] = g
+    }
+    l.Ym = function() {
+        yb(this.a);
+        yb(this.f);
+        yb(this.e);
+        this.i = this.q = this.d = this.g = null
+    };
+    l.Zm = function() {};
+    l.oe = function(a) {
+        if (a == this.g) return !1;
+        this.b.useProgram(a);
+        this.g = a;
+        return !0
+    };
+
+    function bq(a, c, d) {
+        var e = a.createTexture();
+        a.bindTexture(a.TEXTURE_2D, e);
+        a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MAG_FILTER, a.LINEAR);
+        a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MIN_FILTER, a.LINEAR);
+        m(c) && a.texParameteri(3553, 10242, c);
+        m(d) && a.texParameteri(3553, 10243, d);
+        return e
+    }
+
+    function Zp(a, c, d) {
+        var e = bq(a, void 0, void 0);
+        a.texImage2D(a.TEXTURE_2D, 0, a.RGBA, c, d, 0, a.RGBA, a.UNSIGNED_BYTE, null);
+        return e
+    }
+
+    function cq(a, c) {
+        var d = bq(a, 33071, 33071);
+        a.texImage2D(a.TEXTURE_2D, 0, a.RGBA, a.RGBA, a.UNSIGNED_BYTE, c);
+        return d
+    };
+
+    function dq(a, c) {
+        this.n = this.V = void 0;
+        this.wb = new xf;
+        this.q = ce(c);
+        this.U = [];
+        this.f = [];
+        this.J = void 0;
+        this.e = [];
+        this.d = [];
+        this.N = this.L = void 0;
+        this.a = [];
+        this.H = this.p = this.i = null;
+        this.T = void 0;
+        this.rc = Bd();
+        this.vb = Bd();
+        this.X = this.sa = void 0;
+        this.xb = Bd();
+        this.Fa = this.oa = this.ba = void 0;
+        this.Ra = [];
+        this.g = [];
+        this.b = [];
+        this.o = null;
+        this.c = [];
+        this.l = [];
+        this.Ga = void 0
+    }
+    w(dq, hl);
+
+    function eq(a, c) {
+        var d = a.o,
+            e = a.i,
+            f = a.Ra,
+            g = a.g,
+            h = c.b;
+        return function() {
+            if (!h.isContextLost()) {
+                var a, n;
+                a = 0;
+                for (n = f.length; a < n; ++a) h.deleteTexture(f[a]);
+                a = 0;
+                for (n = g.length; a < n; ++a) h.deleteTexture(g[a])
+            }
+            Yp(c, d);
+            Yp(c, e)
+        }
+    }
+
+    function fq(a, c, d, e) {
+        var f = a.V,
+            g = a.n,
+            h = a.J,
+            k = a.L,
+            n = a.N,
+            p = a.T,
+            q = a.sa,
+            r = a.X,
+            t = a.ba ? 1 : 0,
+            u = a.oa,
+            A = a.Fa,
+            z = a.Ga,
+            D = Math.cos(u),
+            u = Math.sin(u),
+            B = a.a.length,
+            y = a.b.length,
+            K, J, H, P, sa, Oa;
+        for (K = 0; K < d; K += e) sa = c[K] - a.q[0], Oa = c[K + 1] - a.q[1], J = y / 8, H = -A * f, P = -A * (h - g), a.b[y++] = sa, a.b[y++] = Oa, a.b[y++] = H * D - P * u, a.b[y++] = H * u + P * D, a.b[y++] = q / n, a.b[y++] = (r + h) / k, a.b[y++] = p, a.b[y++] = t, H = A * (z - f), P = -A * (h - g), a.b[y++] = sa, a.b[y++] = Oa, a.b[y++] = H * D - P * u, a.b[y++] = H * u + P * D, a.b[y++] = (q + z) / n, a.b[y++] = (r + h) / k, a.b[y++] = p, a.b[y++] = t, H = A * (z - f),
+            P = A * g, a.b[y++] = sa, a.b[y++] = Oa, a.b[y++] = H * D - P * u, a.b[y++] = H * u + P * D, a.b[y++] = (q + z) / n, a.b[y++] = r / k, a.b[y++] = p, a.b[y++] = t, H = -A * f, P = A * g, a.b[y++] = sa, a.b[y++] = Oa, a.b[y++] = H * D - P * u, a.b[y++] = H * u + P * D, a.b[y++] = q / n, a.b[y++] = r / k, a.b[y++] = p, a.b[y++] = t, a.a[B++] = J, a.a[B++] = J + 1, a.a[B++] = J + 2, a.a[B++] = J, a.a[B++] = J + 2, a.a[B++] = J + 3
+    }
+    dq.prototype.jb = function(a, c) {
+        this.c.push(this.a.length);
+        this.l.push(c);
+        var d = a.j;
+        fq(this, d, d.length, a.s)
+    };
+    dq.prototype.kb = function(a, c) {
+        this.c.push(this.a.length);
+        this.l.push(c);
+        var d = a.j;
+        fq(this, d, d.length, a.s)
+    };
+
+    function gq(a, c) {
+        var d = c.b;
+        a.U.push(a.a.length);
+        a.f.push(a.a.length);
+        a.o = new Vp(a.b);
+        Xp(c, 34962, a.o);
+        a.i = new Vp(a.a);
+        Xp(c, 34963, a.i);
+        var e = {};
+        hq(a.Ra, a.e, e, d);
+        hq(a.g, a.d, e, d);
+        a.V = void 0;
+        a.n = void 0;
+        a.J = void 0;
+        a.e = null;
+        a.d = null;
+        a.L = void 0;
+        a.N = void 0;
+        a.a = null;
+        a.T = void 0;
+        a.sa = void 0;
+        a.X = void 0;
+        a.ba = void 0;
+        a.oa = void 0;
+        a.Fa = void 0;
+        a.b = null;
+        a.Ga = void 0
+    }
+
+    function hq(a, c, d, e) {
+        var f, g, h, k = c.length;
+        for (h = 0; h < k; ++h) f = c[h], g = ma(f).toString(), g in d ? f = d[g] : (f = cq(e, f), d[g] = f), a[h] = f
+    }
+
+    function iq(a, c, d, e, f, g, h, k, n, p, q, r, t, u, A) {
+        var z = c.b;
+        Xp(c, 34962, a.o);
+        Xp(c, 34963, a.i);
+        var D = k || 1 != n || p || 1 != q,
+            B, y;
+        D ? (B = Pp.Ia(), y = Qp.Ia()) : (B = Sp.Ia(), y = Tp.Ia());
+        y = aq(c, B, y);
+        D ? null === a.p ? (B = new Rp(z, y), a.p = B) : B = a.p : null === a.H ? (B = new Up(z, y), a.H = B) : B = a.H;
+        c.oe(y);
+        z.enableVertexAttribArray(B.d);
+        z.vertexAttribPointer(B.d, 2, 5126, !1, 32, 0);
+        z.enableVertexAttribArray(B.b);
+        z.vertexAttribPointer(B.b, 2, 5126, !1, 32, 8);
+        z.enableVertexAttribArray(B.e);
+        z.vertexAttribPointer(B.e, 2, 5126, !1, 32, 16);
+        z.enableVertexAttribArray(B.a);
+        z.vertexAttribPointer(B.a, 1, 5126, !1, 32, 24);
+        z.enableVertexAttribArray(B.c);
+        z.vertexAttribPointer(B.c, 1, 5126, !1, 32, 28);
+        y = a.xb;
+        qj(y, 0, 0, 2 / (e * g[0]), 2 / (e * g[1]), -f, -(d[0] - a.q[0]), -(d[1] - a.q[1]));
+        d = a.vb;
+        e = 2 / g[0];
+        g = 2 / g[1];
+        Dd(d);
+        d[0] = e;
+        d[5] = g;
+        d[10] = 1;
+        d[15] = 1;
+        g = a.rc;
+        Dd(g);
+        0 !== f && Id(g, -f);
+        z.uniformMatrix4fv(B.g, !1, y);
+        z.uniformMatrix4fv(B.q, !1, d);
+        z.uniformMatrix4fv(B.i, !1, g);
+        z.uniform1f(B.f, h);
+        D && z.uniformMatrix4fv(B.l, !1, yf(a.wb, k, n, p, q));
+        var K;
+        if (m(t)) {
+            if (u) a: {
+                f = c.c ? 5125 : 5123;c = c.c ? 4 : 2;p = a.c.length - 1;
+                for (h = a.g.length - 1; 0 <= h; --h)
+                    for (z.bindTexture(3553, a.g[h]), k = 0 < h ? a.f[h - 1] : 0, q = a.f[h]; 0 <= p && a.c[p] >= k;) {
+                        n = a.c[p];
+                        u = a.l[p];
+                        D = ma(u).toString();
+                        if (!m(r[D]) && (!m(A) || he(A, u.Q().G())) && (z.clear(z.COLOR_BUFFER_BIT | z.DEPTH_BUFFER_BIT), z.drawElements(4, q - n, f, n * c), q = t(u))) {
+                            a = q;
+                            break a
+                        }
+                        q = n;
+                        p--
+                    }
+                a = void 0
+            }
+            else z.clear(z.COLOR_BUFFER_BIT | z.DEPTH_BUFFER_BIT), jq(a, z, c, r, a.g, a.f), a = (a = t(null)) ? a : void 0;
+            K = a
+        } else jq(a, z, c, r, a.Ra, a.U);
+        z.disableVertexAttribArray(B.d);
+        z.disableVertexAttribArray(B.b);
+        z.disableVertexAttribArray(B.e);
+        z.disableVertexAttribArray(B.a);
+        z.disableVertexAttribArray(B.c);
+        return K
+    }
+
+    function jq(a, c, d, e, f, g) {
+        var h = d.c ? 5125 : 5123;
+        d = d.c ? 4 : 2;
+        if (xb(e)) {
+            var k;
+            a = 0;
+            e = f.length;
+            for (k = 0; a < e; ++a) {
+                c.bindTexture(3553, f[a]);
+                var n = g[a];
+                c.drawElements(4, n - k, h, k * d);
+                k = n
+            }
+        } else {
+            k = 0;
+            var p, n = 0;
+            for (p = f.length; n < p; ++n) {
+                c.bindTexture(3553, f[n]);
+                for (var q = 0 < n ? g[n - 1] : 0, r = g[n], t = q; k < a.c.length && a.c[k] <= r;) {
+                    var u = ma(a.l[k]).toString();
+                    m(e[u]) ? (t !== q && c.drawElements(4, q - t, h, t * d), q = t = k === a.c.length - 1 ? r : a.c[k + 1]) : q = k === a.c.length - 1 ? r : a.c[k + 1];
+                    k++
+                }
+                t !== q && c.drawElements(4, q - t, h, t * d)
+            }
+        }
+    }
+    dq.prototype.Za = function(a) {
+        var c = a.mb(),
+            d = a.Lb(1),
+            e = a.Dd(),
+            f = a.he(1),
+            g = a.U,
+            h = a.rb(),
+            k = a.V,
+            n = a.q,
+            p = a.Xa();
+        a = a.l;
+        var q;
+        0 === this.e.length ? this.e.push(d) : (q = this.e[this.e.length - 1], ma(q) != ma(d) && (this.U.push(this.a.length), this.e.push(d)));
+        0 === this.d.length ? this.d.push(f) : (q = this.d[this.d.length - 1], ma(q) != ma(f) && (this.f.push(this.a.length), this.d.push(f)));
+        this.V = c[0];
+        this.n = c[1];
+        this.J = p[1];
+        this.L = e[1];
+        this.N = e[0];
+        this.T = g;
+        this.sa = h[0];
+        this.X = h[1];
+        this.oa = n;
+        this.ba = k;
+        this.Fa = a;
+        this.Ga = p[0]
+    };
+
+    function kq(a, c, d) {
+        this.e = c;
+        this.f = a;
+        this.d = d;
+        this.a = {}
+    }
+
+    function lq(a, c) {
+        var d = [],
+            e;
+        for (e in a.a) d.push(eq(a.a[e], c));
+        return Kg.apply(null, d)
+    }
+
+    function mq(a, c) {
+        for (var d in a.a) gq(a.a[d], c)
+    }
+    kq.prototype.b = function(a, c) {
+        var d = this.a[c];
+        m(d) || (d = new nq[c](this.f, this.e), this.a[c] = d);
+        return d
+    };
+    kq.prototype.la = function() {
+        return xb(this.a)
+    };
+
+    function oq(a, c, d, e, f, g, h, k, n, p, q, r, t, u) {
+        var A = pq,
+            z, D;
+        for (z = pm.length - 1; 0 <= z; --z)
+            if (D = a.a[pm[z]], m(D) && (D = iq(D, c, d, e, f, A, g, h, k, n, p, q, r, t, u))) return D
+    }
+    kq.prototype.c = function(a, c, d, e, f, g, h, k, n, p, q, r, t, u) {
+        var A = c.b;
+        A.bindFramebuffer(A.FRAMEBUFFER, c.Te());
+        var z;
+        m(this.d) && (z = Od(Ud(a), e * this.d));
+        return oq(this, c, a, e, f, k, n, p, q, r, t, function(a) {
+            var c = new Uint8Array(4);
+            A.readPixels(0, 0, 1, 1, A.RGBA, A.UNSIGNED_BYTE, c);
+            if (0 < c[3] && (a = u(a))) return a
+        }, !0, z)
+    };
+
+    function qq(a, c, d, e, f, g, h, k, n, p, q) {
+        var r = d.b;
+        r.bindFramebuffer(r.FRAMEBUFFER, d.Te());
+        a = oq(a, d, c, e, f, g, h, k, n, p, q, function() {
+            var a = new Uint8Array(4);
+            r.readPixels(0, 0, 1, 1, r.RGBA, r.UNSIGNED_BYTE, a);
+            return 0 < a[3]
+        }, !1);
+        return m(a)
+    }
+    var nq = {
+            Image: dq
+        },
+        pq = [1, 1];
+
+    function rq(a, c, d, e, f, g) {
+        this.a = a;
+        this.e = c;
+        this.d = g;
+        this.i = f;
+        this.g = e;
+        this.f = d;
+        this.c = null;
+        this.b = {}
+    }
+    w(rq, hl);
+    l = rq.prototype;
+    l.tc = function(a, c) {
+        var d = a.toString(),
+            e = this.b[d];
+        m(e) ? e.push(c) : this.b[d] = [c]
+    };
+    l.uc = function() {};
+    l.Le = function(a, c) {
+        var d = (0, c.d)(a);
+        if (null != d && he(this.d, d.G())) {
+            var e = c.b;
+            m(e) || (e = 0);
+            this.tc(e, function(a) {
+                a.Aa(c.e, c.c);
+                a.Za(c.f);
+                a.Ba(c.a);
+                var e = sq[d.M()];
+                e && e.call(a, d, null)
+            })
+        }
+    };
+    l.zd = function(a, c) {
+        var d = a.d,
+            e, f;
+        e = 0;
+        for (f = d.length; e < f; ++e) {
+            var g = d[e],
+                h = sq[g.M()];
+            h && h.call(this, g, c)
+        }
+    };
+    l.kb = function(a, c) {
+        var d = this.a,
+            e = (new kq(1, this.d)).b(0, "Image");
+        e.Za(this.c);
+        e.kb(a, c);
+        gq(e, d);
+        iq(e, this.a, this.e, this.f, this.g, this.i, 1, 0, 1, 0, 1, {}, void 0, !1);
+        eq(e, d)()
+    };
+    l.zb = function() {};
+    l.vc = function() {};
+    l.jb = function(a, c) {
+        var d = this.a,
+            e = (new kq(1, this.d)).b(0, "Image");
+        e.Za(this.c);
+        e.jb(a, c);
+        gq(e, d);
+        iq(e, this.a, this.e, this.f, this.g, this.i, 1, 0, 1, 0, 1, {}, void 0, !1);
+        eq(e, d)()
+    };
+    l.wc = function() {};
+    l.Rb = function() {};
+    l.lb = function() {};
+    l.Aa = function() {};
+    l.Za = function(a) {
+        this.c = a
+    };
+    l.Ba = function() {};
+    var sq = {
+        Point: rq.prototype.kb,
+        MultiPoint: rq.prototype.jb,
+        GeometryCollection: rq.prototype.zd
+    };
+
+    function tq() {
+        this.b = "precision mediump float;varying vec2 a;uniform mat4 f;uniform float g;uniform sampler2D h;void main(void){vec4 texColor=texture2D(h,a);gl_FragColor.rgb=(f*vec4(texColor.rgb,1.)).rgb;gl_FragColor.a=texColor.a*g;}"
+    }
+    w(tq, Np);
+    da(tq);
+
+    function uq() {
+        this.b = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"
+    }
+    w(uq, Op);
+    da(uq);
+
+    function vq(a, c) {
+        this.g = a.getUniformLocation(c, "f");
+        this.c = a.getUniformLocation(c, "g");
+        this.d = a.getUniformLocation(c, "e");
+        this.f = a.getUniformLocation(c, "d");
+        this.e = a.getUniformLocation(c, "h");
+        this.b = a.getAttribLocation(c, "b");
+        this.a = a.getAttribLocation(c, "c")
+    };
+
+    function wq() {
+        this.b = "precision mediump float;varying vec2 a;uniform float f;uniform sampler2D g;void main(void){vec4 texColor=texture2D(g,a);gl_FragColor.rgb=texColor.rgb;gl_FragColor.a=texColor.a*f;}"
+    }
+    w(wq, Np);
+    da(wq);
+
+    function xq() {
+        this.b = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform mat4 d;uniform mat4 e;void main(void){gl_Position=e*vec4(b,0.,1.);a=(d*vec4(c,0.,1.)).st;}"
+    }
+    w(xq, Op);
+    da(xq);
+
+    function yq(a, c) {
+        this.c = a.getUniformLocation(c, "f");
+        this.d = a.getUniformLocation(c, "e");
+        this.f = a.getUniformLocation(c, "d");
+        this.e = a.getUniformLocation(c, "g");
+        this.b = a.getAttribLocation(c, "b");
+        this.a = a.getAttribLocation(c, "c")
+    };
+
+    function zq(a, c) {
+        uj.call(this, c);
+        this.c = a;
+        this.N = new Vp([-1, -1, 0, 0, 1, -1, 1, 0, -1, 1, 0, 1, 1, 1, 1, 1]);
+        this.e = this.Qa = null;
+        this.f = void 0;
+        this.q = zd();
+        this.n = Bd();
+        this.T = new xf;
+        this.o = this.l = null
+    }
+    w(zq, uj);
+
+    function Aq(a, c, d) {
+        var e = a.c.e;
+        if (m(a.f) && a.f == d) e.bindFramebuffer(36160, a.e);
+        else {
+            c.postRenderFunctions.push(ta(function(a, c, d) {
+                a.isContextLost() || (a.deleteFramebuffer(c), a.deleteTexture(d))
+            }, e, a.e, a.Qa));
+            c = Zp(e, d, d);
+            var f = e.createFramebuffer();
+            e.bindFramebuffer(36160, f);
+            e.framebufferTexture2D(36160, 36064, 3553, c, 0);
+            a.Qa = c;
+            a.e = f;
+            a.f = d
+        }
+    }
+    zq.prototype.Lg = function(a, c, d) {
+        Bq(this, "precompose", d, a);
+        Xp(d, 34962, this.N);
+        var e = d.b,
+            f = c.brightness || 1 != c.contrast || c.hue || 1 != c.saturation,
+            g, h;
+        f ? (g = tq.Ia(), h = uq.Ia()) : (g = wq.Ia(), h = xq.Ia());
+        g = aq(d, g, h);
+        f ? null === this.l ? this.l = h = new vq(e, g) : h = this.l : null === this.o ? this.o = h = new yq(e, g) : h = this.o;
+        d.oe(g) && (e.enableVertexAttribArray(h.b), e.vertexAttribPointer(h.b, 2, 5126, !1, 16, 0), e.enableVertexAttribArray(h.a), e.vertexAttribPointer(h.a, 2, 5126, !1, 16, 8), e.uniform1i(h.e, 0));
+        e.uniformMatrix4fv(h.f, !1, this.q);
+        e.uniformMatrix4fv(h.d, !1, this.n);
+        f && e.uniformMatrix4fv(h.g, !1, yf(this.T, c.brightness, c.contrast, c.hue, c.saturation));
+        e.uniform1f(h.c, c.opacity);
+        e.bindTexture(3553, this.Qa);
+        e.drawArrays(5, 0, 4);
+        Bq(this, "postcompose", d, a)
+    };
+
+    function Bq(a, c, d, e) {
+        a = a.a;
+        if (bd(a, c)) {
+            var f = e.viewState;
+            a.dispatchEvent(new il(c, a, new rq(d, f.center, f.resolution, f.rotation, e.size, e.extent), null, e, null, d))
+        }
+    }
+    zq.prototype.gf = function() {
+        this.e = this.Qa = null;
+        this.f = void 0
+    };
+
+    function Cq(a, c) {
+        zq.call(this, a, c);
+        this.i = this.g = this.d = null
+    }
+    w(Cq, zq);
+
+    function Dq(a, c) {
+        var d = c.b();
+        return cq(a.c.e, d)
+    }
+    Cq.prototype.Pa = function(a, c, d, e) {
+        var f = this.a;
+        return f.da().ge(a, c.viewState.resolution, c.viewState.rotation, c.skippedFeatureUids, function(a) {
+            return d.call(e, a, f)
+        })
+    };
+    Cq.prototype.hf = function(a, c) {
+        var d = this.c.e,
+            e = a.pixelRatio,
+            f = a.viewState,
+            g = f.center,
+            h = f.resolution,
+            k = f.rotation,
+            n = this.d,
+            p = this.Qa,
+            q = this.a.da(),
+            r = a.viewHints,
+            t = a.extent;
+        m(c.extent) && (t = ge(t, c.extent));
+        r[0] || r[1] || je(t) || (f = f.projection, r = q.f, null === r || (f = r), t = q.Cc(t, h, e, f), null !== t && wj(this, t) && (n = t, p = Dq(this, t), null === this.Qa || a.postRenderFunctions.push(ta(function(a, c) {
+            a.isContextLost() || a.deleteTexture(c)
+        }, d, this.Qa))));
+        null !== n && (d = this.c.d.l, Eq(this, d.width, d.height, e, g, h, k, n.G()), this.i = null, e = this.q, Dd(e), Hd(e, 1, -1), Gd(e, 0, -1), this.d = n, this.Qa = p, yj(a.attributions, n.f), zj(a, q));
+        return !0
+    };
+
+    function Eq(a, c, d, e, f, g, h, k) {
+        c *= g;
+        d *= g;
+        a = a.n;
+        Dd(a);
+        Hd(a, 2 * e / c, 2 * e / d);
+        Id(a, -h);
+        Gd(a, k[0] - f[0], k[1] - f[1]);
+        Hd(a, (k[2] - k[0]) / 2, (k[3] - k[1]) / 2);
+        Gd(a, 1, 1)
+    }
+    Cq.prototype.ee = function(a, c) {
+        var d = this.Pa(a, c, Gg, this);
+        return m(d)
+    };
+    Cq.prototype.dc = function(a, c, d, e) {
+        if (null !== this.d && !fa(this.d.b()))
+            if (this.a.da() instanceof xp) {
+                if (a = a.slice(), sj(c.pixelToCoordinateMatrix, a, a), this.Pa(a, c, Gg, this)) return d.call(e, this.a)
+            } else {
+                var f = [this.d.b().width, this.d.b().height];
+                if (null === this.i) {
+                    var g = c.size;
+                    c = zd();
+                    Dd(c);
+                    Gd(c, -1, -1);
+                    Hd(c, 2 / g[0], 2 / g[1]);
+                    Gd(c, 0, g[1]);
+                    Hd(c, 1, -1);
+                    g = zd();
+                    Fd(this.n, g);
+                    var h = zd();
+                    Dd(h);
+                    Gd(h, 0, f[1]);
+                    Hd(h, 1, -1);
+                    Hd(h, f[0] / 2, f[1] / 2);
+                    Gd(h, 1, 1);
+                    var k = zd();
+                    Ed(h, g, k);
+                    Ed(k, c, k);
+                    this.i = k
+                }
+                c = [0, 0];
+                sj(this.i, a, c);
+                if (!(0 > c[0] || c[0] > f[0] || 0 > c[1] || c[1] > f[1]) && (null === this.g && (this.g = ai(1, 1)), this.g.clearRect(0, 0, 1, 1), this.g.drawImage(this.d.b(), c[0], c[1], 1, 1, 0, 0, 1, 1), 0 < this.g.getImageData(0, 0, 1, 1).data[3])) return d.call(e, this.a)
+            }
+    };
+
+    function Fq() {
+        this.b = "precision mediump float;varying vec2 a;uniform sampler2D e;void main(void){gl_FragColor=texture2D(e,a);}"
+    }
+    w(Fq, Np);
+    da(Fq);
+
+    function Gq() {
+        this.b = "varying vec2 a;attribute vec2 b;attribute vec2 c;uniform vec4 d;void main(void){gl_Position=vec4(b*d.xy+d.zw,0.,1.);a=c;}"
+    }
+    w(Gq, Op);
+    da(Gq);
+
+    function Hq(a, c) {
+        this.c = a.getUniformLocation(c, "e");
+        this.d = a.getUniformLocation(c, "d");
+        this.b = a.getAttribLocation(c, "b");
+        this.a = a.getAttribLocation(c, "c")
+    };
+
+    function Iq(a, c) {
+        zq.call(this, a, c);
+        this.J = Fq.Ia();
+        this.X = Gq.Ia();
+        this.d = null;
+        this.H = new Vp([0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0]);
+        this.p = this.g = null;
+        this.i = -1;
+        this.L = [0, 0]
+    }
+    w(Iq, zq);
+    l = Iq.prototype;
+    l.O = function() {
+        Yp(this.c.d, this.H);
+        Iq.S.O.call(this)
+    };
+    l.yd = function(a, c) {
+        var d = this.c;
+        return function(e, f) {
+            return $g(a, e, f, function(a) {
+                var f = wg(d.a, a.gb());
+                f && (c[e] || (c[e] = {}), c[e][a.b.toString()] = a);
+                return f
+            })
+        }
+    };
+    l.gf = function() {
+        Iq.S.gf.call(this);
+        this.d = null
+    };
+    l.hf = function(a, c, d) {
+        var e = this.c,
+            f = d.b,
+            g = a.viewState,
+            h = g.projection,
+            k = this.a,
+            n = k.da(),
+            p = ah(n, h),
+            q = Tg(p, g.resolution),
+            r = p.ma(q),
+            t = n.Xb(q, a.pixelRatio, h),
+            u = t[0] / ld(p.na(q), this.L)[0],
+            A = r / u,
+            z = n.Cd(),
+            D = g.center,
+            B;
+        r == g.resolution ? (D = Bj(D, r, a.size), B = ee(D, r, g.rotation, a.size)) : B = a.extent;
+        r = Qg(p, B, r);
+        if (null !== this.g && jf(this.g, r) && this.i == n.b) A = this.p;
+        else {
+            var y = [kf(r), r.a - r.c + 1],
+                y = Math.max(y[0] * t[0], y[1] * t[1]),
+                K = Math.pow(2, Math.ceil(Math.log(y) / Math.LN2)),
+                y = A * K,
+                J = p.Mb(q),
+                H = J[0] + r.b * t[0] * A,
+                A = J[1] + r.c * t[1] * A,
+                A = [H, A, H + y, A + y];
+            Aq(this, a, K);
+            f.viewport(0, 0, K, K);
+            f.clearColor(0, 0, 0, 0);
+            f.clear(16384);
+            f.disable(3042);
+            K = aq(d, this.J, this.X);
+            d.oe(K);
+            null === this.d && (this.d = new Hq(f, K));
+            Xp(d, 34962, this.H);
+            f.enableVertexAttribArray(this.d.b);
+            f.vertexAttribPointer(this.d.b, 2, 5126, !1, 16, 0);
+            f.enableVertexAttribArray(this.d.a);
+            f.vertexAttribPointer(this.d.a, 2, 5126, !1, 16, 8);
+            f.uniform1i(this.d.c, 0);
+            d = {};
+            d[q] = {};
+            var P = this.yd(n, d),
+                sa = k.c(),
+                K = !0,
+                H = Kd(),
+                Oa = new ff(0, 0, 0, 0),
+                N, za, cb;
+            for (za = r.b; za <= r.d; ++za)
+                for (cb = r.c; cb <= r.a; ++cb) {
+                    J = n.Vb(q, za, cb, u, h);
+                    if (m(c.extent) && (N = Og(p, J.b, H), !he(N, c.extent))) continue;
+                    N = J.state;
+                    if (2 == N) {
+                        if (wg(e.a, J.gb())) {
+                            d[q][ef(J.b)] = J;
+                            continue
+                        }
+                    } else if (4 == N || 3 == N && !sa) continue;
+                    K = !1;
+                    N = p.Ad(J.b, P, null, Oa, H);
+                    N || (J = p.Ld(J.b, Oa, H), null === J || P(q + 1, J))
+                }
+            c = Ua(tb(d), Number);
+            gb(c);
+            for (var P = new Float32Array(4), Ga, Bb, $a, sa = 0, Oa = c.length; sa < Oa; ++sa)
+                for (Ga in Bb = d[c[sa]], Bb) J = Bb[Ga], N = Og(p, J.b, H), za = 2 * (N[2] - N[0]) / y, cb = 2 * (N[3] - N[1]) / y, $a = 2 * (N[0] - A[0]) / y - 1, N = 2 * (N[1] - A[1]) / y - 1, yd(P, za, cb, $a, N), f.uniform4fv(this.d.d, P), Jq(e, J, t, z * u), f.drawArrays(5, 0, 4);
+            K ? (this.g = r, this.p = A, this.i = n.b) : (this.p = this.g = null, this.i = -1, a.animate = !0)
+        }
+        Aj(a.usedTiles, n, q, r);
+        var Ic = e.q;
+        Cj(a, n, p, u, h, B, q, k.a(), function(a) {
+            var c;
+            (c = 2 != a.state || wg(e.a, a.gb())) || (c = a.gb() in Ic.c);
+            c || Dj(Ic, [a, Sg(p, a.b), p.ma(a.b[0]), t, z * u])
+        }, this);
+        xj(a, n);
+        zj(a, n);
+        f = this.q;
+        Dd(f);
+        Gd(f, (D[0] - A[0]) / (A[2] - A[0]), (D[1] - A[1]) / (A[3] - A[1]));
+        0 !== g.rotation && Id(f, g.rotation);
+        Hd(f, a.size[0] * g.resolution / (A[2] - A[0]), a.size[1] * g.resolution / (A[3] - A[1]));
+        Gd(f, -.5, -.5);
+        return !0
+    };
+    l.dc = function(a, c, d, e) {
+        if (null !== this.e) {
+            var f = [0, 0];
+            sj(this.q, [a[0] / c.size[0], (c.size[1] - a[1]) / c.size[1]], f);
+            a = [f[0] * this.f, f[1] * this.f];
+            c = this.c.d.b;
+            c.bindFramebuffer(c.FRAMEBUFFER, this.e);
+            f = new Uint8Array(4);
+            c.readPixels(a[0], a[1], 1, 1, c.RGBA, c.UNSIGNED_BYTE, f);
+            if (0 < f[3]) return d.call(e, this.a)
+        }
+    };
+
+    function Kq(a, c) {
+        zq.call(this, a, c);
+        this.i = !1;
+        this.L = -1;
+        this.J = NaN;
+        this.p = Kd();
+        this.g = this.d = this.H = null
+    }
+    w(Kq, zq);
+    l = Kq.prototype;
+    l.Lg = function(a, c, d) {
+        this.g = c;
+        var e = a.viewState,
+            f = this.d;
+        if (null !== f && !f.la()) {
+            var g = e.center,
+                h = e.resolution,
+                e = e.rotation,
+                k = a.size,
+                n = c.opacity,
+                p = c.brightness,
+                q = c.contrast,
+                r = c.hue;
+            c = c.saturation;
+            a = a.skippedFeatureUids;
+            var t, u, A;
+            t = 0;
+            for (u = pm.length; t < u; ++t) A = f.a[pm[t]], m(A) && iq(A, d, g, h, e, k, n, p, q, r, c, a, void 0, !1)
+        }
+    };
+    l.O = function() {
+        var a = this.d;
+        null !== a && (lq(a, this.c.d)(), this.d = null);
+        Kq.S.O.call(this)
+    };
+    l.Pa = function(a, c, d, e) {
+        if (null !== this.d && null !== this.g) {
+            var f = c.viewState,
+                g = this.a,
+                h = this.g,
+                k = {};
+            return this.d.c(a, this.c.d, f.center, f.resolution, f.rotation, c.size, c.pixelRatio, h.opacity, h.brightness, h.contrast, h.hue, h.saturation, c.skippedFeatureUids, function(a) {
+                var c = ma(a).toString();
+                if (!(c in k)) return k[c] = !0, d.call(e, a, g)
+            })
+        }
+    };
+    l.ee = function(a, c) {
+        if (null === this.d || null === this.g) return !1;
+        var d = c.viewState,
+            e = this.g;
+        return qq(this.d, a, this.c.d, d.resolution, d.rotation, e.opacity, e.brightness, e.contrast, e.hue, e.saturation, c.skippedFeatureUids)
+    };
+    l.dc = function(a, c, d, e) {
+        a = a.slice();
+        sj(c.pixelToCoordinateMatrix, a, a);
+        if (this.ee(a, c)) return d.call(e, this.a)
+    };
+    l.Rl = function() {
+        vj(this)
+    };
+    l.hf = function(a, c, d) {
+        function e(a) {
+            var c;
+            m(a.c) ? c = a.c.call(a, p) : m(f.a) && (c = (0, f.a)(a, p));
+            if (null != c) {
+                if (null != c) {
+                    var d, e, g = !1;
+                    d = 0;
+                    for (e = c.length; d < e; ++d) g = fn(t, a, c[d], en(p, q), this.Rl, this) || g;
+                    a = g
+                } else a = !1;
+                this.i = this.i || a
+            }
+        }
+        var f = this.a;
+        c = f.da();
+        yj(a.attributions, c.d);
+        zj(a, c);
+        var g = a.viewHints[0],
+            h = a.viewHints[1],
+            k = f.o,
+            n = f.n;
+        if (!this.i && !k && g || !n && h) return !0;
+        var h = a.extent,
+            k = a.viewState,
+            g = k.projection,
+            p = k.resolution,
+            q = a.pixelRatio,
+            k = f.b,
+            r = f.c,
+            n = f.get("renderOrder");
+        m(n) || (n = dn);
+        h = Od(h, r * p);
+        if (!this.i && this.J == p && this.L == k && this.H == n && Rd(this.p, h)) return !0;
+        null === this.d || a.postRenderFunctions.push(lq(this.d, d));
+        this.i = !1;
+        var t = new kq(.5 * p / q, h, f.c);
+        c.ac(h, p, g);
+        if (null === n) c.Ab(h, p, e, this);
+        else {
+            var u = [];
+            c.Ab(h, p, function(a) {
+                u.push(a)
+            }, this);
+            gb(u, n);
+            Sa(u, e, this)
+        }
+        mq(t, d);
+        this.J = p;
+        this.L = k;
+        this.H = n;
+        this.p = h;
+        this.d = t;
+        return !0
+    };
+
+    function Lq(a, c) {
+        Ij.call(this, 0, c);
+        this.b = Mf("CANVAS");
+        this.b.style.width = "100%";
+        this.b.style.height = "100%";
+        this.b.className = "ol-unselectable";
+        Pf(a, this.b, 0);
+        this.p = this.H = 0;
+        this.J = ai();
+        this.l = !0;
+        this.e = hi(this.b, {
+            antialias: !0,
+            depth: !1,
+            Ei: !0,
+            preserveDrawingBuffer: !1,
+            stencil: !0
+        });
+        this.d = new Wp(this.b, this.e);
+        x(this.b, "webglcontextlost", this.Pl, !1, this);
+        x(this.b, "webglcontextrestored", this.Ql, !1, this);
+        this.a = new vg;
+        this.n = null;
+        this.q = new Nj(ra(function(a) {
+            var c = a[1];
+            a = a[2];
+            var f = c[0] - this.n[0],
+                c = c[1] - this.n[1];
+            return 65536 * Math.log(a) + Math.sqrt(f * f + c * c) / a
+        }, this), function(a) {
+            return a[0].gb()
+        });
+        this.L = ra(function() {
+            if (!this.q.la()) {
+                Rj(this.q);
+                var a = Oj(this.q);
+                Jq(this, a[0], a[3], a[4])
+            }
+        }, this);
+        this.i = 0;
+        Mq(this)
+    }
+    w(Lq, Ij);
+
+    function Jq(a, c, d, e) {
+        var f = a.e,
+            g = c.gb();
+        if (wg(a.a, g)) a = a.a.get(g), f.bindTexture(3553, a.Qa), 9729 != a.lg && (f.texParameteri(3553, 10240, 9729), a.lg = 9729), 9729 != a.mg && (f.texParameteri(3553, 10240, 9729), a.mg = 9729);
+        else {
+            var h = f.createTexture();
+            f.bindTexture(3553, h);
+            if (0 < e) {
+                var k = a.J.canvas,
+                    n = a.J;
+                a.H !== d[0] || a.p !== d[1] ? (k.width = d[0], k.height = d[1], a.H = d[0], a.p = d[1]) : n.clearRect(0, 0, d[0], d[1]);
+                n.drawImage(c.Ma(), e, e, d[0], d[1], 0, 0, d[0], d[1]);
+                f.texImage2D(3553, 0, 6408, 6408, 5121, k)
+            } else f.texImage2D(3553, 0, 6408, 6408, 5121, c.Ma());
+            f.texParameteri(3553, 10240, 9729);
+            f.texParameteri(3553, 10241, 9729);
+            f.texParameteri(3553, 10242, 33071);
+            f.texParameteri(3553, 10243, 33071);
+            a.a.set(g, {
+                Qa: h,
+                lg: 9729,
+                mg: 9729
+            })
+        }
+    }
+    l = Lq.prototype;
+    l.Ke = function(a) {
+        return a instanceof I ? new Cq(this, a) : a instanceof L ? new Iq(this, a) : a instanceof M ? new Kq(this, a) : null
+    };
+
+    function Nq(a, c, d) {
+        var e = a.g;
+        if (bd(e, c)) {
+            var f = a.d,
+                g = d.extent,
+                h = d.size,
+                k = d.viewState,
+                n = k.resolution,
+                p = k.center,
+                q = k.rotation,
+                k = new rq(f, p, n, q, h, g),
+                g = new kq(.5 * n / d.pixelRatio, g);
+            e.dispatchEvent(new il(c, e, k, g, d, null, f));
+            mq(g, f);
+            if (!g.la()) {
+                var r = Oq;
+                c = r.opacity;
+                d = r.brightness;
+                var e = r.contrast,
+                    t = r.hue,
+                    r = r.saturation,
+                    u = {},
+                    A, z, D;
+                A = 0;
+                for (z = pm.length; A < z; ++A) D = g.a[pm[A]], m(D) && iq(D, f, p, n, q, h, c, d, e, t, r, u, void 0, !1)
+            }
+            lq(g, f)();
+            f = Ua(tb(k.b), Number);
+            gb(f);
+            h = 0;
+            for (n = f.length; h < n; ++h)
+                for (p = k.b[f[h].toString()], q = 0, c = p.length; q < c; ++q) p[q](k);
+            a.c = g
+        }
+    }
+    l.O = function() {
+        var a = this.e;
+        a.isContextLost() || this.a.forEach(function(c) {
+            null === c || a.deleteTexture(c.Qa)
+        });
+        qc(this.d);
+        Lq.S.O.call(this)
+    };
+    l.Ci = function(a, c) {
+        for (var d = this.e, e; 1024 < this.a.Tb() - this.i;) {
+            e = this.a.b.qc;
+            if (null === e)
+                if (+this.a.b.Wd == c.index) break;
+                else --this.i;
+            else d.deleteTexture(e.Qa);
+            this.a.pop()
+        }
+    };
+    l.M = function() {
+        return "webgl"
+    };
+    l.Pl = function(a) {
+        a.preventDefault();
+        this.a.clear();
+        this.i = 0;
+        pb(this.f, function(a) {
+            a.gf()
+        })
+    };
+    l.Ql = function() {
+        Mq(this);
+        this.g.render()
+    };
+
+    function Mq(a) {
+        a = a.e;
+        a.activeTexture(33984);
+        a.blendFuncSeparate(770, 771, 1, 771);
+        a.disable(2884);
+        a.disable(2929);
+        a.disable(3089);
+        a.disable(2960)
+    }
+    l.ue = function(a) {
+        var c = this.d,
+            d = this.e;
+        if (d.isContextLost()) return !1;
+        if (null === a) return this.l && (mg(this.b, !1), this.l = !1), !1;
+        this.n = a.focus;
+        this.a.set((-a.index).toString(), null);
+        ++this.i;
+        var e = [],
+            f = a.layerStatesArray,
+            g = a.viewState.resolution,
+            h, k, n, p;
+        h = 0;
+        for (k = f.length; h < k; ++h) p = f[h], oj(p, g) && "ready" == p.i && (n = Lj(this, p.layer), n.hf(a, p, c) && e.push(p));
+        f = a.size[0] * a.pixelRatio;
+        g = a.size[1] * a.pixelRatio;
+        if (this.b.width != f || this.b.height != g) this.b.width = f, this.b.height = g;
+        d.bindFramebuffer(36160, null);
+        d.clearColor(0, 0, 0, 0);
+        d.clear(16384);
+        d.enable(3042);
+        d.viewport(0, 0, this.b.width, this.b.height);
+        Nq(this, "precompose", a);
+        h = 0;
+        for (k = e.length; h < k; ++h) p = e[h], n = Lj(this, p.layer), n.Lg(a, p, c);
+        this.l || (mg(this.b, !0), this.l = !0);
+        Jj(a);
+        1024 < this.a.Tb() - this.i && a.postRenderFunctions.push(ra(this.Ci, this));
+        this.q.la() || (a.postRenderFunctions.push(this.L), a.animate = !0);
+        Nq(this, "postcompose", a);
+        Mj(this, a);
+        a.postRenderFunctions.push(Kj)
+    };
+    l.ef = function(a, c, d, e, f, g) {
+        var h;
+        if (this.e.isContextLost()) return !1;
+        var k = this.d,
+            n = c.viewState;
+        if (null !== this.c) {
+            var p = {},
+                q = Oq;
+            if (h = this.c.c(a, k, n.center, n.resolution, n.rotation, c.size, c.pixelRatio, q.opacity, q.brightness, q.contrast, q.hue, q.saturation, {}, function(a) {
+                    var c = ma(a).toString();
+                    if (!(c in p)) return p[c] = !0, d.call(e, a, null)
+                })) return h
+        }
+        k = c.layerStatesArray;
+        for (q = k.length - 1; 0 <= q; --q) {
+            h = k[q];
+            var r = h.layer;
+            if (oj(h, n.resolution) && f.call(g, r) && (h = Lj(this, r).Pa(a, c, d, e))) return h
+        }
+    };
+    l.Kg = function(a, c, d, e) {
+        var f = !1;
+        if (this.e.isContextLost()) return !1;
+        var g = this.d,
+            h = c.viewState;
+        if (null !== this.c && (f = Oq, f = qq(this.c, a, g, h.resolution, h.rotation, f.opacity, f.brightness, f.contrast, f.hue, f.saturation, {}))) return !0;
+        var g = c.layerStatesArray,
+            k;
+        for (k = g.length - 1; 0 <= k; --k) {
+            var n = g[k],
+                p = n.layer;
+            if (oj(n, h.resolution) && d.call(e, p) && (f = Lj(this, p).ee(a, c))) return !0
+        }
+        return f
+    };
+    l.Jg = function(a, c, d, e, f) {
+        if (this.e.isContextLost()) return !1;
+        var g = this.d,
+            h = c.viewState,
+            k;
+        if (null !== this.c) {
+            var n = Oq;
+            k = this.g.ka(a);
+            if (qq(this.c, k, g, h.resolution, h.rotation, n.opacity, n.brightness, n.contrast, n.hue, n.saturation, {}) && (k = d.call(e, null))) return k
+        }
+        g = c.layerStatesArray;
+        for (n = g.length - 1; 0 <= n; --n) {
+            k = g[n];
+            var p = k.layer;
+            if (oj(k, h.resolution) && f.call(e, p) && (k = Lj(this, p).dc(a, c, d, e))) return k
+        }
+    };
+    var Oq = {
+        opacity: 1,
+        brightness: 0,
+        contrast: 1,
+        hue: 0,
+        saturation: 1
+    };
+    var Pq = ["canvas", "webgl", "dom"];
+
+    function W(a) {
+        fd.call(this);
+        var c = Qq(a);
+        this.wb = m(a.loadTilesWhileAnimating) ? a.loadTilesWhileAnimating : !1;
+        this.xb = m(a.loadTilesWhileInteracting) ? a.loadTilesWhileInteracting : !1;
+        this.Nc = m(a.pixelRatio) ? a.pixelRatio : ji;
+        this.sc = c.logos;
+        this.o = new rh(this.Qn, void 0, this);
+        pc(this, this.o);
+        this.Ra = zd();
+        this.Ee = zd();
+        this.vb = 0;
+        this.c = null;
+        this.oa = Kd();
+        this.g = this.J = null;
+        this.a = Jf("DIV", "ol-viewport");
+        this.a.style.position = "relative";
+        this.a.style.overflow = "hidden";
+        this.a.style.width = "100%";
+        this.a.style.height = "100%";
+        this.a.style.msTouchAction = "none";
+        oi && (this.a.className = "ol-touch");
+        this.X = Jf("DIV", "ol-overlaycontainer");
+        this.a.appendChild(this.X);
+        this.p = Jf("DIV", "ol-overlaycontainer-stopevent");
+        x(this.p, ["click", "dblclick", "mousedown", "touchstart", "MSPointerDown", ij, Jb ? "DOMMouseScroll" : "mousewheel"], sc);
+        this.a.appendChild(this.p);
+        a = new aj(this);
+        x(a, sb(lj), this.eg, !1, this);
+        pc(this, a);
+        this.T = c.keyboardEventTarget;
+        this.n = new Lh;
+        x(this.n, "key", this.dg, !1, this);
+        pc(this, this.n);
+        a = new Th(this.a);
+        x(a, "mousewheel", this.dg, !1, this);
+        pc(this, a);
+        this.e = c.controls;
+        this.d = c.interactions;
+        this.f = c.overlays;
+        this.i = new c.Sn(this.a, this);
+        pc(this, this.i);
+        this.Ga = new Gh;
+        pc(this, this.Ga);
+        this.L = this.l = null;
+        this.H = [];
+        this.ba = [];
+        this.Fa = new Sj(ra(this.zj, this), ra(this.bl, this));
+        this.N = {};
+        x(this, hd("layergroup"), this.Qj, !1, this);
+        x(this, hd("view"), this.mk, !1, this);
+        x(this, hd("size"), this.jk, !1, this);
+        x(this, hd("target"), this.lk, !1, this);
+        this.t(c.values);
+        this.e.forEach(function(a) {
+            a.setMap(this)
+        }, this);
+        x(this.e, "add", function(a) {
+            a.element.setMap(this)
+        }, !1, this);
+        x(this.e, "remove", function(a) {
+            a.element.setMap(null)
+        }, !1, this);
+        this.d.forEach(function(a) {
+            a.setMap(this)
+        }, this);
+        x(this.d, "add", function(a) {
+            a.element.setMap(this)
+        }, !1, this);
+        x(this.d, "remove", function(a) {
+            a.element.setMap(null)
+        }, !1, this);
+        this.f.forEach(function(a) {
+            a.setMap(this)
+        }, this);
+        x(this.f, "add", function(a) {
+            a.element.setMap(this)
+        }, !1, this);
+        x(this.f, "remove", function(a) {
+            a.element.setMap(null)
+        }, !1, this)
+    }
+    w(W, fd);
+    l = W.prototype;
+    l.si = function(a) {
+        this.e.push(a)
+    };
+    l.ti = function(a) {
+        this.d.push(a)
+    };
+    l.Jf = function(a) {
+        this.Ub().Bc().push(a)
+    };
+    l.Kf = function(a) {
+        this.f.push(a)
+    };
+    l.Ha = function(a) {
+        this.render();
+        Array.prototype.push.apply(this.H, arguments)
+    };
+    l.O = function() {
+        Qf(this.a);
+        W.S.O.call(this)
+    };
+    l.Ne = function(a, c, d, e, f) {
+        if (null !== this.c) return a = this.ka(a), this.i.ef(a, this.c, c, m(d) ? d : null, m(e) ? e : Gg, m(f) ? f : null)
+    };
+    l.al = function(a, c, d, e, f) {
+        if (null !== this.c) return this.i.Jg(a, this.c, c, m(d) ? d : null, m(e) ? e : Gg, m(f) ? f : null)
+    };
+    l.ok = function(a, c, d) {
+        if (null === this.c) return !1;
+        a = this.ka(a);
+        return this.i.Kg(a, this.c, m(c) ? c : Gg, m(d) ? d : null)
+    };
+    l.Ui = function(a) {
+        return this.ka(this.Bd(a))
+    };
+    l.Bd = function(a) {
+        if (m(a.changedTouches)) {
+            var c = a.changedTouches[0];
+            a = jg(this.a);
+            return [c.clientX - a.x, c.clientY - a.y]
+        }
+        c = this.a;
+        a = jg(a);
+        c = jg(c);
+        c = new Af(a.x - c.x, a.y - c.y);
+        return [c.x, c.y]
+    };
+    l.df = function() {
+        return this.get("target")
+    };
+    l.bd = function() {
+        var a = this.df();
+        return m(a) ? Ff(a) : null
+    };
+    l.ka = function(a) {
+        var c = this.c;
+        if (null === c) return null;
+        a = a.slice();
+        return sj(c.pixelToCoordinateMatrix, a, a)
+    };
+    l.Si = function() {
+        return this.e
+    };
+    l.oj = function() {
+        return this.f
+    };
+    l.bj = function() {
+        return this.d
+    };
+    l.Ub = function() {
+        return this.get("layergroup")
+    };
+    l.vg = function() {
+        return this.Ub().Bc()
+    };
+    l.ta = function(a) {
+        var c = this.c;
+        if (null === c) return null;
+        a = a.slice(0, 2);
+        return sj(c.coordinateToPixelMatrix, a, a)
+    };
+    l.xa = function() {
+        return this.get("size")
+    };
+    l.R = function() {
+        return this.get("view")
+    };
+    l.Bj = function() {
+        return this.a
+    };
+    l.zj = function(a, c, d, e) {
+        var f = this.c;
+        if (!(null !== f && c in f.wantedTiles && f.wantedTiles[c][ef(a.b)])) return Infinity;
+        a = d[0] - f.focus[0];
+        d = d[1] - f.focus[1];
+        return 65536 * Math.log(e) + Math.sqrt(a * a + d * d) / e
+    };
+    l.dg = function(a, c) {
+        var d = new Zi(c || a.type, this, a);
+        this.eg(d)
+    };
+    l.eg = function(a) {
+        if (null !== this.c) {
+            this.L = a.coordinate;
+            a.frameState = this.c;
+            var c = this.d.a,
+                d;
+            if (!1 !== this.dispatchEvent(a))
+                for (d = c.length - 1; 0 <= d; d--) {
+                    var e = c[d];
+                    if (e.c() && !e.handleEvent(a)) break
+                }
+        }
+    };
+    l.gk = function() {
+        var a = this.c,
+            c = this.Fa;
+        if (!c.la()) {
+            var d = 16,
+                e = d,
+                f = 0;
+            null !== a && (f = a.viewHints, f[0] && (d = this.wb ? 8 : 0, e = 2), f[1] && (d = this.xb ? 8 : 0, e = 2), f = rb(a.wantedTiles));
+            d *= f;
+            e *= f;
+            if (c.d < d) {
+                Rj(c);
+                d = Math.min(d - c.d, e, c.Tb());
+                for (e = 0; e < d; ++e) f = Oj(c)[0], x(f, "change", c.f, !1, c), f.load();
+                c.d += d
+            }
+        }
+        c = this.ba;
+        d = 0;
+        for (e = c.length; d < e; ++d) c[d](this, a);
+        c.length = 0
+    };
+    l.jk = function() {
+        this.render()
+    };
+    l.lk = function() {
+        var a = this.bd();
+        Sh(this.n);
+        null === a ? (Qf(this.a), null !== this.l && (Wc(this.l), this.l = null)) : (a.appendChild(this.a), Mh(this.n, null === this.T ? a : this.T), null === this.l && (this.l = x(this.Ga, "resize", this.Kc, !1, this)));
+        this.Kc()
+    };
+    l.bl = function() {
+        this.render()
+    };
+    l.nk = function() {
+        this.render()
+    };
+    l.mk = function() {
+        null !== this.J && (Wc(this.J), this.J = null);
+        var a = this.R();
+        null !== a && (this.J = x(a, "propertychange", this.nk, !1, this));
+        this.render()
+    };
+    l.Rj = function() {
+        this.render()
+    };
+    l.Sj = function() {
+        this.render()
+    };
+    l.Qj = function() {
+        if (null !== this.g) {
+            for (var a = this.g.length, c = 0; c < a; ++c) Wc(this.g[c]);
+            this.g = null
+        }
+        a = this.Ub();
+        null != a && (this.g = [x(a, "propertychange", this.Sj, !1, this), x(a, "change", this.Rj, !1, this)]);
+        this.render()
+    };
+    l.Rn = function() {
+        var a = this.o;
+        sh(a);
+        a.Pf()
+    };
+    l.render = function() {
+        null != this.o.$ || this.o.start()
+    };
+    l.Ln = function(a) {
+        if (m(this.e.remove(a))) return a
+    };
+    l.Mn = function(a) {
+        var c;
+        m(this.d.remove(a)) && (c = a);
+        return c
+    };
+    l.Nn = function(a) {
+        return this.Ub().Bc().remove(a)
+    };
+    l.On = function(a) {
+        if (m(this.f.remove(a))) return a
+    };
+    l.Qn = function(a) {
+        var c, d, e, f = this.xa(),
+            g = this.R(),
+            h = null;
+        if (m(f) && 0 < f[0] && 0 < f[1] && null !== g && Te(g)) {
+            var h = g.c.slice(),
+                k = this.Ub().Ue(),
+                n = {};
+            c = 0;
+            for (d = k.length; c < d; ++c) n[ma(k[c].layer)] = k[c];
+            e = Se(g);
+            h = {
+                animate: !1,
+                attributions: {},
+                coordinateToPixelMatrix: this.Ra,
+                extent: null,
+                focus: null === this.L ? e.center : this.L,
+                index: this.vb++,
+                layerStates: n,
+                layerStatesArray: k,
+                logos: Db(this.sc),
+                pixelRatio: this.Nc,
+                pixelToCoordinateMatrix: this.Ee,
+                postRenderFunctions: [],
+                size: f,
+                skippedFeatureUids: this.N,
+                tileQueue: this.Fa,
+                time: a,
+                usedTiles: {},
+                viewState: e,
+                viewHints: h,
+                wantedTiles: {}
+            }
+        }
+        if (null !== h) {
+            a = this.H;
+            c = f = 0;
+            for (d = a.length; c < d; ++c) g = a[c], g(this, h) && (a[f++] = g);
+            a.length = f;
+            h.extent = ee(e.center, e.resolution, e.rotation, h.size)
+        }
+        this.c = h;
+        this.i.ue(h);
+        null !== h && (h.animate && this.render(), Array.prototype.push.apply(this.ba, h.postRenderFunctions), 0 !== this.H.length || h.viewHints[0] || h.viewHints[1] || Vd(h.extent, this.oa) || (this.dispatchEvent(new tg("moveend", this, h)), Pd(h.extent, this.oa)));
+        this.dispatchEvent(new tg("postrender", this, h));
+        wh(this.gk, this)
+    };
+    l.zh = function(a) {
+        this.set("layergroup", a)
+    };
+    l.vf = function(a) {
+        this.set("size", a)
+    };
+    l.cl = function(a) {
+        this.set("target", a)
+    };
+    l.jo = function(a) {
+        this.set("view", a)
+    };
+    l.Eh = function(a) {
+        a = ma(a).toString();
+        this.N[a] = !0;
+        this.render()
+    };
+    l.Kc = function() {
+        var a = this.bd();
+        if (null === a) this.vf(void 0);
+        else {
+            var c = Ef(a),
+                d = Ib && a.currentStyle;
+            d && Uf(Cf(c)) && "auto" != d.width && "auto" != d.height && !d.boxSizing ? (c = ng(a, d.width, "width", "pixelWidth"), a = ng(a, d.height, "height", "pixelHeight"), a = new Bf(c, a)) : (d = new Bf(a.offsetWidth, a.offsetHeight), c = pg(a, "padding"), a = sg(a), a = new Bf(d.width - a.left - c.left - c.right - a.right, d.height - a.top - c.top - c.bottom - a.bottom));
+            this.vf([a.width, a.height])
+        }
+    };
+    l.Ih = function(a) {
+        a = ma(a).toString();
+        delete this.N[a];
+        this.render()
+    };
+
+    function Qq(a) {
+        var c = null;
+        m(a.keyboardEventTarget) && (c = ia(a.keyboardEventTarget) ? document.getElementById(a.keyboardEventTarget) : a.keyboardEventTarget);
+        var d = {},
+            e = {};
+        if (!m(a.logo) || "boolean" == typeof a.logo && a.logo) e["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAAA3NCSVQICAjb4U/gAAAACXBIWXMAAAHGAAABxgEXwfpGAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAhNQTFRF////AP//AICAgP//AFVVQECA////K1VVSbbbYL/fJ05idsTYJFtbbcjbJllmZszWWMTOIFhoHlNiZszTa9DdUcHNHlNlV8XRIVdiasrUHlZjIVZjaMnVH1RlIFRkH1RkH1ZlasvYasvXVsPQH1VkacnVa8vWIVZjIFRjVMPQa8rXIVVkXsXRsNveIFVkIFZlIVVj3eDeh6GmbMvXH1ZkIFRka8rWbMvXIFVkIFVjIFVkbMvWH1VjbMvWIFVlbcvWIFVla8vVIFVkbMvWbMvVH1VkbMvWIFVlbcvWIFVkbcvVbMvWjNPbIFVkU8LPwMzNIFVkbczWIFVkbsvWbMvXIFVkRnB8bcvW2+TkW8XRIFVkIlZlJVloJlpoKlxrLl9tMmJwOWd0Omh1RXF8TneCT3iDUHiDU8LPVMLPVcLPVcPQVsPPVsPQV8PQWMTQWsTQW8TQXMXSXsXRX4SNX8bSYMfTYcfTYsfTY8jUZcfSZsnUaIqTacrVasrVa8jTa8rWbI2VbMvWbcvWdJObdcvUdszUd8vVeJaee87Yfc3WgJyjhqGnitDYjaarldPZnrK2oNbborW5o9bbo9fbpLa6q9ndrL3ArtndscDDutzfu8fJwN7gwt7gxc/QyuHhy+HizeHi0NfX0+Pj19zb1+Tj2uXk29/e3uLg3+Lh3+bl4uXj4ufl4+fl5Ofl5ufl5ujm5+jmySDnBAAAAFp0Uk5TAAECAgMEBAYHCA0NDg4UGRogIiMmKSssLzU7PkJJT1JTVFliY2hrdHZ3foSFhYeJjY2QkpugqbG1tre5w8zQ09XY3uXn6+zx8vT09vf4+Pj5+fr6/P39/f3+gz7SsAAAAVVJREFUOMtjYKA7EBDnwCPLrObS1BRiLoJLnte6CQy8FLHLCzs2QUG4FjZ5GbcmBDDjxJBXDWxCBrb8aM4zbkIDzpLYnAcE9VXlJSWlZRU13koIeW57mGx5XjoMZEUqwxWYQaQbSzLSkYGfKFSe0QMsX5WbjgY0YS4MBplemI4BdGBW+DQ11eZiymfqQuXZIjqwyadPNoSZ4L+0FVM6e+oGI6g8a9iKNT3o8kVzNkzRg5lgl7p4wyRUL9Yt2jAxVh6mQCogae6GmflI8p0r13VFWTHBQ0rWPW7ahgWVcPm+9cuLoyy4kCJDzCm6d8PSFoh0zvQNC5OjDJhQopPPJqph1doJBUD5tnkbZiUEqaCnB3bTqLTFG1bPn71kw4b+GFdpLElKIzRxxgYgWNYc5SCENVHKeUaltHdXx0dZ8uBI1hJ2UUDgq82CM2MwKeibqAvSO7MCABq0wXEPiqWEAAAAAElFTkSuQmCC"] = "http://openlayers.org/";
+        else {
+            var f = a.logo;
+            ia(f) ? e[f] = "" : la(f) && (e[f.src] = f.href)
+        }
+        f = a.layers instanceof G ? a.layers : new G({
+            layers: a.layers
+        });
+        d.layergroup = f;
+        d.target = a.target;
+        d.view = m(a.view) ? a.view : new Ne;
+        var f = Ij,
+            g;
+        m(a.renderer) ? ga(a.renderer) ? g = a.renderer : ia(a.renderer) && (g = [a.renderer]) : g = Pq;
+        var h, k;
+        h = 0;
+        for (k = g.length; h < k; ++h) {
+            var n = g[h];
+            if ("canvas" == n) {
+                if (li) {
+                    f = Cp;
+                    break
+                }
+            } else if ("dom" == n) {
+                f = Kp;
+                break
+            } else if ("webgl" == n && ii) {
+                f = Lq;
+                break
+            }
+        }
+        var p;
+        m(a.controls) ? p = ga(a.controls) ? new of(a.controls.slice()) : a.controls : p = ih();
+        var q;
+        m(a.interactions) ? q = ga(a.interactions) ? new of(a.interactions.slice()) : a.interactions : q = Vl();
+        a = m(a.overlays) ? ga(a.overlays) ? new of(a.overlays.slice()) : a.overlays : new of;
+        return {
+            controls: p,
+            interactions: q,
+            keyboardEventTarget: c,
+            logos: e,
+            overlays: a,
+            Sn: f,
+            values: d
+        }
+    }
+    bm();
+
+    function Rq(a) {
+        fd.call(this);
+        this.g = m(a.insertFirst) ? a.insertFirst : !0;
+        this.i = m(a.stopEvent) ? a.stopEvent : !0;
+        this.Z = Jf("DIV", {
+            "class": "ol-overlay-container"
+        });
+        this.Z.style.position = "absolute";
+        this.f = m(a.autoPan) ? a.autoPan : !1;
+        this.d = m(a.autoPanAnimation) ? a.autoPanAnimation : {};
+        this.e = m(a.autoPanMargin) ? a.autoPanMargin : 20;
+        this.a = {
+            ud: "",
+            Xd: "",
+            ve: "",
+            we: "",
+            visible: !0
+        };
+        this.c = null;
+        x(this, hd("element"), this.Kj, !1, this);
+        x(this, hd("map"), this.Yj, !1, this);
+        x(this, hd("offset"), this.ck, !1, this);
+        x(this, hd("position"), this.ek, !1, this);
+        x(this, hd("positioning"), this.fk, !1, this);
+        m(a.element) && this.wh(a.element);
+        this.Bh(m(a.offset) ? a.offset : [0, 0]);
+        this.Ch(m(a.positioning) ? a.positioning : "top-left");
+        m(a.position) && this.uf(a.position)
+    }
+    w(Rq, fd);
+    l = Rq.prototype;
+    l.$d = function() {
+        return this.get("element")
+    };
+    l.ae = function() {
+        return this.get("map")
+    };
+    l.Yf = function() {
+        return this.get("offset")
+    };
+    l.wg = function() {
+        return this.get("position")
+    };
+    l.ag = function() {
+        return this.get("positioning")
+    };
+    l.Kj = function() {
+        Of(this.Z);
+        var a = this.$d();
+        null != a && Nf(this.Z, a)
+    };
+    l.Yj = function() {
+        null !== this.c && (Qf(this.Z), Wc(this.c), this.c = null);
+        var a = this.ae();
+        null != a && (this.c = x(a, "postrender", this.render, !1, this), Sq(this), a = this.i ? a.p : a.X, this.g ? Pf(a, this.Z, 0) : Nf(a, this.Z))
+    };
+    l.render = function() {
+        Sq(this)
+    };
+    l.ck = function() {
+        Sq(this)
+    };
+    l.ek = function() {
+        Sq(this);
+        if (m(this.get("position")) && this.f) {
+            var a = this.ae();
+            if (m(a) && !fa(a.bd())) {
+                var c = Tq(a.bd(), a.xa()),
+                    d = this.$d(),
+                    e = d.offsetWidth,
+                    f = d.currentStyle || window.getComputedStyle(d),
+                    e = e + (parseInt(f.marginLeft, 10) + parseInt(f.marginRight, 10)),
+                    f = d.offsetHeight,
+                    g = d.currentStyle || window.getComputedStyle(d),
+                    f = f + (parseInt(g.marginTop, 10) + parseInt(g.marginBottom, 10)),
+                    h = Tq(d, [e, f]),
+                    d = this.e;
+                Rd(c, h) || (e = h[0] - c[0], f = c[2] - h[2], g = h[1] - c[1], h = c[3] - h[3], c = [0, 0], 0 > e ? c[0] = e - d : 0 > f && (c[0] = Math.abs(f) + d), 0 > g ? c[1] = g - d : 0 > h && (c[1] = Math.abs(h) + d), 0 === c[0] && 0 === c[1]) || (d = a.R().Ca(), e = a.ta(d), c = [e[0] + c[0], e[1] + c[1]], null !== this.d && (this.d.source = d, a.Ha(Ze(this.d))), a.R().Na(a.ka(c)))
+            }
+        }
+    };
+    l.fk = function() {
+        Sq(this)
+    };
+    l.wh = function(a) {
+        this.set("element", a)
+    };
+    l.setMap = function(a) {
+        this.set("map", a)
+    };
+    l.Bh = function(a) {
+        this.set("offset", a)
+    };
+    l.uf = function(a) {
+        this.set("position", a)
+    };
+
+    function Tq(a, c) {
+        var d = Ef(a);
+        fg(a, "position");
+        var e = new Af(0, 0),
+            f;
+        f = d ? Ef(d) : document;
+        f = !Ib || Ib && 9 <= Tb || Uf(Cf(f)) ? f.documentElement : f.body;
+        a != f && (f = ig(a), d = Wf(Cf(d)), e.x = f.left + d.x, e.y = f.top + d.y);
+        return [e.x, e.y, e.x + c[0], e.y + c[1]]
+    }
+    l.Ch = function(a) {
+        this.set("positioning", a)
+    };
+
+    function Sq(a) {
+        var c = a.ae(),
+            d = a.wg();
+        if (m(c) && null !== c.c && m(d)) {
+            var d = c.ta(d),
+                e = c.xa(),
+                c = a.Z.style,
+                f = a.Yf(),
+                g = a.ag(),
+                h = f[0],
+                f = f[1];
+            if ("bottom-right" == g || "center-right" == g || "top-right" == g) "" !== a.a.Xd && (a.a.Xd = c.left = ""), h = Math.round(e[0] - d[0] - h) + "px", a.a.ve != h && (a.a.ve = c.right = h);
+            else {
+                "" !== a.a.ve && (a.a.ve = c.right = "");
+                if ("bottom-center" == g || "center-center" == g || "top-center" == g) h -= kg(a.Z).width / 2;
+                h = Math.round(d[0] + h) + "px";
+                a.a.Xd != h && (a.a.Xd = c.left = h)
+            }
+            if ("bottom-left" == g || "bottom-center" == g || "bottom-right" == g) "" !== a.a.we && (a.a.we = c.top = ""), d = Math.round(e[1] - d[1] - f) + "px", a.a.ud != d && (a.a.ud = c.bottom = d);
+            else {
+                "" !== a.a.ud && (a.a.ud = c.bottom = "");
+                if ("center-left" == g || "center-center" == g || "center-right" == g) f -= kg(a.Z).height / 2;
+                d = Math.round(d[1] + f) + "px";
+                a.a.we != d && (a.a.we = c.top = d)
+            }
+            a.a.visible || (mg(a.Z, !0), a.a.visible = !0)
+        } else a.a.visible && (mg(a.Z, !1), a.a.visible = !1)
+    };
+
+    function Uq(a) {
+        a = m(a) ? a : {};
+        this.f = m(a.collapsed) ? a.collapsed : !0;
+        this.g = m(a.collapsible) ? a.collapsible : !0;
+        this.g || (this.f = !1);
+        var c = m(a.className) ? a.className : "ol-overviewmap",
+            d = m(a.tipLabel) ? a.tipLabel : "Overview map",
+            e = m(a.collapseLabel) ? a.collapseLabel : "\u00ab";
+        this.o = ia(e) ? Jf("SPAN", {}, e) : e;
+        e = m(a.label) ? a.label : "\u00bb";
+        this.n = ia(e) ? Jf("SPAN", {}, e) : e;
+        d = Jf("BUTTON", {
+            type: "button",
+            title: d
+        }, this.g && !this.f ? this.o : this.n);
+        x(d, "click", this.ml, !1, this);
+        x(d, ["mouseout", uc], function() {
+            this.blur()
+        }, !1);
+        var e = Jf("DIV", "ol-overviewmap-map"),
+            f = this.d = new W({
+                controls: new of,
+                interactions: new of,
+                target: e
+            });
+        m(a.layers) && a.layers.forEach(function(a) {
+            f.Jf(a)
+        }, this);
+        var g = Jf("DIV", "ol-overviewmap-box");
+        this.i = new Rq({
+            position: [0, 0],
+            positioning: "bottom-left",
+            element: g
+        });
+        this.d.Kf(this.i);
+        c = Jf("DIV", c + " ol-unselectable ol-control" + (this.f && this.g ? " ol-collapsed" : "") + (this.g ? "" : " ol-uncollapsible"), e, d);
+        ug.call(this, {
+            element: c,
+            render: m(a.render) ? a.render : Vq,
+            target: a.target
+        })
+    }
+    w(Uq, ug);
+    l = Uq.prototype;
+    l.setMap = function(a) {
+        var c = this.a;
+        a !== c && (c && (c = c.R()) && Vc(c, hd("rotation"), this.Rd, !1, this), Uq.S.setMap.call(this, a), a && (this.l.push(x(a, "propertychange", this.Zj, !1, this)), 0 === this.d.vg().Ib() && this.d.zh(a.Ub()), a = a.R())) && (x(a, hd("rotation"), this.Rd, !1, this), Te(a) && (this.d.Kc(), Wq(this)))
+    };
+    l.Zj = function(a) {
+        "view" === a.key && ((a = a.oldValue) && Vc(a, hd("rotation"), this.Rd, !1, this), a = this.a.R(), x(a, hd("rotation"), this.Rd, !1, this))
+    };
+    l.Rd = function() {
+        this.d.R().be(this.a.R().Da())
+    };
+
+    function Vq() {
+        var a = this.a,
+            c = this.d;
+        if (null !== a.c && null !== c.c) {
+            var d = a.xa(),
+                a = a.R().Pc(d),
+                e = c.xa(),
+                d = c.R().Pc(e),
+                f = c.ta(be(a)),
+                c = c.ta($d(a)),
+                c = new Bf(Math.abs(f[0] - c[0]), Math.abs(f[1] - c[1])),
+                f = e[0],
+                e = e[1];
+            c.width < .1 * f || c.height < .1 * e || c.width > .75 * f || c.height > .75 * e ? Wq(this) : Rd(d, a) || (a = this.d, d = this.a.R(), a.R().Na(d.Ca()))
+        }
+        Xq(this)
+    }
+
+    function Wq(a) {
+        var c = a.a;
+        a = a.d;
+        var d = c.xa(),
+            c = c.R().Pc(d),
+            d = a.xa();
+        a = a.R();
+        var e = Math.log(7.5) / Math.LN2;
+        ke(c, 1 / (.1 * Math.pow(2, e / 2)));
+        a.Me(c, d)
+    }
+
+    function Xq(a) {
+        var c = a.a,
+            d = a.d;
+        if (null !== c.c && null !== d.c) {
+            var e = c.xa(),
+                f = c.R(),
+                g = d.R();
+            d.xa();
+            var c = f.Da(),
+                h = a.i,
+                d = a.i.$d(),
+                f = f.Pc(e),
+                e = g.ya(),
+                g = Zd(f),
+                f = ae(f),
+                k;
+            a = a.a.R().Ca();
+            m(a) && (k = [g[0] - a[0], g[1] - a[1]], rd(k, c), md(k, a));
+            h.uf(k);
+            null != d && (k = new Bf(Math.abs((g[0] - f[0]) / e), Math.abs((f[1] - g[1]) / e)), c = Uf(Cf(Ef(d))), !Ib || Rb("10") || c && Rb("8") ? (d = d.style, Jb ? d.MozBoxSizing = "border-box" : Kb ? d.WebkitBoxSizing = "border-box" : d.boxSizing = "border-box", d.width = Math.max(k.width, 0) + "px", d.height = Math.max(k.height, 0) + "px") : (a = d.style, c ? (c = pg(d, "padding"), d = sg(d), a.pixelWidth = k.width - d.left - c.left - c.right - d.right, a.pixelHeight = k.height - d.top - c.top - c.bottom - d.bottom) : (a.pixelWidth = k.width, a.pixelHeight = k.height)))
+        }
+    }
+    l.ml = function(a) {
+        a.preventDefault();
+        Yq(this)
+    };
+
+    function Yq(a) {
+        ag(a.element, "ol-collapsed");
+        a.f ? Rf(a.o, a.n) : Rf(a.n, a.o);
+        a.f = !a.f;
+        var c = a.d;
+        a.f || null !== c.c || (c.Kc(), Wq(a), Uc(c, "postrender", function() {
+            Xq(this)
+        }, !1, a))
+    }
+    l.ll = function() {
+        return this.g
+    };
+    l.ol = function(a) {
+        this.g !== a && (this.g = a, ag(this.element, "ol-uncollapsible"), !a && this.f && Yq(this))
+    };
+    l.nl = function(a) {
+        this.g && this.f !== a && Yq(this)
+    };
+    l.kl = function() {
+        return this.f
+    };
+
+    function Zq(a) {
+        a = m(a) ? a : {};
+        var c = m(a.className) ? a.className : "ol-scale-line";
+        this.g = Jf("DIV", c + "-inner");
+        this.Z = Jf("DIV", c + " ol-unselectable", this.g);
+        this.o = null;
+        this.i = m(a.minWidth) ? a.minWidth : 64;
+        this.d = !1;
+        this.H = void 0;
+        this.n = "";
+        this.f = null;
+        ug.call(this, {
+            element: this.Z,
+            render: m(a.render) ? a.render : $q,
+            target: a.target
+        });
+        x(this, hd("units"), this.N, !1, this);
+        this.J(a.units || "metric")
+    }
+    w(Zq, ug);
+    var ar = [1, 2, 5];
+    Zq.prototype.p = function() {
+        return this.get("units")
+    };
+
+    function $q(a) {
+        a = a.frameState;
+        null === a ? this.o = null : this.o = a.viewState;
+        br(this)
+    }
+    Zq.prototype.N = function() {
+        br(this)
+    };
+    Zq.prototype.J = function(a) {
+        this.set("units", a)
+    };
+
+    function br(a) {
+        var c = a.o;
+        if (null === c) a.d && (mg(a.Z, !1), a.d = !1);
+        else {
+            var d = c.center,
+                e = c.projection,
+                c = e.getPointResolution(c.resolution, d),
+                f = e.a,
+                g = a.p();
+            "degrees" != f || "metric" != g && "imperial" != g && "us" != g && "nautical" != g ? "degrees" != f && "degrees" == g ? (null === a.f && (a.f = ve(e, re("EPSG:4326"))), d = Math.cos(Yb(a.f(d)[1])), e = ne.radius, e /= oe[f], c *= 180 / (Math.PI * d * e)) : a.f = null : (a.f = null, d = Math.cos(Yb(d[1])), c *= Math.PI * d * ne.radius / 180);
+            d = a.i * c;
+            f = "";
+            "degrees" == g ? d < 1 / 60 ? (f = "\u2033", c *= 3600) : 1 > d ? (f = "\u2032", c *= 60) : f = "\u00b0" : "imperial" == g ? .9144 > d ? (f = "in", c /= .0254) : 1609.344 > d ? (f = "ft", c /= .3048) : (f = "mi", c /= 1609.344) : "nautical" == g ? (c /= 1852, f = "nm") : "metric" == g ? 1 > d ? (f = "mm", c *= 1E3) : 1E3 > d ? f = "m" : (f = "km", c /= 1E3) : "us" == g && (.9144 > d ? (f = "in", c *= 39.37) : 1609.344 > d ? (f = "ft", c /= .30480061) : (f = "mi", c /= 1609.3472));
+            for (d = 3 * Math.floor(Math.log(a.i * c) / Math.log(10));;) {
+                e = ar[d % 3] * Math.pow(10, Math.floor(d / 3));
+                g = Math.round(e / c);
+                if (isNaN(g)) {
+                    mg(a.Z, !1);
+                    a.d = !1;
+                    return
+                }
+                if (g >= a.i) break;
+                ++d
+            }
+            c = e + " " + f;
+            a.n != c && (a.g.innerHTML = c, a.n = c);
+            a.H != g && (a.g.style.width = g + "px", a.H = g);
+            a.d || (mg(a.Z, !0), a.d = !0)
+        }
+    };
+
+    function cr(a) {
+        mc.call(this);
+        this.a = a;
+        this.b = {}
+    }
+    w(cr, mc);
+    var dr = [];
+    cr.prototype.Ka = function(a, c, d, e) {
+        ga(c) || (c && (dr[0] = c.toString()), c = dr);
+        for (var f = 0; f < c.length; f++) {
+            var g = x(a, c[f], d || this.handleEvent, e || !1, this.a || this);
+            if (!g) break;
+            this.b[g.key] = g
+        }
+        return this
+    };
+    cr.prototype.wf = function(a, c, d, e, f) {
+        if (ga(c))
+            for (var g = 0; g < c.length; g++) this.wf(a, c[g], d, e, f);
+        else d = d || this.handleEvent, f = f || this.a || this, d = Oc(d), e = !!e, c = Bc(a) ? Jc(a.ab, String(c), d, e, f) : a ? (a = Qc(a)) ? Jc(a, c, d, e, f) : null : null, c && (Wc(c), delete this.b[c.key]);
+        return this
+    };
+
+    function er(a) {
+        pb(a.b, Wc);
+        a.b = {}
+    }
+    cr.prototype.O = function() {
+        cr.S.O.call(this);
+        er(this)
+    };
+    cr.prototype.handleEvent = function() {
+        throw Error("EventHandler.handleEvent not implemented");
+    };
+
+    function fr(a, c, d) {
+        $c.call(this);
+        this.target = a;
+        this.handle = c || a;
+        this.b = d || new cg(NaN, NaN, NaN, NaN);
+        this.c = Ef(a);
+        this.a = new cr(this);
+        pc(this, this.a);
+        x(this.handle, ["touchstart", "mousedown"], this.cg, !1, this)
+    }
+    w(fr, $c);
+    var gr = Ib || Jb && Rb("1.9.3");
+    l = fr.prototype;
+    l.clientX = 0;
+    l.clientY = 0;
+    l.screenX = 0;
+    l.screenY = 0;
+    l.Fh = 0;
+    l.Gh = 0;
+    l.yc = 0;
+    l.zc = 0;
+    l.Zb = !1;
+    l.O = function() {
+        fr.S.O.call(this);
+        Vc(this.handle, ["touchstart", "mousedown"], this.cg, !1, this);
+        er(this.a);
+        gr && this.c.releaseCapture();
+        this.handle = this.target = null
+    };
+    l.cg = function(a) {
+        var c = "mousedown" == a.type;
+        if (this.Zb || c && !zc(a)) this.dispatchEvent("earlycancel");
+        else if (hr(a), this.dispatchEvent(new ir("start", this, a.clientX, a.clientY))) {
+            this.Zb = !0;
+            a.preventDefault();
+            var c = this.c,
+                d = c.documentElement,
+                e = !gr;
+            this.a.Ka(c, ["touchmove", "mousemove"], this.bk, e);
+            this.a.Ka(c, ["touchend", "mouseup"], this.Od, e);
+            gr ? (d.setCapture(!1), this.a.Ka(d, "losecapture", this.Od)) : this.a.Ka(c ? c.parentWindow || c.defaultView : window, "blur", this.Od);
+            this.e && this.a.Ka(this.e, "scroll", this.en, e);
+            this.clientX = this.Fh = a.clientX;
+            this.clientY = this.Gh = a.clientY;
+            this.screenX = a.screenX;
+            this.screenY = a.screenY;
+            this.yc = this.target.offsetLeft;
+            this.zc = this.target.offsetTop;
+            this.d = Wf(Cf(this.c));
+            ua()
+        }
+    };
+    l.Od = function(a) {
+        er(this.a);
+        gr && this.c.releaseCapture();
+        if (this.Zb) {
+            hr(a);
+            this.Zb = !1;
+            var c = jr(this, this.yc),
+                d = kr(this, this.zc);
+            this.dispatchEvent(new ir("end", this, a.clientX, a.clientY, 0, c, d))
+        } else this.dispatchEvent("earlycancel")
+    };
+
+    function hr(a) {
+        var c = a.type;
+        "touchstart" == c || "touchmove" == c ? xc(a, a.b.targetTouches[0], a.c) : "touchend" != c && "touchcancel" != c || xc(a, a.b.changedTouches[0], a.c)
+    }
+    l.bk = function(a) {
+        hr(a);
+        var c = 1 * (a.clientX - this.clientX),
+            d = a.clientY - this.clientY;
+        this.clientX = a.clientX;
+        this.clientY = a.clientY;
+        this.screenX = a.screenX;
+        this.screenY = a.screenY;
+        if (!this.Zb) {
+            var e = this.Fh - this.clientX,
+                f = this.Gh - this.clientY;
+            if (0 < e * e + f * f)
+                if (this.dispatchEvent(new ir("start", this, a.clientX, a.clientY))) this.Zb = !0;
+                else {
+                    this.U || this.Od(a);
+                    return
+                }
+        }
+        d = lr(this, c, d);
+        c = d.x;
+        d = d.y;
+        this.Zb && this.dispatchEvent(new ir("beforedrag", this, a.clientX, a.clientY, 0, c, d)) && (mr(this, a, c, d), a.preventDefault())
+    };
+
+    function lr(a, c, d) {
+        var e = Wf(Cf(a.c));
+        c += e.x - a.d.x;
+        d += e.y - a.d.y;
+        a.d = e;
+        a.yc += c;
+        a.zc += d;
+        c = jr(a, a.yc);
+        a = kr(a, a.zc);
+        return new Af(c, a)
+    }
+    l.en = function(a) {
+        var c = lr(this, 0, 0);
+        a.clientX = this.clientX;
+        a.clientY = this.clientY;
+        mr(this, a, c.x, c.y)
+    };
+
+    function mr(a, c, d, e) {
+        a.target.style.left = d + "px";
+        a.target.style.top = e + "px";
+        a.dispatchEvent(new ir("drag", a, c.clientX, c.clientY, 0, d, e))
+    }
+
+    function jr(a, c) {
+        var d = a.b,
+            e = isNaN(d.left) ? null : d.left,
+            d = isNaN(d.width) ? 0 : d.width;
+        return Math.min(null != e ? e + d : Infinity, Math.max(null != e ? e : -Infinity, c))
+    }
+
+    function kr(a, c) {
+        var d = a.b,
+            e = isNaN(d.top) ? null : d.top,
+            d = isNaN(d.height) ? 0 : d.height;
+        return Math.min(null != e ? e + d : Infinity, Math.max(null != e ? e : -Infinity, c))
+    }
+
+    function ir(a, c, d, e, f, g, h) {
+        rc.call(this, a);
+        this.clientX = d;
+        this.clientY = e;
+        this.left = m(g) ? g : c.yc;
+        this.top = m(h) ? h : c.zc
+    }
+    w(ir, rc);
+
+    function nr(a) {
+        a = m(a) ? a : {};
+        this.f = void 0;
+        this.g = or;
+        this.i = null;
+        this.n = !1;
+        this.o = m(a.duration) ? a.duration : 200;
+        var c = m(a.className) ? a.className : "ol-zoomslider",
+            d = Jf("DIV", [c + "-thumb", "ol-unselectable"]),
+            c = Jf("DIV", [c, "ol-unselectable", "ol-control"], d);
+        this.d = new fr(d);
+        pc(this, this.d);
+        x(this.d, "start", this.Jj, !1, this);
+        x(this.d, "drag", this.Hj, !1, this);
+        x(this.d, "end", this.Ij, !1, this);
+        x(c, "click", this.Gj, !1, this);
+        x(d, "click", sc);
+        ug.call(this, {
+            element: c,
+            render: m(a.render) ? a.render : pr
+        })
+    }
+    w(nr, ug);
+    var or = 0;
+    l = nr.prototype;
+    l.setMap = function(a) {
+        nr.S.setMap.call(this, a);
+        null === a || a.render()
+    };
+
+    function pr(a) {
+        if (null !== a.frameState) {
+            if (!this.n) {
+                var c = this.element,
+                    d = kg(c),
+                    e = Sf(c),
+                    c = pg(e, "margin"),
+                    f = new Bf(e.offsetWidth, e.offsetHeight),
+                    e = f.width + c.right + c.left,
+                    c = f.height + c.top + c.bottom;
+                this.i = [e, c];
+                e = d.width - e;
+                c = d.height - c;
+                d.width > d.height ? (this.g = 1, d = new cg(0, 0, e, 0)) : (this.g = or, d = new cg(0, 0, 0, c));
+                this.d.b = d || new cg(NaN, NaN, NaN, NaN);
+                this.n = !0
+            }
+            a = a.frameState.viewState.resolution;
+            a !== this.f && (this.f = a, a = 1 - Re(this.a.R())(a), d = this.d, c = Sf(this.element), 1 == this.g ? gg(c, d.b.left + d.b.width * a) : gg(c, d.b.left, d.b.top + d.b.height * a))
+        }
+    }
+    l.Gj = function(a) {
+        var c = this.a,
+            d = c.R(),
+            e = d.ya();
+        c.Ha(af({
+            resolution: e,
+            duration: this.o,
+            easing: Ve
+        }));
+        a = qr(this, a.offsetX - this.i[0] / 2, a.offsetY - this.i[1] / 2);
+        a = rr(this, a);
+        d.tb(d.constrainResolution(a))
+    };
+    l.Jj = function() {
+        Ue(this.a.R(), 1)
+    };
+    l.Hj = function(a) {
+        a = qr(this, a.left, a.top);
+        this.f = rr(this, a);
+        this.a.R().tb(this.f)
+    };
+    l.Ij = function() {
+        var a = this.a,
+            c = a.R();
+        Ue(c, -1);
+        a.Ha(af({
+            resolution: this.f,
+            duration: this.o,
+            easing: Ve
+        }));
+        a = c.constrainResolution(this.f);
+        c.tb(a)
+    };
+
+    function qr(a, c, d) {
+        var e = a.d.b;
+        return Vb(1 === a.g ? (c - e.left) / e.width : (d - e.top) / e.height, 0, 1)
+    }
+
+    function rr(a, c) {
+        return Qe(a.a.R())(1 - c)
+    };
+
+    function sr(a) {
+        a = m(a) ? a : {};
+        this.d = m(a.extent) ? a.extent : null;
+        var c = m(a.className) ? a.className : "ol-zoom-extent",
+            d = Jf("BUTTON", {
+                type: "button",
+                title: m(a.tipLabel) ? a.tipLabel : "Fit to extent"
+            }, m(a.label) ? a.label : "E");
+        x(d, "click", this.f, !1, this);
+        x(d, ["mouseout", uc], function() {
+            this.blur()
+        }, !1);
+        c = Jf("DIV", c + " ol-unselectable ol-control", d);
+        ug.call(this, {
+            element: c,
+            target: a.target
+        })
+    }
+    w(sr, ug);
+    sr.prototype.f = function(a) {
+        a.preventDefault();
+        var c = this.a;
+        a = c.R();
+        var d = null === this.d ? a.e.G() : this.d,
+            c = c.xa();
+        a.Me(d, c)
+    };
+
+    function tr(a) {
+        fd.call(this);
+        a = m(a) ? a : {};
+        this.a = null;
+        x(this, hd("tracking"), this.Jk, !1, this);
+        this.bf(m(a.tracking) ? a.tracking : !1)
+    }
+    w(tr, fd);
+    l = tr.prototype;
+    l.O = function() {
+        this.bf(!1);
+        tr.S.O.call(this)
+    };
+    l.fn = function(a) {
+        a = a.b;
+        if (null != a.alpha) {
+            var c = Yb(a.alpha);
+            this.set("alpha", c);
+            "boolean" == typeof a.absolute && a.absolute ? this.set("heading", c) : null != a.webkitCompassHeading && null != a.webkitCompassAccuracy && -1 != a.webkitCompassAccuracy && this.set("heading", Yb(a.webkitCompassHeading))
+        }
+        null != a.beta && this.set("beta", Yb(a.beta));
+        null != a.gamma && this.set("gamma", Yb(a.gamma));
+        this.k()
+    };
+    l.Mi = function() {
+        return this.get("alpha")
+    };
+    l.Pi = function() {
+        return this.get("beta")
+    };
+    l.Yi = function() {
+        return this.get("gamma")
+    };
+    l.Ik = function() {
+        return this.get("heading")
+    };
+    l.og = function() {
+        return this.get("tracking")
+    };
+    l.Jk = function() {
+        if (mi) {
+            var a = this.og();
+            a && null === this.a ? this.a = x(ba, "deviceorientation", this.fn, !1, this) : a || null === this.a || (Wc(this.a), this.a = null)
+        }
+    };
+    l.bf = function(a) {
+        this.set("tracking", a)
+    };
+
+    function X(a) {
+        fd.call(this);
+        this.$ = void 0;
+        this.a = "geometry";
+        this.e = null;
+        this.c = void 0;
+        this.d = null;
+        x(this, hd(this.a), this.Pd, !1, this);
+        m(a) && (a instanceof uk || null === a ? this.La(a) : this.t(a))
+    }
+    w(X, fd);
+    l = X.prototype;
+    l.clone = function() {
+        var a = new X(this.D());
+        a.Ic(this.a);
+        var c = this.Q();
+        null != c && a.La(c.clone());
+        c = this.e;
+        null === c || a.cf(c);
+        return a
+    };
+    l.Q = function() {
+        return this.get(this.a)
+    };
+    l.aj = function() {
+        return this.$
+    };
+    l.$i = function() {
+        return this.a
+    };
+    l.Qk = function() {
+        return this.e
+    };
+    l.Rk = function() {
+        return this.c
+    };
+    l.Sk = function() {
+        this.k()
+    };
+    l.Pd = function() {
+        null !== this.d && (Wc(this.d), this.d = null);
+        var a = this.Q();
+        null != a && (this.d = x(a, "change", this.Sk, !1, this));
+        this.k()
+    };
+    l.La = function(a) {
+        this.set(this.a, a)
+    };
+    l.cf = function(a) {
+        this.e = a;
+        null === a ? a = void 0 : ka(a) || (a = ga(a) ? a : [a], a = Eg(a));
+        this.c = a;
+        this.k()
+    };
+    l.Qb = function(a) {
+        this.$ = a;
+        this.k()
+    };
+    l.Ic = function(a) {
+        Vc(this, hd(this.a), this.Pd, !1, this);
+        this.a = a;
+        x(this, hd(this.a), this.Pd, !1, this);
+        this.Pd()
+    };
+
+    function ur(a) {
+        a = m(a) ? a : {};
+        this.g = this.e = this.d = this.a = this.c = this.b = null;
+        this.f = void 0;
+        this.rg(m(a.style) ? a.style : El);
+        m(a.features) ? ga(a.features) ? this.ld(new of(a.features.slice())) : this.ld(a.features) : this.ld(new of);
+        m(a.map) && this.setMap(a.map)
+    }
+    l = ur.prototype;
+    l.pg = function(a) {
+        this.b.push(a)
+    };
+    l.Kk = function() {
+        return this.b
+    };
+    l.Lk = function() {
+        return this.d
+    };
+    l.qg = function() {
+        vr(this)
+    };
+    l.Mj = function(a) {
+        a = a.element;
+        this.a[ma(a).toString()] = x(a, "change", this.qg, !1, this);
+        vr(this)
+    };
+    l.Nj = function(a) {
+        a = ma(a.element).toString();
+        Wc(this.a[a]);
+        delete this.a[a];
+        vr(this)
+    };
+    l.Ok = function() {
+        vr(this)
+    };
+    l.Pk = function(a) {
+        if (null !== this.b) {
+            var c = this.f;
+            m(c) || (c = El);
+            var d = a.b;
+            a = a.frameState;
+            var e = a.viewState.resolution,
+                f = en(e, a.pixelRatio),
+                g, h, k, n;
+            this.b.forEach(function(a) {
+                n = a.c;
+                k = m(n) ? n.call(a, e) : c(a, e);
+                if (null != k)
+                    for (h = k.length, g = 0; g < h; ++g) fn(d, a, k[g], f, this.Ok, this)
+            }, this)
+        }
+    };
+    l.Yd = function(a) {
+        this.b.remove(a)
+    };
+
+    function vr(a) {
+        null === a.d || a.d.render()
+    }
+    l.ld = function(a) {
+        null !== this.c && (Sa(this.c, Wc), this.c = null);
+        null !== this.a && (Sa(sb(this.a), Wc), this.a = null);
+        this.b = a;
+        null !== a && (this.c = [x(a, "add", this.Mj, !1, this), x(a, "remove", this.Nj, !1, this)], this.a = {}, a.forEach(function(a) {
+            this.a[ma(a).toString()] = x(a, "change", this.qg, !1, this)
+        }, this));
+        vr(this)
+    };
+    l.setMap = function(a) {
+        null !== this.e && (Wc(this.e), this.e = null);
+        vr(this);
+        this.d = a;
+        null !== a && (this.e = x(a, "postcompose", this.Pk, !1, this), a.render())
+    };
+    l.rg = function(a) {
+        this.g = a;
+        this.f = Dl(a);
+        vr(this)
+    };
+    l.Mk = function() {
+        return this.g
+    };
+    l.Nk = function() {
+        return this.f
+    };
+
+    function wr() {
+        this.defaultDataProjection = null
+    }
+
+    function xr(a, c, d) {
+        var e;
+        m(d) && (e = {
+            dataProjection: m(d.dataProjection) ? d.dataProjection : a.za(c),
+            featureProjection: d.featureProjection
+        });
+        return yr(a, e)
+    }
+
+    function yr(a, c) {
+        var d;
+        m(c) && (d = {
+            featureProjection: c.featureProjection,
+            dataProjection: null != c.dataProjection ? c.dataProjection : a.defaultDataProjection,
+            rightHanded: c.rightHanded
+        });
+        return d
+    }
+
+    function zr(a, c, d) {
+        var e = m(d) ? re(d.featureProjection) : null;
+        d = m(d) ? re(d.dataProjection) : null;
+        return null === e || null === d || Ie(e, d) ? a : a instanceof uk ? (c ? a.clone() : a).transform(c ? e : d, c ? d : e) : Me(c ? a.slice() : a, c ? e : d, c ? d : e)
+    };
+
+    function Ar() {
+        this.defaultDataProjection = null
+    }
+    w(Ar, wr);
+
+    function Br(a) {
+        return la(a) ? a : ia(a) ? (a = Pn(a), m(a) ? a : null) : null
+    }
+    l = Ar.prototype;
+    l.M = function() {
+        return "json"
+    };
+    l.sb = function(a, c) {
+        return this.Fc(Br(a), xr(this, a, c))
+    };
+    l.ja = function(a, c) {
+        return this.of(Br(a), xr(this, a, c))
+    };
+    l.Gc = function(a, c) {
+        return this.hh(Br(a), xr(this, a, c))
+    };
+    l.za = function(a) {
+        return this.nh(Br(a))
+    };
+    l.qd = function(a, c) {
+        return Qn(this.Lc(a, c))
+    };
+    l.ub = function(a, c) {
+        return Qn(this.ze(a, c))
+    };
+    l.Mc = function(a, c) {
+        return Qn(this.Be(a, c))
+    };
+
+    function Cr(a) {
+        a = m(a) ? a : {};
+        this.defaultDataProjection = null;
+        this.b = a.geometryName
+    }
+    w(Cr, Ar);
+
+    function Dr(a, c) {
+        if (null === a) return null;
+        var d;
+        if (ja(a.x) && ja(a.y)) d = "Point";
+        else if (null != a.points) d = "MultiPoint";
+        else if (null != a.paths) d = 1 === a.paths.length ? "LineString" : "MultiLineString";
+        else if (null != a.rings) {
+            var e = a.rings,
+                f = Er(a),
+                g = [];
+            d = [];
+            var h, k;
+            h = 0;
+            for (k = e.length; h < k; ++h) {
+                var n = kb(e[h]);
+                $k(n, 0, n.length, f.length) ? g.push([e[h]]) : d.push(e[h])
+            }
+            for (; d.length;) {
+                e = d.shift();
+                f = !1;
+                for (h = g.length - 1; 0 <= h; h--)
+                    if (Rd((new Qk(g[h][0])).G(), (new Qk(e)).G())) {
+                        g[h].push(e);
+                        f = !0;
+                        break
+                    }
+                f || g.push([e.reverse()])
+            }
+            a = Db(a);
+            1 === g.length ? (d = "Polygon", a.rings = g[0]) : (d = "MultiPolygon", a.rings = g)
+        }
+        return zr((0, Fr[d])(a), !1, c)
+    }
+
+    function Er(a) {
+        var c = "XY";
+        !0 === a.hasZ && !0 === a.hasM ? c = "XYZM" : !0 === a.hasZ ? c = "XYZ" : !0 === a.hasM && (c = "XYM");
+        return c
+    }
+
+    function Gr(a) {
+        a = a.a;
+        return {
+            hasZ: "XYZ" === a || "XYZM" === a,
+            hasM: "XYM" === a || "XYZM" === a
+        }
+    }
+    var Fr = {
+            Point: function(a) {
+                return null != a.m && null != a.z ? new E([a.x, a.y, a.z, a.m], "XYZM") : null != a.z ? new E([a.x, a.y, a.z], "XYZ") : null != a.m ? new E([a.x, a.y, a.m], "XYM") : new E([a.x, a.y])
+            },
+            LineString: function(a) {
+                return new O(a.paths[0], Er(a))
+            },
+            Polygon: function(a) {
+                return new F(a.rings, Er(a))
+            },
+            MultiPoint: function(a) {
+                return new an(a.points, Er(a))
+            },
+            MultiLineString: function(a) {
+                return new Q(a.paths, Er(a))
+            },
+            MultiPolygon: function(a) {
+                return new R(a.rings, Er(a))
+            }
+        },
+        Hr = {
+            Point: function(a) {
+                var c = a.K();
+                a = a.a;
+                if ("XYZ" === a) return {
+                    x: c[0],
+                    y: c[1],
+                    z: c[2]
+                };
+                if ("XYM" === a) return {
+                    x: c[0],
+                    y: c[1],
+                    m: c[2]
+                };
+                if ("XYZM" === a) return {
+                    x: c[0],
+                    y: c[1],
+                    z: c[2],
+                    m: c[3]
+                };
+                if ("XY" === a) return {
+                    x: c[0],
+                    y: c[1]
+                }
+            },
+            LineString: function(a) {
+                var c = Gr(a);
+                return {
+                    hasZ: c.hasZ,
+                    hasM: c.hasM,
+                    paths: [a.K()]
+                }
+            },
+            Polygon: function(a) {
+                var c = Gr(a);
+                return {
+                    hasZ: c.hasZ,
+                    hasM: c.hasM,
+                    rings: a.K(!1)
+                }
+            },
+            MultiPoint: function(a) {
+                var c = Gr(a);
+                return {
+                    hasZ: c.hasZ,
+                    hasM: c.hasM,
+                    points: a.K()
+                }
+            },
+            MultiLineString: function(a) {
+                var c = Gr(a);
+                return {
+                    hasZ: c.hasZ,
+                    hasM: c.hasM,
+                    paths: a.K()
+                }
+            },
+            MultiPolygon: function(a) {
+                var c = Gr(a);
+                a = a.K(!1);
+                for (var d = [], e = 0; e < a.length; e++)
+                    for (var f = a[e].length - 1; 0 <= f; f--) d.push(a[e][f]);
+                return {
+                    hasZ: c.hasZ,
+                    hasM: c.hasM,
+                    rings: d
+                }
+            }
+        };
+    l = Cr.prototype;
+    l.Fc = function(a, c) {
+        var d = Dr(a.geometry, c),
+            e = new X;
+        m(this.b) && e.Ic(this.b);
+        e.La(d);
+        m(c) && m(c.Xe) && m(a.attributes[c.Xe]) && e.Qb(a.attributes[c.Xe]);
+        m(a.attributes) && e.t(a.attributes);
+        return e
+    };
+    l.of = function(a, c) {
+        var d = m(c) ? c : {};
+        if (null != a.features) {
+            var e = [],
+                f = a.features,
+                g, h;
+            d.Xe = a.objectIdFieldName;
+            g = 0;
+            for (h = f.length; g < h; ++g) e.push(this.Fc(f[g], d));
+            return e
+        }
+        return [this.Fc(a, d)]
+    };
+    l.hh = function(a, c) {
+        return Dr(a, c)
+    };
+    l.nh = function(a) {
+        return null != a.spatialReference && null != a.spatialReference.wkid ? re("EPSG:" + a.spatialReference.wkid) : null
+    };
+
+    function Ir(a, c) {
+        return (0, Hr[a.M()])(zr(a, !0, c), c)
+    }
+    l.Be = function(a, c) {
+        return Ir(a, yr(this, c))
+    };
+    l.Lc = function(a, c) {
+        c = yr(this, c);
+        var d = {},
+            e = a.Q();
+        null != e && (d.geometry = Ir(e, c));
+        e = a.D();
+        zb(e, a.a);
+        d.attributes = xb(e) ? {} : e;
+        m(c) && m(c.featureProjection) && (d.spatialReference = {
+            wkid: re(c.featureProjection).b.split(":").pop()
+        });
+        return d
+    };
+    l.ze = function(a, c) {
+        c = yr(this, c);
+        var d = [],
+            e, f;
+        e = 0;
+        for (f = a.length; e < f; ++e) d.push(this.Lc(a[e], c));
+        return {
+            features: d
+        }
+    };
+
+    function Jr(a) {
+        a = m(a) ? a : {};
+        this.defaultDataProjection = null;
+        this.defaultDataProjection = re(null != a.defaultDataProjection ? a.defaultDataProjection : "EPSG:4326");
+        this.b = a.geometryName
+    }
+    w(Jr, Ar);
+
+    function Kr(a, c) {
+        return null === a ? null : zr((0, Lr[a.type])(a), !1, c)
+    }
+
+    function Mr(a, c) {
+        return (0, Nr[a.M()])(zr(a, !0, c), c)
+    }
+    var Lr = {
+            Point: function(a) {
+                return new E(a.coordinates)
+            },
+            LineString: function(a) {
+                return new O(a.coordinates)
+            },
+            Polygon: function(a) {
+                return new F(a.coordinates)
+            },
+            MultiPoint: function(a) {
+                return new an(a.coordinates)
+            },
+            MultiLineString: function(a) {
+                return new Q(a.coordinates)
+            },
+            MultiPolygon: function(a) {
+                return new R(a.coordinates)
+            },
+            GeometryCollection: function(a, c) {
+                var d = Ua(a.geometries, function(a) {
+                    return Kr(a, c)
+                });
+                return new Rm(d)
+            }
+        },
+        Nr = {
+            Point: function(a) {
+                return {
+                    type: "Point",
+                    coordinates: a.K()
+                }
+            },
+            LineString: function(a) {
+                return {
+                    type: "LineString",
+                    coordinates: a.K()
+                }
+            },
+            Polygon: function(a, c) {
+                var d;
+                m(c) && (d = c.rightHanded);
+                return {
+                    type: "Polygon",
+                    coordinates: a.K(d)
+                }
+            },
+            MultiPoint: function(a) {
+                return {
+                    type: "MultiPoint",
+                    coordinates: a.K()
+                }
+            },
+            MultiLineString: function(a) {
+                return {
+                    type: "MultiLineString",
+                    coordinates: a.K()
+                }
+            },
+            MultiPolygon: function(a, c) {
+                var d;
+                m(c) && (d = c.rightHanded);
+                return {
+                    type: "MultiPolygon",
+                    coordinates: a.K(d)
+                }
+            },
+            GeometryCollection: function(a, c) {
+                return {
+                    type: "GeometryCollection",
+                    geometries: Ua(a.d, function(a) {
+                        return Mr(a, c)
+                    })
+                }
+            },
+            Circle: function() {
+                return {
+                    type: "GeometryCollection",
+                    geometries: []
+                }
+            }
+        };
+    l = Jr.prototype;
+    l.Fc = function(a, c) {
+        var d = Kr(a.geometry, c),
+            e = new X;
+        m(this.b) && e.Ic(this.b);
+        e.La(d);
+        m(a.id) && e.Qb(a.id);
+        m(a.properties) && e.t(a.properties);
+        return e
+    };
+    l.of = function(a, c) {
+        if ("Feature" == a.type) return [this.Fc(a, c)];
+        if ("FeatureCollection" == a.type) {
+            var d = [],
+                e = a.features,
+                f, g;
+            f = 0;
+            for (g = e.length; f < g; ++f) d.push(this.Fc(e[f], c));
+            return d
+        }
+        return []
+    };
+    l.hh = function(a, c) {
+        return Kr(a, c)
+    };
+    l.nh = function(a) {
+        a = a.crs;
+        return null != a ? "name" == a.type ? re(a.properties.name) : "EPSG" == a.type ? re("EPSG:" + a.properties.code) : null : this.defaultDataProjection
+    };
+    l.Lc = function(a, c) {
+        c = yr(this, c);
+        var d = {
+                type: "Feature"
+            },
+            e = a.$;
+        null != e && (d.id = e);
+        e = a.Q();
+        null != e && (d.geometry = Mr(e, c));
+        e = a.D();
+        zb(e, a.a);
+        d.properties = xb(e) ? null : e;
+        return d
+    };
+    l.ze = function(a, c) {
+        c = yr(this, c);
+        var d = [],
+            e, f;
+        e = 0;
+        for (f = a.length; e < f; ++e) d.push(this.Lc(a[e], c));
+        return {
+            type: "FeatureCollection",
+            features: d
+        }
+    };
+    l.Be = function(a, c) {
+        return Mr(a, yr(this, c))
+    };
+
+    function Or() {
+        this.defaultDataProjection = null
+    }
+    w(Or, wr);
+    l = Or.prototype;
+    l.M = function() {
+        return "xml"
+    };
+    l.sb = function(a, c) {
+        if (Io(a)) return Pr(this, a, c);
+        if (Lo(a)) return this.fh(a, c);
+        if (ia(a)) {
+            var d = Vo(a);
+            return Pr(this, d, c)
+        }
+        return null
+    };
+
+    function Pr(a, c, d) {
+        a = Qr(a, c, d);
+        return 0 < a.length ? a[0] : null
+    }
+    l.ja = function(a, c) {
+        if (Io(a)) return Qr(this, a, c);
+        if (Lo(a)) return this.Ob(a, c);
+        if (ia(a)) {
+            var d = Vo(a);
+            return Qr(this, d, c)
+        }
+        return []
+    };
+
+    function Qr(a, c, d) {
+        var e = [];
+        for (c = c.firstChild; null !== c; c = c.nextSibling) 1 == c.nodeType && db(e, a.Ob(c, d));
+        return e
+    }
+    l.Gc = function(a, c) {
+        if (Io(a)) return this.l(a, c);
+        if (Lo(a)) {
+            var d = this.qe(a, [xr(this, a, m(c) ? c : {})]);
+            return m(d) ? d : null
+        }
+        return ia(a) ? (d = Vo(a), this.l(d, c)) : null
+    };
+    l.za = function(a) {
+        return Io(a) ? this.sf(a) : Lo(a) ? this.te(a) : ia(a) ? (a = Vo(a), this.sf(a)) : null
+    };
+    l.sf = function() {
+        return this.defaultDataProjection
+    };
+    l.te = function() {
+        return this.defaultDataProjection
+    };
+    l.qd = function(a, c) {
+        var d = this.U(a, c);
+        return to(d)
+    };
+    l.ub = function(a, c) {
+        var d = this.a(a, c);
+        return to(d)
+    };
+    l.Mc = function(a, c) {
+        var d = this.q(a, c);
+        return to(d)
+    };
+
+    function Rr(a) {
+        a = m(a) ? a : {};
+        this.featureType = a.featureType;
+        this.featureNS = a.featureNS;
+        this.srsName = a.srsName;
+        this.schemaLocation = "";
+        this.b = {};
+        this.b["http://www.opengis.net/gml"] = {
+            featureMember: Yo(Rr.prototype.jd),
+            featureMembers: Yo(Rr.prototype.jd)
+        };
+        this.defaultDataProjection = null
+    }
+    w(Rr, Or);
+    l = Rr.prototype;
+    l.jd = function(a, c) {
+        var d = Fo(a),
+            e;
+        if ("FeatureCollection" == d) "http://www.opengis.net/wfs" === a.namespaceURI ? e = V([], this.b, a, c, this) : e = V(null, this.b, a, c, this);
+        else if ("featureMembers" == d || "featureMember" == d) {
+            var f = c[0],
+                g = f.featureType;
+            e = f.featureNS;
+            var h, k;
+            if (!m(g) && null != a.childNodes) {
+                g = [];
+                e = {};
+                h = 0;
+                for (k = a.childNodes.length; h < k; ++h) {
+                    var n = a.childNodes[h];
+                    if (1 === n.nodeType) {
+                        var p = n.nodeName.split(":").pop();
+                        if (-1 === Ra(g, p)) {
+                            var q;
+                            vb(e, n.namespaceURI) ? q = wb(e, function(a) {
+                                return a === n.namespaceURI
+                            }) : (q = "p" + rb(e), e[q] = n.namespaceURI);
+                            g.push(q + ":" + p)
+                        }
+                    }
+                }
+                f.featureType = g;
+                f.featureNS = e
+            }
+            ia(e) && (h = e, e = {}, e.p0 = h);
+            var f = {},
+                g = ga(g) ? g : [g],
+                r;
+            for (r in e) {
+                p = {};
+                h = 0;
+                for (k = g.length; h < k; ++h)(-1 === g[h].indexOf(":") ? "p0" : g[h].split(":")[0]) === r && (p[g[h].split(":").pop()] = "featureMembers" == d ? Xo(this.nf, this) : Yo(this.nf, this));
+                f[e[r]] = p
+            }
+            e = V([], f, a, c)
+        }
+        m(e) || (e = []);
+        return e
+    };
+    l.qe = function(a, c) {
+        var d = c[0];
+        d.srsName = a.firstElementChild.getAttribute("srsName");
+        var e = V(null, this.Cf, a, c, this);
+        if (null != e) return zr(e, !1, d)
+    };
+    l.nf = function(a, c) {
+        var d, e = a.getAttribute("fid") || Po(a, "http://www.opengis.net/gml", "id"),
+            f = {},
+            g;
+        for (d = a.firstElementChild; null !== d; d = d.nextElementSibling) {
+            var h = Fo(d);
+            if (0 === d.childNodes.length || 1 === d.childNodes.length && 3 === d.firstChild.nodeType) {
+                var k = Bo(d, !1);
+                /^[\s\xa0]*$/.test(k) && (k = void 0);
+                f[h] = k
+            } else "boundedBy" !== h && (g = h), f[h] = this.qe(d, c)
+        }
+        d = new X(f);
+        m(g) && d.Ic(g);
+        e && d.Qb(e);
+        return d
+    };
+    l.mh = function(a, c) {
+        var d = this.pe(a, c);
+        if (null != d) {
+            var e = new E(null);
+            Sk(e, "XYZ", d);
+            return e
+        }
+    };
+    l.kh = function(a, c) {
+        var d = V([], this.ai, a, c, this);
+        if (m(d)) return new an(d)
+    };
+    l.jh = function(a, c) {
+        var d = V([], this.$h, a, c, this);
+        if (m(d)) {
+            var e = new Q(null);
+            $m(e, d);
+            return e
+        }
+    };
+    l.lh = function(a, c) {
+        var d = V([], this.bi, a, c, this);
+        if (m(d)) {
+            var e = new R(null);
+            cn(e, d);
+            return e
+        }
+    };
+    l.$g = function(a, c) {
+        fp(this.ei, a, c, this)
+    };
+    l.kg = function(a, c) {
+        fp(this.Yh, a, c, this)
+    };
+    l.ah = function(a, c) {
+        fp(this.fi, a, c, this)
+    };
+    l.re = function(a, c) {
+        var d = this.pe(a, c);
+        if (null != d) {
+            var e = new O(null);
+            Ym(e, "XYZ", d);
+            return e
+        }
+    };
+    l.yn = function(a, c) {
+        var d = V(null, this.sd, a, c, this);
+        if (null != d) return d
+    };
+    l.ih = function(a, c) {
+        var d = this.pe(a, c);
+        if (m(d)) {
+            var e = new Qk(null);
+            Rk(e, "XYZ", d);
+            return e
+        }
+    };
+    l.se = function(a, c) {
+        var d = V([null], this.De, a, c, this);
+        if (m(d) && null !== d[0]) {
+            var e = new F(null),
+                f = d[0],
+                g = [f.length],
+                h, k;
+            h = 1;
+            for (k = d.length; h < k; ++h) db(f, d[h]), g.push(f.length);
+            dl(e, "XYZ", f, g);
+            return e
+        }
+    };
+    l.pe = function(a, c) {
+        return V(null, this.sd, a, c, this)
+    };
+    l.ai = Object({
+        "http://www.opengis.net/gml": {
+            pointMember: Xo(Rr.prototype.$g),
+            pointMembers: Xo(Rr.prototype.$g)
+        }
+    });
+    l.$h = Object({
+        "http://www.opengis.net/gml": {
+            lineStringMember: Xo(Rr.prototype.kg),
+            lineStringMembers: Xo(Rr.prototype.kg)
+        }
+    });
+    l.bi = Object({
+        "http://www.opengis.net/gml": {
+            polygonMember: Xo(Rr.prototype.ah),
+            polygonMembers: Xo(Rr.prototype.ah)
+        }
+    });
+    l.ei = Object({
+        "http://www.opengis.net/gml": {
+            Point: Xo(Rr.prototype.pe)
+        }
+    });
+    l.Yh = Object({
+        "http://www.opengis.net/gml": {
+            LineString: Xo(Rr.prototype.re)
+        }
+    });
+    l.fi = Object({
+        "http://www.opengis.net/gml": {
+            Polygon: Xo(Rr.prototype.se)
+        }
+    });
+    l.td = Object({
+        "http://www.opengis.net/gml": {
+            LinearRing: Yo(Rr.prototype.yn)
+        }
+    });
+    l.Ob = function(a, c) {
+        var d = {
+            featureType: this.featureType,
+            featureNS: this.featureNS
+        };
+        m(c) && Fb(d, xr(this, a, c));
+        return this.jd(a, [d])
+    };
+    l.te = function(a) {
+        return re(m(this.o) ? this.o : a.firstElementChild.getAttribute("srsName"))
+    };
+
+    function Sr(a) {
+        a = Bo(a, !1);
+        return Tr(a)
+    }
+
+    function Tr(a) {
+        if (a = /^\s*(true|1)|(false|0)\s*$/.exec(a)) return m(a[1]) || !1
+    }
+
+    function Ur(a) {
+        a = Bo(a, !1);
+        if (a = /^\s*(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?))\s*$/.exec(a)) {
+            var c = Date.UTC(parseInt(a[1], 10), parseInt(a[2], 10) - 1, parseInt(a[3], 10), parseInt(a[4], 10), parseInt(a[5], 10), parseInt(a[6], 10)) / 1E3;
+            if ("Z" != a[7]) {
+                var d = "-" == a[8] ? -1 : 1,
+                    c = c + 60 * d * parseInt(a[9], 10);
+                m(a[10]) && (c += 3600 * d * parseInt(a[10], 10))
+            }
+            return c
+        }
+    }
+
+    function Vr(a) {
+        a = Bo(a, !1);
+        return Wr(a)
+    }
+
+    function Wr(a) {
+        if (a = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(a)) return parseFloat(a[1])
+    }
+
+    function Xr(a) {
+        a = Bo(a, !1);
+        return Yr(a)
+    }
+
+    function Yr(a) {
+        if (a = /^\s*(\d+)\s*$/.exec(a)) return parseInt(a[1], 10)
+    }
+
+    function Y(a) {
+        a = Bo(a, !1);
+        return Ca(a)
+    }
+
+    function Zr(a, c) {
+        $r(a, c ? "1" : "0")
+    }
+
+    function as(a, c) {
+        a.appendChild(xo.createTextNode(c.toPrecision()))
+    }
+
+    function bs(a, c) {
+        a.appendChild(xo.createTextNode(c.toString()))
+    }
+
+    function $r(a, c) {
+        a.appendChild(xo.createTextNode(c))
+    };
+
+    function cs(a) {
+        a = m(a) ? a : {};
+        Rr.call(this, a);
+        this.i = m(a.surface) ? a.surface : !1;
+        this.e = m(a.curve) ? a.curve : !1;
+        this.f = m(a.multiCurve) ? a.multiCurve : !0;
+        this.g = m(a.multiSurface) ? a.multiSurface : !0;
+        this.schemaLocation = m(a.schemaLocation) ? a.schemaLocation : "http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd"
+    }
+    w(cs, Rr);
+    l = cs.prototype;
+    l.Bn = function(a, c) {
+        var d = V([], this.Zh, a, c, this);
+        if (m(d)) {
+            var e = new Q(null);
+            $m(e, d);
+            return e
+        }
+    };
+    l.Cn = function(a, c) {
+        var d = V([], this.ci, a, c, this);
+        if (m(d)) {
+            var e = new R(null);
+            cn(e, d);
+            return e
+        }
+    };
+    l.Nf = function(a, c) {
+        fp(this.Vh, a, c, this)
+    };
+    l.Hh = function(a, c) {
+        fp(this.ji, a, c, this)
+    };
+    l.Fn = function(a, c) {
+        return V([null], this.di, a, c, this)
+    };
+    l.Hn = function(a, c) {
+        return V([null], this.ii, a, c, this)
+    };
+    l.Gn = function(a, c) {
+        return V([null], this.De, a, c, this)
+    };
+    l.An = function(a, c) {
+        return V([null], this.sd, a, c, this)
+    };
+    l.rk = function(a, c) {
+        var d = V(void 0, this.td, a, c, this);
+        m(d) && c[c.length - 1].push(d)
+    };
+    l.Di = function(a, c) {
+        var d = V(void 0, this.td, a, c, this);
+        m(d) && (c[c.length - 1][0] = d)
+    };
+    l.oh = function(a, c) {
+        var d = V([null], this.ki, a, c, this);
+        if (m(d) && null !== d[0]) {
+            var e = new F(null),
+                f = d[0],
+                g = [f.length],
+                h, k;
+            h = 1;
+            for (k = d.length; h < k; ++h) db(f, d[h]), g.push(f.length);
+            dl(e, "XYZ", f, g);
+            return e
+        }
+    };
+    l.dh = function(a, c) {
+        var d = V([null], this.Wh, a, c, this);
+        if (m(d)) {
+            var e = new O(null);
+            Ym(e, "XYZ", d);
+            return e
+        }
+    };
+    l.xn = function(a, c) {
+        var d = V([null], this.Xh, a, c, this);
+        return Nd(d[1][0], d[1][1], d[2][0], d[2][1])
+    };
+    l.zn = function(a, c) {
+        for (var d = Bo(a, !1), e = /^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/, f = [], g; g = e.exec(d);) f.push(parseFloat(g[1])), d = d.substr(g[0].length);
+        if ("" === d) {
+            d = c[0].srsName;
+            e = "enu";
+            null === d || (e = ue(re(d)));
+            if ("neu" === e)
+                for (d = 0, e = f.length; d < e; d += 3) g = f[d], f[d] = f[d + 1], f[d + 1] = g;
+            d = f.length;
+            2 == d && f.push(0);
+            return 0 === d ? void 0 : f
+        }
+    };
+    l.qf = function(a, c) {
+        var d = Bo(a, !1).replace(/^\s*|\s*$/g, ""),
+            e = c[0].srsName,
+            f = a.parentNode.getAttribute("srsDimension"),
+            g = "enu";
+        null === e || (g = ue(re(e)));
+        d = d.split(/\s+/);
+        e = 2;
+        fa(a.getAttribute("srsDimension")) ? fa(a.getAttribute("dimension")) ? null === f || (e = Yr(f)) : e = Yr(a.getAttribute("dimension")) : e = Yr(a.getAttribute("srsDimension"));
+        for (var h, k, n = [], p = 0, q = d.length; p < q; p += e) f = parseFloat(d[p]), h = parseFloat(d[p + 1]), k = 3 === e ? parseFloat(d[p + 2]) : 0, "en" === g.substr(0, 2) ? n.push(f, h, k) : n.push(h, f, k);
+        return n
+    };
+    l.sd = Object({
+        "http://www.opengis.net/gml": {
+            pos: Yo(cs.prototype.zn),
+            posList: Yo(cs.prototype.qf)
+        }
+    });
+    l.De = Object({
+        "http://www.opengis.net/gml": {
+            interior: cs.prototype.rk,
+            exterior: cs.prototype.Di
+        }
+    });
+    l.Cf = Object({
+        "http://www.opengis.net/gml": {
+            Point: Yo(Rr.prototype.mh),
+            MultiPoint: Yo(Rr.prototype.kh),
+            LineString: Yo(Rr.prototype.re),
+            MultiLineString: Yo(Rr.prototype.jh),
+            LinearRing: Yo(Rr.prototype.ih),
+            Polygon: Yo(Rr.prototype.se),
+            MultiPolygon: Yo(Rr.prototype.lh),
+            Surface: Yo(cs.prototype.oh),
+            MultiSurface: Yo(cs.prototype.Cn),
+            Curve: Yo(cs.prototype.dh),
+            MultiCurve: Yo(cs.prototype.Bn),
+            Envelope: Yo(cs.prototype.xn)
+        }
+    });
+    l.Zh = Object({
+        "http://www.opengis.net/gml": {
+            curveMember: Xo(cs.prototype.Nf),
+            curveMembers: Xo(cs.prototype.Nf)
+        }
+    });
+    l.ci = Object({
+        "http://www.opengis.net/gml": {
+            surfaceMember: Xo(cs.prototype.Hh),
+            surfaceMembers: Xo(cs.prototype.Hh)
+        }
+    });
+    l.Vh = Object({
+        "http://www.opengis.net/gml": {
+            LineString: Xo(Rr.prototype.re),
+            Curve: Xo(cs.prototype.dh)
+        }
+    });
+    l.ji = Object({
+        "http://www.opengis.net/gml": {
+            Polygon: Xo(Rr.prototype.se),
+            Surface: Xo(cs.prototype.oh)
+        }
+    });
+    l.ki = Object({
+        "http://www.opengis.net/gml": {
+            patches: Yo(cs.prototype.Fn)
+        }
+    });
+    l.Wh = Object({
+        "http://www.opengis.net/gml": {
+            segments: Yo(cs.prototype.Hn)
+        }
+    });
+    l.Xh = Object({
+        "http://www.opengis.net/gml": {
+            lowerCorner: Xo(cs.prototype.qf),
+            upperCorner: Xo(cs.prototype.qf)
+        }
+    });
+    l.di = Object({
+        "http://www.opengis.net/gml": {
+            PolygonPatch: Yo(cs.prototype.Gn)
+        }
+    });
+    l.ii = Object({
+        "http://www.opengis.net/gml": {
+            LineStringSegment: Yo(cs.prototype.An)
+        }
+    });
+
+    function ds(a, c, d) {
+        d = d[d.length - 1].srsName;
+        c = c.K();
+        for (var e = c.length, f = Array(e), g, h = 0; h < e; ++h) {
+            g = c[h];
+            var k = h,
+                n = "enu";
+            null != d && (n = ue(re(d)));
+            f[k] = "en" === n.substr(0, 2) ? g[0] + " " + g[1] : g[1] + " " + g[0]
+        }
+        $r(a, f.join(" "))
+    }
+    l.Rh = function(a, c, d) {
+        var e = d[d.length - 1].srsName;
+        null != e && a.setAttribute("srsName", e);
+        e = Ao(a.namespaceURI, "pos");
+        a.appendChild(e);
+        d = d[d.length - 1].srsName;
+        a = "enu";
+        null != d && (a = ue(re(d)));
+        c = c.K();
+        $r(e, "en" === a.substr(0, 2) ? c[0] + " " + c[1] : c[1] + " " + c[0])
+    };
+    var es = {
+        "http://www.opengis.net/gml": {
+            lowerCorner: U($r),
+            upperCorner: U($r)
+        }
+    };
+    l = cs.prototype;
+    l.wo = function(a, c, d) {
+        var e = d[d.length - 1].srsName;
+        m(e) && a.setAttribute("srsName", e);
+        gp({
+            P: a
+        }, es, dp, [c[0] + " " + c[1], c[2] + " " + c[3]], d, ["lowerCorner", "upperCorner"], this)
+    };
+    l.Oh = function(a, c, d) {
+        var e = d[d.length - 1].srsName;
+        null != e && a.setAttribute("srsName", e);
+        e = Ao(a.namespaceURI, "posList");
+        a.appendChild(e);
+        ds(e, c, d)
+    };
+    l.hi = function(a, c) {
+        var d = c[c.length - 1],
+            e = d.P,
+            f = d.exteriorWritten;
+        m(f) || (d.exteriorWritten = !0);
+        return Ao(e.namespaceURI, m(f) ? "interior" : "exterior")
+    };
+    l.Ce = function(a, c, d) {
+        var e = d[d.length - 1].srsName;
+        "PolygonPatch" !== a.nodeName && null != e && a.setAttribute("srsName", e);
+        "Polygon" === a.nodeName || "PolygonPatch" === a.nodeName ? (c = c.Ed(), gp({
+            P: a,
+            srsName: e
+        }, fs, this.hi, c, d, void 0, this)) : "Surface" === a.nodeName && (e = Ao(a.namespaceURI, "patches"), a.appendChild(e), a = Ao(e.namespaceURI, "PolygonPatch"), e.appendChild(a), this.Ce(a, c, d))
+    };
+    l.xe = function(a, c, d) {
+        var e = d[d.length - 1].srsName;
+        "LineStringSegment" !== a.nodeName && null != e && a.setAttribute("srsName", e);
+        "LineString" === a.nodeName || "LineStringSegment" === a.nodeName ? (e = Ao(a.namespaceURI, "posList"), a.appendChild(e), ds(e, c, d)) : "Curve" === a.nodeName && (e = Ao(a.namespaceURI, "segments"), a.appendChild(e), a = Ao(e.namespaceURI, "LineStringSegment"), e.appendChild(a), this.xe(a, c, d))
+    };
+    l.Qh = function(a, c, d) {
+        var e = d[d.length - 1],
+            f = e.srsName,
+            e = e.surface;
+        null != f && a.setAttribute("srsName", f);
+        c = c.Id();
+        gp({
+            P: a,
+            srsName: f,
+            surface: e
+        }, gs, this.d, c, d, void 0, this)
+    };
+    l.xo = function(a, c, d) {
+        var e = d[d.length - 1].srsName;
+        null != e && a.setAttribute("srsName", e);
+        c = c.ce();
+        gp({
+            P: a,
+            srsName: e
+        }, hs, bp("pointMember"), c, d, void 0, this)
+    };
+    l.Ph = function(a, c, d) {
+        var e = d[d.length - 1],
+            f = e.srsName,
+            e = e.curve;
+        null != f && a.setAttribute("srsName", f);
+        c = c.ad();
+        gp({
+            P: a,
+            srsName: f,
+            curve: e
+        }, is, this.d, c, d, void 0, this)
+    };
+    l.Sh = function(a, c, d) {
+        var e = Ao(a.namespaceURI, "LinearRing");
+        a.appendChild(e);
+        this.Oh(e, c, d)
+    };
+    l.Th = function(a, c, d) {
+        var e = this.c(c, d);
+        m(e) && (a.appendChild(e), this.Ce(e, c, d))
+    };
+    l.yo = function(a, c, d) {
+        var e = Ao(a.namespaceURI, "Point");
+        a.appendChild(e);
+        this.Rh(e, c, d)
+    };
+    l.Nh = function(a, c, d) {
+        var e = this.c(c, d);
+        m(e) && (a.appendChild(e), this.xe(e, c, d))
+    };
+    l.Ae = function(a, c, d) {
+        var e = d[d.length - 1],
+            f = Db(e);
+        f.P = a;
+        var g;
+        ga(c) ? m(e.dataProjection) ? g = Me(c, e.featureProjection, e.dataProjection) : g = c : g = zr(c, !0, e);
+        gp(f, js, this.c, [g], d, void 0, this)
+    };
+    l.Lh = function(a, c, d) {
+        var e = c.$;
+        m(e) && a.setAttribute("fid", e);
+        var e = d[d.length - 1],
+            f = e.featureNS,
+            g = c.a;
+        m(e.fc) || (e.fc = {}, e.fc[f] = {});
+        var h = c.D();
+        c = [];
+        var k = [],
+            n;
+        for (n in h) {
+            var p = h[n];
+            null !== p && (c.push(n), k.push(p), n == g ? n in e.fc[f] || (e.fc[f][n] = U(this.Ae, this)) : n in e.fc[f] || (e.fc[f][n] = U($r)))
+        }
+        n = Db(e);
+        n.P = a;
+        gp(n, e.fc, bp(void 0, f), k, d, c)
+    };
+    var gs = {
+            "http://www.opengis.net/gml": {
+                surfaceMember: U(cs.prototype.Th),
+                polygonMember: U(cs.prototype.Th)
+            }
+        },
+        hs = {
+            "http://www.opengis.net/gml": {
+                pointMember: U(cs.prototype.yo)
+            }
+        },
+        is = {
+            "http://www.opengis.net/gml": {
+                lineStringMember: U(cs.prototype.Nh),
+                curveMember: U(cs.prototype.Nh)
+            }
+        },
+        fs = {
+            "http://www.opengis.net/gml": {
+                exterior: U(cs.prototype.Sh),
+                interior: U(cs.prototype.Sh)
+            }
+        },
+        js = {
+            "http://www.opengis.net/gml": {
+                Curve: U(cs.prototype.xe),
+                MultiCurve: U(cs.prototype.Ph),
+                Point: U(cs.prototype.Rh),
+                MultiPoint: U(cs.prototype.xo),
+                LineString: U(cs.prototype.xe),
+                MultiLineString: U(cs.prototype.Ph),
+                LinearRing: U(cs.prototype.Oh),
+                Polygon: U(cs.prototype.Ce),
+                MultiPolygon: U(cs.prototype.Qh),
+                Surface: U(cs.prototype.Ce),
+                MultiSurface: U(cs.prototype.Qh),
+                Envelope: U(cs.prototype.wo)
+            }
+        },
+        ks = {
+            MultiLineString: "lineStringMember",
+            MultiCurve: "curveMember",
+            MultiPolygon: "polygonMember",
+            MultiSurface: "surfaceMember"
+        };
+    cs.prototype.d = function(a, c) {
+        return Ao("http://www.opengis.net/gml", ks[c[c.length - 1].P.nodeName])
+    };
+    cs.prototype.c = function(a, c) {
+        var d = c[c.length - 1],
+            e = d.multiSurface,
+            f = d.surface,
+            g = d.curve,
+            d = d.multiCurve,
+            h;
+        ga(a) ? h = "Envelope" : (h = a.M(), "MultiPolygon" === h && !0 === e ? h = "MultiSurface" : "Polygon" === h && !0 === f ? h = "Surface" : "LineString" === h && !0 === g ? h = "Curve" : "MultiLineString" === h && !0 === d && (h = "MultiCurve"));
+        return Ao("http://www.opengis.net/gml", h)
+    };
+    cs.prototype.q = function(a, c) {
+        c = yr(this, c);
+        var d = Ao("http://www.opengis.net/gml", "geom"),
+            e = {
+                P: d,
+                srsName: this.srsName,
+                curve: this.e,
+                surface: this.i,
+                multiSurface: this.g,
+                multiCurve: this.f
+            };
+        m(c) && Fb(e, c);
+        this.Ae(d, a, [e]);
+        return d
+    };
+    cs.prototype.a = function(a, c) {
+        c = yr(this, c);
+        var d = Ao("http://www.opengis.net/gml", "featureMembers");
+        Uo(d, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.schemaLocation);
+        var e = {
+            srsName: this.srsName,
+            curve: this.e,
+            surface: this.i,
+            multiSurface: this.g,
+            multiCurve: this.f,
+            featureNS: this.featureNS,
+            featureType: this.featureType
+        };
+        m(c) && Fb(e, c);
+        var e = [e],
+            f = e[e.length - 1],
+            g = f.featureType,
+            h = f.featureNS,
+            k = {};
+        k[h] = {};
+        k[h][g] = U(this.Lh, this);
+        f = Db(f);
+        f.P = d;
+        gp(f, k, bp(g, h), a, e);
+        return d
+    };
+
+    function ls(a) {
+        a = m(a) ? a : {};
+        Rr.call(this, a);
+        this.b["http://www.opengis.net/gml"].featureMember = Xo(Rr.prototype.jd);
+        this.schemaLocation = m(a.schemaLocation) ? a.schemaLocation : "http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"
+    }
+    w(ls, Rr);
+    l = ls.prototype;
+    l.gh = function(a, c) {
+        var d = Bo(a, !1).replace(/^\s*|\s*$/g, ""),
+            e = c[0].srsName,
+            f = a.parentNode.getAttribute("srsDimension"),
+            g = "enu";
+        null === e || (g = ue(re(e)));
+        d = d.split(/[\s,]+/);
+        e = 2;
+        fa(a.getAttribute("srsDimension")) ? fa(a.getAttribute("dimension")) ? null === f || (e = Yr(f)) : e = Yr(a.getAttribute("dimension")) : e = Yr(a.getAttribute("srsDimension"));
+        for (var h, k, n = [], p = 0, q = d.length; p < q; p += e) f = parseFloat(d[p]), h = parseFloat(d[p + 1]), k = 3 === e ? parseFloat(d[p + 2]) : 0, "en" === g.substr(0, 2) ? n.push(f, h, k) : n.push(h, f, k);
+        return n
+    };
+    l.wn = function(a, c) {
+        var d = V([null], this.Uh, a, c, this);
+        return Nd(d[1][0], d[1][1], d[1][3], d[1][4])
+    };
+    l.pk = function(a, c) {
+        var d = V(void 0, this.td, a, c, this);
+        m(d) && c[c.length - 1].push(d)
+    };
+    l.gn = function(a, c) {
+        var d = V(void 0, this.td, a, c, this);
+        m(d) && (c[c.length - 1][0] = d)
+    };
+    l.sd = Object({
+        "http://www.opengis.net/gml": {
+            coordinates: Yo(ls.prototype.gh)
+        }
+    });
+    l.De = Object({
+        "http://www.opengis.net/gml": {
+            innerBoundaryIs: ls.prototype.pk,
+            outerBoundaryIs: ls.prototype.gn
+        }
+    });
+    l.Uh = Object({
+        "http://www.opengis.net/gml": {
+            coordinates: Xo(ls.prototype.gh)
+        }
+    });
+    l.Cf = Object({
+        "http://www.opengis.net/gml": {
+            Point: Yo(Rr.prototype.mh),
+            MultiPoint: Yo(Rr.prototype.kh),
+            LineString: Yo(Rr.prototype.re),
+            MultiLineString: Yo(Rr.prototype.jh),
+            LinearRing: Yo(Rr.prototype.ih),
+            Polygon: Yo(Rr.prototype.se),
+            MultiPolygon: Yo(Rr.prototype.lh),
+            Box: Yo(ls.prototype.wn)
+        }
+    });
+
+    function ms(a) {
+        a = m(a) ? a : {};
+        this.defaultDataProjection = null;
+        this.defaultDataProjection = re("EPSG:4326");
+        this.b = a.readExtensions
+    }
+    w(ms, Or);
+    var ns = [null, "http://www.topografix.com/GPX/1/0", "http://www.topografix.com/GPX/1/1"];
+
+    function os(a, c, d) {
+        a.push(parseFloat(c.getAttribute("lon")), parseFloat(c.getAttribute("lat")));
+        "ele" in d ? (a.push(d.ele), zb(d, "ele")) : a.push(0);
+        "time" in d ? (a.push(d.time), zb(d, "time")) : a.push(0);
+        return a
+    }
+
+    function ps(a, c) {
+        var d = c[c.length - 1],
+            e = a.getAttribute("href");
+        null === e || (d.link = e);
+        fp(qs, a, c)
+    }
+
+    function rs(a, c) {
+        c[c.length - 1].extensionsNode_ = a
+    }
+
+    function ss(a, c) {
+        var d = c[0],
+            e = V({
+                flatCoordinates: []
+            }, ts, a, c);
+        if (m(e)) {
+            var f = e.flatCoordinates;
+            zb(e, "flatCoordinates");
+            var g = new O(null);
+            Ym(g, "XYZM", f);
+            zr(g, !1, d);
+            d = new X(g);
+            d.t(e);
+            return d
+        }
+    }
+
+    function us(a, c) {
+        var d = c[0],
+            e = V({
+                flatCoordinates: [],
+                ends: []
+            }, vs, a, c);
+        if (m(e)) {
+            var f = e.flatCoordinates;
+            zb(e, "flatCoordinates");
+            var g = e.ends;
+            zb(e, "ends");
+            var h = new Q(null);
+            Zm(h, "XYZM", f, g);
+            zr(h, !1, d);
+            d = new X(h);
+            d.t(e);
+            return d
+        }
+    }
+
+    function ws(a, c) {
+        var d = c[0],
+            e = V({}, xs, a, c);
+        if (m(e)) {
+            var f = os([], a, e),
+                f = new E(f, "XYZM");
+            zr(f, !1, d);
+            d = new X(f);
+            d.t(e);
+            return d
+        }
+    }
+    var ys = {
+            rte: ss,
+            trk: us,
+            wpt: ws
+        },
+        zs = T(ns, {
+            rte: Xo(ss),
+            trk: Xo(us),
+            wpt: Xo(ws)
+        }),
+        qs = T(ns, {
+            text: S(Y, "linkText"),
+            type: S(Y, "linkType")
+        }),
+        ts = T(ns, {
+            name: S(Y),
+            cmt: S(Y),
+            desc: S(Y),
+            src: S(Y),
+            link: ps,
+            number: S(Xr),
+            extensions: rs,
+            type: S(Y),
+            rtept: function(a, c) {
+                var d = V({}, As, a, c);
+                m(d) && os(c[c.length - 1].flatCoordinates, a, d)
+            }
+        }),
+        As = T(ns, {
+            ele: S(Vr),
+            time: S(Ur)
+        }),
+        vs = T(ns, {
+            name: S(Y),
+            cmt: S(Y),
+            desc: S(Y),
+            src: S(Y),
+            link: ps,
+            number: S(Xr),
+            type: S(Y),
+            extensions: rs,
+            trkseg: function(a, c) {
+                var d = c[c.length - 1];
+                fp(Bs, a, c);
+                d.ends.push(d.flatCoordinates.length)
+            }
+        }),
+        Bs = T(ns, {
+            trkpt: function(a, c) {
+                var d = V({}, Cs, a, c);
+                m(d) && os(c[c.length - 1].flatCoordinates, a, d)
+            }
+        }),
+        Cs = T(ns, {
+            ele: S(Vr),
+            time: S(Ur)
+        }),
+        xs = T(ns, {
+            ele: S(Vr),
+            time: S(Ur),
+            magvar: S(Vr),
+            geoidheight: S(Vr),
+            name: S(Y),
+            cmt: S(Y),
+            desc: S(Y),
+            src: S(Y),
+            link: ps,
+            sym: S(Y),
+            type: S(Y),
+            fix: S(Y),
+            sat: S(Xr),
+            hdop: S(Vr),
+            vdop: S(Vr),
+            pdop: S(Vr),
+            ageofdgpsdata: S(Vr),
+            dgpsid: S(Xr),
+            extensions: rs
+        });
+
+    function Ds(a, c) {
+        null === c && (c = []);
+        for (var d = 0, e = c.length; d < e; ++d) {
+            var f = c[d];
+            if (m(a.b)) {
+                var g = f.get("extensionsNode_") || null;
+                a.b(f, g)
+            }
+            f.set("extensionsNode_", void 0)
+        }
+    }
+    ms.prototype.fh = function(a, c) {
+        if (!Ya(ns, a.namespaceURI)) return null;
+        var d = ys[a.localName];
+        if (!m(d)) return null;
+        d = d(a, [xr(this, a, c)]);
+        if (!m(d)) return null;
+        Ds(this, [d]);
+        return d
+    };
+    ms.prototype.Ob = function(a, c) {
+        if (!Ya(ns, a.namespaceURI)) return [];
+        if ("gpx" == a.localName) {
+            var d = V([], zs, a, [xr(this, a, c)]);
+            if (m(d)) return Ds(this, d), d
+        }
+        return []
+    };
+
+    function Es(a, c, d) {
+        a.setAttribute("href", c);
+        c = d[d.length - 1].properties;
+        gp({
+            P: a
+        }, Fs, dp, [c.linkText, c.linkType], d, Gs)
+    }
+
+    function Hs(a, c, d) {
+        var e = d[d.length - 1],
+            f = e.P.namespaceURI,
+            g = e.properties;
+        Uo(a, null, "lat", c[1]);
+        Uo(a, null, "lon", c[0]);
+        switch (e.geometryLayout) {
+            case "XYZM":
+                0 !== c[3] && (g.time = c[3]);
+            case "XYZ":
+                0 !== c[2] && (g.ele = c[2]);
+                break;
+            case "XYM":
+                0 !== c[2] && (g.time = c[2])
+        }
+        c = Is[f];
+        e = ep(g, c);
+        gp({
+            P: a,
+            properties: g
+        }, Js, dp, e, d, c)
+    }
+    var Gs = ["text", "type"],
+        Fs = $o(ns, {
+            text: U($r),
+            type: U($r)
+        }),
+        Ks = $o(ns, "name cmt desc src link number type rtept".split(" ")),
+        Ls = $o(ns, {
+            name: U($r),
+            cmt: U($r),
+            desc: U($r),
+            src: U($r),
+            link: U(Es),
+            number: U(bs),
+            type: U($r),
+            rtept: ap(U(Hs))
+        }),
+        Ms = $o(ns, "name cmt desc src link number type trkseg".split(" ")),
+        Ps = $o(ns, {
+            name: U($r),
+            cmt: U($r),
+            desc: U($r),
+            src: U($r),
+            link: U(Es),
+            number: U(bs),
+            type: U($r),
+            trkseg: ap(U(function(a, c, d) {
+                gp({
+                    P: a,
+                    geometryLayout: c.a,
+                    properties: {}
+                }, Ns, Os, c.K(), d)
+            }))
+        }),
+        Os = bp("trkpt"),
+        Ns = $o(ns, {
+            trkpt: U(Hs)
+        }),
+        Is = $o(ns, "ele time magvar geoidheight name cmt desc src link sym type fix sat hdop vdop pdop ageofdgpsdata dgpsid".split(" ")),
+        Js = $o(ns, {
+            ele: U(as),
+            time: U(function(a, c) {
+                var d = new Date(1E3 * c),
+                    d = d.getUTCFullYear() + "-" + Ma(d.getUTCMonth() + 1) + "-" + Ma(d.getUTCDate()) + "T" + Ma(d.getUTCHours()) + ":" + Ma(d.getUTCMinutes()) + ":" + Ma(d.getUTCSeconds()) + "Z";
+                a.appendChild(xo.createTextNode(d))
+            }),
+            magvar: U(as),
+            geoidheight: U(as),
+            name: U($r),
+            cmt: U($r),
+            desc: U($r),
+            src: U($r),
+            link: U(Es),
+            sym: U($r),
+            type: U($r),
+            fix: U($r),
+            sat: U(bs),
+            hdop: U(as),
+            vdop: U(as),
+            pdop: U(as),
+            ageofdgpsdata: U(as),
+            dgpsid: U(bs)
+        }),
+        Qs = {
+            Point: "wpt",
+            LineString: "rte",
+            MultiLineString: "trk"
+        };
+
+    function Rs(a, c) {
+        var d = a.Q();
+        if (m(d)) return Ao(c[c.length - 1].P.namespaceURI, Qs[d.M()])
+    }
+    var Ss = $o(ns, {
+        rte: U(function(a, c, d) {
+            var e = d[0],
+                f = c.D();
+            a = {
+                P: a,
+                properties: f
+            };
+            c = c.Q();
+            m(c) && (c = zr(c, !0, e), a.geometryLayout = c.a, f.rtept = c.K());
+            e = Ks[d[d.length - 1].P.namespaceURI];
+            f = ep(f, e);
+            gp(a, Ls, dp, f, d, e)
+        }),
+        trk: U(function(a, c, d) {
+            var e = d[0],
+                f = c.D();
+            a = {
+                P: a,
+                properties: f
+            };
+            c = c.Q();
+            m(c) && (c = zr(c, !0, e), f.trkseg = c.ad());
+            e = Ms[d[d.length - 1].P.namespaceURI];
+            f = ep(f, e);
+            gp(a, Ps, dp, f, d, e)
+        }),
+        wpt: U(function(a, c, d) {
+            var e = d[0],
+                f = d[d.length - 1];
+            f.properties = c.D();
+            c = c.Q();
+            m(c) && (c = zr(c, !0, e), f.geometryLayout = c.a, Hs(a, c.K(), d))
+        })
+    });
+    ms.prototype.a = function(a, c) {
+        c = yr(this, c);
+        var d = Ao("http://www.topografix.com/GPX/1/1", "gpx");
+        gp({
+            P: d
+        }, Ss, Rs, a, [c]);
+        return d
+    };
+
+    function Ts(a) {
+        a = Us(a);
+        return Ua(a, function(a) {
+            return a.c.substring(a.a, a.b)
+        })
+    }
+
+    function Vs(a, c, d) {
+        this.c = a;
+        this.a = c;
+        this.b = d
+    }
+
+    function Us(a) {
+        for (var c = RegExp("\r\n|\r|\n", "g"), d = 0, e, f = []; e = c.exec(a);) d = new Vs(a, d, e.index), f.push(d), d = c.lastIndex;
+        d < a.length && (d = new Vs(a, d, a.length), f.push(d));
+        return f
+    };
+
+    function Ws() {
+        this.defaultDataProjection = null
+    }
+    w(Ws, wr);
+    l = Ws.prototype;
+    l.M = function() {
+        return "text"
+    };
+    l.sb = function(a, c) {
+        return this.hd(ia(a) ? a : "", yr(this, c))
+    };
+    l.ja = function(a, c) {
+        return this.pf(ia(a) ? a : "", yr(this, c))
+    };
+    l.Gc = function(a, c) {
+        return this.kd(ia(a) ? a : "", yr(this, c))
+    };
+    l.za = function() {
+        return this.defaultDataProjection
+    };
+    l.qd = function(a, c) {
+        return this.ye(a, yr(this, c))
+    };
+    l.ub = function(a, c) {
+        return this.Mh(a, yr(this, c))
+    };
+    l.Mc = function(a, c) {
+        return this.rd(a, yr(this, c))
+    };
+
+    function Xs(a) {
+        a = m(a) ? a : {};
+        this.defaultDataProjection = null;
+        this.defaultDataProjection = re("EPSG:4326");
+        this.b = m(a.altitudeMode) ? a.altitudeMode : "none"
+    }
+    w(Xs, Ws);
+    var Ys = /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,
+        Zs = /^H.([A-Z]{3}).*?:(.*)/,
+        $s = /^HFDTE(\d{2})(\d{2})(\d{2})/;
+    Xs.prototype.hd = function(a, c) {
+        var d = this.b,
+            e = Ts(a),
+            f = {},
+            g = [],
+            h = 2E3,
+            k = 0,
+            n = 1,
+            p, q;
+        p = 0;
+        for (q = e.length; p < q; ++p) {
+            var r = e[p],
+                t;
+            if ("B" == r.charAt(0)) {
+                if (t = Ys.exec(r)) {
+                    var r = parseInt(t[1], 10),
+                        u = parseInt(t[2], 10),
+                        A = parseInt(t[3], 10),
+                        z = parseInt(t[4], 10) + parseInt(t[5], 10) / 6E4;
+                    "S" == t[6] && (z = -z);
+                    var D = parseInt(t[7], 10) + parseInt(t[8], 10) / 6E4;
+                    "W" == t[9] && (D = -D);
+                    g.push(D, z);
+                    "none" != d && g.push("gps" == d ? parseInt(t[11], 10) : "barometric" == d ? parseInt(t[12], 10) : 0);
+                    g.push(Date.UTC(h, k, n, r, u, A) / 1E3)
+                }
+            } else if ("H" == r.charAt(0))
+                if (t = $s.exec(r)) n = parseInt(t[1], 10), k = parseInt(t[2], 10) - 1, h = 2E3 + parseInt(t[3], 10);
+                else if (t = Zs.exec(r)) f[t[1]] = Ca(t[2]), $s.exec(r)
+        }
+        if (0 === g.length) return null;
+        e = new O(null);
+        Ym(e, "none" == d ? "XYM" : "XYZM", g);
+        d = new X(zr(e, !1, c));
+        d.t(f);
+        return d
+    };
+    Xs.prototype.pf = function(a, c) {
+        var d = this.hd(a, c);
+        return null === d ? [] : [d]
+    };
+
+    function at(a, c) {
+        var d;
+        a instanceof at ? (this.Yb = m(c) ? c : a.Yb, bt(this, a.Pb), this.pc = a.pc, this.ib = a.ib, ct(this, a.Ec), this.hb = a.hb, dt(this, a.b.clone()), this.Sb = a.Sb) : a && (d = Yn(String(a))) ? (this.Yb = !!c, bt(this, d[1] || "", !0), this.pc = et(d[2] || ""), this.ib = et(d[3] || "", !0), ct(this, d[4]), this.hb = et(d[5] || "", !0), dt(this, d[6] || "", !0), this.Sb = et(d[7] || "")) : (this.Yb = !!c, this.b = new ft(null, 0, this.Yb))
+    }
+    l = at.prototype;
+    l.Pb = "";
+    l.pc = "";
+    l.ib = "";
+    l.Ec = null;
+    l.hb = "";
+    l.Sb = "";
+    l.Yb = !1;
+    l.toString = function() {
+        var a = [],
+            c = this.Pb;
+        c && a.push(gt(c, ht, !0), ":");
+        if (c = this.ib) {
+            a.push("//");
+            var d = this.pc;
+            d && a.push(gt(d, ht, !0), "@");
+            a.push(encodeURIComponent(String(c)).replace(/%25([0-9a-fA-F]{2})/g, "%$1"));
+            c = this.Ec;
+            null != c && a.push(":", String(c))
+        }
+        if (c = this.hb) this.ib && "/" != c.charAt(0) && a.push("/"), a.push(gt(c, "/" == c.charAt(0) ? it : jt, !0));
+        (c = this.b.toString()) && a.push("?", c);
+        (c = this.Sb) && a.push("#", gt(c, kt));
+        return a.join("")
+    };
+    l.clone = function() {
+        return new at(this)
+    };
+
+    function bt(a, c, d) {
+        a.Pb = d ? et(c, !0) : c;
+        a.Pb && (a.Pb = a.Pb.replace(/:$/, ""))
+    }
+
+    function ct(a, c) {
+        if (c) {
+            c = Number(c);
+            if (isNaN(c) || 0 > c) throw Error("Bad port number " + c);
+            a.Ec = c
+        } else a.Ec = null
+    }
+
+    function dt(a, c, d) {
+        c instanceof ft ? (a.b = c, lt(a.b, a.Yb)) : (d || (c = gt(c, mt)), a.b = new ft(c, 0, a.Yb))
+    }
+
+    function nt(a) {
+        return a instanceof at ? a.clone() : new at(a, void 0)
+    }
+
+    function ot(a, c) {
+        a instanceof at || (a = nt(a));
+        c instanceof at || (c = nt(c));
+        var d = a,
+            e = c,
+            f = d.clone(),
+            g = !!e.Pb;
+        g ? bt(f, e.Pb) : g = !!e.pc;
+        g ? f.pc = e.pc : g = !!e.ib;
+        g ? f.ib = e.ib : g = null != e.Ec;
+        var h = e.hb;
+        if (g) ct(f, e.Ec);
+        else if (g = !!e.hb)
+            if ("/" != h.charAt(0) && (d.ib && !d.hb ? h = "/" + h : (d = f.hb.lastIndexOf("/"), -1 != d && (h = f.hb.substr(0, d + 1) + h))), d = h, ".." == d || "." == d) h = "";
+            else if (-1 != d.indexOf("./") || -1 != d.indexOf("/.")) {
+            for (var h = 0 == d.lastIndexOf("/", 0), d = d.split("/"), k = [], n = 0; n < d.length;) {
+                var p = d[n++];
+                "." == p ? h && n == d.length && k.push("") : ".." == p ? ((1 < k.length || 1 == k.length && "" != k[0]) && k.pop(), h && n == d.length && k.push("")) : (k.push(p), h = !0)
+            }
+            h = k.join("/")
+        } else h = d;
+        g ? f.hb = h : g = "" !== e.b.toString();
+        g ? dt(f, et(e.b.toString())) : g = !!e.Sb;
+        g && (f.Sb = e.Sb);
+        return f
+    }
+
+    function et(a, c) {
+        return a ? c ? decodeURI(a) : decodeURIComponent(a) : ""
+    }
+
+    function gt(a, c, d) {
+        return ia(a) ? (a = encodeURI(a).replace(c, pt), d && (a = a.replace(/%25([0-9a-fA-F]{2})/g, "%$1")), a) : null
+    }
+
+    function pt(a) {
+        a = a.charCodeAt(0);
+        return "%" + (a >> 4 & 15).toString(16) + (a & 15).toString(16)
+    }
+    var ht = /[#\/\?@]/g,
+        jt = /[\#\?:]/g,
+        it = /[\#\?]/g,
+        mt = /[\#\?@]/g,
+        kt = /#/g;
+
+    function ft(a, c, d) {
+        this.b = a || null;
+        this.a = !!d
+    }
+
+    function qt(a) {
+        a.ia || (a.ia = new Ch, a.va = 0, a.b && $n(a.b, function(c, d) {
+            a.add(decodeURIComponent(c.replace(/\+/g, " ")), d)
+        }))
+    }
+    l = ft.prototype;
+    l.ia = null;
+    l.va = null;
+    l.Tb = function() {
+        qt(this);
+        return this.va
+    };
+    l.add = function(a, c) {
+        qt(this);
+        this.b = null;
+        a = rt(this, a);
+        var d = this.ia.get(a);
+        d || this.ia.set(a, d = []);
+        d.push(c);
+        this.va++;
+        return this
+    };
+    l.remove = function(a) {
+        qt(this);
+        a = rt(this, a);
+        return Eh(this.ia.a, a) ? (this.b = null, this.va -= this.ia.get(a).length, this.ia.remove(a)) : !1
+    };
+    l.clear = function() {
+        this.ia = this.b = null;
+        this.va = 0
+    };
+    l.la = function() {
+        qt(this);
+        return 0 == this.va
+    };
+
+    function st(a, c) {
+        qt(a);
+        c = rt(a, c);
+        return Eh(a.ia.a, c)
+    }
+    l.C = function() {
+        qt(this);
+        for (var a = this.ia.cb(), c = this.ia.C(), d = [], e = 0; e < c.length; e++)
+            for (var f = a[e], g = 0; g < f.length; g++) d.push(c[e]);
+        return d
+    };
+    l.cb = function(a) {
+        qt(this);
+        var c = [];
+        if (ia(a)) st(this, a) && (c = ab(c, this.ia.get(rt(this, a))));
+        else {
+            a = this.ia.cb();
+            for (var d = 0; d < a.length; d++) c = ab(c, a[d])
+        }
+        return c
+    };
+    l.set = function(a, c) {
+        qt(this);
+        this.b = null;
+        a = rt(this, a);
+        st(this, a) && (this.va -= this.ia.get(a).length);
+        this.ia.set(a, [c]);
+        this.va++;
+        return this
+    };
+    l.get = function(a, c) {
+        var d = a ? this.cb(a) : [];
+        return 0 < d.length ? String(d[0]) : c
+    };
+
+    function tt(a, c, d) {
+        a.remove(c);
+        0 < d.length && (a.b = null, a.ia.set(rt(a, c), bb(d)), a.va += d.length)
+    }
+    l.toString = function() {
+        if (this.b) return this.b;
+        if (!this.ia) return "";
+        for (var a = [], c = this.ia.C(), d = 0; d < c.length; d++)
+            for (var e = c[d], f = encodeURIComponent(String(e)), e = this.cb(e), g = 0; g < e.length; g++) {
+                var h = f;
+                "" !== e[g] && (h += "=" + encodeURIComponent(String(e[g])));
+                a.push(h)
+            }
+        return this.b = a.join("&")
+    };
+    l.clone = function() {
+        var a = new ft;
+        a.b = this.b;
+        this.ia && (a.ia = this.ia.clone(), a.va = this.va);
+        return a
+    };
+
+    function rt(a, c) {
+        var d = String(c);
+        a.a && (d = d.toLowerCase());
+        return d
+    }
+
+    function lt(a, c) {
+        c && !a.a && (qt(a), a.b = null, a.ia.forEach(function(a, c) {
+            var f = c.toLowerCase();
+            c != f && (this.remove(c), tt(this, f, a))
+        }, a));
+        a.a = c
+    };
+
+    function ut(a) {
+        a = m(a) ? a : {};
+        this.d = a.font;
+        this.e = a.rotation;
+        this.a = a.scale;
+        this.c = a.text;
+        this.g = a.textAlign;
+        this.i = a.textBaseline;
+        this.b = m(a.fill) ? a.fill : null;
+        this.f = m(a.stroke) ? a.stroke : null;
+        this.q = m(a.offsetX) ? a.offsetX : 0;
+        this.l = m(a.offsetY) ? a.offsetY : 0
+    }
+    l = ut.prototype;
+    l.Wi = function() {
+        return this.d
+    };
+    l.mj = function() {
+        return this.q
+    };
+    l.nj = function() {
+        return this.l
+    };
+    l.Qm = function() {
+        return this.b
+    };
+    l.Rm = function() {
+        return this.e
+    };
+    l.Sm = function() {
+        return this.a
+    };
+    l.Tm = function() {
+        return this.f
+    };
+    l.Um = function() {
+        return this.c
+    };
+    l.xj = function() {
+        return this.g
+    };
+    l.yj = function() {
+        return this.i
+    };
+    l.Wn = function(a) {
+        this.d = a
+    };
+    l.Vn = function(a) {
+        this.b = a
+    };
+    l.Vm = function(a) {
+        this.e = a
+    };
+    l.Wm = function(a) {
+        this.a = a
+    };
+    l.eo = function(a) {
+        this.f = a
+    };
+    l.fo = function(a) {
+        this.c = a
+    };
+    l.ho = function(a) {
+        this.g = a
+    };
+    l.io = function(a) {
+        this.i = a
+    };
+
+    function vt(a) {
+        function c(a) {
+            return ga(a) ? a : ia(a) ? (!(a in e) && "#" + a in e && (a = "#" + a), c(e[a])) : d
+        }
+        a = m(a) ? a : {};
+        this.defaultDataProjection = null;
+        this.defaultDataProjection = re("EPSG:4326");
+        var d = m(a.defaultStyle) ? a.defaultStyle : wt,
+            e = {};
+        this.c = m(a.extractStyles) ? a.extractStyles : !0;
+        this.b = e;
+        this.d = function() {
+            var a = this.get("Style");
+            if (m(a)) return a;
+            a = this.get("styleUrl");
+            return m(a) ? c(a) : d
+        }
+    }
+    w(vt, Or);
+    var xt = ["http://www.google.com/kml/ext/2.2"],
+        yt = [null, "http://earth.google.com/kml/2.0", "http://earth.google.com/kml/2.1", "http://earth.google.com/kml/2.2", "http://www.opengis.net/kml/2.2"],
+        zt = [255, 255, 255, 1],
+        At = new zl({
+            color: zt
+        }),
+        Bt = [20, 2],
+        Ct = [64, 64],
+        Dt = new Fj({
+            anchor: Bt,
+            anchorOrigin: "bottom-left",
+            anchorXUnits: "pixels",
+            anchorYUnits: "pixels",
+            crossOrigin: "anonymous",
+            rotation: 0,
+            scale: .5,
+            size: Ct,
+            src: "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"
+        }),
+        Et = new vl({
+            color: zt,
+            width: 1
+        }),
+        Ft = new ut({
+            font: "normal 16px Helvetica",
+            fill: At,
+            stroke: Et,
+            scale: 1
+        }),
+        wt = [new Bl({
+            fill: At,
+            image: Dt,
+            text: Ft,
+            stroke: Et,
+            zIndex: 0
+        })],
+        Gt = {
+            fraction: "fraction",
+            pixels: "pixels"
+        };
+
+    function Ht(a) {
+        a = Bo(a, !1);
+        if (a = /^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(a)) return a = a[1], [parseInt(a.substr(6, 2), 16), parseInt(a.substr(4, 2), 16), parseInt(a.substr(2, 2), 16), parseInt(a.substr(0, 2), 16) / 255]
+    }
+
+    function It(a) {
+        a = Bo(a, !1);
+        for (var c = [], d = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i, e; e = d.exec(a);) c.push(parseFloat(e[1]), parseFloat(e[2]), e[3] ? parseFloat(e[3]) : 0), a = a.substr(e[0].length);
+        return "" !== a ? void 0 : c
+    }
+
+    function Jt(a) {
+        var c = Bo(a, !1);
+        return null != a.baseURI ? ot(a.baseURI, Ca(c)).toString() : Ca(c)
+    }
+
+    function Kt(a) {
+        a = Vr(a);
+        if (m(a)) return Math.sqrt(a)
+    }
+
+    function Lt(a, c) {
+        return V(null, Mt, a, c)
+    }
+
+    function Nt(a, c) {
+        var d = V({
+            j: [],
+            Kh: []
+        }, Ot, a, c);
+        if (m(d)) {
+            var e = d.j,
+                d = d.Kh,
+                f, g;
+            f = 0;
+            for (g = Math.min(e.length, d.length); f < g; ++f) e[4 * f + 3] = d[f];
+            d = new O(null);
+            Ym(d, "XYZM", e);
+            return d
+        }
+    }
+
+    function Pt(a, c) {
+        var d = V({}, Qt, a, c),
+            e = V(null, Rt, a, c);
+        if (m(e)) {
+            var f = new O(null);
+            Ym(f, "XYZ", e);
+            f.t(d);
+            return f
+        }
+    }
+
+    function St(a, c) {
+        var d = V({}, Qt, a, c),
+            e = V(null, Rt, a, c);
+        if (m(e)) {
+            var f = new F(null);
+            dl(f, "XYZ", e, [e.length]);
+            f.t(d);
+            return f
+        }
+    }
+
+    function Tt(a, c) {
+        var d = V([], Ut, a, c);
+        if (!m(d)) return null;
+        if (0 === d.length) return new Rm(d);
+        var e = !0,
+            f = d[0].M(),
+            g, h, k;
+        h = 1;
+        for (k = d.length; h < k; ++h)
+            if (g = d[h], g.M() != f) {
+                e = !1;
+                break
+            }
+        if (e) {
+            if ("Point" == f) {
+                g = d[0];
+                e = g.a;
+                f = g.j;
+                h = 1;
+                for (k = d.length; h < k; ++h) g = d[h], db(f, g.j);
+                g = new an(null);
+                yk(g, e, f);
+                g.k();
+                Vt(g, d);
+                return g
+            }
+            return "LineString" == f ? (g = new Q(null), $m(g, d), Vt(g, d), g) : "Polygon" == f ? (g = new R(null), cn(g, d), Vt(g, d), g) : "GeometryCollection" == f ? new Rm(d) : null
+        }
+        return new Rm(d)
+    }
+
+    function Wt(a, c) {
+        var d = V({}, Qt, a, c),
+            e = V(null, Rt, a, c);
+        if (null != e) {
+            var f = new E(null);
+            Sk(f, "XYZ", e);
+            f.t(d);
+            return f
+        }
+    }
+
+    function Xt(a, c) {
+        var d = V({}, Qt, a, c),
+            e = V([null], Yt, a, c);
+        if (null != e && null !== e[0]) {
+            var f = new F(null),
+                g = e[0],
+                h = [g.length],
+                k, n;
+            k = 1;
+            for (n = e.length; k < n; ++k) db(g, e[k]), h.push(g.length);
+            dl(f, "XYZ", g, h);
+            f.t(d);
+            return f
+        }
+    }
+
+    function Zt(a, c) {
+        var d = V({}, $t, a, c);
+        if (!m(d)) return null;
+        var e = Ab(d, "fillStyle", At),
+            f = d.fill;
+        m(f) && !f && (e = null);
+        var f = Ab(d, "imageStyle", Dt),
+            g = Ab(d, "textStyle", Ft),
+            h = Ab(d, "strokeStyle", Et),
+            d = d.outline;
+        m(d) && !d && (h = null);
+        return [new Bl({
+            fill: e,
+            image: f,
+            stroke: h,
+            text: g,
+            zIndex: void 0
+        })]
+    }
+
+    function Vt(a, c) {
+        var d = c.length,
+            e = Array(c.length),
+            f = Array(c.length),
+            g, h, k, n;
+        k = n = !1;
+        for (h = 0; h < d; ++h) g = c[h], e[h] = g.get("extrude"), f[h] = g.get("altitudeMode"), k = k || m(e[h]), n = n || m(f[h]);
+        k && a.set("extrude", e);
+        n && a.set("altitudeMode", f)
+    }
+
+    function au(a, c) {
+        fp(bu, a, c)
+    }
+    var cu = T(yt, {
+            value: Yo(Y)
+        }),
+        bu = T(yt, {
+            Data: function(a, c) {
+                var d = a.getAttribute("name");
+                if (null !== d) {
+                    var e = V(void 0, cu, a, c);
+                    m(e) && (c[c.length - 1][d] = e)
+                }
+            },
+            SchemaData: function(a, c) {
+                fp(du, a, c)
+            }
+        }),
+        Qt = T(yt, {
+            extrude: S(Sr),
+            altitudeMode: S(Y)
+        }),
+        Mt = T(yt, {
+            coordinates: Yo(It)
+        }),
+        Yt = T(yt, {
+            innerBoundaryIs: function(a, c) {
+                var d = V(void 0, eu, a, c);
+                m(d) && c[c.length - 1].push(d)
+            },
+            outerBoundaryIs: function(a, c) {
+                var d = V(void 0, fu, a, c);
+                m(d) && (c[c.length - 1][0] = d)
+            }
+        }),
+        Ot = T(yt, {
+            when: function(a, c) {
+                var d = c[c.length - 1].Kh,
+                    e = Bo(a, !1);
+                if (e = /^\s*(\d{4})($|-(\d{2})($|-(\d{2})($|T(\d{2}):(\d{2}):(\d{2})(Z|(?:([+\-])(\d{2})(?::(\d{2}))?)))))\s*$/.exec(e)) {
+                    var f = Date.UTC(parseInt(e[1], 10), m(e[3]) ? parseInt(e[3], 10) - 1 : 0, m(e[5]) ? parseInt(e[5], 10) : 1, m(e[7]) ? parseInt(e[7], 10) : 0, m(e[8]) ? parseInt(e[8], 10) : 0, m(e[9]) ? parseInt(e[9], 10) : 0);
+                    if (m(e[10]) && "Z" != e[10]) {
+                        var g = "-" == e[11] ? -1 : 1,
+                            f = f + 60 * g * parseInt(e[12], 10);
+                        m(e[13]) && (f += 3600 * g * parseInt(e[13], 10))
+                    }
+                    d.push(f)
+                } else d.push(0)
+            }
+        }, T(xt, {
+            coord: function(a, c) {
+                var d = c[c.length - 1].j,
+                    e = Bo(a, !1);
+                (e = /^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(e)) ? d.push(parseFloat(e[1]), parseFloat(e[2]), parseFloat(e[3]), 0): d.push(0, 0, 0, 0)
+            }
+        })),
+        Rt = T(yt, {
+            coordinates: Yo(It)
+        }),
+        gu = T(yt, {
+            href: S(Jt)
+        }, T(xt, {
+            x: S(Vr),
+            y: S(Vr),
+            w: S(Vr),
+            h: S(Vr)
+        })),
+        hu = T(yt, {
+            Icon: S(function(a, c) {
+                var d = V({}, gu, a, c);
+                return m(d) ? d : null
+            }),
+            heading: S(Vr),
+            hotSpot: S(function(a) {
+                var c = a.getAttribute("xunits"),
+                    d = a.getAttribute("yunits");
+                return {
+                    x: parseFloat(a.getAttribute("x")),
+                    Af: Gt[c],
+                    y: parseFloat(a.getAttribute("y")),
+                    Bf: Gt[d]
+                }
+            }),
+            scale: S(Kt)
+        }),
+        eu = T(yt, {
+            LinearRing: Yo(Lt)
+        }),
+        iu = T(yt, {
+            color: S(Ht),
+            scale: S(Kt)
+        }),
+        ju = T(yt, {
+            color: S(Ht),
+            width: S(Vr)
+        }),
+        Ut = T(yt, {
+            LineString: Xo(Pt),
+            LinearRing: Xo(St),
+            MultiGeometry: Xo(Tt),
+            Point: Xo(Wt),
+            Polygon: Xo(Xt)
+        }),
+        ku = T(xt, {
+            Track: Xo(Nt)
+        }),
+        mu = T(yt, {
+            ExtendedData: au,
+            Link: function(a, c) {
+                fp(lu, a, c)
+            },
+            address: S(Y),
+            description: S(Y),
+            name: S(Y),
+            open: S(Sr),
+            phoneNumber: S(Y),
+            visibility: S(Sr)
+        }),
+        lu = T(yt, {
+            href: S(Jt)
+        }),
+        fu = T(yt, {
+            LinearRing: Yo(Lt)
+        }),
+        nu = T(yt, {
+            Style: S(Zt),
+            key: S(Y),
+            styleUrl: S(function(a) {
+                var c = Ca(Bo(a, !1));
+                return null != a.baseURI ? ot(a.baseURI, c).toString() : c
+            })
+        }),
+        pu = T(yt, {
+            ExtendedData: au,
+            MultiGeometry: S(Tt, "geometry"),
+            LineString: S(Pt, "geometry"),
+            LinearRing: S(St, "geometry"),
+            Point: S(Wt, "geometry"),
+            Polygon: S(Xt, "geometry"),
+            Style: S(Zt),
+            StyleMap: function(a, c) {
+                var d = V(void 0, ou, a, c);
+                if (m(d)) {
+                    var e = c[c.length - 1];
+                    ga(d) ? e.Style = d : ia(d) && (e.styleUrl = d)
+                }
+            },
+            address: S(Y),
+            description: S(Y),
+            name: S(Y),
+            open: S(Sr),
+            phoneNumber: S(Y),
+            styleUrl: S(Jt),
+            visibility: S(Sr)
+        }, T(xt, {
+            MultiTrack: S(function(a, c) {
+                var d = V([], ku, a, c);
+                if (m(d)) {
+                    var e = new Q(null);
+                    $m(e, d);
+                    return e
+                }
+            }, "geometry"),
+            Track: S(Nt, "geometry")
+        })),
+        qu = T(yt, {
+            color: S(Ht),
+            fill: S(Sr),
+            outline: S(Sr)
+        }),
+        du = T(yt, {
+            SimpleData: function(a, c) {
+                var d = a.getAttribute("name");
+                if (null !== d) {
+                    var e = Y(a);
+                    c[c.length - 1][d] = e
+                }
+            }
+        }),
+        $t = T(yt, {
+            IconStyle: function(a, c) {
+                var d = V({}, hu, a, c);
+                if (m(d)) {
+                    var e = c[c.length - 1],
+                        f = Ab(d, "Icon", {}),
+                        g;
+                    g = f.href;
+                    g = m(g) ? g : "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png";
+                    var h, k, n, p = d.hotSpot;
+                    m(p) ? (h = [p.x, p.y], k = p.Af, n = p.Bf) : "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png" === g ? (h = Bt, n = k = "pixels") : /^http:\/\/maps\.(?:google|gstatic)\.com\//.test(g) && (h = [.5, 0], n = k = "fraction");
+                    var q, p = f.x,
+                        r = f.y;
+                    m(p) && m(r) && (q = [p, r]);
+                    var t, p = f.w,
+                        f = f.h;
+                    m(p) && m(f) && (t = [p, f]);
+                    var u, f = d.heading;
+                    m(f) && (u = Yb(f));
+                    d = d.scale;
+                    "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png" == g && (t = Ct);
+                    h = new Fj({
+                        anchor: h,
+                        anchorOrigin: "bottom-left",
+                        anchorXUnits: k,
+                        anchorYUnits: n,
+                        crossOrigin: "anonymous",
+                        offset: q,
+                        offsetOrigin: "bottom-left",
+                        rotation: u,
+                        scale: d,
+                        size: t,
+                        src: g
+                    });
+                    e.imageStyle = h
+                }
+            },
+            LabelStyle: function(a, c) {
+                var d = V({}, iu, a, c);
+                m(d) && (c[c.length - 1].textStyle = new ut({
+                    fill: new zl({
+                        color: Ab(d, "color", zt)
+                    }),
+                    scale: d.scale
+                }))
+            },
+            LineStyle: function(a, c) {
+                var d = V({}, ju, a, c);
+                m(d) && (c[c.length - 1].strokeStyle = new vl({
+                    color: Ab(d, "color", zt),
+                    width: Ab(d, "width", 1)
+                }))
+            },
+            PolyStyle: function(a, c) {
+                var d = V({}, qu, a, c);
+                if (m(d)) {
+                    var e = c[c.length - 1];
+                    e.fillStyle = new zl({
+                        color: Ab(d, "color", zt)
+                    });
+                    var f = d.fill;
+                    m(f) && (e.fill = f);
+                    d = d.outline;
+                    m(d) && (e.outline = d)
+                }
+            }
+        }),
+        ou = T(yt, {
+            Pair: function(a, c) {
+                var d = V({}, nu, a, c);
+                if (m(d)) {
+                    var e = d.key;
+                    m(e) && "normal" == e && (e = d.styleUrl, m(e) && (c[c.length - 1] = e), d = d.Style, m(d) && (c[c.length - 1] = d))
+                }
+            }
+        });
+    l = vt.prototype;
+    l.eh = function(a, c) {
+        Fo(a);
+        var d = T(yt, {
+                Folder: Wo(this.eh, this),
+                Placemark: Xo(this.rf, this),
+                Style: ra(this.Jn, this),
+                StyleMap: ra(this.In, this)
+            }),
+            d = V([], d, a, c, this);
+        if (m(d)) return d
+    };
+    l.rf = function(a, c) {
+        var d = V({
+            geometry: null
+        }, pu, a, c);
+        if (m(d)) {
+            var e = new X,
+                f = a.getAttribute("id");
+            null === f || e.Qb(f);
+            f = c[0];
+            null != d.geometry && zr(d.geometry, !1, f);
+            e.t(d);
+            this.c && e.cf(this.d);
+            return e
+        }
+    };
+    l.Jn = function(a, c) {
+        var d = a.getAttribute("id");
+        if (null !== d) {
+            var e = Zt(a, c);
+            m(e) && (d = null != a.baseURI ? ot(a.baseURI, "#" + d).toString() : "#" + d, this.b[d] = e)
+        }
+    };
+    l.In = function(a, c) {
+        var d = a.getAttribute("id");
+        if (null !== d) {
+            var e = V(void 0, ou, a, c);
+            m(e) && (d = null != a.baseURI ? ot(a.baseURI, "#" + d).toString() : "#" + d, this.b[d] = e)
+        }
+    };
+    l.fh = function(a, c) {
+        if (!Ya(yt, a.namespaceURI)) return null;
+        var d = this.rf(a, [xr(this, a, c)]);
+        return m(d) ? d : null
+    };
+    l.Ob = function(a, c) {
+        if (!Ya(yt, a.namespaceURI)) return [];
+        var d;
+        d = Fo(a);
+        if ("Document" == d || "Folder" == d) return d = this.eh(a, [xr(this, a, c)]), m(d) ? d : [];
+        if ("Placemark" == d) return d = this.rf(a, [xr(this, a, c)]), m(d) ? [d] : [];
+        if ("kml" == d) {
+            d = [];
+            var e;
+            for (e = a.firstElementChild; null !== e; e = e.nextElementSibling) {
+                var f = this.Ob(e, c);
+                m(f) && db(d, f)
+            }
+            return d
+        }
+        return []
+    };
+    l.Dn = function(a) {
+        if (Io(a)) return ru(this, a);
+        if (Lo(a)) return su(this, a);
+        if (ia(a)) return a = Vo(a), ru(this, a)
+    };
+
+    function ru(a, c) {
+        var d;
+        for (d = c.firstChild; null !== d; d = d.nextSibling)
+            if (1 == d.nodeType) {
+                var e = su(a, d);
+                if (m(e)) return e
+            }
+    }
+
+    function su(a, c) {
+        var d;
+        for (d = c.firstElementChild; null !== d; d = d.nextElementSibling)
+            if (Ya(yt, d.namespaceURI) && "name" == d.localName) return Y(d);
+        for (d = c.firstElementChild; null !== d; d = d.nextElementSibling) {
+            var e = Fo(d);
+            if (Ya(yt, d.namespaceURI) && ("Document" == e || "Folder" == e || "Placemark" == e || "kml" == e) && (e = su(a, d), m(e))) return e
+        }
+    }
+    l.En = function(a) {
+        var c = [];
+        Io(a) ? db(c, tu(this, a)) : Lo(a) ? db(c, uu(this, a)) : ia(a) && (a = Vo(a), db(c, tu(this, a)));
+        return c
+    };
+
+    function tu(a, c) {
+        var d, e = [];
+        for (d = c.firstChild; null !== d; d = d.nextSibling) 1 == d.nodeType && db(e, uu(a, d));
+        return e
+    }
+
+    function uu(a, c) {
+        var d, e = [];
+        for (d = c.firstElementChild; null !== d; d = d.nextElementSibling)
+            if (Ya(yt, d.namespaceURI) && "NetworkLink" == d.localName) {
+                var f = V({}, mu, d, []);
+                e.push(f)
+            }
+        for (d = c.firstElementChild; null !== d; d = d.nextElementSibling) f = Fo(d), !Ya(yt, d.namespaceURI) || "Document" != f && "Folder" != f && "kml" != f || db(e, uu(a, d));
+        return e
+    }
+
+    function vu(a, c) {
+        var d = tf(c),
+            d = [255 * (4 == d.length ? d[3] : 1), d[2], d[1], d[0]],
+            e;
+        for (e = 0; 4 > e; ++e) {
+            var f = parseInt(d[e], 10).toString(16);
+            d[e] = 1 == f.length ? "0" + f : f
+        }
+        $r(a, d.join(""))
+    }
+
+    function wu(a, c, d) {
+        gp({
+            P: a
+        }, xu, yu, [c], d)
+    }
+
+    function zu(a, c, d) {
+        var e = {
+            P: a
+        };
+        null != c.$ && a.setAttribute("id", c.$);
+        a = c.D();
+        var f = c.c;
+        m(f) && (f = f.call(c, 0), null !== f && 0 < f.length && (a.Style = f[0], f = f[0].a, null === f || (a.name = f.c)));
+        f = Au[d[d.length - 1].P.namespaceURI];
+        a = ep(a, f);
+        gp(e, Bu, dp, a, d, f);
+        a = d[0];
+        c = c.Q();
+        null != c && (c = zr(c, !0, a));
+        gp(e, Bu, Cu, [c], d)
+    }
+
+    function Du(a, c, d) {
+        var e = c.j;
+        a = {
+            P: a
+        };
+        a.layout = c.a;
+        a.stride = c.s;
+        gp(a, Eu, Fu, [e], d)
+    }
+
+    function Gu(a, c, d) {
+        c = c.Ed();
+        var e = c.shift();
+        a = {
+            P: a
+        };
+        gp(a, Hu, Iu, c, d);
+        gp(a, Hu, Ju, [e], d)
+    }
+
+    function Ku(a, c) {
+        as(a, c * c)
+    }
+    var Lu = $o(yt, ["Document", "Placemark"]),
+        Ou = $o(yt, {
+            Document: U(function(a, c, d) {
+                gp({
+                    P: a
+                }, Mu, Nu, c, d)
+            }),
+            Placemark: U(zu)
+        }),
+        Mu = $o(yt, {
+            Placemark: U(zu)
+        }),
+        Pu = {
+            Point: "Point",
+            LineString: "LineString",
+            LinearRing: "LinearRing",
+            Polygon: "Polygon",
+            MultiPoint: "MultiGeometry",
+            MultiLineString: "MultiGeometry",
+            MultiPolygon: "MultiGeometry"
+        },
+        Qu = $o(yt, ["href"], $o(xt, ["x", "y", "w", "h"])),
+        Ru = $o(yt, {
+            href: U($r)
+        }, $o(xt, {
+            x: U(as),
+            y: U(as),
+            w: U(as),
+            h: U(as)
+        })),
+        Su = $o(yt, ["scale", "heading", "Icon", "hotSpot"]),
+        Uu = $o(yt, {
+            Icon: U(function(a, c, d) {
+                a = {
+                    P: a
+                };
+                var e = Qu[d[d.length - 1].P.namespaceURI],
+                    f = ep(c, e);
+                gp(a, Ru, dp, f, d, e);
+                e = Qu[xt[0]];
+                f = ep(c, e);
+                gp(a, Ru, Tu, f, d, e)
+            }),
+            heading: U(as),
+            hotSpot: U(function(a, c) {
+                a.setAttribute("x", c.x);
+                a.setAttribute("y", c.y);
+                a.setAttribute("xunits", c.Af);
+                a.setAttribute("yunits", c.Bf)
+            }),
+            scale: U(Ku)
+        }),
+        Vu = $o(yt, ["color", "scale"]),
+        Wu = $o(yt, {
+            color: U(vu),
+            scale: U(Ku)
+        }),
+        Xu = $o(yt, ["color", "width"]),
+        Yu = $o(yt, {
+            color: U(vu),
+            width: U(as)
+        }),
+        xu = $o(yt, {
+            LinearRing: U(Du)
+        }),
+        Zu = $o(yt, {
+            LineString: U(Du),
+            Point: U(Du),
+            Polygon: U(Gu)
+        }),
+        Au = $o(yt, "name open visibility address phoneNumber description styleUrl Style".split(" ")),
+        Bu = $o(yt, {
+            MultiGeometry: U(function(a, c, d) {
+                a = {
+                    P: a
+                };
+                var e = c.M(),
+                    f, g;
+                "MultiPoint" == e ? (f = c.ce(), g = $u) : "MultiLineString" == e ? (f = c.ad(), g = av) : "MultiPolygon" == e && (f = c.Id(), g = bv);
+                gp(a, Zu, g, f, d)
+            }),
+            LineString: U(Du),
+            LinearRing: U(Du),
+            Point: U(Du),
+            Polygon: U(Gu),
+            Style: U(function(a, c, d) {
+                a = {
+                    P: a
+                };
+                var e = {},
+                    f = c.e,
+                    g = c.c,
+                    h = c.f;
+                c = c.a;
+                null === h || (e.IconStyle = h);
+                null === c || (e.LabelStyle = c);
+                null === g || (e.LineStyle = g);
+                null === f || (e.PolyStyle = f);
+                c = cv[d[d.length - 1].P.namespaceURI];
+                e = ep(e, c);
+                gp(a, dv, dp, e, d, c)
+            }),
+            address: U($r),
+            description: U($r),
+            name: U($r),
+            open: U(Zr),
+            phoneNumber: U($r),
+            styleUrl: U($r),
+            visibility: U(Zr)
+        }),
+        Eu = $o(yt, {
+            coordinates: U(function(a, c, d) {
+                d = d[d.length - 1];
+                var e = d.layout;
+                d = d.stride;
+                var f;
+                "XY" == e || "XYM" == e ? f = 2 : ("XYZ" == e || "XYZM" == e) && (f = 3);
+                var g, h = c.length,
+                    k = "";
+                if (0 < h) {
+                    k += c[0];
+                    for (e = 1; e < f; ++e) k += "," + c[e];
+                    for (g = d; g < h; g += d)
+                        for (k += " " + c[g], e = 1; e < f; ++e) k += "," + c[g + e]
+                }
+                $r(a, k)
+            })
+        }),
+        Hu = $o(yt, {
+            outerBoundaryIs: U(wu),
+            innerBoundaryIs: U(wu)
+        }),
+        ev = $o(yt, {
+            color: U(vu)
+        }),
+        cv = $o(yt, ["IconStyle", "LabelStyle", "LineStyle", "PolyStyle"]),
+        dv = $o(yt, {
+            IconStyle: U(function(a, c, d) {
+                a = {
+                    P: a
+                };
+                var e = {},
+                    f = c.Xa(),
+                    g = c.Dd(),
+                    h = {
+                        href: c.b.f
+                    };
+                if (null !== f) {
+                    h.w = f[0];
+                    h.h = f[1];
+                    var k = c.mb(),
+                        n = c.rb();
+                    null !== n && null !== g && 0 !== n[0] && n[1] !== f[1] && (h.x = n[0], h.y = g[1] - (n[1] + f[1]));
+                    null === k || 0 === k[0] || k[1] === f[1] || (e.hotSpot = {
+                        x: k[0],
+                        Af: "pixels",
+                        y: f[1] - k[1],
+                        Bf: "pixels"
+                    })
+                }
+                e.Icon = h;
+                f = c.l;
+                1 !== f && (e.scale = f);
+                c = c.q;
+                0 !== c && (e.heading = c);
+                c = Su[d[d.length - 1].P.namespaceURI];
+                e = ep(e, c);
+                gp(a, Uu, dp, e, d, c)
+            }),
+            LabelStyle: U(function(a, c, d) {
+                a = {
+                    P: a
+                };
+                var e = {},
+                    f = c.b;
+                null === f || (e.color = f.b);
+                c = c.a;
+                m(c) && 1 !== c && (e.scale = c);
+                c = Vu[d[d.length - 1].P.namespaceURI];
+                e = ep(e, c);
+                gp(a, Wu, dp, e, d, c)
+            }),
+            LineStyle: U(function(a, c, d) {
+                a = {
+                    P: a
+                };
+                var e = Xu[d[d.length - 1].P.namespaceURI];
+                c = ep({
+                    color: c.b,
+                    width: c.a
+                }, e);
+                gp(a, Yu, dp, c, d, e)
+            }),
+            PolyStyle: U(function(a, c, d) {
+                gp({
+                    P: a
+                }, ev, fv, [c.b], d)
+            })
+        });
+
+    function Tu(a, c, d) {
+        return Ao(xt[0], "gx:" + d)
+    }
+
+    function Nu(a, c) {
+        return Ao(c[c.length - 1].P.namespaceURI, "Placemark")
+    }
+
+    function Cu(a, c) {
+        if (null != a) return Ao(c[c.length - 1].P.namespaceURI, Pu[a.M()])
+    }
+    var fv = bp("color"),
+        Fu = bp("coordinates"),
+        Iu = bp("innerBoundaryIs"),
+        $u = bp("Point"),
+        av = bp("LineString"),
+        yu = bp("LinearRing"),
+        bv = bp("Polygon"),
+        Ju = bp("outerBoundaryIs");
+    vt.prototype.a = function(a, c) {
+        c = yr(this, c);
+        var d = Ao(yt[4], "kml");
+        Uo(d, "http://www.w3.org/2000/xmlns/", "xmlns:gx", xt[0]);
+        Uo(d, "http://www.w3.org/2000/xmlns/", "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
+        Uo(d, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", "http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");
+        var e = {
+                P: d
+            },
+            f = {};
+        1 < a.length ? f.Document = a : 1 == a.length && (f.Placemark = a[0]);
+        var g = Lu[d.namespaceURI],
+            f = ep(f, g);
+        gp(e, Ou, dp, f, [c], g);
+        return d
+    };
+
+    function gv() {
+        this.defaultDataProjection = null;
+        this.defaultDataProjection = re("EPSG:4326")
+    }
+    w(gv, Or);
+
+    function hv(a, c) {
+        c[c.length - 1].od[a.getAttribute("k")] = a.getAttribute("v")
+    }
+    var iv = [null],
+        jv = T(iv, {
+            nd: function(a, c) {
+                c[c.length - 1].Ac.push(a.getAttribute("ref"))
+            },
+            tag: hv
+        }),
+        lv = T(iv, {
+            node: function(a, c) {
+                var d = c[0],
+                    e = c[c.length - 1],
+                    f = a.getAttribute("id"),
+                    g = [parseFloat(a.getAttribute("lon")), parseFloat(a.getAttribute("lat"))];
+                e.ng[f] = g;
+                var h = V({
+                    od: {}
+                }, kv, a, c);
+                xb(h.od) || (g = new E(g), zr(g, !1, d), d = new X(g), d.Qb(f), d.t(h.od), e.features.push(d))
+            },
+            way: function(a, c) {
+                for (var d = c[0], e = a.getAttribute("id"), f = V({
+                        Ac: [],
+                        od: {}
+                    }, jv, a, c), g = c[c.length - 1], h = [], k = 0, n = f.Ac.length; k < n; k++) db(h, g.ng[f.Ac[k]]);
+                f.Ac[0] == f.Ac[f.Ac.length - 1] ? (k = new F(null), dl(k, "XY", h, [h.length])) : (k = new O(null), Ym(k, "XY", h));
+                zr(k, !1, d);
+                d = new X(k);
+                d.Qb(e);
+                d.t(f.od);
+                g.features.push(d)
+            }
+        }),
+        kv = T(iv, {
+            tag: hv
+        });
+    gv.prototype.Ob = function(a, c) {
+        var d = xr(this, a, c);
+        return "osm" == a.localName && (d = V({
+            ng: {},
+            features: []
+        }, lv, a, [d]), m(d.features)) ? d.features : []
+    };
+
+    function mv(a) {
+        return a.getAttributeNS("http://www.w3.org/1999/xlink", "href")
+    };
+
+    function nv() {}
+    nv.prototype.c = function(a) {
+        return Io(a) ? this.a(a) : Lo(a) ? this.b(a) : ia(a) ? (a = Vo(a), this.a(a)) : null
+    };
+
+    function ov() {}
+    w(ov, nv);
+    ov.prototype.a = function(a) {
+        for (a = a.firstChild; null !== a; a = a.nextSibling)
+            if (1 == a.nodeType) return this.b(a);
+        return null
+    };
+    ov.prototype.b = function(a) {
+        a = V({}, pv, a, []);
+        return m(a) ? a : null
+    };
+    var qv = [null, "http://www.opengis.net/ows/1.1"],
+        pv = T(qv, {
+            ServiceIdentification: S(function(a, c) {
+                return V({}, rv, a, c)
+            }),
+            ServiceProvider: S(function(a, c) {
+                return V({}, sv, a, c)
+            }),
+            OperationsMetadata: S(function(a, c) {
+                return V({}, tv, a, c)
+            })
+        }),
+        uv = T(qv, {
+            DeliveryPoint: S(Y),
+            City: S(Y),
+            AdministrativeArea: S(Y),
+            PostalCode: S(Y),
+            Country: S(Y),
+            ElectronicMailAddress: S(Y)
+        }),
+        vv = T(qv, {
+            Value: Zo(function(a) {
+                return Y(a)
+            })
+        }),
+        wv = T(qv, {
+            AllowedValues: S(function(a, c) {
+                return V({}, vv, a, c)
+            })
+        }),
+        yv = T(qv, {
+            Phone: S(function(a, c) {
+                return V({}, xv, a, c)
+            }),
+            Address: S(function(a, c) {
+                return V({}, uv, a, c)
+            })
+        }),
+        Av = T(qv, {
+            HTTP: S(function(a, c) {
+                return V({}, zv, a, c)
+            })
+        }),
+        zv = T(qv, {
+            Get: Zo(function(a, c) {
+                var d = mv(a);
+                return m(d) ? V({
+                    href: d
+                }, Bv, a, c) : void 0
+            }),
+            Post: void 0
+        }),
+        Cv = T(qv, {
+            DCP: S(function(a, c) {
+                return V({}, Av, a, c)
+            })
+        }),
+        tv = T(qv, {
+            Operation: function(a, c) {
+                var d = a.getAttribute("name"),
+                    e = V({}, Cv, a, c);
+                m(e) && (c[c.length - 1][d] = e)
+            }
+        }),
+        xv = T(qv, {
+            Voice: S(Y),
+            Facsimile: S(Y)
+        }),
+        Bv = T(qv, {
+            Constraint: Zo(function(a, c) {
+                var d = a.getAttribute("name");
+                return m(d) ? V({
+                    name: d
+                }, wv, a, c) : void 0
+            })
+        }),
+        Dv = T(qv, {
+            IndividualName: S(Y),
+            PositionName: S(Y),
+            ContactInfo: S(function(a, c) {
+                return V({}, yv, a, c)
+            })
+        }),
+        rv = T(qv, {
+            Title: S(Y),
+            ServiceTypeVersion: S(Y),
+            ServiceType: S(Y)
+        }),
+        sv = T(qv, {
+            ProviderName: S(Y),
+            ProviderSite: S(mv),
+            ServiceContact: S(function(a, c) {
+                return V({}, Dv, a, c)
+            })
+        });
+
+    function Ev(a, c, d, e) {
+        var f;
+        m(e) ? f = m(void 0) ? void 0 : 0 : (e = [], f = 0);
+        var g, h;
+        for (g = 0; g < c;)
+            for (h = a[g++], e[f++] = a[g++], e[f++] = h, h = 2; h < d; ++h) e[f++] = a[g++];
+        e.length = f
+    };
+
+    function Fv(a) {
+        a = m(a) ? a : {};
+        this.defaultDataProjection = null;
+        this.defaultDataProjection = re("EPSG:4326");
+        this.b = m(a.factor) ? a.factor : 1E5;
+        this.a = m(a.geometryLayout) ? a.geometryLayout : "XY"
+    }
+    w(Fv, Ws);
+
+    function Gv(a, c, d) {
+        d = m(d) ? d : 1E5;
+        var e, f = Array(c);
+        for (e = 0; e < c; ++e) f[e] = 0;
+        var g, h;
+        g = 0;
+        for (h = a.length; g < h;)
+            for (e = 0; e < c; ++e, ++g) {
+                var k = a[g],
+                    n = k - f[e];
+                f[e] = k;
+                a[g] = n
+            }
+        return Hv(a, d)
+    }
+
+    function Iv(a, c, d) {
+        var e = m(d) ? d : 1E5,
+            f = Array(c);
+        for (d = 0; d < c; ++d) f[d] = 0;
+        a = Jv(a, e);
+        var g, e = 0;
+        for (g = a.length; e < g;)
+            for (d = 0; d < c; ++d, ++e) f[d] += a[e], a[e] = f[d];
+        return a
+    }
+
+    function Hv(a, c) {
+        var d = m(c) ? c : 1E5,
+            e, f;
+        e = 0;
+        for (f = a.length; e < f; ++e) a[e] = Math.round(a[e] * d);
+        d = 0;
+        for (e = a.length; d < e; ++d) f = a[d], a[d] = 0 > f ? ~(f << 1) : f << 1;
+        d = "";
+        e = 0;
+        for (f = a.length; e < f; ++e) {
+            for (var g = a[e], h = void 0, k = ""; 32 <= g;) h = (32 | g & 31) + 63, k += String.fromCharCode(h), g >>= 5;
+            h = g + 63;
+            k += String.fromCharCode(h);
+            d += k
+        }
+        return d
+    }
+
+    function Jv(a, c) {
+        var d = m(c) ? c : 1E5,
+            e = [],
+            f = 0,
+            g = 0,
+            h, k;
+        h = 0;
+        for (k = a.length; h < k; ++h) {
+            var n = a.charCodeAt(h) - 63,
+                f = f | (n & 31) << g;
+            32 > n ? (e.push(f), g = f = 0) : g += 5
+        }
+        f = 0;
+        for (g = e.length; f < g; ++f) h = e[f], e[f] = h & 1 ? ~(h >> 1) : h >> 1;
+        f = 0;
+        for (g = e.length; f < g; ++f) e[f] /= d;
+        return e
+    }
+    l = Fv.prototype;
+    l.hd = function(a, c) {
+        var d = this.kd(a, c);
+        return new X(d)
+    };
+    l.pf = function(a, c) {
+        return [this.hd(a, c)]
+    };
+    l.kd = function(a, c) {
+        var d = xk(this.a),
+            e = Iv(a, d, this.b);
+        Ev(e, e.length, d, e);
+        d = Mk(e, 0, e.length, d);
+        return zr(new O(d, this.a), !1, yr(this, c))
+    };
+    l.ye = function(a, c) {
+        var d = a.Q();
+        return null != d ? this.rd(d, c) : ""
+    };
+    l.Mh = function(a, c) {
+        return this.ye(a[0], c)
+    };
+    l.rd = function(a, c) {
+        a = zr(a, !0, yr(this, c));
+        var d = a.j,
+            e = a.s;
+        Ev(d, d.length, e, d);
+        return Gv(d, e, this.b)
+    };
+
+    function Kv(a) {
+        a = m(a) ? a : {};
+        this.defaultDataProjection = null;
+        this.defaultDataProjection = re(null != a.defaultDataProjection ? a.defaultDataProjection : "EPSG:4326")
+    }
+    w(Kv, Ar);
+
+    function Lv(a, c) {
+        var d = [],
+            e, f, g, h;
+        g = 0;
+        for (h = a.length; g < h; ++g) e = a[g], 0 < g && d.pop(), 0 <= e ? f = c[e] : f = c[~e].slice().reverse(), d.push.apply(d, f);
+        e = 0;
+        for (f = d.length; e < f; ++e) d[e] = d[e].slice();
+        return d
+    }
+
+    function Mv(a, c, d, e, f) {
+        a = a.geometries;
+        var g = [],
+            h, k;
+        h = 0;
+        for (k = a.length; h < k; ++h) g[h] = Nv(a[h], c, d, e, f);
+        return g
+    }
+
+    function Nv(a, c, d, e, f) {
+        var g = a.type,
+            h = Ov[g];
+        c = "Point" === g || "MultiPoint" === g ? h(a, d, e) : h(a, c);
+        d = new X;
+        d.La(zr(c, !1, f));
+        m(a.id) && d.Qb(a.id);
+        m(a.properties) && d.t(a.properties);
+        return d
+    }
+    Kv.prototype.of = function(a, c) {
+        if ("Topology" == a.type) {
+            var d, e = null,
+                f = null;
+            m(a.transform) && (d = a.transform, e = d.scale, f = d.translate);
+            var g = a.arcs;
+            if (m(d)) {
+                d = e;
+                var h = f,
+                    k, n;
+                k = 0;
+                for (n = g.length; k < n; ++k)
+                    for (var p = g[k], q = d, r = h, t = 0, u = 0, A = void 0, z = void 0, D = void 0, z = 0, D = p.length; z < D; ++z) A = p[z], t += A[0], u += A[1], A[0] = t, A[1] = u, Pv(A, q, r)
+            }
+            d = [];
+            h = sb(a.objects);
+            k = 0;
+            for (n = h.length; k < n; ++k) "GeometryCollection" === h[k].type ? (p = h[k], d.push.apply(d, Mv(p, g, e, f, c))) : (p = h[k], d.push(Nv(p, g, e, f, c)));
+            return d
+        }
+        return []
+    };
+
+    function Pv(a, c, d) {
+        a[0] = a[0] * c[0] + d[0];
+        a[1] = a[1] * c[1] + d[1]
+    }
+    Kv.prototype.za = function() {
+        return this.defaultDataProjection
+    };
+    var Ov = {
+        Point: function(a, c, d) {
+            a = a.coordinates;
+            null === c || null === d || Pv(a, c, d);
+            return new E(a)
+        },
+        LineString: function(a, c) {
+            var d = Lv(a.arcs, c);
+            return new O(d)
+        },
+        Polygon: function(a, c) {
+            var d = [],
+                e, f;
+            e = 0;
+            for (f = a.arcs.length; e < f; ++e) d[e] = Lv(a.arcs[e], c);
+            return new F(d)
+        },
+        MultiPoint: function(a, c, d) {
+            a = a.coordinates;
+            var e, f;
+            if (null !== c && null !== d)
+                for (e = 0, f = a.length; e < f; ++e) Pv(a[e], c, d);
+            return new an(a)
+        },
+        MultiLineString: function(a, c) {
+            var d = [],
+                e, f;
+            e = 0;
+            for (f = a.arcs.length; e < f; ++e) d[e] = Lv(a.arcs[e], c);
+            return new Q(d)
+        },
+        MultiPolygon: function(a, c) {
+            var d = [],
+                e, f, g, h, k, n;
+            k = 0;
+            for (n = a.arcs.length; k < n; ++k) {
+                e = a.arcs[k];
+                f = [];
+                g = 0;
+                for (h = e.length; g < h; ++g) f[g] = Lv(e[g], c);
+                d[k] = f
+            }
+            return new R(d)
+        }
+    };
+
+    function Qv(a) {
+        a = m(a) ? a : {};
+        this.e = a.featureType;
+        this.c = a.featureNS;
+        this.b = m(a.gmlFormat) ? a.gmlFormat : new cs;
+        this.d = m(a.schemaLocation) ? a.schemaLocation : "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd";
+        this.defaultDataProjection = null
+    }
+    w(Qv, Or);
+    Qv.prototype.Ob = function(a, c) {
+        var d = {
+            featureType: this.e,
+            featureNS: this.c
+        };
+        Fb(d, xr(this, a, m(c) ? c : {}));
+        d = [d];
+        this.b.b["http://www.opengis.net/gml"].featureMember = Xo(Rr.prototype.jd);
+        d = V([], this.b.b, a, d, this.b);
+        m(d) || (d = []);
+        return d
+    };
+    Qv.prototype.g = function(a) {
+        if (Io(a)) return Rv(a);
+        if (Lo(a)) return V({}, Sv, a, []);
+        if (ia(a)) return a = Vo(a), Rv(a)
+    };
+    Qv.prototype.f = function(a) {
+        if (Io(a)) return Tv(this, a);
+        if (Lo(a)) return Uv(this, a);
+        if (ia(a)) return a = Vo(a), Tv(this, a)
+    };
+
+    function Tv(a, c) {
+        for (var d = c.firstChild; null !== d; d = d.nextSibling)
+            if (1 == d.nodeType) return Uv(a, d)
+    }
+    var Vv = {
+        "http://www.opengis.net/gml": {
+            boundedBy: S(Rr.prototype.qe, "bounds")
+        }
+    };
+
+    function Uv(a, c) {
+        var d = {},
+            e = Yr(c.getAttribute("numberOfFeatures"));
+        d.numberOfFeatures = e;
+        return V(d, Vv, c, [], a.b)
+    }
+    var Wv = {
+            "http://www.opengis.net/wfs": {
+                totalInserted: S(Xr),
+                totalUpdated: S(Xr),
+                totalDeleted: S(Xr)
+            }
+        },
+        Xv = {
+            "http://www.opengis.net/ogc": {
+                FeatureId: Xo(function(a) {
+                    return a.getAttribute("fid")
+                })
+            }
+        },
+        Yv = {
+            "http://www.opengis.net/wfs": {
+                Feature: function(a, c) {
+                    fp(Xv, a, c)
+                }
+            }
+        },
+        Sv = {
+            "http://www.opengis.net/wfs": {
+                TransactionSummary: S(function(a, c) {
+                    return V({}, Wv, a, c)
+                }, "transactionSummary"),
+                InsertResults: S(function(a, c) {
+                    return V([], Yv, a, c)
+                }, "insertIds")
+            }
+        };
+
+    function Rv(a) {
+        for (a = a.firstChild; null !== a; a = a.nextSibling)
+            if (1 == a.nodeType) return V({}, Sv, a, [])
+    }
+    var Zv = {
+        "http://www.opengis.net/wfs": {
+            PropertyName: U($r)
+        }
+    };
+
+    function $v(a, c) {
+        var d = Ao("http://www.opengis.net/ogc", "Filter"),
+            e = Ao("http://www.opengis.net/ogc", "FeatureId");
+        d.appendChild(e);
+        e.setAttribute("fid", c);
+        a.appendChild(d)
+    }
+    var aw = {
+            "http://www.opengis.net/wfs": {
+                Insert: U(function(a, c, d) {
+                    var e = d[d.length - 1],
+                        e = Ao(e.featureNS, e.featureType);
+                    a.appendChild(e);
+                    cs.prototype.Lh(e, c, d)
+                }),
+                Update: U(function(a, c, d) {
+                    var e = d[d.length - 1],
+                        f = e.featureType,
+                        g = e.featurePrefix,
+                        g = m(g) ? g : "feature",
+                        h = e.featureNS;
+                    a.setAttribute("typeName", g + ":" + f);
+                    Uo(a, "http://www.w3.org/2000/xmlns/", "xmlns:" + g, h);
+                    f = c.$;
+                    if (m(f)) {
+                        for (var g = c.C(), h = [], k = 0, n = g.length; k < n; k++) {
+                            var p = c.get(g[k]);
+                            m(p) && h.push({
+                                name: g[k],
+                                value: p
+                            })
+                        }
+                        gp({
+                            P: a,
+                            srsName: e.srsName
+                        }, aw, bp("Property"), h, d);
+                        $v(a, f)
+                    }
+                }),
+                Delete: U(function(a, c, d) {
+                    var e = d[d.length - 1];
+                    d = e.featureType;
+                    var f = e.featurePrefix,
+                        f = m(f) ? f : "feature",
+                        e = e.featureNS;
+                    a.setAttribute("typeName", f + ":" + d);
+                    Uo(a, "http://www.w3.org/2000/xmlns/", "xmlns:" + f, e);
+                    c = c.$;
+                    m(c) && $v(a, c)
+                }),
+                Property: U(function(a, c, d) {
+                    var e = Ao("http://www.opengis.net/wfs", "Name");
+                    a.appendChild(e);
+                    $r(e, c.name);
+                    null != c.value && (e = Ao("http://www.opengis.net/wfs", "Value"), a.appendChild(e), c.value instanceof uk ? cs.prototype.Ae(e, c.value, d) : $r(e, c.value))
+                }),
+                Native: U(function(a, c) {
+                    m(c.vo) && a.setAttribute("vendorId", c.vo);
+                    m(c.Tn) && a.setAttribute("safeToIgnore", c.Tn);
+                    m(c.value) && $r(a, c.value)
+                })
+            }
+        },
+        bw = {
+            "http://www.opengis.net/wfs": {
+                Query: U(function(a, c, d) {
+                    var e = d[d.length - 1],
+                        f = e.featurePrefix,
+                        g = e.featureNS,
+                        h = e.propertyNames,
+                        k = e.srsName;
+                    a.setAttribute("typeName", (m(f) ? f + ":" : "") + c);
+                    m(k) && a.setAttribute("srsName", k);
+                    m(g) && Uo(a, "http://www.w3.org/2000/xmlns/", "xmlns:" + f, g);
+                    c = Db(e);
+                    c.P = a;
+                    gp(c, Zv, bp("PropertyName"), h, d);
+                    e = e.bbox;
+                    m(e) && (h = Ao("http://www.opengis.net/ogc", "Filter"), c = d[d.length - 1].geometryName, f = Ao("http://www.opengis.net/ogc", "BBOX"), h.appendChild(f), g = Ao("http://www.opengis.net/ogc", "PropertyName"), $r(g, c), f.appendChild(g), cs.prototype.Ae(f, e, d), a.appendChild(h))
+                })
+            }
+        };
+    Qv.prototype.i = function(a) {
+        var c = Ao("http://www.opengis.net/wfs", "GetFeature");
+        c.setAttribute("service", "WFS");
+        c.setAttribute("version", "1.1.0");
+        m(a) && (m(a.handle) && c.setAttribute("handle", a.handle), m(a.outputFormat) && c.setAttribute("outputFormat", a.outputFormat), m(a.maxFeatures) && c.setAttribute("maxFeatures", a.maxFeatures), m(a.resultType) && c.setAttribute("resultType", a.resultType), m(a.oo) && c.setAttribute("startIndex", a.oo), m(a.count) && c.setAttribute("count", a.count));
+        Uo(c, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.d);
+        var d = a.featureTypes;
+        a = [{
+            P: c,
+            srsName: a.srsName,
+            featureNS: m(a.featureNS) ? a.featureNS : this.c,
+            featurePrefix: a.featurePrefix,
+            geometryName: a.geometryName,
+            bbox: a.bbox,
+            bh: m(a.bh) ? a.bh : []
+        }];
+        var e = Db(a[a.length - 1]);
+        e.P = c;
+        gp(e, bw, bp("Query"), d, a);
+        return c
+    };
+    Qv.prototype.o = function(a, c, d, e) {
+        var f = [],
+            g = Ao("http://www.opengis.net/wfs", "Transaction");
+        g.setAttribute("service", "WFS");
+        g.setAttribute("version", "1.1.0");
+        var h, k;
+        m(e) && (h = m(e.gmlOptions) ? e.gmlOptions : {}, m(e.handle) && g.setAttribute("handle", e.handle));
+        Uo(g, "http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", this.d);
+        null != a && (k = {
+            P: g,
+            featureNS: e.featureNS,
+            featureType: e.featureType,
+            featurePrefix: e.featurePrefix
+        }, Fb(k, h), gp(k, aw, bp("Insert"), a, f));
+        null != c && (k = {
+            P: g,
+            featureNS: e.featureNS,
+            featureType: e.featureType,
+            featurePrefix: e.featurePrefix
+        }, Fb(k, h), gp(k, aw, bp("Update"), c, f));
+        null != d && gp({
+            P: g,
+            featureNS: e.featureNS,
+            featureType: e.featureType,
+            featurePrefix: e.featurePrefix
+        }, aw, bp("Delete"), d, f);
+        m(e.nativeElements) && gp({
+            P: g,
+            featureNS: e.featureNS,
+            featureType: e.featureType,
+            featurePrefix: e.featurePrefix
+        }, aw, bp("Native"), e.nativeElements, f);
+        return g
+    };
+    Qv.prototype.sf = function(a) {
+        for (a = a.firstChild; null !== a; a = a.nextSibling)
+            if (1 == a.nodeType) return this.te(a);
+        return null
+    };
+    Qv.prototype.te = function(a) {
+        if (null != a.firstElementChild && null != a.firstElementChild.firstElementChild)
+            for (a = a.firstElementChild.firstElementChild, a = a.firstElementChild; null !== a; a = a.nextElementSibling)
+                if (0 !== a.childNodes.length && (1 !== a.childNodes.length || 3 !== a.firstChild.nodeType)) {
+                    var c = [{}];
+                    this.b.qe(a, c);
+                    return re(c.pop().srsName)
+                }
+        return null
+    };
+
+    function cw(a) {
+        a = m(a) ? a : {};
+        this.defaultDataProjection = null;
+        this.b = m(a.splitCollection) ? a.splitCollection : !1
+    }
+    w(cw, Ws);
+
+    function dw(a) {
+        a = a.K();
+        return 0 == a.length ? "" : a[0] + " " + a[1]
+    }
+
+    function ew(a) {
+        a = a.K();
+        for (var c = [], d = 0, e = a.length; d < e; ++d) c.push(a[d][0] + " " + a[d][1]);
+        return c.join(",")
+    }
+
+    function fw(a) {
+        var c = [];
+        a = a.Ed();
+        for (var d = 0, e = a.length; d < e; ++d) c.push("(" + ew(a[d]) + ")");
+        return c.join(",")
+    }
+
+    function gw(a) {
+        var c = a.M();
+        a = (0, hw[c])(a);
+        c = c.toUpperCase();
+        return 0 === a.length ? c + " EMPTY" : c + "(" + a + ")"
+    }
+    var hw = {
+        Point: dw,
+        LineString: ew,
+        Polygon: fw,
+        MultiPoint: function(a) {
+            var c = [];
+            a = a.ce();
+            for (var d = 0, e = a.length; d < e; ++d) c.push("(" + dw(a[d]) + ")");
+            return c.join(",")
+        },
+        MultiLineString: function(a) {
+            var c = [];
+            a = a.ad();
+            for (var d = 0, e = a.length; d < e; ++d) c.push("(" + ew(a[d]) + ")");
+            return c.join(",")
+        },
+        MultiPolygon: function(a) {
+            var c = [];
+            a = a.Id();
+            for (var d = 0, e = a.length; d < e; ++d) c.push("(" + fw(a[d]) + ")");
+            return c.join(",")
+        },
+        GeometryCollection: function(a) {
+            var c = [];
+            a = a.Vf();
+            for (var d = 0, e = a.length; d < e; ++d) c.push(gw(a[d]));
+            return c.join(",")
+        }
+    };
+    l = cw.prototype;
+    l.hd = function(a, c) {
+        var d = this.kd(a, c);
+        if (m(d)) {
+            var e = new X;
+            e.La(d);
+            return e
+        }
+        return null
+    };
+    l.pf = function(a, c) {
+        var d = [],
+            e = this.kd(a, c);
+        this.b && "GeometryCollection" == e.M() ? d = e.d : d = [e];
+        for (var f = [], g = 0, h = d.length; g < h; ++g) e = new X, e.La(d[g]), f.push(e);
+        return f
+    };
+    l.kd = function(a, c) {
+        var d;
+        d = new iw(new jw(a));
+        d.b = kw(d.a);
+        d = lw(d);
+        return m(d) ? zr(d, !1, c) : null
+    };
+    l.ye = function(a, c) {
+        var d = a.Q();
+        return m(d) ? this.rd(d, c) : ""
+    };
+    l.Mh = function(a, c) {
+        if (1 == a.length) return this.ye(a[0], c);
+        for (var d = [], e = 0, f = a.length; e < f; ++e) d.push(a[e].Q());
+        d = new Rm(d);
+        return this.rd(d, c)
+    };
+    l.rd = function(a, c) {
+        return gw(zr(a, !0, c))
+    };
+
+    function jw(a) {
+        this.a = a;
+        this.b = -1
+    }
+
+    function mw(a, c) {
+        var d = m(c) ? c : !1;
+        return "0" <= a && "9" >= a || "." == a && !d
+    }
+
+    function kw(a) {
+        var c = a.a.charAt(++a.b),
+            d = {
+                position: a.b,
+                value: c
+            };
+        if ("(" == c) d.type = 2;
+        else if ("," == c) d.type = 5;
+        else if (")" == c) d.type = 3;
+        else if (mw(c) || "-" == c) {
+            d.type = 4;
+            var e, c = a.b,
+                f = !1;
+            do "." == e && (f = !0), e = a.a.charAt(++a.b); while (mw(e, f));
+            a = parseFloat(a.a.substring(c, a.b--));
+            d.value = a
+        } else if ("a" <= c && "z" >= c || "A" <= c && "Z" >= c) {
+            d.type = 1;
+            c = a.b;
+            do e = a.a.charAt(++a.b); while ("a" <= e && "z" >= e || "A" <= e && "Z" >= e);
+            a = a.a.substring(c, a.b--).toUpperCase();
+            d.value = a
+        } else {
+            if (" " == c || "\t" == c || "\r" == c || "\n" == c) return kw(a);
+            if ("" === c) d.type = 6;
+            else throw Error("Unexpected character: " + c);
+        }
+        return d
+    }
+
+    function iw(a) {
+        this.a = a
+    }
+    l = iw.prototype;
+    l.match = function(a) {
+        if (a = this.b.type == a) this.b = kw(this.a);
+        return a
+    };
+
+    function lw(a) {
+        var c = a.b;
+        if (a.match(1)) {
+            var d = c.value;
+            if ("GEOMETRYCOLLECTION" == d) {
+                a: {
+                    if (a.match(2)) {
+                        c = [];
+                        do c.push(lw(a)); while (a.match(5));
+                        if (a.match(3)) {
+                            a = c;
+                            break a
+                        }
+                    } else if (nw(a)) {
+                        a = [];
+                        break a
+                    }
+                    throw Error(ow(a));
+                }
+                return new Rm(a)
+            }
+            var e = pw[d],
+                c = qw[d];
+            if (!m(e) || !m(c)) throw Error("Invalid geometry type: " + d);
+            a = e.call(a);
+            return new c(a)
+        }
+        throw Error(ow(a));
+    }
+    l.lf = function() {
+        if (this.match(2)) {
+            var a = rw(this);
+            if (this.match(3)) return a
+        } else if (nw(this)) return null;
+        throw Error(ow(this));
+    };
+    l.kf = function() {
+        if (this.match(2)) {
+            var a = sw(this);
+            if (this.match(3)) return a
+        } else if (nw(this)) return [];
+        throw Error(ow(this));
+    };
+    l.mf = function() {
+        if (this.match(2)) {
+            var a = tw(this);
+            if (this.match(3)) return a
+        } else if (nw(this)) return [];
+        throw Error(ow(this));
+    };
+    l.kn = function() {
+        if (this.match(2)) {
+            var a;
+            if (2 == this.b.type)
+                for (a = [this.lf()]; this.match(5);) a.push(this.lf());
+            else a = sw(this);
+            if (this.match(3)) return a
+        } else if (nw(this)) return [];
+        throw Error(ow(this));
+    };
+    l.jn = function() {
+        if (this.match(2)) {
+            var a = tw(this);
+            if (this.match(3)) return a
+        } else if (nw(this)) return [];
+        throw Error(ow(this));
+    };
+    l.ln = function() {
+        if (this.match(2)) {
+            for (var a = [this.mf()]; this.match(5);) a.push(this.mf());
+            if (this.match(3)) return a
+        } else if (nw(this)) return [];
+        throw Error(ow(this));
+    };
+
+    function rw(a) {
+        for (var c = [], d = 0; 2 > d; ++d) {
+            var e = a.b;
+            if (a.match(4)) c.push(e.value);
+            else break
+        }
+        if (2 == c.length) return c;
+        throw Error(ow(a));
+    }
+
+    function sw(a) {
+        for (var c = [rw(a)]; a.match(5);) c.push(rw(a));
+        return c
+    }
+
+    function tw(a) {
+        for (var c = [a.kf()]; a.match(5);) c.push(a.kf());
+        return c
+    }
+
+    function nw(a) {
+        var c = 1 == a.b.type && "EMPTY" == a.b.value;
+        c && (a.b = kw(a.a));
+        return c
+    }
+
+    function ow(a) {
+        return "Unexpected `" + a.b.value + "` at position " + a.b.position + " in `" + a.a.a + "`"
+    }
+    var qw = {
+            POINT: E,
+            LINESTRING: O,
+            POLYGON: F,
+            MULTIPOINT: an,
+            MULTILINESTRING: Q,
+            MULTIPOLYGON: R
+        },
+        pw = {
+            POINT: iw.prototype.lf,
+            LINESTRING: iw.prototype.kf,
+            POLYGON: iw.prototype.mf,
+            MULTIPOINT: iw.prototype.kn,
+            MULTILINESTRING: iw.prototype.jn,
+            MULTIPOLYGON: iw.prototype.ln
+        };
+
+    function uw() {
+        this.version = void 0
+    }
+    w(uw, nv);
+    uw.prototype.a = function(a) {
+        for (a = a.firstChild; null !== a; a = a.nextSibling)
+            if (1 == a.nodeType) return this.b(a);
+        return null
+    };
+    uw.prototype.b = function(a) {
+        this.version = Ca(a.getAttribute("version"));
+        a = V({
+            version: this.version
+        }, vw, a, []);
+        return m(a) ? a : null
+    };
+
+    function ww(a, c) {
+        return V({}, xw, a, c)
+    }
+
+    function yw(a, c) {
+        return V({}, zw, a, c)
+    }
+
+    function Aw(a, c) {
+        var d = ww(a, c);
+        if (m(d)) {
+            var e = [Yr(a.getAttribute("width")), Yr(a.getAttribute("height"))];
+            d.size = e;
+            return d
+        }
+    }
+
+    function Bw(a, c) {
+        return V([], Cw, a, c)
+    }
+    var Dw = [null, "http://www.opengis.net/wms"],
+        vw = T(Dw, {
+            Service: S(function(a, c) {
+                return V({}, Ew, a, c)
+            }),
+            Capability: S(function(a, c) {
+                return V({}, Fw, a, c)
+            })
+        }),
+        Fw = T(Dw, {
+            Request: S(function(a, c) {
+                return V({}, Gw, a, c)
+            }),
+            Exception: S(function(a, c) {
+                return V([], Hw, a, c)
+            }),
+            Layer: S(function(a, c) {
+                return V({}, Iw, a, c)
+            })
+        }),
+        Ew = T(Dw, {
+            Name: S(Y),
+            Title: S(Y),
+            Abstract: S(Y),
+            KeywordList: S(Bw),
+            OnlineResource: S(mv),
+            ContactInformation: S(function(a, c) {
+                return V({}, Jw, a, c)
+            }),
+            Fees: S(Y),
+            AccessConstraints: S(Y),
+            LayerLimit: S(Xr),
+            MaxWidth: S(Xr),
+            MaxHeight: S(Xr)
+        }),
+        Jw = T(Dw, {
+            ContactPersonPrimary: S(function(a, c) {
+                return V({}, Kw, a, c)
+            }),
+            ContactPosition: S(Y),
+            ContactAddress: S(function(a, c) {
+                return V({}, Lw, a, c)
+            }),
+            ContactVoiceTelephone: S(Y),
+            ContactFacsimileTelephone: S(Y),
+            ContactElectronicMailAddress: S(Y)
+        }),
+        Kw = T(Dw, {
+            ContactPerson: S(Y),
+            ContactOrganization: S(Y)
+        }),
+        Lw = T(Dw, {
+            AddressType: S(Y),
+            Address: S(Y),
+            City: S(Y),
+            StateOrProvince: S(Y),
+            PostCode: S(Y),
+            Country: S(Y)
+        }),
+        Hw = T(Dw, {
+            Format: Xo(Y)
+        }),
+        Iw = T(Dw, {
+            Name: S(Y),
+            Title: S(Y),
+            Abstract: S(Y),
+            KeywordList: S(Bw),
+            CRS: Zo(Y),
+            EX_GeographicBoundingBox: S(function(a, c) {
+                var d = V({}, Mw, a, c);
+                if (m(d)) {
+                    var e = d.westBoundLongitude,
+                        f = d.southBoundLatitude,
+                        g = d.eastBoundLongitude,
+                        d = d.northBoundLatitude;
+                    return m(e) && m(f) && m(g) && m(d) ? [e, f, g, d] : void 0
+                }
+            }),
+            BoundingBox: Zo(function(a) {
+                var c = [Wr(a.getAttribute("minx")), Wr(a.getAttribute("miny")), Wr(a.getAttribute("maxx")), Wr(a.getAttribute("maxy"))],
+                    d = [Wr(a.getAttribute("resx")), Wr(a.getAttribute("resy"))];
+                return {
+                    crs: a.getAttribute("CRS"),
+                    extent: c,
+                    res: d
+                }
+            }),
+            Dimension: Zo(function(a) {
+                return {
+                    name: a.getAttribute("name"),
+                    units: a.getAttribute("units"),
+                    unitSymbol: a.getAttribute("unitSymbol"),
+                    "default": a.getAttribute("default"),
+                    multipleValues: Tr(a.getAttribute("multipleValues")),
+                    nearestValue: Tr(a.getAttribute("nearestValue")),
+                    current: Tr(a.getAttribute("current")),
+                    values: Y(a)
+                }
+            }),
+            Attribution: S(function(a, c) {
+                return V({}, Nw, a, c)
+            }),
+            AuthorityURL: Zo(function(a, c) {
+                var d = ww(a, c);
+                if (m(d)) return d.name = a.getAttribute("name"), d
+            }),
+            Identifier: Zo(Y),
+            MetadataURL: Zo(function(a, c) {
+                var d = ww(a, c);
+                if (m(d)) return d.type = a.getAttribute("type"),
+                    d
+            }),
+            DataURL: Zo(ww),
+            FeatureListURL: Zo(ww),
+            Style: Zo(function(a, c) {
+                return V({}, Ow, a, c)
+            }),
+            MinScaleDenominator: S(Vr),
+            MaxScaleDenominator: S(Vr),
+            Layer: Zo(function(a, c) {
+                var d = c[c.length - 1],
+                    e = V({}, Iw, a, c);
+                if (m(e)) {
+                    var f = Tr(a.getAttribute("queryable"));
+                    m(f) || (f = d.queryable);
+                    e.queryable = m(f) ? f : !1;
+                    f = Yr(a.getAttribute("cascaded"));
+                    m(f) || (f = d.cascaded);
+                    e.cascaded = f;
+                    f = Tr(a.getAttribute("opaque"));
+                    m(f) || (f = d.opaque);
+                    e.opaque = m(f) ? f : !1;
+                    f = Tr(a.getAttribute("noSubsets"));
+                    m(f) || (f = d.noSubsets);
+                    e.noSubsets = m(f) ? f : !1;
+                    f = Wr(a.getAttribute("fixedWidth"));
+                    m(f) || (f = d.fixedWidth);
+                    e.fixedWidth = f;
+                    f = Wr(a.getAttribute("fixedHeight"));
+                    m(f) || (f = d.fixedHeight);
+                    e.fixedHeight = f;
+                    Sa(["Style", "CRS", "AuthorityURL"], function(a) {
+                        var c = d[a];
+                        if (m(c)) {
+                            var f = Cb(e, a),
+                                f = f.concat(c);
+                            e[a] = f
+                        }
+                    });
+                    Sa("EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" "), function(a) {
+                        m(e[a]) || (e[a] = d[a])
+                    });
+                    return e
+                }
+            })
+        }),
+        Nw = T(Dw, {
+            Title: S(Y),
+            OnlineResource: S(mv),
+            LogoURL: S(Aw)
+        }),
+        Mw = T(Dw, {
+            westBoundLongitude: S(Vr),
+            eastBoundLongitude: S(Vr),
+            southBoundLatitude: S(Vr),
+            northBoundLatitude: S(Vr)
+        }),
+        Gw = T(Dw, {
+            GetCapabilities: S(yw),
+            GetMap: S(yw),
+            GetFeatureInfo: S(yw)
+        }),
+        zw = T(Dw, {
+            Format: Zo(Y),
+            DCPType: Zo(function(a, c) {
+                return V({}, Pw, a, c)
+            })
+        }),
+        Pw = T(Dw, {
+            HTTP: S(function(a, c) {
+                return V({}, Qw, a, c)
+            })
+        }),
+        Qw = T(Dw, {
+            Get: S(ww),
+            Post: S(ww)
+        }),
+        Ow = T(Dw, {
+            Name: S(Y),
+            Title: S(Y),
+            Abstract: S(Y),
+            LegendURL: Zo(Aw),
+            StyleSheetURL: S(ww),
+            StyleURL: S(ww)
+        }),
+        xw = T(Dw, {
+            Format: S(Y),
+            OnlineResource: S(mv)
+        }),
+        Cw = T(Dw, {
+            Keyword: Xo(Y)
+        });
+
+    function Rw() {
+        this.c = "http://mapserver.gis.umn.edu/mapserver";
+        this.b = new ls;
+        this.defaultDataProjection = null
+    }
+    w(Rw, Or);
+
+    function Sw(a, c, d) {
+        c.namespaceURI = a.c;
+        var e = Fo(c),
+            f = [];
+        if (0 === c.childNodes.length) return f;
+        "msGMLOutput" == e && Sa(c.childNodes, function(a) {
+            if (1 === a.nodeType) {
+                var c = d[0],
+                    e = a.localName,
+                    n = RegExp,
+                    p;
+                p = "_layer".replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08");
+                n = new n(p, "");
+                e = e.replace(n, "") + "_feature";
+                c.featureType = e;
+                c.featureNS = this.c;
+                n = {};
+                n[e] = Xo(this.b.nf, this.b);
+                c = T([c.featureNS, null], n);
+                a.namespaceURI = this.c;
+                a = V([], c, a, d, this.b);
+                m(a) && db(f, a)
+            }
+        }, a);
+        "FeatureCollection" == e && (a = V([], a.b.b, c, [{}], a.b), m(a) && (f = a));
+        return f
+    }
+    Rw.prototype.Ob = function(a, c) {
+        var d = {
+            featureType: this.featureType,
+            featureNS: this.featureNS
+        };
+        m(c) && Fb(d, xr(this, a, c));
+        return Sw(this, a, [d])
+    };
+
+    function Tw() {
+        this.d = new ov
+    }
+    w(Tw, nv);
+    Tw.prototype.a = function(a) {
+        for (a = a.firstChild; null !== a; a = a.nextSibling)
+            if (1 == a.nodeType) return this.b(a);
+        return null
+    };
+    Tw.prototype.b = function(a) {
+        this.version = Ca(a.getAttribute("version"));
+        var c = this.d.b(a);
+        if (!m(c)) return null;
+        c.version = this.version;
+        c = V(c, Uw, a, []);
+        return m(c) ? c : null
+    };
+
+    function Vw(a) {
+        var c = Y(a).split(" ");
+        if (m(c) && 2 == c.length) return a = +c[0], c = +c[1], isNaN(a) || isNaN(c) ? void 0 : [a, c]
+    }
+    var Ww = [null, "http://www.opengis.net/wmts/1.0"],
+        Xw = [null, "http://www.opengis.net/ows/1.1"],
+        Uw = T(Ww, {
+            Contents: S(function(a, c) {
+                return V({}, Yw, a, c)
+            })
+        }),
+        Yw = T(Ww, {
+            Layer: Zo(function(a, c) {
+                return V({}, Zw, a, c)
+            }),
+            TileMatrixSet: Zo(function(a, c) {
+                return V({}, $w, a, c)
+            })
+        }),
+        Zw = T(Ww, {
+            Style: Zo(function(a, c) {
+                var d = V({}, ax, a, c);
+                if (m(d)) {
+                    var e = "true" === a.getAttribute("isDefault");
+                    d.isDefault = e;
+                    return d
+                }
+            }),
+            Format: Zo(Y),
+            TileMatrixSetLink: Zo(function(a, c) {
+                return V({}, bx, a, c)
+            }),
+            ResourceURL: Zo(function(a) {
+                var c = a.getAttribute("format"),
+                    d = a.getAttribute("template");
+                a = a.getAttribute("resourceType");
+                var e = {};
+                m(c) && (e.format = c);
+                m(d) && (e.template = d);
+                m(a) && (e.resourceType = a);
+                return e
+            })
+        }, T(Xw, {
+            Title: S(Y),
+            Abstract: S(Y),
+            WGS84BoundingBox: S(function(a, c) {
+                var d = V([], cx, a, c);
+                return 2 != d.length ? void 0 : Jd(d)
+            }),
+            Identifier: S(Y)
+        })),
+        ax = T(Ww, {
+            LegendURL: Zo(function(a) {
+                var c = {};
+                c.format = a.getAttribute("format");
+                c.href = mv(a);
+                return c
+            })
+        }, T(Xw, {
+            Title: S(Y),
+            Identifier: S(Y)
+        })),
+        bx = T(Ww, {
+            TileMatrixSet: S(Y)
+        }),
+        cx = T(Xw, {
+            LowerCorner: Xo(Vw),
+            UpperCorner: Xo(Vw)
+        }),
+        $w = T(Ww, {
+            WellKnownScaleSet: S(Y),
+            TileMatrix: Zo(function(a, c) {
+                return V({}, dx, a, c)
+            })
+        }, T(Xw, {
+            SupportedCRS: S(Y),
+            Identifier: S(Y)
+        })),
+        dx = T(Ww, {
+            TopLeftCorner: S(Vw),
+            ScaleDenominator: S(Vr),
+            TileWidth: S(Xr),
+            TileHeight: S(Xr),
+            MatrixWidth: S(Xr),
+            MatrixHeight: S(Xr)
+        }, T(Xw, {
+            Identifier: S(Y)
+        }));
+    var ex = new me(6378137);
+
+    function fx(a) {
+        fd.call(this);
+        a = m(a) ? a : {};
+        this.a = null;
+        this.d = Ke;
+        this.c = void 0;
+        x(this, hd("projection"), this.Vk, !1, this);
+        x(this, hd("tracking"), this.Wk, !1, this);
+        m(a.projection) && this.ug(re(a.projection));
+        m(a.trackingOptions) && this.Dh(a.trackingOptions);
+        this.Zd(m(a.tracking) ? a.tracking : !1)
+    }
+    w(fx, fd);
+    l = fx.prototype;
+    l.O = function() {
+        this.Zd(!1);
+        fx.S.O.call(this)
+    };
+    l.Vk = function() {
+        var a = this.sg();
+        null != a && (this.d = ve(re("EPSG:4326"), a), null === this.a || this.set("position", this.d(this.a)))
+    };
+    l.Wk = function() {
+        if (ni) {
+            var a = this.tg();
+            a && !m(this.c) ? this.c = ba.navigator.geolocation.watchPosition(ra(this.tn, this), ra(this.vn, this), this.bg()) : !a && m(this.c) && (ba.navigator.geolocation.clearWatch(this.c), this.c = void 0)
+        }
+    };
+    l.tn = function(a) {
+        a = a.coords;
+        this.set("accuracy", a.accuracy);
+        this.set("altitude", null === a.altitude ? void 0 : a.altitude);
+        this.set("altitudeAccuracy", null === a.altitudeAccuracy ? void 0 : a.altitudeAccuracy);
+        this.set("heading", null === a.heading ? void 0 : Yb(a.heading));
+        null === this.a ? this.a = [a.longitude, a.latitude] : (this.a[0] = a.longitude, this.a[1] = a.latitude);
+        var c = this.d(this.a);
+        this.set("position", c);
+        this.set("speed", null === a.speed ? void 0 : a.speed);
+        a = gl(ex, this.a, a.accuracy);
+        a.qa(this.d);
+        this.set("accuracyGeometry", a);
+        this.k()
+    };
+    l.vn = function(a) {
+        a.type = "error";
+        this.Zd(!1);
+        this.dispatchEvent(a)
+    };
+    l.Ki = function() {
+        return this.get("accuracy")
+    };
+    l.Li = function() {
+        return this.get("accuracyGeometry") || null
+    };
+    l.Ni = function() {
+        return this.get("altitude")
+    };
+    l.Oi = function() {
+        return this.get("altitudeAccuracy")
+    };
+    l.Tk = function() {
+        return this.get("heading")
+    };
+    l.Uk = function() {
+        return this.get("position")
+    };
+    l.sg = function() {
+        return this.get("projection")
+    };
+    l.vj = function() {
+        return this.get("speed")
+    };
+    l.tg = function() {
+        return this.get("tracking")
+    };
+    l.bg = function() {
+        return this.get("trackingOptions")
+    };
+    l.ug = function(a) {
+        this.set("projection", a)
+    };
+    l.Zd = function(a) {
+        this.set("tracking", a)
+    };
+    l.Dh = function(a) {
+        this.set("trackingOptions", a)
+    };
+
+    function gx(a, c, d) {
+        for (var e = [], f = a(0), g = a(1), h = c(f), k = c(g), n = [g, f], p = [k, h], q = [1, 0], r = {}, t = 1E5, u, A, z, D, B; 0 < --t && 0 < q.length;) z = q.pop(), f = n.pop(), h = p.pop(), g = z.toString(), g in r || (e.push(h[0], h[1]), r[g] = !0), D = q.pop(), g = n.pop(), k = p.pop(), B = (z + D) / 2, u = a(B), A = c(u), Ck(A[0], A[1], h[0], h[1], k[0], k[1]) < d ? (e.push(k[0], k[1]), g = D.toString(), r[g] = !0) : (q.push(D, B, B, z), p.push(k, A, A, h), n.push(g, u, u, f));
+        return e
+    }
+
+    function hx(a, c, d, e, f) {
+        var g = re("EPSG:4326");
+        return gx(function(e) {
+            return [a, c + (d - c) * e]
+        }, Je(g, e), f)
+    }
+
+    function ix(a, c, d, e, f) {
+        var g = re("EPSG:4326");
+        return gx(function(e) {
+            return [c + (d - c) * e, a]
+        }, Je(g, e), f)
+    };
+
+    function jx(a) {
+        a = m(a) ? a : {};
+        this.i = this.g = null;
+        this.d = this.c = Infinity;
+        this.f = this.e = -Infinity;
+        this.n = m(a.targetSize) ? a.targetSize : 100;
+        this.U = m(a.maxLines) ? a.maxLines : 100;
+        this.b = [];
+        this.a = [];
+        this.V = m(a.strokeStyle) ? a.strokeStyle : kx;
+        this.o = this.q = void 0;
+        this.l = null;
+        this.setMap(m(a.map) ? a.map : null)
+    }
+    var kx = new vl({
+            color: "rgba(0,0,0,0.2)"
+        }),
+        lx = [90, 45, 30, 20, 10, 5, 2, 1, .5, .2, .1, .05, .01, .005, .002, .001];
+
+    function mx(a, c, d, e, f) {
+        var g = f;
+        c = hx(c, a.e, a.c, a.i, d);
+        g = m(a.b[g]) ? a.b[g] : new O(null);
+        Ym(g, "XY", c);
+        he(g.G(), e) && (a.b[f++] = g);
+        return f
+    }
+
+    function nx(a, c, d, e, f) {
+        var g = f;
+        c = ix(c, a.f, a.d, a.i, d);
+        g = m(a.a[g]) ? a.a[g] : new O(null);
+        Ym(g, "XY", c);
+        he(g.G(), e) && (a.a[f++] = g);
+        return f
+    }
+    l = jx.prototype;
+    l.Xk = function() {
+        return this.g
+    };
+    l.kj = function() {
+        return this.b
+    };
+    l.pj = function() {
+        return this.a
+    };
+    l.gg = function(a) {
+        var c = a.vectorContext,
+            d = a.frameState;
+        a = d.extent;
+        var e = d.viewState,
+            f = e.center,
+            g = e.projection,
+            e = e.resolution,
+            d = d.pixelRatio,
+            d = e * e / (4 * d * d);
+        if (null === this.i || !Ie(this.i, g)) {
+            var h = g.G(),
+                k = g.g,
+                n = k[2],
+                p = k[1],
+                q = k[0];
+            this.c = k[3];
+            this.d = n;
+            this.e = p;
+            this.f = q;
+            k = re("EPSG:4326");
+            this.q = Je(k, g);
+            this.o = Je(g, k);
+            this.l = this.o(ce(h));
+            this.i = g
+        }
+        for (var g = this.l[0], h = this.l[1], k = -1, r, p = Math.pow(this.n * e, 2), q = [], t = [], e = 0, n = lx.length; e < n; ++e) {
+            r = lx[e] / 2;
+            q[0] = g - r;
+            q[1] = h - r;
+            t[0] = g + r;
+            t[1] = h + r;
+            this.q(q, q);
+            this.q(t, t);
+            r = Math.pow(t[0] - q[0], 2) + Math.pow(t[1] - q[1], 2);
+            if (r <= p) break;
+            k = lx[e]
+        }
+        e = k;
+        if (-1 == e) this.b.length = this.a.length = 0;
+        else {
+            g = this.o(f);
+            f = g[0];
+            g = g[1];
+            h = this.U;
+            f = Math.floor(f / e) * e;
+            p = Vb(f, this.f, this.d);
+            n = mx(this, p, d, a, 0);
+            for (k = 0; p != this.f && k++ < h;) p = Math.max(p - e, this.f), n = mx(this, p, d, a, n);
+            p = Vb(f, this.f, this.d);
+            for (k = 0; p != this.d && k++ < h;) p = Math.min(p + e, this.d), n = mx(this, p, d, a, n);
+            this.b.length = n;
+            g = Math.floor(g / e) * e;
+            f = Vb(g, this.e, this.c);
+            n = nx(this, f, d, a, 0);
+            for (k = 0; f != this.e && k++ < h;) f = Math.max(f - e, this.e), n = nx(this, f, d, a, n);
+            f = Vb(g, this.e, this.c);
+            for (k = 0; f != this.c && k++ < h;) f = Math.min(f + e, this.c), n = nx(this, f, d, a, n);
+            this.a.length = n
+        }
+        c.Aa(null, this.V);
+        a = 0;
+        for (d = this.b.length; a < d; ++a) f = this.b[a], c.zb(f, null);
+        a = 0;
+        for (d = this.a.length; a < d; ++a) f = this.a[a], c.zb(f, null)
+    };
+    l.setMap = function(a) {
+        null !== this.g && (this.g.u("postcompose", this.gg, this), this.g.render());
+        null !== a && (a.r("postcompose", this.gg, this), a.render());
+        this.g = a
+    };
+
+    function ox(a, c, d, e, f, g, h) {
+        pj.call(this, a, c, d, 0, e);
+        this.i = f;
+        this.a = new Image;
+        null !== g && (this.a.crossOrigin = g);
+        this.d = {};
+        this.c = null;
+        this.state = 0;
+        this.g = h
+    }
+    w(ox, pj);
+    ox.prototype.b = function(a) {
+        if (m(a)) {
+            var c = ma(a);
+            if (c in this.d) return this.d[c];
+            a = xb(this.d) ? this.a : this.a.cloneNode(!1);
+            return this.d[c] = a
+        }
+        return this.a
+    };
+    ox.prototype.q = function() {
+        this.state = 3;
+        Sa(this.c, Wc);
+        this.c = null;
+        this.dispatchEvent("change")
+    };
+    ox.prototype.l = function() {
+        m(this.resolution) || (this.resolution = fe(this.extent) / this.a.height);
+        this.state = 2;
+        Sa(this.c, Wc);
+        this.c = null;
+        this.dispatchEvent("change")
+    };
+    ox.prototype.load = function() {
+        0 == this.state && (this.state = 1, this.dispatchEvent("change"), this.c = [Uc(this.a, "error", this.q, !1, this), Uc(this.a, "load", this.l, !1, this)], this.g(this, this.i))
+    };
+
+    function px(a, c, d, e, f) {
+        zg.call(this, a, c);
+        this.g = d;
+        this.a = new Image;
+        null !== e && (this.a.crossOrigin = e);
+        this.c = {};
+        this.e = null;
+        this.i = f
+    }
+    w(px, zg);
+    l = px.prototype;
+    l.O = function() {
+        1 == this.state && qx(this);
+        px.S.O.call(this)
+    };
+    l.Ma = function(a) {
+        if (m(a)) {
+            var c = ma(a);
+            if (c in this.c) return this.c[c];
+            a = xb(this.c) ? this.a : this.a.cloneNode(!1);
+            return this.c[c] = a
+        }
+        return this.a
+    };
+    l.gb = function() {
+        return this.g
+    };
+    l.Yk = function() {
+        this.state = 3;
+        qx(this);
+        Ag(this)
+    };
+    l.Zk = function() {
+        this.state = this.a.naturalWidth && this.a.naturalHeight ? 2 : 4;
+        qx(this);
+        Ag(this)
+    };
+    l.load = function() {
+        0 == this.state && (this.state = 1, Ag(this), this.e = [Uc(this.a, "error", this.Yk, !1, this), Uc(this.a, "load", this.Zk, !1, this)], this.i(this, this.g))
+    };
+
+    function qx(a) {
+        Sa(a.e, Wc);
+        a.e = null
+    };
+
+    function rx(a, c, d) {
+        return function(e, f, g) {
+            return d(a, c, e, f, g)
+        }
+    }
+
+    function sx() {};
+
+    function tx(a, c) {
+        $c.call(this);
+        this.b = new cr(this);
+        var d = a;
+        c && (d = Ef(a));
+        this.b.Ka(d, "dragenter", this.$m);
+        d != a && this.b.Ka(d, "dragover", this.an);
+        this.b.Ka(a, "dragover", this.bn);
+        this.b.Ka(a, "drop", this.cn)
+    }
+    w(tx, $c);
+    l = tx.prototype;
+    l.Zc = !1;
+    l.O = function() {
+        tx.S.O.call(this);
+        this.b.Yc()
+    };
+    l.$m = function(a) {
+        var c = a.b.dataTransfer;
+        (this.Zc = !(!c || !(c.types && (Ya(c.types, "Files") || Ya(c.types, "public.file-url")) || c.files && 0 < c.files.length))) && a.preventDefault()
+    };
+    l.an = function(a) {
+        this.Zc && (a.preventDefault(), a.b.dataTransfer.dropEffect = "none")
+    };
+    l.bn = function(a) {
+        this.Zc && (a.preventDefault(), a.fb(), a = a.b.dataTransfer, a.effectAllowed = "all", a.dropEffect = "copy")
+    };
+    l.cn = function(a) {
+        this.Zc && (a.preventDefault(), a.fb(), a = new wc(a.b), a.type = "drop", this.dispatchEvent(a))
+    };
+    /*
+     Portions of this code are from MochiKit, received by
+     The Closure Authors under the MIT license. All other code is Copyright
+     2005-2009 The Closure Authors. All Rights Reserved.
+    */
+    function ux(a, c) {
+        this.e = [];
+        this.U = a;
+        this.o = c || null;
+        this.d = this.b = !1;
+        this.c = void 0;
+        this.q = this.V = this.g = !1;
+        this.f = 0;
+        this.a = null;
+        this.i = 0
+    }
+    ux.prototype.cancel = function(a) {
+        if (this.b) this.c instanceof ux && this.c.cancel();
+        else {
+            if (this.a) {
+                var c = this.a;
+                delete this.a;
+                a ? c.cancel(a) : (c.i--, 0 >= c.i && c.cancel())
+            }
+            this.U ? this.U.call(this.o, this) : this.q = !0;
+            this.b || (a = new vx, wx(this), xx(this, !1, a))
+        }
+    };
+    ux.prototype.l = function(a, c) {
+        this.g = !1;
+        xx(this, a, c)
+    };
+
+    function xx(a, c, d) {
+        a.b = !0;
+        a.c = d;
+        a.d = !c;
+        yx(a)
+    }
+
+    function wx(a) {
+        if (a.b) {
+            if (!a.q) throw new zx;
+            a.q = !1
+        }
+    }
+
+    function Ax(a, c, d, e) {
+        a.e.push([c, d, e]);
+        a.b && yx(a)
+    }
+    ux.prototype.then = function(a, c, d) {
+        var e, f, g = new An(function(a, c) {
+            e = a;
+            f = c
+        });
+        Ax(this, e, function(a) {
+            a instanceof vx ? g.cancel() : f(a)
+        });
+        return g.then(a, c, d)
+    };
+    rn(ux);
+
+    function Bx(a) {
+        return Va(a.e, function(a) {
+            return ka(a[1])
+        })
+    }
+
+    function yx(a) {
+        if (a.f && a.b && Bx(a)) {
+            var c = a.f,
+                d = Cx[c];
+            d && (ba.clearTimeout(d.$), delete Cx[c]);
+            a.f = 0
+        }
+        a.a && (a.a.i--, delete a.a);
+        for (var c = a.c, e = d = !1; a.e.length && !a.g;) {
+            var f = a.e.shift(),
+                g = f[0],
+                h = f[1],
+                f = f[2];
+            if (g = a.d ? h : g) try {
+                var k = g.call(f || a.o, c);
+                m(k) && (a.d = a.d && (k == c || k instanceof Error), a.c = c = k);
+                sn(c) && (e = !0, a.g = !0)
+            } catch (n) {
+                c = n, a.d = !0, Bx(a) || (d = !0)
+            }
+        }
+        a.c = c;
+        e && (k = ra(a.l, a, !0), e = ra(a.l, a, !1), c instanceof ux ? (Ax(c, k, e), c.V = !0) : c.then(k, e));
+        d && (c = new Dx(c), Cx[c.$] = c, a.f = c.$)
+    }
+
+    function zx() {
+        xa.call(this)
+    }
+    w(zx, xa);
+    zx.prototype.message = "Deferred has already fired";
+    zx.prototype.name = "AlreadyCalledError";
+
+    function vx() {
+        xa.call(this)
+    }
+    w(vx, xa);
+    vx.prototype.message = "Deferred was canceled";
+    vx.prototype.name = "CanceledError";
+
+    function Dx(a) {
+        this.$ = ba.setTimeout(ra(this.a, this), 0);
+        this.b = a
+    }
+    Dx.prototype.a = function() {
+        delete Cx[this.$];
+        throw this.b;
+    };
+    var Cx = {};
+
+    function Ex(a, c) {
+        m(a.name) ? (this.name = a.name, this.code = Fx[a.name]) : (this.code = a.code, this.name = Gx(a.code));
+        xa.call(this, Ba("%s %s", this.name, c))
+    }
+    w(Ex, xa);
+
+    function Gx(a) {
+        var c = wb(Fx, function(c) {
+            return a == c
+        });
+        if (!m(c)) throw Error("Invalid code: " + a);
+        return c
+    }
+    var Fx = {
+        AbortError: 3,
+        EncodingError: 5,
+        InvalidModificationError: 9,
+        InvalidStateError: 7,
+        NotFoundError: 1,
+        NotReadableError: 4,
+        NoModificationAllowedError: 6,
+        PathExistsError: 12,
+        QuotaExceededError: 10,
+        SecurityError: 2,
+        SyntaxError: 8,
+        TypeMismatchError: 11
+    };
+
+    function Hx(a, c) {
+        rc.call(this, a.type, c)
+    }
+    w(Hx, rc);
+
+    function Ix() {
+        $c.call(this);
+        this.Ya = new FileReader;
+        this.Ya.onloadstart = ra(this.b, this);
+        this.Ya.onprogress = ra(this.b, this);
+        this.Ya.onload = ra(this.b, this);
+        this.Ya.onabort = ra(this.b, this);
+        this.Ya.onerror = ra(this.b, this);
+        this.Ya.onloadend = ra(this.b, this)
+    }
+    w(Ix, $c);
+    Ix.prototype.getError = function() {
+        return this.Ya.error && new Ex(this.Ya.error, "reading file")
+    };
+    Ix.prototype.b = function(a) {
+        this.dispatchEvent(new Hx(a, this))
+    };
+    Ix.prototype.O = function() {
+        Ix.S.O.call(this);
+        delete this.Ya
+    };
+
+    function Jx(a) {
+        var c = new ux;
+        a.Ka("loadend", ta(function(a, c) {
+            var f = c.Ya.result,
+                g = c.getError();
+            null == f || g ? (wx(a), xx(a, !1, g)) : (wx(a), xx(a, !0, f));
+            c.Yc()
+        }, c, a));
+        return c
+    };
+
+    function Kx(a) {
+        a = m(a) ? a : {};
+        Wj.call(this, {
+            handleEvent: Gg
+        });
+        this.f = m(a.formatConstructors) ? a.formatConstructors : [];
+        this.o = m(a.projection) ? re(a.projection) : null;
+        this.e = null;
+        this.a = void 0
+    }
+    w(Kx, Wj);
+    Kx.prototype.O = function() {
+        m(this.a) && Wc(this.a);
+        Kx.S.O.call(this)
+    };
+    Kx.prototype.g = function(a) {
+        a = a.b.dataTransfer.files;
+        var c, d, e;
+        c = 0;
+        for (d = a.length; c < d; ++c) {
+            var f = e = a[c],
+                g = new Ix,
+                h = Jx(g);
+            g.Ya.readAsText(f, "");
+            Ax(h, ta(this.i, e), null, this)
+        }
+    };
+    Kx.prototype.i = function(a, c) {
+        var d = this.l,
+            e = this.o;
+        null === e && (e = d.R().e);
+        var d = this.f,
+            f = [],
+            g, h;
+        g = 0;
+        for (h = d.length; g < h; ++g) {
+            var k = new d[g],
+                n;
+            try {
+                n = k.ja(c)
+            } catch (p) {
+                n = null
+            }
+            if (null !== n) {
+                var k = k.za(c),
+                    k = Je(k, e),
+                    q, r;
+                q = 0;
+                for (r = n.length; q < r; ++q) {
+                    var t = n[q],
+                        u = t.Q();
+                    null != u && u.qa(k);
+                    f.push(t)
+                }
+            }
+        }
+        this.dispatchEvent(new Lx(Mx, this, a, f, e))
+    };
+    Kx.prototype.setMap = function(a) {
+        m(this.a) && (Wc(this.a), this.a = void 0);
+        null !== this.e && (qc(this.e), this.e = null);
+        Kx.S.setMap.call(this, a);
+        null !== a && (this.e = new tx(a.a), this.a = x(this.e, "drop", this.g, !1, this))
+    };
+    var Mx = "addfeatures";
+
+    function Lx(a, c, d, e, f) {
+        rc.call(this, a, c);
+        this.features = e;
+        this.file = d;
+        this.projection = f
+    }
+    w(Lx, rc);
+
+    function Nx(a, c) {
+        this.x = a;
+        this.y = c
+    }
+    w(Nx, Af);
+    Nx.prototype.clone = function() {
+        return new Nx(this.x, this.y)
+    };
+    Nx.prototype.scale = Af.prototype.scale;
+    Nx.prototype.add = function(a) {
+        this.x += a.x;
+        this.y += a.y;
+        return this
+    };
+    Nx.prototype.rotate = function(a) {
+        var c = Math.cos(a);
+        a = Math.sin(a);
+        var d = this.y * c + this.x * a;
+        this.x = this.x * c - this.y * a;
+        this.y = d;
+        return this
+    };
+
+    function Ox(a) {
+        a = m(a) ? a : {};
+        jk.call(this, {
+            handleDownEvent: Px,
+            handleDragEvent: Qx,
+            handleUpEvent: Rx
+        });
+        this.i = m(a.condition) ? a.condition : gk;
+        this.a = this.f = void 0;
+        this.g = 0;
+        this.n = m(a.duration) ? a.duration : 400
+    }
+    w(Ox, jk);
+
+    function Qx(a) {
+        if (ik(a)) {
+            var c = a.map,
+                d = c.xa();
+            a = a.pixel;
+            a = new Nx(a[0] - d[0] / 2, d[1] / 2 - a[1]);
+            d = Math.atan2(a.y, a.x);
+            a = Math.sqrt(a.x * a.x + a.y * a.y);
+            var e = c.R(),
+                f = Se(e);
+            c.render();
+            m(this.f) && Xj(c, e, f.rotation - (d - this.f));
+            this.f = d;
+            m(this.a) && Zj(c, e, f.resolution / a * this.a);
+            m(this.a) && (this.g = this.a / a);
+            this.a = a
+        }
+    }
+
+    function Rx(a) {
+        if (!ik(a)) return !0;
+        a = a.map;
+        var c = a.R();
+        Ue(c, -1);
+        var d = Se(c),
+            e = this.g - 1,
+            f = d.rotation,
+            f = c.constrainRotation(f, 0);
+        Xj(a, c, f, void 0, void 0);
+        d = d.resolution;
+        f = this.n;
+        d = c.constrainResolution(d, 0, e);
+        Zj(a, c, d, void 0, f);
+        this.g = 0;
+        return !1
+    }
+
+    function Px(a) {
+        return ik(a) && this.i(a) ? (Ue(a.map.R(), 1), this.a = this.f = void 0, !0) : !1
+    };
+
+    function Sx(a, c) {
+        rc.call(this, a);
+        this.feature = c
+    }
+    w(Sx, rc);
+
+    function Tx(a) {
+        jk.call(this, {
+            handleDownEvent: Ux,
+            handleEvent: Vx,
+            handleUpEvent: Wx
+        });
+        this.N = null;
+        this.H = !1;
+        this.Ga = m(a.source) ? a.source : null;
+        this.oa = m(a.features) ? a.features : null;
+        this.gi = m(a.snapTolerance) ? a.snapTolerance : 12;
+        this.Nc = m(a.minPointsPerRing) ? a.minPointsPerRing : 3;
+        var c = this.L = a.type,
+            d;
+        "Point" === c || "MultiPoint" === c ? d = Xx : "LineString" === c || "MultiLineString" === c ? d = Yx : "Polygon" === c || "MultiPolygon" === c ? d = Zx : "Circle" === c && (d = $x);
+        this.a = d;
+        this.f = this.n = this.p = this.g = this.i = null;
+        this.T = new ur({
+            style: m(a.style) ? a.style : ay()
+        });
+        this.Fa = a.geometryName;
+        this.Ee = m(a.condition) ? a.condition : fk;
+        this.ba = m(a.freehandCondition) ? a.freehandCondition : gk;
+        x(this, hd("active"), this.Ra, !1, this)
+    }
+    w(Tx, jk);
+
+    function ay() {
+        var a = Fl();
+        return function(c) {
+            return a[c.Q().M()]
+        }
+    }
+    Tx.prototype.setMap = function(a) {
+        Tx.S.setMap.call(this, a);
+        this.Ra()
+    };
+
+    function Vx(a) {
+        var c = !this.H;
+        this.H && a.type === kj ? (by(this, a), c = !1) : a.type === jj ? c = cy(this, a) : a.type === dj && (c = !1);
+        return kk.call(this, a) && c
+    }
+
+    function Ux(a) {
+        if (this.Ee(a)) return this.N = a.pixel, !0;
+        if (this.a !== Yx && this.a !== Zx || !this.ba(a)) return !1;
+        this.N = a.pixel;
+        this.H = !0;
+        null === this.i && dy(this, a);
+        return !0
+    }
+
+    function Wx(a) {
+        this.H = !1;
+        var c = this.N,
+            d = a.pixel,
+            e = c[0] - d[0],
+            c = c[1] - d[1],
+            d = !0;
+        4 >= e * e + c * c && (cy(this, a), null === this.i ? dy(this, a) : (this.a === Xx || this.a === $x) && null !== this.i || ey(this, a) ? this.X() : by(this, a), d = !1);
+        return d
+    }
+
+    function cy(a, c) {
+        if (a.a === Xx && null === a.i) dy(a, c);
+        else if (null === a.i) {
+            var d = c.coordinate.slice();
+            null === a.p ? (a.p = new X(new E(d)), fy(a)) : a.p.Q().W(d)
+        } else {
+            var d = c.coordinate,
+                e = a.g.Q(),
+                f, g;
+            a.a === Xx ? (g = e.K(), g[0] = d[0], g[1] = d[1], e.W(g)) : (a.a === Yx ? f = e.K() : a.a === Zx ? f = a.f[0] : a.a === $x && (f = e.dd()), ey(a, c) && (d = a.i.slice()), a.p.Q().W(d), g = f[f.length - 1], g[0] = d[0], g[1] = d[1], a.a === Yx ? e.W(f) : a.a === Zx ? (g = a.n.Q(), g.W(f), e.W(a.f)) : a.a === $x && (g = a.n.Q(), g.W([e.dd(), d]), e.Ag(g.Bg())));
+            fy(a)
+        }
+        return !0
+    }
+
+    function ey(a, c) {
+        var d = !1;
+        if (null !== a.g) {
+            var e = a.g.Q(),
+                f = !1,
+                g = [a.i];
+            a.a === Yx ? f = 2 < e.K().length : a.a === Zx && (f = e.K()[0].length > a.Nc, g = [a.f[0][0], a.f[0][a.f[0].length - 2]]);
+            if (f)
+                for (var e = c.map, f = 0, h = g.length; f < h; f++) {
+                    var k = g[f],
+                        n = e.ta(k),
+                        p = c.pixel,
+                        d = p[0] - n[0],
+                        n = p[1] - n[1],
+                        p = a.H && a.ba(c) ? 1 : a.gi;
+                    if (d = Math.sqrt(d * d + n * n) <= p) {
+                        a.i = k;
+                        break
+                    }
+                }
+        }
+        return d
+    }
+
+    function dy(a, c) {
+        var d = c.coordinate;
+        a.i = d;
+        var e;
+        a.a === Xx ? e = new E(d.slice()) : a.a === Yx ? e = new O([d.slice(), d.slice()]) : a.a === Zx ? (a.n = new X(new O([d.slice(), d.slice()])), a.f = [
+            [d.slice(), d.slice()]
+        ], e = new F(a.f)) : a.a === $x && (e = new Pm(d.slice(), 0), a.n = new X(new O([d.slice(), d.slice()])));
+        a.g = new X;
+        m(a.Fa) && a.g.Ic(a.Fa);
+        a.g.La(e);
+        fy(a);
+        a.dispatchEvent(new Sx("drawstart", a.g))
+    }
+
+    function by(a, c) {
+        var d = c.coordinate,
+            e = a.g.Q(),
+            f;
+        a.a === Yx ? (a.i = d.slice(), f = e.K(), f.push(d.slice()), e.W(f)) : a.a === Zx && (a.f[0].push(d.slice()), e.W(a.f));
+        fy(a)
+    }
+    Tx.prototype.X = function() {
+        var a = gy(this),
+            c, d = a.Q();
+        this.a === Xx ? c = d.K() : this.a === Yx ? (c = d.K(), c.pop(), d.W(c)) : this.a === Zx && (this.f[0].pop(), this.f[0].push(this.f[0][0]), d.W(this.f), c = d.K());
+        "MultiPoint" === this.L ? a.La(new an([c])) : "MultiLineString" === this.L ? a.La(new Q([c])) : "MultiPolygon" === this.L && a.La(new R([c]));
+        this.dispatchEvent(new Sx("drawend", a));
+        null === this.oa || this.oa.push(a);
+        null === this.Ga || this.Ga.jf(a)
+    };
+
+    function gy(a) {
+        a.i = null;
+        var c = a.g;
+        null !== c && (a.g = null, a.p = null, a.n = null, a.T.b.clear());
+        return c
+    }
+    Tx.prototype.nc = Fg;
+
+    function fy(a) {
+        var c = [];
+        null === a.g || c.push(a.g);
+        null === a.n || c.push(a.n);
+        null === a.p || c.push(a.p);
+        a.T.ld(new of(c))
+    }
+    Tx.prototype.Ra = function() {
+        var a = this.l,
+            c = this.c();
+        null !== a && c || gy(this);
+        this.T.setMap(c ? a : null)
+    };
+    var Xx = "Point",
+        Yx = "LineString",
+        Zx = "Polygon",
+        $x = "Circle";
+
+    function hy(a) {
+        jk.call(this, {
+            handleDownEvent: iy,
+            handleDragEvent: jy,
+            handleEvent: ky,
+            handleUpEvent: ly
+        });
+        this.X = m(a.deleteCondition) ? a.deleteCondition : Lg(fk, ek);
+        this.T = this.f = null;
+        this.L = [0, 0];
+        this.a = new lp;
+        this.i = m(a.pixelTolerance) ? a.pixelTolerance : 10;
+        this.N = !1;
+        this.g = null;
+        this.n = new ur({
+            style: m(a.style) ? a.style : my()
+        });
+        this.H = {
+            Point: this.Bl,
+            LineString: this.Dg,
+            LinearRing: this.Dg,
+            Polygon: this.Cl,
+            MultiPoint: this.zl,
+            MultiLineString: this.yl,
+            MultiPolygon: this.Al,
+            GeometryCollection: this.xl
+        };
+        this.p = a.features;
+        this.p.forEach(this.Cg, this);
+        x(this.p, "add", this.vl, !1, this);
+        x(this.p, "remove", this.wl, !1, this)
+    }
+    w(hy, jk);
+    l = hy.prototype;
+    l.Cg = function(a) {
+        var c = a.Q();
+        m(this.H[c.M()]) && this.H[c.M()].call(this, a, c);
+        a = this.l;
+        null === a || ny(this, this.L, a)
+    };
+    l.setMap = function(a) {
+        this.n.setMap(a);
+        hy.S.setMap.call(this, a)
+    };
+    l.vl = function(a) {
+        this.Cg(a.element)
+    };
+    l.wl = function(a) {
+        var c = a.element;
+        a = this.a;
+        var d, e = [];
+        pp(a, c.Q().G(), function(a) {
+            c === a.feature && e.push(a)
+        });
+        for (d = e.length - 1; 0 <= d; --d) a.remove(e[d]);
+        null !== this.f && 0 === this.p.Ib() && (this.n.Yd(this.f), this.f = null)
+    };
+    l.Bl = function(a, c) {
+        var d = c.K(),
+            d = {
+                feature: a,
+                geometry: c,
+                aa: [d, d]
+            };
+        this.a.ha(c.G(), d)
+    };
+    l.zl = function(a, c) {
+        var d = c.K(),
+            e, f, g;
+        f = 0;
+        for (g = d.length; f < g; ++f) e = d[f], e = {
+            feature: a,
+            geometry: c,
+            depth: [f],
+            index: f,
+            aa: [e, e]
+        }, this.a.ha(c.G(), e)
+    };
+    l.Dg = function(a, c) {
+        var d = c.K(),
+            e, f, g, h;
+        e = 0;
+        for (f = d.length - 1; e < f; ++e) g = d.slice(e, e + 2), h = {
+            feature: a,
+            geometry: c,
+            index: e,
+            aa: g
+        }, this.a.ha(Jd(g), h)
+    };
+    l.yl = function(a, c) {
+        var d = c.K(),
+            e, f, g, h, k, n, p;
+        h = 0;
+        for (k = d.length; h < k; ++h)
+            for (e = d[h], f = 0, g = e.length - 1; f < g; ++f) n = e.slice(f, f + 2), p = {
+                feature: a,
+                geometry: c,
+                depth: [h],
+                index: f,
+                aa: n
+            }, this.a.ha(Jd(n), p)
+    };
+    l.Cl = function(a, c) {
+        var d = c.K(),
+            e, f, g, h, k, n, p;
+        h = 0;
+        for (k = d.length; h < k; ++h)
+            for (e = d[h], f = 0, g = e.length - 1; f < g; ++f) n = e.slice(f, f + 2), p = {
+                feature: a,
+                geometry: c,
+                depth: [h],
+                index: f,
+                aa: n
+            }, this.a.ha(Jd(n), p)
+    };
+    l.Al = function(a, c) {
+        var d = c.K(),
+            e, f, g, h, k, n, p, q, r, t;
+        n = 0;
+        for (p = d.length; n < p; ++n)
+            for (q = d[n], h = 0, k = q.length; h < k; ++h)
+                for (e = q[h], f = 0, g = e.length - 1; f < g; ++f) r = e.slice(f, f + 2), t = {
+                    feature: a,
+                    geometry: c,
+                    depth: [h, n],
+                    index: f,
+                    aa: r
+                }, this.a.ha(Jd(r), t)
+    };
+    l.xl = function(a, c) {
+        var d, e = c.d;
+        for (d = 0; d < e.length; ++d) this.H[e[d].M()].call(this, a, e[d])
+    };
+
+    function oy(a, c) {
+        var d = a.f;
+        null === d ? (d = new X(new E(c)), a.f = d, a.n.pg(d)) : d.Q().W(c)
+    }
+
+    function py(a, c) {
+        return a.index - c.index
+    }
+
+    function iy(a) {
+        ny(this, a.pixel, a.map);
+        this.g = [];
+        var c = this.f;
+        if (null !== c) {
+            a = [];
+            var c = c.Q().K(),
+                d = Jd([c]),
+                d = np(this.a, d),
+                e = {};
+            d.sort(py);
+            for (var f = 0, g = d.length; f < g; ++f) {
+                var h = d[f],
+                    k = h.aa,
+                    n = ma(h.feature),
+                    p = h.depth;
+                p && (n += "-" + p.join("-"));
+                e[n] || (e[n] = Array(2));
+                if (qd(k[0], c) && !e[n][0]) this.g.push([h, 0]), e[n][0] = h;
+                else if (qd(k[1], c) && !e[n][1]) {
+                    if ("LineString" !== h.geometry.M() && "MultiLineString" !== h.geometry.M() || !e[n][0] || 0 !== e[n][0].index) this.g.push([h, 1]), e[n][1] = h
+                } else ma(k) in this.T && !e[n][0] && !e[n][1] && a.push([h, c])
+            }
+            for (f = a.length - 1; 0 <= f; --f) this.qk.apply(this, a[f])
+        }
+        return null !== this.f
+    }
+
+    function jy(a) {
+        a = a.coordinate;
+        for (var c = 0, d = this.g.length; c < d; ++c) {
+            for (var e = this.g[c], f = e[0], g = f.depth, h = f.geometry, k = h.K(), n = f.aa, e = e[1]; a.length < h.s;) a.push(0);
+            switch (h.M()) {
+                case "Point":
+                    k = a;
+                    n[0] = n[1] = a;
+                    break;
+                case "MultiPoint":
+                    k[f.index] = a;
+                    n[0] = n[1] = a;
+                    break;
+                case "LineString":
+                    k[f.index + e] = a;
+                    n[e] = a;
+                    break;
+                case "MultiLineString":
+                    k[g[0]][f.index + e] = a;
+                    n[e] = a;
+                    break;
+                case "Polygon":
+                    k[g[0]][f.index + e] = a;
+                    n[e] = a;
+                    break;
+                case "MultiPolygon":
+                    k[g[1]][g[0]][f.index + e] = a, n[e] = a
+            }
+            h.W(k)
+        }
+        oy(this, a)
+    }
+
+    function ly() {
+        for (var a, c = this.g.length - 1; 0 <= c; --c) a = this.g[c][0], this.a.update(Jd(a.aa), a);
+        return !1
+    }
+
+    function ky(a) {
+        var c;
+        a.map.R().c.slice()[1] || a.type != jj || this.o || (this.L = a.pixel, ny(this, a.pixel, a.map));
+        if (null !== this.f && this.X(a)) {
+            this.f.Q();
+            c = this.g;
+            var d = {},
+                e, f, g, h, k, n, p, q, r;
+            for (k = c.length - 1; 0 <= k; --k)
+                if (g = c[k], q = g[0], h = q.geometry, f = h.K(), r = ma(q.feature), q.depth && (r += "-" + q.depth.join("-")), e = p = n = void 0, 0 === g[1] ? (p = q, n = q.index) : 1 == g[1] && (e = q, n = q.index + 1), r in d || (d[r] = [e, p, n]), g = d[r], m(e) && (g[0] = e), m(p) && (g[1] = p), m(g[0]) && m(g[1])) {
+                    e = f;
+                    r = !1;
+                    p = n - 1;
+                    switch (h.M()) {
+                        case "MultiLineString":
+                            f[q.depth[0]].splice(n, 1);
+                            r = !0;
+                            break;
+                        case "LineString":
+                            f.splice(n, 1);
+                            r = !0;
+                            break;
+                        case "MultiPolygon":
+                            e = e[q.depth[1]];
+                        case "Polygon":
+                            e = e[q.depth[0]], 4 < e.length && (n == e.length - 1 && (n = 0), e.splice(n, 1), r = !0, 0 === n && (e.pop(), e.push(e[0]), p = e.length - 1))
+                    }
+                    r && (this.a.remove(g[0]), this.a.remove(g[1]), h.W(f), f = {
+                        depth: q.depth,
+                        feature: q.feature,
+                        geometry: q.geometry,
+                        index: p,
+                        aa: [g[0].aa[0], g[1].aa[1]]
+                    }, this.a.ha(Jd(f.aa), f), qy(this, h, n, q.depth, -1), this.n.Yd(this.f), this.f = null)
+                }
+            c = !0
+        }
+        return kk.call(this, a) && !c
+    }
+
+    function ny(a, c, d) {
+        function e(a, c) {
+            return td(f, a.aa) - td(f, c.aa)
+        }
+        var f = d.ka(c),
+            g = d.ka([c[0] - a.i, c[1] + a.i]),
+            h = d.ka([c[0] + a.i, c[1] - a.i]),
+            g = Jd([g, h]),
+            g = np(a.a, g);
+        if (0 < g.length) {
+            g.sort(e);
+            var h = g[0].aa,
+                k = nd(f, h),
+                n = d.ta(k);
+            if (Math.sqrt(sd(c, n)) <= a.i) {
+                c = d.ta(h[0]);
+                d = d.ta(h[1]);
+                c = sd(n, c);
+                d = sd(n, d);
+                a.N = Math.sqrt(Math.min(c, d)) <= a.i;
+                a.N && (k = c > d ? h[1] : h[0]);
+                oy(a, k);
+                d = {};
+                d[ma(h)] = !0;
+                c = 1;
+                for (n = g.length; c < n; ++c)
+                    if (k = g[c].aa, qd(h[0], k[0]) && qd(h[1], k[1]) || qd(h[0], k[1]) && qd(h[1], k[0])) d[ma(k)] = !0;
+                    else break;
+                a.T = d;
+                return
+            }
+        }
+        null !== a.f && (a.n.Yd(a.f), a.f = null)
+    }
+    l.qk = function(a, c) {
+        for (var d = a.aa, e = a.feature, f = a.geometry, g = a.depth, h = a.index, k; c.length < f.s;) c.push(0);
+        switch (f.M()) {
+            case "MultiLineString":
+                k = f.K();
+                k[g[0]].splice(h + 1, 0, c);
+                break;
+            case "Polygon":
+                k = f.K();
+                k[g[0]].splice(h + 1, 0, c);
+                break;
+            case "MultiPolygon":
+                k = f.K();
+                k[g[1]][g[0]].splice(h + 1, 0, c);
+                break;
+            case "LineString":
+                k = f.K();
+                k.splice(h + 1, 0, c);
+                break;
+            default:
+                return
+        }
+        f.W(k);
+        k = this.a;
+        k.remove(a);
+        qy(this, f, h, g, 1);
+        var n = {
+            aa: [d[0], c],
+            feature: e,
+            geometry: f,
+            depth: g,
+            index: h
+        };
+        k.ha(Jd(n.aa), n);
+        this.g.push([n, 1]);
+        d = {
+            aa: [c, d[1]],
+            feature: e,
+            geometry: f,
+            depth: g,
+            index: h + 1
+        };
+        k.ha(Jd(d.aa), d);
+        this.g.push([d, 0])
+    };
+
+    function qy(a, c, d, e, f) {
+        pp(a.a, c.G(), function(a) {
+            a.geometry === c && (!m(e) || ib(a.depth, e)) && a.index > d && (a.index += f)
+        })
+    }
+
+    function my() {
+        var a = Fl();
+        return function() {
+            return a.Point
+        }
+    };
+
+    function ry(a, c, d) {
+        rc.call(this, a);
+        this.selected = c;
+        this.deselected = d
+    }
+    w(ry, rc);
+
+    function sy(a) {
+        Wj.call(this, {
+            handleEvent: ty
+        });
+        a = m(a) ? a : {};
+        this.o = m(a.condition) ? a.condition : ek;
+        this.g = m(a.addCondition) ? a.addCondition : Fg;
+        this.H = m(a.removeCondition) ? a.removeCondition : Fg;
+        this.L = m(a.toggleCondition) ? a.toggleCondition : gk;
+        this.i = m(a.multi) ? a.multi : !1;
+        this.e = m(a.filter) ? a.filter : Gg;
+        var c;
+        if (m(a.layers))
+            if (ka(a.layers)) c = a.layers;
+            else {
+                var d = a.layers;
+                c = function(a) {
+                    return Ya(d, a)
+                }
+            }
+        else c = Gg;
+        this.f = c;
+        this.a = new ur({
+            style: m(a.style) ? a.style : uy()
+        });
+        a = this.a.b;
+        x(a, "add", this.n, !1, this);
+        x(a, "remove", this.J, !1, this)
+    }
+    w(sy, Wj);
+    sy.prototype.p = function() {
+        return this.a.b
+    };
+
+    function ty(a) {
+        if (!this.o(a)) return !0;
+        var c = this.g(a),
+            d = this.H(a),
+            e = this.L(a),
+            f = a.map,
+            g = this.a.b,
+            h = [],
+            k = [],
+            n = !1;
+        if (c || d || e) {
+            f.Ne(a.pixel, function(a, f) {
+                -1 == Ra(g.a, a) ? (c || e) && this.e(a, f) && k.push(a) : (d || e) && h.push(a)
+            }, this, this.f);
+            for (f = h.length - 1; 0 <= f; --f) g.remove(h[f]);
+            g.af(k);
+            if (0 < k.length || 0 < h.length) n = !0
+        } else f.Ne(a.pixel, function(a, c) {
+            if (this.e(a, c)) return k.push(a), !this.i
+        }, this, this.f), 0 < k.length && 1 == g.Ib() && g.item(0) == k[0] || (n = !0, 0 !== g.Ib() && (h = Array.prototype.concat(g.a), g.clear()), g.af(k));
+        n && this.dispatchEvent(new ry("select", k, h));
+        return dk(a)
+    }
+    sy.prototype.setMap = function(a) {
+        var c = this.l,
+            d = this.a.b;
+        null === c || d.forEach(c.Ih, c);
+        sy.S.setMap.call(this, a);
+        this.a.setMap(a);
+        null === a || d.forEach(a.Eh, a)
+    };
+
+    function uy() {
+        var a = Fl();
+        db(a.Polygon, a.LineString);
+        db(a.GeometryCollection, a.LineString);
+        return function(c) {
+            return a[c.Q().M()]
+        }
+    }
+    sy.prototype.n = function(a) {
+        a = a.element;
+        var c = this.l;
+        null === c || c.Eh(a)
+    };
+    sy.prototype.J = function(a) {
+        a = a.element;
+        var c = this.l;
+        null === c || c.Ih(a)
+    };
+
+    function vy(a) {
+        jk.call(this, {
+            handleEvent: wy,
+            handleDownEvent: Gg,
+            handleUpEvent: xy
+        });
+        a = m(a) ? a : {};
+        this.i = m(a.source) ? a.source : null;
+        this.g = m(a.features) ? a.features : null;
+        this.X = [];
+        this.p = {};
+        this.H = {};
+        this.N = {};
+        this.n = {};
+        this.L = null;
+        this.f = m(a.pixelTolerance) ? a.pixelTolerance : 10;
+        this.ba = ra(yy, this);
+        this.a = new lp;
+        this.T = {
+            Point: this.Il,
+            LineString: this.Gg,
+            LinearRing: this.Gg,
+            Polygon: this.Jl,
+            MultiPoint: this.Gl,
+            MultiLineString: this.Fl,
+            MultiPolygon: this.Hl,
+            GeometryCollection: this.El
+        }
+    }
+    w(vy, jk);
+    l = vy.prototype;
+    l.ed = function(a, c) {
+        var d = m(c) ? c : !0,
+            e = a.Q(),
+            f = this.T[e.M()];
+        if (m(f)) {
+            var g = ma(a);
+            this.N[g] = e.G(Kd());
+            f.call(this, a, e);
+            d && (this.H[g] = e.r("change", ra(this.Oj, this, a), this), this.p[g] = a.r(hd(a.a), this.Dl, this))
+        }
+    };
+    l.Hi = function(a) {
+        this.ed(a)
+    };
+    l.Ii = function(a) {
+        this.fd(a)
+    };
+    l.Eg = function(a) {
+        var c;
+        a instanceof up ? c = a.feature : a instanceof nf && (c = a.element);
+        this.ed(c)
+    };
+    l.Fg = function(a) {
+        var c;
+        a instanceof up ? c = a.feature : a instanceof nf && (c = a.element);
+        this.fd(c)
+    };
+    l.Dl = function(a) {
+        a = a.c;
+        this.fd(a, !0);
+        this.ed(a, !0)
+    };
+    l.Oj = function(a) {
+        if (this.o) {
+            var c = ma(a);
+            c in this.n || (this.n[c] = a)
+        } else this.Jh(a)
+    };
+    l.fd = function(a, c) {
+        var d = m(c) ? c : !0,
+            e = ma(a),
+            f = this.N[e];
+        if (f) {
+            var g = this.a,
+                h = [];
+            pp(g, f, function(c) {
+                a === c.feature && h.push(c)
+            });
+            for (f = h.length - 1; 0 <= f; --f) g.remove(h[f]);
+            d && (Wc(this.H[e]), delete this.H[e], Wc(this.p[e]), delete this.p[e])
+        }
+    };
+    l.setMap = function(a) {
+        var c = this.l,
+            d = this.X,
+            e;
+        null === this.g ? null === this.i || (e = this.i.Dc()) : e = this.g;
+        c && (Sa(d, dd), d.length = 0, e.forEach(this.Ii, this));
+        vy.S.setMap.call(this, a);
+        a && (null !== this.g ? (d.push(this.g.r("add", this.Eg, this)), d.push(this.g.r("remove", this.Fg, this))) : null !== this.i && (d.push(this.i.r("addfeature", this.Eg, this)), d.push(this.i.r("removefeature", this.Fg, this))), e.forEach(this.Hi, this))
+    };
+    l.nc = Fg;
+    l.Jh = function(a) {
+        this.fd(a, !1);
+        this.ed(a, !1)
+    };
+    l.El = function(a, c) {
+        var d, e = c.d;
+        for (d = 0; d < e.length; ++d) this.T[e[d].M()].call(this, a, e[d])
+    };
+    l.Gg = function(a, c) {
+        var d = c.K(),
+            e, f, g, h;
+        e = 0;
+        for (f = d.length - 1; e < f; ++e) g = d.slice(e, e + 2), h = {
+            feature: a,
+            aa: g
+        }, this.a.ha(Jd(g), h)
+    };
+    l.Fl = function(a, c) {
+        var d = c.K(),
+            e, f, g, h, k, n, p;
+        h = 0;
+        for (k = d.length; h < k; ++h)
+            for (e = d[h], f = 0, g = e.length - 1; f < g; ++f) n = e.slice(f, f + 2), p = {
+                feature: a,
+                aa: n
+            }, this.a.ha(Jd(n), p)
+    };
+    l.Gl = function(a, c) {
+        var d = c.K(),
+            e, f, g;
+        f = 0;
+        for (g = d.length; f < g; ++f) e = d[f], e = {
+            feature: a,
+            aa: [e, e]
+        }, this.a.ha(c.G(), e)
+    };
+    l.Hl = function(a, c) {
+        var d = c.K(),
+            e, f, g, h, k, n, p, q, r, t;
+        n = 0;
+        for (p = d.length; n < p; ++n)
+            for (q = d[n], h = 0, k = q.length; h < k; ++h)
+                for (e = q[h], f = 0, g = e.length - 1; f < g; ++f) r = e.slice(f, f + 2), t = {
+                    feature: a,
+                    aa: r
+                }, this.a.ha(Jd(r), t)
+    };
+    l.Il = function(a, c) {
+        var d = c.K(),
+            d = {
+                feature: a,
+                aa: [d, d]
+            };
+        this.a.ha(c.G(), d)
+    };
+    l.Jl = function(a, c) {
+        var d = c.K(),
+            e, f, g, h, k, n, p;
+        h = 0;
+        for (k = d.length; h < k; ++h)
+            for (e = d[h], f = 0, g = e.length - 1; f < g; ++f) n = e.slice(f, f + 2), p = {
+                feature: a,
+                aa: n
+            }, this.a.ha(Jd(n), p)
+    };
+
+    function wy(a) {
+        var c, d, e = a.pixel,
+            f = a.coordinate;
+        c = a.map;
+        var g = c.ka([e[0] - this.f, e[1] + this.f]);
+        d = c.ka([e[0] + this.f, e[1] - this.f]);
+        var g = Jd([g, d]),
+            h = np(this.a, g),
+            k = !1,
+            g = !1,
+            n = null;
+        d = null;
+        0 < h.length && (this.L = f, h.sort(this.ba), h = h[0].aa, n = nd(f, h), d = c.ta(n), Math.sqrt(sd(e, d)) <= this.f && (g = !0, e = c.ta(h[0]), f = c.ta(h[1]), e = sd(d, e), f = sd(d, f), k = Math.sqrt(Math.min(e, f)) <= this.f)) && (n = e > f ? h[1] : h[0], d = c.ta(n), d = [Math.round(d[0]), Math.round(d[1])]);
+        c = n;
+        g && (a.coordinate = c.slice(0, 2), a.pixel = d);
+        return kk.call(this, a)
+    }
+
+    function xy() {
+        var a = sb(this.n);
+        a.length && (Sa(a, this.Jh, this), this.n = {});
+        return !1
+    }
+
+    function yy(a, c) {
+        return td(this.L, a.aa) - td(this.L, c.aa)
+    };
+
+    function Z(a) {
+        a = m(a) ? a : {};
+        var c = Db(a);
+        delete c.gradient;
+        delete c.radius;
+        delete c.blur;
+        delete c.shadow;
+        delete c.weight;
+        M.call(this, c);
+        this.d = null;
+        this.L = m(a.shadow) ? a.shadow : 250;
+        this.p = void 0;
+        this.l = null;
+        x(this, hd("gradient"), this.Pj, !1, this);
+        this.yh(m(a.gradient) ? a.gradient : zy);
+        this.th(m(a.blur) ? a.blur : 15);
+        this.Ig(m(a.radius) ? a.radius : 8);
+        x(this, [hd("blur"), hd("radius")], this.hg, !1, this);
+        this.hg();
+        var d = m(a.weight) ? a.weight : "weight",
+            e;
+        ia(d) ? e = function(a) {
+            return a.get(d)
+        } : e = d;
+        this.e(ra(function(a) {
+            a = e(a);
+            a = m(a) ? Vb(a, 0, 1) : 1;
+            var c = 255 * a | 0,
+                d = this.l[c];
+            m(d) || (d = [new Bl({
+                image: new Fj({
+                    opacity: a,
+                    src: this.p
+                })
+            })], this.l[c] = d);
+            return d
+        }, this));
+        this.set("renderOrder", null);
+        x(this, "render", this.hk, !1, this)
+    }
+    w(Z, M);
+    var zy = ["#00f", "#0ff", "#0f0", "#ff0", "#f00"];
+    l = Z.prototype;
+    l.Sf = function() {
+        return this.get("blur")
+    };
+    l.Wf = function() {
+        return this.get("gradient")
+    };
+    l.Hg = function() {
+        return this.get("radius")
+    };
+    l.Pj = function() {
+        for (var a = this.Wf(), c = ai(1, 256), d = c.createLinearGradient(0, 0, 1, 256), e = 1 / (a.length - 1), f = 0, g = a.length; f < g; ++f) d.addColorStop(f * e, a[f]);
+        c.fillStyle = d;
+        c.fillRect(0, 0, 1, 256);
+        this.d = c.getImageData(0, 0, 1, 256).data
+    };
+    l.hg = function() {
+        var a = this.Hg(),
+            c = this.Sf(),
+            d = a + c + 1,
+            e = 2 * d,
+            e = ai(e, e);
+        e.shadowOffsetX = e.shadowOffsetY = this.L;
+        e.shadowBlur = c;
+        e.shadowColor = "#000";
+        e.beginPath();
+        c = d - this.L;
+        e.arc(c, c, a, 0, 2 * Math.PI, !0);
+        e.fill();
+        this.p = e.canvas.toDataURL();
+        this.l = Array(256);
+        this.k()
+    };
+    l.hk = function(a) {
+        a = a.context;
+        var c = a.canvas,
+            c = a.getImageData(0, 0, c.width, c.height),
+            d = c.data,
+            e, f, g;
+        e = 0;
+        for (f = d.length; e < f; e += 4)
+            if (g = 4 * d[e + 3]) d[e] = this.d[g], d[e + 1] = this.d[g + 1], d[e + 2] = this.d[g + 2];
+        a.putImageData(c, 0, 0)
+    };
+    l.th = function(a) {
+        this.set("blur", a)
+    };
+    l.yh = function(a) {
+        this.set("gradient", a)
+    };
+    l.Ig = function(a) {
+        this.set("radius", a)
+    };
+
+    function Ay(a, c) {
+        var d = c || {},
+            e = d.document || document,
+            f = Mf("SCRIPT"),
+            g = {
+                sh: f,
+                oc: void 0
+            },
+            h = new ux(By, g),
+            k = null,
+            n = null != d.timeout ? d.timeout : 5E3;
+        0 < n && (k = window.setTimeout(function() {
+            Cy(f, !0);
+            var c = new Dy(Ey, "Timeout reached for loading script " + a);
+            wx(h);
+            xx(h, !1, c)
+        }, n), g.oc = k);
+        f.onload = f.onreadystatechange = function() {
+            f.readyState && "loaded" != f.readyState && "complete" != f.readyState || (Cy(f, d.Bi || !1, k), wx(h), xx(h, !0, null))
+        };
+        f.onerror = function() {
+            Cy(f, !0, k);
+            var c = new Dy(Fy, "Error while loading script " + a);
+            wx(h);
+            xx(h, !1, c)
+        };
+        Gf(f, {
+            type: "text/javascript",
+            charset: "UTF-8",
+            src: a
+        });
+        Gy(e).appendChild(f);
+        return h
+    }
+
+    function Gy(a) {
+        var c = a.getElementsByTagName("HEAD");
+        return c && 0 != c.length ? c[0] : a.documentElement
+    }
+
+    function By() {
+        if (this && this.sh) {
+            var a = this.sh;
+            a && "SCRIPT" == a.tagName && Cy(a, !0, this.oc)
+        }
+    }
+
+    function Cy(a, c, d) {
+        null != d && ba.clearTimeout(d);
+        a.onload = ca;
+        a.onerror = ca;
+        a.onreadystatechange = ca;
+        c && window.setTimeout(function() {
+            Qf(a)
+        }, 0)
+    }
+    var Fy = 0,
+        Ey = 1;
+
+    function Dy(a, c) {
+        var d = "Jsloader error (code #" + a + ")";
+        c && (d += ": " + c);
+        xa.call(this, d);
+        this.code = a
+    }
+    w(Dy, xa);
+
+    function Hy(a, c) {
+        this.a = new at(a);
+        this.b = c ? c : "callback";
+        this.oc = 5E3
+    }
+    var Iy = 0;
+    Hy.prototype.send = function(a, c, d, e) {
+        a = a || null;
+        e = e || "_" + (Iy++).toString(36) + ua().toString(36);
+        ba._callbacks_ || (ba._callbacks_ = {});
+        var f = this.a.clone();
+        if (a)
+            for (var g in a)
+                if (!a.hasOwnProperty || a.hasOwnProperty(g)) {
+                    var h = f,
+                        k = g,
+                        n = a[g];
+                    ga(n) || (n = [String(n)]);
+                    tt(h.b, k, n)
+                }
+        c && (ba._callbacks_[e] = Jy(e, c), c = this.b, g = "_callbacks_." + e, ga(g) || (g = [String(g)]), tt(f.b, c, g));
+        c = Ay(f.toString(), {
+            timeout: this.oc,
+            Bi: !0
+        });
+        Ax(c, null, Ky(e, a, d), void 0);
+        return {
+            $: e,
+            Of: c
+        }
+    };
+    Hy.prototype.cancel = function(a) {
+        a && (a.Of && a.Of.cancel(), a.$ && Ly(a.$, !1))
+    };
+
+    function Ky(a, c, d) {
+        return function() {
+            Ly(a, !1);
+            d && d(c)
+        }
+    }
+
+    function Jy(a, c) {
+        return function(d) {
+            Ly(a, !0);
+            c.apply(void 0, arguments)
+        }
+    }
+
+    function Ly(a, c) {
+        ba._callbacks_[a] && (c ? delete ba._callbacks_[a] : ba._callbacks_[a] = ca)
+    };
+
+    function My(a) {
+        var c = /\{z\}/g,
+            d = /\{x\}/g,
+            e = /\{y\}/g,
+            f = /\{-y\}/g;
+        return function(g) {
+            return null === g ? void 0 : a.replace(c, g[0].toString()).replace(d, g[1].toString()).replace(e, g[2].toString()).replace(f, function() {
+                return ((1 << g[0]) - g[2] - 1).toString()
+            })
+        }
+    }
+
+    function Ny(a) {
+        return Oy(Ua(a, My))
+    }
+
+    function Oy(a) {
+        return 1 === a.length ? a[0] : function(c, d, e) {
+            return null === c ? void 0 : a[Wb((c[1] << c[0]) + c[2], a.length)](c, d, e)
+        }
+    }
+
+    function Py() {}
+
+    function Qy(a, c) {
+        var d = [0, 0, 0];
+        return function(e, f, g) {
+            return null === e ? void 0 : c(a(e, g, d), f, g)
+        }
+    }
+
+    function Ry(a) {
+        var c = [],
+            d = /\{(\d)-(\d)\}/.exec(a) || /\{([a-z])-([a-z])\}/.exec(a);
+        if (d) {
+            var e = d[2].charCodeAt(0),
+                f;
+            for (f = d[1].charCodeAt(0); f <= e; ++f) c.push(a.replace(d[0], String.fromCharCode(f)))
+        } else c.push(a);
+        return c
+    };
+
+    function Sy(a) {
+        Zg.call(this, {
+            attributions: a.attributions,
+            extent: a.extent,
+            logo: a.logo,
+            opaque: a.opaque,
+            projection: a.projection,
+            state: m(a.state) ? a.state : void 0,
+            tileGrid: a.tileGrid,
+            tilePixelRatio: a.tilePixelRatio,
+            wrapX: a.wrapX
+        });
+        this.tileUrlFunction = m(a.tileUrlFunction) ? a.tileUrlFunction : Py;
+        this.crossOrigin = m(a.crossOrigin) ? a.crossOrigin : null;
+        this.tileLoadFunction = m(a.tileLoadFunction) ? a.tileLoadFunction : Ty;
+        this.tileClass = m(a.tileClass) ? a.tileClass : px
+    }
+    w(Sy, Zg);
+
+    function Ty(a, c) {
+        a.Ma().src = c
+    }
+    l = Sy.prototype;
+    l.Vb = function(a, c, d, e, f) {
+        var g = this.bb(a, c, d);
+        if (wg(this.a, g)) return this.a.get(g);
+        a = [a, c, d];
+        c = m(f) ? f : this.f;
+        d = ah(this, c);
+        var h = this.H,
+            k;
+        if (k = m(h)) {
+            k = a[0];
+            var n = Wg(d, k);
+            if (m(n)) {
+                var p = Xg(c),
+                    q = c.G();
+                k = ld(d.na(k), d.a)[0] * n == p.na(k) * kf(Pg(p, q, k))
+            } else k = c.e
+        }
+        k ? h ? (h = a[0], k = a[1], c = Ug(d, h, c), k < c.b || k > c.d ? (k = Wb(k, kf(c)), c = [h, k, a[2]]) : c = a) : (h = a[1], c = Ug(d, a[0], c), c = h < c.b || h > c.d ? null : a) : c = a;
+        e = null === c ? void 0 : this.tileUrlFunction(c, e, f);
+        e = new this.tileClass(a, m(e) ? 0 : 4, m(e) ? e : "", this.crossOrigin, this.tileLoadFunction);
+        x(e, "change", this.nm, !1, this);
+        this.a.set(g, e);
+        return e
+    };
+    l.Ua = function() {
+        return this.tileLoadFunction
+    };
+    l.Va = function() {
+        return this.tileUrlFunction
+    };
+    l.nm = function(a) {
+        a = a.target;
+        switch (a.state) {
+            case 1:
+                this.dispatchEvent(new bh("tileloadstart", a));
+                break;
+            case 2:
+                this.dispatchEvent(new bh("tileloadend", a));
+                break;
+            case 3:
+                this.dispatchEvent(new bh("tileloaderror", a))
+        }
+    };
+    l.$a = function(a) {
+        this.a.clear();
+        this.tileLoadFunction = a;
+        this.k()
+    };
+    l.pa = function(a) {
+        this.a.clear();
+        this.tileUrlFunction = a;
+        this.k()
+    };
+    l.yf = function(a, c, d) {
+        a = this.bb(a, c, d);
+        wg(this.a, a) && this.a.get(a)
+    };
+
+    function Uy(a) {
+        var c = m(a.extent) ? a.extent : Xl,
+            d;
+        m(a.tileSize) && (d = ld(a.tileSize));
+        d = Yg(c, a.maxZoom, d);
+        Mg.call(this, {
+            minZoom: a.minZoom,
+            origin: de(c, "top-left"),
+            resolutions: d,
+            tileSize: a.tileSize
+        })
+    }
+    w(Uy, Mg);
+    Uy.prototype.yb = function(a) {
+        a = m(a) ? a : {};
+        var c = this.minZoom,
+            d = this.maxZoom,
+            e = null;
+        if (m(a.extent)) {
+            var e = Array(d + 1),
+                f;
+            for (f = 0; f <= d; ++f) e[f] = f < c ? null : Pg(this, a.extent, f)
+        }
+        return function(a, f, k) {
+            f = a[0];
+            if (f < c || d < f) return null;
+            var n = a[1];
+            a = a[2];
+            return a < -Math.pow(2, f) || -1 < a || null !== e && !hf(e[f], n, a) ? null : bf(f, n, -a - 1, k)
+        }
+    };
+    Uy.prototype.Ld = function(a, c) {
+        if (a[0] < this.maxZoom) {
+            var d = 2 * a[1],
+                e = 2 * a[2];
+            return gf(d, d + 1, e, e + 1, c)
+        }
+        return null
+    };
+    Uy.prototype.Ad = function(a, c, d, e) {
+        e = gf(0, a[1], 0, a[2], e);
+        for (a = a[0] - 1; a >= this.minZoom; --a)
+            if (e.b = e.d >>= 1, e.c = e.a >>= 1, c.call(d, a, e)) return !0;
+        return !1
+    };
+
+    function Vy(a) {
+        Sy.call(this, {
+            crossOrigin: "anonymous",
+            opaque: !0,
+            projection: re("EPSG:3857"),
+            state: "loading",
+            tileLoadFunction: a.tileLoadFunction,
+            wrapX: m(a.wrapX) ? a.wrapX : !0
+        });
+        this.g = m(a.culture) ? a.culture : "en-us";
+        this.e = m(a.maxZoom) ? a.maxZoom : -1;
+        var c = new at("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/" + a.imagerySet);
+        (new Hy(c, "jsonp")).send({
+            include: "ImageryProviders",
+            uriScheme: "https",
+            key: a.key
+        }, ra(this.i, this))
+    }
+    w(Vy, Sy);
+    var Wy = new mf({
+        html: '<a class="ol-attribution-bing-tos" href="http://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'
+    });
+    Vy.prototype.i = function(a) {
+        if (200 != a.statusCode || "OK" != a.statusDescription || "ValidCredentials" != a.authenticationResultCode || 1 != a.resourceSets.length || 1 != a.resourceSets[0].resources.length) Dg(this, "error");
+        else {
+            var c = a.brandLogoUri; - 1 == c.indexOf("https") && (c = c.replace("http", "https"));
+            var d = a.resourceSets[0].resources[0],
+                e = -1 == this.e ? d.zoomMax : this.e,
+                f = new Uy({
+                    extent: Vg(this.f),
+                    minZoom: d.zoomMin,
+                    maxZoom: e,
+                    tileSize: d.imageWidth == d.imageHeight ? d.imageWidth : [d.imageWidth, d.imageHeight]
+                });
+            this.tileGrid = f;
+            var g = this.g;
+            this.tileUrlFunction = Qy(f.yb(), Oy(Ua(d.imageUrlSubdomains, function(a) {
+                var c = d.imageUrl.replace("{subdomain}", a).replace("{culture}", g);
+                return function(a) {
+                    return null === a ? void 0 : c.replace("{quadkey}", df(a))
+                }
+            })));
+            if (d.imageryProviders) {
+                var h = ve(re("EPSG:4326"), this.f);
+                a = Ua(d.imageryProviders, function(a) {
+                    var c = a.attribution,
+                        d = {};
+                    Sa(a.coverageAreas, function(a) {
+                        var c = a.zoomMin,
+                            g = Math.min(a.zoomMax, e);
+                        a = a.bbox;
+                        a = le([a[1], a[0], a[3], a[2]], h);
+                        var k, n;
+                        for (k = c; k <= g; ++k) n = k.toString(), c = Pg(f, a, k), n in d ? d[n].push(c) : d[n] = [c]
+                    });
+                    return new mf({
+                        html: c,
+                        tileRanges: d
+                    })
+                });
+                a.push(Wy);
+                this.d = a
+            }
+            this.L = c;
+            Dg(this, "ready")
+        }
+    };
+
+    function Xy(a) {
+        qp.call(this, {
+            attributions: a.attributions,
+            extent: a.extent,
+            logo: a.logo,
+            projection: a.projection
+        });
+        this.p = void 0;
+        this.T = m(a.distance) ? a.distance : 20;
+        this.n = [];
+        this.l = a.source;
+        this.l.r("change", Xy.prototype.ba, this)
+    }
+    w(Xy, qp);
+    Xy.prototype.X = function() {
+        return this.l
+    };
+    Xy.prototype.ac = function(a, c, d) {
+        c !== this.p && (this.clear(), this.p = c, this.l.ac(a, c, d), Yy(this), this.Oc(this.n))
+    };
+    Xy.prototype.ba = function() {
+        this.clear();
+        Yy(this);
+        this.Oc(this.n);
+        this.k()
+    };
+
+    function Yy(a) {
+        if (m(a.p)) {
+            a.n.length = 0;
+            for (var c = Kd(), d = a.T * a.p, e = a.l.Dc(), f = {}, g = 0, h = e.length; g < h; g++) {
+                var k = e[g];
+                ub(f, ma(k).toString()) || (k = k.Q().K(), Ud(k, c), Od(c, d, c), k = a.l.Se(c), k = Ta(k, function(a) {
+                    a = ma(a).toString();
+                    return a in f ? !1 : f[a] = !0
+                }), a.n.push(Zy(k)))
+            }
+        }
+    }
+
+    function Zy(a) {
+        for (var c = a.length, d = [0, 0], e = 0; e < c; e++) {
+            var f = a[e].Q().K();
+            md(d, f)
+        }
+        c = 1 / c;
+        d[0] *= c;
+        d[1] *= c;
+        d = new X(new E(d));
+        d.set("features", a);
+        return d
+    };
+
+    function $y(a) {
+        jn.call(this, {
+            projection: a.projection,
+            resolutions: a.resolutions
+        });
+        this.T = m(a.crossOrigin) ? a.crossOrigin : null;
+        this.g = m(a.displayDpi) ? a.displayDpi : 96;
+        this.e = m(a.params) ? a.params : {};
+        var c;
+        m(a.url) ? c = rx(a.url, this.e, ra(this.Ul, this)) : c = sx;
+        this.J = c;
+        this.a = m(a.imageLoadFunction) ? a.imageLoadFunction : pn;
+        this.X = m(a.hidpi) ? a.hidpi : !0;
+        this.N = m(a.metersPerUnit) ? a.metersPerUnit : 1;
+        this.n = m(a.ratio) ? a.ratio : 1;
+        this.ba = m(a.useOverlay) ? a.useOverlay : !1;
+        this.c = null;
+        this.p = 0
+    }
+    w($y, jn);
+    l = $y.prototype;
+    l.Tl = function() {
+        return this.e
+    };
+    l.Cc = function(a, c, d, e) {
+        c = kn(this, c);
+        d = this.X ? d : 1;
+        var f = this.c;
+        if (null !== f && this.p == this.b && f.resolution == c && f.e == d && Rd(f.G(), a)) return f;
+        1 != this.n && (a = a.slice(), ke(a, this.n));
+        e = this.J(a, [ie(a) / c * d, fe(a) / c * d], e);
+        m(e) ? (f = new ox(a, c, d, this.d, e, this.T, this.a), x(f, "change", this.i, !1, this)) : f = null;
+        this.c = f;
+        this.p = this.b;
+        return f
+    };
+    l.Sl = function() {
+        return this.a
+    };
+    l.Wl = function(a) {
+        Fb(this.e, a);
+        this.k()
+    };
+    l.Ul = function(a, c, d, e) {
+        var f;
+        f = this.N;
+        var g = ie(d),
+            h = fe(d),
+            k = e[0],
+            n = e[1],
+            p = .0254 / this.g;
+        f = n * g > k * h ? g * f / (k * p) : h * f / (n * p);
+        d = ce(d);
+        e = {
+            OPERATION: this.ba ? "GETDYNAMICMAPOVERLAYIMAGE" : "GETMAPIMAGE",
+            VERSION: "2.0.0",
+            LOCALE: "en",
+            CLIENTAGENT: "ol.source.ImageMapGuide source",
+            CLIP: "1",
+            SETDISPLAYDPI: this.g,
+            SETDISPLAYWIDTH: Math.round(e[0]),
+            SETDISPLAYHEIGHT: Math.round(e[1]),
+            SETVIEWSCALE: f,
+            SETVIEWCENTERX: d[0],
+            SETVIEWCENTERY: d[1]
+        };
+        Fb(e, c);
+        return ao(co([a], e))
+    };
+    l.Vl = function(a) {
+        this.c = null;
+        this.a = a;
+        this.k()
+    };
+
+    function az(a) {
+        var c = m(a.attributions) ? a.attributions : null,
+            d = a.imageExtent,
+            e, f;
+        m(a.imageSize) && (e = fe(d) / a.imageSize[1], f = [e]);
+        var g = m(a.crossOrigin) ? a.crossOrigin : null,
+            h = m(a.imageLoadFunction) ? a.imageLoadFunction : pn;
+        jn.call(this, {
+            attributions: c,
+            logo: a.logo,
+            projection: re(a.projection),
+            resolutions: f
+        });
+        this.a = new ox(d, e, 1, c, a.url, g, h);
+        x(this.a, "change", this.i, !1, this)
+    }
+    w(az, jn);
+    az.prototype.Cc = function(a) {
+        return he(a, this.a.G()) ? this.a : null
+    };
+
+    function bz(a) {
+        a = m(a) ? a : {};
+        jn.call(this, {
+            attributions: a.attributions,
+            logo: a.logo,
+            projection: a.projection,
+            resolutions: a.resolutions
+        });
+        this.X = m(a.crossOrigin) ? a.crossOrigin : null;
+        this.e = a.url;
+        this.n = m(a.imageLoadFunction) ? a.imageLoadFunction : pn;
+        this.c = a.params;
+        this.g = !0;
+        cz(this);
+        this.T = a.serverType;
+        this.ba = m(a.hidpi) ? a.hidpi : !0;
+        this.a = null;
+        this.p = [0, 0];
+        this.N = 0;
+        this.J = m(a.ratio) ? a.ratio : 1.5
+    }
+    w(bz, jn);
+    var dz = [101, 101];
+    l = bz.prototype;
+    l.bm = function(a, c, d, e) {
+        if (m(this.e)) {
+            var f = ee(a, c, 0, dz),
+                g = {
+                    SERVICE: "WMS",
+                    VERSION: "1.3.0",
+                    REQUEST: "GetFeatureInfo",
+                    FORMAT: "image/png",
+                    TRANSPARENT: !0,
+                    QUERY_LAYERS: this.c.LAYERS
+                };
+            Fb(g, this.c, e);
+            e = Math.floor((f[3] - a[1]) / c);
+            g[this.g ? "I" : "X"] = Math.floor((a[0] - f[0]) / c);
+            g[this.g ? "J" : "Y"] = e;
+            return ez(this, f, dz, 1, re(d), g)
+        }
+    };
+    l.dm = function() {
+        return this.c
+    };
+    l.Cc = function(a, c, d, e) {
+        if (!m(this.e)) return null;
+        c = kn(this, c);
+        1 == d || this.ba && m(this.T) || (d = 1);
+        var f = this.a;
+        if (null !== f && this.N == this.b && f.resolution == c && f.e == d && Rd(f.G(), a)) return f;
+        f = {
+            SERVICE: "WMS",
+            VERSION: "1.3.0",
+            REQUEST: "GetMap",
+            FORMAT: "image/png",
+            TRANSPARENT: !0
+        };
+        Fb(f, this.c);
+        a = a.slice();
+        var g = (a[0] + a[2]) / 2,
+            h = (a[1] + a[3]) / 2;
+        if (1 != this.J) {
+            var k = this.J * ie(a) / 2,
+                n = this.J * fe(a) / 2;
+            a[0] = g - k;
+            a[1] = h - n;
+            a[2] = g + k;
+            a[3] = h + n
+        }
+        var k = c / d,
+            n = Math.ceil(ie(a) / k),
+            p = Math.ceil(fe(a) / k);
+        a[0] = g - k * n / 2;
+        a[2] = g + k * n / 2;
+        a[1] = h - k * p / 2;
+        a[3] = h + k * p / 2;
+        this.p[0] = n;
+        this.p[1] = p;
+        e = ez(this, a, this.p, d, e, f);
+        this.a = new ox(a, c, d, this.d, e, this.X, this.n);
+        this.N = this.b;
+        x(this.a, "change", this.i, !1, this);
+        return this.a
+    };
+    l.cm = function() {
+        return this.n
+    };
+
+    function ez(a, c, d, e, f, g) {
+        g[a.g ? "CRS" : "SRS"] = f.b;
+        "STYLES" in a.c || (g.STYLES = new String(""));
+        if (1 != e) switch (a.T) {
+            case "geoserver":
+                e = 90 * e + .5 | 0;
+                g.FORMAT_OPTIONS = m(g.FORMAT_OPTIONS) ? g.FORMAT_OPTIONS + (";dpi:" + e) : "dpi:" + e;
+                break;
+            case "mapserver":
+                g.MAP_RESOLUTION = 90 * e;
+                break;
+            case "carmentaserver":
+            case "qgis":
+                g.DPI = 90 * e
+        }
+        g.WIDTH = d[0];
+        g.HEIGHT = d[1];
+        d = f.d;
+        var h;
+        a.g && "ne" == d.substr(0, 2) ? h = [c[1], c[0], c[3], c[2]] : h = c;
+        g.BBOX = h.join(",");
+        return ao(co([a.e], g))
+    }
+    l.em = function() {
+        return this.e
+    };
+    l.fm = function(a) {
+        this.a = null;
+        this.n = a;
+        this.k()
+    };
+    l.gm = function(a) {
+        a != this.e && (this.e = a, this.a = null, this.k())
+    };
+    l.hm = function(a) {
+        Fb(this.c, a);
+        cz(this);
+        this.a = null;
+        this.k()
+    };
+
+    function cz(a) {
+        a.g = 0 <= Na(Ab(a.c, "VERSION", "1.3.0"), "1.3")
+    };
+
+    function fz(a) {
+        var c = m(a.projection) ? a.projection : "EPSG:3857",
+            d = new Uy({
+                extent: Vg(c),
+                maxZoom: a.maxZoom,
+                tileSize: a.tileSize
+            });
+        Sy.call(this, {
+            attributions: a.attributions,
+            crossOrigin: a.crossOrigin,
+            logo: a.logo,
+            projection: c,
+            tileGrid: d,
+            tileLoadFunction: a.tileLoadFunction,
+            tilePixelRatio: a.tilePixelRatio,
+            tileUrlFunction: Py,
+            wrapX: m(a.wrapX) ? a.wrapX : !0
+        });
+        this.l = d.yb();
+        m(a.tileUrlFunction) ? this.pa(a.tileUrlFunction) : m(a.urls) ? this.pa(Ny(a.urls)) : m(a.url) && this.e(a.url)
+    }
+    w(fz, Sy);
+    fz.prototype.pa = function(a) {
+        fz.S.pa.call(this, Qy(this.l, a))
+    };
+    fz.prototype.e = function(a) {
+        this.pa(Ny(Ry(a)))
+    };
+
+    function gz(a) {
+        a = m(a) ? a : {};
+        var c;
+        m(a.attributions) ? c = a.attributions : c = [hz];
+        fz.call(this, {
+            attributions: c,
+            crossOrigin: m(a.crossOrigin) ? a.crossOrigin : "anonymous",
+            opaque: !0,
+            maxZoom: m(a.maxZoom) ? a.maxZoom : 19,
+            tileLoadFunction: a.tileLoadFunction,
+            url: m(a.url) ? a.url : "https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",
+            wrapX: a.wrapX
+        })
+    }
+    w(gz, fz);
+    var hz = new mf({
+        html: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'
+    });
+
+    function iz(a) {
+        a = m(a) ? a : {};
+        var c = jz[a.layer];
+        this.g = a.layer;
+        fz.call(this, {
+            attributions: c.attributions,
+            crossOrigin: "anonymous",
+            logo: "https://developer.mapquest.com/content/osm/mq_logo.png",
+            maxZoom: c.maxZoom,
+            opaque: !0,
+            tileLoadFunction: a.tileLoadFunction,
+            url: m(a.url) ? a.url : "https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/" + this.g + "/{z}/{x}/{y}.jpg"
+        })
+    }
+    w(iz, fz);
+    var kz = new mf({
+            html: 'Tiles Courtesy of <a href="http://www.mapquest.com/">MapQuest</a>'
+        }),
+        jz = {
+            osm: {
+                maxZoom: 19,
+                attributions: [kz, hz]
+            },
+            sat: {
+                maxZoom: 18,
+                attributions: [kz, new mf({
+                    html: "Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"
+                })]
+            },
+            hyb: {
+                maxZoom: 18,
+                attributions: [kz, hz]
+            }
+        };
+    iz.prototype.i = function() {
+        return this.g
+    };
+    var lz = {
+            terrain: {
+                Ta: "jpg",
+                opaque: !0
+            },
+            "terrain-background": {
+                Ta: "jpg",
+                opaque: !0
+            },
+            "terrain-labels": {
+                Ta: "png",
+                opaque: !1
+            },
+            "terrain-lines": {
+                Ta: "png",
+                opaque: !1
+            },
+            "toner-background": {
+                Ta: "png",
+                opaque: !0
+            },
+            toner: {
+                Ta: "png",
+                opaque: !0
+            },
+            "toner-hybrid": {
+                Ta: "png",
+                opaque: !1
+            },
+            "toner-labels": {
+                Ta: "png",
+                opaque: !1
+            },
+            "toner-lines": {
+                Ta: "png",
+                opaque: !1
+            },
+            "toner-lite": {
+                Ta: "png",
+                opaque: !0
+            },
+            watercolor: {
+                Ta: "jpg",
+                opaque: !0
+            }
+        },
+        mz = {
+            terrain: {
+                minZoom: 4,
+                maxZoom: 18
+            },
+            toner: {
+                minZoom: 0,
+                maxZoom: 20
+            },
+            watercolor: {
+                minZoom: 3,
+                maxZoom: 16
+            }
+        };
+
+    function nz(a) {
+        var c = a.layer.indexOf("-"),
+            d = lz[a.layer];
+        fz.call(this, {
+            attributions: oz,
+            crossOrigin: "anonymous",
+            maxZoom: mz[-1 == c ? a.layer : a.layer.slice(0, c)].maxZoom,
+            opaque: d.opaque,
+            tileLoadFunction: a.tileLoadFunction,
+            url: m(a.url) ? a.url : "https://stamen-tiles-{a-d}.a.ssl.fastly.net/" + a.layer + "/{z}/{x}/{y}." + d.Ta
+        })
+    }
+    w(nz, fz);
+    var oz = [new mf({
+        html: 'Map tiles by <a href="http://stamen.com/">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.'
+    }), hz];
+
+    function pz(a) {
+        a = m(a) ? a : {};
+        var c = m(a.params) ? a.params : {};
+        Sy.call(this, {
+            attributions: a.attributions,
+            logo: a.logo,
+            projection: a.projection,
+            tileGrid: a.tileGrid,
+            tileLoadFunction: a.tileLoadFunction,
+            tileUrlFunction: ra(this.lm, this),
+            wrapX: m(a.wrapX) ? a.wrapX : !0
+        });
+        var d = a.urls;
+        !m(d) && m(a.url) && (d = Ry(a.url));
+        this.g = null != d ? d : [];
+        this.e = c;
+        this.i = Kd()
+    }
+    w(pz, Sy);
+    l = pz.prototype;
+    l.im = function() {
+        return this.e
+    };
+    l.Xb = function(a, c, d) {
+        a = pz.S.Xb.call(this, a, c, d);
+        return 1 == c ? a : kd(a, c, this.c)
+    };
+    l.jm = function() {
+        return this.g
+    };
+    l.km = function(a) {
+        a = m(a) ? Ry(a) : null;
+        this.Ng(a)
+    };
+    l.Ng = function(a) {
+        this.g = null != a ? a : [];
+        this.k()
+    };
+    l.lm = function(a, c, d) {
+        var e = this.tileGrid;
+        null === e && (e = ah(this, d));
+        if (!(e.b.length <= a[0])) {
+            var f = Og(e, a, this.i),
+                g = ld(e.na(a[0]), this.c);
+            1 != c && (g = kd(g, c, this.c));
+            e = {
+                F: "image",
+                FORMAT: "PNG32",
+                TRANSPARENT: !0
+            };
+            Fb(e, this.e);
+            var h = this.g;
+            0 == h.length ? a = void 0 : (d = d.b.split(":").pop(), e.SIZE = g[0] + "," + g[1], e.BBOX = f.join(","), e.BBOXSR = d, e.IMAGESR = d, e.DPI = 90 * c, a = 1 == h.length ? h[0] : h[Wb((a[1] << a[0]) + a[2], h.length)], Aa(a, "/") || (a += "/"), Aa(a, "MapServer/") ? a += "export" : Aa(a, "ImageServer/") && (a += "exportImage"), a = ao(co([a], e)));
+            return a
+        }
+    };
+    l.mm = function(a) {
+        Fb(this.e, a);
+        this.k()
+    };
+
+    function qz(a, c) {
+        zg.call(this, a, 2);
+        this.c = ld(c.na(a[0]));
+        this.a = {}
+    }
+    w(qz, zg);
+    qz.prototype.Ma = function(a) {
+        a = m(a) ? ma(a) : -1;
+        if (a in this.a) return this.a[a];
+        var c = this.c,
+            d = ai(c[0], c[1]);
+        d.strokeStyle = "black";
+        d.strokeRect(.5, .5, c[0] + .5, c[1] + .5);
+        d.fillStyle = "black";
+        d.textAlign = "center";
+        d.textBaseline = "middle";
+        d.font = "24px sans-serif";
+        d.fillText(ef(this.b), c[0] / 2, c[1] / 2);
+        return this.a[a] = d.canvas
+    };
+
+    function rz(a) {
+        Zg.call(this, {
+            opaque: !1,
+            projection: a.projection,
+            tileGrid: a.tileGrid
+        })
+    }
+    w(rz, Zg);
+    rz.prototype.Vb = function(a, c, d) {
+        var e = this.bb(a, c, d);
+        if (wg(this.a, e)) return this.a.get(e);
+        a = new qz([a, c, d], this.tileGrid);
+        this.a.set(e, a);
+        return a
+    };
+
+    function sz(a) {
+        Sy.call(this, {
+            attributions: a.attributions,
+            crossOrigin: a.crossOrigin,
+            projection: re("EPSG:3857"),
+            state: "loading",
+            tileLoadFunction: a.tileLoadFunction,
+            wrapX: m(a.wrapX) ? a.wrapX : !0
+        });
+        (new Hy(a.url)).send(void 0, ra(this.e, this))
+    }
+    w(sz, Sy);
+    sz.prototype.e = function(a) {
+        var c = re("EPSG:4326"),
+            d = this.f,
+            e;
+        m(a.bounds) && (e = le(a.bounds, ve(c, d)));
+        var f = a.minzoom || 0,
+            g = a.maxzoom || 22;
+        this.tileGrid = d = new Uy({
+            extent: Vg(d),
+            maxZoom: g,
+            minZoom: f
+        });
+        this.tileUrlFunction = Qy(d.yb({
+            extent: e
+        }), Ny(a.tiles));
+        if (m(a.attribution) && null === this.d) {
+            c = m(e) ? e : c.G();
+            e = {};
+            for (var h; f <= g; ++f) h = f.toString(), e[h] = [Pg(d, c, f)];
+            this.d = [new mf({
+                html: a.attribution,
+                tileRanges: e
+            })]
+        }
+        Dg(this, "ready")
+    };
+
+    function tz(a) {
+        Zg.call(this, {
+            projection: re("EPSG:3857"),
+            state: "loading"
+        });
+        this.i = m(a.preemptive) ? a.preemptive : !0;
+        this.e = Py;
+        this.g = void 0;
+        (new Hy(a.url)).send(void 0, ra(this.om, this))
+    }
+    w(tz, Zg);
+    l = tz.prototype;
+    l.wj = function() {
+        return this.g
+    };
+    l.Gi = function(a, c, d, e, f) {
+        null === this.tileGrid ? !0 === f ? wh(function() {
+            d.call(e, null)
+        }) : d.call(e, null) : (c = this.tileGrid.Wb(a, c), uz(this.Vb(c[0], c[1], c[2], 1, this.f), a, d, e, f))
+    };
+    l.om = function(a) {
+        var c = re("EPSG:4326"),
+            d = this.f,
+            e;
+        m(a.bounds) && (e = le(a.bounds, ve(c, d)));
+        var f = a.minzoom || 0,
+            g = a.maxzoom || 22;
+        this.tileGrid = d = new Uy({
+            extent: Vg(d),
+            maxZoom: g,
+            minZoom: f
+        });
+        this.g = a.template;
+        var h = a.grids;
+        if (null != h) {
+            this.e = Qy(d.yb({
+                extent: e
+            }), Ny(h));
+            if (m(a.attribution)) {
+                c = m(e) ? e : c.G();
+                for (e = {}; f <= g; ++f) h = f.toString(), e[h] = [Pg(d, c, f)];
+                this.d = [new mf({
+                    html: a.attribution,
+                    tileRanges: e
+                })]
+            }
+            Dg(this, "ready")
+        } else Dg(this, "error")
+    };
+    l.Vb = function(a, c, d, e, f) {
+        var g = this.bb(a, c, d);
+        if (wg(this.a, g)) return this.a.get(g);
+        a = [a, c, d];
+        e = this.e(a, e, f);
+        e = new vz(a, m(e) ? 0 : 4, m(e) ? e : "", Og(this.tileGrid, a), this.i);
+        this.a.set(g, e);
+        return e
+    };
+    l.yf = function(a, c, d) {
+        a = this.bb(a, c, d);
+        wg(this.a, a) && this.a.get(a)
+    };
+
+    function vz(a, c, d, e, f) {
+        zg.call(this, a, c);
+        this.g = d;
+        this.a = e;
+        this.i = f;
+        this.d = this.e = this.c = null
+    }
+    w(vz, zg);
+    l = vz.prototype;
+    l.Ma = function() {
+        return null
+    };
+
+    function wz(a, c) {
+        if (null === a.c || null === a.e || null == a.d) return null;
+        var d = a.c[Math.floor((1 - (c[1] - a.a[1]) / (a.a[3] - a.a[1])) * a.c.length)];
+        if (!ia(d)) return null;
+        d = d.charCodeAt(Math.floor((c[0] - a.a[0]) / (a.a[2] - a.a[0]) * d.length));
+        93 <= d && d--;
+        35 <= d && d--;
+        d = a.e[d - 32];
+        return null != d ? a.d[d] : null
+    }
+
+    function uz(a, c, d, e, f) {
+        0 == a.state && !0 === f ? (Uc(a, "change", function() {
+            d.call(e, wz(this, c))
+        }, !1, a), xz(a)) : !0 === f ? wh(function() {
+            d.call(e, wz(this, c))
+        }, a) : d.call(e, wz(a, c))
+    }
+    l.gb = function() {
+        return this.g
+    };
+    l.Lj = function() {
+        this.state = 3;
+        Ag(this)
+    };
+    l.Xj = function(a) {
+        this.c = a.grid;
+        this.e = a.keys;
+        this.d = a.data;
+        this.state = 4;
+        Ag(this)
+    };
+
+    function xz(a) {
+        0 == a.state && (a.state = 1, (new Hy(a.g)).send(void 0, ra(a.Xj, a), ra(a.Lj, a)))
+    }
+    l.load = function() {
+        this.i && xz(this)
+    };
+
+    function yz(a) {
+        qp.call(this, {
+            attributions: a.attributions,
+            logo: a.logo,
+            projection: void 0,
+            state: "ready"
+        });
+        this.T = a.format;
+        this.n = a.tileGrid;
+        this.p = Py;
+        this.X = this.n.yb();
+        this.l = {};
+        m(a.tileUrlFunction) ? (this.p = a.tileUrlFunction, this.k()) : m(a.urls) ? (this.p = Ny(a.urls), this.k()) : m(a.url) && (this.p = Ny(Ry(a.url)), this.k())
+    }
+    w(yz, qp);
+    l = yz.prototype;
+    l.clear = function() {
+        yb(this.l)
+    };
+
+    function zz(a, c, d, e) {
+        var f = a.l;
+        a = a.n.Wb(c, d);
+        f = f[a[0] + "/" + a[1] + "/" + a[2]];
+        if (m(f))
+            for (a = 0, d = f.length; a < d; ++a) {
+                var g = f[a];
+                if (g.Q().Jb(c[0], c[1]) && e.call(void 0, g)) break
+            }
+    }
+    l.Ab = function(a, c, d, e) {
+        var f = this.n,
+            g = this.l;
+        c = Tg(f, c);
+        a = Pg(f, a, c);
+        for (var h, f = a.b; f <= a.d; ++f)
+            for (h = a.c; h <= a.a; ++h) {
+                var k = g[c + "/" + f + "/" + h];
+                if (m(k)) {
+                    var n, p;
+                    n = 0;
+                    for (p = k.length; n < p; ++n) {
+                        var q = d.call(e, k[n]);
+                        if (q) return q
+                    }
+                }
+            }
+    };
+    l.Dc = function() {
+        var a = this.l,
+            c = [],
+            d;
+        for (d in a) db(c, a[d]);
+        return c
+    };
+    l.Vi = function(a, c) {
+        var d = [];
+        zz(this, a, c, function(a) {
+            d.push(a)
+        });
+        return d
+    };
+    l.ac = function(a, c, d) {
+        function e(a, c) {
+            k[a] = c;
+            this.k()
+        }
+        var f = this.X,
+            g = this.n,
+            h = this.p,
+            k = this.l,
+            n = Tg(g, c),
+            g = Pg(g, a, n),
+            p = [n, 0, 0],
+            q, r;
+        for (q = g.b; q <= g.d; ++q)
+            for (r = g.c; r <= g.a; ++r) {
+                var t = n + "/" + q + "/" + r;
+                if (!(t in k)) {
+                    p[0] = n;
+                    p[1] = q;
+                    p[2] = r;
+                    f(p, d, p);
+                    var u = h(p, 1, d);
+                    m(u) && (k[t] = [], hp(u, this.T, ta(e, t)).call(this, a, c, d))
+                }
+            }
+    };
+
+    function Az(a) {
+        a = m(a) ? a : {};
+        var c = m(a.params) ? a.params : {};
+        Sy.call(this, {
+            attributions: a.attributions,
+            crossOrigin: a.crossOrigin,
+            logo: a.logo,
+            opaque: !Ab(c, "TRANSPARENT", !0),
+            projection: a.projection,
+            tileGrid: a.tileGrid,
+            tileLoadFunction: a.tileLoadFunction,
+            tileUrlFunction: ra(this.tm, this),
+            wrapX: a.wrapX
+        });
+        var d = a.urls;
+        !m(d) && m(a.url) && (d = Ry(a.url));
+        this.g = null != d ? d : [];
+        this.l = m(a.gutter) ? a.gutter : 0;
+        this.e = c;
+        this.i = !0;
+        this.n = a.serverType;
+        this.J = m(a.hidpi) ? a.hidpi : !0;
+        this.p = "";
+        Bz(this);
+        this.N = Kd();
+        Cz(this)
+    }
+    w(Az, Sy);
+    l = Az.prototype;
+    l.pm = function(a, c, d, e) {
+        d = re(d);
+        var f = this.tileGrid;
+        null === f && (f = ah(this, d));
+        c = f.Wb(a, c);
+        if (!(f.b.length <= c[0])) {
+            var g = f.ma(c[0]),
+                h = Og(f, c, this.N),
+                f = ld(f.na(c[0]), this.c),
+                k = this.l;
+            0 !== k && (f = jd(f, k, this.c), h = Od(h, g * k, h));
+            k = {
+                SERVICE: "WMS",
+                VERSION: "1.3.0",
+                REQUEST: "GetFeatureInfo",
+                FORMAT: "image/png",
+                TRANSPARENT: !0,
+                QUERY_LAYERS: this.e.LAYERS
+            };
+            Fb(k, this.e, e);
+            e = Math.floor((h[3] - a[1]) / g);
+            k[this.i ? "I" : "X"] = Math.floor((a[0] - h[0]) / g);
+            k[this.i ? "J" : "Y"] = e;
+            return Dz(this, c, f, h, 1, d, k)
+        }
+    };
+    l.Cd = function() {
+        return this.l
+    };
+    l.bb = function(a, c, d) {
+        return this.p + Az.S.bb.call(this, a, c, d)
+    };
+    l.qm = function() {
+        return this.e
+    };
+
+    function Dz(a, c, d, e, f, g, h) {
+        var k = a.g;
+        if (0 != k.length) {
+            h.WIDTH = d[0];
+            h.HEIGHT = d[1];
+            h[a.i ? "CRS" : "SRS"] = g.b;
+            "STYLES" in a.e || (h.STYLES = new String(""));
+            if (1 != f) switch (a.n) {
+                case "geoserver":
+                    d = 90 * f + .5 | 0;
+                    h.FORMAT_OPTIONS = m(h.FORMAT_OPTIONS) ? h.FORMAT_OPTIONS + (";dpi:" + d) : "dpi:" + d;
+                    break;
+                case "mapserver":
+                    h.MAP_RESOLUTION = 90 * f;
+                    break;
+                case "carmentaserver":
+                case "qgis":
+                    h.DPI = 90 * f
+            }
+            g = g.d;
+            a.i && "ne" == g.substr(0, 2) && (a = e[0], e[0] = e[1], e[1] = a, a = e[2], e[2] = e[3], e[3] = a);
+            h.BBOX = e.join(",");
+            return ao(co([1 == k.length ? k[0] : k[Wb((c[1] << c[0]) + c[2], k.length)]], h))
+        }
+    }
+    l.Xb = function(a, c, d) {
+        a = Az.S.Xb.call(this, a, c, d);
+        return 1 != c && this.J && m(this.n) ? kd(a, c, this.c) : a
+    };
+    l.rm = function() {
+        return this.g
+    };
+
+    function Bz(a) {
+        var c = 0,
+            d = [],
+            e, f;
+        e = 0;
+        for (f = a.g.length; e < f; ++e) d[c++] = a.g[e];
+        for (var g in a.e) d[c++] = g + "-" + a.e[g];
+        a.p = d.join("#")
+    }
+    l.sm = function(a) {
+        a = m(a) ? Ry(a) : null;
+        this.Og(a)
+    };
+    l.Og = function(a) {
+        this.g = null != a ? a : [];
+        Bz(this);
+        this.k()
+    };
+    l.tm = function(a, c, d) {
+        var e = this.tileGrid;
+        null === e && (e = ah(this, d));
+        if (!(e.b.length <= a[0])) {
+            1 == c || this.J && m(this.n) || (c = 1);
+            var f = e.ma(a[0]),
+                g = Og(e, a, this.N),
+                e = ld(e.na(a[0]), this.c),
+                h = this.l;
+            0 !== h && (e = jd(e, h, this.c), g = Od(g, f * h, g));
+            1 != c && (e = kd(e, c, this.c));
+            f = {
+                SERVICE: "WMS",
+                VERSION: "1.3.0",
+                REQUEST: "GetMap",
+                FORMAT: "image/png",
+                TRANSPARENT: !0
+            };
+            Fb(f, this.e);
+            return Dz(this, a, e, g, c, d, f)
+        }
+    };
+    l.um = function(a) {
+        Fb(this.e, a);
+        Bz(this);
+        Cz(this);
+        this.k()
+    };
+
+    function Cz(a) {
+        a.i = 0 <= Na(Ab(a.e, "VERSION", "1.3.0"), "1.3")
+    };
+
+    function Ez(a) {
+        this.e = a.matrixIds;
+        Mg.call(this, {
+            origin: a.origin,
+            origins: a.origins,
+            resolutions: a.resolutions,
+            tileSize: a.tileSize,
+            tileSizes: a.tileSizes,
+            widths: a.widths
+        })
+    }
+    w(Ez, Mg);
+    Ez.prototype.q = function() {
+        return this.e
+    };
+
+    function Fz(a) {
+        var c = [],
+            d = [],
+            e = [],
+            f = [],
+            g = [],
+            h;
+        h = re(a.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3"));
+        var k = h.Gd(),
+            n = "ne" == h.d.substr(0, 2);
+        gb(a.TileMatrix, function(a, c) {
+            return c.ScaleDenominator - a.ScaleDenominator
+        });
+        Sa(a.TileMatrix, function(a) {
+            d.push(a.Identifier);
+            n ? e.push([a.TopLeftCorner[1], a.TopLeftCorner[0]]) : e.push(a.TopLeftCorner);
+            c.push(2.8E-4 * a.ScaleDenominator / k);
+            var h = a.TileWidth,
+                r = a.TileHeight;
+            f.push(h == r ? h : [h, r]);
+            g.push(a.MatrixWidth)
+        });
+        return new Ez({
+            origins: e,
+            resolutions: c,
+            matrixIds: d,
+            tileSizes: f,
+            widths: g
+        })
+    };
+
+    function Gz(a) {
+        function c(a) {
+            a = "KVP" == e ? ao(co([a], g)) : a.replace(/\{(\w+?)\}/g, function(a, c) {
+                return c.toLowerCase() in g ? g[c.toLowerCase()] : a
+            });
+            return function(c) {
+                if (null !== c) {
+                    var d = {
+                        TileMatrix: f.e[c[0]],
+                        TileCol: c[1],
+                        TileRow: c[2]
+                    };
+                    Fb(d, h);
+                    c = a;
+                    return c = "KVP" == e ? ao(co([c], d)) : c.replace(/\{(\w+?)\}/g, function(a, c) {
+                        return d[c]
+                    })
+                }
+            }
+        }
+        this.N = m(a.version) ? a.version : "1.0.0";
+        this.n = m(a.format) ? a.format : "image/jpeg";
+        this.e = m(a.dimensions) ? a.dimensions : {};
+        this.l = "";
+        Hz(this);
+        this.p = a.layer;
+        this.i = a.matrixSet;
+        this.J = a.style;
+        var d = a.urls;
+        !m(d) && m(a.url) && (d = Ry(a.url));
+        this.g = null != d ? d : [];
+        var e = this.T = m(a.requestEncoding) ? a.requestEncoding : "KVP",
+            f = a.tileGrid,
+            g = {
+                layer: this.p,
+                style: this.J,
+                tilematrixset: this.i
+            };
+        "KVP" == e && Fb(g, {
+            Service: "WMTS",
+            Request: "GetTile",
+            Version: this.N,
+            Format: this.n
+        });
+        var h = this.e,
+            d = 0 < this.g.length ? Oy(Ua(this.g, c)) : Py,
+            k = Kd(),
+            d = Qy(function(a, c, d) {
+                if (f.b.length <= a[0]) return null;
+                var e = a[1],
+                    g = -a[2] - 1,
+                    h = Og(f, a, k);
+                c = c.G();
+                return !he(h, c) || he(h, c) && (h[0] == c[2] || h[2] == c[0] || h[1] == c[3] || h[3] == c[1]) ? null : bf(a[0], e, g, d)
+            }, d);
+        Sy.call(this, {
+            attributions: a.attributions,
+            crossOrigin: a.crossOrigin,
+            logo: a.logo,
+            projection: a.projection,
+            tileClass: a.tileClass,
+            tileGrid: f,
+            tileLoadFunction: a.tileLoadFunction,
+            tilePixelRatio: a.tilePixelRatio,
+            tileUrlFunction: d,
+            wrapX: m(a.wrapX) ? a.wrapX : !1
+        })
+    }
+    w(Gz, Sy);
+    l = Gz.prototype;
+    l.Ti = function() {
+        return this.e
+    };
+    l.Xi = function() {
+        return this.n
+    };
+    l.bb = function(a, c, d) {
+        return this.l + Gz.S.bb.call(this, a, c, d)
+    };
+    l.vm = function() {
+        return this.p
+    };
+    l.jj = function() {
+        return this.i
+    };
+    l.uj = function() {
+        return this.T
+    };
+    l.wm = function() {
+        return this.J
+    };
+    l.xm = function() {
+        return this.g
+    };
+    l.Aj = function() {
+        return this.N
+    };
+
+    function Hz(a) {
+        var c = 0,
+            d = [],
+            e;
+        for (e in a.e) d[c++] = e + "-" + a.e[e];
+        a.l = d.join("/")
+    }
+    l.uo = function(a) {
+        Fb(this.e, a);
+        Hz(this);
+        this.k()
+    };
+
+    function Iz(a) {
+        var c = m(a) ? a : c;
+        Mg.call(this, {
+            origin: [0, 0],
+            resolutions: c.resolutions
+        })
+    }
+    w(Iz, Mg);
+    Iz.prototype.yb = function(a) {
+        a = m(a) ? a : {};
+        var c = this.minZoom,
+            d = this.maxZoom,
+            e = null;
+        if (m(a.extent)) {
+            var e = Array(d + 1),
+                f;
+            for (f = 0; f <= d; ++f) e[f] = f < c ? null : Pg(this, a.extent, f)
+        }
+        return function(a, f, k) {
+            f = a[0];
+            if (f < c || d < f) return null;
+            var n = Math.pow(2, f),
+                p = a[1];
+            if (0 > p || n <= p) return null;
+            a = a[2];
+            return a < -n || -1 < a || null !== e && !hf(e[f], p, -a - 1) ? null : bf(f, p, -a - 1, k)
+        }
+    };
+
+    function Jz(a) {
+        a = m(a) ? a : {};
+        var c = a.size,
+            d = c[0],
+            e = c[1],
+            f = [],
+            g = 256;
+        switch (m(a.tierSizeCalculation) ? a.tierSizeCalculation : "default") {
+            case "default":
+                for (; d > g || e > g;) f.push([Math.ceil(d / g), Math.ceil(e / g)]), g += g;
+                break;
+            case "truncated":
+                for (; d > g || e > g;) f.push([Math.ceil(d / g), Math.ceil(e / g)]), d >>= 1, e >>= 1
+        }
+        f.push([1, 1]);
+        f.reverse();
+        for (var g = [1], h = [0], e = 1, d = f.length; e < d; e++) g.push(1 << e), h.push(f[e - 1][0] * f[e - 1][1] + h[e - 1]);
+        g.reverse();
+        var g = new Iz({
+                resolutions: g
+            }),
+            k = a.url,
+            c = Qy(g.yb({
+                extent: [0, 0, c[0], c[1]]
+            }), function(a) {
+                if (null !== a) {
+                    var c = a[0],
+                        d = a[1];
+                    a = a[2];
+                    return k + "TileGroup" + ((d + a * f[c][0] + h[c]) / 256 | 0) + "/" + c + "-" + d + "-" + a + ".jpg"
+                }
+            });
+        Sy.call(this, {
+            attributions: a.attributions,
+            crossOrigin: a.crossOrigin,
+            logo: a.logo,
+            tileClass: Kz,
+            tileGrid: g,
+            tileUrlFunction: c
+        })
+    }
+    w(Jz, Sy);
+
+    function Kz(a, c, d, e, f) {
+        px.call(this, a, c, d, e, f);
+        this.d = {}
+    }
+    w(Kz, px);
+    Kz.prototype.Ma = function(a) {
+        var c = m(a) ? ma(a).toString() : "";
+        if (c in this.d) return this.d[c];
+        a = Kz.S.Ma.call(this, a);
+        if (2 == this.state) {
+            if (256 == a.width && 256 == a.height) return this.d[c] = a;
+            var d = ai(256, 256);
+            d.drawImage(a, 0, 0);
+            return this.d[c] = d.canvas
+        }
+        return a
+    };
+
+    function Lz(a) {
+        a = m(a) ? a : {};
+        this.a = m(a.initialSize) ? a.initialSize : 256;
+        this.c = m(a.maxSize) ? a.maxSize : m(va) ? va : 2048;
+        this.b = m(a.space) ? a.space : 1;
+        this.e = [new Mz(this.a, this.b)];
+        this.d = this.a;
+        this.f = [new Mz(this.d, this.b)]
+    }
+    Lz.prototype.add = function(a, c, d, e, f, g) {
+        if (c + this.b > this.c || d + this.b > this.c) return null;
+        e = Nz(this, !1, a, c, d, e, g);
+        if (null === e) return null;
+        a = Nz(this, !0, a, c, d, m(f) ? f : Hg, g);
+        return {
+            offsetX: e.offsetX,
+            offsetY: e.offsetY,
+            image: e.image,
+            ig: a.image
+        }
+    };
+
+    function Nz(a, c, d, e, f, g, h) {
+        var k = c ? a.f : a.e,
+            n, p, q;
+        p = 0;
+        for (q = k.length; p < q; ++p) {
+            n = k[p];
+            n = n.add(d, e, f, g, h);
+            if (null !== n) return n;
+            null === n && p === q - 1 && (c ? (n = Math.min(2 * a.d, a.c), a.d = n) : (n = Math.min(2 * a.a, a.c), a.a = n), n = new Mz(n, a.b), k.push(n), ++q)
+        }
+    }
+
+    function Mz(a, c) {
+        this.b = c;
+        this.a = [{
+            x: 0,
+            y: 0,
+            width: a,
+            height: a
+        }];
+        this.d = {};
+        this.c = Mf("CANVAS");
+        this.c.width = a;
+        this.c.height = a;
+        this.e = this.c.getContext("2d")
+    }
+    Mz.prototype.get = function(a) {
+        return Ab(this.d, a, null)
+    };
+    Mz.prototype.add = function(a, c, d, e, f) {
+        var g, h, k;
+        h = 0;
+        for (k = this.a.length; h < k; ++h)
+            if (g = this.a[h], g.width >= c + this.b && g.height >= d + this.b) return k = {
+                offsetX: g.x + this.b,
+                offsetY: g.y + this.b,
+                image: this.c
+            }, this.d[a] = k, e.call(f, this.e, g.x + this.b, g.y + this.b), a = h, c = c + this.b, d = d + this.b, f = e = void 0, g.width - c > g.height - d ? (e = {
+                x: g.x + c,
+                y: g.y,
+                width: g.width - c,
+                height: g.height
+            }, f = {
+                x: g.x,
+                y: g.y + d,
+                width: c,
+                height: g.height - d
+            }, Oz(this, a, e, f)) : (e = {
+                x: g.x + c,
+                y: g.y,
+                width: g.width - c,
+                height: d
+            }, f = {
+                x: g.x,
+                y: g.y + d,
+                width: g.width,
+                height: g.height - d
+            }, Oz(this, a, e, f)), k;
+        return null
+    };
+
+    function Oz(a, c, d, e) {
+        c = [c, 1];
+        0 < d.width && 0 < d.height && c.push(d);
+        0 < e.width && 0 < e.height && c.push(e);
+        a.a.splice.apply(a.a, c)
+    };
+
+    function Pz(a) {
+        this.o = this.d = this.e = null;
+        this.i = m(a.fill) ? a.fill : null;
+        this.J = [0, 0];
+        this.b = a.points;
+        this.c = m(a.radius) ? a.radius : a.radius1;
+        this.f = m(a.radius2) ? a.radius2 : this.c;
+        this.g = m(a.angle) ? a.angle : 0;
+        this.a = m(a.stroke) ? a.stroke : null;
+        this.H = this.L = this.p = null;
+        var c = a.atlasManager,
+            d = "",
+            e = "",
+            f = 0,
+            g = null,
+            h, k = 0;
+        null !== this.a && (h = vf(this.a.b), k = this.a.a, m(k) || (k = 1), g = this.a.c, ki || (g = null), e = this.a.e, m(e) || (e = "round"), d = this.a.d, m(d) || (d = "round"), f = this.a.f, m(f) || (f = 10));
+        var n = 2 * (this.c + k) + 1,
+            d = {
+                strokeStyle: h,
+                md: k,
+                size: n,
+                lineCap: d,
+                lineDash: g,
+                lineJoin: e,
+                miterLimit: f
+            };
+        if (m(c)) {
+            var n = Math.round(n),
+                e = null === this.i,
+                p;
+            e && (p = ra(this.Tg, this, d));
+            f = this.nb();
+            p = c.add(f, n, n, ra(this.Ug, this, d), p);
+            this.d = p.image;
+            this.J = [p.offsetX, p.offsetY];
+            c = p.image.width;
+            this.o = e ? p.ig : this.d
+        } else this.d = Mf("CANVAS"), this.d.height = n, this.d.width = n, c = n = this.d.width, p = this.d.getContext("2d"), this.Ug(d, p, 0, 0), null === this.i ? (p = this.o = Mf("CANVAS"), p.height = d.size, p.width = d.size, p = p.getContext("2d"), this.Tg(d, p, 0, 0)) : this.o = this.d;
+        this.p = [n / 2, n / 2];
+        this.L = [n, n];
+        this.H = [c, c];
+        Ej.call(this, {
+            opacity: 1,
+            rotateWithView: !1,
+            rotation: m(a.rotation) ? a.rotation : 0,
+            scale: 1,
+            snapToPixel: m(a.snapToPixel) ? a.snapToPixel : !0
+        })
+    }
+    w(Pz, Ej);
+    l = Pz.prototype;
+    l.mb = function() {
+        return this.p
+    };
+    l.Cm = function() {
+        return this.g
+    };
+    l.Dm = function() {
+        return this.i
+    };
+    l.he = function() {
+        return this.o
+    };
+    l.Lb = function() {
+        return this.d
+    };
+    l.Dd = function() {
+        return this.H
+    };
+    l.gd = function() {
+        return 2
+    };
+    l.rb = function() {
+        return this.J
+    };
+    l.Em = function() {
+        return this.b
+    };
+    l.Fm = function() {
+        return this.c
+    };
+    l.tj = function() {
+        return this.f
+    };
+    l.Xa = function() {
+        return this.L
+    };
+    l.Gm = function() {
+        return this.a
+    };
+    l.$e = ca;
+    l.load = ca;
+    l.xf = ca;
+    l.Ug = function(a, c, d, e) {
+        var f;
+        c.setTransform(1, 0, 0, 1, 0, 0);
+        c.translate(d, e);
+        c.beginPath();
+        this.f !== this.c && (this.b *= 2);
+        for (d = 0; d <= this.b; d++) e = 2 * d * Math.PI / this.b - Math.PI / 2 + this.g, f = 0 === d % 2 ? this.c : this.f, c.lineTo(a.size / 2 + f * Math.cos(e), a.size / 2 + f * Math.sin(e));
+        null !== this.i && (c.fillStyle = vf(this.i.b), c.fill());
+        null !== this.a && (c.strokeStyle = a.strokeStyle, c.lineWidth = a.md, null === a.lineDash || c.setLineDash(a.lineDash), c.lineCap = a.lineCap, c.lineJoin = a.lineJoin, c.miterLimit = a.miterLimit, c.stroke());
+        c.closePath()
+    };
+    l.Tg = function(a, c, d, e) {
+        c.setTransform(1, 0, 0, 1, 0, 0);
+        c.translate(d, e);
+        c.beginPath();
+        this.f !== this.c && (this.b *= 2);
+        var f;
+        for (d = 0; d <= this.b; d++) f = 2 * d * Math.PI / this.b - Math.PI / 2 + this.g, e = 0 === d % 2 ? this.c : this.f, c.lineTo(a.size / 2 + e * Math.cos(f), a.size / 2 + e * Math.sin(f));
+        c.fillStyle = wl;
+        c.fill();
+        null !== this.a && (c.strokeStyle = a.strokeStyle, c.lineWidth = a.md, null === a.lineDash || c.setLineDash(a.lineDash), c.stroke());
+        c.closePath()
+    };
+    l.nb = function() {
+        var a = null === this.a ? "-" : this.a.nb(),
+            c = null === this.i ? "-" : this.i.nb();
+        if (null === this.e || a != this.e[1] || c != this.e[2] || this.c != this.e[3] || this.f != this.e[4] || this.g != this.e[5] || this.b != this.e[6]) this.e = ["r" + a + c + (m(this.c) ? this.c.toString() : "-") + (m(this.f) ? this.f.toString() : "-") + (m(this.g) ? this.g.toString() : "-") + (m(this.b) ? this.b.toString() : "-"), a, c, this.c, this.f, this.g, this.b];
+        return this.e[0]
+    };
+    v("ol.animation.bounce", function(a) {
+        var c = a.resolution,
+            d = m(a.start) ? a.start : ua(),
+            e = m(a.duration) ? a.duration : 1E3,
+            f = m(a.easing) ? a.easing : Ye;
+        return function(a, h) {
+            if (h.time < d) return h.animate = !0, h.viewHints[0] += 1, !0;
+            if (h.time < d + e) {
+                var k = f((h.time - d) / e),
+                    n = c - h.viewState.resolution;
+                h.animate = !0;
+                h.viewState.resolution += k * n;
+                h.viewHints[0] += 1;
+                return !0
+            }
+            return !1
+        }
+    }, OPENLAYERS);
+    v("ol.animation.pan", Ze, OPENLAYERS);
+    v("ol.animation.rotate", $e, OPENLAYERS);
+    v("ol.animation.zoom", af, OPENLAYERS);
+    v("ol.Attribution", mf, OPENLAYERS);
+    mf.prototype.getHTML = mf.prototype.c;
+    nf.prototype.element = nf.prototype.element;
+    v("ol.Collection", of, OPENLAYERS);
+    of.prototype.clear = of.prototype.clear;
+    of.prototype.extend = of.prototype.af;
+    of.prototype.forEach = of.prototype.forEach;
+    of.prototype.getArray = of.prototype.Hk;
+    of.prototype.item = of.prototype.item;
+    of.prototype.getLength = of.prototype.Ib;
+    of.prototype.insertAt = of.prototype.Td;
+    of.prototype.pop = of.prototype.pop;
+    of.prototype.push = of.prototype.push;
+    of.prototype.remove = of.prototype.remove;
+    of.prototype.removeAt = of.prototype.tf;
+    of.prototype.setAt = of.prototype.Un;
+    v("ol.coordinate.add", md, OPENLAYERS);
+    v("ol.coordinate.createStringXY", function(a) {
+        return function(c) {
+            return ud(c, a)
+        }
+    }, OPENLAYERS);
+    v("ol.coordinate.format", pd, OPENLAYERS);
+    v("ol.coordinate.rotate", rd, OPENLAYERS);
+    v("ol.coordinate.toStringHDMS", function(a) {
+        return m(a) ? od(a[1], "NS") + " " + od(a[0], "EW") : ""
+    }, OPENLAYERS);
+    v("ol.coordinate.toStringXY", ud, OPENLAYERS);
+    v("ol.DeviceOrientation", tr, OPENLAYERS);
+    tr.prototype.getAlpha = tr.prototype.Mi;
+    tr.prototype.getBeta = tr.prototype.Pi;
+    tr.prototype.getGamma = tr.prototype.Yi;
+    tr.prototype.getHeading = tr.prototype.Ik;
+    tr.prototype.getTracking = tr.prototype.og;
+    tr.prototype.setTracking = tr.prototype.bf;
+    v("ol.easing.easeIn", function(a) {
+        return Math.pow(a, 3)
+    }, OPENLAYERS);
+    v("ol.easing.easeOut", Ve, OPENLAYERS);
+    v("ol.easing.inAndOut", We, OPENLAYERS);
+    v("ol.easing.linear", Xe, OPENLAYERS);
+    v("ol.easing.upAndDown", Ye, OPENLAYERS);
+    v("ol.extent.boundingExtent", Jd, OPENLAYERS);
+    v("ol.extent.buffer", Od, OPENLAYERS);
+    v("ol.extent.containsCoordinate", function(a, c) {
+        return Sd(a, c[0], c[1])
+    }, OPENLAYERS);
+    v("ol.extent.containsExtent", Rd, OPENLAYERS);
+    v("ol.extent.containsXY", Sd, OPENLAYERS);
+    v("ol.extent.createEmpty", Kd, OPENLAYERS);
+    v("ol.extent.equals", Vd, OPENLAYERS);
+    v("ol.extent.extend", Wd, OPENLAYERS);
+    v("ol.extent.getBottomLeft", Zd, OPENLAYERS);
+    v("ol.extent.getBottomRight", $d, OPENLAYERS);
+    v("ol.extent.getCenter", ce, OPENLAYERS);
+    v("ol.extent.getHeight", fe, OPENLAYERS);
+    v("ol.extent.getIntersection", ge, OPENLAYERS);
+    v("ol.extent.getSize", function(a) {
+        return [a[2] - a[0], a[3] - a[1]]
+    }, OPENLAYERS);
+    v("ol.extent.getTopLeft", be, OPENLAYERS);
+    v("ol.extent.getTopRight", ae, OPENLAYERS);
+    v("ol.extent.getWidth", ie, OPENLAYERS);
+    v("ol.extent.intersects", he, OPENLAYERS);
+    v("ol.extent.isEmpty", je, OPENLAYERS);
+    v("ol.extent.applyTransform", le, OPENLAYERS);
+    v("ol.Feature", X, OPENLAYERS);
+    X.prototype.clone = X.prototype.clone;
+    X.prototype.getGeometry = X.prototype.Q;
+    X.prototype.getId = X.prototype.aj;
+    X.prototype.getGeometryName = X.prototype.$i;
+    X.prototype.getStyle = X.prototype.Qk;
+    X.prototype.getStyleFunction = X.prototype.Rk;
+    X.prototype.setGeometry = X.prototype.La;
+    X.prototype.setStyle = X.prototype.cf;
+    X.prototype.setId = X.prototype.Qb;
+    X.prototype.setGeometryName = X.prototype.Ic;
+    v("ol.featureloader.xhr", ip, OPENLAYERS);
+    v("ol.FeatureOverlay", ur, OPENLAYERS);
+    ur.prototype.addFeature = ur.prototype.pg;
+    ur.prototype.getFeatures = ur.prototype.Kk;
+    ur.prototype.getMap = ur.prototype.Lk;
+    ur.prototype.removeFeature = ur.prototype.Yd;
+    ur.prototype.setFeatures = ur.prototype.ld;
+    ur.prototype.setMap = ur.prototype.setMap;
+    ur.prototype.setStyle = ur.prototype.rg;
+    ur.prototype.getStyle = ur.prototype.Mk;
+    ur.prototype.getStyleFunction = ur.prototype.Nk;
+    v("ol.Geolocation", fx, OPENLAYERS);
+    fx.prototype.getAccuracy = fx.prototype.Ki;
+    fx.prototype.getAccuracyGeometry = fx.prototype.Li;
+    fx.prototype.getAltitude = fx.prototype.Ni;
+    fx.prototype.getAltitudeAccuracy = fx.prototype.Oi;
+    fx.prototype.getHeading = fx.prototype.Tk;
+    fx.prototype.getPosition = fx.prototype.Uk;
+    fx.prototype.getProjection = fx.prototype.sg;
+    fx.prototype.getSpeed = fx.prototype.vj;
+    fx.prototype.getTracking = fx.prototype.tg;
+    fx.prototype.getTrackingOptions = fx.prototype.bg;
+    fx.prototype.setProjection = fx.prototype.ug;
+    fx.prototype.setTracking = fx.prototype.Zd;
+    fx.prototype.setTrackingOptions = fx.prototype.Dh;
+    v("ol.Graticule", jx, OPENLAYERS);
+    jx.prototype.getMap = jx.prototype.Xk;
+    jx.prototype.getMeridians = jx.prototype.kj;
+    jx.prototype.getParallels = jx.prototype.pj;
+    jx.prototype.setMap = jx.prototype.setMap;
+    v("ol.has.DEVICE_PIXEL_RATIO", ji, OPENLAYERS);
+    v("ol.has.CANVAS", li, OPENLAYERS);
+    v("ol.has.DEVICE_ORIENTATION", mi, OPENLAYERS);
+    v("ol.has.GEOLOCATION", ni, OPENLAYERS);
+    v("ol.has.TOUCH", oi, OPENLAYERS);
+    v("ol.has.WEBGL", ii, OPENLAYERS);
+    ox.prototype.getImage = ox.prototype.b;
+    px.prototype.getImage = px.prototype.Ma;
+    v("ol.Kinetic", Tj, OPENLAYERS);
+    v("ol.loadingstrategy.all", jp, OPENLAYERS);
+    v("ol.loadingstrategy.bbox", function(a) {
+        return [a]
+    }, OPENLAYERS);
+    v("ol.loadingstrategy.tile", function(a) {
+        return function(c, d) {
+            var e = Tg(a, d),
+                f = Pg(a, c, e),
+                g = [],
+                e = [e, 0, 0];
+            for (e[1] = f.b; e[1] <= f.d; ++e[1])
+                for (e[2] = f.c; e[2] <= f.a; ++e[2]) g.push(Og(a, e));
+            return g
+        }
+    }, OPENLAYERS);
+    v("ol.Map", W, OPENLAYERS);
+    W.prototype.addControl = W.prototype.si;
+    W.prototype.addInteraction = W.prototype.ti;
+    W.prototype.addLayer = W.prototype.Jf;
+    W.prototype.addOverlay = W.prototype.Kf;
+    W.prototype.beforeRender = W.prototype.Ha;
+    W.prototype.forEachFeatureAtPixel = W.prototype.Ne;
+    W.prototype.forEachLayerAtPixel = W.prototype.al;
+    W.prototype.hasFeatureAtPixel = W.prototype.ok;
+    W.prototype.getEventCoordinate = W.prototype.Ui;
+    W.prototype.getEventPixel = W.prototype.Bd;
+    W.prototype.getTarget = W.prototype.df;
+    W.prototype.getTargetElement = W.prototype.bd;
+    W.prototype.getCoordinateFromPixel = W.prototype.ka;
+    W.prototype.getControls = W.prototype.Si;
+    W.prototype.getOverlays = W.prototype.oj;
+    W.prototype.getInteractions = W.prototype.bj;
+    W.prototype.getLayerGroup = W.prototype.Ub;
+    W.prototype.getLayers = W.prototype.vg;
+    W.prototype.getPixelFromCoordinate = W.prototype.ta;
+    W.prototype.getSize = W.prototype.xa;
+    W.prototype.getView = W.prototype.R;
+    W.prototype.getViewport = W.prototype.Bj;
+    W.prototype.renderSync = W.prototype.Rn;
+    W.prototype.render = W.prototype.render;
+    W.prototype.removeControl = W.prototype.Ln;
+    W.prototype.removeInteraction = W.prototype.Mn;
+    W.prototype.removeLayer = W.prototype.Nn;
+    W.prototype.removeOverlay = W.prototype.On;
+    W.prototype.setLayerGroup = W.prototype.zh;
+    W.prototype.setSize = W.prototype.vf;
+    W.prototype.setTarget = W.prototype.cl;
+    W.prototype.setView = W.prototype.jo;
+    W.prototype.updateSize = W.prototype.Kc;
+    Zi.prototype.originalEvent = Zi.prototype.originalEvent;
+    Zi.prototype.pixel = Zi.prototype.pixel;
+    Zi.prototype.coordinate = Zi.prototype.coordinate;
+    Zi.prototype.dragging = Zi.prototype.dragging;
+    Zi.prototype.preventDefault = Zi.prototype.preventDefault;
+    Zi.prototype.stopPropagation = Zi.prototype.fb;
+    tg.prototype.map = tg.prototype.map;
+    tg.prototype.frameState = tg.prototype.frameState;
+    ed.prototype.key = ed.prototype.key;
+    ed.prototype.oldValue = ed.prototype.oldValue;
+    v("ol.Object", fd, OPENLAYERS);
+    fd.prototype.get = fd.prototype.get;
+    fd.prototype.getKeys = fd.prototype.C;
+    fd.prototype.getProperties = fd.prototype.D;
+    fd.prototype.set = fd.prototype.set;
+    fd.prototype.setProperties = fd.prototype.t;
+    fd.prototype.unset = fd.prototype.I;
+    v("ol.Observable", cd, OPENLAYERS);
+    v("ol.Observable.unByKey", dd, OPENLAYERS);
+    cd.prototype.changed = cd.prototype.k;
+    cd.prototype.getRevision = cd.prototype.v;
+    cd.prototype.on = cd.prototype.r;
+    cd.prototype.once = cd.prototype.A;
+    cd.prototype.un = cd.prototype.u;
+    cd.prototype.unByKey = cd.prototype.B;
+    v("ol.inherits", w, OPENLAYERS);
+    v("ol.Overlay", Rq, OPENLAYERS);
+    Rq.prototype.getElement = Rq.prototype.$d;
+    Rq.prototype.getMap = Rq.prototype.ae;
+    Rq.prototype.getOffset = Rq.prototype.Yf;
+    Rq.prototype.getPosition = Rq.prototype.wg;
+    Rq.prototype.getPositioning = Rq.prototype.ag;
+    Rq.prototype.setElement = Rq.prototype.wh;
+    Rq.prototype.setMap = Rq.prototype.setMap;
+    Rq.prototype.setOffset = Rq.prototype.Bh;
+    Rq.prototype.setPosition = Rq.prototype.uf;
+    Rq.prototype.setPositioning = Rq.prototype.Ch;
+    v("ol.size.toSize", ld, OPENLAYERS);
+    zg.prototype.getTileCoord = zg.prototype.f;
+    v("ol.View", Ne, OPENLAYERS);
+    Ne.prototype.constrainCenter = Ne.prototype.xd;
+    Ne.prototype.constrainResolution = Ne.prototype.constrainResolution;
+    Ne.prototype.constrainRotation = Ne.prototype.constrainRotation;
+    Ne.prototype.getCenter = Ne.prototype.Ca;
+    Ne.prototype.calculateExtent = Ne.prototype.Pc;
+    Ne.prototype.getProjection = Ne.prototype.dl;
+    Ne.prototype.getResolution = Ne.prototype.ya;
+    Ne.prototype.getRotation = Ne.prototype.Da;
+    Ne.prototype.getZoom = Ne.prototype.Ej;
+    Ne.prototype.fitExtent = Ne.prototype.Me;
+    Ne.prototype.fitGeometry = Ne.prototype.Fi;
+    Ne.prototype.centerOn = Ne.prototype.Ai;
+    Ne.prototype.rotate = Ne.prototype.rotate;
+    Ne.prototype.setCenter = Ne.prototype.Na;
+    Ne.prototype.setResolution = Ne.prototype.tb;
+    Ne.prototype.setRotation = Ne.prototype.be;
+    Ne.prototype.setZoom = Ne.prototype.no;
+    v("ol.xml.getAllTextContent", Bo, OPENLAYERS);
+    v("ol.xml.parse", Vo, OPENLAYERS);
+    v("ol.webgl.Context", Wp, OPENLAYERS);
+    Wp.prototype.getGL = Wp.prototype.Xm;
+    Wp.prototype.getHitDetectionFramebuffer = Wp.prototype.Te;
+    Wp.prototype.useProgram = Wp.prototype.oe;
+    v("ol.tilegrid.TileGrid", Mg, OPENLAYERS);
+    Mg.prototype.getMaxZoom = Mg.prototype.Fd;
+    Mg.prototype.getMinZoom = Mg.prototype.Hd;
+    Mg.prototype.getOrigin = Mg.prototype.Mb;
+    Mg.prototype.getResolution = Mg.prototype.ma;
+    Mg.prototype.getResolutions = Mg.prototype.ne;
+    Mg.prototype.getTileCoordForCoordAndResolution = Mg.prototype.Wb;
+    Mg.prototype.getTileCoordForCoordAndZ = Mg.prototype.cd;
+    Mg.prototype.getTileSize = Mg.prototype.na;
+    v("ol.tilegrid.WMTS", Ez, OPENLAYERS);
+    Ez.prototype.getMatrixIds = Ez.prototype.q;
+    v("ol.tilegrid.WMTS.createFromCapabilitiesMatrixSet", Fz, OPENLAYERS);
+    v("ol.tilegrid.XYZ", Uy, OPENLAYERS);
+    v("ol.tilegrid.Zoomify", Iz, OPENLAYERS);
+    v("ol.style.AtlasManager", Lz, OPENLAYERS);
+    v("ol.style.Circle", Al, OPENLAYERS);
+    Al.prototype.getAnchor = Al.prototype.mb;
+    Al.prototype.getFill = Al.prototype.ym;
+    Al.prototype.getImage = Al.prototype.Lb;
+    Al.prototype.getOrigin = Al.prototype.rb;
+    Al.prototype.getRadius = Al.prototype.zm;
+    Al.prototype.getSize = Al.prototype.Xa;
+    Al.prototype.getStroke = Al.prototype.Am;
+    v("ol.style.Fill", zl, OPENLAYERS);
+    zl.prototype.getColor = zl.prototype.c;
+    zl.prototype.setColor = zl.prototype.d;
+    v("ol.style.Icon", Fj, OPENLAYERS);
+    Fj.prototype.getAnchor = Fj.prototype.mb;
+    Fj.prototype.getImage = Fj.prototype.Lb;
+    Fj.prototype.getOrigin = Fj.prototype.rb;
+    Fj.prototype.getSrc = Fj.prototype.Bm;
+    Fj.prototype.getSize = Fj.prototype.Xa;
+    v("ol.style.Image", Ej, OPENLAYERS);
+    Ej.prototype.getOpacity = Ej.prototype.ie;
+    Ej.prototype.getRotateWithView = Ej.prototype.Jd;
+    Ej.prototype.getRotation = Ej.prototype.je;
+    Ej.prototype.getScale = Ej.prototype.ke;
+    Ej.prototype.getSnapToPixel = Ej.prototype.Kd;
+    Ej.prototype.setRotation = Ej.prototype.le;
+    Ej.prototype.setScale = Ej.prototype.me;
+    v("ol.style.RegularShape", Pz, OPENLAYERS);
+    Pz.prototype.getAnchor = Pz.prototype.mb;
+    Pz.prototype.getAngle = Pz.prototype.Cm;
+    Pz.prototype.getFill = Pz.prototype.Dm;
+    Pz.prototype.getImage = Pz.prototype.Lb;
+    Pz.prototype.getOrigin = Pz.prototype.rb;
+    Pz.prototype.getPoints = Pz.prototype.Em;
+    Pz.prototype.getRadius = Pz.prototype.Fm;
+    Pz.prototype.getRadius2 = Pz.prototype.tj;
+    Pz.prototype.getSize = Pz.prototype.Xa;
+    Pz.prototype.getStroke = Pz.prototype.Gm;
+    v("ol.style.Stroke", vl, OPENLAYERS);
+    vl.prototype.getColor = vl.prototype.Hm;
+    vl.prototype.getLineCap = vl.prototype.ej;
+    vl.prototype.getLineDash = vl.prototype.Im;
+    vl.prototype.getLineJoin = vl.prototype.fj;
+    vl.prototype.getMiterLimit = vl.prototype.lj;
+    vl.prototype.getWidth = vl.prototype.Jm;
+    vl.prototype.setColor = vl.prototype.Km;
+    vl.prototype.setLineCap = vl.prototype.Zn;
+    vl.prototype.setLineDash = vl.prototype.Lm;
+    vl.prototype.setLineJoin = vl.prototype.$n;
+    vl.prototype.setMiterLimit = vl.prototype.ao;
+    vl.prototype.setWidth = vl.prototype.ko;
+    v("ol.style.Style", Bl, OPENLAYERS);
+    Bl.prototype.getGeometry = Bl.prototype.Q;
+    Bl.prototype.getGeometryFunction = Bl.prototype.Zi;
+    Bl.prototype.getFill = Bl.prototype.Mm;
+    Bl.prototype.getImage = Bl.prototype.Nm;
+    Bl.prototype.getStroke = Bl.prototype.Om;
+    Bl.prototype.getText = Bl.prototype.Pm;
+    Bl.prototype.getZIndex = Bl.prototype.Dj;
+    Bl.prototype.setGeometry = Bl.prototype.Vg;
+    Bl.prototype.setZIndex = Bl.prototype.mo;
+    v("ol.style.Text", ut, OPENLAYERS);
+    ut.prototype.getFont = ut.prototype.Wi;
+    ut.prototype.getOffsetX = ut.prototype.mj;
+    ut.prototype.getOffsetY = ut.prototype.nj;
+    ut.prototype.getFill = ut.prototype.Qm;
+    ut.prototype.getRotation = ut.prototype.Rm;
+    ut.prototype.getScale = ut.prototype.Sm;
+    ut.prototype.getStroke = ut.prototype.Tm;
+    ut.prototype.getText = ut.prototype.Um;
+    ut.prototype.getTextAlign = ut.prototype.xj;
+    ut.prototype.getTextBaseline = ut.prototype.yj;
+    ut.prototype.setFont = ut.prototype.Wn;
+    ut.prototype.setFill = ut.prototype.Vn;
+    ut.prototype.setRotation = ut.prototype.Vm;
+    ut.prototype.setScale = ut.prototype.Wm;
+    ut.prototype.setStroke = ut.prototype.eo;
+    ut.prototype.setText = ut.prototype.fo;
+    ut.prototype.setTextAlign = ut.prototype.ho;
+    ut.prototype.setTextBaseline = ut.prototype.io;
+    v("ol.Sphere", me, OPENLAYERS);
+    me.prototype.geodesicArea = me.prototype.a;
+    me.prototype.haversineDistance = me.prototype.b;
+    v("ol.source.BingMaps", Vy, OPENLAYERS);
+    v("ol.source.BingMaps.TOS_ATTRIBUTION", Wy, OPENLAYERS);
+    v("ol.source.Cluster", Xy, OPENLAYERS);
+    Xy.prototype.getSource = Xy.prototype.X;
+    v("ol.source.ImageCanvas", qn, OPENLAYERS);
+    v("ol.source.ImageMapGuide", $y, OPENLAYERS);
+    $y.prototype.getParams = $y.prototype.Tl;
+    $y.prototype.getImageLoadFunction = $y.prototype.Sl;
+    $y.prototype.updateParams = $y.prototype.Wl;
+    $y.prototype.setImageLoadFunction = $y.prototype.Vl;
+    v("ol.source.Image", jn, OPENLAYERS);
+    ln.prototype.image = ln.prototype.image;
+    v("ol.source.ImageStatic", az, OPENLAYERS);
+    v("ol.source.ImageVector", xp, OPENLAYERS);
+    xp.prototype.getSource = xp.prototype.Xl;
+    xp.prototype.getStyle = xp.prototype.Yl;
+    xp.prototype.getStyleFunction = xp.prototype.Zl;
+    xp.prototype.setStyle = xp.prototype.Mg;
+    v("ol.source.ImageWMS", bz, OPENLAYERS);
+    bz.prototype.getGetFeatureInfoUrl = bz.prototype.bm;
+    bz.prototype.getParams = bz.prototype.dm;
+    bz.prototype.getImageLoadFunction = bz.prototype.cm;
+    bz.prototype.getUrl = bz.prototype.em;
+    bz.prototype.setImageLoadFunction = bz.prototype.fm;
+    bz.prototype.setUrl = bz.prototype.gm;
+    bz.prototype.updateParams = bz.prototype.hm;
+    v("ol.source.MapQuest", iz, OPENLAYERS);
+    iz.prototype.getLayer = iz.prototype.i;
+    v("ol.source.OSM", gz, OPENLAYERS);
+    v("ol.source.OSM.ATTRIBUTION", hz, OPENLAYERS);
+    v("ol.source.Source", Bg, OPENLAYERS);
+    Bg.prototype.getAttributions = Bg.prototype.ea;
+    Bg.prototype.getLogo = Bg.prototype.ca;
+    Bg.prototype.getProjection = Bg.prototype.fa;
+    Bg.prototype.getState = Bg.prototype.ga;
+    v("ol.source.Stamen", nz, OPENLAYERS);
+    v("ol.source.TileArcGISRest", pz, OPENLAYERS);
+    pz.prototype.getParams = pz.prototype.im;
+    pz.prototype.getUrls = pz.prototype.jm;
+    pz.prototype.setUrl = pz.prototype.km;
+    pz.prototype.setUrls = pz.prototype.Ng;
+    pz.prototype.updateParams = pz.prototype.mm;
+    v("ol.source.TileDebug", rz, OPENLAYERS);
+    v("ol.source.TileImage", Sy, OPENLAYERS);
+    Sy.prototype.getTileLoadFunction = Sy.prototype.Ua;
+    Sy.prototype.getTileUrlFunction = Sy.prototype.Va;
+    Sy.prototype.setTileLoadFunction = Sy.prototype.$a;
+    Sy.prototype.setTileUrlFunction = Sy.prototype.pa;
+    v("ol.source.TileJSON", sz, OPENLAYERS);
+    v("ol.source.Tile", Zg, OPENLAYERS);
+    Zg.prototype.getTileGrid = Zg.prototype.ua;
+    bh.prototype.tile = bh.prototype.tile;
+    v("ol.source.TileUTFGrid", tz, OPENLAYERS);
+    tz.prototype.getTemplate = tz.prototype.wj;
+    tz.prototype.forDataAtCoordinateAndResolution = tz.prototype.Gi;
+    v("ol.source.TileVector", yz, OPENLAYERS);
+    yz.prototype.getFeatures = yz.prototype.Dc;
+    yz.prototype.getFeaturesAtCoordinateAndResolution = yz.prototype.Vi;
+    v("ol.source.TileWMS", Az, OPENLAYERS);
+    Az.prototype.getGetFeatureInfoUrl = Az.prototype.pm;
+    Az.prototype.getParams = Az.prototype.qm;
+    Az.prototype.getUrls = Az.prototype.rm;
+    Az.prototype.setUrl = Az.prototype.sm;
+    Az.prototype.setUrls = Az.prototype.Og;
+    Az.prototype.updateParams = Az.prototype.um;
+    v("ol.source.Vector", qp, OPENLAYERS);
+    qp.prototype.addFeature = qp.prototype.jf;
+    qp.prototype.addFeatures = qp.prototype.Oc;
+    qp.prototype.clear = qp.prototype.clear;
+    qp.prototype.forEachFeature = qp.prototype.Rf;
+    qp.prototype.forEachFeatureInExtent = qp.prototype.$c;
+    qp.prototype.forEachFeatureIntersectingExtent = qp.prototype.Oe;
+    qp.prototype.getFeatures = qp.prototype.Dc;
+    qp.prototype.getFeaturesAtCoordinate = qp.prototype.Re;
+    qp.prototype.getFeaturesInExtent = qp.prototype.Se;
+    qp.prototype.getClosestFeatureToCoordinate = qp.prototype.Tf;
+    qp.prototype.getExtent = qp.prototype.G;
+    qp.prototype.getFeatureById = qp.prototype.Qe;
+    qp.prototype.removeFeature = qp.prototype.Qg;
+    up.prototype.feature = up.prototype.feature;
+    v("ol.source.WMTS", Gz, OPENLAYERS);
+    Gz.prototype.getDimensions = Gz.prototype.Ti;
+    Gz.prototype.getFormat = Gz.prototype.Xi;
+    Gz.prototype.getLayer = Gz.prototype.vm;
+    Gz.prototype.getMatrixSet = Gz.prototype.jj;
+    Gz.prototype.getRequestEncoding = Gz.prototype.uj;
+    Gz.prototype.getStyle = Gz.prototype.wm;
+    Gz.prototype.getUrls = Gz.prototype.xm;
+    Gz.prototype.getVersion = Gz.prototype.Aj;
+    Gz.prototype.updateDimensions = Gz.prototype.uo;
+    v("ol.source.WMTS.optionsFromCapabilities", function(a, c) {
+        var d = Wa(a.Contents.Layer, function(a) {
+                return a.Identifier == c.layer
+            }),
+            e, f, g;
+        e = 1 < d.TileMatrixSetLink.length ? Xa(d.TileMatrixSetLink, function(a) {
+            return a.TileMatrixSet == c.matrixSet
+        }) : m(c.projection) ? Xa(d.TileMatrixSetLink, function(a) {
+            return a.TileMatrixSet.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3") == c.projection
+        }) : 0;
+        0 > e && (e = 0);
+        f = d.TileMatrixSetLink[e].TileMatrixSet;
+        e = d.WGS84BoundingBox;
+        m(e) && (g = re("EPSG:4326").G(), g = e[0] == g[0] && e[2] == g[2]);
+        var h = d.Format[0];
+        m(c.format) && (h = c.format);
+        e = Xa(d.Style, function(a) {
+            return m(c.style) ? a.Title == c.style : a.isDefault
+        });
+        0 > e && (e = 0);
+        e = d.Style[e].Identifier;
+        var k = {};
+        m(d.Dimension) && Sa(d.Dimension, function(a) {
+            var c = a.Identifier,
+                d = a["default"];
+            m(d) || (d = a.values[0]);
+            k[c] = d
+        });
+        var n = Wa(a.Contents.TileMatrixSet, function(a) {
+                return a.Identifier == f
+            }),
+            p = Fz(n),
+            n = m(c.projection) ? re(c.projection) : re(n.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3")),
+            q = [],
+            r = c.requestEncoding,
+            r = m(r) ? r : "";
+        if (a.OperationsMetadata.hasOwnProperty("GetTile") && 0 != r.lastIndexOf("REST", 0))
+            for (var d = a.OperationsMetadata.GetTile.DCP.HTTP.Get, t = 0, u = d.length; t < u; ++t) {
+                var A = Wa(d[t].Constraint, function(a) {
+                    return "GetEncoding" == a.name
+                }).AllowedValues.Value;
+                0 < A.length && Ya(A, "KVP") && (r = "KVP", q.push(d[t].href))
+            } else r = "REST", Sa(d.ResourceURL, function(a) {
+                "tile" == a.resourceType && (h = a.format, q.push(a.template))
+            });
+        return {
+            urls: q,
+            layer: c.layer,
+            matrixSet: f,
+            format: h,
+            projection: n,
+            requestEncoding: r,
+            tileGrid: p,
+            style: e,
+            dimensions: k,
+            wrapX: g
+        }
+    }, OPENLAYERS);
+    v("ol.source.XYZ", fz, OPENLAYERS);
+    fz.prototype.setTileUrlFunction = fz.prototype.pa;
+    fz.prototype.setUrl = fz.prototype.e;
+    v("ol.source.Zoomify", Jz, OPENLAYERS);
+    il.prototype.vectorContext = il.prototype.vectorContext;
+    il.prototype.frameState = il.prototype.frameState;
+    il.prototype.context = il.prototype.context;
+    il.prototype.glContext = il.prototype.glContext;
+    v("ol.render.VectorContext", hl, OPENLAYERS);
+    rq.prototype.drawAsync = rq.prototype.tc;
+    rq.prototype.drawCircleGeometry = rq.prototype.uc;
+    rq.prototype.drawFeature = rq.prototype.Le;
+    rq.prototype.drawGeometryCollectionGeometry = rq.prototype.zd;
+    rq.prototype.drawPointGeometry = rq.prototype.kb;
+    rq.prototype.drawLineStringGeometry = rq.prototype.zb;
+    rq.prototype.drawMultiLineStringGeometry = rq.prototype.vc;
+    rq.prototype.drawMultiPointGeometry = rq.prototype.jb;
+    rq.prototype.drawMultiPolygonGeometry = rq.prototype.wc;
+    rq.prototype.drawPolygonGeometry = rq.prototype.Rb;
+    rq.prototype.drawText = rq.prototype.lb;
+    rq.prototype.setFillStrokeStyle = rq.prototype.Aa;
+    rq.prototype.setImageStyle = rq.prototype.Za;
+    rq.prototype.setTextStyle = rq.prototype.Ba;
+    cm.prototype.drawAsync = cm.prototype.tc;
+    cm.prototype.drawCircleGeometry = cm.prototype.uc;
+    cm.prototype.drawFeature = cm.prototype.Le;
+    cm.prototype.drawPointGeometry = cm.prototype.kb;
+    cm.prototype.drawMultiPointGeometry = cm.prototype.jb;
+    cm.prototype.drawLineStringGeometry = cm.prototype.zb;
+    cm.prototype.drawMultiLineStringGeometry = cm.prototype.vc;
+    cm.prototype.drawPolygonGeometry = cm.prototype.Rb;
+    cm.prototype.drawMultiPolygonGeometry = cm.prototype.wc;
+    cm.prototype.setFillStrokeStyle = cm.prototype.Aa;
+    cm.prototype.setImageStyle = cm.prototype.Za;
+    cm.prototype.setTextStyle = cm.prototype.Ba;
+    v("ol.proj.common.add", bm, OPENLAYERS);
+    v("ol.proj.METERS_PER_UNIT", oe, OPENLAYERS);
+    v("ol.proj.Projection", pe, OPENLAYERS);
+    pe.prototype.getCode = pe.prototype.Ri;
+    pe.prototype.getExtent = pe.prototype.G;
+    pe.prototype.getUnits = pe.prototype.Ll;
+    pe.prototype.getMetersPerUnit = pe.prototype.Gd;
+    pe.prototype.getWorldExtent = pe.prototype.Cj;
+    pe.prototype.isGlobal = pe.prototype.Ml;
+    pe.prototype.setGlobal = pe.prototype.Yn;
+    pe.prototype.setExtent = pe.prototype.Nl;
+    pe.prototype.setWorldExtent = pe.prototype.lo;
+    pe.prototype.setGetPointResolution = pe.prototype.Xn;
+    pe.prototype.getPointResolution = pe.prototype.getPointResolution;
+    v("ol.proj.addEquivalentProjections", se, OPENLAYERS);
+    v("ol.proj.addProjection", Fe, OPENLAYERS);
+    v("ol.proj.addCoordinateTransforms", te, OPENLAYERS);
+    v("ol.proj.fromLonLat", function(a, c) {
+        return Le(a, "EPSG:4326", m(c) ? c : "EPSG:3857")
+    }, OPENLAYERS);
+    v("ol.proj.toLonLat", function(a, c) {
+        return Le(a, m(c) ? c : "EPSG:3857", "EPSG:4326")
+    }, OPENLAYERS);
+    v("ol.proj.get", re, OPENLAYERS);
+    v("ol.proj.getTransform", Je, OPENLAYERS);
+    v("ol.proj.transform", Le, OPENLAYERS);
+    v("ol.proj.transformExtent", Me, OPENLAYERS);
+    v("ol.layer.Heatmap", Z, OPENLAYERS);
+    Z.prototype.getBlur = Z.prototype.Sf;
+    Z.prototype.getGradient = Z.prototype.Wf;
+    Z.prototype.getRadius = Z.prototype.Hg;
+    Z.prototype.setBlur = Z.prototype.th;
+    Z.prototype.setGradient = Z.prototype.yh;
+    Z.prototype.setRadius = Z.prototype.Ig;
+    v("ol.layer.Image", I, OPENLAYERS);
+    I.prototype.getSource = I.prototype.da;
+    v("ol.layer.Layer", C, OPENLAYERS);
+    C.prototype.getSource = C.prototype.da;
+    C.prototype.setSource = C.prototype.Jc;
+    v("ol.layer.Base", mj, OPENLAYERS);
+    mj.prototype.getBrightness = mj.prototype.Bb;
+    mj.prototype.getContrast = mj.prototype.Cb;
+    mj.prototype.getHue = mj.prototype.Db;
+    mj.prototype.getExtent = mj.prototype.G;
+    mj.prototype.getMaxResolution = mj.prototype.Eb;
+    mj.prototype.getMinResolution = mj.prototype.Fb;
+    mj.prototype.getOpacity = mj.prototype.Kb;
+    mj.prototype.getSaturation = mj.prototype.Gb;
+    mj.prototype.getVisible = mj.prototype.eb;
+    mj.prototype.setBrightness = mj.prototype.gc;
+    mj.prototype.setContrast = mj.prototype.hc;
+    mj.prototype.setHue = mj.prototype.ic;
+    mj.prototype.setExtent = mj.prototype.bc;
+    mj.prototype.setMaxResolution = mj.prototype.jc;
+    mj.prototype.setMinResolution = mj.prototype.kc;
+    mj.prototype.setOpacity = mj.prototype.cc;
+    mj.prototype.setSaturation = mj.prototype.lc;
+    mj.prototype.setVisible = mj.prototype.mc;
+    v("ol.layer.Group", G, OPENLAYERS);
+    G.prototype.getLayers = G.prototype.Bc;
+    G.prototype.setLayers = G.prototype.Ah;
+    v("ol.layer.Tile", L, OPENLAYERS);
+    L.prototype.getPreload = L.prototype.a;
+    L.prototype.getSource = L.prototype.da;
+    L.prototype.setPreload = L.prototype.d;
+    L.prototype.getUseInterimTilesOnError = L.prototype.c;
+    L.prototype.setUseInterimTilesOnError = L.prototype.e;
+    v("ol.layer.Vector", M, OPENLAYERS);
+    M.prototype.getSource = M.prototype.da;
+    M.prototype.getStyle = M.prototype.H;
+    M.prototype.getStyleFunction = M.prototype.J;
+    M.prototype.setStyle = M.prototype.e;
+    v("ol.interaction.DoubleClickZoom", ak, OPENLAYERS);
+    v("ol.interaction.DoubleClickZoom.handleEvent", bk, OPENLAYERS);
+    v("ol.interaction.DragAndDrop", Kx, OPENLAYERS);
+    v("ol.interaction.DragAndDrop.handleEvent", Gg, OPENLAYERS);
+    Lx.prototype.features = Lx.prototype.features;
+    Lx.prototype.file = Lx.prototype.file;
+    Lx.prototype.projection = Lx.prototype.projection;
+    ml.prototype.coordinate = ml.prototype.coordinate;
+    v("ol.interaction.DragBox", nl, OPENLAYERS);
+    nl.prototype.getGeometry = nl.prototype.Q;
+    v("ol.interaction.DragPan", mk, OPENLAYERS);
+    v("ol.interaction.DragRotateAndZoom", Ox, OPENLAYERS);
+    v("ol.interaction.DragRotate", qk, OPENLAYERS);
+    v("ol.interaction.DragZoom", Gl, OPENLAYERS);
+    Sx.prototype.feature = Sx.prototype.feature;
+    v("ol.interaction.Draw", Tx, OPENLAYERS);
+    v("ol.interaction.Draw.handleEvent", Vx, OPENLAYERS);
+    Tx.prototype.finishDrawing = Tx.prototype.X;
+    v("ol.interaction.Interaction", Wj, OPENLAYERS);
+    Wj.prototype.getActive = Wj.prototype.c;
+    Wj.prototype.setActive = Wj.prototype.d;
+    v("ol.interaction.defaults", Vl, OPENLAYERS);
+    v("ol.interaction.KeyboardPan", Hl, OPENLAYERS);
+    v("ol.interaction.KeyboardPan.handleEvent", Il, OPENLAYERS);
+    v("ol.interaction.KeyboardZoom", Jl, OPENLAYERS);
+    v("ol.interaction.KeyboardZoom.handleEvent", Kl, OPENLAYERS);
+    v("ol.interaction.Modify", hy, OPENLAYERS);
+    v("ol.interaction.Modify.handleEvent", ky, OPENLAYERS);
+    v("ol.interaction.MouseWheelZoom", Ll, OPENLAYERS);
+    v("ol.interaction.MouseWheelZoom.handleEvent", Ml, OPENLAYERS);
+    v("ol.interaction.PinchRotate", Nl, OPENLAYERS);
+    v("ol.interaction.PinchZoom", Rl, OPENLAYERS);
+    v("ol.interaction.Pointer", jk, OPENLAYERS);
+    v("ol.interaction.Pointer.handleEvent", kk, OPENLAYERS);
+    ry.prototype.selected = ry.prototype.selected;
+    ry.prototype.deselected = ry.prototype.deselected;
+    v("ol.interaction.Select", sy, OPENLAYERS);
+    sy.prototype.getFeatures = sy.prototype.p;
+    v("ol.interaction.Select.handleEvent", ty, OPENLAYERS);
+    sy.prototype.setMap = sy.prototype.setMap;
+    v("ol.interaction.Snap", vy, OPENLAYERS);
+    vy.prototype.addFeature = vy.prototype.ed;
+    vy.prototype.removeFeature = vy.prototype.fd;
+    v("ol.geom.Circle", Pm, OPENLAYERS);
+    Pm.prototype.clone = Pm.prototype.clone;
+    Pm.prototype.getCenter = Pm.prototype.dd;
+    Pm.prototype.getRadius = Pm.prototype.zg;
+    Pm.prototype.getType = Pm.prototype.M;
+    Pm.prototype.setCenter = Pm.prototype.pl;
+    Pm.prototype.setCenterAndRadius = Pm.prototype.uh;
+    Pm.prototype.setRadius = Pm.prototype.Ag;
+    Pm.prototype.transform = Pm.prototype.transform;
+    v("ol.geom.Geometry", uk, OPENLAYERS);
+    uk.prototype.getClosestPoint = uk.prototype.e;
+    uk.prototype.getExtent = uk.prototype.G;
+    v("ol.geom.GeometryCollection", Rm, OPENLAYERS);
+    Rm.prototype.clone = Rm.prototype.clone;
+    Rm.prototype.getGeometries = Rm.prototype.Vf;
+    Rm.prototype.getType = Rm.prototype.M;
+    Rm.prototype.intersectsExtent = Rm.prototype.ra;
+    Rm.prototype.setGeometries = Rm.prototype.xh;
+    Rm.prototype.applyTransform = Rm.prototype.qa;
+    Rm.prototype.translate = Rm.prototype.Oa;
+    v("ol.geom.LinearRing", Qk, OPENLAYERS);
+    Qk.prototype.clone = Qk.prototype.clone;
+    Qk.prototype.getArea = Qk.prototype.rl;
+    Qk.prototype.getCoordinates = Qk.prototype.K;
+    Qk.prototype.getType = Qk.prototype.M;
+    Qk.prototype.setCoordinates = Qk.prototype.W;
+    v("ol.geom.LineString", O, OPENLAYERS);
+    O.prototype.appendCoordinate = O.prototype.ui;
+    O.prototype.clone = O.prototype.clone;
+    O.prototype.forEachSegment = O.prototype.Ji;
+    O.prototype.getCoordinateAtM = O.prototype.ql;
+    O.prototype.getCoordinates = O.prototype.K;
+    O.prototype.getLength = O.prototype.Bg;
+    O.prototype.getType = O.prototype.M;
+    O.prototype.intersectsExtent = O.prototype.ra;
+    O.prototype.setCoordinates = O.prototype.W;
+    v("ol.geom.MultiLineString", Q, OPENLAYERS);
+    Q.prototype.appendLineString = Q.prototype.vi;
+    Q.prototype.clone = Q.prototype.clone;
+    Q.prototype.getCoordinateAtM = Q.prototype.sl;
+    Q.prototype.getCoordinates = Q.prototype.K;
+    Q.prototype.getLineString = Q.prototype.gj;
+    Q.prototype.getLineStrings = Q.prototype.ad;
+    Q.prototype.getType = Q.prototype.M;
+    Q.prototype.intersectsExtent = Q.prototype.ra;
+    Q.prototype.setCoordinates = Q.prototype.W;
+    v("ol.geom.MultiPoint", an, OPENLAYERS);
+    an.prototype.appendPoint = an.prototype.xi;
+    an.prototype.clone = an.prototype.clone;
+    an.prototype.getCoordinates = an.prototype.K;
+    an.prototype.getPoint = an.prototype.qj;
+    an.prototype.getPoints = an.prototype.ce;
+    an.prototype.getType = an.prototype.M;
+    an.prototype.intersectsExtent = an.prototype.ra;
+    an.prototype.setCoordinates = an.prototype.W;
+    v("ol.geom.MultiPolygon", R, OPENLAYERS);
+    R.prototype.appendPolygon = R.prototype.yi;
+    R.prototype.clone = R.prototype.clone;
+    R.prototype.getArea = R.prototype.tl;
+    R.prototype.getCoordinates = R.prototype.K;
+    R.prototype.getInteriorPoints = R.prototype.dj;
+    R.prototype.getPolygon = R.prototype.sj;
+    R.prototype.getPolygons = R.prototype.Id;
+    R.prototype.getType = R.prototype.M;
+    R.prototype.intersectsExtent = R.prototype.ra;
+    R.prototype.setCoordinates = R.prototype.W;
+    v("ol.geom.Point", E, OPENLAYERS);
+    E.prototype.clone = E.prototype.clone;
+    E.prototype.getCoordinates = E.prototype.K;
+    E.prototype.getType = E.prototype.M;
+    E.prototype.intersectsExtent = E.prototype.ra;
+    E.prototype.setCoordinates = E.prototype.W;
+    v("ol.geom.Polygon", F, OPENLAYERS);
+    F.prototype.appendLinearRing = F.prototype.wi;
+    F.prototype.clone = F.prototype.clone;
+    F.prototype.getArea = F.prototype.ul;
+    F.prototype.getCoordinates = F.prototype.K;
+    F.prototype.getInteriorPoint = F.prototype.cj;
+    F.prototype.getLinearRingCount = F.prototype.ij;
+    F.prototype.getLinearRing = F.prototype.hj;
+    F.prototype.getLinearRings = F.prototype.Ed;
+    F.prototype.getType = F.prototype.M;
+    F.prototype.intersectsExtent = F.prototype.ra;
+    F.prototype.setCoordinates = F.prototype.W;
+    v("ol.geom.Polygon.circular", gl, OPENLAYERS);
+    v("ol.geom.Polygon.fromExtent", function(a) {
+        var c = a[0],
+            d = a[1],
+            e = a[2];
+        a = a[3];
+        c = [c, d, c, a, e, a, e, d, c, d];
+        d = new F(null);
+        dl(d, "XY", c, [c.length]);
+        return d
+    }, OPENLAYERS);
+    v("ol.geom.SimpleGeometry", wk, OPENLAYERS);
+    wk.prototype.getFirstCoordinate = wk.prototype.ob;
+    wk.prototype.getLastCoordinate = wk.prototype.pb;
+    wk.prototype.getLayout = wk.prototype.qb;
+    wk.prototype.applyTransform = wk.prototype.qa;
+    wk.prototype.translate = wk.prototype.Oa;
+    v("ol.format.EsriJSON", Cr, OPENLAYERS);
+    Cr.prototype.readFeature = Cr.prototype.sb;
+    Cr.prototype.readFeatures = Cr.prototype.ja;
+    Cr.prototype.readGeometry = Cr.prototype.Gc;
+    Cr.prototype.readProjection = Cr.prototype.za;
+    Cr.prototype.writeGeometry = Cr.prototype.Mc;
+    Cr.prototype.writeGeometryObject = Cr.prototype.Be;
+    Cr.prototype.writeFeature = Cr.prototype.qd;
+    Cr.prototype.writeFeatureObject = Cr.prototype.Lc;
+    Cr.prototype.writeFeatures = Cr.prototype.ub;
+    Cr.prototype.writeFeaturesObject = Cr.prototype.ze;
+    v("ol.format.Feature", wr, OPENLAYERS);
+    v("ol.format.GeoJSON", Jr, OPENLAYERS);
+    Jr.prototype.readFeature = Jr.prototype.sb;
+    Jr.prototype.readFeatures = Jr.prototype.ja;
+    Jr.prototype.readGeometry = Jr.prototype.Gc;
+    Jr.prototype.readProjection = Jr.prototype.za;
+    Jr.prototype.writeFeature = Jr.prototype.qd;
+    Jr.prototype.writeFeatureObject = Jr.prototype.Lc;
+    Jr.prototype.writeFeatures = Jr.prototype.ub;
+    Jr.prototype.writeFeaturesObject = Jr.prototype.ze;
+    Jr.prototype.writeGeometry = Jr.prototype.Mc;
+    Jr.prototype.writeGeometryObject = Jr.prototype.Be;
+    v("ol.format.GPX", ms, OPENLAYERS);
+    ms.prototype.readFeature = ms.prototype.sb;
+    ms.prototype.readFeatures = ms.prototype.ja;
+    ms.prototype.readProjection = ms.prototype.za;
+    ms.prototype.writeFeatures = ms.prototype.ub;
+    ms.prototype.writeFeaturesNode = ms.prototype.a;
+    v("ol.format.IGC", Xs, OPENLAYERS);
+    Xs.prototype.readFeature = Xs.prototype.sb;
+    Xs.prototype.readFeatures = Xs.prototype.ja;
+    Xs.prototype.readProjection = Xs.prototype.za;
+    v("ol.format.KML", vt, OPENLAYERS);
+    vt.prototype.readFeature = vt.prototype.sb;
+    vt.prototype.readFeatures = vt.prototype.ja;
+    vt.prototype.readName = vt.prototype.Dn;
+    vt.prototype.readNetworkLinks = vt.prototype.En;
+    vt.prototype.readProjection = vt.prototype.za;
+    vt.prototype.writeFeatures = vt.prototype.ub;
+    vt.prototype.writeFeaturesNode = vt.prototype.a;
+    v("ol.format.OSMXML", gv, OPENLAYERS);
+    gv.prototype.readFeatures = gv.prototype.ja;
+    gv.prototype.readProjection = gv.prototype.za;
+    v("ol.format.Polyline", Fv, OPENLAYERS);
+    v("ol.format.Polyline.encodeDeltas", Gv, OPENLAYERS);
+    v("ol.format.Polyline.decodeDeltas", Iv, OPENLAYERS);
+    v("ol.format.Polyline.encodeFloats", Hv, OPENLAYERS);
+    v("ol.format.Polyline.decodeFloats", Jv, OPENLAYERS);
+    Fv.prototype.readFeature = Fv.prototype.sb;
+    Fv.prototype.readFeatures = Fv.prototype.ja;
+    Fv.prototype.readGeometry = Fv.prototype.Gc;
+    Fv.prototype.readProjection = Fv.prototype.za;
+    Fv.prototype.writeGeometry = Fv.prototype.Mc;
+    v("ol.format.TopoJSON", Kv, OPENLAYERS);
+    Kv.prototype.readFeatures = Kv.prototype.ja;
+    Kv.prototype.readProjection = Kv.prototype.za;
+    v("ol.format.WFS", Qv, OPENLAYERS);
+    Qv.prototype.readFeatures = Qv.prototype.ja;
+    Qv.prototype.readTransactionResponse = Qv.prototype.g;
+    Qv.prototype.readFeatureCollectionMetadata = Qv.prototype.f;
+    Qv.prototype.writeGetFeature = Qv.prototype.i;
+    Qv.prototype.writeTransaction = Qv.prototype.o;
+    Qv.prototype.readProjection = Qv.prototype.za;
+    v("ol.format.WKT", cw, OPENLAYERS);
+    cw.prototype.readFeature = cw.prototype.sb;
+    cw.prototype.readFeatures = cw.prototype.ja;
+    cw.prototype.readGeometry = cw.prototype.Gc;
+    cw.prototype.writeFeature = cw.prototype.qd;
+    cw.prototype.writeFeatures = cw.prototype.ub;
+    cw.prototype.writeGeometry = cw.prototype.Mc;
+    v("ol.format.WMSCapabilities", uw, OPENLAYERS);
+    uw.prototype.read = uw.prototype.c;
+    v("ol.format.WMSGetFeatureInfo", Rw, OPENLAYERS);
+    Rw.prototype.readFeatures = Rw.prototype.ja;
+    v("ol.format.WMTSCapabilities", Tw, OPENLAYERS);
+    Tw.prototype.read = Tw.prototype.c;
+    v("ol.format.GML2", ls, OPENLAYERS);
+    v("ol.format.GML3", cs, OPENLAYERS);
+    cs.prototype.writeGeometryNode = cs.prototype.q;
+    cs.prototype.writeFeatures = cs.prototype.ub;
+    cs.prototype.writeFeaturesNode = cs.prototype.a;
+    v("ol.format.GML", cs, OPENLAYERS);
+    cs.prototype.writeFeatures = cs.prototype.ub;
+    cs.prototype.writeFeaturesNode = cs.prototype.a;
+    Rr.prototype.readFeatures = Rr.prototype.ja;
+    v("ol.events.condition.altKeyOnly", function(a) {
+        a = a.b;
+        return a.a && !a.g && !a.d
+    }, OPENLAYERS);
+    v("ol.events.condition.altShiftKeysOnly", ck, OPENLAYERS);
+    v("ol.events.condition.always", Gg, OPENLAYERS);
+    v("ol.events.condition.click", function(a) {
+        return a.type == cj
+    }, OPENLAYERS);
+    v("ol.events.condition.never", Fg, OPENLAYERS);
+    v("ol.events.condition.pointerMove", dk, OPENLAYERS);
+    v("ol.events.condition.singleClick", ek, OPENLAYERS);
+    v("ol.events.condition.noModifierKeys", fk, OPENLAYERS);
+    v("ol.events.condition.platformModifierKeyOnly", function(a) {
+        a = a.b;
+        return !a.a && a.g && !a.d
+    }, OPENLAYERS);
+    v("ol.events.condition.shiftKeyOnly", gk, OPENLAYERS);
+    v("ol.events.condition.targetNotEditable", hk, OPENLAYERS);
+    v("ol.events.condition.mouseOnly", ik, OPENLAYERS);
+    v("ol.control.Attribution", ch, OPENLAYERS);
+    v("ol.control.Attribution.render", dh, OPENLAYERS);
+    ch.prototype.getCollapsible = ch.prototype.fl;
+    ch.prototype.setCollapsible = ch.prototype.il;
+    ch.prototype.setCollapsed = ch.prototype.hl;
+    ch.prototype.getCollapsed = ch.prototype.el;
+    v("ol.control.Control", ug, OPENLAYERS);
+    ug.prototype.getMap = ug.prototype.e;
+    ug.prototype.setMap = ug.prototype.setMap;
+    ug.prototype.setTarget = ug.prototype.c;
+    v("ol.control.defaults", ih, OPENLAYERS);
+    v("ol.control.FullScreen", nh, OPENLAYERS);
+    v("ol.control.MousePosition", oh, OPENLAYERS);
+    v("ol.control.MousePosition.render", ph, OPENLAYERS);
+    oh.prototype.getCoordinateFormat = oh.prototype.Uf;
+    oh.prototype.getProjection = oh.prototype.xg;
+    oh.prototype.setMap = oh.prototype.setMap;
+    oh.prototype.setCoordinateFormat = oh.prototype.vh;
+    oh.prototype.setProjection = oh.prototype.yg;
+    v("ol.control.OverviewMap", Uq, OPENLAYERS);
+    Uq.prototype.setMap = Uq.prototype.setMap;
+    v("ol.control.OverviewMap.render", Vq, OPENLAYERS);
+    Uq.prototype.getCollapsible = Uq.prototype.ll;
+    Uq.prototype.setCollapsible = Uq.prototype.ol;
+    Uq.prototype.setCollapsed = Uq.prototype.nl;
+    Uq.prototype.getCollapsed = Uq.prototype.kl;
+    v("ol.control.Rotate", fh, OPENLAYERS);
+    v("ol.control.Rotate.render", gh, OPENLAYERS);
+    v("ol.control.ScaleLine", Zq, OPENLAYERS);
+    Zq.prototype.getUnits = Zq.prototype.p;
+    v("ol.control.ScaleLine.render", $q, OPENLAYERS);
+    Zq.prototype.setUnits = Zq.prototype.J;
+    v("ol.control.Zoom", hh, OPENLAYERS);
+    v("ol.control.ZoomSlider", nr, OPENLAYERS);
+    v("ol.control.ZoomSlider.render", pr, OPENLAYERS);
+    v("ol.control.ZoomToExtent", sr, OPENLAYERS);
+    v("ol.color.asArray", tf, OPENLAYERS);
+    v("ol.color.asString", vf, OPENLAYERS);
+    fd.prototype.changed = fd.prototype.k;
+    fd.prototype.getRevision = fd.prototype.v;
+    fd.prototype.on = fd.prototype.r;
+    fd.prototype.once = fd.prototype.A;
+    fd.prototype.un = fd.prototype.u;
+    fd.prototype.unByKey = fd.prototype.B;
+    of.prototype.get = of.prototype.get;
+    of.prototype.getKeys = of.prototype.C;
+    of.prototype.getProperties = of.prototype.D;
+    of.prototype.set = of.prototype.set;
+    of.prototype.setProperties = of.prototype.t;
+    of.prototype.unset = of.prototype.I;
+    of.prototype.changed = of.prototype.k;
+    of.prototype.getRevision = of.prototype.v;
+    of.prototype.on = of.prototype.r;
+    of.prototype.once = of.prototype.A;
+    of.prototype.un = of.prototype.u;
+    of.prototype.unByKey = of.prototype.B;
+    tr.prototype.get = tr.prototype.get;
+    tr.prototype.getKeys = tr.prototype.C;
+    tr.prototype.getProperties = tr.prototype.D;
+    tr.prototype.set = tr.prototype.set;
+    tr.prototype.setProperties = tr.prototype.t;
+    tr.prototype.unset = tr.prototype.I;
+    tr.prototype.changed = tr.prototype.k;
+    tr.prototype.getRevision = tr.prototype.v;
+    tr.prototype.on = tr.prototype.r;
+    tr.prototype.once = tr.prototype.A;
+    tr.prototype.un = tr.prototype.u;
+    tr.prototype.unByKey = tr.prototype.B;
+    X.prototype.get = X.prototype.get;
+    X.prototype.getKeys = X.prototype.C;
+    X.prototype.getProperties = X.prototype.D;
+    X.prototype.set = X.prototype.set;
+    X.prototype.setProperties = X.prototype.t;
+    X.prototype.unset = X.prototype.I;
+    X.prototype.changed = X.prototype.k;
+    X.prototype.getRevision = X.prototype.v;
+    X.prototype.on = X.prototype.r;
+    X.prototype.once = X.prototype.A;
+    X.prototype.un = X.prototype.u;
+    X.prototype.unByKey = X.prototype.B;
+    fx.prototype.get = fx.prototype.get;
+    fx.prototype.getKeys = fx.prototype.C;
+    fx.prototype.getProperties = fx.prototype.D;
+    fx.prototype.set = fx.prototype.set;
+    fx.prototype.setProperties = fx.prototype.t;
+    fx.prototype.unset = fx.prototype.I;
+    fx.prototype.changed = fx.prototype.k;
+    fx.prototype.getRevision = fx.prototype.v;
+    fx.prototype.on = fx.prototype.r;
+    fx.prototype.once = fx.prototype.A;
+    fx.prototype.un = fx.prototype.u;
+    fx.prototype.unByKey = fx.prototype.B;
+    px.prototype.getTileCoord = px.prototype.f;
+    W.prototype.get = W.prototype.get;
+    W.prototype.getKeys = W.prototype.C;
+    W.prototype.getProperties = W.prototype.D;
+    W.prototype.set = W.prototype.set;
+    W.prototype.setProperties = W.prototype.t;
+    W.prototype.unset = W.prototype.I;
+    W.prototype.changed = W.prototype.k;
+    W.prototype.getRevision = W.prototype.v;
+    W.prototype.on = W.prototype.r;
+    W.prototype.once = W.prototype.A;
+    W.prototype.un = W.prototype.u;
+    W.prototype.unByKey = W.prototype.B;
+    Zi.prototype.map = Zi.prototype.map;
+    Zi.prototype.frameState = Zi.prototype.frameState;
+    $i.prototype.originalEvent = $i.prototype.originalEvent;
+    $i.prototype.pixel = $i.prototype.pixel;
+    $i.prototype.coordinate = $i.prototype.coordinate;
+    $i.prototype.dragging = $i.prototype.dragging;
+    $i.prototype.preventDefault = $i.prototype.preventDefault;
+    $i.prototype.stopPropagation = $i.prototype.fb;
+    $i.prototype.map = $i.prototype.map;
+    $i.prototype.frameState = $i.prototype.frameState;
+    Rq.prototype.get = Rq.prototype.get;
+    Rq.prototype.getKeys = Rq.prototype.C;
+    Rq.prototype.getProperties = Rq.prototype.D;
+    Rq.prototype.set = Rq.prototype.set;
+    Rq.prototype.setProperties = Rq.prototype.t;
+    Rq.prototype.unset = Rq.prototype.I;
+    Rq.prototype.changed = Rq.prototype.k;
+    Rq.prototype.getRevision = Rq.prototype.v;
+    Rq.prototype.on = Rq.prototype.r;
+    Rq.prototype.once = Rq.prototype.A;
+    Rq.prototype.un = Rq.prototype.u;
+    Rq.prototype.unByKey = Rq.prototype.B;
+    Ne.prototype.get = Ne.prototype.get;
+    Ne.prototype.getKeys = Ne.prototype.C;
+    Ne.prototype.getProperties = Ne.prototype.D;
+    Ne.prototype.set = Ne.prototype.set;
+    Ne.prototype.setProperties = Ne.prototype.t;
+    Ne.prototype.unset = Ne.prototype.I;
+    Ne.prototype.changed = Ne.prototype.k;
+    Ne.prototype.getRevision = Ne.prototype.v;
+    Ne.prototype.on = Ne.prototype.r;
+    Ne.prototype.once = Ne.prototype.A;
+    Ne.prototype.un = Ne.prototype.u;
+    Ne.prototype.unByKey = Ne.prototype.B;
+    Ez.prototype.getMaxZoom = Ez.prototype.Fd;
+    Ez.prototype.getMinZoom = Ez.prototype.Hd;
+    Ez.prototype.getOrigin = Ez.prototype.Mb;
+    Ez.prototype.getResolution = Ez.prototype.ma;
+    Ez.prototype.getResolutions = Ez.prototype.ne;
+    Ez.prototype.getTileCoordForCoordAndResolution = Ez.prototype.Wb;
+    Ez.prototype.getTileCoordForCoordAndZ = Ez.prototype.cd;
+    Ez.prototype.getTileSize = Ez.prototype.na;
+    Uy.prototype.getMaxZoom = Uy.prototype.Fd;
+    Uy.prototype.getMinZoom = Uy.prototype.Hd;
+    Uy.prototype.getOrigin = Uy.prototype.Mb;
+    Uy.prototype.getResolution = Uy.prototype.ma;
+    Uy.prototype.getResolutions = Uy.prototype.ne;
+    Uy.prototype.getTileCoordForCoordAndResolution = Uy.prototype.Wb;
+    Uy.prototype.getTileCoordForCoordAndZ = Uy.prototype.cd;
+    Uy.prototype.getTileSize = Uy.prototype.na;
+    Iz.prototype.getMaxZoom = Iz.prototype.Fd;
+    Iz.prototype.getMinZoom = Iz.prototype.Hd;
+    Iz.prototype.getOrigin = Iz.prototype.Mb;
+    Iz.prototype.getResolution = Iz.prototype.ma;
+    Iz.prototype.getResolutions = Iz.prototype.ne;
+    Iz.prototype.getTileCoordForCoordAndResolution = Iz.prototype.Wb;
+    Iz.prototype.getTileCoordForCoordAndZ = Iz.prototype.cd;
+    Iz.prototype.getTileSize = Iz.prototype.na;
+    Al.prototype.getOpacity = Al.prototype.ie;
+    Al.prototype.getRotateWithView = Al.prototype.Jd;
+    Al.prototype.getRotation = Al.prototype.je;
+    Al.prototype.getScale = Al.prototype.ke;
+    Al.prototype.getSnapToPixel = Al.prototype.Kd;
+    Al.prototype.setRotation = Al.prototype.le;
+    Al.prototype.setScale = Al.prototype.me;
+    Fj.prototype.getOpacity = Fj.prototype.ie;
+    Fj.prototype.getRotateWithView = Fj.prototype.Jd;
+    Fj.prototype.getRotation = Fj.prototype.je;
+    Fj.prototype.getScale = Fj.prototype.ke;
+    Fj.prototype.getSnapToPixel = Fj.prototype.Kd;
+    Fj.prototype.setRotation = Fj.prototype.le;
+    Fj.prototype.setScale = Fj.prototype.me;
+    Pz.prototype.getOpacity = Pz.prototype.ie;
+    Pz.prototype.getRotateWithView = Pz.prototype.Jd;
+    Pz.prototype.getRotation = Pz.prototype.je;
+    Pz.prototype.getScale = Pz.prototype.ke;
+    Pz.prototype.getSnapToPixel = Pz.prototype.Kd;
+    Pz.prototype.setRotation = Pz.prototype.le;
+    Pz.prototype.setScale = Pz.prototype.me;
+    Bg.prototype.get = Bg.prototype.get;
+    Bg.prototype.getKeys = Bg.prototype.C;
+    Bg.prototype.getProperties = Bg.prototype.D;
+    Bg.prototype.set = Bg.prototype.set;
+    Bg.prototype.setProperties = Bg.prototype.t;
+    Bg.prototype.unset = Bg.prototype.I;
+    Bg.prototype.changed = Bg.prototype.k;
+    Bg.prototype.getRevision = Bg.prototype.v;
+    Bg.prototype.on = Bg.prototype.r;
+    Bg.prototype.once = Bg.prototype.A;
+    Bg.prototype.un = Bg.prototype.u;
+    Bg.prototype.unByKey = Bg.prototype.B;
+    Zg.prototype.getAttributions = Zg.prototype.ea;
+    Zg.prototype.getLogo = Zg.prototype.ca;
+    Zg.prototype.getProjection = Zg.prototype.fa;
+    Zg.prototype.getState = Zg.prototype.ga;
+    Zg.prototype.get = Zg.prototype.get;
+    Zg.prototype.getKeys = Zg.prototype.C;
+    Zg.prototype.getProperties = Zg.prototype.D;
+    Zg.prototype.set = Zg.prototype.set;
+    Zg.prototype.setProperties = Zg.prototype.t;
+    Zg.prototype.unset = Zg.prototype.I;
+    Zg.prototype.changed = Zg.prototype.k;
+    Zg.prototype.getRevision = Zg.prototype.v;
+    Zg.prototype.on = Zg.prototype.r;
+    Zg.prototype.once = Zg.prototype.A;
+    Zg.prototype.un = Zg.prototype.u;
+    Zg.prototype.unByKey = Zg.prototype.B;
+    Sy.prototype.getTileGrid = Sy.prototype.ua;
+    Sy.prototype.getAttributions = Sy.prototype.ea;
+    Sy.prototype.getLogo = Sy.prototype.ca;
+    Sy.prototype.getProjection = Sy.prototype.fa;
+    Sy.prototype.getState = Sy.prototype.ga;
+    Sy.prototype.get = Sy.prototype.get;
+    Sy.prototype.getKeys = Sy.prototype.C;
+    Sy.prototype.getProperties = Sy.prototype.D;
+    Sy.prototype.set = Sy.prototype.set;
+    Sy.prototype.setProperties = Sy.prototype.t;
+    Sy.prototype.unset = Sy.prototype.I;
+    Sy.prototype.changed = Sy.prototype.k;
+    Sy.prototype.getRevision = Sy.prototype.v;
+    Sy.prototype.on = Sy.prototype.r;
+    Sy.prototype.once = Sy.prototype.A;
+    Sy.prototype.un = Sy.prototype.u;
+    Sy.prototype.unByKey = Sy.prototype.B;
+    Vy.prototype.getTileLoadFunction = Vy.prototype.Ua;
+    Vy.prototype.getTileUrlFunction = Vy.prototype.Va;
+    Vy.prototype.setTileLoadFunction = Vy.prototype.$a;
+    Vy.prototype.setTileUrlFunction = Vy.prototype.pa;
+    Vy.prototype.getTileGrid = Vy.prototype.ua;
+    Vy.prototype.getAttributions = Vy.prototype.ea;
+    Vy.prototype.getLogo = Vy.prototype.ca;
+    Vy.prototype.getProjection = Vy.prototype.fa;
+    Vy.prototype.getState = Vy.prototype.ga;
+    Vy.prototype.get = Vy.prototype.get;
+    Vy.prototype.getKeys = Vy.prototype.C;
+    Vy.prototype.getProperties = Vy.prototype.D;
+    Vy.prototype.set = Vy.prototype.set;
+    Vy.prototype.setProperties = Vy.prototype.t;
+    Vy.prototype.unset = Vy.prototype.I;
+    Vy.prototype.changed = Vy.prototype.k;
+    Vy.prototype.getRevision = Vy.prototype.v;
+    Vy.prototype.on = Vy.prototype.r;
+    Vy.prototype.once = Vy.prototype.A;
+    Vy.prototype.un = Vy.prototype.u;
+    Vy.prototype.unByKey = Vy.prototype.B;
+    qp.prototype.getAttributions = qp.prototype.ea;
+    qp.prototype.getLogo = qp.prototype.ca;
+    qp.prototype.getProjection = qp.prototype.fa;
+    qp.prototype.getState = qp.prototype.ga;
+    qp.prototype.get = qp.prototype.get;
+    qp.prototype.getKeys = qp.prototype.C;
+    qp.prototype.getProperties = qp.prototype.D;
+    qp.prototype.set = qp.prototype.set;
+    qp.prototype.setProperties = qp.prototype.t;
+    qp.prototype.unset = qp.prototype.I;
+    qp.prototype.changed = qp.prototype.k;
+    qp.prototype.getRevision = qp.prototype.v;
+    qp.prototype.on = qp.prototype.r;
+    qp.prototype.once = qp.prototype.A;
+    qp.prototype.un = qp.prototype.u;
+    qp.prototype.unByKey = qp.prototype.B;
+    Xy.prototype.addFeature = Xy.prototype.jf;
+    Xy.prototype.addFeatures = Xy.prototype.Oc;
+    Xy.prototype.clear = Xy.prototype.clear;
+    Xy.prototype.forEachFeature = Xy.prototype.Rf;
+    Xy.prototype.forEachFeatureInExtent = Xy.prototype.$c;
+    Xy.prototype.forEachFeatureIntersectingExtent = Xy.prototype.Oe;
+    Xy.prototype.getFeatures = Xy.prototype.Dc;
+    Xy.prototype.getFeaturesAtCoordinate = Xy.prototype.Re;
+    Xy.prototype.getFeaturesInExtent = Xy.prototype.Se;
+    Xy.prototype.getClosestFeatureToCoordinate = Xy.prototype.Tf;
+    Xy.prototype.getExtent = Xy.prototype.G;
+    Xy.prototype.getFeatureById = Xy.prototype.Qe;
+    Xy.prototype.removeFeature = Xy.prototype.Qg;
+    Xy.prototype.getAttributions = Xy.prototype.ea;
+    Xy.prototype.getLogo = Xy.prototype.ca;
+    Xy.prototype.getProjection = Xy.prototype.fa;
+    Xy.prototype.getState = Xy.prototype.ga;
+    Xy.prototype.get = Xy.prototype.get;
+    Xy.prototype.getKeys = Xy.prototype.C;
+    Xy.prototype.getProperties = Xy.prototype.D;
+    Xy.prototype.set = Xy.prototype.set;
+    Xy.prototype.setProperties = Xy.prototype.t;
+    Xy.prototype.unset = Xy.prototype.I;
+    Xy.prototype.changed = Xy.prototype.k;
+    Xy.prototype.getRevision = Xy.prototype.v;
+    Xy.prototype.on = Xy.prototype.r;
+    Xy.prototype.once = Xy.prototype.A;
+    Xy.prototype.un = Xy.prototype.u;
+    Xy.prototype.unByKey = Xy.prototype.B;
+    jn.prototype.getAttributions = jn.prototype.ea;
+    jn.prototype.getLogo = jn.prototype.ca;
+    jn.prototype.getProjection = jn.prototype.fa;
+    jn.prototype.getState = jn.prototype.ga;
+    jn.prototype.get = jn.prototype.get;
+    jn.prototype.getKeys = jn.prototype.C;
+    jn.prototype.getProperties = jn.prototype.D;
+    jn.prototype.set = jn.prototype.set;
+    jn.prototype.setProperties = jn.prototype.t;
+    jn.prototype.unset = jn.prototype.I;
+    jn.prototype.changed = jn.prototype.k;
+    jn.prototype.getRevision = jn.prototype.v;
+    jn.prototype.on = jn.prototype.r;
+    jn.prototype.once = jn.prototype.A;
+    jn.prototype.un = jn.prototype.u;
+    jn.prototype.unByKey = jn.prototype.B;
+    qn.prototype.getAttributions = qn.prototype.ea;
+    qn.prototype.getLogo = qn.prototype.ca;
+    qn.prototype.getProjection = qn.prototype.fa;
+    qn.prototype.getState = qn.prototype.ga;
+    qn.prototype.get = qn.prototype.get;
+    qn.prototype.getKeys = qn.prototype.C;
+    qn.prototype.getProperties = qn.prototype.D;
+    qn.prototype.set = qn.prototype.set;
+    qn.prototype.setProperties = qn.prototype.t;
+    qn.prototype.unset = qn.prototype.I;
+    qn.prototype.changed = qn.prototype.k;
+    qn.prototype.getRevision = qn.prototype.v;
+    qn.prototype.on = qn.prototype.r;
+    qn.prototype.once = qn.prototype.A;
+    qn.prototype.un = qn.prototype.u;
+    qn.prototype.unByKey = qn.prototype.B;
+    $y.prototype.getAttributions = $y.prototype.ea;
+    $y.prototype.getLogo = $y.prototype.ca;
+    $y.prototype.getProjection = $y.prototype.fa;
+    $y.prototype.getState = $y.prototype.ga;
+    $y.prototype.get = $y.prototype.get;
+    $y.prototype.getKeys = $y.prototype.C;
+    $y.prototype.getProperties = $y.prototype.D;
+    $y.prototype.set = $y.prototype.set;
+    $y.prototype.setProperties = $y.prototype.t;
+    $y.prototype.unset = $y.prototype.I;
+    $y.prototype.changed = $y.prototype.k;
+    $y.prototype.getRevision = $y.prototype.v;
+    $y.prototype.on = $y.prototype.r;
+    $y.prototype.once = $y.prototype.A;
+    $y.prototype.un = $y.prototype.u;
+    $y.prototype.unByKey = $y.prototype.B;
+    az.prototype.getAttributions = az.prototype.ea;
+    az.prototype.getLogo = az.prototype.ca;
+    az.prototype.getProjection = az.prototype.fa;
+    az.prototype.getState = az.prototype.ga;
+    az.prototype.get = az.prototype.get;
+    az.prototype.getKeys = az.prototype.C;
+    az.prototype.getProperties = az.prototype.D;
+    az.prototype.set = az.prototype.set;
+    az.prototype.setProperties = az.prototype.t;
+    az.prototype.unset = az.prototype.I;
+    az.prototype.changed = az.prototype.k;
+    az.prototype.getRevision = az.prototype.v;
+    az.prototype.on = az.prototype.r;
+    az.prototype.once = az.prototype.A;
+    az.prototype.un = az.prototype.u;
+    az.prototype.unByKey = az.prototype.B;
+    xp.prototype.getAttributions = xp.prototype.ea;
+    xp.prototype.getLogo = xp.prototype.ca;
+    xp.prototype.getProjection = xp.prototype.fa;
+    xp.prototype.getState = xp.prototype.ga;
+    xp.prototype.get = xp.prototype.get;
+    xp.prototype.getKeys = xp.prototype.C;
+    xp.prototype.getProperties = xp.prototype.D;
+    xp.prototype.set = xp.prototype.set;
+    xp.prototype.setProperties = xp.prototype.t;
+    xp.prototype.unset = xp.prototype.I;
+    xp.prototype.changed = xp.prototype.k;
+    xp.prototype.getRevision = xp.prototype.v;
+    xp.prototype.on = xp.prototype.r;
+    xp.prototype.once = xp.prototype.A;
+    xp.prototype.un = xp.prototype.u;
+    xp.prototype.unByKey = xp.prototype.B;
+    bz.prototype.getAttributions = bz.prototype.ea;
+    bz.prototype.getLogo = bz.prototype.ca;
+    bz.prototype.getProjection = bz.prototype.fa;
+    bz.prototype.getState = bz.prototype.ga;
+    bz.prototype.get = bz.prototype.get;
+    bz.prototype.getKeys = bz.prototype.C;
+    bz.prototype.getProperties = bz.prototype.D;
+    bz.prototype.set = bz.prototype.set;
+    bz.prototype.setProperties = bz.prototype.t;
+    bz.prototype.unset = bz.prototype.I;
+    bz.prototype.changed = bz.prototype.k;
+    bz.prototype.getRevision = bz.prototype.v;
+    bz.prototype.on = bz.prototype.r;
+    bz.prototype.once = bz.prototype.A;
+    bz.prototype.un = bz.prototype.u;
+    bz.prototype.unByKey = bz.prototype.B;
+    fz.prototype.getTileLoadFunction = fz.prototype.Ua;
+    fz.prototype.getTileUrlFunction = fz.prototype.Va;
+    fz.prototype.setTileLoadFunction = fz.prototype.$a;
+    fz.prototype.getTileGrid = fz.prototype.ua;
+    fz.prototype.getAttributions = fz.prototype.ea;
+    fz.prototype.getLogo = fz.prototype.ca;
+    fz.prototype.getProjection = fz.prototype.fa;
+    fz.prototype.getState = fz.prototype.ga;
+    fz.prototype.get = fz.prototype.get;
+    fz.prototype.getKeys = fz.prototype.C;
+    fz.prototype.getProperties = fz.prototype.D;
+    fz.prototype.set = fz.prototype.set;
+    fz.prototype.setProperties = fz.prototype.t;
+    fz.prototype.unset = fz.prototype.I;
+    fz.prototype.changed = fz.prototype.k;
+    fz.prototype.getRevision = fz.prototype.v;
+    fz.prototype.on = fz.prototype.r;
+    fz.prototype.once = fz.prototype.A;
+    fz.prototype.un = fz.prototype.u;
+    fz.prototype.unByKey = fz.prototype.B;
+    iz.prototype.setTileUrlFunction = iz.prototype.pa;
+    iz.prototype.setUrl = iz.prototype.e;
+    iz.prototype.getTileLoadFunction = iz.prototype.Ua;
+    iz.prototype.getTileUrlFunction = iz.prototype.Va;
+    iz.prototype.setTileLoadFunction = iz.prototype.$a;
+    iz.prototype.getTileGrid = iz.prototype.ua;
+    iz.prototype.getAttributions = iz.prototype.ea;
+    iz.prototype.getLogo = iz.prototype.ca;
+    iz.prototype.getProjection = iz.prototype.fa;
+    iz.prototype.getState = iz.prototype.ga;
+    iz.prototype.get = iz.prototype.get;
+    iz.prototype.getKeys = iz.prototype.C;
+    iz.prototype.getProperties = iz.prototype.D;
+    iz.prototype.set = iz.prototype.set;
+    iz.prototype.setProperties = iz.prototype.t;
+    iz.prototype.unset = iz.prototype.I;
+    iz.prototype.changed = iz.prototype.k;
+    iz.prototype.getRevision = iz.prototype.v;
+    iz.prototype.on = iz.prototype.r;
+    iz.prototype.once = iz.prototype.A;
+    iz.prototype.un = iz.prototype.u;
+    iz.prototype.unByKey = iz.prototype.B;
+    gz.prototype.setTileUrlFunction = gz.prototype.pa;
+    gz.prototype.setUrl = gz.prototype.e;
+    gz.prototype.getTileLoadFunction = gz.prototype.Ua;
+    gz.prototype.getTileUrlFunction = gz.prototype.Va;
+    gz.prototype.setTileLoadFunction = gz.prototype.$a;
+    gz.prototype.getTileGrid = gz.prototype.ua;
+    gz.prototype.getAttributions = gz.prototype.ea;
+    gz.prototype.getLogo = gz.prototype.ca;
+    gz.prototype.getProjection = gz.prototype.fa;
+    gz.prototype.getState = gz.prototype.ga;
+    gz.prototype.get = gz.prototype.get;
+    gz.prototype.getKeys = gz.prototype.C;
+    gz.prototype.getProperties = gz.prototype.D;
+    gz.prototype.set = gz.prototype.set;
+    gz.prototype.setProperties = gz.prototype.t;
+    gz.prototype.unset = gz.prototype.I;
+    gz.prototype.changed = gz.prototype.k;
+    gz.prototype.getRevision = gz.prototype.v;
+    gz.prototype.on = gz.prototype.r;
+    gz.prototype.once = gz.prototype.A;
+    gz.prototype.un = gz.prototype.u;
+    gz.prototype.unByKey = gz.prototype.B;
+    nz.prototype.setTileUrlFunction = nz.prototype.pa;
+    nz.prototype.setUrl = nz.prototype.e;
+    nz.prototype.getTileLoadFunction = nz.prototype.Ua;
+    nz.prototype.getTileUrlFunction = nz.prototype.Va;
+    nz.prototype.setTileLoadFunction = nz.prototype.$a;
+    nz.prototype.getTileGrid = nz.prototype.ua;
+    nz.prototype.getAttributions = nz.prototype.ea;
+    nz.prototype.getLogo = nz.prototype.ca;
+    nz.prototype.getProjection = nz.prototype.fa;
+    nz.prototype.getState = nz.prototype.ga;
+    nz.prototype.get = nz.prototype.get;
+    nz.prototype.getKeys = nz.prototype.C;
+    nz.prototype.getProperties = nz.prototype.D;
+    nz.prototype.set = nz.prototype.set;
+    nz.prototype.setProperties = nz.prototype.t;
+    nz.prototype.unset = nz.prototype.I;
+    nz.prototype.changed = nz.prototype.k;
+    nz.prototype.getRevision = nz.prototype.v;
+    nz.prototype.on = nz.prototype.r;
+    nz.prototype.once = nz.prototype.A;
+    nz.prototype.un = nz.prototype.u;
+    nz.prototype.unByKey = nz.prototype.B;
+    pz.prototype.getTileLoadFunction = pz.prototype.Ua;
+    pz.prototype.getTileUrlFunction = pz.prototype.Va;
+    pz.prototype.setTileLoadFunction = pz.prototype.$a;
+    pz.prototype.setTileUrlFunction = pz.prototype.pa;
+    pz.prototype.getTileGrid = pz.prototype.ua;
+    pz.prototype.getAttributions = pz.prototype.ea;
+    pz.prototype.getLogo = pz.prototype.ca;
+    pz.prototype.getProjection = pz.prototype.fa;
+    pz.prototype.getState = pz.prototype.ga;
+    pz.prototype.get = pz.prototype.get;
+    pz.prototype.getKeys = pz.prototype.C;
+    pz.prototype.getProperties = pz.prototype.D;
+    pz.prototype.set = pz.prototype.set;
+    pz.prototype.setProperties = pz.prototype.t;
+    pz.prototype.unset = pz.prototype.I;
+    pz.prototype.changed = pz.prototype.k;
+    pz.prototype.getRevision = pz.prototype.v;
+    pz.prototype.on = pz.prototype.r;
+    pz.prototype.once = pz.prototype.A;
+    pz.prototype.un = pz.prototype.u;
+    pz.prototype.unByKey = pz.prototype.B;
+    rz.prototype.getTileGrid = rz.prototype.ua;
+    rz.prototype.getAttributions = rz.prototype.ea;
+    rz.prototype.getLogo = rz.prototype.ca;
+    rz.prototype.getProjection = rz.prototype.fa;
+    rz.prototype.getState = rz.prototype.ga;
+    rz.prototype.get = rz.prototype.get;
+    rz.prototype.getKeys = rz.prototype.C;
+    rz.prototype.getProperties = rz.prototype.D;
+    rz.prototype.set = rz.prototype.set;
+    rz.prototype.setProperties = rz.prototype.t;
+    rz.prototype.unset = rz.prototype.I;
+    rz.prototype.changed = rz.prototype.k;
+    rz.prototype.getRevision = rz.prototype.v;
+    rz.prototype.on = rz.prototype.r;
+    rz.prototype.once = rz.prototype.A;
+    rz.prototype.un = rz.prototype.u;
+    rz.prototype.unByKey = rz.prototype.B;
+    sz.prototype.getTileLoadFunction = sz.prototype.Ua;
+    sz.prototype.getTileUrlFunction = sz.prototype.Va;
+    sz.prototype.setTileLoadFunction = sz.prototype.$a;
+    sz.prototype.setTileUrlFunction = sz.prototype.pa;
+    sz.prototype.getTileGrid = sz.prototype.ua;
+    sz.prototype.getAttributions = sz.prototype.ea;
+    sz.prototype.getLogo = sz.prototype.ca;
+    sz.prototype.getProjection = sz.prototype.fa;
+    sz.prototype.getState = sz.prototype.ga;
+    sz.prototype.get = sz.prototype.get;
+    sz.prototype.getKeys = sz.prototype.C;
+    sz.prototype.getProperties = sz.prototype.D;
+    sz.prototype.set = sz.prototype.set;
+    sz.prototype.setProperties = sz.prototype.t;
+    sz.prototype.unset = sz.prototype.I;
+    sz.prototype.changed = sz.prototype.k;
+    sz.prototype.getRevision = sz.prototype.v;
+    sz.prototype.on = sz.prototype.r;
+    sz.prototype.once = sz.prototype.A;
+    sz.prototype.un = sz.prototype.u;
+    sz.prototype.unByKey = sz.prototype.B;
+    tz.prototype.getTileGrid = tz.prototype.ua;
+    tz.prototype.getAttributions = tz.prototype.ea;
+    tz.prototype.getLogo = tz.prototype.ca;
+    tz.prototype.getProjection = tz.prototype.fa;
+    tz.prototype.getState = tz.prototype.ga;
+    tz.prototype.get = tz.prototype.get;
+    tz.prototype.getKeys = tz.prototype.C;
+    tz.prototype.getProperties = tz.prototype.D;
+    tz.prototype.set = tz.prototype.set;
+    tz.prototype.setProperties = tz.prototype.t;
+    tz.prototype.unset = tz.prototype.I;
+    tz.prototype.changed = tz.prototype.k;
+    tz.prototype.getRevision = tz.prototype.v;
+    tz.prototype.on = tz.prototype.r;
+    tz.prototype.once = tz.prototype.A;
+    tz.prototype.un = tz.prototype.u;
+    tz.prototype.unByKey = tz.prototype.B;
+    yz.prototype.forEachFeatureIntersectingExtent = yz.prototype.Oe;
+    yz.prototype.getFeaturesAtCoordinate = yz.prototype.Re;
+    yz.prototype.getFeatureById = yz.prototype.Qe;
+    yz.prototype.getAttributions = yz.prototype.ea;
+    yz.prototype.getLogo = yz.prototype.ca;
+    yz.prototype.getProjection = yz.prototype.fa;
+    yz.prototype.getState = yz.prototype.ga;
+    yz.prototype.get = yz.prototype.get;
+    yz.prototype.getKeys = yz.prototype.C;
+    yz.prototype.getProperties = yz.prototype.D;
+    yz.prototype.set = yz.prototype.set;
+    yz.prototype.setProperties = yz.prototype.t;
+    yz.prototype.unset = yz.prototype.I;
+    yz.prototype.changed = yz.prototype.k;
+    yz.prototype.getRevision = yz.prototype.v;
+    yz.prototype.on = yz.prototype.r;
+    yz.prototype.once = yz.prototype.A;
+    yz.prototype.un = yz.prototype.u;
+    yz.prototype.unByKey = yz.prototype.B;
+    Az.prototype.getTileLoadFunction = Az.prototype.Ua;
+    Az.prototype.getTileUrlFunction = Az.prototype.Va;
+    Az.prototype.setTileLoadFunction = Az.prototype.$a;
+    Az.prototype.setTileUrlFunction = Az.prototype.pa;
+    Az.prototype.getTileGrid = Az.prototype.ua;
+    Az.prototype.getAttributions = Az.prototype.ea;
+    Az.prototype.getLogo = Az.prototype.ca;
+    Az.prototype.getProjection = Az.prototype.fa;
+    Az.prototype.getState = Az.prototype.ga;
+    Az.prototype.get = Az.prototype.get;
+    Az.prototype.getKeys = Az.prototype.C;
+    Az.prototype.getProperties = Az.prototype.D;
+    Az.prototype.set = Az.prototype.set;
+    Az.prototype.setProperties = Az.prototype.t;
+    Az.prototype.unset = Az.prototype.I;
+    Az.prototype.changed = Az.prototype.k;
+    Az.prototype.getRevision = Az.prototype.v;
+    Az.prototype.on = Az.prototype.r;
+    Az.prototype.once = Az.prototype.A;
+    Az.prototype.un = Az.prototype.u;
+    Az.prototype.unByKey = Az.prototype.B;
+    Gz.prototype.getTileLoadFunction = Gz.prototype.Ua;
+    Gz.prototype.getTileUrlFunction = Gz.prototype.Va;
+    Gz.prototype.setTileLoadFunction = Gz.prototype.$a;
+    Gz.prototype.setTileUrlFunction = Gz.prototype.pa;
+    Gz.prototype.getTileGrid = Gz.prototype.ua;
+    Gz.prototype.getAttributions = Gz.prototype.ea;
+    Gz.prototype.getLogo = Gz.prototype.ca;
+    Gz.prototype.getProjection = Gz.prototype.fa;
+    Gz.prototype.getState = Gz.prototype.ga;
+    Gz.prototype.get = Gz.prototype.get;
+    Gz.prototype.getKeys = Gz.prototype.C;
+    Gz.prototype.getProperties = Gz.prototype.D;
+    Gz.prototype.set = Gz.prototype.set;
+    Gz.prototype.setProperties = Gz.prototype.t;
+    Gz.prototype.unset = Gz.prototype.I;
+    Gz.prototype.changed = Gz.prototype.k;
+    Gz.prototype.getRevision = Gz.prototype.v;
+    Gz.prototype.on = Gz.prototype.r;
+    Gz.prototype.once = Gz.prototype.A;
+    Gz.prototype.un = Gz.prototype.u;
+    Gz.prototype.unByKey = Gz.prototype.B;
+    Jz.prototype.getTileLoadFunction = Jz.prototype.Ua;
+    Jz.prototype.getTileUrlFunction = Jz.prototype.Va;
+    Jz.prototype.setTileLoadFunction = Jz.prototype.$a;
+    Jz.prototype.setTileUrlFunction = Jz.prototype.pa;
+    Jz.prototype.getTileGrid = Jz.prototype.ua;
+    Jz.prototype.getAttributions = Jz.prototype.ea;
+    Jz.prototype.getLogo = Jz.prototype.ca;
+    Jz.prototype.getProjection = Jz.prototype.fa;
+    Jz.prototype.getState = Jz.prototype.ga;
+    Jz.prototype.get = Jz.prototype.get;
+    Jz.prototype.getKeys = Jz.prototype.C;
+    Jz.prototype.getProperties = Jz.prototype.D;
+    Jz.prototype.set = Jz.prototype.set;
+    Jz.prototype.setProperties = Jz.prototype.t;
+    Jz.prototype.unset = Jz.prototype.I;
+    Jz.prototype.changed = Jz.prototype.k;
+    Jz.prototype.getRevision = Jz.prototype.v;
+    Jz.prototype.on = Jz.prototype.r;
+    Jz.prototype.once = Jz.prototype.A;
+    Jz.prototype.un = Jz.prototype.u;
+    Jz.prototype.unByKey = Jz.prototype.B;
+    uj.prototype.changed = uj.prototype.k;
+    uj.prototype.getRevision = uj.prototype.v;
+    uj.prototype.on = uj.prototype.r;
+    uj.prototype.once = uj.prototype.A;
+    uj.prototype.un = uj.prototype.u;
+    uj.prototype.unByKey = uj.prototype.B;
+    zq.prototype.changed = zq.prototype.k;
+    zq.prototype.getRevision = zq.prototype.v;
+    zq.prototype.on = zq.prototype.r;
+    zq.prototype.once = zq.prototype.A;
+    zq.prototype.un = zq.prototype.u;
+    zq.prototype.unByKey = zq.prototype.B;
+    Cq.prototype.changed = Cq.prototype.k;
+    Cq.prototype.getRevision = Cq.prototype.v;
+    Cq.prototype.on = Cq.prototype.r;
+    Cq.prototype.once = Cq.prototype.A;
+    Cq.prototype.un = Cq.prototype.u;
+    Cq.prototype.unByKey = Cq.prototype.B;
+    Iq.prototype.changed = Iq.prototype.k;
+    Iq.prototype.getRevision = Iq.prototype.v;
+    Iq.prototype.on = Iq.prototype.r;
+    Iq.prototype.once = Iq.prototype.A;
+    Iq.prototype.un = Iq.prototype.u;
+    Iq.prototype.unByKey = Iq.prototype.B;
+    Kq.prototype.changed = Kq.prototype.k;
+    Kq.prototype.getRevision = Kq.prototype.v;
+    Kq.prototype.on = Kq.prototype.r;
+    Kq.prototype.once = Kq.prototype.A;
+    Kq.prototype.un = Kq.prototype.u;
+    Kq.prototype.unByKey = Kq.prototype.B;
+    Ep.prototype.changed = Ep.prototype.k;
+    Ep.prototype.getRevision = Ep.prototype.v;
+    Ep.prototype.on = Ep.prototype.r;
+    Ep.prototype.once = Ep.prototype.A;
+    Ep.prototype.un = Ep.prototype.u;
+    Ep.prototype.unByKey = Ep.prototype.B;
+    Fp.prototype.changed = Fp.prototype.k;
+    Fp.prototype.getRevision = Fp.prototype.v;
+    Fp.prototype.on = Fp.prototype.r;
+    Fp.prototype.once = Fp.prototype.A;
+    Fp.prototype.un = Fp.prototype.u;
+    Fp.prototype.unByKey = Fp.prototype.B;
+    Gp.prototype.changed = Gp.prototype.k;
+    Gp.prototype.getRevision = Gp.prototype.v;
+    Gp.prototype.on = Gp.prototype.r;
+    Gp.prototype.once = Gp.prototype.A;
+    Gp.prototype.un = Gp.prototype.u;
+    Gp.prototype.unByKey = Gp.prototype.B;
+    Ip.prototype.changed = Ip.prototype.k;
+    Ip.prototype.getRevision = Ip.prototype.v;
+    Ip.prototype.on = Ip.prototype.r;
+    Ip.prototype.once = Ip.prototype.A;
+    Ip.prototype.un = Ip.prototype.u;
+    Ip.prototype.unByKey = Ip.prototype.B;
+    Km.prototype.changed = Km.prototype.k;
+    Km.prototype.getRevision = Km.prototype.v;
+    Km.prototype.on = Km.prototype.r;
+    Km.prototype.once = Km.prototype.A;
+    Km.prototype.un = Km.prototype.u;
+    Km.prototype.unByKey = Km.prototype.B;
+    zp.prototype.changed = zp.prototype.k;
+    zp.prototype.getRevision = zp.prototype.v;
+    zp.prototype.on = zp.prototype.r;
+    zp.prototype.once = zp.prototype.A;
+    zp.prototype.un = zp.prototype.u;
+    zp.prototype.unByKey = zp.prototype.B;
+    Ap.prototype.changed = Ap.prototype.k;
+    Ap.prototype.getRevision = Ap.prototype.v;
+    Ap.prototype.on = Ap.prototype.r;
+    Ap.prototype.once = Ap.prototype.A;
+    Ap.prototype.un = Ap.prototype.u;
+    Ap.prototype.unByKey = Ap.prototype.B;
+    Bp.prototype.changed = Bp.prototype.k;
+    Bp.prototype.getRevision = Bp.prototype.v;
+    Bp.prototype.on = Bp.prototype.r;
+    Bp.prototype.once = Bp.prototype.A;
+    Bp.prototype.un = Bp.prototype.u;
+    Bp.prototype.unByKey = Bp.prototype.B;
+    mj.prototype.get = mj.prototype.get;
+    mj.prototype.getKeys = mj.prototype.C;
+    mj.prototype.getProperties = mj.prototype.D;
+    mj.prototype.set = mj.prototype.set;
+    mj.prototype.setProperties = mj.prototype.t;
+    mj.prototype.unset = mj.prototype.I;
+    mj.prototype.changed = mj.prototype.k;
+    mj.prototype.getRevision = mj.prototype.v;
+    mj.prototype.on = mj.prototype.r;
+    mj.prototype.once = mj.prototype.A;
+    mj.prototype.un = mj.prototype.u;
+    mj.prototype.unByKey = mj.prototype.B;
+    C.prototype.getBrightness = C.prototype.Bb;
+    C.prototype.getContrast = C.prototype.Cb;
+    C.prototype.getHue = C.prototype.Db;
+    C.prototype.getExtent = C.prototype.G;
+    C.prototype.getMaxResolution = C.prototype.Eb;
+    C.prototype.getMinResolution = C.prototype.Fb;
+    C.prototype.getOpacity = C.prototype.Kb;
+    C.prototype.getSaturation = C.prototype.Gb;
+    C.prototype.getVisible = C.prototype.eb;
+    C.prototype.setBrightness = C.prototype.gc;
+    C.prototype.setContrast = C.prototype.hc;
+    C.prototype.setHue = C.prototype.ic;
+    C.prototype.setExtent = C.prototype.bc;
+    C.prototype.setMaxResolution = C.prototype.jc;
+    C.prototype.setMinResolution = C.prototype.kc;
+    C.prototype.setOpacity = C.prototype.cc;
+    C.prototype.setSaturation = C.prototype.lc;
+    C.prototype.setVisible = C.prototype.mc;
+    C.prototype.get = C.prototype.get;
+    C.prototype.getKeys = C.prototype.C;
+    C.prototype.getProperties = C.prototype.D;
+    C.prototype.set = C.prototype.set;
+    C.prototype.setProperties = C.prototype.t;
+    C.prototype.unset = C.prototype.I;
+    C.prototype.changed = C.prototype.k;
+    C.prototype.getRevision = C.prototype.v;
+    C.prototype.on = C.prototype.r;
+    C.prototype.once = C.prototype.A;
+    C.prototype.un = C.prototype.u;
+    C.prototype.unByKey = C.prototype.B;
+    M.prototype.setSource = M.prototype.Jc;
+    M.prototype.getBrightness = M.prototype.Bb;
+    M.prototype.getContrast = M.prototype.Cb;
+    M.prototype.getHue = M.prototype.Db;
+    M.prototype.getExtent = M.prototype.G;
+    M.prototype.getMaxResolution = M.prototype.Eb;
+    M.prototype.getMinResolution = M.prototype.Fb;
+    M.prototype.getOpacity = M.prototype.Kb;
+    M.prototype.getSaturation = M.prototype.Gb;
+    M.prototype.getVisible = M.prototype.eb;
+    M.prototype.setBrightness = M.prototype.gc;
+    M.prototype.setContrast = M.prototype.hc;
+    M.prototype.setHue = M.prototype.ic;
+    M.prototype.setExtent = M.prototype.bc;
+    M.prototype.setMaxResolution = M.prototype.jc;
+    M.prototype.setMinResolution = M.prototype.kc;
+    M.prototype.setOpacity = M.prototype.cc;
+    M.prototype.setSaturation = M.prototype.lc;
+    M.prototype.setVisible = M.prototype.mc;
+    M.prototype.get = M.prototype.get;
+    M.prototype.getKeys = M.prototype.C;
+    M.prototype.getProperties = M.prototype.D;
+    M.prototype.set = M.prototype.set;
+    M.prototype.setProperties = M.prototype.t;
+    M.prototype.unset = M.prototype.I;
+    M.prototype.changed = M.prototype.k;
+    M.prototype.getRevision = M.prototype.v;
+    M.prototype.on = M.prototype.r;
+    M.prototype.once = M.prototype.A;
+    M.prototype.un = M.prototype.u;
+    M.prototype.unByKey = M.prototype.B;
+    Z.prototype.getSource = Z.prototype.da;
+    Z.prototype.getStyle = Z.prototype.H;
+    Z.prototype.getStyleFunction = Z.prototype.J;
+    Z.prototype.setStyle = Z.prototype.e;
+    Z.prototype.setSource = Z.prototype.Jc;
+    Z.prototype.getBrightness = Z.prototype.Bb;
+    Z.prototype.getContrast = Z.prototype.Cb;
+    Z.prototype.getHue = Z.prototype.Db;
+    Z.prototype.getExtent = Z.prototype.G;
+    Z.prototype.getMaxResolution = Z.prototype.Eb;
+    Z.prototype.getMinResolution = Z.prototype.Fb;
+    Z.prototype.getOpacity = Z.prototype.Kb;
+    Z.prototype.getSaturation = Z.prototype.Gb;
+    Z.prototype.getVisible = Z.prototype.eb;
+    Z.prototype.setBrightness = Z.prototype.gc;
+    Z.prototype.setContrast = Z.prototype.hc;
+    Z.prototype.setHue = Z.prototype.ic;
+    Z.prototype.setExtent = Z.prototype.bc;
+    Z.prototype.setMaxResolution = Z.prototype.jc;
+    Z.prototype.setMinResolution = Z.prototype.kc;
+    Z.prototype.setOpacity = Z.prototype.cc;
+    Z.prototype.setSaturation = Z.prototype.lc;
+    Z.prototype.setVisible = Z.prototype.mc;
+    Z.prototype.get = Z.prototype.get;
+    Z.prototype.getKeys = Z.prototype.C;
+    Z.prototype.getProperties = Z.prototype.D;
+    Z.prototype.set = Z.prototype.set;
+    Z.prototype.setProperties = Z.prototype.t;
+    Z.prototype.unset = Z.prototype.I;
+    Z.prototype.changed = Z.prototype.k;
+    Z.prototype.getRevision = Z.prototype.v;
+    Z.prototype.on = Z.prototype.r;
+    Z.prototype.once = Z.prototype.A;
+    Z.prototype.un = Z.prototype.u;
+    Z.prototype.unByKey = Z.prototype.B;
+    I.prototype.setSource = I.prototype.Jc;
+    I.prototype.getBrightness = I.prototype.Bb;
+    I.prototype.getContrast = I.prototype.Cb;
+    I.prototype.getHue = I.prototype.Db;
+    I.prototype.getExtent = I.prototype.G;
+    I.prototype.getMaxResolution = I.prototype.Eb;
+    I.prototype.getMinResolution = I.prototype.Fb;
+    I.prototype.getOpacity = I.prototype.Kb;
+    I.prototype.getSaturation = I.prototype.Gb;
+    I.prototype.getVisible = I.prototype.eb;
+    I.prototype.setBrightness = I.prototype.gc;
+    I.prototype.setContrast = I.prototype.hc;
+    I.prototype.setHue = I.prototype.ic;
+    I.prototype.setExtent = I.prototype.bc;
+    I.prototype.setMaxResolution = I.prototype.jc;
+    I.prototype.setMinResolution = I.prototype.kc;
+    I.prototype.setOpacity = I.prototype.cc;
+    I.prototype.setSaturation = I.prototype.lc;
+    I.prototype.setVisible = I.prototype.mc;
+    I.prototype.get = I.prototype.get;
+    I.prototype.getKeys = I.prototype.C;
+    I.prototype.getProperties = I.prototype.D;
+    I.prototype.set = I.prototype.set;
+    I.prototype.setProperties = I.prototype.t;
+    I.prototype.unset = I.prototype.I;
+    I.prototype.changed = I.prototype.k;
+    I.prototype.getRevision = I.prototype.v;
+    I.prototype.on = I.prototype.r;
+    I.prototype.once = I.prototype.A;
+    I.prototype.un = I.prototype.u;
+    I.prototype.unByKey = I.prototype.B;
+    G.prototype.getBrightness = G.prototype.Bb;
+    G.prototype.getContrast = G.prototype.Cb;
+    G.prototype.getHue = G.prototype.Db;
+    G.prototype.getExtent = G.prototype.G;
+    G.prototype.getMaxResolution = G.prototype.Eb;
+    G.prototype.getMinResolution = G.prototype.Fb;
+    G.prototype.getOpacity = G.prototype.Kb;
+    G.prototype.getSaturation = G.prototype.Gb;
+    G.prototype.getVisible = G.prototype.eb;
+    G.prototype.setBrightness = G.prototype.gc;
+    G.prototype.setContrast = G.prototype.hc;
+    G.prototype.setHue = G.prototype.ic;
+    G.prototype.setExtent = G.prototype.bc;
+    G.prototype.setMaxResolution = G.prototype.jc;
+    G.prototype.setMinResolution = G.prototype.kc;
+    G.prototype.setOpacity = G.prototype.cc;
+    G.prototype.setSaturation = G.prototype.lc;
+    G.prototype.setVisible = G.prototype.mc;
+    G.prototype.get = G.prototype.get;
+    G.prototype.getKeys = G.prototype.C;
+    G.prototype.getProperties = G.prototype.D;
+    G.prototype.set = G.prototype.set;
+    G.prototype.setProperties = G.prototype.t;
+    G.prototype.unset = G.prototype.I;
+    G.prototype.changed = G.prototype.k;
+    G.prototype.getRevision = G.prototype.v;
+    G.prototype.on = G.prototype.r;
+    G.prototype.once = G.prototype.A;
+    G.prototype.un = G.prototype.u;
+    G.prototype.unByKey = G.prototype.B;
+    L.prototype.setSource = L.prototype.Jc;
+    L.prototype.getBrightness = L.prototype.Bb;
+    L.prototype.getContrast = L.prototype.Cb;
+    L.prototype.getHue = L.prototype.Db;
+    L.prototype.getExtent = L.prototype.G;
+    L.prototype.getMaxResolution = L.prototype.Eb;
+    L.prototype.getMinResolution = L.prototype.Fb;
+    L.prototype.getOpacity = L.prototype.Kb;
+    L.prototype.getSaturation = L.prototype.Gb;
+    L.prototype.getVisible = L.prototype.eb;
+    L.prototype.setBrightness = L.prototype.gc;
+    L.prototype.setContrast = L.prototype.hc;
+    L.prototype.setHue = L.prototype.ic;
+    L.prototype.setExtent = L.prototype.bc;
+    L.prototype.setMaxResolution = L.prototype.jc;
+    L.prototype.setMinResolution = L.prototype.kc;
+    L.prototype.setOpacity = L.prototype.cc;
+    L.prototype.setSaturation = L.prototype.lc;
+    L.prototype.setVisible = L.prototype.mc;
+    L.prototype.get = L.prototype.get;
+    L.prototype.getKeys = L.prototype.C;
+    L.prototype.getProperties = L.prototype.D;
+    L.prototype.set = L.prototype.set;
+    L.prototype.setProperties = L.prototype.t;
+    L.prototype.unset = L.prototype.I;
+    L.prototype.changed = L.prototype.k;
+    L.prototype.getRevision = L.prototype.v;
+    L.prototype.on = L.prototype.r;
+    L.prototype.once = L.prototype.A;
+    L.prototype.un = L.prototype.u;
+    L.prototype.unByKey = L.prototype.B;
+    Wj.prototype.get = Wj.prototype.get;
+    Wj.prototype.getKeys = Wj.prototype.C;
+    Wj.prototype.getProperties = Wj.prototype.D;
+    Wj.prototype.set = Wj.prototype.set;
+    Wj.prototype.setProperties = Wj.prototype.t;
+    Wj.prototype.unset = Wj.prototype.I;
+    Wj.prototype.changed = Wj.prototype.k;
+    Wj.prototype.getRevision = Wj.prototype.v;
+    Wj.prototype.on = Wj.prototype.r;
+    Wj.prototype.once = Wj.prototype.A;
+    Wj.prototype.un = Wj.prototype.u;
+    Wj.prototype.unByKey = Wj.prototype.B;
+    ak.prototype.getActive = ak.prototype.c;
+    ak.prototype.setActive = ak.prototype.d;
+    ak.prototype.get = ak.prototype.get;
+    ak.prototype.getKeys = ak.prototype.C;
+    ak.prototype.getProperties = ak.prototype.D;
+    ak.prototype.set = ak.prototype.set;
+    ak.prototype.setProperties = ak.prototype.t;
+    ak.prototype.unset = ak.prototype.I;
+    ak.prototype.changed = ak.prototype.k;
+    ak.prototype.getRevision = ak.prototype.v;
+    ak.prototype.on = ak.prototype.r;
+    ak.prototype.once = ak.prototype.A;
+    ak.prototype.un = ak.prototype.u;
+    ak.prototype.unByKey = ak.prototype.B;
+    Kx.prototype.getActive = Kx.prototype.c;
+    Kx.prototype.setActive = Kx.prototype.d;
+    Kx.prototype.get = Kx.prototype.get;
+    Kx.prototype.getKeys = Kx.prototype.C;
+    Kx.prototype.getProperties = Kx.prototype.D;
+    Kx.prototype.set = Kx.prototype.set;
+    Kx.prototype.setProperties = Kx.prototype.t;
+    Kx.prototype.unset = Kx.prototype.I;
+    Kx.prototype.changed = Kx.prototype.k;
+    Kx.prototype.getRevision = Kx.prototype.v;
+    Kx.prototype.on = Kx.prototype.r;
+    Kx.prototype.once = Kx.prototype.A;
+    Kx.prototype.un = Kx.prototype.u;
+    Kx.prototype.unByKey = Kx.prototype.B;
+    jk.prototype.getActive = jk.prototype.c;
+    jk.prototype.setActive = jk.prototype.d;
+    jk.prototype.get = jk.prototype.get;
+    jk.prototype.getKeys = jk.prototype.C;
+    jk.prototype.getProperties = jk.prototype.D;
+    jk.prototype.set = jk.prototype.set;
+    jk.prototype.setProperties = jk.prototype.t;
+    jk.prototype.unset = jk.prototype.I;
+    jk.prototype.changed = jk.prototype.k;
+    jk.prototype.getRevision = jk.prototype.v;
+    jk.prototype.on = jk.prototype.r;
+    jk.prototype.once = jk.prototype.A;
+    jk.prototype.un = jk.prototype.u;
+    jk.prototype.unByKey = jk.prototype.B;
+    nl.prototype.getActive = nl.prototype.c;
+    nl.prototype.setActive = nl.prototype.d;
+    nl.prototype.get = nl.prototype.get;
+    nl.prototype.getKeys = nl.prototype.C;
+    nl.prototype.getProperties = nl.prototype.D;
+    nl.prototype.set = nl.prototype.set;
+    nl.prototype.setProperties = nl.prototype.t;
+    nl.prototype.unset = nl.prototype.I;
+    nl.prototype.changed = nl.prototype.k;
+    nl.prototype.getRevision = nl.prototype.v;
+    nl.prototype.on = nl.prototype.r;
+    nl.prototype.once = nl.prototype.A;
+    nl.prototype.un = nl.prototype.u;
+    nl.prototype.unByKey = nl.prototype.B;
+    mk.prototype.getActive = mk.prototype.c;
+    mk.prototype.setActive = mk.prototype.d;
+    mk.prototype.get = mk.prototype.get;
+    mk.prototype.getKeys = mk.prototype.C;
+    mk.prototype.getProperties = mk.prototype.D;
+    mk.prototype.set = mk.prototype.set;
+    mk.prototype.setProperties = mk.prototype.t;
+    mk.prototype.unset = mk.prototype.I;
+    mk.prototype.changed = mk.prototype.k;
+    mk.prototype.getRevision = mk.prototype.v;
+    mk.prototype.on = mk.prototype.r;
+    mk.prototype.once = mk.prototype.A;
+    mk.prototype.un = mk.prototype.u;
+    mk.prototype.unByKey = mk.prototype.B;
+    Ox.prototype.getActive = Ox.prototype.c;
+    Ox.prototype.setActive = Ox.prototype.d;
+    Ox.prototype.get = Ox.prototype.get;
+    Ox.prototype.getKeys = Ox.prototype.C;
+    Ox.prototype.getProperties = Ox.prototype.D;
+    Ox.prototype.set = Ox.prototype.set;
+    Ox.prototype.setProperties = Ox.prototype.t;
+    Ox.prototype.unset = Ox.prototype.I;
+    Ox.prototype.changed = Ox.prototype.k;
+    Ox.prototype.getRevision = Ox.prototype.v;
+    Ox.prototype.on = Ox.prototype.r;
+    Ox.prototype.once = Ox.prototype.A;
+    Ox.prototype.un = Ox.prototype.u;
+    Ox.prototype.unByKey = Ox.prototype.B;
+    qk.prototype.getActive = qk.prototype.c;
+    qk.prototype.setActive = qk.prototype.d;
+    qk.prototype.get = qk.prototype.get;
+    qk.prototype.getKeys = qk.prototype.C;
+    qk.prototype.getProperties = qk.prototype.D;
+    qk.prototype.set = qk.prototype.set;
+    qk.prototype.setProperties = qk.prototype.t;
+    qk.prototype.unset = qk.prototype.I;
+    qk.prototype.changed = qk.prototype.k;
+    qk.prototype.getRevision = qk.prototype.v;
+    qk.prototype.on = qk.prototype.r;
+    qk.prototype.once = qk.prototype.A;
+    qk.prototype.un = qk.prototype.u;
+    qk.prototype.unByKey = qk.prototype.B;
+    Gl.prototype.getGeometry = Gl.prototype.Q;
+    Gl.prototype.getActive = Gl.prototype.c;
+    Gl.prototype.setActive = Gl.prototype.d;
+    Gl.prototype.get = Gl.prototype.get;
+    Gl.prototype.getKeys = Gl.prototype.C;
+    Gl.prototype.getProperties = Gl.prototype.D;
+    Gl.prototype.set = Gl.prototype.set;
+    Gl.prototype.setProperties = Gl.prototype.t;
+    Gl.prototype.unset = Gl.prototype.I;
+    Gl.prototype.changed = Gl.prototype.k;
+    Gl.prototype.getRevision = Gl.prototype.v;
+    Gl.prototype.on = Gl.prototype.r;
+    Gl.prototype.once = Gl.prototype.A;
+    Gl.prototype.un = Gl.prototype.u;
+    Gl.prototype.unByKey = Gl.prototype.B;
+    Tx.prototype.getActive = Tx.prototype.c;
+    Tx.prototype.setActive = Tx.prototype.d;
+    Tx.prototype.get = Tx.prototype.get;
+    Tx.prototype.getKeys = Tx.prototype.C;
+    Tx.prototype.getProperties = Tx.prototype.D;
+    Tx.prototype.set = Tx.prototype.set;
+    Tx.prototype.setProperties = Tx.prototype.t;
+    Tx.prototype.unset = Tx.prototype.I;
+    Tx.prototype.changed = Tx.prototype.k;
+    Tx.prototype.getRevision = Tx.prototype.v;
+    Tx.prototype.on = Tx.prototype.r;
+    Tx.prototype.once = Tx.prototype.A;
+    Tx.prototype.un = Tx.prototype.u;
+    Tx.prototype.unByKey = Tx.prototype.B;
+    Hl.prototype.getActive = Hl.prototype.c;
+    Hl.prototype.setActive = Hl.prototype.d;
+    Hl.prototype.get = Hl.prototype.get;
+    Hl.prototype.getKeys = Hl.prototype.C;
+    Hl.prototype.getProperties = Hl.prototype.D;
+    Hl.prototype.set = Hl.prototype.set;
+    Hl.prototype.setProperties = Hl.prototype.t;
+    Hl.prototype.unset = Hl.prototype.I;
+    Hl.prototype.changed = Hl.prototype.k;
+    Hl.prototype.getRevision = Hl.prototype.v;
+    Hl.prototype.on = Hl.prototype.r;
+    Hl.prototype.once = Hl.prototype.A;
+    Hl.prototype.un = Hl.prototype.u;
+    Hl.prototype.unByKey = Hl.prototype.B;
+    Jl.prototype.getActive = Jl.prototype.c;
+    Jl.prototype.setActive = Jl.prototype.d;
+    Jl.prototype.get = Jl.prototype.get;
+    Jl.prototype.getKeys = Jl.prototype.C;
+    Jl.prototype.getProperties = Jl.prototype.D;
+    Jl.prototype.set = Jl.prototype.set;
+    Jl.prototype.setProperties = Jl.prototype.t;
+    Jl.prototype.unset = Jl.prototype.I;
+    Jl.prototype.changed = Jl.prototype.k;
+    Jl.prototype.getRevision = Jl.prototype.v;
+    Jl.prototype.on = Jl.prototype.r;
+    Jl.prototype.once = Jl.prototype.A;
+    Jl.prototype.un = Jl.prototype.u;
+    Jl.prototype.unByKey = Jl.prototype.B;
+    hy.prototype.getActive = hy.prototype.c;
+    hy.prototype.setActive = hy.prototype.d;
+    hy.prototype.get = hy.prototype.get;
+    hy.prototype.getKeys = hy.prototype.C;
+    hy.prototype.getProperties = hy.prototype.D;
+    hy.prototype.set = hy.prototype.set;
+    hy.prototype.setProperties = hy.prototype.t;
+    hy.prototype.unset = hy.prototype.I;
+    hy.prototype.changed = hy.prototype.k;
+    hy.prototype.getRevision = hy.prototype.v;
+    hy.prototype.on = hy.prototype.r;
+    hy.prototype.once = hy.prototype.A;
+    hy.prototype.un = hy.prototype.u;
+    hy.prototype.unByKey = hy.prototype.B;
+    Ll.prototype.getActive = Ll.prototype.c;
+    Ll.prototype.setActive = Ll.prototype.d;
+    Ll.prototype.get = Ll.prototype.get;
+    Ll.prototype.getKeys = Ll.prototype.C;
+    Ll.prototype.getProperties = Ll.prototype.D;
+    Ll.prototype.set = Ll.prototype.set;
+    Ll.prototype.setProperties = Ll.prototype.t;
+    Ll.prototype.unset = Ll.prototype.I;
+    Ll.prototype.changed = Ll.prototype.k;
+    Ll.prototype.getRevision = Ll.prototype.v;
+    Ll.prototype.on = Ll.prototype.r;
+    Ll.prototype.once = Ll.prototype.A;
+    Ll.prototype.un = Ll.prototype.u;
+    Ll.prototype.unByKey = Ll.prototype.B;
+    Nl.prototype.getActive = Nl.prototype.c;
+    Nl.prototype.setActive = Nl.prototype.d;
+    Nl.prototype.get = Nl.prototype.get;
+    Nl.prototype.getKeys = Nl.prototype.C;
+    Nl.prototype.getProperties = Nl.prototype.D;
+    Nl.prototype.set = Nl.prototype.set;
+    Nl.prototype.setProperties = Nl.prototype.t;
+    Nl.prototype.unset = Nl.prototype.I;
+    Nl.prototype.changed = Nl.prototype.k;
+    Nl.prototype.getRevision = Nl.prototype.v;
+    Nl.prototype.on = Nl.prototype.r;
+    Nl.prototype.once = Nl.prototype.A;
+    Nl.prototype.un = Nl.prototype.u;
+    Nl.prototype.unByKey = Nl.prototype.B;
+    Rl.prototype.getActive = Rl.prototype.c;
+    Rl.prototype.setActive = Rl.prototype.d;
+    Rl.prototype.get = Rl.prototype.get;
+    Rl.prototype.getKeys = Rl.prototype.C;
+    Rl.prototype.getProperties = Rl.prototype.D;
+    Rl.prototype.set = Rl.prototype.set;
+    Rl.prototype.setProperties = Rl.prototype.t;
+    Rl.prototype.unset = Rl.prototype.I;
+    Rl.prototype.changed = Rl.prototype.k;
+    Rl.prototype.getRevision = Rl.prototype.v;
+    Rl.prototype.on = Rl.prototype.r;
+    Rl.prototype.once = Rl.prototype.A;
+    Rl.prototype.un = Rl.prototype.u;
+    Rl.prototype.unByKey = Rl.prototype.B;
+    sy.prototype.getActive = sy.prototype.c;
+    sy.prototype.setActive = sy.prototype.d;
+    sy.prototype.get = sy.prototype.get;
+    sy.prototype.getKeys = sy.prototype.C;
+    sy.prototype.getProperties = sy.prototype.D;
+    sy.prototype.set = sy.prototype.set;
+    sy.prototype.setProperties = sy.prototype.t;
+    sy.prototype.unset = sy.prototype.I;
+    sy.prototype.changed = sy.prototype.k;
+    sy.prototype.getRevision = sy.prototype.v;
+    sy.prototype.on = sy.prototype.r;
+    sy.prototype.once = sy.prototype.A;
+    sy.prototype.un = sy.prototype.u;
+    sy.prototype.unByKey = sy.prototype.B;
+    vy.prototype.getActive = vy.prototype.c;
+    vy.prototype.setActive = vy.prototype.d;
+    vy.prototype.get = vy.prototype.get;
+    vy.prototype.getKeys = vy.prototype.C;
+    vy.prototype.getProperties = vy.prototype.D;
+    vy.prototype.set = vy.prototype.set;
+    vy.prototype.setProperties = vy.prototype.t;
+    vy.prototype.unset = vy.prototype.I;
+    vy.prototype.changed = vy.prototype.k;
+    vy.prototype.getRevision = vy.prototype.v;
+    vy.prototype.on = vy.prototype.r;
+    vy.prototype.once = vy.prototype.A;
+    vy.prototype.un = vy.prototype.u;
+    vy.prototype.unByKey = vy.prototype.B;
+    uk.prototype.get = uk.prototype.get;
+    uk.prototype.getKeys = uk.prototype.C;
+    uk.prototype.getProperties = uk.prototype.D;
+    uk.prototype.set = uk.prototype.set;
+    uk.prototype.setProperties = uk.prototype.t;
+    uk.prototype.unset = uk.prototype.I;
+    uk.prototype.changed = uk.prototype.k;
+    uk.prototype.getRevision = uk.prototype.v;
+    uk.prototype.on = uk.prototype.r;
+    uk.prototype.once = uk.prototype.A;
+    uk.prototype.un = uk.prototype.u;
+    uk.prototype.unByKey = uk.prototype.B;
+    wk.prototype.getClosestPoint = wk.prototype.e;
+    wk.prototype.getExtent = wk.prototype.G;
+    wk.prototype.get = wk.prototype.get;
+    wk.prototype.getKeys = wk.prototype.C;
+    wk.prototype.getProperties = wk.prototype.D;
+    wk.prototype.set = wk.prototype.set;
+    wk.prototype.setProperties = wk.prototype.t;
+    wk.prototype.unset = wk.prototype.I;
+    wk.prototype.changed = wk.prototype.k;
+    wk.prototype.getRevision = wk.prototype.v;
+    wk.prototype.on = wk.prototype.r;
+    wk.prototype.once = wk.prototype.A;
+    wk.prototype.un = wk.prototype.u;
+    wk.prototype.unByKey = wk.prototype.B;
+    Pm.prototype.getFirstCoordinate = Pm.prototype.ob;
+    Pm.prototype.getLastCoordinate = Pm.prototype.pb;
+    Pm.prototype.getLayout = Pm.prototype.qb;
+    Pm.prototype.applyTransform = Pm.prototype.qa;
+    Pm.prototype.translate = Pm.prototype.Oa;
+    Pm.prototype.getClosestPoint = Pm.prototype.e;
+    Pm.prototype.getExtent = Pm.prototype.G;
+    Pm.prototype.get = Pm.prototype.get;
+    Pm.prototype.getKeys = Pm.prototype.C;
+    Pm.prototype.getProperties = Pm.prototype.D;
+    Pm.prototype.set = Pm.prototype.set;
+    Pm.prototype.setProperties = Pm.prototype.t;
+    Pm.prototype.unset = Pm.prototype.I;
+    Pm.prototype.changed = Pm.prototype.k;
+    Pm.prototype.getRevision = Pm.prototype.v;
+    Pm.prototype.on = Pm.prototype.r;
+    Pm.prototype.once = Pm.prototype.A;
+    Pm.prototype.un = Pm.prototype.u;
+    Pm.prototype.unByKey = Pm.prototype.B;
+    Rm.prototype.getClosestPoint = Rm.prototype.e;
+    Rm.prototype.getExtent = Rm.prototype.G;
+    Rm.prototype.get = Rm.prototype.get;
+    Rm.prototype.getKeys = Rm.prototype.C;
+    Rm.prototype.getProperties = Rm.prototype.D;
+    Rm.prototype.set = Rm.prototype.set;
+    Rm.prototype.setProperties = Rm.prototype.t;
+    Rm.prototype.unset = Rm.prototype.I;
+    Rm.prototype.changed = Rm.prototype.k;
+    Rm.prototype.getRevision = Rm.prototype.v;
+    Rm.prototype.on = Rm.prototype.r;
+    Rm.prototype.once = Rm.prototype.A;
+    Rm.prototype.un = Rm.prototype.u;
+    Rm.prototype.unByKey = Rm.prototype.B;
+    Qk.prototype.getFirstCoordinate = Qk.prototype.ob;
+    Qk.prototype.getLastCoordinate = Qk.prototype.pb;
+    Qk.prototype.getLayout = Qk.prototype.qb;
+    Qk.prototype.applyTransform = Qk.prototype.qa;
+    Qk.prototype.translate = Qk.prototype.Oa;
+    Qk.prototype.getClosestPoint = Qk.prototype.e;
+    Qk.prototype.getExtent = Qk.prototype.G;
+    Qk.prototype.get = Qk.prototype.get;
+    Qk.prototype.getKeys = Qk.prototype.C;
+    Qk.prototype.getProperties = Qk.prototype.D;
+    Qk.prototype.set = Qk.prototype.set;
+    Qk.prototype.setProperties = Qk.prototype.t;
+    Qk.prototype.unset = Qk.prototype.I;
+    Qk.prototype.changed = Qk.prototype.k;
+    Qk.prototype.getRevision = Qk.prototype.v;
+    Qk.prototype.on = Qk.prototype.r;
+    Qk.prototype.once = Qk.prototype.A;
+    Qk.prototype.un = Qk.prototype.u;
+    Qk.prototype.unByKey = Qk.prototype.B;
+    O.prototype.getFirstCoordinate = O.prototype.ob;
+    O.prototype.getLastCoordinate = O.prototype.pb;
+    O.prototype.getLayout = O.prototype.qb;
+    O.prototype.applyTransform = O.prototype.qa;
+    O.prototype.translate = O.prototype.Oa;
+    O.prototype.getClosestPoint = O.prototype.e;
+    O.prototype.getExtent = O.prototype.G;
+    O.prototype.get = O.prototype.get;
+    O.prototype.getKeys = O.prototype.C;
+    O.prototype.getProperties = O.prototype.D;
+    O.prototype.set = O.prototype.set;
+    O.prototype.setProperties = O.prototype.t;
+    O.prototype.unset = O.prototype.I;
+    O.prototype.changed = O.prototype.k;
+    O.prototype.getRevision = O.prototype.v;
+    O.prototype.on = O.prototype.r;
+    O.prototype.once = O.prototype.A;
+    O.prototype.un = O.prototype.u;
+    O.prototype.unByKey = O.prototype.B;
+    Q.prototype.getFirstCoordinate = Q.prototype.ob;
+    Q.prototype.getLastCoordinate = Q.prototype.pb;
+    Q.prototype.getLayout = Q.prototype.qb;
+    Q.prototype.applyTransform = Q.prototype.qa;
+    Q.prototype.translate = Q.prototype.Oa;
+    Q.prototype.getClosestPoint = Q.prototype.e;
+    Q.prototype.getExtent = Q.prototype.G;
+    Q.prototype.get = Q.prototype.get;
+    Q.prototype.getKeys = Q.prototype.C;
+    Q.prototype.getProperties = Q.prototype.D;
+    Q.prototype.set = Q.prototype.set;
+    Q.prototype.setProperties = Q.prototype.t;
+    Q.prototype.unset = Q.prototype.I;
+    Q.prototype.changed = Q.prototype.k;
+    Q.prototype.getRevision = Q.prototype.v;
+    Q.prototype.on = Q.prototype.r;
+    Q.prototype.once = Q.prototype.A;
+    Q.prototype.un = Q.prototype.u;
+    Q.prototype.unByKey = Q.prototype.B;
+    an.prototype.getFirstCoordinate = an.prototype.ob;
+    an.prototype.getLastCoordinate = an.prototype.pb;
+    an.prototype.getLayout = an.prototype.qb;
+    an.prototype.applyTransform = an.prototype.qa;
+    an.prototype.translate = an.prototype.Oa;
+    an.prototype.getClosestPoint = an.prototype.e;
+    an.prototype.getExtent = an.prototype.G;
+    an.prototype.get = an.prototype.get;
+    an.prototype.getKeys = an.prototype.C;
+    an.prototype.getProperties = an.prototype.D;
+    an.prototype.set = an.prototype.set;
+    an.prototype.setProperties = an.prototype.t;
+    an.prototype.unset = an.prototype.I;
+    an.prototype.changed = an.prototype.k;
+    an.prototype.getRevision = an.prototype.v;
+    an.prototype.on = an.prototype.r;
+    an.prototype.once = an.prototype.A;
+    an.prototype.un = an.prototype.u;
+    an.prototype.unByKey = an.prototype.B;
+    R.prototype.getFirstCoordinate = R.prototype.ob;
+    R.prototype.getLastCoordinate = R.prototype.pb;
+    R.prototype.getLayout = R.prototype.qb;
+    R.prototype.applyTransform = R.prototype.qa;
+    R.prototype.translate = R.prototype.Oa;
+    R.prototype.getClosestPoint = R.prototype.e;
+    R.prototype.getExtent = R.prototype.G;
+    R.prototype.get = R.prototype.get;
+    R.prototype.getKeys = R.prototype.C;
+    R.prototype.getProperties = R.prototype.D;
+    R.prototype.set = R.prototype.set;
+    R.prototype.setProperties = R.prototype.t;
+    R.prototype.unset = R.prototype.I;
+    R.prototype.changed = R.prototype.k;
+    R.prototype.getRevision = R.prototype.v;
+    R.prototype.on = R.prototype.r;
+    R.prototype.once = R.prototype.A;
+    R.prototype.un = R.prototype.u;
+    R.prototype.unByKey = R.prototype.B;
+    E.prototype.getFirstCoordinate = E.prototype.ob;
+    E.prototype.getLastCoordinate = E.prototype.pb;
+    E.prototype.getLayout = E.prototype.qb;
+    E.prototype.applyTransform = E.prototype.qa;
+    E.prototype.translate = E.prototype.Oa;
+    E.prototype.getClosestPoint = E.prototype.e;
+    E.prototype.getExtent = E.prototype.G;
+    E.prototype.get = E.prototype.get;
+    E.prototype.getKeys = E.prototype.C;
+    E.prototype.getProperties = E.prototype.D;
+    E.prototype.set = E.prototype.set;
+    E.prototype.setProperties = E.prototype.t;
+    E.prototype.unset = E.prototype.I;
+    E.prototype.changed = E.prototype.k;
+    E.prototype.getRevision = E.prototype.v;
+    E.prototype.on = E.prototype.r;
+    E.prototype.once = E.prototype.A;
+    E.prototype.un = E.prototype.u;
+    E.prototype.unByKey = E.prototype.B;
+    F.prototype.getFirstCoordinate = F.prototype.ob;
+    F.prototype.getLastCoordinate = F.prototype.pb;
+    F.prototype.getLayout = F.prototype.qb;
+    F.prototype.applyTransform = F.prototype.qa;
+    F.prototype.translate = F.prototype.Oa;
+    F.prototype.getClosestPoint = F.prototype.e;
+    F.prototype.getExtent = F.prototype.G;
+    F.prototype.get = F.prototype.get;
+    F.prototype.getKeys = F.prototype.C;
+    F.prototype.getProperties = F.prototype.D;
+    F.prototype.set = F.prototype.set;
+    F.prototype.setProperties = F.prototype.t;
+    F.prototype.unset = F.prototype.I;
+    F.prototype.changed = F.prototype.k;
+    F.prototype.getRevision = F.prototype.v;
+    F.prototype.on = F.prototype.r;
+    F.prototype.once = F.prototype.A;
+    F.prototype.un = F.prototype.u;
+    F.prototype.unByKey = F.prototype.B;
+    ls.prototype.readFeatures = ls.prototype.ja;
+    cs.prototype.readFeatures = cs.prototype.ja;
+    cs.prototype.readFeatures = cs.prototype.ja;
+    ug.prototype.get = ug.prototype.get;
+    ug.prototype.getKeys = ug.prototype.C;
+    ug.prototype.getProperties = ug.prototype.D;
+    ug.prototype.set = ug.prototype.set;
+    ug.prototype.setProperties = ug.prototype.t;
+    ug.prototype.unset = ug.prototype.I;
+    ug.prototype.changed = ug.prototype.k;
+    ug.prototype.getRevision = ug.prototype.v;
+    ug.prototype.on = ug.prototype.r;
+    ug.prototype.once = ug.prototype.A;
+    ug.prototype.un = ug.prototype.u;
+    ug.prototype.unByKey = ug.prototype.B;
+    ch.prototype.getMap = ch.prototype.e;
+    ch.prototype.setMap = ch.prototype.setMap;
+    ch.prototype.setTarget = ch.prototype.c;
+    ch.prototype.get = ch.prototype.get;
+    ch.prototype.getKeys = ch.prototype.C;
+    ch.prototype.getProperties = ch.prototype.D;
+    ch.prototype.set = ch.prototype.set;
+    ch.prototype.setProperties = ch.prototype.t;
+    ch.prototype.unset = ch.prototype.I;
+    ch.prototype.changed = ch.prototype.k;
+    ch.prototype.getRevision = ch.prototype.v;
+    ch.prototype.on = ch.prototype.r;
+    ch.prototype.once = ch.prototype.A;
+    ch.prototype.un = ch.prototype.u;
+    ch.prototype.unByKey = ch.prototype.B;
+    nh.prototype.getMap = nh.prototype.e;
+    nh.prototype.setMap = nh.prototype.setMap;
+    nh.prototype.setTarget = nh.prototype.c;
+    nh.prototype.get = nh.prototype.get;
+    nh.prototype.getKeys = nh.prototype.C;
+    nh.prototype.getProperties = nh.prototype.D;
+    nh.prototype.set = nh.prototype.set;
+    nh.prototype.setProperties = nh.prototype.t;
+    nh.prototype.unset = nh.prototype.I;
+    nh.prototype.changed = nh.prototype.k;
+    nh.prototype.getRevision = nh.prototype.v;
+    nh.prototype.on = nh.prototype.r;
+    nh.prototype.once = nh.prototype.A;
+    nh.prototype.un = nh.prototype.u;
+    nh.prototype.unByKey = nh.prototype.B;
+    oh.prototype.getMap = oh.prototype.e;
+    oh.prototype.setTarget = oh.prototype.c;
+    oh.prototype.get = oh.prototype.get;
+    oh.prototype.getKeys = oh.prototype.C;
+    oh.prototype.getProperties = oh.prototype.D;
+    oh.prototype.set = oh.prototype.set;
+    oh.prototype.setProperties = oh.prototype.t;
+    oh.prototype.unset = oh.prototype.I;
+    oh.prototype.changed = oh.prototype.k;
+    oh.prototype.getRevision = oh.prototype.v;
+    oh.prototype.on = oh.prototype.r;
+    oh.prototype.once = oh.prototype.A;
+    oh.prototype.un = oh.prototype.u;
+    oh.prototype.unByKey = oh.prototype.B;
+    Uq.prototype.getMap = Uq.prototype.e;
+    Uq.prototype.setTarget = Uq.prototype.c;
+    Uq.prototype.get = Uq.prototype.get;
+    Uq.prototype.getKeys = Uq.prototype.C;
+    Uq.prototype.getProperties = Uq.prototype.D;
+    Uq.prototype.set = Uq.prototype.set;
+    Uq.prototype.setProperties = Uq.prototype.t;
+    Uq.prototype.unset = Uq.prototype.I;
+    Uq.prototype.changed = Uq.prototype.k;
+    Uq.prototype.getRevision = Uq.prototype.v;
+    Uq.prototype.on = Uq.prototype.r;
+    Uq.prototype.once = Uq.prototype.A;
+    Uq.prototype.un = Uq.prototype.u;
+    Uq.prototype.unByKey = Uq.prototype.B;
+    fh.prototype.getMap = fh.prototype.e;
+    fh.prototype.setMap = fh.prototype.setMap;
+    fh.prototype.setTarget = fh.prototype.c;
+    fh.prototype.get = fh.prototype.get;
+    fh.prototype.getKeys = fh.prototype.C;
+    fh.prototype.getProperties = fh.prototype.D;
+    fh.prototype.set = fh.prototype.set;
+    fh.prototype.setProperties = fh.prototype.t;
+    fh.prototype.unset = fh.prototype.I;
+    fh.prototype.changed = fh.prototype.k;
+    fh.prototype.getRevision = fh.prototype.v;
+    fh.prototype.on = fh.prototype.r;
+    fh.prototype.once = fh.prototype.A;
+    fh.prototype.un = fh.prototype.u;
+    fh.prototype.unByKey = fh.prototype.B;
+    Zq.prototype.getMap = Zq.prototype.e;
+    Zq.prototype.setMap = Zq.prototype.setMap;
+    Zq.prototype.setTarget = Zq.prototype.c;
+    Zq.prototype.get = Zq.prototype.get;
+    Zq.prototype.getKeys = Zq.prototype.C;
+    Zq.prototype.getProperties = Zq.prototype.D;
+    Zq.prototype.set = Zq.prototype.set;
+    Zq.prototype.setProperties = Zq.prototype.t;
+    Zq.prototype.unset = Zq.prototype.I;
+    Zq.prototype.changed = Zq.prototype.k;
+    Zq.prototype.getRevision = Zq.prototype.v;
+    Zq.prototype.on = Zq.prototype.r;
+    Zq.prototype.once = Zq.prototype.A;
+    Zq.prototype.un = Zq.prototype.u;
+    Zq.prototype.unByKey = Zq.prototype.B;
+    hh.prototype.getMap = hh.prototype.e;
+    hh.prototype.setMap = hh.prototype.setMap;
+    hh.prototype.setTarget = hh.prototype.c;
+    hh.prototype.get = hh.prototype.get;
+    hh.prototype.getKeys = hh.prototype.C;
+    hh.prototype.getProperties = hh.prototype.D;
+    hh.prototype.set = hh.prototype.set;
+    hh.prototype.setProperties = hh.prototype.t;
+    hh.prototype.unset = hh.prototype.I;
+    hh.prototype.changed = hh.prototype.k;
+    hh.prototype.getRevision = hh.prototype.v;
+    hh.prototype.on = hh.prototype.r;
+    hh.prototype.once = hh.prototype.A;
+    hh.prototype.un = hh.prototype.u;
+    hh.prototype.unByKey = hh.prototype.B;
+    nr.prototype.getMap = nr.prototype.e;
+    nr.prototype.setTarget = nr.prototype.c;
+    nr.prototype.get = nr.prototype.get;
+    nr.prototype.getKeys = nr.prototype.C;
+    nr.prototype.getProperties = nr.prototype.D;
+    nr.prototype.set = nr.prototype.set;
+    nr.prototype.setProperties = nr.prototype.t;
+    nr.prototype.unset = nr.prototype.I;
+    nr.prototype.changed = nr.prototype.k;
+    nr.prototype.getRevision = nr.prototype.v;
+    nr.prototype.on = nr.prototype.r;
+    nr.prototype.once = nr.prototype.A;
+    nr.prototype.un = nr.prototype.u;
+    nr.prototype.unByKey = nr.prototype.B;
+    sr.prototype.getMap = sr.prototype.e;
+    sr.prototype.setMap = sr.prototype.setMap;
+    sr.prototype.setTarget = sr.prototype.c;
+    sr.prototype.get = sr.prototype.get;
+    sr.prototype.getKeys = sr.prototype.C;
+    sr.prototype.getProperties = sr.prototype.D;
+    sr.prototype.set = sr.prototype.set;
+    sr.prototype.setProperties = sr.prototype.t;
+    sr.prototype.unset = sr.prototype.I;
+    sr.prototype.changed = sr.prototype.k;
+    sr.prototype.getRevision = sr.prototype.v;
+    sr.prototype.on = sr.prototype.r;
+    sr.prototype.once = sr.prototype.A;
+    sr.prototype.un = sr.prototype.u;
+    sr.prototype.unByKey = sr.prototype.B;
+    return OPENLAYERS.ol;
+}));
\ No newline at end of file